diff --git a/.github/dependabot.yaml b/.github/dependabot.yaml index 7d821dcdf..36ce66984 100644 --- a/.github/dependabot.yaml +++ b/.github/dependabot.yaml @@ -5,183 +5,338 @@ updates: directory: "/" schedule: interval: "daily" + labels: + - "autosubmit" + - package-ecosystem: "npm" + directory: "web_embedding/ng-flutter" + schedule: + interval: "weekly" + ignore: + - dependency-name: "*" + update-types: ["version-update:semver-minor", "version-update:semver-patch"] + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "add_to_app/android_view/flutter_module_using_plugin/" schedule: interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "add_to_app/books/flutter_module_books/" schedule: interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "add_to_app/fullscreen/flutter_module/" schedule: interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "add_to_app/multiple_flutters/multiple_flutters_module/" schedule: interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "add_to_app/plugin/flutter_module_using_plugin/" schedule: interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "add_to_app/prebuilt_module/flutter_module/" schedule: interval: "daily" + labels: + - "autosubmit" + - package-ecosystem: "pub" + directory: "analysis_defaults/" + schedule: + interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "android_splash_screen/" schedule: interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "animations/" schedule: interval: "daily" + labels: + - "autosubmit" + - package-ecosystem: "pub" + directory: "background_isolate_channels/" + schedule: + interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "code_sharing/client/" schedule: interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "code_sharing/server/" schedule: interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "code_sharing/shared/" schedule: interval: "daily" + labels: + - "autosubmit" + - package-ecosystem: "pub" + directory: "deeplink_store_example/" + schedule: + interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "desktop_photo_search/fluent_ui/" schedule: interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "desktop_photo_search/material/" schedule: interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "experimental/context_menus/" schedule: interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "experimental/federated_plugin/federated_plugin/" schedule: interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "experimental/federated_plugin/federated_plugin/example/" schedule: interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "experimental/federated_plugin/federated_plugin_macos/" schedule: interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "experimental/federated_plugin/federated_plugin_platform_interface/" schedule: interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "experimental/federated_plugin/federated_plugin_web/" schedule: interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "experimental/federated_plugin/federated_plugin_windows/" schedule: interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "experimental/linting_tool/" schedule: interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "experimental/material_3_demo/" schedule: interval: "daily" + labels: + - "autosubmit" + - package-ecosystem: "pub" + directory: "experimental/pedometer/" + schedule: + interval: "daily" + labels: + - "autosubmit" + - package-ecosystem: "pub" + directory: "experimental/pedometer/example/" + schedule: + interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "experimental/varfont_shader_puzzle/" schedule: interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "experimental/web_dashboard/" schedule: interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "flutter_maps_firestore/" schedule: interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "form_app/" schedule: interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "game_template/" schedule: interval: "daily" + labels: + - "autosubmit" + - package-ecosystem: "pub" + directory: "google_maps/" + schedule: + interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "infinite_list/" schedule: interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "ios_app_clip/" schedule: interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "isolate_example/" schedule: interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "jsonexample/" schedule: interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "material_3_demo/" schedule: interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "navigation_and_routing/" schedule: interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "place_tracker/" schedule: interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "platform_channels/" schedule: interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "platform_design/" schedule: interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "platform_view_swift/" schedule: interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "provider_counter/" schedule: interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "provider_shopper/" schedule: interval: "daily" + labels: + - "autosubmit" + - package-ecosystem: "pub" + directory: "simple_shader/" + schedule: + interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "simplistic_calculator/" schedule: interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "simplistic_editor/" schedule: interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "testing_app/" schedule: interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "veggieseasons/" schedule: interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "web/_tool/" schedule: interval: "daily" + labels: + - "autosubmit" - package-ecosystem: "pub" directory: "web/samples_index/" schedule: interval: "daily" + labels: + - "autosubmit" + - package-ecosystem: "pub" + directory: "web_embedding/element_embedding_demo/" + schedule: + interval: "daily" + labels: + - "autosubmit" + - package-ecosystem: "pub" + directory: "web_embedding/ng-flutter/flutter/" + schedule: + interval: "daily" + labels: + - "autosubmit" diff --git a/.github/workflows/beta.yml b/.github/workflows/beta.yml index 88a5854e4..1edf5de30 100644 --- a/.github/workflows/beta.yml +++ b/.github/workflows/beta.yml @@ -26,12 +26,12 @@ jobs: matrix: os: [ubuntu-latest, macos-latest, windows-latest] steps: - - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - - uses: actions/setup-java@1df8dbefe2a8cbc99770194893dd902763bee34b + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 + - uses: actions/setup-java@0ab4596768b603586c0de567f2430c30f5b0d2b0 with: distribution: 'zulu' - java-version: '12.x' - - uses: subosito/flutter-action@dbf1fa04f4d2e52c33185153d06cdb5443aa189d + java-version: '17' + - uses: subosito/flutter-action@cc97e1648fff6ca5cc647fa67f47e70f7895510b with: channel: beta - run: ./tool/flutter_ci_script_stable.sh @@ -41,12 +41,12 @@ jobs: runs-on: ubuntu-latest if: github.repository == 'flutter/samples' steps: - - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - - uses: actions/setup-java@1df8dbefe2a8cbc99770194893dd902763bee34b + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 + - uses: actions/setup-java@0ab4596768b603586c0de567f2430c30f5b0d2b0 with: distribution: 'zulu' - java-version: '12.x' - - uses: subosito/flutter-action@dbf1fa04f4d2e52c33185153d06cdb5443aa189d + java-version: '17' + - uses: subosito/flutter-action@cc97e1648fff6ca5cc647fa67f47e70f7895510b with: channel: beta - run: ./tool/android_ci_script.sh @@ -56,12 +56,12 @@ jobs: runs-on: macos-latest if: github.repository == 'flutter/samples' steps: - - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - - uses: actions/setup-java@1df8dbefe2a8cbc99770194893dd902763bee34b + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 + - uses: actions/setup-java@0ab4596768b603586c0de567f2430c30f5b0d2b0 with: distribution: 'zulu' - java-version: '12.x' - - uses: subosito/flutter-action@dbf1fa04f4d2e52c33185153d06cdb5443aa189d + java-version: '17' + - uses: subosito/flutter-action@cc97e1648fff6ca5cc647fa67f47e70f7895510b with: channel: beta - run: ./tool/ios_ci_script.sh diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index e508191af..b6cd18d2f 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -16,12 +16,12 @@ jobs: steps: - name: Checkout - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 with: submodules: true fetch-depth: 0 - - uses: subosito/flutter-action@dbf1fa04f4d2e52c33185153d06cdb5443aa189d + - uses: subosito/flutter-action@cc97e1648fff6ca5cc647fa67f47e70f7895510b - name: Init scripts run: dart pub get @@ -32,7 +32,7 @@ jobs: working-directory: web - name: Deploy - uses: peaceiris/actions-gh-pages@bd8c6b06eba6b3d25d72b7a1767993c0aeee42e7 + uses: peaceiris/actions-gh-pages@373f7f263a76c20808c831209c920827a82a2847 with: github_token: ${{ secrets.GITHUB_TOKEN }} publish_dir: web/samples_index/public diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 3a74475ff..8f8e08243 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -27,25 +27,35 @@ jobs: flutter_version: [stable, beta, master] os: [ubuntu-latest, macos-latest, windows-latest] steps: - - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - - uses: actions/setup-java@1df8dbefe2a8cbc99770194893dd902763bee34b + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 + - uses: actions/setup-java@0ab4596768b603586c0de567f2430c30f5b0d2b0 with: distribution: 'zulu' - java-version: '12.x' - - uses: subosito/flutter-action@dbf1fa04f4d2e52c33185153d06cdb5443aa189d + java-version: '17' + - uses: subosito/flutter-action@cc97e1648fff6ca5cc647fa67f47e70f7895510b with: channel: ${{ matrix.flutter_version }} - run: ./tool/flutter_ci_script_${{ matrix.flutter_version }}.sh + web-samples-index: + name: web/samples_index config check + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 + - uses: subosito/flutter-action@cc97e1648fff6ca5cc647fa67f47e70f7895510b + - run: | + dart pub get + dart run grinder generate + working-directory: web/samples_index android-build: runs-on: ubuntu-latest if: github.repository == 'flutter/samples' steps: - - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - - uses: actions/setup-java@1df8dbefe2a8cbc99770194893dd902763bee34b + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 + - uses: actions/setup-java@0ab4596768b603586c0de567f2430c30f5b0d2b0 with: distribution: 'zulu' - java-version: '12.x' - - uses: subosito/flutter-action@dbf1fa04f4d2e52c33185153d06cdb5443aa189d + java-version: '17' + - uses: subosito/flutter-action@cc97e1648fff6ca5cc647fa67f47e70f7895510b with: channel: stable - run: ./tool/android_ci_script.sh @@ -53,12 +63,12 @@ jobs: runs-on: macos-latest if: github.repository == 'flutter/samples' steps: - - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c - - uses: actions/setup-java@1df8dbefe2a8cbc99770194893dd902763bee34b + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 + - uses: actions/setup-java@0ab4596768b603586c0de567f2430c30f5b0d2b0 with: distribution: 'zulu' - java-version: '12.x' - - uses: subosito/flutter-action@dbf1fa04f4d2e52c33185153d06cdb5443aa189d + java-version: '17' + - uses: subosito/flutter-action@cc97e1648fff6ca5cc647fa67f47e70f7895510b with: channel: stable - run: ./tool/ios_ci_script.sh diff --git a/.github/workflows/mirror.yml b/.github/workflows/mirror.yml deleted file mode 100644 index 6a5f396bd..000000000 --- a/.github/workflows/mirror.yml +++ /dev/null @@ -1,28 +0,0 @@ -# Copyright 2013 The Flutter Authors. All rights reserved. -# Use of this source code is governed by a BSD-style license that can be -# found in the LICENSE file. - -# Mirror master to main branches in the gallery repository. -on: - push: - branches: - - 'main' - -# Declare default permissions as read only. -permissions: read-all - -jobs: - mirror_job: - permissions: - pull-requests: write - runs-on: ubuntu-latest - if: ${{ github.repository == 'flutter/samples' }} - name: Mirror main branch to master branch - steps: - - name: Mirror action step - id: mirror - uses: google/mirror-branch-action@c6b07e441a7ffc5ae15860c1d0a8107a3a151db8 - with: - github-token: ${{ secrets.FLUTTERMIRRORINGBOT_TOKEN }} - source: 'main' - dest: 'master' diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml index abdd7129c..2d07e0b14 100644 --- a/.github/workflows/scorecards-analysis.yml +++ b/.github/workflows/scorecards-analysis.yml @@ -22,12 +22,12 @@ jobs: steps: - name: "Checkout code" - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 with: persist-credentials: false - name: "Run analysis" - uses: ossf/scorecard-action@e38b1902ae4f44df626f11ba0734b14fb91f8f86 + uses: ossf/scorecard-action@483ef80eb98fb506c348f7d62e28055e49fe2398 with: results_file: results.sarif results_format: sarif @@ -42,7 +42,7 @@ jobs: # Upload the results as artifacts (optional). - name: "Upload artifact" - uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce + uses: actions/upload-artifact@a8a3f3ad30e3422c9c7b888a15615d19a852ae32 with: name: SARIF file path: results.sarif @@ -50,6 +50,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@3ebbd71c74ef574dbc558c82f70e52732c8b44fe + uses: github/codeql-action/upload-sarif@cdcdbb579706841c47f7063dda365e292e5cad7a with: sarif_file: results.sarif diff --git a/.github/workflows/verify-web-demos.yml b/.github/workflows/verify-web-demos.yml index ff503242b..e47b6b7df 100644 --- a/.github/workflows/verify-web-demos.yml +++ b/.github/workflows/verify-web-demos.yml @@ -21,11 +21,11 @@ jobs: # - beta steps: - name: Checkout - uses: actions/checkout@ac593985615ec2ede58e132d2e21d2b1cbd6127c + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 with: submodules: true fetch-depth: 0 - - uses: subosito/flutter-action@dbf1fa04f4d2e52c33185153d06cdb5443aa189d + - uses: subosito/flutter-action@cc97e1648fff6ca5cc647fa67f47e70f7895510b with: channel: ${{ matrix.flutter_version }} - name: Init scripts diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index ccd8aaf9e..77fcba2eb 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -71,7 +71,7 @@ Each app should: file used throughout the repo. This file include a base set of analyzer conventions and lints. * Have no analyzer errors or warnings. -* Be formatted with `flutter format`. +* Be formatted with `dart format`. * Include at least one working test in its `test` folder. * Be wired into the list of projects in the CI scripts for [stable](tool/flutter_ci_script_stable.sh), [beta](tool/flutter_ci_script_beta.sh), and [master](tool/flutter_ci_script_master.sh), diff --git a/MAINTENANCE.md b/MAINTENANCE.md deleted file mode 100644 index 21a2ec334..000000000 --- a/MAINTENANCE.md +++ /dev/null @@ -1,22 +0,0 @@ -# Sample app maintenance log - -This table records the last time someone from the Flutter team came did a -maintenance pass on a particular sample (read through the code, updated it to -match any new language/SDK features, etc.). - -| Sample | GH username | Date Updated | -| :------------------------ | -----------------: | -------------: | -| animations | theacodes | 10/7/19 | -| add_to_app | | | -| flutter_maps_firestore | | | -| infinite_list | filiph | 5/13/20 | -| isolate_example | johnpryan | 11/21/19 | -| jsonexample | redbrogdon | 1/3/20 | -| place_tracker | johnpryan | 8/13/20 | -| platform_channels | | | -| platform_design | johnpryan | 10/7/19 | -| platform_view_swift | redbrogdon | 10/7/19 | -| provider_counter | filiph | 8/13/20 | -| provider_shopper | filiph | 8/13/20 | -| testing_app | | | -| veggieseasons | filiph | 8/13/20 | diff --git a/README.md b/README.md index b60ec96c0..a722d51d6 100644 --- a/README.md +++ b/README.md @@ -38,7 +38,7 @@ If you have a general question about one of these samples or how to adapt its techniques for one of your own apps, try one of these resources: * [The FlutterDev Google Group](https://groups.google.com/forum/#!forum/flutter-dev) -* [The Flutter Gitter channel](https://gitter.im/flutter/flutter) +* [The FlutterDev Discord](https://discord.gg/rflutterdev) * [StackOverflow](https://stackoverflow.com/questions/tagged/flutter) If you run into a bug in one of the samples, please file an issue in the diff --git a/add_to_app/android_view/flutter_module_using_plugin/analysis_options.yaml b/add_to_app/android_view/flutter_module_using_plugin/analysis_options.yaml index e2badd73e..13d6fe105 100644 --- a/add_to_app/android_view/flutter_module_using_plugin/analysis_options.yaml +++ b/add_to_app/android_view/flutter_module_using_plugin/analysis_options.yaml @@ -1 +1 @@ -include: ../../../analysis_options.yaml +include: package:analysis_defaults/flutter.yaml diff --git a/add_to_app/android_view/flutter_module_using_plugin/lib/cell.dart b/add_to_app/android_view/flutter_module_using_plugin/lib/cell.dart index 7c6b66656..59e3c7b71 100644 --- a/add_to_app/android_view/flutter_module_using_plugin/lib/cell.dart +++ b/add_to_app/android_view/flutter_module_using_plugin/lib/cell.dart @@ -15,7 +15,7 @@ void main() { } class Cell extends StatefulWidget { - const Cell({Key? key}) : super(key: key); + const Cell({super.key}); @override State createState() => _CellState(); diff --git a/add_to_app/android_view/flutter_module_using_plugin/lib/main.dart b/add_to_app/android_view/flutter_module_using_plugin/lib/main.dart index c76f830c5..0e9360f0f 100644 --- a/add_to_app/android_view/flutter_module_using_plugin/lib/main.dart +++ b/add_to_app/android_view/flutter_module_using_plugin/lib/main.dart @@ -70,7 +70,7 @@ class CounterModel extends ChangeNotifier { /// It offers two routes, one suitable for displaying as a full screen and /// another designed to be part of a larger UI. class MyApp extends StatelessWidget { - const MyApp({Key? key}) : super(key: key); + const MyApp({super.key}); @override Widget build(BuildContext context) { @@ -91,7 +91,7 @@ class MyApp extends StatelessWidget { /// Wraps [Contents] in a Material [Scaffold] so it looks correct when displayed /// full-screen. class FullScreenView extends StatelessWidget { - const FullScreenView({Key? key}) : super(key: key); + const FullScreenView({super.key}); @override Widget build(BuildContext context) { @@ -113,7 +113,7 @@ class FullScreenView extends StatelessWidget { class Contents extends StatelessWidget { final bool showExit; - const Contents({this.showExit = false, Key? key}) : super(key: key); + const Contents({this.showExit = false, super.key}); @override Widget build(BuildContext context) { diff --git a/add_to_app/android_view/flutter_module_using_plugin/pubspec.yaml b/add_to_app/android_view/flutter_module_using_plugin/pubspec.yaml index 050e54c8b..0f6b246d5 100644 --- a/add_to_app/android_view/flutter_module_using_plugin/pubspec.yaml +++ b/add_to_app/android_view/flutter_module_using_plugin/pubspec.yaml @@ -4,7 +4,7 @@ description: An example Flutter module that uses a plugin. version: 1.0.0+1 environment: - sdk: '>=2.12.0 <3.0.0' + sdk: '>=2.19.5 <4.0.0' dependencies: flutter: @@ -14,9 +14,10 @@ dependencies: sensors: ^2.0.3 dev_dependencies: + analysis_defaults: + path: ../../../analysis_defaults flutter_test: sdk: flutter - flutter_lints: ^2.0.1 flutter: uses-material-design: true diff --git a/add_to_app/books/android_books/app/build.gradle b/add_to_app/books/android_books/app/build.gradle index cd3f6cfd9..ad5a03b76 100644 --- a/add_to_app/books/android_books/app/build.gradle +++ b/add_to_app/books/android_books/app/build.gradle @@ -8,7 +8,7 @@ android { defaultConfig { applicationId "dev.flutter.example.books" - minSdkVersion 16 + minSdkVersion 19 targetSdkVersion 29 versionCode 1 versionName "1.0" diff --git a/add_to_app/books/flutter_module_books/analysis_options.yaml b/add_to_app/books/flutter_module_books/analysis_options.yaml index e2badd73e..13d6fe105 100644 --- a/add_to_app/books/flutter_module_books/analysis_options.yaml +++ b/add_to_app/books/flutter_module_books/analysis_options.yaml @@ -1 +1 @@ -include: ../../../analysis_options.yaml +include: package:analysis_defaults/flutter.yaml diff --git a/add_to_app/books/flutter_module_books/lib/main.dart b/add_to_app/books/flutter_module_books/lib/main.dart index edd9ef179..0f9cc3537 100644 --- a/add_to_app/books/flutter_module_books/lib/main.dart +++ b/add_to_app/books/flutter_module_books/lib/main.dart @@ -15,6 +15,7 @@ class MyApp extends StatelessWidget { return MaterialApp( theme: ThemeData( primaryColor: const Color(0xff6200ee), + useMaterial3: true, ), home: const BookDetail(), ); diff --git a/add_to_app/books/flutter_module_books/pubspec.yaml b/add_to_app/books/flutter_module_books/pubspec.yaml index fca9a5868..a61e63728 100644 --- a/add_to_app/books/flutter_module_books/pubspec.yaml +++ b/add_to_app/books/flutter_module_books/pubspec.yaml @@ -6,17 +6,18 @@ description: A Flutter module using the Pigeon package to demonstrate version: 1.0.0+1 environment: - sdk: ">=2.17.0-0 <3.0.0" + sdk: '>=2.19.5 <4.0.0' dependencies: flutter: sdk: flutter dev_dependencies: - pigeon: ">=2.0.2 <8.0.0" + analysis_defaults: + path: ../../../analysis_defaults + pigeon: ">=11.0.0 <13.0.0" flutter_test: sdk: flutter - flutter_lints: ^2.0.1 flutter: uses-material-design: true diff --git a/add_to_app/fullscreen/android_fullscreen/app/build.gradle b/add_to_app/fullscreen/android_fullscreen/app/build.gradle index 955c811e7..f8446b44f 100644 --- a/add_to_app/fullscreen/android_fullscreen/app/build.gradle +++ b/add_to_app/fullscreen/android_fullscreen/app/build.gradle @@ -2,14 +2,12 @@ apply plugin: 'com.android.application' apply plugin: 'kotlin-android' -apply plugin: 'kotlin-android-extensions' - android { - compileSdkVersion 31 + compileSdkVersion 33 defaultConfig { applicationId "dev.flutter.example.androidfullscreen" minSdkVersion 19 - targetSdkVersion 28 + targetSdkVersion 33 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" @@ -31,13 +29,13 @@ dependencies { implementation 'androidx.multidex:multidex:2.0.1' implementation project(':flutter') implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" - implementation 'androidx.appcompat:appcompat:1.1.0' - implementation 'androidx.core:core-ktx:1.1.0' - implementation 'androidx.constraintlayout:constraintlayout:1.1.3' + implementation 'androidx.appcompat:appcompat:1.6.1' + implementation 'androidx.core:core-ktx:1.10.1' + implementation 'androidx.constraintlayout:constraintlayout:2.1.4' testImplementation 'junit:junit:4.12' androidTestImplementation project(':espresso') - androidTestImplementation "com.google.truth:truth:0.42" - androidTestImplementation 'androidx.test:runner:1.1.1' - androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0' - api 'androidx.test:core:1.2.0' + androidTestImplementation "com.google.truth:truth:1.1.3" + androidTestImplementation 'androidx.test:runner:1.5.2' + androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1' + api 'androidx.test:core:1.5.0' } diff --git a/add_to_app/fullscreen/android_fullscreen/app/src/main/AndroidManifest.xml b/add_to_app/fullscreen/android_fullscreen/app/src/main/AndroidManifest.xml index 1be187567..9eba16e91 100644 --- a/add_to_app/fullscreen/android_fullscreen/app/src/main/AndroidManifest.xml +++ b/add_to_app/fullscreen/android_fullscreen/app/src/main/AndroidManifest.xml @@ -10,7 +10,9 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> - + diff --git a/add_to_app/fullscreen/android_fullscreen/build.gradle b/add_to_app/fullscreen/android_fullscreen/build.gradle index 8b9bdb680..ae82de792 100644 --- a/add_to_app/fullscreen/android_fullscreen/build.gradle +++ b/add_to_app/fullscreen/android_fullscreen/build.gradle @@ -1,13 +1,13 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - ext.kotlin_version = '1.6.0' + ext.kotlin_version = '1.8.22' repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:4.1.2' + classpath 'com.android.tools.build:gradle:7.0.4' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/add_to_app/fullscreen/android_fullscreen/gradle/wrapper/gradle-wrapper.jar b/add_to_app/fullscreen/android_fullscreen/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 000000000..7454180f2 Binary files /dev/null and b/add_to_app/fullscreen/android_fullscreen/gradle/wrapper/gradle-wrapper.jar differ diff --git a/add_to_app/fullscreen/android_fullscreen/gradle/wrapper/gradle-wrapper.properties b/add_to_app/fullscreen/android_fullscreen/gradle/wrapper/gradle-wrapper.properties index 915e3c705..ffed3a254 100644 --- a/add_to_app/fullscreen/android_fullscreen/gradle/wrapper/gradle-wrapper.properties +++ b/add_to_app/fullscreen/android_fullscreen/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Mon May 17 23:38:12 PDT 2021 distributionBase=GRADLE_USER_HOME -distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip distributionPath=wrapper/dists -zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/add_to_app/fullscreen/android_fullscreen/gradlew b/add_to_app/fullscreen/android_fullscreen/gradlew index cccdd3d51..1b6c78733 100755 --- a/add_to_app/fullscreen/android_fullscreen/gradlew +++ b/add_to_app/fullscreen/android_fullscreen/gradlew @@ -1,78 +1,129 @@ -#!/usr/bin/env sh +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # Attempt to set APP_HOME + # Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` +APP_BASE_NAME=${0##*/} # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS="" +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -81,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" + JAVACMD=java which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the @@ -89,84 +140,95 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac fi -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) -# For Cygwin, switch paths to Windows format before running java -if $cygwin ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) fi - i=$((i+1)) + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg done - case $i in - (0) set -- ;; - (1) set -- "$args0" ;; - (2) set -- "$args0" "$args1" ;; - (3) set -- "$args0" "$args1" "$args2" ;; - (4) set -- "$args0" "$args1" "$args2" "$args3" ;; - (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; - esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=$(save "$@") - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' exec "$JAVACMD" "$@" diff --git a/add_to_app/fullscreen/android_fullscreen/gradlew.bat b/add_to_app/fullscreen/android_fullscreen/gradlew.bat index f9553162f..107acd32c 100644 --- a/add_to_app/fullscreen/android_fullscreen/gradlew.bat +++ b/add_to_app/fullscreen/android_fullscreen/gradlew.bat @@ -1,3 +1,19 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + @if "%DEBUG%" == "" @echo off @rem ########################################################################## @rem @@ -13,15 +29,18 @@ if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS= +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if "%ERRORLEVEL%" == "0" goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -35,7 +54,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -45,28 +64,14 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - :execute @rem Setup the command line set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell diff --git a/add_to_app/fullscreen/flutter_module/analysis_options.yaml b/add_to_app/fullscreen/flutter_module/analysis_options.yaml index e2badd73e..13d6fe105 100644 --- a/add_to_app/fullscreen/flutter_module/analysis_options.yaml +++ b/add_to_app/fullscreen/flutter_module/analysis_options.yaml @@ -1 +1 @@ -include: ../../../analysis_options.yaml +include: package:analysis_defaults/flutter.yaml diff --git a/add_to_app/fullscreen/flutter_module/lib/main.dart b/add_to_app/fullscreen/flutter_module/lib/main.dart index 3cd02f09b..4615a8971 100644 --- a/add_to_app/fullscreen/flutter_module/lib/main.dart +++ b/add_to_app/fullscreen/flutter_module/lib/main.dart @@ -64,6 +64,7 @@ class MyApp extends StatelessWidget { Widget build(BuildContext context) { return MaterialApp( title: 'Flutter Module Title', + theme: ThemeData.light(useMaterial3: true), routes: { '/': (context) => const FullScreenView(), '/mini': (context) => const Contents(), diff --git a/add_to_app/fullscreen/flutter_module/pubspec.yaml b/add_to_app/fullscreen/flutter_module/pubspec.yaml index de393b656..420858c73 100644 --- a/add_to_app/fullscreen/flutter_module/pubspec.yaml +++ b/add_to_app/fullscreen/flutter_module/pubspec.yaml @@ -4,7 +4,7 @@ description: An example Flutter module. version: 1.0.0+1 environment: - sdk: ">=2.17.0-0 <3.0.0" + sdk: '>=2.19.5 <4.0.0' dependencies: flutter: @@ -12,12 +12,13 @@ dependencies: provider: ^6.0.2 dev_dependencies: + analysis_defaults: + path: ../../../analysis_defaults flutter_test: sdk: flutter flutter_driver: sdk: flutter - espresso: ^0.2.0 - flutter_lints: ^2.0.1 + espresso: ">=0.2.0 <0.4.0" flutter: uses-material-design: true diff --git a/add_to_app/multiple_flutters/multiple_flutters_android/app/build.gradle b/add_to_app/multiple_flutters/multiple_flutters_android/app/build.gradle index 9e76138e2..9448d2fd4 100644 --- a/add_to_app/multiple_flutters/multiple_flutters_android/app/build.gradle +++ b/add_to_app/multiple_flutters/multiple_flutters_android/app/build.gradle @@ -8,12 +8,12 @@ android { self { } } - compileSdkVersion 31 + compileSdkVersion 33 defaultConfig { applicationId "dev.flutter.multipleflutters" minSdkVersion 24 - targetSdkVersion 30 + targetSdkVersion 33 versionCode 1 versionName "1.0" @@ -34,6 +34,7 @@ android { kotlinOptions { jvmTarget = '1.8' } + namespace 'dev.flutter.multipleflutters' } dependencies { diff --git a/add_to_app/multiple_flutters/multiple_flutters_android/app/src/main/AndroidManifest.xml b/add_to_app/multiple_flutters/multiple_flutters_android/app/src/main/AndroidManifest.xml index 0dac4bab1..4be9623e7 100644 --- a/add_to_app/multiple_flutters/multiple_flutters_android/app/src/main/AndroidManifest.xml +++ b/add_to_app/multiple_flutters/multiple_flutters_android/app/src/main/AndroidManifest.xml @@ -1,6 +1,5 @@ - + @@ -18,7 +17,10 @@ android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.MultipleFlutters"> - + @@ -30,12 +32,14 @@ android:configChanges="orientation|keyboardHidden|keyboard|screenSize|locale|layoutDirection|fontScale|screenLayout|density|uiMode" android:hardwareAccelerated="true" android:windowSoftInputMode="adjustResize" + android:exported="true" /> diff --git a/animations/windows/CMakeLists.txt b/animations/windows/CMakeLists.txt index c56d5b218..624ce34e9 100644 --- a/animations/windows/CMakeLists.txt +++ b/animations/windows/CMakeLists.txt @@ -8,7 +8,7 @@ set(BINARY_NAME "animations") # Explicitly opt in to modern CMake behaviors to avoid warnings with recent # versions of CMake. -cmake_policy(SET CMP0063 NEW) +cmake_policy(VERSION 3.14...3.25) # Define build configuration option. get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) @@ -52,6 +52,7 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) # Application build; see runner/CMakeLists.txt. add_subdirectory("runner") + # Generated plugin build rules, which manage building the plugins and adding # them to the application. include(flutter/generated_plugins.cmake) diff --git a/animations/windows/runner/flutter_window.cpp b/animations/windows/runner/flutter_window.cpp index b25e363ef..955ee3038 100644 --- a/animations/windows/runner/flutter_window.cpp +++ b/animations/windows/runner/flutter_window.cpp @@ -31,6 +31,11 @@ bool FlutterWindow::OnCreate() { this->Show(); }); + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + return true; } diff --git a/animations/windows/runner/utils.cpp b/animations/windows/runner/utils.cpp index f5bf9fa0f..b2b08734d 100644 --- a/animations/windows/runner/utils.cpp +++ b/animations/windows/runner/utils.cpp @@ -47,16 +47,17 @@ std::string Utf8FromUtf16(const wchar_t* utf16_string) { } int target_length = ::WideCharToMultiByte( CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, nullptr, 0, nullptr, nullptr); + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); std::string utf8_string; - if (target_length == 0 || target_length > utf8_string.max_size()) { + if (target_length <= 0 || target_length > utf8_string.max_size()) { return utf8_string; } utf8_string.resize(target_length); int converted_length = ::WideCharToMultiByte( CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, utf8_string.data(), - target_length, nullptr, nullptr); + input_length, utf8_string.data(), target_length, nullptr, nullptr); if (converted_length == 0) { return std::string(); } diff --git a/animations/windows/runner/win32_window.cpp b/animations/windows/runner/win32_window.cpp index 041a38554..60608d0fe 100644 --- a/animations/windows/runner/win32_window.cpp +++ b/animations/windows/runner/win32_window.cpp @@ -60,7 +60,7 @@ class WindowClassRegistrar { public: ~WindowClassRegistrar() = default; - // Returns the singleton registar instance. + // Returns the singleton registrar instance. static WindowClassRegistrar* GetInstance() { if (!instance_) { instance_ = new WindowClassRegistrar(); diff --git a/animations/windows/runner/win32_window.h b/animations/windows/runner/win32_window.h index c86632d8a..e901dde68 100644 --- a/animations/windows/runner/win32_window.h +++ b/animations/windows/runner/win32_window.h @@ -77,7 +77,7 @@ class Win32Window { // OS callback called by message pump. Handles the WM_NCCREATE message which // is passed when the non-client area is being created and enables automatic // non-client DPI scaling so that the non-client area automatically - // responsponds to changes in DPI. All other messages are handled by + // responds to changes in DPI. All other messages are handled by // MessageHandler. static LRESULT CALLBACK WndProc(HWND const window, UINT const message, diff --git a/background_isolate_channels/analysis_options.yaml b/background_isolate_channels/analysis_options.yaml index 5e2133eb6..13d6fe105 100644 --- a/background_isolate_channels/analysis_options.yaml +++ b/background_isolate_channels/analysis_options.yaml @@ -1 +1 @@ -include: ../analysis_options.yaml +include: package:analysis_defaults/flutter.yaml diff --git a/background_isolate_channels/lib/main.dart b/background_isolate_channels/lib/main.dart index 49f9c19e1..616770efb 100644 --- a/background_isolate_channels/lib/main.dart +++ b/background_isolate_channels/lib/main.dart @@ -31,6 +31,7 @@ class MyApp extends StatelessWidget { title: 'Background Isolate Channels', theme: ThemeData( primarySwatch: Colors.blue, + useMaterial3: true, ), home: const MyHomePage(title: 'Background Isolate Channels'), ); @@ -124,26 +125,24 @@ class _MyHomePageState extends State { return Scaffold( appBar: AppBar( title: Text(widget.title), - ), - body: Column( - children: [ - TextField( - onChanged: - _database == null ? null : (query) => _refresh(query: query), - decoration: const InputDecoration( - labelText: 'Search', - suffixIcon: Icon(Icons.search), - ), - ), - Expanded( - child: ListView.builder( - itemBuilder: (context, index) { - return ListTile(title: Text(_entries![index])); - }, - itemCount: _entries?.length ?? 0, + bottom: PreferredSize( + preferredSize: const Size.fromHeight(kToolbarHeight), + child: Padding( + padding: const EdgeInsets.symmetric(horizontal: 8.0), + child: SearchBar( + hintText: 'Search', + onChanged: + _database == null ? null : (query) => _refresh(query: query), + trailing: const [Icon(Icons.search), SizedBox(width: 8)], ), ), - ], + ), + ), + body: ListView.builder( + itemBuilder: (context, index) { + return ListTile(title: Text(_entries![index])); + }, + itemCount: _entries?.length ?? 0, ), floatingActionButton: FloatingActionButton( onPressed: _database == null ? null : _addDate, diff --git a/background_isolate_channels/lib/simple_database.dart b/background_isolate_channels/lib/simple_database.dart index baac65a13..0f04dee74 100644 --- a/background_isolate_channels/lib/simple_database.dart +++ b/background_isolate_channels/lib/simple_database.dart @@ -132,16 +132,12 @@ class SimpleDatabase { RootIsolateToken rootIsolateToken = RootIsolateToken.instance!; _sendPort .send(_Command(_Codes.init, arg0: _path, arg1: rootIsolateToken)); - break; case _Codes.ack: _completers.removeLast().complete(); - break; case _Codes.result: _resultsStream.last.add(command.arg0 as String); - break; case _Codes.done: _resultsStream.removeLast().close(); - break; default: debugPrint('SimpleDatabase unrecognized command: ${command.code}'); } @@ -198,13 +194,10 @@ class _SimpleDatabaseServer { // ---------------------------------------------------------------------- BackgroundIsolateBinaryMessenger.ensureInitialized(rootIsolateToken); _sendPort.send(const _Command(_Codes.ack, arg0: null)); - break; case _Codes.add: _doAddEntry(command.arg0 as String); - break; case _Codes.query: _doFind(command.arg0 as String); - break; default: debugPrint( '_SimpleDatabaseServer unrecognized command ${command.code}'); diff --git a/background_isolate_channels/pubspec.yaml b/background_isolate_channels/pubspec.yaml index 9c301f542..50d6a3213 100644 --- a/background_isolate_channels/pubspec.yaml +++ b/background_isolate_channels/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: '>=2.19.0-224.0.dev <3.0.0' + sdk: ^3.1.0 dependencies: cupertino_icons: ^1.0.2 @@ -16,10 +16,11 @@ dependencies: path: ^1.8.2 path_provider: ^2.0.11 shared_preferences: ^2.0.15 - uuid: ^3.0.6 + uuid: ^4.0.0 dev_dependencies: - flutter_lints: ^2.0.1 + analysis_defaults: + path: ../analysis_defaults flutter_test: sdk: flutter diff --git a/code_sharing/client/.metadata b/code_sharing/client/.metadata index bf169f91c..a7cbe7932 100644 --- a/code_sharing/client/.metadata +++ b/code_sharing/client/.metadata @@ -4,8 +4,8 @@ # This file should be version controlled. version: - revision: f16fe11ecf81a85d926ea3817ba1c87bdbbefa41 - channel: main + revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + channel: beta project_type: app @@ -13,26 +13,26 @@ project_type: app migration: platforms: - platform: root - create_revision: f16fe11ecf81a85d926ea3817ba1c87bdbbefa41 - base_revision: f16fe11ecf81a85d926ea3817ba1c87bdbbefa41 + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f - platform: android - create_revision: f16fe11ecf81a85d926ea3817ba1c87bdbbefa41 - base_revision: f16fe11ecf81a85d926ea3817ba1c87bdbbefa41 + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f - platform: ios - create_revision: f16fe11ecf81a85d926ea3817ba1c87bdbbefa41 - base_revision: f16fe11ecf81a85d926ea3817ba1c87bdbbefa41 + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f - platform: linux - create_revision: f16fe11ecf81a85d926ea3817ba1c87bdbbefa41 - base_revision: f16fe11ecf81a85d926ea3817ba1c87bdbbefa41 + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f - platform: macos - create_revision: f16fe11ecf81a85d926ea3817ba1c87bdbbefa41 - base_revision: f16fe11ecf81a85d926ea3817ba1c87bdbbefa41 + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f - platform: web - create_revision: f16fe11ecf81a85d926ea3817ba1c87bdbbefa41 - base_revision: f16fe11ecf81a85d926ea3817ba1c87bdbbefa41 + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f - platform: windows - create_revision: f16fe11ecf81a85d926ea3817ba1c87bdbbefa41 - base_revision: f16fe11ecf81a85d926ea3817ba1c87bdbbefa41 + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f # User provided section diff --git a/code_sharing/client/android/app/build.gradle b/code_sharing/client/android/app/build.gradle index 9f91be9f6..79da13065 100644 --- a/code_sharing/client/android/app/build.gradle +++ b/code_sharing/client/android/app/build.gradle @@ -46,7 +46,7 @@ android { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "com.example.client" // You can update the following values to match your application needs. - // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. minSdkVersion flutter.minSdkVersion targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() diff --git a/code_sharing/client/android/app/src/main/AndroidManifest.xml b/code_sharing/client/android/app/src/main/AndroidManifest.xml index fc7c7bda5..98c35ebf8 100644 --- a/code_sharing/client/android/app/src/main/AndroidManifest.xml +++ b/code_sharing/client/android/app/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ - diff --git a/code_sharing/client/android/build.gradle b/code_sharing/client/android/build.gradle index 58a8c74b1..e50c3a02b 100644 --- a/code_sharing/client/android/build.gradle +++ b/code_sharing/client/android/build.gradle @@ -6,7 +6,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.2.0' + classpath 'com.android.tools.build:gradle:7.3.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/code_sharing/client/ios/Runner.xcodeproj/project.pbxproj b/code_sharing/client/ios/Runner.xcodeproj/project.pbxproj index 42204d380..a9dff4ee4 100644 --- a/code_sharing/client/ios/Runner.xcodeproj/project.pbxproj +++ b/code_sharing/client/ios/Runner.xcodeproj/project.pbxproj @@ -13,8 +13,19 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXCopyFilesBuildPhase section */ 9705A1C41CF9048500538489 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; @@ -42,6 +53,8 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -66,12 +79,21 @@ name = Flutter; sourceTree = ""; }; + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; 97C146E51CF9000F007C117D = { isa = PBXGroup; children = ( 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, ); sourceTree = ""; }; @@ -79,6 +101,7 @@ isa = PBXGroup; children = ( 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, ); name = Products; sourceTree = ""; @@ -101,6 +124,24 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C807D294A63A400263BE5 /* Sources */, + 331C807E294A63A400263BE5 /* Frameworks */, + 331C807F294A63A400263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; 97C146ED1CF9000F007C117D /* Runner */ = { isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; @@ -130,6 +171,10 @@ LastUpgradeCheck = 1300; ORGANIZATIONNAME = ""; TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; 97C146ED1CF9000F007C117D = { CreatedOnToolsVersion = 7.3.1; LastSwiftMigration = 1100; @@ -150,11 +195,19 @@ projectRoot = ""; targets = ( 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EC1CF9000F007C117D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -176,6 +229,7 @@ files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); name = "Thin Binary"; outputPaths = ( @@ -202,6 +256,14 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EA1CF9000F007C117D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -213,6 +275,14 @@ }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin PBXVariantGroup section */ 97C146FA1CF9000F007C117D /* Main.storyboard */ = { isa = PBXVariantGroup; @@ -290,6 +360,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = TC87DMJLQP; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -304,6 +375,56 @@ }; name = Profile; }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AE0B7B92F70575B8D7E0D07E /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.client.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 89B67EB44CE7B6631473024E /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.client.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 640959BDD8F10B91D80A66BE /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.client.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; 97C147031CF9000F007C117D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -418,6 +539,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = TC87DMJLQP; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -440,6 +562,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = TC87DMJLQP; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -457,6 +580,16 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/code_sharing/client/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/code_sharing/client/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index c87d15a33..e42adcb34 100644 --- a/code_sharing/client/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/code_sharing/client/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -37,6 +37,17 @@ + + + + { ), if (isWriting) ...[ const SizedBox(height: 10), - Row( + const Row( mainAxisAlignment: MainAxisAlignment.center, - children: const [ + children: [ Text( 'Communicating with server...', style: TextStyle(fontSize: 32, color: Colors.blue), diff --git a/code_sharing/client/linux/CMakeLists.txt b/code_sharing/client/linux/CMakeLists.txt index 4d47043c4..352134145 100644 --- a/code_sharing/client/linux/CMakeLists.txt +++ b/code_sharing/client/linux/CMakeLists.txt @@ -86,6 +86,7 @@ set_target_properties(${BINARY_NAME} RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" ) + # Generated plugin build rules, which manage building the plugins and adding # them to the application. include(flutter/generated_plugins.cmake) diff --git a/code_sharing/client/macos/Runner.xcodeproj/project.pbxproj b/code_sharing/client/macos/Runner.xcodeproj/project.pbxproj index 85d410774..e628dcf9d 100644 --- a/code_sharing/client/macos/Runner.xcodeproj/project.pbxproj +++ b/code_sharing/client/macos/Runner.xcodeproj/project.pbxproj @@ -21,6 +21,7 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; @@ -29,6 +30,13 @@ /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 33CC10E52044A3C60003C045 /* Project object */; @@ -52,6 +60,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* client.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "client.app"; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -71,6 +81,13 @@ /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 33CC10EA2044A3C60003C045 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -81,6 +98,14 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; 33BA886A226E78AF003329D5 /* Configs */ = { isa = PBXGroup; children = ( @@ -97,6 +122,7 @@ children = ( 33FAB671232836740065AC1E /* Runner */, 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, ); @@ -106,6 +132,7 @@ isa = PBXGroup; children = ( 33CC10ED2044A3C60003C045 /* client.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, ); name = Products; sourceTree = ""; @@ -155,6 +182,24 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; 33CC10EC2044A3C60003C045 /* Runner */ = { isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; @@ -185,6 +230,10 @@ LastUpgradeCheck = 1300; ORGANIZATIONNAME = ""; TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; 33CC10EC2044A3C60003C045 = { CreatedOnToolsVersion = 9.2; LastSwiftMigration = 1100; @@ -215,12 +264,20 @@ projectRoot = ""; targets = ( 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, 33CC111A2044C6BA0003C045 /* Flutter Assemble */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 33CC10EB2044A3C60003C045 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -274,6 +331,14 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 33CC10E92044A3C60003C045 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -287,6 +352,11 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; @@ -307,6 +377,48 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.client.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/client.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/client"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.client.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/client.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/client"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.client.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/client.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/client"; + }; + name = Profile; + }; 338D0CE9231458BD00FA5F75 /* Profile */ = { isa = XCBuildConfiguration; baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; @@ -345,7 +457,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.13; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; @@ -424,7 +536,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.13; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; @@ -471,7 +583,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.13; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; @@ -537,6 +649,16 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/code_sharing/client/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/code_sharing/client/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 1f21100e6..a8dff9450 100644 --- a/code_sharing/client/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/code_sharing/client/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -37,6 +37,17 @@ + + + + =2.18.1 <3.0.0" + sdk: ^3.1.0 dependencies: cupertino_icons: ^1.0.2 flutter: sdk: flutter - http: ^0.13.5 + http: ^1.0.0 shared: path: ../shared dev_dependencies: - flutter_lints: ^2.0.0 + flutter_lints: ^3.0.0 flutter_test: sdk: flutter diff --git a/code_sharing/client/windows/CMakeLists.txt b/code_sharing/client/windows/CMakeLists.txt index e6f6ba69d..53ae2b65e 100644 --- a/code_sharing/client/windows/CMakeLists.txt +++ b/code_sharing/client/windows/CMakeLists.txt @@ -52,6 +52,7 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) # Application build; see runner/CMakeLists.txt. add_subdirectory("runner") + # Generated plugin build rules, which manage building the plugins and adding # them to the application. include(flutter/generated_plugins.cmake) diff --git a/code_sharing/client/windows/runner/Runner.rc b/code_sharing/client/windows/runner/Runner.rc index 88f5545b8..f189daf92 100644 --- a/code_sharing/client/windows/runner/Runner.rc +++ b/code_sharing/client/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "client" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "client" "\0" - VALUE "LegalCopyright", "Copyright (C) 2022 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2023 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "client.exe" "\0" VALUE "ProductName", "client" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/code_sharing/client/windows/runner/utils.cpp b/code_sharing/client/windows/runner/utils.cpp index f5bf9fa0f..b2b08734d 100644 --- a/code_sharing/client/windows/runner/utils.cpp +++ b/code_sharing/client/windows/runner/utils.cpp @@ -47,16 +47,17 @@ std::string Utf8FromUtf16(const wchar_t* utf16_string) { } int target_length = ::WideCharToMultiByte( CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, nullptr, 0, nullptr, nullptr); + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); std::string utf8_string; - if (target_length == 0 || target_length > utf8_string.max_size()) { + if (target_length <= 0 || target_length > utf8_string.max_size()) { return utf8_string; } utf8_string.resize(target_length); int converted_length = ::WideCharToMultiByte( CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, utf8_string.data(), - target_length, nullptr, nullptr); + input_length, utf8_string.data(), target_length, nullptr, nullptr); if (converted_length == 0) { return std::string(); } diff --git a/code_sharing/client/windows/runner/win32_window.cpp b/code_sharing/client/windows/runner/win32_window.cpp index 041a38554..60608d0fe 100644 --- a/code_sharing/client/windows/runner/win32_window.cpp +++ b/code_sharing/client/windows/runner/win32_window.cpp @@ -60,7 +60,7 @@ class WindowClassRegistrar { public: ~WindowClassRegistrar() = default; - // Returns the singleton registar instance. + // Returns the singleton registrar instance. static WindowClassRegistrar* GetInstance() { if (!instance_) { instance_ = new WindowClassRegistrar(); diff --git a/code_sharing/client/windows/runner/win32_window.h b/code_sharing/client/windows/runner/win32_window.h index c86632d8a..e901dde68 100644 --- a/code_sharing/client/windows/runner/win32_window.h +++ b/code_sharing/client/windows/runner/win32_window.h @@ -77,7 +77,7 @@ class Win32Window { // OS callback called by message pump. Handles the WM_NCCREATE message which // is passed when the non-client area is being created and enables automatic // non-client DPI scaling so that the non-client area automatically - // responsponds to changes in DPI. All other messages are handled by + // responds to changes in DPI. All other messages are handled by // MessageHandler. static LRESULT CALLBACK WndProc(HWND const window, UINT const message, diff --git a/code_sharing/server/bin/server.dart b/code_sharing/server/bin/server.dart index f27ec5f23..6cb3608dd 100644 --- a/code_sharing/server/bin/server.dart +++ b/code_sharing/server/bin/server.dart @@ -27,7 +27,8 @@ void main(List args) async { final ip = InternetAddress.anyIPv4; // Configure a pipeline that logs requests. - final handler = Pipeline().addMiddleware(logRequests()).addHandler(_router); + final handler = + Pipeline().addMiddleware(logRequests()).addHandler(_router.call); // For running in containers, we respect the PORT environment variable. final port = int.parse(Platform.environment['PORT'] ?? '8080'); diff --git a/code_sharing/server/pubspec.yaml b/code_sharing/server/pubspec.yaml index 0641e64f9..f11c7c152 100644 --- a/code_sharing/server/pubspec.yaml +++ b/code_sharing/server/pubspec.yaml @@ -4,7 +4,7 @@ version: 1.0.0 publish_to: "none" environment: - sdk: ">=2.18.1 <3.0.0" + sdk: ^3.1.0 dependencies: args: ^2.0.0 @@ -14,6 +14,6 @@ dependencies: path: ../shared dev_dependencies: - http: ^0.13.0 - lints: ^2.0.0 + http: ^1.0.0 + lints: ^3.0.0 test: ^1.15.0 diff --git a/code_sharing/shared/pubspec.yaml b/code_sharing/shared/pubspec.yaml index 49a76916c..ca9bd641f 100644 --- a/code_sharing/shared/pubspec.yaml +++ b/code_sharing/shared/pubspec.yaml @@ -3,7 +3,7 @@ description: Common data models required by our client and server version: 1.0.0 environment: - sdk: ">=2.18.1 <3.0.0" + sdk: ^3.1.0 dependencies: freezed_annotation: ^2.1.0 @@ -13,5 +13,5 @@ dev_dependencies: build_runner: ^2.2.1 freezed: ^2.1.1 json_serializable: ^6.4.0 - lints: ^2.0.0 + lints: ">=2.0.0 <4.0.0" test: ^1.16.0 diff --git a/deeplink_store_example/.gitignore b/deeplink_store_example/.gitignore new file mode 100644 index 000000000..24476c5d1 --- /dev/null +++ b/deeplink_store_example/.gitignore @@ -0,0 +1,44 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/deeplink_store_example/.metadata b/deeplink_store_example/.metadata new file mode 100644 index 000000000..fc75957ff --- /dev/null +++ b/deeplink_store_example/.metadata @@ -0,0 +1,45 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled. + +version: + revision: 9d49bc6f8521b9f1119c6b05088154f7c95dbcd8 + channel: issues/120405 + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: 9d49bc6f8521b9f1119c6b05088154f7c95dbcd8 + base_revision: 9d49bc6f8521b9f1119c6b05088154f7c95dbcd8 + - platform: android + create_revision: 9d49bc6f8521b9f1119c6b05088154f7c95dbcd8 + base_revision: 9d49bc6f8521b9f1119c6b05088154f7c95dbcd8 + - platform: ios + create_revision: 9d49bc6f8521b9f1119c6b05088154f7c95dbcd8 + base_revision: 9d49bc6f8521b9f1119c6b05088154f7c95dbcd8 + - platform: linux + create_revision: 9d49bc6f8521b9f1119c6b05088154f7c95dbcd8 + base_revision: 9d49bc6f8521b9f1119c6b05088154f7c95dbcd8 + - platform: macos + create_revision: 9d49bc6f8521b9f1119c6b05088154f7c95dbcd8 + base_revision: 9d49bc6f8521b9f1119c6b05088154f7c95dbcd8 + - platform: web + create_revision: 9d49bc6f8521b9f1119c6b05088154f7c95dbcd8 + base_revision: 9d49bc6f8521b9f1119c6b05088154f7c95dbcd8 + - platform: windows + create_revision: 9d49bc6f8521b9f1119c6b05088154f7c95dbcd8 + base_revision: 9d49bc6f8521b9f1119c6b05088154f7c95dbcd8 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/deeplink_store_example/README.md b/deeplink_store_example/README.md new file mode 100644 index 000000000..3dfde0477 --- /dev/null +++ b/deeplink_store_example/README.md @@ -0,0 +1,12 @@ +# deeplink_store_example + +A store app that includes three screen, ProductList, ProductDetails, and ProductCategoryList. +This app uses go_router to create routing table for all three screens. It also updates the project +parameters for Android and iOS to support deeplinks. + +To learn more, visit . + +## Getting Started + +This app put a placeholder for Android Intent Filters and iOS Associated Domains. To use this +example, update them with your own web domain. diff --git a/deeplink_store_example/analysis_options.yaml b/deeplink_store_example/analysis_options.yaml new file mode 100644 index 000000000..61b6c4de1 --- /dev/null +++ b/deeplink_store_example/analysis_options.yaml @@ -0,0 +1,29 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at + # https://dart-lang.github.io/linter/lints/index.html. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/deeplink_store_example/android/.gitignore b/deeplink_store_example/android/.gitignore new file mode 100644 index 000000000..6f568019d --- /dev/null +++ b/deeplink_store_example/android/.gitignore @@ -0,0 +1,13 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app +key.properties +**/*.keystore +**/*.jks diff --git a/deeplink_store_example/android/app/build.gradle b/deeplink_store_example/android/app/build.gradle new file mode 100644 index 000000000..0ba25ea59 --- /dev/null +++ b/deeplink_store_example/android/app/build.gradle @@ -0,0 +1,71 @@ +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + +def flutterRoot = localProperties.getProperty('flutter.sdk') +if (flutterRoot == null) { + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") +} + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" + +android { + compileSdkVersion flutter.compileSdkVersion + ndkVersion flutter.ndkVersion + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = '1.8' + } + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "com.example.deeplink_store_example" + // You can update the following values to match your application needs. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. + minSdkVersion flutter.minSdkVersion + targetSdkVersion flutter.targetSdkVersion + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig signingConfigs.debug + } + } +} + +flutter { + source '../..' +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" +} diff --git a/deeplink_store_example/android/app/src/debug/AndroidManifest.xml b/deeplink_store_example/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 000000000..0cdf6d89a --- /dev/null +++ b/deeplink_store_example/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + diff --git a/deeplink_store_example/android/app/src/main/AndroidManifest.xml b/deeplink_store_example/android/app/src/main/AndroidManifest.xml new file mode 100644 index 000000000..0b04d1c7e --- /dev/null +++ b/deeplink_store_example/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/deeplink_store_example/android/app/src/main/kotlin/com/example/deeplink_store_example/MainActivity.kt b/deeplink_store_example/android/app/src/main/kotlin/com/example/deeplink_store_example/MainActivity.kt new file mode 100644 index 000000000..6d9e34473 --- /dev/null +++ b/deeplink_store_example/android/app/src/main/kotlin/com/example/deeplink_store_example/MainActivity.kt @@ -0,0 +1,6 @@ +package com.example.deeplink_store_example + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() { +} diff --git a/deeplink_store_example/android/app/src/main/res/drawable-v21/launch_background.xml b/deeplink_store_example/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 000000000..f74085f3f --- /dev/null +++ b/deeplink_store_example/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/deeplink_store_example/android/app/src/main/res/drawable/launch_background.xml b/deeplink_store_example/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 000000000..304732f88 --- /dev/null +++ b/deeplink_store_example/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/deeplink_store_example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/deeplink_store_example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 000000000..db77bb4b7 Binary files /dev/null and b/deeplink_store_example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/deeplink_store_example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/deeplink_store_example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 000000000..17987b79b Binary files /dev/null and b/deeplink_store_example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/deeplink_store_example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/deeplink_store_example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 000000000..09d439148 Binary files /dev/null and b/deeplink_store_example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/deeplink_store_example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/deeplink_store_example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 000000000..d5f1c8d34 Binary files /dev/null and b/deeplink_store_example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/deeplink_store_example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/deeplink_store_example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 000000000..4d6372eeb Binary files /dev/null and b/deeplink_store_example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/deeplink_store_example/android/app/src/main/res/values-night/styles.xml b/deeplink_store_example/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 000000000..06952be74 --- /dev/null +++ b/deeplink_store_example/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/deeplink_store_example/android/app/src/main/res/values/styles.xml b/deeplink_store_example/android/app/src/main/res/values/styles.xml new file mode 100644 index 000000000..cb1ef8805 --- /dev/null +++ b/deeplink_store_example/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/deeplink_store_example/android/app/src/profile/AndroidManifest.xml b/deeplink_store_example/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 000000000..0cdf6d89a --- /dev/null +++ b/deeplink_store_example/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + diff --git a/deeplink_store_example/android/build.gradle b/deeplink_store_example/android/build.gradle new file mode 100644 index 000000000..e50c3a02b --- /dev/null +++ b/deeplink_store_example/android/build.gradle @@ -0,0 +1,31 @@ +buildscript { + ext.kotlin_version = '1.7.10' + repositories { + google() + mavenCentral() + } + + dependencies { + classpath 'com.android.tools.build:gradle:7.3.0' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +allprojects { + repositories { + google() + mavenCentral() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/deeplink_store_example/android/gradle.properties b/deeplink_store_example/android/gradle.properties new file mode 100644 index 000000000..94adc3a3f --- /dev/null +++ b/deeplink_store_example/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx1536M +android.useAndroidX=true +android.enableJetifier=true diff --git a/deeplink_store_example/android/gradle/wrapper/gradle-wrapper.properties b/deeplink_store_example/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..3c472b99c --- /dev/null +++ b/deeplink_store_example/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip diff --git a/deeplink_store_example/android/settings.gradle b/deeplink_store_example/android/settings.gradle new file mode 100644 index 000000000..44e62bcf0 --- /dev/null +++ b/deeplink_store_example/android/settings.gradle @@ -0,0 +1,11 @@ +include ':app' + +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() + +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } + +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/deeplink_store_example/ios/.gitignore b/deeplink_store_example/ios/.gitignore new file mode 100644 index 000000000..7a7f9873a --- /dev/null +++ b/deeplink_store_example/ios/.gitignore @@ -0,0 +1,34 @@ +**/dgph +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/ephemeral/ +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 diff --git a/deeplink_store_example/ios/Flutter/AppFrameworkInfo.plist b/deeplink_store_example/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 000000000..9625e105d --- /dev/null +++ b/deeplink_store_example/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 11.0 + + diff --git a/deeplink_store_example/ios/Flutter/Debug.xcconfig b/deeplink_store_example/ios/Flutter/Debug.xcconfig new file mode 100644 index 000000000..592ceee85 --- /dev/null +++ b/deeplink_store_example/ios/Flutter/Debug.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/deeplink_store_example/ios/Flutter/Release.xcconfig b/deeplink_store_example/ios/Flutter/Release.xcconfig new file mode 100644 index 000000000..592ceee85 --- /dev/null +++ b/deeplink_store_example/ios/Flutter/Release.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/deeplink_store_example/ios/Runner.xcodeproj/project.pbxproj b/deeplink_store_example/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 000000000..bc42a9e09 --- /dev/null +++ b/deeplink_store_example/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,617 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 2E60A9A729B7FCB200E78C88 /* Runner.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Runner.entitlements; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 2E60A9A729B7FCB200E78C88 /* Runner.entitlements */, + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C807D294A63A400263BE5 /* Sources */, + 331C807F294A63A400263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1300; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = S8QB4VV633; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.deeplinkStoreExample; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.deeplinkStoreExample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.deeplinkStoreExample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.deeplinkStoreExample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = S8QB4VV633; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.deeplinkStoreExample; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Runner.entitlements; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = S8QB4VV633; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.deeplinkStoreExample; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/deeplink_store_example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/deeplink_store_example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..919434a62 --- /dev/null +++ b/deeplink_store_example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/deeplink_store_example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/deeplink_store_example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/deeplink_store_example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/deeplink_store_example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/deeplink_store_example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 000000000..f9b0d7c5e --- /dev/null +++ b/deeplink_store_example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/deeplink_store_example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/deeplink_store_example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 000000000..e42adcb34 --- /dev/null +++ b/deeplink_store_example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/deeplink_store_example/ios/Runner.xcworkspace/contents.xcworkspacedata b/deeplink_store_example/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..1d526a16e --- /dev/null +++ b/deeplink_store_example/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/deeplink_store_example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/deeplink_store_example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/deeplink_store_example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/deeplink_store_example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/deeplink_store_example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 000000000..f9b0d7c5e --- /dev/null +++ b/deeplink_store_example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/deeplink_store_example/ios/Runner/AppDelegate.swift b/deeplink_store_example/ios/Runner/AppDelegate.swift new file mode 100644 index 000000000..70693e4a8 --- /dev/null +++ b/deeplink_store_example/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import UIKit +import Flutter + +@UIApplicationMain +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000..d36b1fab2 --- /dev/null +++ b/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 000000000..dc9ada472 Binary files /dev/null and b/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ diff --git a/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png new file mode 100644 index 000000000..7353c41ec Binary files /dev/null and b/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 000000000..797d452e4 Binary files /dev/null and b/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 000000000..6ed2d933e Binary files /dev/null and b/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 000000000..4cd7b0099 Binary files /dev/null and b/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 000000000..fe730945a Binary files /dev/null and b/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png new file mode 100644 index 000000000..321773cd8 Binary files /dev/null and b/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png new file mode 100644 index 000000000..797d452e4 Binary files /dev/null and b/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 000000000..502f463a9 Binary files /dev/null and b/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 000000000..0ec303439 Binary files /dev/null and b/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 000000000..0ec303439 Binary files /dev/null and b/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 000000000..e9f5fea27 Binary files /dev/null and b/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 000000000..84ac32ae7 Binary files /dev/null and b/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png new file mode 100644 index 000000000..8953cba09 Binary files /dev/null and b/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 000000000..0467bf12a Binary files /dev/null and b/deeplink_store_example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/deeplink_store_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/deeplink_store_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 000000000..0bedcf2fd --- /dev/null +++ b/deeplink_store_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/deeplink_store_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/deeplink_store_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100644 index 000000000..9da19eaca Binary files /dev/null and b/deeplink_store_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png differ diff --git a/deeplink_store_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/deeplink_store_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 000000000..9da19eaca Binary files /dev/null and b/deeplink_store_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png differ diff --git a/deeplink_store_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/deeplink_store_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 000000000..9da19eaca Binary files /dev/null and b/deeplink_store_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png differ diff --git a/deeplink_store_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/deeplink_store_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 000000000..89c2725b7 --- /dev/null +++ b/deeplink_store_example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/deeplink_store_example/ios/Runner/Base.lproj/LaunchScreen.storyboard b/deeplink_store_example/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 000000000..f2e259c7c --- /dev/null +++ b/deeplink_store_example/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/deeplink_store_example/ios/Runner/Base.lproj/Main.storyboard b/deeplink_store_example/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 000000000..f3c28516f --- /dev/null +++ b/deeplink_store_example/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/deeplink_store_example/ios/Runner/Info.plist b/deeplink_store_example/ios/Runner/Info.plist new file mode 100644 index 000000000..73f614c4f --- /dev/null +++ b/deeplink_store_example/ios/Runner/Info.plist @@ -0,0 +1,53 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Deeplink Store Example + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + deeplink_store_example + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + FlutterDeepLinkingEnabled + + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + + + diff --git a/deeplink_store_example/ios/Runner/Runner-Bridging-Header.h b/deeplink_store_example/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 000000000..308a2a560 --- /dev/null +++ b/deeplink_store_example/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/deeplink_store_example/ios/Runner/Runner.entitlements b/deeplink_store_example/ios/Runner/Runner.entitlements new file mode 100644 index 000000000..4a572e842 --- /dev/null +++ b/deeplink_store_example/ios/Runner/Runner.entitlements @@ -0,0 +1,10 @@ + + + + + com.apple.developer.associated-domains + + applinks:example.com + + + diff --git a/deeplink_store_example/ios/RunnerTests/RunnerTests.swift b/deeplink_store_example/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 000000000..86a7c3b1b --- /dev/null +++ b/deeplink_store_example/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/deeplink_store_example/lib/main.dart b/deeplink_store_example/lib/main.dart new file mode 100644 index 000000000..e2684c332 --- /dev/null +++ b/deeplink_store_example/lib/main.dart @@ -0,0 +1,48 @@ +// Copyright 2019 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; + +import 'product_category_list.dart'; +import 'product_list.dart'; +import 'product_details.dart'; + +void main() => runApp(const MyApp()); + +class MyApp extends StatelessWidget { + const MyApp({super.key}); + + @override + Widget build(BuildContext context) { + return MaterialApp.router( + debugShowCheckedModeBanner: false, + theme: ThemeData.light(useMaterial3: true), + routerConfig: GoRouter( + routes: [ + GoRoute( + path: '/', + builder: (_, __) => const ProductList(), + routes: [ + GoRoute(path: ':id', builder: (_, __) => const ProductDetails()), + ], + ), + GoRoute( + path: '/category/:category', + builder: (_, __) => const ProductCategoryList()), + ], + ), + ); + } +} diff --git a/deeplink_store_example/lib/model/products_repository.dart b/deeplink_store_example/lib/model/products_repository.dart new file mode 100644 index 000000000..3165e2074 --- /dev/null +++ b/deeplink_store_example/lib/model/products_repository.dart @@ -0,0 +1,293 @@ +// Copyright 2018-present the Flutter authors. All Rights Reserved. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +enum Category { + all, + accessories, + clothing, + home, +} + +class ProductsRepository { + static const _allProducts = [ + Product( + category: Category.accessories, + id: 0, + name: 'Vagabond sack', + price: 120, + ), + Product( + category: Category.accessories, + id: 1, + name: 'Stella sunglasses', + price: 58, + ), + Product( + category: Category.accessories, + id: 2, + name: 'Whitney belt', + price: 35, + ), + Product( + category: Category.accessories, + id: 3, + name: 'Garden strand', + price: 98, + ), + Product( + category: Category.accessories, + id: 4, + name: 'Strut earrings', + price: 34, + ), + Product( + category: Category.accessories, + id: 5, + name: 'Varsity socks', + price: 12, + ), + Product( + category: Category.accessories, + id: 6, + name: 'Weave keyring', + price: 16, + ), + Product( + category: Category.accessories, + id: 7, + name: 'Gatsby hat', + price: 40, + ), + Product( + category: Category.accessories, + id: 8, + name: 'Shrug bag', + price: 198, + ), + Product( + category: Category.home, + id: 9, + name: 'Gilt desk trio', + price: 58, + ), + Product( + category: Category.home, + id: 10, + name: 'Copper wire rack', + price: 18, + ), + Product( + category: Category.home, + id: 11, + name: 'Soothe ceramic set', + price: 28, + ), + Product( + category: Category.home, + id: 12, + name: 'Hurrahs tea set', + price: 34, + ), + Product( + category: Category.home, + id: 13, + name: 'Blue stone mug', + price: 18, + ), + Product( + category: Category.home, + id: 14, + name: 'Rainwater tray', + price: 27, + ), + Product( + category: Category.home, + id: 15, + name: 'Chambray napkins', + price: 16, + ), + Product( + category: Category.home, + id: 16, + name: 'Succulent planters', + price: 16, + ), + Product( + category: Category.home, + id: 17, + name: 'Quartet table', + price: 175, + ), + Product( + category: Category.home, + id: 18, + name: 'Kitchen quattro', + price: 129, + ), + Product( + category: Category.clothing, + id: 19, + name: 'Clay sweater', + price: 48, + ), + Product( + category: Category.clothing, + id: 20, + name: 'Sea tunic', + price: 45, + ), + Product( + category: Category.clothing, + id: 21, + name: 'Plaster tunic', + price: 38, + ), + Product( + category: Category.clothing, + id: 22, + name: 'White pinstripe shirt', + price: 70, + ), + Product( + category: Category.clothing, + id: 23, + name: 'Chambray shirt', + price: 70, + ), + Product( + category: Category.clothing, + id: 24, + name: 'Seabreeze sweater', + price: 60, + ), + Product( + category: Category.clothing, + id: 25, + name: 'Gentry jacket', + price: 178, + ), + Product( + category: Category.clothing, + id: 26, + name: 'Navy trousers', + price: 74, + ), + Product( + category: Category.clothing, + id: 27, + name: 'Walter henley (white)', + price: 38, + ), + Product( + category: Category.clothing, + id: 28, + name: 'Surf and perf shirt', + price: 48, + ), + Product( + category: Category.clothing, + id: 29, + name: 'Ginger scarf', + price: 98, + ), + Product( + category: Category.clothing, + id: 30, + name: 'Ramona crossover', + price: 68, + ), + Product( + category: Category.clothing, + id: 31, + name: 'Chambray shirt', + price: 38, + ), + Product( + category: Category.clothing, + id: 32, + name: 'Classic white collar', + price: 58, + ), + Product( + category: Category.clothing, + id: 33, + name: 'Cerise scallop tee', + price: 42, + ), + Product( + category: Category.clothing, + id: 34, + name: 'Shoulder rolls tee', + price: 27, + ), + Product( + category: Category.clothing, + id: 35, + name: 'Grey slouch tank', + price: 24, + ), + Product( + category: Category.clothing, + id: 36, + name: 'Sunshirt dress', + price: 58, + ), + Product( + category: Category.clothing, + id: 37, + name: 'Fine lines tee', + price: 58, + ), + ]; + + static List loadProducts({Category category = Category.all}) { + if (category == Category.all) { + return _allProducts; + } else { + return _allProducts.where((p) => p.category == category).toList(); + } + } + + static Product loadProduct({required int id}) { + return _allProducts.firstWhere((Product p) => p.id == id); + } +} + +String getCategoryTitle(Category category) => switch (category) { + Category.all => 'All', + Category.accessories => 'Accessories', + Category.clothing => 'Clothing', + Category.home => 'Home Decorations' + }; + +class Product { + const Product({ + required this.category, + required this.id, + required this.name, + required this.price, + }); + + final Category category; + final int id; + final String name; + final int price; + + String get assetName => '$id-0.jpg'; + String get assetName2X => '2.0x/$id-0.jpg'; + String get assetPackage => 'shrine_images'; + + @override + String toString() => '$name (id=$id)'; +} diff --git a/deeplink_store_example/lib/product_category_list.dart b/deeplink_store_example/lib/product_category_list.dart new file mode 100644 index 000000000..6ee3cbf11 --- /dev/null +++ b/deeplink_store_example/lib/product_category_list.dart @@ -0,0 +1,54 @@ +// Copyright 2019 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; + +import 'model/products_repository.dart'; +import 'row_item.dart'; +import 'styles.dart'; + +class ProductCategoryList extends StatelessWidget { + const ProductCategoryList({super.key}); + + @override + Widget build(BuildContext context) { + final GoRouterState state = GoRouterState.of(context); + final Category category = Category.values.firstWhere( + (Category value) => + value.toString().contains(state.pathParameters['category']!), + orElse: () => Category.all, + ); + final List children = + ProductsRepository.loadProducts(category: category) + .map((Product p) => RowItem(product: p)) + .toList(); + return Scaffold( + backgroundColor: Styles.scaffoldBackground, + body: CustomScrollView( + slivers: [ + SliverAppBar( + title: Text(getCategoryTitle(category), + style: Styles.productListTitle), + backgroundColor: Styles.scaffoldAppBarBackground, + pinned: true, + ), + SliverList( + delegate: SliverChildListDelegate(children), + ), + ], + ), + ); + } +} diff --git a/deeplink_store_example/lib/product_details.dart b/deeplink_store_example/lib/product_details.dart new file mode 100644 index 000000000..6e59aa6ca --- /dev/null +++ b/deeplink_store_example/lib/product_details.dart @@ -0,0 +1,67 @@ +// Copyright 2019 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; + +import 'model/products_repository.dart'; +import 'styles.dart'; + +class ProductDetails extends StatelessWidget { + const ProductDetails({super.key}); + + @override + Widget build(BuildContext context) { + final String currentId = GoRouterState.of(context).pathParameters['id']!; + final Product product = + ProductsRepository.loadProduct(id: int.parse(currentId)); + return Scaffold( + body: ListView( + children: [ + ProductPicture(product: product), + Styles.spacer, + Text(product.name, style: Styles.productPageItemName), + Styles.spacer, + Text('\$${product.price}', style: Styles.productPageItemPrice), + Styles.largeSpacer, + ], + ), + ); + } +} + +class ProductPicture extends StatelessWidget { + const ProductPicture({super.key, required this.product}); + + final Product product; + + @override + Widget build(BuildContext context) { + return Stack( + children: [ + LayoutBuilder( + builder: (BuildContext context, BoxConstraints constraints) { + return Image.asset( + product.assetName2X, + package: product.assetPackage, + fit: BoxFit.cover, + width: constraints.maxWidth, + ); + }, + ), + const BackButton(), + ], + ); + } +} diff --git a/deeplink_store_example/lib/product_list.dart b/deeplink_store_example/lib/product_list.dart new file mode 100644 index 000000000..d0ed40e78 --- /dev/null +++ b/deeplink_store_example/lib/product_list.dart @@ -0,0 +1,45 @@ +// Copyright 2019 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'package:flutter/material.dart'; + +import 'model/products_repository.dart'; +import 'row_item.dart'; +import 'styles.dart'; + +class ProductList extends StatelessWidget { + const ProductList({super.key}); + + @override + Widget build(BuildContext context) { + final List children = ProductsRepository.loadProducts() + .map((Product p) => RowItem(product: p)) + .toList(); + return Scaffold( + backgroundColor: Styles.scaffoldBackground, + body: CustomScrollView( + slivers: [ + const SliverAppBar( + title: Text('Material Store', style: Styles.productListTitle), + backgroundColor: Styles.scaffoldAppBarBackground, + pinned: true, + ), + SliverList( + delegate: SliverChildListDelegate(children), + ), + ], + ), + ); + } +} diff --git a/deeplink_store_example/lib/row_item.dart b/deeplink_store_example/lib/row_item.dart new file mode 100644 index 000000000..30c114ce9 --- /dev/null +++ b/deeplink_store_example/lib/row_item.dart @@ -0,0 +1,56 @@ +// Copyright 2019 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// https://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +import 'package:flutter/material.dart'; +import 'package:go_router/go_router.dart'; + +import 'model/products_repository.dart'; +import 'styles.dart'; + +class RowItem extends StatelessWidget { + const RowItem({ + required this.product, + super.key, + }); + + final Product product; + + @override + Widget build(BuildContext context) { + return ListTile( + shape: const Border.symmetric( + horizontal: BorderSide(color: Styles.productRowDivider), + ), + leading: ClipRRect( + borderRadius: BorderRadius.circular(4), + child: Image.asset( + product.assetName, + package: product.assetPackage, + fit: BoxFit.cover, + width: 68, + height: 68, + ), + ), + title: Text( + product.name, + style: Styles.productRowItemName, + ), + subtitle: Text( + '\$${product.price}', + style: Styles.productRowItemPrice, + ), + onTap: () => context.push('/${product.id}'), + ); + } +} diff --git a/deeplink_store_example/lib/styles.dart b/deeplink_store_example/lib/styles.dart new file mode 100644 index 000000000..32dbea32c --- /dev/null +++ b/deeplink_store_example/lib/styles.dart @@ -0,0 +1,46 @@ +// Copyright 2018 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter/cupertino.dart'; + +abstract class Styles { + static const TextStyle productListTitle = TextStyle( + color: Color.fromRGBO(0, 0, 0, 0.8), + ); + static const TextStyle productRowItemName = TextStyle( + color: Color.fromRGBO(0, 0, 0, 0.8), + fontSize: 18, + fontStyle: FontStyle.normal, + fontWeight: FontWeight.normal, + ); + + static const TextStyle productRowItemPrice = TextStyle( + color: Color(0xFF8E8E93), + fontSize: 13, + fontWeight: FontWeight.w300, + ); + + static const TextStyle productPageItemName = TextStyle( + color: Color.fromRGBO(0, 0, 0, 0.8), + fontSize: 20, + fontStyle: FontStyle.normal, + fontWeight: FontWeight.bold, + ); + + static const TextStyle productPageItemPrice = TextStyle( + color: Color.fromRGBO(0, 0, 0, 0.8), + fontSize: 20, + fontWeight: FontWeight.bold, + ); + + static const Color productRowDivider = Color(0xFFD9D9D9); + + static const Color scaffoldBackground = Color(0xfff0f0f0); + + static const Color scaffoldAppBarBackground = Color(0xffffffff); + + static const Widget spacer = SizedBox(height: 10); + + static const Widget largeSpacer = SizedBox(height: 100); +} diff --git a/deeplink_store_example/linux/.gitignore b/deeplink_store_example/linux/.gitignore new file mode 100644 index 000000000..d3896c984 --- /dev/null +++ b/deeplink_store_example/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/deeplink_store_example/linux/CMakeLists.txt b/deeplink_store_example/linux/CMakeLists.txt new file mode 100644 index 000000000..acc4df6cb --- /dev/null +++ b/deeplink_store_example/linux/CMakeLists.txt @@ -0,0 +1,139 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.10) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "deeplink_store_example") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.example.deeplink_store_example") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/deeplink_store_example/linux/flutter/CMakeLists.txt b/deeplink_store_example/linux/flutter/CMakeLists.txt new file mode 100644 index 000000000..d5bd01648 --- /dev/null +++ b/deeplink_store_example/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/deeplink_store_example/linux/flutter/generated_plugin_registrant.cc b/deeplink_store_example/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 000000000..e71a16d23 --- /dev/null +++ b/deeplink_store_example/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void fl_register_plugins(FlPluginRegistry* registry) { +} diff --git a/deeplink_store_example/linux/flutter/generated_plugin_registrant.h b/deeplink_store_example/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 000000000..e0f0a47bc --- /dev/null +++ b/deeplink_store_example/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/deeplink_store_example/linux/flutter/generated_plugins.cmake b/deeplink_store_example/linux/flutter/generated_plugins.cmake new file mode 100644 index 000000000..2e1de87a7 --- /dev/null +++ b/deeplink_store_example/linux/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/deeplink_store_example/linux/main.cc b/deeplink_store_example/linux/main.cc new file mode 100644 index 000000000..e7c5c5437 --- /dev/null +++ b/deeplink_store_example/linux/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/deeplink_store_example/linux/my_application.cc b/deeplink_store_example/linux/my_application.cc new file mode 100644 index 000000000..02805a173 --- /dev/null +++ b/deeplink_store_example/linux/my_application.cc @@ -0,0 +1,104 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "deeplink_store_example"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "deeplink_store_example"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/deeplink_store_example/linux/my_application.h b/deeplink_store_example/linux/my_application.h new file mode 100644 index 000000000..72271d5e4 --- /dev/null +++ b/deeplink_store_example/linux/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/deeplink_store_example/macos/.gitignore b/deeplink_store_example/macos/.gitignore new file mode 100644 index 000000000..746adbb6b --- /dev/null +++ b/deeplink_store_example/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/deeplink_store_example/macos/Flutter/Flutter-Debug.xcconfig b/deeplink_store_example/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 000000000..c2efd0b60 --- /dev/null +++ b/deeplink_store_example/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/deeplink_store_example/macos/Flutter/Flutter-Release.xcconfig b/deeplink_store_example/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 000000000..c2efd0b60 --- /dev/null +++ b/deeplink_store_example/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/deeplink_store_example/macos/Flutter/GeneratedPluginRegistrant.swift b/deeplink_store_example/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 000000000..cccf817a5 --- /dev/null +++ b/deeplink_store_example/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,10 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { +} diff --git a/deeplink_store_example/macos/Runner.xcodeproj/project.pbxproj b/deeplink_store_example/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 000000000..5078f2c73 --- /dev/null +++ b/deeplink_store_example/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,695 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* deeplink_store_example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "deeplink_store_example.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* deeplink_store_example.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* deeplink_store_example.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1300; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.deeplinkStoreExample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/deeplink_store_example.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/deeplink_store_example"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.deeplinkStoreExample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/deeplink_store_example.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/deeplink_store_example"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.deeplinkStoreExample.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/deeplink_store_example.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/deeplink_store_example"; + }; + name = Profile; + }; + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/deeplink_store_example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/deeplink_store_example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/deeplink_store_example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/deeplink_store_example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/deeplink_store_example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 000000000..5682f21aa --- /dev/null +++ b/deeplink_store_example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/deeplink_store_example/macos/Runner.xcworkspace/contents.xcworkspacedata b/deeplink_store_example/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..1d526a16e --- /dev/null +++ b/deeplink_store_example/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/deeplink_store_example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/deeplink_store_example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/deeplink_store_example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/deeplink_store_example/macos/Runner/AppDelegate.swift b/deeplink_store_example/macos/Runner/AppDelegate.swift new file mode 100644 index 000000000..d53ef6437 --- /dev/null +++ b/deeplink_store_example/macos/Runner/AppDelegate.swift @@ -0,0 +1,9 @@ +import Cocoa +import FlutterMacOS + +@NSApplicationMain +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } +} diff --git a/deeplink_store_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/deeplink_store_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000..a2ec33f19 --- /dev/null +++ b/deeplink_store_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/deeplink_store_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/deeplink_store_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 000000000..82b6f9d9a Binary files /dev/null and b/deeplink_store_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png differ diff --git a/deeplink_store_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/deeplink_store_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 000000000..13b35eba5 Binary files /dev/null and b/deeplink_store_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png differ diff --git a/deeplink_store_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/deeplink_store_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100644 index 000000000..0a3f5fa40 Binary files /dev/null and b/deeplink_store_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png differ diff --git a/deeplink_store_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/deeplink_store_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png new file mode 100644 index 000000000..bdb57226d Binary files /dev/null and b/deeplink_store_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png differ diff --git a/deeplink_store_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png b/deeplink_store_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png new file mode 100644 index 000000000..f083318e0 Binary files /dev/null and b/deeplink_store_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png differ diff --git a/deeplink_store_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/deeplink_store_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png new file mode 100644 index 000000000..326c0e72c Binary files /dev/null and b/deeplink_store_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png differ diff --git a/deeplink_store_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/deeplink_store_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 000000000..2f1632cfd Binary files /dev/null and b/deeplink_store_example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png differ diff --git a/deeplink_store_example/macos/Runner/Base.lproj/MainMenu.xib b/deeplink_store_example/macos/Runner/Base.lproj/MainMenu.xib new file mode 100644 index 000000000..80e867a4e --- /dev/null +++ b/deeplink_store_example/macos/Runner/Base.lproj/MainMenu.xib @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/deeplink_store_example/macos/Runner/Configs/AppInfo.xcconfig b/deeplink_store_example/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 000000000..b8ad2bcd5 --- /dev/null +++ b/deeplink_store_example/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = deeplink_store_example + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.deeplinkStoreExample + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2023 com.example. All rights reserved. diff --git a/deeplink_store_example/macos/Runner/Configs/Debug.xcconfig b/deeplink_store_example/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 000000000..36b0fd946 --- /dev/null +++ b/deeplink_store_example/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/deeplink_store_example/macos/Runner/Configs/Release.xcconfig b/deeplink_store_example/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 000000000..dff4f4956 --- /dev/null +++ b/deeplink_store_example/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/deeplink_store_example/macos/Runner/Configs/Warnings.xcconfig b/deeplink_store_example/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 000000000..42bcbf478 --- /dev/null +++ b/deeplink_store_example/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/deeplink_store_example/macos/Runner/DebugProfile.entitlements b/deeplink_store_example/macos/Runner/DebugProfile.entitlements new file mode 100644 index 000000000..dddb8a30c --- /dev/null +++ b/deeplink_store_example/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/deeplink_store_example/macos/Runner/Info.plist b/deeplink_store_example/macos/Runner/Info.plist new file mode 100644 index 000000000..4789daa6a --- /dev/null +++ b/deeplink_store_example/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/deeplink_store_example/macos/Runner/MainFlutterWindow.swift b/deeplink_store_example/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 000000000..2722837ec --- /dev/null +++ b/deeplink_store_example/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController.init() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/deeplink_store_example/macos/Runner/Release.entitlements b/deeplink_store_example/macos/Runner/Release.entitlements new file mode 100644 index 000000000..852fa1a47 --- /dev/null +++ b/deeplink_store_example/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/deeplink_store_example/macos/RunnerTests/RunnerTests.swift b/deeplink_store_example/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 000000000..5418c9f53 --- /dev/null +++ b/deeplink_store_example/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import FlutterMacOS +import Cocoa +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/deeplink_store_example/pubspec.yaml b/deeplink_store_example/pubspec.yaml new file mode 100644 index 000000000..1da35ab69 --- /dev/null +++ b/deeplink_store_example/pubspec.yaml @@ -0,0 +1,169 @@ +name: deeplink_store_example +description: A new Flutter project. +# The following line prevents the package from being accidentally published to +# pub.dev using `flutter pub publish`. This is preferred for private packages. +publish_to: 'none' # Remove this line if you wish to publish to pub.dev + +# The following defines the version and build number for your application. +# A version number is three numbers separated by dots, like 1.2.43 +# followed by an optional build number separated by a +. +# Both the version and the builder number may be overridden in flutter +# build by specifying --build-name and --build-number, respectively. +# In Android, build-name is used as versionName while build-number used as versionCode. +# Read more about Android versioning at https://developer.android.com/studio/publish/versioning +# In iOS, build-name is used as CFBundleShortVersionString while build-number is used as CFBundleVersion. +# Read more about iOS versioning at +# https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/CoreFoundationKeys.html +# In Windows, build-name is used as the major, minor, and patch parts +# of the product and file versions while build-number is used as the build suffix. +version: 1.0.0+1 + +environment: + sdk: ^3.1.0 + +# Dependencies specify other packages that your package needs in order to work. +# To automatically upgrade your package dependencies to the latest versions +# consider running `flutter pub upgrade --major-versions`. Alternatively, +# dependencies can be manually updated by changing the version numbers below to +# the latest version available on pub.dev. To see which dependencies have newer +# versions available, run `flutter pub outdated`. +dependencies: + flutter: + sdk: flutter + + + # The following adds the Cupertino Icons font to your application. + # Use with the CupertinoIcons class for iOS style icons. + cupertino_icons: ^1.0.2 + shrine_images: ^2.0.2 + go_router: ^12.0.0 + +dev_dependencies: + flutter_test: + sdk: flutter + + # The "flutter_lints" package below contains a set of recommended lints to + # encourage good coding practices. The lint set provided by the package is + # activated in the `analysis_options.yaml` file located at the root of your + # package. See that file for information about deactivating specific lint + # rules and activating additional ones. + flutter_lints: ^3.0.0 + +# For information on the generic Dart part of this file, see the +# following page: https://dart.dev/tools/pub/pubspec + +# The following section is specific to Flutter packages. +flutter: + + # The following line ensures that the Material Icons font is + # included with your application, so that you can use the icons in + # the material Icons class. + uses-material-design: true + + # To add assets to your application, add an assets section, like this: + # assets: + # - images/a_dot_burr.jpeg + # - images/a_dot_ham.jpeg + + # An image asset can refer to one or more resolution-specific "variants", see + # https://flutter.dev/assets-and-images/#resolution-aware + + # For details regarding adding assets from package dependencies, see + # https://flutter.dev/assets-and-images/#from-packages + + # To add custom fonts to your application, add a fonts section here, + # in this "flutter" section. Each entry in this list should have a + # "family" key with the font family name, and a "fonts" key with a + # list giving the asset and other descriptors for the font. For + # example: + # fonts: + # - family: Schyler + # fonts: + # - asset: fonts/Schyler-Regular.ttf + # - asset: fonts/Schyler-Italic.ttf + # style: italic + # - family: Trajan Pro + # fonts: + # - asset: fonts/TrajanPro.ttf + # - asset: fonts/TrajanPro_Bold.ttf + # weight: 700 + # + # For details regarding fonts from package dependencies, + # see https://flutter.dev/custom-fonts/#from-packages + assets: + - packages/shrine_images/0-0.jpg + - packages/shrine_images/1-0.jpg + - packages/shrine_images/2-0.jpg + - packages/shrine_images/3-0.jpg + - packages/shrine_images/4-0.jpg + - packages/shrine_images/5-0.jpg + - packages/shrine_images/6-0.jpg + - packages/shrine_images/7-0.jpg + - packages/shrine_images/8-0.jpg + - packages/shrine_images/9-0.jpg + - packages/shrine_images/10-0.jpg + - packages/shrine_images/11-0.jpg + - packages/shrine_images/12-0.jpg + - packages/shrine_images/13-0.jpg + - packages/shrine_images/14-0.jpg + - packages/shrine_images/15-0.jpg + - packages/shrine_images/16-0.jpg + - packages/shrine_images/17-0.jpg + - packages/shrine_images/18-0.jpg + - packages/shrine_images/19-0.jpg + - packages/shrine_images/20-0.jpg + - packages/shrine_images/21-0.jpg + - packages/shrine_images/22-0.jpg + - packages/shrine_images/23-0.jpg + - packages/shrine_images/24-0.jpg + - packages/shrine_images/25-0.jpg + - packages/shrine_images/26-0.jpg + - packages/shrine_images/27-0.jpg + - packages/shrine_images/28-0.jpg + - packages/shrine_images/29-0.jpg + - packages/shrine_images/30-0.jpg + - packages/shrine_images/31-0.jpg + - packages/shrine_images/32-0.jpg + - packages/shrine_images/33-0.jpg + - packages/shrine_images/34-0.jpg + - packages/shrine_images/35-0.jpg + - packages/shrine_images/36-0.jpg + - packages/shrine_images/37-0.jpg + - packages/shrine_images/2.0x/0-0.jpg + - packages/shrine_images/2.0x/1-0.jpg + - packages/shrine_images/2.0x/2-0.jpg + - packages/shrine_images/2.0x/3-0.jpg + - packages/shrine_images/2.0x/4-0.jpg + - packages/shrine_images/2.0x/5-0.jpg + - packages/shrine_images/2.0x/6-0.jpg + - packages/shrine_images/2.0x/7-0.jpg + - packages/shrine_images/2.0x/8-0.jpg + - packages/shrine_images/2.0x/9-0.jpg + - packages/shrine_images/2.0x/10-0.jpg + - packages/shrine_images/2.0x/11-0.jpg + - packages/shrine_images/2.0x/12-0.jpg + - packages/shrine_images/2.0x/13-0.jpg + - packages/shrine_images/2.0x/14-0.jpg + - packages/shrine_images/2.0x/15-0.jpg + - packages/shrine_images/2.0x/16-0.jpg + - packages/shrine_images/2.0x/17-0.jpg + - packages/shrine_images/2.0x/18-0.jpg + - packages/shrine_images/2.0x/19-0.jpg + - packages/shrine_images/2.0x/20-0.jpg + - packages/shrine_images/2.0x/21-0.jpg + - packages/shrine_images/2.0x/22-0.jpg + - packages/shrine_images/2.0x/23-0.jpg + - packages/shrine_images/2.0x/24-0.jpg + - packages/shrine_images/2.0x/25-0.jpg + - packages/shrine_images/2.0x/26-0.jpg + - packages/shrine_images/2.0x/27-0.jpg + - packages/shrine_images/2.0x/28-0.jpg + - packages/shrine_images/2.0x/29-0.jpg + - packages/shrine_images/2.0x/30-0.jpg + - packages/shrine_images/2.0x/31-0.jpg + - packages/shrine_images/2.0x/32-0.jpg + - packages/shrine_images/2.0x/33-0.jpg + - packages/shrine_images/2.0x/34-0.jpg + - packages/shrine_images/2.0x/35-0.jpg + - packages/shrine_images/2.0x/36-0.jpg + - packages/shrine_images/2.0x/37-0.jpg diff --git a/deeplink_store_example/test/widget_test.dart b/deeplink_store_example/test/widget_test.dart new file mode 100644 index 000000000..a285c4b81 --- /dev/null +++ b/deeplink_store_example/test/widget_test.dart @@ -0,0 +1,43 @@ +// This is a basic Flutter widget test. +// +// To perform an interaction with a widget in your test, use the WidgetTester +// utility in the flutter_test package. For example, you can send tap and scroll +// gestures. You can also use WidgetTester to find child widgets in the widget +// tree, read text, and verify that the values of widget properties are correct. + +import 'package:flutter_test/flutter_test.dart'; +import 'package:deeplink_store_example/main.dart'; +import 'package:go_router/go_router.dart'; + +void main() { + testWidgets('Can open home page', (WidgetTester tester) async { + await tester.pumpWidget(const MyApp()); + await tester.pumpAndSettle(); + + expect(find.text('Material Store'), findsOneWidget); + }); + + testWidgets('Can open detail page', (WidgetTester tester) async { + await tester.pumpWidget(const MyApp()); + await tester.pumpAndSettle(); + + expect(find.text('Vagabond sack'), findsOneWidget); + + await tester.tap(find.text('Vagabond sack')); + await tester.pumpAndSettle(); + + expect(find.text('Material Store'), findsNothing); + expect(find.text('Vagabond sack'), findsOneWidget); + expect(find.text('\$120'), findsOneWidget); + }); + + testWidgets('Can show category page', (WidgetTester tester) async { + await tester.pumpWidget(const MyApp()); + await tester.pumpAndSettle(); + + tester.element(find.text('Material Store')).go('/category/home'); + await tester.pumpAndSettle(); + + expect(find.text('Home Decorations'), findsOneWidget); + }); +} diff --git a/experimental/varfont_shader_puzzle/web/favicon.png b/deeplink_store_example/web/favicon.png similarity index 100% rename from experimental/varfont_shader_puzzle/web/favicon.png rename to deeplink_store_example/web/favicon.png diff --git a/experimental/varfont_shader_puzzle/web/icons/Icon-192.png b/deeplink_store_example/web/icons/Icon-192.png similarity index 100% rename from experimental/varfont_shader_puzzle/web/icons/Icon-192.png rename to deeplink_store_example/web/icons/Icon-192.png diff --git a/experimental/varfont_shader_puzzle/web/icons/Icon-512.png b/deeplink_store_example/web/icons/Icon-512.png similarity index 100% rename from experimental/varfont_shader_puzzle/web/icons/Icon-512.png rename to deeplink_store_example/web/icons/Icon-512.png diff --git a/experimental/varfont_shader_puzzle/web/icons/Icon-maskable-192.png b/deeplink_store_example/web/icons/Icon-maskable-192.png similarity index 100% rename from experimental/varfont_shader_puzzle/web/icons/Icon-maskable-192.png rename to deeplink_store_example/web/icons/Icon-maskable-192.png diff --git a/experimental/varfont_shader_puzzle/web/icons/Icon-maskable-512.png b/deeplink_store_example/web/icons/Icon-maskable-512.png similarity index 100% rename from experimental/varfont_shader_puzzle/web/icons/Icon-maskable-512.png rename to deeplink_store_example/web/icons/Icon-maskable-512.png diff --git a/deeplink_store_example/web/index.html b/deeplink_store_example/web/index.html new file mode 100644 index 000000000..7dce594f0 --- /dev/null +++ b/deeplink_store_example/web/index.html @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + deeplink_store_example + + + + + + + + + + diff --git a/deeplink_store_example/web/manifest.json b/deeplink_store_example/web/manifest.json new file mode 100644 index 000000000..aa886bf50 --- /dev/null +++ b/deeplink_store_example/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "deeplink_store_example", + "short_name": "deeplink_store_example", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/deeplink_store_example/windows/.gitignore b/deeplink_store_example/windows/.gitignore new file mode 100644 index 000000000..d492d0d98 --- /dev/null +++ b/deeplink_store_example/windows/.gitignore @@ -0,0 +1,17 @@ +flutter/ephemeral/ + +# Visual Studio user-specific files. +*.suo +*.user +*.userosscache +*.sln.docstates + +# Visual Studio build-related files. +x64/ +x86/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ diff --git a/deeplink_store_example/windows/CMakeLists.txt b/deeplink_store_example/windows/CMakeLists.txt new file mode 100644 index 000000000..5e390b967 --- /dev/null +++ b/deeplink_store_example/windows/CMakeLists.txt @@ -0,0 +1,102 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(deeplink_store_example LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "deeplink_store_example") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Define build configuration option. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() +# Define settings for the Profile build mode. +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/deeplink_store_example/windows/flutter/CMakeLists.txt b/deeplink_store_example/windows/flutter/CMakeLists.txt new file mode 100644 index 000000000..930d2071a --- /dev/null +++ b/deeplink_store_example/windows/flutter/CMakeLists.txt @@ -0,0 +1,104 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + windows-x64 $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/deeplink_store_example/windows/flutter/generated_plugin_registrant.cc b/deeplink_store_example/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 000000000..8b6d4680a --- /dev/null +++ b/deeplink_store_example/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void RegisterPlugins(flutter::PluginRegistry* registry) { +} diff --git a/deeplink_store_example/windows/flutter/generated_plugin_registrant.h b/deeplink_store_example/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 000000000..dc139d85a --- /dev/null +++ b/deeplink_store_example/windows/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void RegisterPlugins(flutter::PluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/deeplink_store_example/windows/flutter/generated_plugins.cmake b/deeplink_store_example/windows/flutter/generated_plugins.cmake new file mode 100644 index 000000000..b93c4c30c --- /dev/null +++ b/deeplink_store_example/windows/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/deeplink_store_example/windows/runner/CMakeLists.txt b/deeplink_store_example/windows/runner/CMakeLists.txt new file mode 100644 index 000000000..394917c05 --- /dev/null +++ b/deeplink_store_example/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/deeplink_store_example/windows/runner/Runner.rc b/deeplink_store_example/windows/runner/Runner.rc new file mode 100644 index 000000000..0ab73b52c --- /dev/null +++ b/deeplink_store_example/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD +#else +#define VERSION_AS_NUMBER 1,0,0,0 +#endif + +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "com.example" "\0" + VALUE "FileDescription", "deeplink_store_example" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "deeplink_store_example" "\0" + VALUE "LegalCopyright", "Copyright (C) 2023 com.example. All rights reserved." "\0" + VALUE "OriginalFilename", "deeplink_store_example.exe" "\0" + VALUE "ProductName", "deeplink_store_example" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/deeplink_store_example/windows/runner/flutter_window.cpp b/deeplink_store_example/windows/runner/flutter_window.cpp new file mode 100644 index 000000000..b25e363ef --- /dev/null +++ b/deeplink_store_example/windows/runner/flutter_window.cpp @@ -0,0 +1,66 @@ +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/deeplink_store_example/windows/runner/flutter_window.h b/deeplink_store_example/windows/runner/flutter_window.h new file mode 100644 index 000000000..6da0652f0 --- /dev/null +++ b/deeplink_store_example/windows/runner/flutter_window.h @@ -0,0 +1,33 @@ +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/deeplink_store_example/windows/runner/main.cpp b/deeplink_store_example/windows/runner/main.cpp new file mode 100644 index 000000000..0476a39a1 --- /dev/null +++ b/deeplink_store_example/windows/runner/main.cpp @@ -0,0 +1,43 @@ +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t *command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = + GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.Create(L"deeplink_store_example", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/deeplink_store_example/windows/runner/resource.h b/deeplink_store_example/windows/runner/resource.h new file mode 100644 index 000000000..66a65d1e4 --- /dev/null +++ b/deeplink_store_example/windows/runner/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/deeplink_store_example/windows/runner/resources/app_icon.ico b/deeplink_store_example/windows/runner/resources/app_icon.ico new file mode 100644 index 000000000..c04e20caf Binary files /dev/null and b/deeplink_store_example/windows/runner/resources/app_icon.ico differ diff --git a/deeplink_store_example/windows/runner/runner.exe.manifest b/deeplink_store_example/windows/runner/runner.exe.manifest new file mode 100644 index 000000000..a42ea7687 --- /dev/null +++ b/deeplink_store_example/windows/runner/runner.exe.manifest @@ -0,0 +1,20 @@ + + + + + PerMonitorV2 + + + + + + + + + + + + + + + diff --git a/deeplink_store_example/windows/runner/utils.cpp b/deeplink_store_example/windows/runner/utils.cpp new file mode 100644 index 000000000..b2b08734d --- /dev/null +++ b/deeplink_store_example/windows/runner/utils.cpp @@ -0,0 +1,65 @@ +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE *unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + int target_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); + std::string utf8_string; + if (target_length <= 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + input_length, utf8_string.data(), target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/deeplink_store_example/windows/runner/utils.h b/deeplink_store_example/windows/runner/utils.h new file mode 100644 index 000000000..3879d5475 --- /dev/null +++ b/deeplink_store_example/windows/runner/utils.h @@ -0,0 +1,19 @@ +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/deeplink_store_example/windows/runner/win32_window.cpp b/deeplink_store_example/windows/runner/win32_window.cpp new file mode 100644 index 000000000..60608d0fe --- /dev/null +++ b/deeplink_store_example/windows/runner/win32_window.cpp @@ -0,0 +1,288 @@ +#include "win32_window.h" + +#include +#include + +#include "resource.h" + +namespace { + +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + } + FreeLibrary(user32_module); +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registrar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { + ++g_active_window_count; +} + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + UpdateTheme(window); + + return OnCreate(); +} + +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { + return window_handle_; +} + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/deeplink_store_example/windows/runner/win32_window.h b/deeplink_store_example/windows/runner/win32_window.h new file mode 100644 index 000000000..e901dde68 --- /dev/null +++ b/deeplink_store_example/windows/runner/win32_window.h @@ -0,0 +1,102 @@ +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates a win32 window with |title| that is positioned and sized using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_ diff --git a/desktop_photo_search/fluent_ui/.metadata b/desktop_photo_search/fluent_ui/.metadata index a92759766..a3e76dd58 100644 --- a/desktop_photo_search/fluent_ui/.metadata +++ b/desktop_photo_search/fluent_ui/.metadata @@ -1,11 +1,11 @@ # This file tracks properties of this Flutter project. # Used by Flutter tool to assess capabilities and perform upgrades etc. # -# This file should be version controlled. +# This file should be version controlled and should not be manually edited. version: - revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - channel: beta + revision: "ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a" + channel: "stable" project_type: app @@ -13,17 +13,17 @@ project_type: app migration: platforms: - platform: root - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a - platform: linux - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a - platform: macos - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a - platform: windows - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a # User provided section diff --git a/desktop_photo_search/fluent_ui/analysis_options.yaml b/desktop_photo_search/fluent_ui/analysis_options.yaml index b27820a40..f6bfd9b61 100644 --- a/desktop_photo_search/fluent_ui/analysis_options.yaml +++ b/desktop_photo_search/fluent_ui/analysis_options.yaml @@ -1,7 +1,4 @@ -include: ../../analysis_options.yaml - -analyzer: - exclude: [lib/src/**.g.dart] +include: package:analysis_defaults/flutter.yaml linter: rules: diff --git a/desktop_photo_search/fluent_ui/lib/src/model/search.g.dart b/desktop_photo_search/fluent_ui/lib/src/model/search.g.dart index 37172fcf0..bc5c6920f 100644 --- a/desktop_photo_search/fluent_ui/lib/src/model/search.g.dart +++ b/desktop_photo_search/fluent_ui/lib/src/model/search.g.dart @@ -41,13 +41,13 @@ class _$SearchSerializer implements StructuredSerializer { final iterator = serialized.iterator; while (iterator.moveNext()) { - final key = iterator.current as String; + final key = iterator.current! as String; iterator.moveNext(); final Object? value = iterator.current; switch (key) { case 'query': result.query = serializers.deserialize(value, - specifiedType: const FullType(String)) as String; + specifiedType: const FullType(String))! as String; break; case 'results': result.results.replace(serializers.deserialize(value, @@ -69,11 +69,11 @@ class _$Search extends Search { final BuiltList results; factory _$Search([void Function(SearchBuilder)? updates]) => - (new SearchBuilder()..update(updates)).build(); + (new SearchBuilder()..update(updates))._build(); _$Search._({required this.query, required this.results}) : super._() { - BuiltValueNullFieldError.checkNotNull(query, 'Search', 'query'); - BuiltValueNullFieldError.checkNotNull(results, 'Search', 'results'); + BuiltValueNullFieldError.checkNotNull(query, r'Search', 'query'); + BuiltValueNullFieldError.checkNotNull(results, r'Search', 'results'); } @override @@ -91,12 +91,16 @@ class _$Search extends Search { @override int get hashCode { - return $jf($jc($jc(0, query.hashCode), results.hashCode)); + var _$hash = 0; + _$hash = $jc(_$hash, query.hashCode); + _$hash = $jc(_$hash, results.hashCode); + _$hash = $jf(_$hash); + return _$hash; } @override String toString() { - return (newBuiltValueToStringHelper('Search') + return (newBuiltValueToStringHelper(r'Search') ..add('query', query) ..add('results', results)) .toString(); @@ -139,13 +143,15 @@ class SearchBuilder implements Builder { } @override - _$Search build() { + Search build() => _build(); + + _$Search _build() { _$Search _$result; try { _$result = _$v ?? new _$Search._( query: BuiltValueNullFieldError.checkNotNull( - query, 'Search', 'query'), + query, r'Search', 'query'), results: results.build()); } catch (_) { late String _$failedField; @@ -154,7 +160,7 @@ class SearchBuilder implements Builder { results.build(); } catch (e) { throw new BuiltValueNestedFieldError( - 'Search', _$failedField, e.toString()); + r'Search', _$failedField, e.toString()); } rethrow; } @@ -163,4 +169,4 @@ class SearchBuilder implements Builder { } } -// ignore_for_file: always_put_control_body_on_new_line,always_specify_types,annotate_overrides,avoid_annotating_with_dynamic,avoid_as,avoid_catches_without_on_clauses,avoid_returning_this,deprecated_member_use_from_same_package,lines_longer_than_80_chars,omit_local_variable_types,prefer_expression_function_bodies,sort_constructors_first,test_types_in_equals,unnecessary_const,unnecessary_new +// ignore_for_file: deprecated_member_use_from_same_package,type=lint diff --git a/desktop_photo_search/fluent_ui/lib/src/serializers.g.dart b/desktop_photo_search/fluent_ui/lib/src/serializers.g.dart index ad330123c..a824cf65a 100644 --- a/desktop_photo_search/fluent_ui/lib/src/serializers.g.dart +++ b/desktop_photo_search/fluent_ui/lib/src/serializers.g.dart @@ -41,4 +41,4 @@ Serializers _$serializers = (new Serializers().toBuilder() () => new ListBuilder())) .build(); -// ignore_for_file: always_put_control_body_on_new_line,always_specify_types,annotate_overrides,avoid_annotating_with_dynamic,avoid_as,avoid_catches_without_on_clauses,avoid_returning_this,deprecated_member_use_from_same_package,lines_longer_than_80_chars,omit_local_variable_types,prefer_expression_function_bodies,sort_constructors_first,test_types_in_equals,unnecessary_const,unnecessary_new +// ignore_for_file: deprecated_member_use_from_same_package,type=lint diff --git a/desktop_photo_search/fluent_ui/lib/src/unsplash/api_error.g.dart b/desktop_photo_search/fluent_ui/lib/src/unsplash/api_error.g.dart index 1c900a54d..2c6a7b787 100644 --- a/desktop_photo_search/fluent_ui/lib/src/unsplash/api_error.g.dart +++ b/desktop_photo_search/fluent_ui/lib/src/unsplash/api_error.g.dart @@ -41,7 +41,7 @@ class _$ApiErrorSerializer implements StructuredSerializer { final iterator = serialized.iterator; while (iterator.moveNext()) { - final key = iterator.current as String; + final key = iterator.current! as String; iterator.moveNext(); final Object? value = iterator.current; switch (key) { @@ -63,7 +63,7 @@ class _$ApiError extends ApiError { final BuiltList? errors; factory _$ApiError([void Function(ApiErrorBuilder)? updates]) => - (new ApiErrorBuilder()..update(updates)).build(); + (new ApiErrorBuilder()..update(updates))._build(); _$ApiError._({this.errors}) : super._(); @@ -82,12 +82,15 @@ class _$ApiError extends ApiError { @override int get hashCode { - return $jf($jc(0, errors.hashCode)); + var _$hash = 0; + _$hash = $jc(_$hash, errors.hashCode); + _$hash = $jf(_$hash); + return _$hash; } @override String toString() { - return (newBuiltValueToStringHelper('ApiError')..add('errors', errors)) + return (newBuiltValueToStringHelper(r'ApiError')..add('errors', errors)) .toString(); } } @@ -123,7 +126,9 @@ class ApiErrorBuilder implements Builder { } @override - _$ApiError build() { + ApiError build() => _build(); + + _$ApiError _build() { _$ApiError _$result; try { _$result = _$v ?? new _$ApiError._(errors: _errors?.build()); @@ -134,7 +139,7 @@ class ApiErrorBuilder implements Builder { _errors?.build(); } catch (e) { throw new BuiltValueNestedFieldError( - 'ApiError', _$failedField, e.toString()); + r'ApiError', _$failedField, e.toString()); } rethrow; } @@ -143,4 +148,4 @@ class ApiErrorBuilder implements Builder { } } -// ignore_for_file: always_put_control_body_on_new_line,always_specify_types,annotate_overrides,avoid_annotating_with_dynamic,avoid_as,avoid_catches_without_on_clauses,avoid_returning_this,deprecated_member_use_from_same_package,lines_longer_than_80_chars,omit_local_variable_types,prefer_expression_function_bodies,sort_constructors_first,test_types_in_equals,unnecessary_const,unnecessary_new +// ignore_for_file: deprecated_member_use_from_same_package,type=lint diff --git a/desktop_photo_search/fluent_ui/lib/src/unsplash/current_user_collections.g.dart b/desktop_photo_search/fluent_ui/lib/src/unsplash/current_user_collections.g.dart index 73e703b83..bcf8a27ee 100644 --- a/desktop_photo_search/fluent_ui/lib/src/unsplash/current_user_collections.g.dart +++ b/desktop_photo_search/fluent_ui/lib/src/unsplash/current_user_collections.g.dart @@ -64,13 +64,13 @@ class _$CurrentUserCollectionsSerializer final iterator = serialized.iterator; while (iterator.moveNext()) { - final key = iterator.current as String; + final key = iterator.current! as String; iterator.moveNext(); final Object? value = iterator.current; switch (key) { case 'id': result.id = serializers.deserialize(value, - specifiedType: const FullType(int)) as int; + specifiedType: const FullType(int))! as int; break; case 'title': result.title = serializers.deserialize(value, @@ -103,12 +103,12 @@ class _$CurrentUserCollections extends CurrentUserCollections { factory _$CurrentUserCollections( [void Function(CurrentUserCollectionsBuilder)? updates]) => - (new CurrentUserCollectionsBuilder()..update(updates)).build(); + (new CurrentUserCollectionsBuilder()..update(updates))._build(); _$CurrentUserCollections._( {required this.id, this.title, this.publishedAt, this.updatedAt}) : super._() { - BuiltValueNullFieldError.checkNotNull(id, 'CurrentUserCollections', 'id'); + BuiltValueNullFieldError.checkNotNull(id, r'CurrentUserCollections', 'id'); } @override @@ -132,14 +132,18 @@ class _$CurrentUserCollections extends CurrentUserCollections { @override int get hashCode { - return $jf($jc( - $jc($jc($jc(0, id.hashCode), title.hashCode), publishedAt.hashCode), - updatedAt.hashCode)); + var _$hash = 0; + _$hash = $jc(_$hash, id.hashCode); + _$hash = $jc(_$hash, title.hashCode); + _$hash = $jc(_$hash, publishedAt.hashCode); + _$hash = $jc(_$hash, updatedAt.hashCode); + _$hash = $jf(_$hash); + return _$hash; } @override String toString() { - return (newBuiltValueToStringHelper('CurrentUserCollections') + return (newBuiltValueToStringHelper(r'CurrentUserCollections') ..add('id', id) ..add('title', title) ..add('publishedAt', publishedAt) @@ -194,11 +198,13 @@ class CurrentUserCollectionsBuilder } @override - _$CurrentUserCollections build() { + CurrentUserCollections build() => _build(); + + _$CurrentUserCollections _build() { final _$result = _$v ?? new _$CurrentUserCollections._( id: BuiltValueNullFieldError.checkNotNull( - id, 'CurrentUserCollections', 'id'), + id, r'CurrentUserCollections', 'id'), title: title, publishedAt: publishedAt, updatedAt: updatedAt); @@ -207,4 +213,4 @@ class CurrentUserCollectionsBuilder } } -// ignore_for_file: always_put_control_body_on_new_line,always_specify_types,annotate_overrides,avoid_annotating_with_dynamic,avoid_as,avoid_catches_without_on_clauses,avoid_returning_this,deprecated_member_use_from_same_package,lines_longer_than_80_chars,omit_local_variable_types,prefer_expression_function_bodies,sort_constructors_first,test_types_in_equals,unnecessary_const,unnecessary_new +// ignore_for_file: deprecated_member_use_from_same_package,type=lint diff --git a/desktop_photo_search/fluent_ui/lib/src/unsplash/exif.g.dart b/desktop_photo_search/fluent_ui/lib/src/unsplash/exif.g.dart index e2b81a351..dc564add5 100644 --- a/desktop_photo_search/fluent_ui/lib/src/unsplash/exif.g.dart +++ b/desktop_photo_search/fluent_ui/lib/src/unsplash/exif.g.dart @@ -74,7 +74,7 @@ class _$ExifSerializer implements StructuredSerializer { final iterator = serialized.iterator; while (iterator.moveNext()) { - final key = iterator.current as String; + final key = iterator.current! as String; iterator.moveNext(); final Object? value = iterator.current; switch (key) { @@ -124,7 +124,7 @@ class _$Exif extends Exif { final int? iso; factory _$Exif([void Function(ExifBuilder)? updates]) => - (new ExifBuilder()..update(updates)).build(); + (new ExifBuilder()..update(updates))._build(); _$Exif._( {this.make, @@ -156,19 +156,20 @@ class _$Exif extends Exif { @override int get hashCode { - return $jf($jc( - $jc( - $jc( - $jc($jc($jc(0, make.hashCode), model.hashCode), - exposureTime.hashCode), - aperture.hashCode), - focalLength.hashCode), - iso.hashCode)); + var _$hash = 0; + _$hash = $jc(_$hash, make.hashCode); + _$hash = $jc(_$hash, model.hashCode); + _$hash = $jc(_$hash, exposureTime.hashCode); + _$hash = $jc(_$hash, aperture.hashCode); + _$hash = $jc(_$hash, focalLength.hashCode); + _$hash = $jc(_$hash, iso.hashCode); + _$hash = $jf(_$hash); + return _$hash; } @override String toString() { - return (newBuiltValueToStringHelper('Exif') + return (newBuiltValueToStringHelper(r'Exif') ..add('make', make) ..add('model', model) ..add('exposureTime', exposureTime) @@ -234,7 +235,9 @@ class ExifBuilder implements Builder { } @override - _$Exif build() { + Exif build() => _build(); + + _$Exif _build() { final _$result = _$v ?? new _$Exif._( make: make, @@ -248,4 +251,4 @@ class ExifBuilder implements Builder { } } -// ignore_for_file: always_put_control_body_on_new_line,always_specify_types,annotate_overrides,avoid_annotating_with_dynamic,avoid_as,avoid_catches_without_on_clauses,avoid_returning_this,deprecated_member_use_from_same_package,lines_longer_than_80_chars,omit_local_variable_types,prefer_expression_function_bodies,sort_constructors_first,test_types_in_equals,unnecessary_const,unnecessary_new +// ignore_for_file: deprecated_member_use_from_same_package,type=lint diff --git a/desktop_photo_search/fluent_ui/lib/src/unsplash/links.g.dart b/desktop_photo_search/fluent_ui/lib/src/unsplash/links.g.dart index 503f2d39a..1095b8b07 100644 --- a/desktop_photo_search/fluent_ui/lib/src/unsplash/links.g.dart +++ b/desktop_photo_search/fluent_ui/lib/src/unsplash/links.g.dart @@ -61,7 +61,7 @@ class _$LinksSerializer implements StructuredSerializer { final iterator = serialized.iterator; while (iterator.moveNext()) { - final key = iterator.current as String; + final key = iterator.current! as String; iterator.moveNext(); final Object? value = iterator.current; switch (key) { @@ -99,7 +99,7 @@ class _$Links extends Links { final String? downloadLocation; factory _$Links([void Function(LinksBuilder)? updates]) => - (new LinksBuilder()..update(updates)).build(); + (new LinksBuilder()..update(updates))._build(); _$Links._({this.self, this.html, this.download, this.downloadLocation}) : super._(); @@ -123,14 +123,18 @@ class _$Links extends Links { @override int get hashCode { - return $jf($jc( - $jc($jc($jc(0, self.hashCode), html.hashCode), download.hashCode), - downloadLocation.hashCode)); + var _$hash = 0; + _$hash = $jc(_$hash, self.hashCode); + _$hash = $jc(_$hash, html.hashCode); + _$hash = $jc(_$hash, download.hashCode); + _$hash = $jc(_$hash, downloadLocation.hashCode); + _$hash = $jf(_$hash); + return _$hash; } @override String toString() { - return (newBuiltValueToStringHelper('Links') + return (newBuiltValueToStringHelper(r'Links') ..add('self', self) ..add('html', html) ..add('download', download) @@ -185,7 +189,9 @@ class LinksBuilder implements Builder { } @override - _$Links build() { + Links build() => _build(); + + _$Links _build() { final _$result = _$v ?? new _$Links._( self: self, @@ -197,4 +203,4 @@ class LinksBuilder implements Builder { } } -// ignore_for_file: always_put_control_body_on_new_line,always_specify_types,annotate_overrides,avoid_annotating_with_dynamic,avoid_as,avoid_catches_without_on_clauses,avoid_returning_this,deprecated_member_use_from_same_package,lines_longer_than_80_chars,omit_local_variable_types,prefer_expression_function_bodies,sort_constructors_first,test_types_in_equals,unnecessary_const,unnecessary_new +// ignore_for_file: deprecated_member_use_from_same_package,type=lint diff --git a/desktop_photo_search/fluent_ui/lib/src/unsplash/location.g.dart b/desktop_photo_search/fluent_ui/lib/src/unsplash/location.g.dart index 54b96ae73..6e987640a 100644 --- a/desktop_photo_search/fluent_ui/lib/src/unsplash/location.g.dart +++ b/desktop_photo_search/fluent_ui/lib/src/unsplash/location.g.dart @@ -54,7 +54,7 @@ class _$LocationSerializer implements StructuredSerializer { final iterator = serialized.iterator; while (iterator.moveNext()) { - final key = iterator.current as String; + final key = iterator.current! as String; iterator.moveNext(); final Object? value = iterator.current; switch (key) { @@ -86,7 +86,7 @@ class _$Location extends Location { final Position? position; factory _$Location([void Function(LocationBuilder)? updates]) => - (new LocationBuilder()..update(updates)).build(); + (new LocationBuilder()..update(updates))._build(); _$Location._({this.city, this.country, this.position}) : super._(); @@ -108,13 +108,17 @@ class _$Location extends Location { @override int get hashCode { - return $jf( - $jc($jc($jc(0, city.hashCode), country.hashCode), position.hashCode)); + var _$hash = 0; + _$hash = $jc(_$hash, city.hashCode); + _$hash = $jc(_$hash, country.hashCode); + _$hash = $jc(_$hash, position.hashCode); + _$hash = $jf(_$hash); + return _$hash; } @override String toString() { - return (newBuiltValueToStringHelper('Location') + return (newBuiltValueToStringHelper(r'Location') ..add('city', city) ..add('country', country) ..add('position', position)) @@ -162,7 +166,9 @@ class LocationBuilder implements Builder { } @override - _$Location build() { + Location build() => _build(); + + _$Location _build() { _$Location _$result; try { _$result = _$v ?? @@ -175,7 +181,7 @@ class LocationBuilder implements Builder { _position?.build(); } catch (e) { throw new BuiltValueNestedFieldError( - 'Location', _$failedField, e.toString()); + r'Location', _$failedField, e.toString()); } rethrow; } @@ -184,4 +190,4 @@ class LocationBuilder implements Builder { } } -// ignore_for_file: always_put_control_body_on_new_line,always_specify_types,annotate_overrides,avoid_annotating_with_dynamic,avoid_as,avoid_catches_without_on_clauses,avoid_returning_this,deprecated_member_use_from_same_package,lines_longer_than_80_chars,omit_local_variable_types,prefer_expression_function_bodies,sort_constructors_first,test_types_in_equals,unnecessary_const,unnecessary_new +// ignore_for_file: deprecated_member_use_from_same_package,type=lint diff --git a/desktop_photo_search/fluent_ui/lib/src/unsplash/photo.g.dart b/desktop_photo_search/fluent_ui/lib/src/unsplash/photo.g.dart index 69bcb8b28..d7f14ae36 100644 --- a/desktop_photo_search/fluent_ui/lib/src/unsplash/photo.g.dart +++ b/desktop_photo_search/fluent_ui/lib/src/unsplash/photo.g.dart @@ -146,13 +146,13 @@ class _$PhotoSerializer implements StructuredSerializer { final iterator = serialized.iterator; while (iterator.moveNext()) { - final key = iterator.current as String; + final key = iterator.current! as String; iterator.moveNext(); final Object? value = iterator.current; switch (key) { case 'id': result.id = serializers.deserialize(value, - specifiedType: const FullType(String)) as String; + specifiedType: const FullType(String))! as String; break; case 'created_at': result.createdAt = serializers.deserialize(value, @@ -266,7 +266,7 @@ class _$Photo extends Photo { final User? user; factory _$Photo([void Function(PhotoBuilder)? updates]) => - (new PhotoBuilder()..update(updates)).build(); + (new PhotoBuilder()..update(updates))._build(); _$Photo._( {required this.id, @@ -287,7 +287,7 @@ class _$Photo extends Photo { this.links, this.user}) : super._() { - BuiltValueNullFieldError.checkNotNull(id, 'Photo', 'id'); + BuiltValueNullFieldError.checkNotNull(id, r'Photo', 'id'); } @override @@ -322,49 +322,31 @@ class _$Photo extends Photo { @override int get hashCode { - return $jf($jc( - $jc( - $jc( - $jc( - $jc( - $jc( - $jc( - $jc( - $jc( - $jc( - $jc( - $jc( - $jc( - $jc( - $jc( - $jc( - $jc( - 0, - id - .hashCode), - createdAt - .hashCode), - updatedAt - .hashCode), - width.hashCode), - height.hashCode), - color.hashCode), - downloads.hashCode), - likes.hashCode), - likedByUser.hashCode), - description.hashCode), - exif.hashCode), - location.hashCode), - tags.hashCode), - currentUserCollections.hashCode), - urls.hashCode), - links.hashCode), - user.hashCode)); + var _$hash = 0; + _$hash = $jc(_$hash, id.hashCode); + _$hash = $jc(_$hash, createdAt.hashCode); + _$hash = $jc(_$hash, updatedAt.hashCode); + _$hash = $jc(_$hash, width.hashCode); + _$hash = $jc(_$hash, height.hashCode); + _$hash = $jc(_$hash, color.hashCode); + _$hash = $jc(_$hash, downloads.hashCode); + _$hash = $jc(_$hash, likes.hashCode); + _$hash = $jc(_$hash, likedByUser.hashCode); + _$hash = $jc(_$hash, description.hashCode); + _$hash = $jc(_$hash, exif.hashCode); + _$hash = $jc(_$hash, location.hashCode); + _$hash = $jc(_$hash, tags.hashCode); + _$hash = $jc(_$hash, currentUserCollections.hashCode); + _$hash = $jc(_$hash, urls.hashCode); + _$hash = $jc(_$hash, links.hashCode); + _$hash = $jc(_$hash, user.hashCode); + _$hash = $jf(_$hash); + return _$hash; } @override String toString() { - return (newBuiltValueToStringHelper('Photo') + return (newBuiltValueToStringHelper(r'Photo') ..add('id', id) ..add('createdAt', createdAt) ..add('updatedAt', updatedAt) @@ -500,12 +482,14 @@ class PhotoBuilder implements Builder { } @override - _$Photo build() { + Photo build() => _build(); + + _$Photo _build() { _$Photo _$result; try { _$result = _$v ?? new _$Photo._( - id: BuiltValueNullFieldError.checkNotNull(id, 'Photo', 'id'), + id: BuiltValueNullFieldError.checkNotNull(id, r'Photo', 'id'), createdAt: createdAt, updatedAt: updatedAt, width: width, @@ -541,7 +525,7 @@ class PhotoBuilder implements Builder { _user?.build(); } catch (e) { throw new BuiltValueNestedFieldError( - 'Photo', _$failedField, e.toString()); + r'Photo', _$failedField, e.toString()); } rethrow; } @@ -550,4 +534,4 @@ class PhotoBuilder implements Builder { } } -// ignore_for_file: always_put_control_body_on_new_line,always_specify_types,annotate_overrides,avoid_annotating_with_dynamic,avoid_as,avoid_catches_without_on_clauses,avoid_returning_this,deprecated_member_use_from_same_package,lines_longer_than_80_chars,omit_local_variable_types,prefer_expression_function_bodies,sort_constructors_first,test_types_in_equals,unnecessary_const,unnecessary_new +// ignore_for_file: deprecated_member_use_from_same_package,type=lint diff --git a/desktop_photo_search/fluent_ui/lib/src/unsplash/position.g.dart b/desktop_photo_search/fluent_ui/lib/src/unsplash/position.g.dart index 6fb2a843e..a7369fa60 100644 --- a/desktop_photo_search/fluent_ui/lib/src/unsplash/position.g.dart +++ b/desktop_photo_search/fluent_ui/lib/src/unsplash/position.g.dart @@ -40,17 +40,17 @@ class _$PositionSerializer implements StructuredSerializer { final iterator = serialized.iterator; while (iterator.moveNext()) { - final key = iterator.current as String; + final key = iterator.current! as String; iterator.moveNext(); final Object? value = iterator.current; switch (key) { case 'latitude': result.latitude = serializers.deserialize(value, - specifiedType: const FullType(double)) as double; + specifiedType: const FullType(double))! as double; break; case 'longitude': result.longitude = serializers.deserialize(value, - specifiedType: const FullType(double)) as double; + specifiedType: const FullType(double))! as double; break; } } @@ -66,11 +66,11 @@ class _$Position extends Position { final double longitude; factory _$Position([void Function(PositionBuilder)? updates]) => - (new PositionBuilder()..update(updates)).build(); + (new PositionBuilder()..update(updates))._build(); _$Position._({required this.latitude, required this.longitude}) : super._() { - BuiltValueNullFieldError.checkNotNull(latitude, 'Position', 'latitude'); - BuiltValueNullFieldError.checkNotNull(longitude, 'Position', 'longitude'); + BuiltValueNullFieldError.checkNotNull(latitude, r'Position', 'latitude'); + BuiltValueNullFieldError.checkNotNull(longitude, r'Position', 'longitude'); } @override @@ -90,12 +90,16 @@ class _$Position extends Position { @override int get hashCode { - return $jf($jc($jc(0, latitude.hashCode), longitude.hashCode)); + var _$hash = 0; + _$hash = $jc(_$hash, latitude.hashCode); + _$hash = $jc(_$hash, longitude.hashCode); + _$hash = $jf(_$hash); + return _$hash; } @override String toString() { - return (newBuiltValueToStringHelper('Position') + return (newBuiltValueToStringHelper(r'Position') ..add('latitude', latitude) ..add('longitude', longitude)) .toString(); @@ -137,16 +141,18 @@ class PositionBuilder implements Builder { } @override - _$Position build() { + Position build() => _build(); + + _$Position _build() { final _$result = _$v ?? new _$Position._( latitude: BuiltValueNullFieldError.checkNotNull( - latitude, 'Position', 'latitude'), + latitude, r'Position', 'latitude'), longitude: BuiltValueNullFieldError.checkNotNull( - longitude, 'Position', 'longitude')); + longitude, r'Position', 'longitude')); replace(_$result); return _$result; } } -// ignore_for_file: always_put_control_body_on_new_line,always_specify_types,annotate_overrides,avoid_annotating_with_dynamic,avoid_as,avoid_catches_without_on_clauses,avoid_returning_this,deprecated_member_use_from_same_package,lines_longer_than_80_chars,omit_local_variable_types,prefer_expression_function_bodies,sort_constructors_first,test_types_in_equals,unnecessary_const,unnecessary_new +// ignore_for_file: deprecated_member_use_from_same_package,type=lint diff --git a/desktop_photo_search/fluent_ui/lib/src/unsplash/search_photos_response.g.dart b/desktop_photo_search/fluent_ui/lib/src/unsplash/search_photos_response.g.dart index f967573a4..a79ae312e 100644 --- a/desktop_photo_search/fluent_ui/lib/src/unsplash/search_photos_response.g.dart +++ b/desktop_photo_search/fluent_ui/lib/src/unsplash/search_photos_response.g.dart @@ -57,7 +57,7 @@ class _$SearchPhotosResponseSerializer final iterator = serialized.iterator; while (iterator.moveNext()) { - final key = iterator.current as String; + final key = iterator.current! as String; iterator.moveNext(); final Object? value = iterator.current; switch (key) { @@ -92,12 +92,12 @@ class _$SearchPhotosResponse extends SearchPhotosResponse { factory _$SearchPhotosResponse( [void Function(SearchPhotosResponseBuilder)? updates]) => - (new SearchPhotosResponseBuilder()..update(updates)).build(); + (new SearchPhotosResponseBuilder()..update(updates))._build(); _$SearchPhotosResponse._({this.total, this.totalPages, required this.results}) : super._() { BuiltValueNullFieldError.checkNotNull( - results, 'SearchPhotosResponse', 'results'); + results, r'SearchPhotosResponse', 'results'); } @override @@ -120,13 +120,17 @@ class _$SearchPhotosResponse extends SearchPhotosResponse { @override int get hashCode { - return $jf($jc( - $jc($jc(0, total.hashCode), totalPages.hashCode), results.hashCode)); + var _$hash = 0; + _$hash = $jc(_$hash, total.hashCode); + _$hash = $jc(_$hash, totalPages.hashCode); + _$hash = $jc(_$hash, results.hashCode); + _$hash = $jf(_$hash); + return _$hash; } @override String toString() { - return (newBuiltValueToStringHelper('SearchPhotosResponse') + return (newBuiltValueToStringHelper(r'SearchPhotosResponse') ..add('total', total) ..add('totalPages', totalPages) ..add('results', results)) @@ -176,7 +180,9 @@ class SearchPhotosResponseBuilder } @override - _$SearchPhotosResponse build() { + SearchPhotosResponse build() => _build(); + + _$SearchPhotosResponse _build() { _$SearchPhotosResponse _$result; try { _$result = _$v ?? @@ -189,7 +195,7 @@ class SearchPhotosResponseBuilder results.build(); } catch (e) { throw new BuiltValueNestedFieldError( - 'SearchPhotosResponse', _$failedField, e.toString()); + r'SearchPhotosResponse', _$failedField, e.toString()); } rethrow; } @@ -198,4 +204,4 @@ class SearchPhotosResponseBuilder } } -// ignore_for_file: always_put_control_body_on_new_line,always_specify_types,annotate_overrides,avoid_annotating_with_dynamic,avoid_as,avoid_catches_without_on_clauses,avoid_returning_this,deprecated_member_use_from_same_package,lines_longer_than_80_chars,omit_local_variable_types,prefer_expression_function_bodies,sort_constructors_first,test_types_in_equals,unnecessary_const,unnecessary_new +// ignore_for_file: deprecated_member_use_from_same_package,type=lint diff --git a/desktop_photo_search/fluent_ui/lib/src/unsplash/tags.g.dart b/desktop_photo_search/fluent_ui/lib/src/unsplash/tags.g.dart index 11a0de32f..4c934862e 100644 --- a/desktop_photo_search/fluent_ui/lib/src/unsplash/tags.g.dart +++ b/desktop_photo_search/fluent_ui/lib/src/unsplash/tags.g.dart @@ -37,13 +37,13 @@ class _$TagsSerializer implements StructuredSerializer { final iterator = serialized.iterator; while (iterator.moveNext()) { - final key = iterator.current as String; + final key = iterator.current! as String; iterator.moveNext(); final Object? value = iterator.current; switch (key) { case 'title': result.title = serializers.deserialize(value, - specifiedType: const FullType(String)) as String; + specifiedType: const FullType(String))! as String; break; } } @@ -57,10 +57,10 @@ class _$Tags extends Tags { final String title; factory _$Tags([void Function(TagsBuilder)? updates]) => - (new TagsBuilder()..update(updates)).build(); + (new TagsBuilder()..update(updates))._build(); _$Tags._({required this.title}) : super._() { - BuiltValueNullFieldError.checkNotNull(title, 'Tags', 'title'); + BuiltValueNullFieldError.checkNotNull(title, r'Tags', 'title'); } @override @@ -78,12 +78,15 @@ class _$Tags extends Tags { @override int get hashCode { - return $jf($jc(0, title.hashCode)); + var _$hash = 0; + _$hash = $jc(_$hash, title.hashCode); + _$hash = $jf(_$hash); + return _$hash; } @override String toString() { - return (newBuiltValueToStringHelper('Tags')..add('title', title)) + return (newBuiltValueToStringHelper(r'Tags')..add('title', title)) .toString(); } } @@ -118,14 +121,16 @@ class TagsBuilder implements Builder { } @override - _$Tags build() { + Tags build() => _build(); + + _$Tags _build() { final _$result = _$v ?? new _$Tags._( title: - BuiltValueNullFieldError.checkNotNull(title, 'Tags', 'title')); + BuiltValueNullFieldError.checkNotNull(title, r'Tags', 'title')); replace(_$result); return _$result; } } -// ignore_for_file: always_put_control_body_on_new_line,always_specify_types,annotate_overrides,avoid_annotating_with_dynamic,avoid_as,avoid_catches_without_on_clauses,avoid_returning_this,deprecated_member_use_from_same_package,lines_longer_than_80_chars,omit_local_variable_types,prefer_expression_function_bodies,sort_constructors_first,test_types_in_equals,unnecessary_const,unnecessary_new +// ignore_for_file: deprecated_member_use_from_same_package,type=lint diff --git a/desktop_photo_search/fluent_ui/lib/src/unsplash/urls.g.dart b/desktop_photo_search/fluent_ui/lib/src/unsplash/urls.g.dart index 5983509e9..1fd1b2247 100644 --- a/desktop_photo_search/fluent_ui/lib/src/unsplash/urls.g.dart +++ b/desktop_photo_search/fluent_ui/lib/src/unsplash/urls.g.dart @@ -68,7 +68,7 @@ class _$UrlsSerializer implements StructuredSerializer { final iterator = serialized.iterator; while (iterator.moveNext()) { - final key = iterator.current as String; + final key = iterator.current! as String; iterator.moveNext(); final Object? value = iterator.current; switch (key) { @@ -112,7 +112,7 @@ class _$Urls extends Urls { final String? thumb; factory _$Urls([void Function(UrlsBuilder)? updates]) => - (new UrlsBuilder()..update(updates)).build(); + (new UrlsBuilder()..update(updates))._build(); _$Urls._({this.raw, this.full, this.regular, this.small, this.thumb}) : super._(); @@ -137,15 +137,19 @@ class _$Urls extends Urls { @override int get hashCode { - return $jf($jc( - $jc($jc($jc($jc(0, raw.hashCode), full.hashCode), regular.hashCode), - small.hashCode), - thumb.hashCode)); + var _$hash = 0; + _$hash = $jc(_$hash, raw.hashCode); + _$hash = $jc(_$hash, full.hashCode); + _$hash = $jc(_$hash, regular.hashCode); + _$hash = $jc(_$hash, small.hashCode); + _$hash = $jc(_$hash, thumb.hashCode); + _$hash = $jf(_$hash); + return _$hash; } @override String toString() { - return (newBuiltValueToStringHelper('Urls') + return (newBuiltValueToStringHelper(r'Urls') ..add('raw', raw) ..add('full', full) ..add('regular', regular) @@ -205,7 +209,9 @@ class UrlsBuilder implements Builder { } @override - _$Urls build() { + Urls build() => _build(); + + _$Urls _build() { final _$result = _$v ?? new _$Urls._( raw: raw, full: full, regular: regular, small: small, thumb: thumb); @@ -214,4 +220,4 @@ class UrlsBuilder implements Builder { } } -// ignore_for_file: always_put_control_body_on_new_line,always_specify_types,annotate_overrides,avoid_annotating_with_dynamic,avoid_as,avoid_catches_without_on_clauses,avoid_returning_this,deprecated_member_use_from_same_package,lines_longer_than_80_chars,omit_local_variable_types,prefer_expression_function_bodies,sort_constructors_first,test_types_in_equals,unnecessary_const,unnecessary_new +// ignore_for_file: deprecated_member_use_from_same_package,type=lint diff --git a/desktop_photo_search/fluent_ui/lib/src/unsplash/user.g.dart b/desktop_photo_search/fluent_ui/lib/src/unsplash/user.g.dart index dfb9987d3..4eb50c011 100644 --- a/desktop_photo_search/fluent_ui/lib/src/unsplash/user.g.dart +++ b/desktop_photo_search/fluent_ui/lib/src/unsplash/user.g.dart @@ -94,13 +94,13 @@ class _$UserSerializer implements StructuredSerializer { final iterator = serialized.iterator; while (iterator.moveNext()) { - final key = iterator.current as String; + final key = iterator.current! as String; iterator.moveNext(); final Object? value = iterator.current; switch (key) { case 'id': result.id = serializers.deserialize(value, - specifiedType: const FullType(String)) as String; + specifiedType: const FullType(String))! as String; break; case 'updated_at': result.updatedAt = serializers.deserialize(value, @@ -108,11 +108,11 @@ class _$UserSerializer implements StructuredSerializer { break; case 'username': result.username = serializers.deserialize(value, - specifiedType: const FullType(String)) as String; + specifiedType: const FullType(String))! as String; break; case 'name': result.name = serializers.deserialize(value, - specifiedType: const FullType(String)) as String; + specifiedType: const FullType(String))! as String; break; case 'portfolio_url': result.portfolioUrl = serializers.deserialize(value, @@ -174,7 +174,7 @@ class _$User extends User { final Links? links; factory _$User([void Function(UserBuilder)? updates]) => - (new UserBuilder()..update(updates)).build(); + (new UserBuilder()..update(updates))._build(); _$User._( {required this.id, @@ -189,9 +189,9 @@ class _$User extends User { this.totalCollections, this.links}) : super._() { - BuiltValueNullFieldError.checkNotNull(id, 'User', 'id'); - BuiltValueNullFieldError.checkNotNull(username, 'User', 'username'); - BuiltValueNullFieldError.checkNotNull(name, 'User', 'name'); + BuiltValueNullFieldError.checkNotNull(id, r'User', 'id'); + BuiltValueNullFieldError.checkNotNull(username, r'User', 'username'); + BuiltValueNullFieldError.checkNotNull(name, r'User', 'name'); } @override @@ -220,31 +220,25 @@ class _$User extends User { @override int get hashCode { - return $jf($jc( - $jc( - $jc( - $jc( - $jc( - $jc( - $jc( - $jc( - $jc( - $jc($jc(0, id.hashCode), - updatedAt.hashCode), - username.hashCode), - name.hashCode), - portfolioUrl.hashCode), - bio.hashCode), - location.hashCode), - totalLikes.hashCode), - totalPhotos.hashCode), - totalCollections.hashCode), - links.hashCode)); + var _$hash = 0; + _$hash = $jc(_$hash, id.hashCode); + _$hash = $jc(_$hash, updatedAt.hashCode); + _$hash = $jc(_$hash, username.hashCode); + _$hash = $jc(_$hash, name.hashCode); + _$hash = $jc(_$hash, portfolioUrl.hashCode); + _$hash = $jc(_$hash, bio.hashCode); + _$hash = $jc(_$hash, location.hashCode); + _$hash = $jc(_$hash, totalLikes.hashCode); + _$hash = $jc(_$hash, totalPhotos.hashCode); + _$hash = $jc(_$hash, totalCollections.hashCode); + _$hash = $jc(_$hash, links.hashCode); + _$hash = $jf(_$hash); + return _$hash; } @override String toString() { - return (newBuiltValueToStringHelper('User') + return (newBuiltValueToStringHelper(r'User') ..add('id', id) ..add('updatedAt', updatedAt) ..add('username', username) @@ -341,16 +335,19 @@ class UserBuilder implements Builder { } @override - _$User build() { + User build() => _build(); + + _$User _build() { _$User _$result; try { _$result = _$v ?? new _$User._( - id: BuiltValueNullFieldError.checkNotNull(id, 'User', 'id'), + id: BuiltValueNullFieldError.checkNotNull(id, r'User', 'id'), updatedAt: updatedAt, username: BuiltValueNullFieldError.checkNotNull( - username, 'User', 'username'), - name: BuiltValueNullFieldError.checkNotNull(name, 'User', 'name'), + username, r'User', 'username'), + name: + BuiltValueNullFieldError.checkNotNull(name, r'User', 'name'), portfolioUrl: portfolioUrl, bio: bio, location: location, @@ -365,7 +362,7 @@ class UserBuilder implements Builder { _links?.build(); } catch (e) { throw new BuiltValueNestedFieldError( - 'User', _$failedField, e.toString()); + r'User', _$failedField, e.toString()); } rethrow; } @@ -374,4 +371,4 @@ class UserBuilder implements Builder { } } -// ignore_for_file: always_put_control_body_on_new_line,always_specify_types,annotate_overrides,avoid_annotating_with_dynamic,avoid_as,avoid_catches_without_on_clauses,avoid_returning_this,deprecated_member_use_from_same_package,lines_longer_than_80_chars,omit_local_variable_types,prefer_expression_function_bodies,sort_constructors_first,test_types_in_equals,unnecessary_const,unnecessary_new +// ignore_for_file: deprecated_member_use_from_same_package,type=lint diff --git a/desktop_photo_search/fluent_ui/lib/src/widgets/photo_details.dart b/desktop_photo_search/fluent_ui/lib/src/widgets/photo_details.dart index 42aec68b4..1de3e96ff 100644 --- a/desktop_photo_search/fluent_ui/lib/src/widgets/photo_details.dart +++ b/desktop_photo_search/fluent_ui/lib/src/widgets/photo_details.dart @@ -37,7 +37,7 @@ class _PhotoDetailsState extends State { Link( uri: Uri.parse( 'https://unsplash.com/@${widget.photo.user!.username}?utm_source=$unsplashAppName&utm_medium=referral'), - builder: (context, followLink) => TextButton( + builder: (context, followLink) => HyperlinkButton( onPressed: followLink, child: Text(widget.photo.user!.name), ), @@ -45,7 +45,7 @@ class _PhotoDetailsState extends State { const Text('on'), Link( uri: _unsplashHomepage, - builder: (context, followLink) => TextButton( + builder: (context, followLink) => HyperlinkButton( onPressed: followLink, child: const Text('Unsplash'), ), @@ -58,6 +58,7 @@ class _PhotoDetailsState extends State { Widget build(BuildContext context) { return Scrollbar( child: SingleChildScrollView( + primary: true, child: Center( child: Column( mainAxisSize: MainAxisSize.min, diff --git a/desktop_photo_search/fluent_ui/lib/src/widgets/unsplash_search_content.dart b/desktop_photo_search/fluent_ui/lib/src/widgets/unsplash_search_content.dart index 8461f97f0..558d50180 100644 --- a/desktop_photo_search/fluent_ui/lib/src/widgets/unsplash_search_content.dart +++ b/desktop_photo_search/fluent_ui/lib/src/widgets/unsplash_search_content.dart @@ -48,7 +48,7 @@ class _UnsplashSearchContentState extends State { ? PhotoDetails( photo: photoSearchModel.selectedPhoto!, onPhotoSave: (photo) async { - final path = await getSavePath( + final saveLocation = await getSaveLocation( suggestedName: '${photo.id}.jpg', acceptedTypeGroups: [ const XTypeGroup( @@ -58,12 +58,12 @@ class _UnsplashSearchContentState extends State { ), ], ); - if (path != null) { + if (saveLocation != null) { final fileData = await photoSearchModel.download(photo: photo); final photoFile = XFile.fromData(fileData, mimeType: 'image/jpeg'); - await photoFile.saveTo(path); + await photoFile.saveTo(saveLocation.path); } }, ) diff --git a/desktop_photo_search/fluent_ui/linux/CMakeLists.txt b/desktop_photo_search/fluent_ui/linux/CMakeLists.txt index 84c0f3239..ce629d6f7 100644 --- a/desktop_photo_search/fluent_ui/linux/CMakeLists.txt +++ b/desktop_photo_search/fluent_ui/linux/CMakeLists.txt @@ -86,6 +86,7 @@ set_target_properties(${BINARY_NAME} RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" ) + # Generated plugin build rules, which manage building the plugins and adding # them to the application. include(flutter/generated_plugins.cmake) diff --git a/desktop_photo_search/fluent_ui/macos/Podfile b/desktop_photo_search/fluent_ui/macos/Podfile index 049abe295..c795730db 100644 --- a/desktop_photo_search/fluent_ui/macos/Podfile +++ b/desktop_photo_search/fluent_ui/macos/Podfile @@ -31,6 +31,9 @@ target 'Runner' do use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end end post_install do |installer| diff --git a/desktop_photo_search/fluent_ui/macos/Runner.xcodeproj/project.pbxproj b/desktop_photo_search/fluent_ui/macos/Runner.xcodeproj/project.pbxproj index ef34e95e7..0bee7769f 100644 --- a/desktop_photo_search/fluent_ui/macos/Runner.xcodeproj/project.pbxproj +++ b/desktop_photo_search/fluent_ui/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,24 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 745137D0834A2D4F8889292A /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B0BC5CFC704999644C639121 /* Pods_RunnerTests.framework */; }; + 999B0F98F071B0C9D9683642 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 76B5AE53CC529C46B6EC6C1B /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 33CC10E52044A3C60003C045 /* Project object */; @@ -52,9 +62,12 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 21F13A631677FA738AB4D109 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* desktop_photo_search.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "desktop_photo_search.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10ED2044A3C60003C045 /* desktop_photo_search.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = desktop_photo_search.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; @@ -66,21 +79,59 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 40C3F07891D26F7FE298A6F1 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 76B5AE53CC529C46B6EC6C1B /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 904324BDB648805376A16F84 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + AA5E1F4BB283130DA2614DB2 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + B0BC5CFC704999644C639121 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + E354BCCBC2823DF8BFD51CB2 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + F76A9D37696853FBDF25D527 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 745137D0834A2D4F8889292A /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 33CC10EA2044A3C60003C045 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 999B0F98F071B0C9D9683642 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 05F17B9C093F7CE4C9830993 /* Pods */ = { + isa = PBXGroup; + children = ( + AA5E1F4BB283130DA2614DB2 /* Pods-Runner.debug.xcconfig */, + 40C3F07891D26F7FE298A6F1 /* Pods-Runner.release.xcconfig */, + E354BCCBC2823DF8BFD51CB2 /* Pods-Runner.profile.xcconfig */, + 21F13A631677FA738AB4D109 /* Pods-RunnerTests.debug.xcconfig */, + F76A9D37696853FBDF25D527 /* Pods-RunnerTests.release.xcconfig */, + 904324BDB648805376A16F84 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; 33BA886A226E78AF003329D5 /* Configs */ = { isa = PBXGroup; children = ( @@ -97,8 +148,10 @@ children = ( 33FAB671232836740065AC1E /* Runner */, 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, + 05F17B9C093F7CE4C9830993 /* Pods */, ); sourceTree = ""; }; @@ -106,6 +159,7 @@ isa = PBXGroup; children = ( 33CC10ED2044A3C60003C045 /* desktop_photo_search.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, ); name = Products; sourceTree = ""; @@ -148,6 +202,8 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( + 76B5AE53CC529C46B6EC6C1B /* Pods_Runner.framework */, + B0BC5CFC704999644C639121 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -155,15 +211,36 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 5676E657E5D23DD884236173 /* [CP] Check Pods Manifest.lock */, + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; 33CC10EC2044A3C60003C045 /* Runner */ = { isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + 22A8BA68BA495B4481EAAC3A /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, + A3CFDCD3B051E39D06DD0D39 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -182,9 +259,13 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0920; - LastUpgradeCheck = 1300; + LastUpgradeCheck = 1430; ORGANIZATIONNAME = ""; TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; 33CC10EC2044A3C60003C045 = { CreatedOnToolsVersion = 9.2; LastSwiftMigration = 1100; @@ -215,12 +296,20 @@ projectRoot = ""; targets = ( 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, 33CC111A2044C6BA0003C045 /* Flutter Assemble */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 33CC10EB2044A3C60003C045 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -233,6 +322,28 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 22A8BA68BA495B4481EAAC3A /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -271,9 +382,56 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; + 5676E657E5D23DD884236173 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + A3CFDCD3B051E39D06DD0D39 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 33CC10E92044A3C60003C045 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -287,6 +445,11 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; @@ -307,6 +470,51 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 21F13A631677FA738AB4D109 /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.desktopPhotoSearch.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/desktop_photo_search.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/desktop_photo_search"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = F76A9D37696853FBDF25D527 /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.desktopPhotoSearch.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/desktop_photo_search.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/desktop_photo_search"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 904324BDB648805376A16F84 /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.desktopPhotoSearch.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/desktop_photo_search.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/desktop_photo_search"; + }; + name = Profile; + }; 338D0CE9231458BD00FA5F75 /* Profile */ = { isa = XCBuildConfiguration; baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; @@ -537,6 +745,16 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/desktop_photo_search/fluent_ui/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/desktop_photo_search/fluent_ui/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 22a9bd6f2..1bc827721 100644 --- a/desktop_photo_search/fluent_ui/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/desktop_photo_search/fluent_ui/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ + + + + =2.17.0-0 <3.0.0" + sdk: ^3.1.0 dependencies: built_collection: ^5.1.1 - built_value: ^8.3.0 - cupertino_icons: ^1.0.2 - file_selector: ^0.9.1 - fluent_ui: ^4.0.0 - fluentui_system_icons: ^1.1.168 + built_value: ^8.6.1 + cupertino_icons: ^1.0.5 + file_selector: ^1.0.0 + fluent_ui: ^4.7.2 + fluentui_system_icons: ^1.1.208 flutter: sdk: flutter - http: ^0.13.4 - logging: ^1.0.2 + http: ^1.1.0 + logging: ^1.2.0 menubar: git: url: https://github.com/google/flutter-desktop-embedding.git path: plugins/menubar - ref: 12decbe0f592e14e03223f6f2c0c7e0e2dbd70a1 - provider: ^6.0.2 - transparent_image: ^2.0.0 - url_launcher: ^6.1.1 - uuid: ^3.0.5 + provider: ^6.0.5 + transparent_image: ^2.0.1 + url_launcher: ^6.1.12 + uuid: ^4.0.0 window_size: git: url: https://github.com/google/flutter-desktop-embedding.git path: plugins/window_size - ref: 12decbe0f592e14e03223f6f2c0c7e0e2dbd70a1 dev_dependencies: - async: ^2.8.2 - build: ^2.2.1 - build_runner: ^2.1.7 - built_value_generator: ^8.3.0 - flutter_lints: ^2.0.1 + analysis_defaults: + path: ../../analysis_defaults + async: ^2.11.0 + build: ^2.4.1 + build_runner: ^2.4.6 + built_value_generator: ^8.6.1 flutter_test: sdk: flutter - grinder: ^0.9.0 - msix: ^3.6.1 + grinder: ^0.9.4 + msix: ^3.16.1 flutter: uses-material-design: true diff --git a/desktop_photo_search/fluent_ui/windows/CMakeLists.txt b/desktop_photo_search/fluent_ui/windows/CMakeLists.txt index 2b0413165..a8aac9b6f 100644 --- a/desktop_photo_search/fluent_ui/windows/CMakeLists.txt +++ b/desktop_photo_search/fluent_ui/windows/CMakeLists.txt @@ -8,7 +8,7 @@ set(BINARY_NAME "desktop_photo_search") # Explicitly opt in to modern CMake behaviors to avoid warnings with recent # versions of CMake. -cmake_policy(SET CMP0063 NEW) +cmake_policy(VERSION 3.14...3.25) # Define build configuration option. get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) @@ -52,6 +52,7 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) # Application build; see runner/CMakeLists.txt. add_subdirectory("runner") + # Generated plugin build rules, which manage building the plugins and adding # them to the application. include(flutter/generated_plugins.cmake) diff --git a/desktop_photo_search/fluent_ui/windows/runner/flutter_window.cpp b/desktop_photo_search/fluent_ui/windows/runner/flutter_window.cpp index b25e363ef..955ee3038 100644 --- a/desktop_photo_search/fluent_ui/windows/runner/flutter_window.cpp +++ b/desktop_photo_search/fluent_ui/windows/runner/flutter_window.cpp @@ -31,6 +31,11 @@ bool FlutterWindow::OnCreate() { this->Show(); }); + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + return true; } diff --git a/desktop_photo_search/fluent_ui/windows/runner/utils.cpp b/desktop_photo_search/fluent_ui/windows/runner/utils.cpp index f5bf9fa0f..b2b08734d 100644 --- a/desktop_photo_search/fluent_ui/windows/runner/utils.cpp +++ b/desktop_photo_search/fluent_ui/windows/runner/utils.cpp @@ -47,16 +47,17 @@ std::string Utf8FromUtf16(const wchar_t* utf16_string) { } int target_length = ::WideCharToMultiByte( CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, nullptr, 0, nullptr, nullptr); + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); std::string utf8_string; - if (target_length == 0 || target_length > utf8_string.max_size()) { + if (target_length <= 0 || target_length > utf8_string.max_size()) { return utf8_string; } utf8_string.resize(target_length); int converted_length = ::WideCharToMultiByte( CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, utf8_string.data(), - target_length, nullptr, nullptr); + input_length, utf8_string.data(), target_length, nullptr, nullptr); if (converted_length == 0) { return std::string(); } diff --git a/desktop_photo_search/fluent_ui/windows/runner/win32_window.cpp b/desktop_photo_search/fluent_ui/windows/runner/win32_window.cpp index 041a38554..60608d0fe 100644 --- a/desktop_photo_search/fluent_ui/windows/runner/win32_window.cpp +++ b/desktop_photo_search/fluent_ui/windows/runner/win32_window.cpp @@ -60,7 +60,7 @@ class WindowClassRegistrar { public: ~WindowClassRegistrar() = default; - // Returns the singleton registar instance. + // Returns the singleton registrar instance. static WindowClassRegistrar* GetInstance() { if (!instance_) { instance_ = new WindowClassRegistrar(); diff --git a/desktop_photo_search/fluent_ui/windows/runner/win32_window.h b/desktop_photo_search/fluent_ui/windows/runner/win32_window.h index c86632d8a..e901dde68 100644 --- a/desktop_photo_search/fluent_ui/windows/runner/win32_window.h +++ b/desktop_photo_search/fluent_ui/windows/runner/win32_window.h @@ -77,7 +77,7 @@ class Win32Window { // OS callback called by message pump. Handles the WM_NCCREATE message which // is passed when the non-client area is being created and enables automatic // non-client DPI scaling so that the non-client area automatically - // responsponds to changes in DPI. All other messages are handled by + // responds to changes in DPI. All other messages are handled by // MessageHandler. static LRESULT CALLBACK WndProc(HWND const window, UINT const message, diff --git a/desktop_photo_search/material/.metadata b/desktop_photo_search/material/.metadata index a92759766..a3e76dd58 100644 --- a/desktop_photo_search/material/.metadata +++ b/desktop_photo_search/material/.metadata @@ -1,11 +1,11 @@ # This file tracks properties of this Flutter project. # Used by Flutter tool to assess capabilities and perform upgrades etc. # -# This file should be version controlled. +# This file should be version controlled and should not be manually edited. version: - revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - channel: beta + revision: "ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a" + channel: "stable" project_type: app @@ -13,17 +13,17 @@ project_type: app migration: platforms: - platform: root - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a - platform: linux - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a - platform: macos - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a - platform: windows - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a # User provided section diff --git a/desktop_photo_search/material/analysis_options.yaml b/desktop_photo_search/material/analysis_options.yaml index b27820a40..f6bfd9b61 100644 --- a/desktop_photo_search/material/analysis_options.yaml +++ b/desktop_photo_search/material/analysis_options.yaml @@ -1,7 +1,4 @@ -include: ../../analysis_options.yaml - -analyzer: - exclude: [lib/src/**.g.dart] +include: package:analysis_defaults/flutter.yaml linter: rules: diff --git a/desktop_photo_search/material/lib/src/model/search.g.dart b/desktop_photo_search/material/lib/src/model/search.g.dart index 37172fcf0..bc5c6920f 100644 --- a/desktop_photo_search/material/lib/src/model/search.g.dart +++ b/desktop_photo_search/material/lib/src/model/search.g.dart @@ -41,13 +41,13 @@ class _$SearchSerializer implements StructuredSerializer { final iterator = serialized.iterator; while (iterator.moveNext()) { - final key = iterator.current as String; + final key = iterator.current! as String; iterator.moveNext(); final Object? value = iterator.current; switch (key) { case 'query': result.query = serializers.deserialize(value, - specifiedType: const FullType(String)) as String; + specifiedType: const FullType(String))! as String; break; case 'results': result.results.replace(serializers.deserialize(value, @@ -69,11 +69,11 @@ class _$Search extends Search { final BuiltList results; factory _$Search([void Function(SearchBuilder)? updates]) => - (new SearchBuilder()..update(updates)).build(); + (new SearchBuilder()..update(updates))._build(); _$Search._({required this.query, required this.results}) : super._() { - BuiltValueNullFieldError.checkNotNull(query, 'Search', 'query'); - BuiltValueNullFieldError.checkNotNull(results, 'Search', 'results'); + BuiltValueNullFieldError.checkNotNull(query, r'Search', 'query'); + BuiltValueNullFieldError.checkNotNull(results, r'Search', 'results'); } @override @@ -91,12 +91,16 @@ class _$Search extends Search { @override int get hashCode { - return $jf($jc($jc(0, query.hashCode), results.hashCode)); + var _$hash = 0; + _$hash = $jc(_$hash, query.hashCode); + _$hash = $jc(_$hash, results.hashCode); + _$hash = $jf(_$hash); + return _$hash; } @override String toString() { - return (newBuiltValueToStringHelper('Search') + return (newBuiltValueToStringHelper(r'Search') ..add('query', query) ..add('results', results)) .toString(); @@ -139,13 +143,15 @@ class SearchBuilder implements Builder { } @override - _$Search build() { + Search build() => _build(); + + _$Search _build() { _$Search _$result; try { _$result = _$v ?? new _$Search._( query: BuiltValueNullFieldError.checkNotNull( - query, 'Search', 'query'), + query, r'Search', 'query'), results: results.build()); } catch (_) { late String _$failedField; @@ -154,7 +160,7 @@ class SearchBuilder implements Builder { results.build(); } catch (e) { throw new BuiltValueNestedFieldError( - 'Search', _$failedField, e.toString()); + r'Search', _$failedField, e.toString()); } rethrow; } @@ -163,4 +169,4 @@ class SearchBuilder implements Builder { } } -// ignore_for_file: always_put_control_body_on_new_line,always_specify_types,annotate_overrides,avoid_annotating_with_dynamic,avoid_as,avoid_catches_without_on_clauses,avoid_returning_this,deprecated_member_use_from_same_package,lines_longer_than_80_chars,omit_local_variable_types,prefer_expression_function_bodies,sort_constructors_first,test_types_in_equals,unnecessary_const,unnecessary_new +// ignore_for_file: deprecated_member_use_from_same_package,type=lint diff --git a/desktop_photo_search/material/lib/src/serializers.g.dart b/desktop_photo_search/material/lib/src/serializers.g.dart index ad330123c..a824cf65a 100644 --- a/desktop_photo_search/material/lib/src/serializers.g.dart +++ b/desktop_photo_search/material/lib/src/serializers.g.dart @@ -41,4 +41,4 @@ Serializers _$serializers = (new Serializers().toBuilder() () => new ListBuilder())) .build(); -// ignore_for_file: always_put_control_body_on_new_line,always_specify_types,annotate_overrides,avoid_annotating_with_dynamic,avoid_as,avoid_catches_without_on_clauses,avoid_returning_this,deprecated_member_use_from_same_package,lines_longer_than_80_chars,omit_local_variable_types,prefer_expression_function_bodies,sort_constructors_first,test_types_in_equals,unnecessary_const,unnecessary_new +// ignore_for_file: deprecated_member_use_from_same_package,type=lint diff --git a/desktop_photo_search/material/lib/src/unsplash/api_error.g.dart b/desktop_photo_search/material/lib/src/unsplash/api_error.g.dart index 1c900a54d..2c6a7b787 100644 --- a/desktop_photo_search/material/lib/src/unsplash/api_error.g.dart +++ b/desktop_photo_search/material/lib/src/unsplash/api_error.g.dart @@ -41,7 +41,7 @@ class _$ApiErrorSerializer implements StructuredSerializer { final iterator = serialized.iterator; while (iterator.moveNext()) { - final key = iterator.current as String; + final key = iterator.current! as String; iterator.moveNext(); final Object? value = iterator.current; switch (key) { @@ -63,7 +63,7 @@ class _$ApiError extends ApiError { final BuiltList? errors; factory _$ApiError([void Function(ApiErrorBuilder)? updates]) => - (new ApiErrorBuilder()..update(updates)).build(); + (new ApiErrorBuilder()..update(updates))._build(); _$ApiError._({this.errors}) : super._(); @@ -82,12 +82,15 @@ class _$ApiError extends ApiError { @override int get hashCode { - return $jf($jc(0, errors.hashCode)); + var _$hash = 0; + _$hash = $jc(_$hash, errors.hashCode); + _$hash = $jf(_$hash); + return _$hash; } @override String toString() { - return (newBuiltValueToStringHelper('ApiError')..add('errors', errors)) + return (newBuiltValueToStringHelper(r'ApiError')..add('errors', errors)) .toString(); } } @@ -123,7 +126,9 @@ class ApiErrorBuilder implements Builder { } @override - _$ApiError build() { + ApiError build() => _build(); + + _$ApiError _build() { _$ApiError _$result; try { _$result = _$v ?? new _$ApiError._(errors: _errors?.build()); @@ -134,7 +139,7 @@ class ApiErrorBuilder implements Builder { _errors?.build(); } catch (e) { throw new BuiltValueNestedFieldError( - 'ApiError', _$failedField, e.toString()); + r'ApiError', _$failedField, e.toString()); } rethrow; } @@ -143,4 +148,4 @@ class ApiErrorBuilder implements Builder { } } -// ignore_for_file: always_put_control_body_on_new_line,always_specify_types,annotate_overrides,avoid_annotating_with_dynamic,avoid_as,avoid_catches_without_on_clauses,avoid_returning_this,deprecated_member_use_from_same_package,lines_longer_than_80_chars,omit_local_variable_types,prefer_expression_function_bodies,sort_constructors_first,test_types_in_equals,unnecessary_const,unnecessary_new +// ignore_for_file: deprecated_member_use_from_same_package,type=lint diff --git a/desktop_photo_search/material/lib/src/unsplash/current_user_collections.g.dart b/desktop_photo_search/material/lib/src/unsplash/current_user_collections.g.dart index 73e703b83..bcf8a27ee 100644 --- a/desktop_photo_search/material/lib/src/unsplash/current_user_collections.g.dart +++ b/desktop_photo_search/material/lib/src/unsplash/current_user_collections.g.dart @@ -64,13 +64,13 @@ class _$CurrentUserCollectionsSerializer final iterator = serialized.iterator; while (iterator.moveNext()) { - final key = iterator.current as String; + final key = iterator.current! as String; iterator.moveNext(); final Object? value = iterator.current; switch (key) { case 'id': result.id = serializers.deserialize(value, - specifiedType: const FullType(int)) as int; + specifiedType: const FullType(int))! as int; break; case 'title': result.title = serializers.deserialize(value, @@ -103,12 +103,12 @@ class _$CurrentUserCollections extends CurrentUserCollections { factory _$CurrentUserCollections( [void Function(CurrentUserCollectionsBuilder)? updates]) => - (new CurrentUserCollectionsBuilder()..update(updates)).build(); + (new CurrentUserCollectionsBuilder()..update(updates))._build(); _$CurrentUserCollections._( {required this.id, this.title, this.publishedAt, this.updatedAt}) : super._() { - BuiltValueNullFieldError.checkNotNull(id, 'CurrentUserCollections', 'id'); + BuiltValueNullFieldError.checkNotNull(id, r'CurrentUserCollections', 'id'); } @override @@ -132,14 +132,18 @@ class _$CurrentUserCollections extends CurrentUserCollections { @override int get hashCode { - return $jf($jc( - $jc($jc($jc(0, id.hashCode), title.hashCode), publishedAt.hashCode), - updatedAt.hashCode)); + var _$hash = 0; + _$hash = $jc(_$hash, id.hashCode); + _$hash = $jc(_$hash, title.hashCode); + _$hash = $jc(_$hash, publishedAt.hashCode); + _$hash = $jc(_$hash, updatedAt.hashCode); + _$hash = $jf(_$hash); + return _$hash; } @override String toString() { - return (newBuiltValueToStringHelper('CurrentUserCollections') + return (newBuiltValueToStringHelper(r'CurrentUserCollections') ..add('id', id) ..add('title', title) ..add('publishedAt', publishedAt) @@ -194,11 +198,13 @@ class CurrentUserCollectionsBuilder } @override - _$CurrentUserCollections build() { + CurrentUserCollections build() => _build(); + + _$CurrentUserCollections _build() { final _$result = _$v ?? new _$CurrentUserCollections._( id: BuiltValueNullFieldError.checkNotNull( - id, 'CurrentUserCollections', 'id'), + id, r'CurrentUserCollections', 'id'), title: title, publishedAt: publishedAt, updatedAt: updatedAt); @@ -207,4 +213,4 @@ class CurrentUserCollectionsBuilder } } -// ignore_for_file: always_put_control_body_on_new_line,always_specify_types,annotate_overrides,avoid_annotating_with_dynamic,avoid_as,avoid_catches_without_on_clauses,avoid_returning_this,deprecated_member_use_from_same_package,lines_longer_than_80_chars,omit_local_variable_types,prefer_expression_function_bodies,sort_constructors_first,test_types_in_equals,unnecessary_const,unnecessary_new +// ignore_for_file: deprecated_member_use_from_same_package,type=lint diff --git a/desktop_photo_search/material/lib/src/unsplash/exif.g.dart b/desktop_photo_search/material/lib/src/unsplash/exif.g.dart index e2b81a351..dc564add5 100644 --- a/desktop_photo_search/material/lib/src/unsplash/exif.g.dart +++ b/desktop_photo_search/material/lib/src/unsplash/exif.g.dart @@ -74,7 +74,7 @@ class _$ExifSerializer implements StructuredSerializer { final iterator = serialized.iterator; while (iterator.moveNext()) { - final key = iterator.current as String; + final key = iterator.current! as String; iterator.moveNext(); final Object? value = iterator.current; switch (key) { @@ -124,7 +124,7 @@ class _$Exif extends Exif { final int? iso; factory _$Exif([void Function(ExifBuilder)? updates]) => - (new ExifBuilder()..update(updates)).build(); + (new ExifBuilder()..update(updates))._build(); _$Exif._( {this.make, @@ -156,19 +156,20 @@ class _$Exif extends Exif { @override int get hashCode { - return $jf($jc( - $jc( - $jc( - $jc($jc($jc(0, make.hashCode), model.hashCode), - exposureTime.hashCode), - aperture.hashCode), - focalLength.hashCode), - iso.hashCode)); + var _$hash = 0; + _$hash = $jc(_$hash, make.hashCode); + _$hash = $jc(_$hash, model.hashCode); + _$hash = $jc(_$hash, exposureTime.hashCode); + _$hash = $jc(_$hash, aperture.hashCode); + _$hash = $jc(_$hash, focalLength.hashCode); + _$hash = $jc(_$hash, iso.hashCode); + _$hash = $jf(_$hash); + return _$hash; } @override String toString() { - return (newBuiltValueToStringHelper('Exif') + return (newBuiltValueToStringHelper(r'Exif') ..add('make', make) ..add('model', model) ..add('exposureTime', exposureTime) @@ -234,7 +235,9 @@ class ExifBuilder implements Builder { } @override - _$Exif build() { + Exif build() => _build(); + + _$Exif _build() { final _$result = _$v ?? new _$Exif._( make: make, @@ -248,4 +251,4 @@ class ExifBuilder implements Builder { } } -// ignore_for_file: always_put_control_body_on_new_line,always_specify_types,annotate_overrides,avoid_annotating_with_dynamic,avoid_as,avoid_catches_without_on_clauses,avoid_returning_this,deprecated_member_use_from_same_package,lines_longer_than_80_chars,omit_local_variable_types,prefer_expression_function_bodies,sort_constructors_first,test_types_in_equals,unnecessary_const,unnecessary_new +// ignore_for_file: deprecated_member_use_from_same_package,type=lint diff --git a/desktop_photo_search/material/lib/src/unsplash/links.g.dart b/desktop_photo_search/material/lib/src/unsplash/links.g.dart index 503f2d39a..1095b8b07 100644 --- a/desktop_photo_search/material/lib/src/unsplash/links.g.dart +++ b/desktop_photo_search/material/lib/src/unsplash/links.g.dart @@ -61,7 +61,7 @@ class _$LinksSerializer implements StructuredSerializer { final iterator = serialized.iterator; while (iterator.moveNext()) { - final key = iterator.current as String; + final key = iterator.current! as String; iterator.moveNext(); final Object? value = iterator.current; switch (key) { @@ -99,7 +99,7 @@ class _$Links extends Links { final String? downloadLocation; factory _$Links([void Function(LinksBuilder)? updates]) => - (new LinksBuilder()..update(updates)).build(); + (new LinksBuilder()..update(updates))._build(); _$Links._({this.self, this.html, this.download, this.downloadLocation}) : super._(); @@ -123,14 +123,18 @@ class _$Links extends Links { @override int get hashCode { - return $jf($jc( - $jc($jc($jc(0, self.hashCode), html.hashCode), download.hashCode), - downloadLocation.hashCode)); + var _$hash = 0; + _$hash = $jc(_$hash, self.hashCode); + _$hash = $jc(_$hash, html.hashCode); + _$hash = $jc(_$hash, download.hashCode); + _$hash = $jc(_$hash, downloadLocation.hashCode); + _$hash = $jf(_$hash); + return _$hash; } @override String toString() { - return (newBuiltValueToStringHelper('Links') + return (newBuiltValueToStringHelper(r'Links') ..add('self', self) ..add('html', html) ..add('download', download) @@ -185,7 +189,9 @@ class LinksBuilder implements Builder { } @override - _$Links build() { + Links build() => _build(); + + _$Links _build() { final _$result = _$v ?? new _$Links._( self: self, @@ -197,4 +203,4 @@ class LinksBuilder implements Builder { } } -// ignore_for_file: always_put_control_body_on_new_line,always_specify_types,annotate_overrides,avoid_annotating_with_dynamic,avoid_as,avoid_catches_without_on_clauses,avoid_returning_this,deprecated_member_use_from_same_package,lines_longer_than_80_chars,omit_local_variable_types,prefer_expression_function_bodies,sort_constructors_first,test_types_in_equals,unnecessary_const,unnecessary_new +// ignore_for_file: deprecated_member_use_from_same_package,type=lint diff --git a/desktop_photo_search/material/lib/src/unsplash/location.g.dart b/desktop_photo_search/material/lib/src/unsplash/location.g.dart index 54b96ae73..6e987640a 100644 --- a/desktop_photo_search/material/lib/src/unsplash/location.g.dart +++ b/desktop_photo_search/material/lib/src/unsplash/location.g.dart @@ -54,7 +54,7 @@ class _$LocationSerializer implements StructuredSerializer { final iterator = serialized.iterator; while (iterator.moveNext()) { - final key = iterator.current as String; + final key = iterator.current! as String; iterator.moveNext(); final Object? value = iterator.current; switch (key) { @@ -86,7 +86,7 @@ class _$Location extends Location { final Position? position; factory _$Location([void Function(LocationBuilder)? updates]) => - (new LocationBuilder()..update(updates)).build(); + (new LocationBuilder()..update(updates))._build(); _$Location._({this.city, this.country, this.position}) : super._(); @@ -108,13 +108,17 @@ class _$Location extends Location { @override int get hashCode { - return $jf( - $jc($jc($jc(0, city.hashCode), country.hashCode), position.hashCode)); + var _$hash = 0; + _$hash = $jc(_$hash, city.hashCode); + _$hash = $jc(_$hash, country.hashCode); + _$hash = $jc(_$hash, position.hashCode); + _$hash = $jf(_$hash); + return _$hash; } @override String toString() { - return (newBuiltValueToStringHelper('Location') + return (newBuiltValueToStringHelper(r'Location') ..add('city', city) ..add('country', country) ..add('position', position)) @@ -162,7 +166,9 @@ class LocationBuilder implements Builder { } @override - _$Location build() { + Location build() => _build(); + + _$Location _build() { _$Location _$result; try { _$result = _$v ?? @@ -175,7 +181,7 @@ class LocationBuilder implements Builder { _position?.build(); } catch (e) { throw new BuiltValueNestedFieldError( - 'Location', _$failedField, e.toString()); + r'Location', _$failedField, e.toString()); } rethrow; } @@ -184,4 +190,4 @@ class LocationBuilder implements Builder { } } -// ignore_for_file: always_put_control_body_on_new_line,always_specify_types,annotate_overrides,avoid_annotating_with_dynamic,avoid_as,avoid_catches_without_on_clauses,avoid_returning_this,deprecated_member_use_from_same_package,lines_longer_than_80_chars,omit_local_variable_types,prefer_expression_function_bodies,sort_constructors_first,test_types_in_equals,unnecessary_const,unnecessary_new +// ignore_for_file: deprecated_member_use_from_same_package,type=lint diff --git a/desktop_photo_search/material/lib/src/unsplash/photo.g.dart b/desktop_photo_search/material/lib/src/unsplash/photo.g.dart index 69bcb8b28..d7f14ae36 100644 --- a/desktop_photo_search/material/lib/src/unsplash/photo.g.dart +++ b/desktop_photo_search/material/lib/src/unsplash/photo.g.dart @@ -146,13 +146,13 @@ class _$PhotoSerializer implements StructuredSerializer { final iterator = serialized.iterator; while (iterator.moveNext()) { - final key = iterator.current as String; + final key = iterator.current! as String; iterator.moveNext(); final Object? value = iterator.current; switch (key) { case 'id': result.id = serializers.deserialize(value, - specifiedType: const FullType(String)) as String; + specifiedType: const FullType(String))! as String; break; case 'created_at': result.createdAt = serializers.deserialize(value, @@ -266,7 +266,7 @@ class _$Photo extends Photo { final User? user; factory _$Photo([void Function(PhotoBuilder)? updates]) => - (new PhotoBuilder()..update(updates)).build(); + (new PhotoBuilder()..update(updates))._build(); _$Photo._( {required this.id, @@ -287,7 +287,7 @@ class _$Photo extends Photo { this.links, this.user}) : super._() { - BuiltValueNullFieldError.checkNotNull(id, 'Photo', 'id'); + BuiltValueNullFieldError.checkNotNull(id, r'Photo', 'id'); } @override @@ -322,49 +322,31 @@ class _$Photo extends Photo { @override int get hashCode { - return $jf($jc( - $jc( - $jc( - $jc( - $jc( - $jc( - $jc( - $jc( - $jc( - $jc( - $jc( - $jc( - $jc( - $jc( - $jc( - $jc( - $jc( - 0, - id - .hashCode), - createdAt - .hashCode), - updatedAt - .hashCode), - width.hashCode), - height.hashCode), - color.hashCode), - downloads.hashCode), - likes.hashCode), - likedByUser.hashCode), - description.hashCode), - exif.hashCode), - location.hashCode), - tags.hashCode), - currentUserCollections.hashCode), - urls.hashCode), - links.hashCode), - user.hashCode)); + var _$hash = 0; + _$hash = $jc(_$hash, id.hashCode); + _$hash = $jc(_$hash, createdAt.hashCode); + _$hash = $jc(_$hash, updatedAt.hashCode); + _$hash = $jc(_$hash, width.hashCode); + _$hash = $jc(_$hash, height.hashCode); + _$hash = $jc(_$hash, color.hashCode); + _$hash = $jc(_$hash, downloads.hashCode); + _$hash = $jc(_$hash, likes.hashCode); + _$hash = $jc(_$hash, likedByUser.hashCode); + _$hash = $jc(_$hash, description.hashCode); + _$hash = $jc(_$hash, exif.hashCode); + _$hash = $jc(_$hash, location.hashCode); + _$hash = $jc(_$hash, tags.hashCode); + _$hash = $jc(_$hash, currentUserCollections.hashCode); + _$hash = $jc(_$hash, urls.hashCode); + _$hash = $jc(_$hash, links.hashCode); + _$hash = $jc(_$hash, user.hashCode); + _$hash = $jf(_$hash); + return _$hash; } @override String toString() { - return (newBuiltValueToStringHelper('Photo') + return (newBuiltValueToStringHelper(r'Photo') ..add('id', id) ..add('createdAt', createdAt) ..add('updatedAt', updatedAt) @@ -500,12 +482,14 @@ class PhotoBuilder implements Builder { } @override - _$Photo build() { + Photo build() => _build(); + + _$Photo _build() { _$Photo _$result; try { _$result = _$v ?? new _$Photo._( - id: BuiltValueNullFieldError.checkNotNull(id, 'Photo', 'id'), + id: BuiltValueNullFieldError.checkNotNull(id, r'Photo', 'id'), createdAt: createdAt, updatedAt: updatedAt, width: width, @@ -541,7 +525,7 @@ class PhotoBuilder implements Builder { _user?.build(); } catch (e) { throw new BuiltValueNestedFieldError( - 'Photo', _$failedField, e.toString()); + r'Photo', _$failedField, e.toString()); } rethrow; } @@ -550,4 +534,4 @@ class PhotoBuilder implements Builder { } } -// ignore_for_file: always_put_control_body_on_new_line,always_specify_types,annotate_overrides,avoid_annotating_with_dynamic,avoid_as,avoid_catches_without_on_clauses,avoid_returning_this,deprecated_member_use_from_same_package,lines_longer_than_80_chars,omit_local_variable_types,prefer_expression_function_bodies,sort_constructors_first,test_types_in_equals,unnecessary_const,unnecessary_new +// ignore_for_file: deprecated_member_use_from_same_package,type=lint diff --git a/desktop_photo_search/material/lib/src/unsplash/position.g.dart b/desktop_photo_search/material/lib/src/unsplash/position.g.dart index 6fb2a843e..a7369fa60 100644 --- a/desktop_photo_search/material/lib/src/unsplash/position.g.dart +++ b/desktop_photo_search/material/lib/src/unsplash/position.g.dart @@ -40,17 +40,17 @@ class _$PositionSerializer implements StructuredSerializer { final iterator = serialized.iterator; while (iterator.moveNext()) { - final key = iterator.current as String; + final key = iterator.current! as String; iterator.moveNext(); final Object? value = iterator.current; switch (key) { case 'latitude': result.latitude = serializers.deserialize(value, - specifiedType: const FullType(double)) as double; + specifiedType: const FullType(double))! as double; break; case 'longitude': result.longitude = serializers.deserialize(value, - specifiedType: const FullType(double)) as double; + specifiedType: const FullType(double))! as double; break; } } @@ -66,11 +66,11 @@ class _$Position extends Position { final double longitude; factory _$Position([void Function(PositionBuilder)? updates]) => - (new PositionBuilder()..update(updates)).build(); + (new PositionBuilder()..update(updates))._build(); _$Position._({required this.latitude, required this.longitude}) : super._() { - BuiltValueNullFieldError.checkNotNull(latitude, 'Position', 'latitude'); - BuiltValueNullFieldError.checkNotNull(longitude, 'Position', 'longitude'); + BuiltValueNullFieldError.checkNotNull(latitude, r'Position', 'latitude'); + BuiltValueNullFieldError.checkNotNull(longitude, r'Position', 'longitude'); } @override @@ -90,12 +90,16 @@ class _$Position extends Position { @override int get hashCode { - return $jf($jc($jc(0, latitude.hashCode), longitude.hashCode)); + var _$hash = 0; + _$hash = $jc(_$hash, latitude.hashCode); + _$hash = $jc(_$hash, longitude.hashCode); + _$hash = $jf(_$hash); + return _$hash; } @override String toString() { - return (newBuiltValueToStringHelper('Position') + return (newBuiltValueToStringHelper(r'Position') ..add('latitude', latitude) ..add('longitude', longitude)) .toString(); @@ -137,16 +141,18 @@ class PositionBuilder implements Builder { } @override - _$Position build() { + Position build() => _build(); + + _$Position _build() { final _$result = _$v ?? new _$Position._( latitude: BuiltValueNullFieldError.checkNotNull( - latitude, 'Position', 'latitude'), + latitude, r'Position', 'latitude'), longitude: BuiltValueNullFieldError.checkNotNull( - longitude, 'Position', 'longitude')); + longitude, r'Position', 'longitude')); replace(_$result); return _$result; } } -// ignore_for_file: always_put_control_body_on_new_line,always_specify_types,annotate_overrides,avoid_annotating_with_dynamic,avoid_as,avoid_catches_without_on_clauses,avoid_returning_this,deprecated_member_use_from_same_package,lines_longer_than_80_chars,omit_local_variable_types,prefer_expression_function_bodies,sort_constructors_first,test_types_in_equals,unnecessary_const,unnecessary_new +// ignore_for_file: deprecated_member_use_from_same_package,type=lint diff --git a/desktop_photo_search/material/lib/src/unsplash/search_photos_response.g.dart b/desktop_photo_search/material/lib/src/unsplash/search_photos_response.g.dart index f967573a4..a79ae312e 100644 --- a/desktop_photo_search/material/lib/src/unsplash/search_photos_response.g.dart +++ b/desktop_photo_search/material/lib/src/unsplash/search_photos_response.g.dart @@ -57,7 +57,7 @@ class _$SearchPhotosResponseSerializer final iterator = serialized.iterator; while (iterator.moveNext()) { - final key = iterator.current as String; + final key = iterator.current! as String; iterator.moveNext(); final Object? value = iterator.current; switch (key) { @@ -92,12 +92,12 @@ class _$SearchPhotosResponse extends SearchPhotosResponse { factory _$SearchPhotosResponse( [void Function(SearchPhotosResponseBuilder)? updates]) => - (new SearchPhotosResponseBuilder()..update(updates)).build(); + (new SearchPhotosResponseBuilder()..update(updates))._build(); _$SearchPhotosResponse._({this.total, this.totalPages, required this.results}) : super._() { BuiltValueNullFieldError.checkNotNull( - results, 'SearchPhotosResponse', 'results'); + results, r'SearchPhotosResponse', 'results'); } @override @@ -120,13 +120,17 @@ class _$SearchPhotosResponse extends SearchPhotosResponse { @override int get hashCode { - return $jf($jc( - $jc($jc(0, total.hashCode), totalPages.hashCode), results.hashCode)); + var _$hash = 0; + _$hash = $jc(_$hash, total.hashCode); + _$hash = $jc(_$hash, totalPages.hashCode); + _$hash = $jc(_$hash, results.hashCode); + _$hash = $jf(_$hash); + return _$hash; } @override String toString() { - return (newBuiltValueToStringHelper('SearchPhotosResponse') + return (newBuiltValueToStringHelper(r'SearchPhotosResponse') ..add('total', total) ..add('totalPages', totalPages) ..add('results', results)) @@ -176,7 +180,9 @@ class SearchPhotosResponseBuilder } @override - _$SearchPhotosResponse build() { + SearchPhotosResponse build() => _build(); + + _$SearchPhotosResponse _build() { _$SearchPhotosResponse _$result; try { _$result = _$v ?? @@ -189,7 +195,7 @@ class SearchPhotosResponseBuilder results.build(); } catch (e) { throw new BuiltValueNestedFieldError( - 'SearchPhotosResponse', _$failedField, e.toString()); + r'SearchPhotosResponse', _$failedField, e.toString()); } rethrow; } @@ -198,4 +204,4 @@ class SearchPhotosResponseBuilder } } -// ignore_for_file: always_put_control_body_on_new_line,always_specify_types,annotate_overrides,avoid_annotating_with_dynamic,avoid_as,avoid_catches_without_on_clauses,avoid_returning_this,deprecated_member_use_from_same_package,lines_longer_than_80_chars,omit_local_variable_types,prefer_expression_function_bodies,sort_constructors_first,test_types_in_equals,unnecessary_const,unnecessary_new +// ignore_for_file: deprecated_member_use_from_same_package,type=lint diff --git a/desktop_photo_search/material/lib/src/unsplash/tags.g.dart b/desktop_photo_search/material/lib/src/unsplash/tags.g.dart index 11a0de32f..4c934862e 100644 --- a/desktop_photo_search/material/lib/src/unsplash/tags.g.dart +++ b/desktop_photo_search/material/lib/src/unsplash/tags.g.dart @@ -37,13 +37,13 @@ class _$TagsSerializer implements StructuredSerializer { final iterator = serialized.iterator; while (iterator.moveNext()) { - final key = iterator.current as String; + final key = iterator.current! as String; iterator.moveNext(); final Object? value = iterator.current; switch (key) { case 'title': result.title = serializers.deserialize(value, - specifiedType: const FullType(String)) as String; + specifiedType: const FullType(String))! as String; break; } } @@ -57,10 +57,10 @@ class _$Tags extends Tags { final String title; factory _$Tags([void Function(TagsBuilder)? updates]) => - (new TagsBuilder()..update(updates)).build(); + (new TagsBuilder()..update(updates))._build(); _$Tags._({required this.title}) : super._() { - BuiltValueNullFieldError.checkNotNull(title, 'Tags', 'title'); + BuiltValueNullFieldError.checkNotNull(title, r'Tags', 'title'); } @override @@ -78,12 +78,15 @@ class _$Tags extends Tags { @override int get hashCode { - return $jf($jc(0, title.hashCode)); + var _$hash = 0; + _$hash = $jc(_$hash, title.hashCode); + _$hash = $jf(_$hash); + return _$hash; } @override String toString() { - return (newBuiltValueToStringHelper('Tags')..add('title', title)) + return (newBuiltValueToStringHelper(r'Tags')..add('title', title)) .toString(); } } @@ -118,14 +121,16 @@ class TagsBuilder implements Builder { } @override - _$Tags build() { + Tags build() => _build(); + + _$Tags _build() { final _$result = _$v ?? new _$Tags._( title: - BuiltValueNullFieldError.checkNotNull(title, 'Tags', 'title')); + BuiltValueNullFieldError.checkNotNull(title, r'Tags', 'title')); replace(_$result); return _$result; } } -// ignore_for_file: always_put_control_body_on_new_line,always_specify_types,annotate_overrides,avoid_annotating_with_dynamic,avoid_as,avoid_catches_without_on_clauses,avoid_returning_this,deprecated_member_use_from_same_package,lines_longer_than_80_chars,omit_local_variable_types,prefer_expression_function_bodies,sort_constructors_first,test_types_in_equals,unnecessary_const,unnecessary_new +// ignore_for_file: deprecated_member_use_from_same_package,type=lint diff --git a/desktop_photo_search/material/lib/src/unsplash/urls.g.dart b/desktop_photo_search/material/lib/src/unsplash/urls.g.dart index 5983509e9..1fd1b2247 100644 --- a/desktop_photo_search/material/lib/src/unsplash/urls.g.dart +++ b/desktop_photo_search/material/lib/src/unsplash/urls.g.dart @@ -68,7 +68,7 @@ class _$UrlsSerializer implements StructuredSerializer { final iterator = serialized.iterator; while (iterator.moveNext()) { - final key = iterator.current as String; + final key = iterator.current! as String; iterator.moveNext(); final Object? value = iterator.current; switch (key) { @@ -112,7 +112,7 @@ class _$Urls extends Urls { final String? thumb; factory _$Urls([void Function(UrlsBuilder)? updates]) => - (new UrlsBuilder()..update(updates)).build(); + (new UrlsBuilder()..update(updates))._build(); _$Urls._({this.raw, this.full, this.regular, this.small, this.thumb}) : super._(); @@ -137,15 +137,19 @@ class _$Urls extends Urls { @override int get hashCode { - return $jf($jc( - $jc($jc($jc($jc(0, raw.hashCode), full.hashCode), regular.hashCode), - small.hashCode), - thumb.hashCode)); + var _$hash = 0; + _$hash = $jc(_$hash, raw.hashCode); + _$hash = $jc(_$hash, full.hashCode); + _$hash = $jc(_$hash, regular.hashCode); + _$hash = $jc(_$hash, small.hashCode); + _$hash = $jc(_$hash, thumb.hashCode); + _$hash = $jf(_$hash); + return _$hash; } @override String toString() { - return (newBuiltValueToStringHelper('Urls') + return (newBuiltValueToStringHelper(r'Urls') ..add('raw', raw) ..add('full', full) ..add('regular', regular) @@ -205,7 +209,9 @@ class UrlsBuilder implements Builder { } @override - _$Urls build() { + Urls build() => _build(); + + _$Urls _build() { final _$result = _$v ?? new _$Urls._( raw: raw, full: full, regular: regular, small: small, thumb: thumb); @@ -214,4 +220,4 @@ class UrlsBuilder implements Builder { } } -// ignore_for_file: always_put_control_body_on_new_line,always_specify_types,annotate_overrides,avoid_annotating_with_dynamic,avoid_as,avoid_catches_without_on_clauses,avoid_returning_this,deprecated_member_use_from_same_package,lines_longer_than_80_chars,omit_local_variable_types,prefer_expression_function_bodies,sort_constructors_first,test_types_in_equals,unnecessary_const,unnecessary_new +// ignore_for_file: deprecated_member_use_from_same_package,type=lint diff --git a/desktop_photo_search/material/lib/src/unsplash/user.g.dart b/desktop_photo_search/material/lib/src/unsplash/user.g.dart index dfb9987d3..4eb50c011 100644 --- a/desktop_photo_search/material/lib/src/unsplash/user.g.dart +++ b/desktop_photo_search/material/lib/src/unsplash/user.g.dart @@ -94,13 +94,13 @@ class _$UserSerializer implements StructuredSerializer { final iterator = serialized.iterator; while (iterator.moveNext()) { - final key = iterator.current as String; + final key = iterator.current! as String; iterator.moveNext(); final Object? value = iterator.current; switch (key) { case 'id': result.id = serializers.deserialize(value, - specifiedType: const FullType(String)) as String; + specifiedType: const FullType(String))! as String; break; case 'updated_at': result.updatedAt = serializers.deserialize(value, @@ -108,11 +108,11 @@ class _$UserSerializer implements StructuredSerializer { break; case 'username': result.username = serializers.deserialize(value, - specifiedType: const FullType(String)) as String; + specifiedType: const FullType(String))! as String; break; case 'name': result.name = serializers.deserialize(value, - specifiedType: const FullType(String)) as String; + specifiedType: const FullType(String))! as String; break; case 'portfolio_url': result.portfolioUrl = serializers.deserialize(value, @@ -174,7 +174,7 @@ class _$User extends User { final Links? links; factory _$User([void Function(UserBuilder)? updates]) => - (new UserBuilder()..update(updates)).build(); + (new UserBuilder()..update(updates))._build(); _$User._( {required this.id, @@ -189,9 +189,9 @@ class _$User extends User { this.totalCollections, this.links}) : super._() { - BuiltValueNullFieldError.checkNotNull(id, 'User', 'id'); - BuiltValueNullFieldError.checkNotNull(username, 'User', 'username'); - BuiltValueNullFieldError.checkNotNull(name, 'User', 'name'); + BuiltValueNullFieldError.checkNotNull(id, r'User', 'id'); + BuiltValueNullFieldError.checkNotNull(username, r'User', 'username'); + BuiltValueNullFieldError.checkNotNull(name, r'User', 'name'); } @override @@ -220,31 +220,25 @@ class _$User extends User { @override int get hashCode { - return $jf($jc( - $jc( - $jc( - $jc( - $jc( - $jc( - $jc( - $jc( - $jc( - $jc($jc(0, id.hashCode), - updatedAt.hashCode), - username.hashCode), - name.hashCode), - portfolioUrl.hashCode), - bio.hashCode), - location.hashCode), - totalLikes.hashCode), - totalPhotos.hashCode), - totalCollections.hashCode), - links.hashCode)); + var _$hash = 0; + _$hash = $jc(_$hash, id.hashCode); + _$hash = $jc(_$hash, updatedAt.hashCode); + _$hash = $jc(_$hash, username.hashCode); + _$hash = $jc(_$hash, name.hashCode); + _$hash = $jc(_$hash, portfolioUrl.hashCode); + _$hash = $jc(_$hash, bio.hashCode); + _$hash = $jc(_$hash, location.hashCode); + _$hash = $jc(_$hash, totalLikes.hashCode); + _$hash = $jc(_$hash, totalPhotos.hashCode); + _$hash = $jc(_$hash, totalCollections.hashCode); + _$hash = $jc(_$hash, links.hashCode); + _$hash = $jf(_$hash); + return _$hash; } @override String toString() { - return (newBuiltValueToStringHelper('User') + return (newBuiltValueToStringHelper(r'User') ..add('id', id) ..add('updatedAt', updatedAt) ..add('username', username) @@ -341,16 +335,19 @@ class UserBuilder implements Builder { } @override - _$User build() { + User build() => _build(); + + _$User _build() { _$User _$result; try { _$result = _$v ?? new _$User._( - id: BuiltValueNullFieldError.checkNotNull(id, 'User', 'id'), + id: BuiltValueNullFieldError.checkNotNull(id, r'User', 'id'), updatedAt: updatedAt, username: BuiltValueNullFieldError.checkNotNull( - username, 'User', 'username'), - name: BuiltValueNullFieldError.checkNotNull(name, 'User', 'name'), + username, r'User', 'username'), + name: + BuiltValueNullFieldError.checkNotNull(name, r'User', 'name'), portfolioUrl: portfolioUrl, bio: bio, location: location, @@ -365,7 +362,7 @@ class UserBuilder implements Builder { _links?.build(); } catch (e) { throw new BuiltValueNestedFieldError( - 'User', _$failedField, e.toString()); + r'User', _$failedField, e.toString()); } rethrow; } @@ -374,4 +371,4 @@ class UserBuilder implements Builder { } } -// ignore_for_file: always_put_control_body_on_new_line,always_specify_types,annotate_overrides,avoid_annotating_with_dynamic,avoid_as,avoid_catches_without_on_clauses,avoid_returning_this,deprecated_member_use_from_same_package,lines_longer_than_80_chars,omit_local_variable_types,prefer_expression_function_bodies,sort_constructors_first,test_types_in_equals,unnecessary_const,unnecessary_new +// ignore_for_file: deprecated_member_use_from_same_package,type=lint diff --git a/desktop_photo_search/material/lib/src/widgets/photo_details.dart b/desktop_photo_search/material/lib/src/widgets/photo_details.dart index ac39e1adf..8cdec65c1 100644 --- a/desktop_photo_search/material/lib/src/widgets/photo_details.dart +++ b/desktop_photo_search/material/lib/src/widgets/photo_details.dart @@ -56,6 +56,7 @@ class _PhotoDetailsState extends State { Widget build(BuildContext context) { return Scrollbar( child: SingleChildScrollView( + primary: true, child: Center( child: Column( mainAxisSize: MainAxisSize.min, diff --git a/desktop_photo_search/material/lib/src/widgets/unsplash_search_content.dart b/desktop_photo_search/material/lib/src/widgets/unsplash_search_content.dart index aab3deaef..9c6fb2f1d 100644 --- a/desktop_photo_search/material/lib/src/widgets/unsplash_search_content.dart +++ b/desktop_photo_search/material/lib/src/widgets/unsplash_search_content.dart @@ -50,7 +50,7 @@ class _UnsplashSearchContentState extends State { ? PhotoDetails( photo: photoSearchModel.selectedPhoto!, onPhotoSave: (photo) async { - final path = await getSavePath( + final saveLocation = await getSaveLocation( suggestedName: '${photo.id}.jpg', acceptedTypeGroups: [ const XTypeGroup( @@ -60,12 +60,12 @@ class _UnsplashSearchContentState extends State { ), ], ); - if (path != null) { + if (saveLocation != null) { final fileData = await photoSearchModel.download(photo: photo); final photoFile = XFile.fromData(fileData, mimeType: 'image/jpeg'); - await photoFile.saveTo(path); + await photoFile.saveTo(saveLocation.path); } }, ) diff --git a/desktop_photo_search/material/linux/CMakeLists.txt b/desktop_photo_search/material/linux/CMakeLists.txt index 84c0f3239..ce629d6f7 100644 --- a/desktop_photo_search/material/linux/CMakeLists.txt +++ b/desktop_photo_search/material/linux/CMakeLists.txt @@ -86,6 +86,7 @@ set_target_properties(${BINARY_NAME} RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" ) + # Generated plugin build rules, which manage building the plugins and adding # them to the application. include(flutter/generated_plugins.cmake) diff --git a/desktop_photo_search/material/macos/Podfile b/desktop_photo_search/material/macos/Podfile index 049abe295..c795730db 100644 --- a/desktop_photo_search/material/macos/Podfile +++ b/desktop_photo_search/material/macos/Podfile @@ -31,6 +31,9 @@ target 'Runner' do use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end end post_install do |installer| diff --git a/desktop_photo_search/material/macos/Runner.xcodeproj/project.pbxproj b/desktop_photo_search/material/macos/Runner.xcodeproj/project.pbxproj index ef34e95e7..3ba24540a 100644 --- a/desktop_photo_search/material/macos/Runner.xcodeproj/project.pbxproj +++ b/desktop_photo_search/material/macos/Runner.xcodeproj/project.pbxproj @@ -21,14 +21,24 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 2221F8AAA56695EE78367B80 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BFAFA81AF7C6004C30A3B111 /* Pods_RunnerTests.framework */; }; + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + FC81538DCD4B1F6D9C7EA869 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0CA164809C5FD79C7E655FEB /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 33CC10E52044A3C60003C045 /* Project object */; @@ -52,9 +62,13 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 0CA164809C5FD79C7E655FEB /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 121A5392C6CEEACD3F59FDDE /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* desktop_photo_search.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "desktop_photo_search.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10ED2044A3C60003C045 /* desktop_photo_search.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = desktop_photo_search.app; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; @@ -66,21 +80,44 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 462F27B1F5A8744B57A92203 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; + 46DEEC295EDAB4D9E5AAD40C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 95CBE2A5490707D77990DB8F /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + 961AA6F33989568EA51855A0 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + BFAFA81AF7C6004C30A3B111 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + EF16EA4F60417C8CBB65D370 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 2221F8AAA56695EE78367B80 /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 33CC10EA2044A3C60003C045 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + FC81538DCD4B1F6D9C7EA869 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; 33BA886A226E78AF003329D5 /* Configs */ = { isa = PBXGroup; children = ( @@ -97,8 +134,10 @@ children = ( 33FAB671232836740065AC1E /* Runner */, 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, + 4F05AD724AA0AF97AF90F16D /* Pods */, ); sourceTree = ""; }; @@ -106,6 +145,7 @@ isa = PBXGroup; children = ( 33CC10ED2044A3C60003C045 /* desktop_photo_search.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, ); name = Products; sourceTree = ""; @@ -145,9 +185,25 @@ path = Runner; sourceTree = ""; }; + 4F05AD724AA0AF97AF90F16D /* Pods */ = { + isa = PBXGroup; + children = ( + 961AA6F33989568EA51855A0 /* Pods-Runner.debug.xcconfig */, + 46DEEC295EDAB4D9E5AAD40C /* Pods-Runner.release.xcconfig */, + 121A5392C6CEEACD3F59FDDE /* Pods-Runner.profile.xcconfig */, + 462F27B1F5A8744B57A92203 /* Pods-RunnerTests.debug.xcconfig */, + EF16EA4F60417C8CBB65D370 /* Pods-RunnerTests.release.xcconfig */, + 95CBE2A5490707D77990DB8F /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( + 0CA164809C5FD79C7E655FEB /* Pods_Runner.framework */, + BFAFA81AF7C6004C30A3B111 /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -155,15 +211,36 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 0A81AD44262D5AD9D4A5F8E5 /* [CP] Check Pods Manifest.lock */, + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; 33CC10EC2044A3C60003C045 /* Runner */ = { isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( + 5F342E5DCD52BB4E1C0B7ADE /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, + 5C84E382527E2C926148EC58 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -182,9 +259,13 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0920; - LastUpgradeCheck = 1300; + LastUpgradeCheck = 1430; ORGANIZATIONNAME = ""; TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; 33CC10EC2044A3C60003C045 = { CreatedOnToolsVersion = 9.2; LastSwiftMigration = 1100; @@ -215,12 +296,20 @@ projectRoot = ""; targets = ( 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, 33CC111A2044C6BA0003C045 /* Flutter Assemble */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 33CC10EB2044A3C60003C045 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -233,6 +322,28 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ + 0A81AD44262D5AD9D4A5F8E5 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; alwaysOutOfDate = 1; @@ -271,9 +382,56 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; + 5C84E382527E2C926148EC58 /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + 5F342E5DCD52BB4E1C0B7ADE /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 33CC10E92044A3C60003C045 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -287,6 +445,11 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; @@ -307,6 +470,51 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 462F27B1F5A8744B57A92203 /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.desktopPhotoSearch.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/desktop_photo_search.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/desktop_photo_search"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = EF16EA4F60417C8CBB65D370 /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.desktopPhotoSearch.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/desktop_photo_search.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/desktop_photo_search"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 95CBE2A5490707D77990DB8F /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.desktopPhotoSearch.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/desktop_photo_search.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/desktop_photo_search"; + }; + name = Profile; + }; 338D0CE9231458BD00FA5F75 /* Profile */ = { isa = XCBuildConfiguration; baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; @@ -537,6 +745,16 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/desktop_photo_search/material/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/desktop_photo_search/material/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 22a9bd6f2..1bc827721 100644 --- a/desktop_photo_search/material/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/desktop_photo_search/material/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ + + + + =2.17.0-0 <3.0.0" + sdk: ^3.1.0 dependencies: built_collection: ^5.1.1 - built_value: ^8.3.0 - cupertino_icons: ^1.0.2 - file_selector: ^0.9.1 + built_value: ^8.6.1 + cupertino_icons: ^1.0.5 + file_selector: ^1.0.0 flutter: sdk: flutter - flutter_simple_treeview: ^3.0.0-nullsafety.1 - http: ^0.13.4 - logging: ^1.0.2 + flutter_simple_treeview: ^3.0.2 + http: ^1.1.0 + logging: ^1.2.0 menubar: git: url: https://github.com/google/flutter-desktop-embedding.git path: plugins/menubar - ref: 12decbe0f592e14e03223f6f2c0c7e0e2dbd70a1 - provider: ^6.0.2 - transparent_image: ^2.0.0 - url_launcher: ^6.1.1 - uuid: ^3.0.5 + ref: 6c66ad23ee79749f30a8eece542cf54eaf157ed8 + provider: ^6.0.5 + transparent_image: ^2.0.1 + url_launcher: ^6.1.12 + uuid: ^4.0.0 window_size: git: url: https://github.com/google/flutter-desktop-embedding.git path: plugins/window_size - ref: 12decbe0f592e14e03223f6f2c0c7e0e2dbd70a1 + ref: 6c66ad23ee79749f30a8eece542cf54eaf157ed8 dev_dependencies: - async: ^2.8.2 - build: ^2.2.1 - build_runner: ^2.1.7 - built_value_generator: ^8.3.0 - flutter_lints: ^2.0.1 + analysis_defaults: + path: ../../analysis_defaults + async: ^2.11.0 + build: ^2.4.1 + build_runner: ^2.4.6 + built_value_generator: ^8.6.1 flutter_test: sdk: flutter - grinder: ^0.9.0 - msix: ^3.6.1 + grinder: ^0.9.4 + msix: ^3.16.1 flutter: uses-material-design: true diff --git a/desktop_photo_search/material/windows/CMakeLists.txt b/desktop_photo_search/material/windows/CMakeLists.txt index 2b0413165..a8aac9b6f 100644 --- a/desktop_photo_search/material/windows/CMakeLists.txt +++ b/desktop_photo_search/material/windows/CMakeLists.txt @@ -8,7 +8,7 @@ set(BINARY_NAME "desktop_photo_search") # Explicitly opt in to modern CMake behaviors to avoid warnings with recent # versions of CMake. -cmake_policy(SET CMP0063 NEW) +cmake_policy(VERSION 3.14...3.25) # Define build configuration option. get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) @@ -52,6 +52,7 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) # Application build; see runner/CMakeLists.txt. add_subdirectory("runner") + # Generated plugin build rules, which manage building the plugins and adding # them to the application. include(flutter/generated_plugins.cmake) diff --git a/desktop_photo_search/material/windows/runner/flutter_window.cpp b/desktop_photo_search/material/windows/runner/flutter_window.cpp index b25e363ef..955ee3038 100644 --- a/desktop_photo_search/material/windows/runner/flutter_window.cpp +++ b/desktop_photo_search/material/windows/runner/flutter_window.cpp @@ -31,6 +31,11 @@ bool FlutterWindow::OnCreate() { this->Show(); }); + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + return true; } diff --git a/desktop_photo_search/material/windows/runner/utils.cpp b/desktop_photo_search/material/windows/runner/utils.cpp index f5bf9fa0f..b2b08734d 100644 --- a/desktop_photo_search/material/windows/runner/utils.cpp +++ b/desktop_photo_search/material/windows/runner/utils.cpp @@ -47,16 +47,17 @@ std::string Utf8FromUtf16(const wchar_t* utf16_string) { } int target_length = ::WideCharToMultiByte( CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, nullptr, 0, nullptr, nullptr); + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); std::string utf8_string; - if (target_length == 0 || target_length > utf8_string.max_size()) { + if (target_length <= 0 || target_length > utf8_string.max_size()) { return utf8_string; } utf8_string.resize(target_length); int converted_length = ::WideCharToMultiByte( CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, utf8_string.data(), - target_length, nullptr, nullptr); + input_length, utf8_string.data(), target_length, nullptr, nullptr); if (converted_length == 0) { return std::string(); } diff --git a/desktop_photo_search/material/windows/runner/win32_window.cpp b/desktop_photo_search/material/windows/runner/win32_window.cpp index 041a38554..60608d0fe 100644 --- a/desktop_photo_search/material/windows/runner/win32_window.cpp +++ b/desktop_photo_search/material/windows/runner/win32_window.cpp @@ -60,7 +60,7 @@ class WindowClassRegistrar { public: ~WindowClassRegistrar() = default; - // Returns the singleton registar instance. + // Returns the singleton registrar instance. static WindowClassRegistrar* GetInstance() { if (!instance_) { instance_ = new WindowClassRegistrar(); diff --git a/desktop_photo_search/material/windows/runner/win32_window.h b/desktop_photo_search/material/windows/runner/win32_window.h index c86632d8a..e901dde68 100644 --- a/desktop_photo_search/material/windows/runner/win32_window.h +++ b/desktop_photo_search/material/windows/runner/win32_window.h @@ -77,7 +77,7 @@ class Win32Window { // OS callback called by message pump. Handles the WM_NCCREATE message which // is passed when the non-client area is being created and enables automatic // non-client DPI scaling so that the non-client area automatically - // responsponds to changes in DPI. All other messages are handled by + // responds to changes in DPI. All other messages are handled by // MessageHandler. static LRESULT CALLBACK WndProc(HWND const window, UINT const message, diff --git a/experimental/context_menus/.metadata b/experimental/context_menus/.metadata index 4f8a2af1f..a7cbe7932 100644 --- a/experimental/context_menus/.metadata +++ b/experimental/context_menus/.metadata @@ -4,8 +4,8 @@ # This file should be version controlled. version: - revision: d2434a2b6008698a6d805fce87b310098465bf4c - channel: unknown + revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + channel: beta project_type: app @@ -13,26 +13,26 @@ project_type: app migration: platforms: - platform: root - create_revision: d2434a2b6008698a6d805fce87b310098465bf4c - base_revision: d2434a2b6008698a6d805fce87b310098465bf4c + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f - platform: android - create_revision: d2434a2b6008698a6d805fce87b310098465bf4c - base_revision: d2434a2b6008698a6d805fce87b310098465bf4c + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f - platform: ios - create_revision: d2434a2b6008698a6d805fce87b310098465bf4c - base_revision: d2434a2b6008698a6d805fce87b310098465bf4c + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f - platform: linux - create_revision: d2434a2b6008698a6d805fce87b310098465bf4c - base_revision: d2434a2b6008698a6d805fce87b310098465bf4c + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f - platform: macos - create_revision: d2434a2b6008698a6d805fce87b310098465bf4c - base_revision: d2434a2b6008698a6d805fce87b310098465bf4c + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f - platform: web - create_revision: d2434a2b6008698a6d805fce87b310098465bf4c - base_revision: d2434a2b6008698a6d805fce87b310098465bf4c + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f - platform: windows - create_revision: d2434a2b6008698a6d805fce87b310098465bf4c - base_revision: d2434a2b6008698a6d805fce87b310098465bf4c + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f # User provided section diff --git a/experimental/context_menus/README.md b/experimental/context_menus/README.md index 89ec986c5..45fe23376 100644 --- a/experimental/context_menus/README.md +++ b/experimental/context_menus/README.md @@ -10,9 +10,6 @@ such as the text selection toolbar on mobile or the right click menu on desktop. Just run `flutter run` in the same directory as this README file. -Currently, most of the examples in this demo do not support web, because Flutter -uses the browser's built-in context menu instead. - ## The examples ### [Anywhere](https://github.com/flutter/samples/blob/main/experimental/context_menus/lib/anywhere_page.dart) diff --git a/experimental/context_menus/analysis_options.yaml b/experimental/context_menus/analysis_options.yaml index f04c6cf0f..13d6fe105 100644 --- a/experimental/context_menus/analysis_options.yaml +++ b/experimental/context_menus/analysis_options.yaml @@ -1 +1 @@ -include: ../../analysis_options.yaml +include: package:analysis_defaults/flutter.yaml diff --git a/experimental/context_menus/android/app/build.gradle b/experimental/context_menus/android/app/build.gradle index fc319d015..775d15df9 100644 --- a/experimental/context_menus/android/app/build.gradle +++ b/experimental/context_menus/android/app/build.gradle @@ -46,7 +46,7 @@ android { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "com.example.context_menus" // You can update the following values to match your application needs. - // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. minSdkVersion flutter.minSdkVersion targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() diff --git a/experimental/context_menus/android/app/src/main/AndroidManifest.xml b/experimental/context_menus/android/app/src/main/AndroidManifest.xml index 6dab9cbc9..3dc0edf13 100644 --- a/experimental/context_menus/android/app/src/main/AndroidManifest.xml +++ b/experimental/context_menus/android/app/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ - diff --git a/experimental/context_menus/android/build.gradle b/experimental/context_menus/android/build.gradle index 58a8c74b1..e50c3a02b 100644 --- a/experimental/context_menus/android/build.gradle +++ b/experimental/context_menus/android/build.gradle @@ -6,7 +6,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:7.2.0' + classpath 'com.android.tools.build:gradle:7.3.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/experimental/context_menus/ios/Podfile b/experimental/context_menus/ios/Podfile index 88359b225..fdcc671eb 100644 --- a/experimental/context_menus/ios/Podfile +++ b/experimental/context_menus/ios/Podfile @@ -32,6 +32,9 @@ target 'Runner' do use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end end post_install do |installer| diff --git a/experimental/context_menus/ios/Runner.xcodeproj/project.pbxproj b/experimental/context_menus/ios/Runner.xcodeproj/project.pbxproj index 16712b4a4..0b4966f21 100644 --- a/experimental/context_menus/ios/Runner.xcodeproj/project.pbxproj +++ b/experimental/context_menus/ios/Runner.xcodeproj/project.pbxproj @@ -13,8 +13,19 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXCopyFilesBuildPhase section */ 9705A1C41CF9048500538489 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; @@ -42,6 +53,8 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -66,12 +79,21 @@ name = Flutter; sourceTree = ""; }; + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; 97C146E51CF9000F007C117D = { isa = PBXGroup; children = ( 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, ); sourceTree = ""; }; @@ -79,6 +101,7 @@ isa = PBXGroup; children = ( 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, ); name = Products; sourceTree = ""; @@ -101,6 +124,24 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C807D294A63A400263BE5 /* Sources */, + 331C807E294A63A400263BE5 /* Frameworks */, + 331C807F294A63A400263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; 97C146ED1CF9000F007C117D /* Runner */ = { isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; @@ -130,6 +171,10 @@ LastUpgradeCheck = 1300; ORGANIZATIONNAME = ""; TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; 97C146ED1CF9000F007C117D = { CreatedOnToolsVersion = 7.3.1; LastSwiftMigration = 1100; @@ -150,11 +195,19 @@ projectRoot = ""; targets = ( 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EC1CF9000F007C117D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -176,6 +229,7 @@ files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); name = "Thin Binary"; outputPaths = ( @@ -202,6 +256,14 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EA1CF9000F007C117D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -213,6 +275,14 @@ }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin PBXVariantGroup section */ 97C146FA1CF9000F007C117D /* Main.storyboard */ = { isa = PBXVariantGroup; @@ -290,7 +360,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = 7F77QC7ABZ; + DEVELOPMENT_TEAM = TC87DMJLQP; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -305,6 +375,56 @@ }; name = Profile; }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AE0B7B92F70575B8D7E0D07E /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.contextMenus.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 89B67EB44CE7B6631473024E /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.contextMenus.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 640959BDD8F10B91D80A66BE /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.contextMenus.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; 97C147031CF9000F007C117D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -419,7 +539,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = 7F77QC7ABZ; + DEVELOPMENT_TEAM = TC87DMJLQP; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -442,7 +562,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = 7F77QC7ABZ; + DEVELOPMENT_TEAM = TC87DMJLQP; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -460,6 +580,16 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/experimental/context_menus/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/experimental/context_menus/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index c87d15a33..e42adcb34 100644 --- a/experimental/context_menus/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/experimental/context_menus/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -37,6 +37,17 @@ + + + + { }); } + @override + void initState() { + super.initState(); + // On web, disable the browser's context menu everywhere so that the custom + // Flutter-rendered context menu shows. + if (kIsWeb) { + BrowserContextMenu.disableContextMenu(); + } + } + + @override + void dispose() { + if (kIsWeb) { + BrowserContextMenu.enableContextMenu(); + } + super.dispose(); + } + @override Widget build(BuildContext context) { return MaterialApp( @@ -43,6 +62,7 @@ class _MyAppState extends State { theme: ThemeData( primarySwatch: Colors.blue, platform: defaultTargetPlatform, + useMaterial3: true, ), initialRoute: '/', routes: { diff --git a/experimental/context_menus/lib/modified_action_page.dart b/experimental/context_menus/lib/modified_action_page.dart index fd6e90cf4..2a2e506e1 100644 --- a/experimental/context_menus/lib/modified_action_page.dart +++ b/experimental/context_menus/lib/modified_action_page.dart @@ -77,7 +77,7 @@ class ModifiedActionPage extends StatelessWidget { buttonItems[copyButtonIndex]; buttonItems[copyButtonIndex] = copyButtonItem.copyWith( onPressed: () { - copyButtonItem.onPressed(); + copyButtonItem.onPressed!(); Navigator.of(context).push(_showDialog(context)); }, ); diff --git a/experimental/context_menus/lib/platform_selector.dart b/experimental/context_menus/lib/platform_selector.dart index ad486c5ca..48b444b54 100644 --- a/experimental/context_menus/lib/platform_selector.dart +++ b/experimental/context_menus/lib/platform_selector.dart @@ -27,7 +27,7 @@ class _PlatformSelectorState extends State { @override Widget build(BuildContext context) { return SizedBox( - width: 160.0, + width: 170.0, child: DropdownButton( value: defaultTargetPlatform, icon: const Icon(Icons.arrow_downward), diff --git a/experimental/context_menus/linux/CMakeLists.txt b/experimental/context_menus/linux/CMakeLists.txt index e1529a7de..92539fb7a 100644 --- a/experimental/context_menus/linux/CMakeLists.txt +++ b/experimental/context_menus/linux/CMakeLists.txt @@ -86,6 +86,7 @@ set_target_properties(${BINARY_NAME} RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" ) + # Generated plugin build rules, which manage building the plugins and adding # them to the application. include(flutter/generated_plugins.cmake) diff --git a/experimental/context_menus/macos/Podfile b/experimental/context_menus/macos/Podfile index fe733905d..c795730db 100644 --- a/experimental/context_menus/macos/Podfile +++ b/experimental/context_menus/macos/Podfile @@ -1,4 +1,4 @@ -platform :osx, '10.13' +platform :osx, '10.14' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' @@ -31,6 +31,9 @@ target 'Runner' do use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end end post_install do |installer| diff --git a/experimental/context_menus/macos/Runner.xcodeproj/project.pbxproj b/experimental/context_menus/macos/Runner.xcodeproj/project.pbxproj index 608e66a9f..a519ea01c 100644 --- a/experimental/context_menus/macos/Runner.xcodeproj/project.pbxproj +++ b/experimental/context_menus/macos/Runner.xcodeproj/project.pbxproj @@ -21,15 +21,22 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - B60E1A8B2D8A090432E4F2A5 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9B97E5C508CAF1C7116459E3 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 33CC10E52044A3C60003C045 /* Project object */; @@ -53,9 +60,11 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* context_menus.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = context_menus.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10ED2044A3C60003C045 /* context_menus.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "context_menus.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; @@ -67,26 +76,36 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 6A3A45C1F45E60A4FD63DAAF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - 9B97E5C508CAF1C7116459E3 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - BB7FD279761B07603F158689 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - BCF88575D7ECDA76889B13B6 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 33CC10EA2044A3C60003C045 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - B60E1A8B2D8A090432E4F2A5 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; 33BA886A226E78AF003329D5 /* Configs */ = { isa = PBXGroup; children = ( @@ -103,9 +122,9 @@ children = ( 33FAB671232836740065AC1E /* Runner */, 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 4AECC214ED99B3C071437A00 /* Pods */, ); sourceTree = ""; }; @@ -113,6 +132,7 @@ isa = PBXGroup; children = ( 33CC10ED2044A3C60003C045 /* context_menus.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, ); name = Products; sourceTree = ""; @@ -152,21 +172,9 @@ path = Runner; sourceTree = ""; }; - 4AECC214ED99B3C071437A00 /* Pods */ = { - isa = PBXGroup; - children = ( - 6A3A45C1F45E60A4FD63DAAF /* Pods-Runner.debug.xcconfig */, - BB7FD279761B07603F158689 /* Pods-Runner.release.xcconfig */, - BCF88575D7ECDA76889B13B6 /* Pods-Runner.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 9B97E5C508CAF1C7116459E3 /* Pods_Runner.framework */, ); name = Frameworks; sourceTree = ""; @@ -174,17 +182,33 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; 33CC10EC2044A3C60003C045 /* Runner */ = { isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 6E577C3E3FBB3AA29600811E /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - EBC5B9F10928FDB17032318B /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -206,6 +230,10 @@ LastUpgradeCheck = 1300; ORGANIZATIONNAME = ""; TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; 33CC10EC2044A3C60003C045 = { CreatedOnToolsVersion = 9.2; LastSwiftMigration = 1100; @@ -236,12 +264,20 @@ projectRoot = ""; targets = ( 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, 33CC111A2044C6BA0003C045 /* Flutter Assemble */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 33CC10EB2044A3C60003C045 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -292,48 +328,17 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 6E577C3E3FBB3AA29600811E /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - EBC5B9F10928FDB17032318B /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ 33CC10E92044A3C60003C045 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -347,6 +352,11 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; @@ -367,6 +377,48 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.contextMenus.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/context_menus.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/context_menus"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.contextMenus.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/context_menus.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/context_menus"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.contextMenus.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/context_menus.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/context_menus"; + }; + name = Profile; + }; 338D0CE9231458BD00FA5F75 /* Profile */ = { isa = XCBuildConfiguration; baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; @@ -405,7 +457,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.13; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; @@ -484,7 +536,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.13; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; @@ -531,7 +583,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.13; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; @@ -597,6 +649,16 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/experimental/context_menus/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/experimental/context_menus/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 9ee9cbdf2..85332994c 100644 --- a/experimental/context_menus/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/experimental/context_menus/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -37,6 +37,17 @@ + + + + - - diff --git a/experimental/context_menus/macos/Runner/Configs/AppInfo.xcconfig b/experimental/context_menus/macos/Runner/Configs/AppInfo.xcconfig index 8e861dd34..de4b6bfea 100644 --- a/experimental/context_menus/macos/Runner/Configs/AppInfo.xcconfig +++ b/experimental/context_menus/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = context_menus PRODUCT_BUNDLE_IDENTIFIER = com.example.contextMenus // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2022 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2023 com.example. All rights reserved. diff --git a/experimental/context_menus/macos/RunnerTests/RunnerTests.swift b/experimental/context_menus/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 000000000..5418c9f53 --- /dev/null +++ b/experimental/context_menus/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import FlutterMacOS +import Cocoa +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/experimental/context_menus/pubspec.yaml b/experimental/context_menus/pubspec.yaml index 8bbbb6af9..74387f35f 100644 --- a/experimental/context_menus/pubspec.yaml +++ b/experimental/context_menus/pubspec.yaml @@ -20,7 +20,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: '>=2.19.0-177.0.dev <3.0.0' + sdk: ^3.1.0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions @@ -39,15 +39,11 @@ dependencies: url_launcher: ^6.1.6 dev_dependencies: + analysis_defaults: + path: ../../analysis_defaults flutter_test: sdk: flutter - # The "flutter_lints" package below contains a set of recommended lints to - # encourage good coding practices. The lint set provided by the package is - # activated in the `analysis_options.yaml` file located at the root of your - # package. See that file for information about deactivating specific lint - # rules and activating additional ones. - flutter_lints: ^2.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/experimental/context_menus/test/custom_buttons_page_test.dart b/experimental/context_menus/test/custom_buttons_page_test.dart index 599b2fa4c..a4a6f5ff8 100644 --- a/experimental/context_menus/test/custom_buttons_page_test.dart +++ b/experimental/context_menus/test/custom_buttons_page_test.dart @@ -38,22 +38,18 @@ void main() { case TargetPlatform.iOS: expect(find.byType(CupertinoTextSelectionToolbarButton), findsNothing); expect(find.byType(CupertinoButton), findsNWidgets(2)); - break; case TargetPlatform.macOS: expect(find.byType(CupertinoButton), findsNWidgets(2)); expect(find.byType(CupertinoDesktopTextSelectionToolbarButton), findsNothing); - break; case TargetPlatform.android: case TargetPlatform.fuchsia: expect(find.byType(CupertinoButton), findsNWidgets(1)); expect(find.byType(TextSelectionToolbarTextButton), findsNothing); - break; case TargetPlatform.linux: case TargetPlatform.windows: expect(find.byType(CupertinoButton), findsNWidgets(1)); expect(find.byType(DesktopTextSelectionToolbarButton), findsNothing); - break; } }); } diff --git a/experimental/context_menus/test/custom_menu_page_test.dart b/experimental/context_menus/test/custom_menu_page_test.dart index 310d2c875..0b087b203 100644 --- a/experimental/context_menus/test/custom_menu_page_test.dart +++ b/experimental/context_menus/test/custom_menu_page_test.dart @@ -38,20 +38,16 @@ void main() { case TargetPlatform.iOS: expect( find.byType(CupertinoTextSelectionToolbarButton), findsNWidgets(2)); - break; case TargetPlatform.macOS: expect(find.byType(CupertinoDesktopTextSelectionToolbarButton), findsNWidgets(2)); - break; case TargetPlatform.android: case TargetPlatform.fuchsia: expect(find.byType(TextSelectionToolbarTextButton), findsNWidgets(1)); - break; case TargetPlatform.linux: case TargetPlatform.windows: expect( find.byType(DesktopTextSelectionToolbarButton), findsNWidgets(1)); - break; } }); } diff --git a/experimental/context_menus/test/default_values_page_test.dart b/experimental/context_menus/test/default_values_page_test.dart index 77dc1646e..bacfde458 100644 --- a/experimental/context_menus/test/default_values_page_test.dart +++ b/experimental/context_menus/test/default_values_page_test.dart @@ -45,20 +45,16 @@ void main() { case TargetPlatform.iOS: expect( find.byType(CupertinoTextSelectionToolbarButton), findsNWidgets(2)); - break; case TargetPlatform.macOS: expect(find.byType(CupertinoDesktopTextSelectionToolbarButton), findsNWidgets(2)); - break; case TargetPlatform.android: case TargetPlatform.fuchsia: expect(find.byType(TextSelectionToolbarTextButton), findsNWidgets(1)); - break; case TargetPlatform.linux: case TargetPlatform.windows: expect( find.byType(DesktopTextSelectionToolbarButton), findsNWidgets(1)); - break; } // Tap the next field to hide the context menu. diff --git a/experimental/context_menus/test/email_button_page_test.dart b/experimental/context_menus/test/email_button_page_test.dart index 515d80141..73c8a07e6 100644 --- a/experimental/context_menus/test/email_button_page_test.dart +++ b/experimental/context_menus/test/email_button_page_test.dart @@ -51,20 +51,16 @@ void main() { case TargetPlatform.iOS: expect( find.byType(CupertinoTextSelectionToolbarButton), findsNWidgets(2)); - break; case TargetPlatform.macOS: expect(find.byType(CupertinoDesktopTextSelectionToolbarButton), findsNWidgets(2)); - break; case TargetPlatform.android: case TargetPlatform.fuchsia: expect(find.byType(TextSelectionToolbarTextButton), findsNWidgets(3)); - break; case TargetPlatform.linux: case TargetPlatform.windows: expect( find.byType(DesktopTextSelectionToolbarButton), findsNWidgets(3)); - break; } // Click on "Copy" to hide the context menu. @@ -99,20 +95,16 @@ void main() { case TargetPlatform.iOS: expect( find.byType(CupertinoTextSelectionToolbarButton), findsNWidgets(3)); - break; case TargetPlatform.macOS: expect(find.byType(CupertinoDesktopTextSelectionToolbarButton), findsNWidgets(3)); - break; case TargetPlatform.android: case TargetPlatform.fuchsia: expect(find.byType(TextSelectionToolbarTextButton), findsNWidgets(4)); - break; case TargetPlatform.linux: case TargetPlatform.windows: expect( find.byType(DesktopTextSelectionToolbarButton), findsNWidgets(4)); - break; } }); } diff --git a/experimental/context_menus/test/field_types_page_test.dart b/experimental/context_menus/test/field_types_page_test.dart index c67c86171..f703dd30d 100644 --- a/experimental/context_menus/test/field_types_page_test.dart +++ b/experimental/context_menus/test/field_types_page_test.dart @@ -45,19 +45,15 @@ void main() { switch (defaultTargetPlatform) { case TargetPlatform.iOS: expect(find.byType(CupertinoTextSelectionToolbar), findsOneWidget); - break; case TargetPlatform.android: expect(find.byType(TextSelectionToolbar), findsOneWidget); - break; case TargetPlatform.fuchsia: case TargetPlatform.linux: case TargetPlatform.windows: expect(find.byType(DesktopTextSelectionToolbar), findsOneWidget); - break; case TargetPlatform.macOS: expect(find.byType(CupertinoDesktopTextSelectionToolbar), findsOneWidget); - break; } // Tap the next field to hide the context menu. @@ -84,13 +80,11 @@ void main() { case TargetPlatform.android: case TargetPlatform.fuchsia: expect(find.byType(CupertinoTextSelectionToolbar), findsOneWidget); - break; case TargetPlatform.macOS: case TargetPlatform.linux: case TargetPlatform.windows: expect(find.byType(CupertinoDesktopTextSelectionToolbar), findsOneWidget); - break; } // Tap the next field to hide the context menu. @@ -114,19 +108,15 @@ void main() { switch (defaultTargetPlatform) { case TargetPlatform.iOS: expect(find.byType(CupertinoTextSelectionToolbar), findsOneWidget); - break; case TargetPlatform.android: expect(find.byType(TextSelectionToolbar), findsOneWidget); - break; case TargetPlatform.fuchsia: case TargetPlatform.linux: case TargetPlatform.windows: expect(find.byType(DesktopTextSelectionToolbar), findsOneWidget); - break; case TargetPlatform.macOS: expect(find.byType(CupertinoDesktopTextSelectionToolbar), findsOneWidget); - break; } // Tap the next field to hide the context menu. @@ -171,19 +161,15 @@ void main() { switch (defaultTargetPlatform) { case TargetPlatform.iOS: expect(find.byType(CupertinoTextSelectionToolbar), findsOneWidget); - break; case TargetPlatform.android: expect(find.byType(TextSelectionToolbar), findsOneWidget); - break; case TargetPlatform.fuchsia: case TargetPlatform.linux: case TargetPlatform.windows: expect(find.byType(DesktopTextSelectionToolbar), findsOneWidget); - break; case TargetPlatform.macOS: expect(find.byType(CupertinoDesktopTextSelectionToolbar), findsOneWidget); - break; } }, variant: TargetPlatformVariant.all(), diff --git a/experimental/context_menus/windows/CMakeLists.txt b/experimental/context_menus/windows/CMakeLists.txt index 521f3efec..a2c75ca0d 100644 --- a/experimental/context_menus/windows/CMakeLists.txt +++ b/experimental/context_menus/windows/CMakeLists.txt @@ -52,6 +52,7 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) # Application build; see runner/CMakeLists.txt. add_subdirectory("runner") + # Generated plugin build rules, which manage building the plugins and adding # them to the application. include(flutter/generated_plugins.cmake) diff --git a/experimental/context_menus/windows/runner/CMakeLists.txt b/experimental/context_menus/windows/runner/CMakeLists.txt index 17411a8ab..394917c05 100644 --- a/experimental/context_menus/windows/runner/CMakeLists.txt +++ b/experimental/context_menus/windows/runner/CMakeLists.txt @@ -33,6 +33,7 @@ target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") # Add dependency libraries and include directories. Add any application-specific # dependencies here. target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") # Run the Flutter tool portions of the build. This must not be removed. diff --git a/experimental/context_menus/windows/runner/Runner.rc b/experimental/context_menus/windows/runner/Runner.rc index aaf379dea..e9d0cba67 100644 --- a/experimental/context_menus/windows/runner/Runner.rc +++ b/experimental/context_menus/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "context_menus" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "context_menus" "\0" - VALUE "LegalCopyright", "Copyright (C) 2022 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2023 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "context_menus.exe" "\0" VALUE "ProductName", "context_menus" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/experimental/context_menus/windows/runner/utils.cpp b/experimental/context_menus/windows/runner/utils.cpp index f5bf9fa0f..b2b08734d 100644 --- a/experimental/context_menus/windows/runner/utils.cpp +++ b/experimental/context_menus/windows/runner/utils.cpp @@ -47,16 +47,17 @@ std::string Utf8FromUtf16(const wchar_t* utf16_string) { } int target_length = ::WideCharToMultiByte( CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, nullptr, 0, nullptr, nullptr); + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); std::string utf8_string; - if (target_length == 0 || target_length > utf8_string.max_size()) { + if (target_length <= 0 || target_length > utf8_string.max_size()) { return utf8_string; } utf8_string.resize(target_length); int converted_length = ::WideCharToMultiByte( CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, utf8_string.data(), - target_length, nullptr, nullptr); + input_length, utf8_string.data(), target_length, nullptr, nullptr); if (converted_length == 0) { return std::string(); } diff --git a/experimental/context_menus/windows/runner/win32_window.cpp b/experimental/context_menus/windows/runner/win32_window.cpp index c7bcb4df4..60608d0fe 100644 --- a/experimental/context_menus/windows/runner/win32_window.cpp +++ b/experimental/context_menus/windows/runner/win32_window.cpp @@ -1,13 +1,31 @@ #include "win32_window.h" +#include #include #include "resource.h" namespace { +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + // The number of Win32Window objects that currently exist. static int g_active_window_count = 0; @@ -42,7 +60,7 @@ class WindowClassRegistrar { public: ~WindowClassRegistrar() = default; - // Returns the singleton registar instance. + // Returns the singleton registrar instance. static WindowClassRegistrar* GetInstance() { if (!instance_) { instance_ = new WindowClassRegistrar(); @@ -126,6 +144,8 @@ bool Win32Window::Create(const std::wstring& title, return false; } + UpdateTheme(window); + return OnCreate(); } @@ -192,6 +212,10 @@ Win32Window::MessageHandler(HWND hwnd, SetFocus(child_content_); } return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; } return DefWindowProc(window_handle_, message, wparam, lparam); @@ -247,3 +271,18 @@ bool Win32Window::OnCreate() { void Win32Window::OnDestroy() { // No-op; provided for subclasses. } + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/experimental/context_menus/windows/runner/win32_window.h b/experimental/context_menus/windows/runner/win32_window.h index a4b8f1f0e..e901dde68 100644 --- a/experimental/context_menus/windows/runner/win32_window.h +++ b/experimental/context_menus/windows/runner/win32_window.h @@ -77,7 +77,7 @@ class Win32Window { // OS callback called by message pump. Handles the WM_NCCREATE message which // is passed when the non-client area is being created and enables automatic // non-client DPI scaling so that the non-client area automatically - // responsponds to changes in DPI. All other messages are handled by + // responds to changes in DPI. All other messages are handled by // MessageHandler. static LRESULT CALLBACK WndProc(HWND const window, UINT const message, @@ -87,6 +87,9 @@ class Win32Window { // Retrieves a class instance pointer for |window| static Win32Window* GetThisFromHandle(HWND const window) noexcept; + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + bool quit_on_close_ = false; // window handle for top level window. diff --git a/experimental/federated_plugin/federated_plugin/analysis_options.yaml b/experimental/federated_plugin/federated_plugin/analysis_options.yaml index e2badd73e..13d6fe105 100644 --- a/experimental/federated_plugin/federated_plugin/analysis_options.yaml +++ b/experimental/federated_plugin/federated_plugin/analysis_options.yaml @@ -1 +1 @@ -include: ../../../analysis_options.yaml +include: package:analysis_defaults/flutter.yaml diff --git a/experimental/federated_plugin/federated_plugin/example/analysis_options.yaml b/experimental/federated_plugin/federated_plugin/example/analysis_options.yaml index ec0637968..13d6fe105 100644 --- a/experimental/federated_plugin/federated_plugin/example/analysis_options.yaml +++ b/experimental/federated_plugin/federated_plugin/example/analysis_options.yaml @@ -1 +1 @@ -include: ../../../../analysis_options.yaml +include: package:analysis_defaults/flutter.yaml diff --git a/experimental/federated_plugin/federated_plugin/example/lib/main.dart b/experimental/federated_plugin/federated_plugin/example/lib/main.dart index e8ddda607..c9f64ff09 100644 --- a/experimental/federated_plugin/federated_plugin/example/lib/main.dart +++ b/experimental/federated_plugin/federated_plugin/example/lib/main.dart @@ -10,12 +10,13 @@ void main() { } class MyApp extends StatelessWidget { - const MyApp({Key? key}) : super(key: key); + const MyApp({super.key}); @override Widget build(BuildContext context) { - return const MaterialApp( - home: HomePage(), + return MaterialApp( + theme: ThemeData.light(useMaterial3: true), + home: const HomePage(), ); } } @@ -23,7 +24,7 @@ class MyApp extends StatelessWidget { /// Demonstrates how to use the getBatteryLevel method from federated_plugin to retrieve /// current battery level of device. class HomePage extends StatefulWidget { - const HomePage({Key? key}) : super(key: key); + const HomePage({super.key}); @override State createState() => _HomePageState(); @@ -49,7 +50,7 @@ class _HomePageState extends State { style: Theme.of(context).textTheme.headlineSmall, ), const SizedBox(height: 16), - ElevatedButton( + FilledButton( onPressed: () async { try { final result = await getBatteryLevel(); @@ -57,6 +58,7 @@ class _HomePageState extends State { batteryLevel = result; }); } catch (error) { + if (!context.mounted) return; ScaffoldMessenger.of(context).showSnackBar( SnackBar( backgroundColor: Theme.of(context).primaryColor, diff --git a/experimental/federated_plugin/federated_plugin/example/pubspec.yaml b/experimental/federated_plugin/federated_plugin/example/pubspec.yaml index a639143ce..31d496b41 100644 --- a/experimental/federated_plugin/federated_plugin/example/pubspec.yaml +++ b/experimental/federated_plugin/federated_plugin/example/pubspec.yaml @@ -4,7 +4,7 @@ description: Demonstrates how to use the federated_plugin plugin. publish_to: 'none' # Remove this line if you wish to publish to pub.dev environment: - sdk: ">=2.15.1 <3.0.0" + sdk: ^3.1.0 dependencies: flutter: @@ -15,9 +15,10 @@ dependencies: cupertino_icons: ^1.0.2 dev_dependencies: + analysis_defaults: + path: ../../../../analysis_defaults flutter_test: sdk: flutter - flutter_lints: ^2.0.1 flutter: uses-material-design: true diff --git a/experimental/federated_plugin/federated_plugin/example/test/widget_test.dart b/experimental/federated_plugin/federated_plugin/example/test/widget_test.dart index f089561b5..597a07b8e 100644 --- a/experimental/federated_plugin/federated_plugin/example/test/widget_test.dart +++ b/experimental/federated_plugin/federated_plugin/example/test/widget_test.dart @@ -10,19 +10,21 @@ import 'package:flutter_test/flutter_test.dart'; void main() { group('federated plugin demo tests', () { const batteryLevel = 45; - setUpAll(() { - const MethodChannel('battery').setMockMethodCallHandler((call) async { - if (call.method == 'getBatteryLevel') { - return batteryLevel; - } - }); - }); testWidgets('get current battery level from platform', (tester) async { + tester.binding.defaultBinaryMessenger.setMockMethodCallHandler( + const MethodChannel('battery'), + (call) async { + if (call.method == 'getBatteryLevel') { + return batteryLevel; + } + return 0; + }, + ); await tester.pumpWidget(const MyApp()); // Tap button to retrieve current battery level from platform. - await tester.tap(find.byType(ElevatedButton)); + await tester.tap(find.byType(FilledButton)); await tester.pumpAndSettle(); expect(find.text('Battery Level: $batteryLevel'), findsOneWidget); diff --git a/experimental/federated_plugin/federated_plugin/pubspec.yaml b/experimental/federated_plugin/federated_plugin/pubspec.yaml index fb5807cc4..93ad0eeea 100644 --- a/experimental/federated_plugin/federated_plugin/pubspec.yaml +++ b/experimental/federated_plugin/federated_plugin/pubspec.yaml @@ -5,7 +5,7 @@ version: 0.0.1 publish_to: "none" environment: - sdk: ">=2.17.0-0 <3.0.0" + sdk: ^3.1.0 dependencies: flutter: @@ -20,9 +20,10 @@ dependencies: path: ../federated_plugin_macos dev_dependencies: + analysis_defaults: + path: ../../../analysis_defaults flutter_test: sdk: flutter - flutter_lints: ^2.0.1 flutter: plugin: diff --git a/experimental/federated_plugin/federated_plugin/test/federated_plugin_test.dart b/experimental/federated_plugin/federated_plugin/test/federated_plugin_test.dart index eba62999b..833fda455 100644 --- a/experimental/federated_plugin/federated_plugin/test/federated_plugin_test.dart +++ b/experimental/federated_plugin/federated_plugin/test/federated_plugin_test.dart @@ -11,13 +11,17 @@ void main() { group('Federated Plugin Test', () { const batteryLevel = 34; - const MethodChannel('battery').setMockMethodCallHandler((call) async { - if (call.method == 'getBatteryLevel') { - return batteryLevel; - } - }); - test('getBatteryLevel method test', () async { + testWidgets('getBatteryLevel method test', (tester) async { + tester.binding.defaultBinaryMessenger.setMockMethodCallHandler( + const MethodChannel('battery'), + (call) async { + if (call.method == 'getBatteryLevel') { + return batteryLevel; + } + return 0; + }, + ); final result = await getBatteryLevel(); expect(result, batteryLevel); }); diff --git a/experimental/federated_plugin/federated_plugin_macos/analysis_options.yaml b/experimental/federated_plugin/federated_plugin_macos/analysis_options.yaml index e2badd73e..13d6fe105 100644 --- a/experimental/federated_plugin/federated_plugin_macos/analysis_options.yaml +++ b/experimental/federated_plugin/federated_plugin_macos/analysis_options.yaml @@ -1 +1 @@ -include: ../../../analysis_options.yaml +include: package:analysis_defaults/flutter.yaml diff --git a/experimental/federated_plugin/federated_plugin_macos/pubspec.yaml b/experimental/federated_plugin/federated_plugin_macos/pubspec.yaml index 988ece1fb..aa857b2f2 100644 --- a/experimental/federated_plugin/federated_plugin_macos/pubspec.yaml +++ b/experimental/federated_plugin/federated_plugin_macos/pubspec.yaml @@ -4,16 +4,17 @@ version: 0.0.1 homepage: environment: - sdk: ">=2.17.0-0 <3.0.0" + sdk: ^3.1.0 dependencies: flutter: sdk: flutter dev_dependencies: + analysis_defaults: + path: ../../../analysis_defaults flutter_test: sdk: flutter - flutter_lints: ^2.0.1 flutter: plugin: diff --git a/experimental/federated_plugin/federated_plugin_platform_interface/analysis_options.yaml b/experimental/federated_plugin/federated_plugin_platform_interface/analysis_options.yaml index e2badd73e..13d6fe105 100644 --- a/experimental/federated_plugin/federated_plugin_platform_interface/analysis_options.yaml +++ b/experimental/federated_plugin/federated_plugin_platform_interface/analysis_options.yaml @@ -1 +1 @@ -include: ../../../analysis_options.yaml +include: package:analysis_defaults/flutter.yaml diff --git a/experimental/federated_plugin/federated_plugin_platform_interface/pubspec.yaml b/experimental/federated_plugin/federated_plugin_platform_interface/pubspec.yaml index 656a23841..0deae6fcf 100644 --- a/experimental/federated_plugin/federated_plugin_platform_interface/pubspec.yaml +++ b/experimental/federated_plugin/federated_plugin_platform_interface/pubspec.yaml @@ -4,7 +4,7 @@ version: 0.0.1 homepage: environment: - sdk: ">=2.17.0-0 <3.0.0" + sdk: ^3.1.0 dependencies: flutter: @@ -12,6 +12,7 @@ dependencies: plugin_platform_interface: ^2.0.2 dev_dependencies: + analysis_defaults: + path: ../../../analysis_defaults flutter_test: sdk: flutter - flutter_lints: ^2.0.1 diff --git a/experimental/federated_plugin/federated_plugin_platform_interface/test/federated_plugin_platform_interface_test.dart b/experimental/federated_plugin/federated_plugin_platform_interface/test/federated_plugin_platform_interface_test.dart index 5b0f561ea..3c302abc7 100644 --- a/experimental/federated_plugin/federated_plugin_platform_interface/test/federated_plugin_platform_interface_test.dart +++ b/experimental/federated_plugin/federated_plugin_platform_interface/test/federated_plugin_platform_interface_test.dart @@ -11,13 +11,17 @@ void main() { group('MethodChannel test', () { const batteryLevel = 89; - const MethodChannel('battery').setMockMethodCallHandler((call) async { - if (call.method == 'getBatteryLevel') { - return batteryLevel; - } - }); - test('getBatteryLevel method test', () async { + testWidgets('getBatteryLevel method test', (tester) async { + tester.binding.defaultBinaryMessenger.setMockMethodCallHandler( + const MethodChannel('battery'), + (call) async { + if (call.method == 'getBatteryLevel') { + return batteryLevel; + } + return 0; + }, + ); final locationMethodChannel = BatteryMethodChannel(); final result = await locationMethodChannel.getBatteryLevel(); expect(result, batteryLevel); diff --git a/experimental/federated_plugin/federated_plugin_web/analysis_options.yaml b/experimental/federated_plugin/federated_plugin_web/analysis_options.yaml index e2badd73e..13d6fe105 100644 --- a/experimental/federated_plugin/federated_plugin_web/analysis_options.yaml +++ b/experimental/federated_plugin/federated_plugin_web/analysis_options.yaml @@ -1 +1 @@ -include: ../../../analysis_options.yaml +include: package:analysis_defaults/flutter.yaml diff --git a/experimental/federated_plugin/federated_plugin_web/pubspec.yaml b/experimental/federated_plugin/federated_plugin_web/pubspec.yaml index 6835ccad3..6f04ca107 100644 --- a/experimental/federated_plugin/federated_plugin_web/pubspec.yaml +++ b/experimental/federated_plugin/federated_plugin_web/pubspec.yaml @@ -4,7 +4,7 @@ version: 0.0.1 publish_to: none environment: - sdk: ">=2.17.0-0 <3.0.0" + sdk: ^3.1.0 dependencies: flutter: @@ -15,11 +15,12 @@ dependencies: path: ../federated_plugin_platform_interface dev_dependencies: + analysis_defaults: + path: ../../../analysis_defaults flutter_test: sdk: flutter integration_test: sdk: flutter - flutter_lints: ^2.0.1 mockito: ^5.0.2 flutter: diff --git a/experimental/federated_plugin/federated_plugin_windows/analysis_options.yaml b/experimental/federated_plugin/federated_plugin_windows/analysis_options.yaml index e2badd73e..13d6fe105 100644 --- a/experimental/federated_plugin/federated_plugin_windows/analysis_options.yaml +++ b/experimental/federated_plugin/federated_plugin_windows/analysis_options.yaml @@ -1 +1 @@ -include: ../../../analysis_options.yaml +include: package:analysis_defaults/flutter.yaml diff --git a/experimental/federated_plugin/federated_plugin_windows/pubspec.yaml b/experimental/federated_plugin/federated_plugin_windows/pubspec.yaml index de4c6ec94..bb7b213ba 100644 --- a/experimental/federated_plugin/federated_plugin_windows/pubspec.yaml +++ b/experimental/federated_plugin/federated_plugin_windows/pubspec.yaml @@ -4,16 +4,17 @@ version: 0.0.1 homepage: environment: - sdk: ">=2.17.0-0 <3.0.0" + sdk: ^3.1.0 dependencies: flutter: sdk: flutter dev_dependencies: + analysis_defaults: + path: ../../../analysis_defaults flutter_test: sdk: flutter - flutter_lints: ^2.0.1 flutter: plugin: diff --git a/experimental/linting_tool/analysis_options.yaml b/experimental/linting_tool/analysis_options.yaml index 93d518ac2..39271ef9d 100644 --- a/experimental/linting_tool/analysis_options.yaml +++ b/experimental/linting_tool/analysis_options.yaml @@ -1,4 +1,4 @@ -include: ../../analysis_options.yaml +include: package:analysis_defaults/flutter.yaml analyzer: exclude: diff --git a/experimental/linting_tool/lib/model/profiles_store.dart b/experimental/linting_tool/lib/model/profiles_store.dart index 67aa04adb..e19edff9b 100644 --- a/experimental/linting_tool/lib/model/profiles_store.dart +++ b/experimental/linting_tool/lib/model/profiles_store.dart @@ -140,7 +140,7 @@ class ProfilesStore extends ChangeNotifier { const name = 'analysis_options.yaml'; /// Get file path using file picker. - final savePath = await file_selector.getSavePath( + final saveLocation = await file_selector.getSaveLocation( suggestedName: name, ); @@ -148,8 +148,8 @@ class ProfilesStore extends ChangeNotifier { final file = file_selector.XFile.fromData(data, name: name); /// Save file to disk if path was provided. - if (savePath != null) { - await file.saveTo(savePath); + if (saveLocation != null) { + await file.saveTo(saveLocation.path); return true; } diff --git a/experimental/linting_tool/lib/model/rule.dart b/experimental/linting_tool/lib/model/rule.dart index ae88ed499..224bdfbec 100644 --- a/experimental/linting_tool/lib/model/rule.dart +++ b/experimental/linting_tool/lib/model/rule.dart @@ -18,7 +18,7 @@ class Rule extends Equatable { @HiveField(2) final String group; @HiveField(3) - final String maturity; + final String state; @HiveField(4) final List incompatible; @HiveField(5) @@ -30,7 +30,7 @@ class Rule extends Equatable { required this.name, required this.description, required this.group, - required this.maturity, + required this.state, required this.incompatible, required this.sets, required this.details, diff --git a/experimental/linting_tool/lib/model/rule.g.dart b/experimental/linting_tool/lib/model/rule.g.dart index 22d577e0f..bc9e8f8af 100644 --- a/experimental/linting_tool/lib/model/rule.g.dart +++ b/experimental/linting_tool/lib/model/rule.g.dart @@ -20,7 +20,7 @@ class RuleAdapter extends TypeAdapter { name: fields[0] as String, description: fields[1] as String, group: fields[2] as String, - maturity: fields[3] as String, + state: fields[3] as String, incompatible: (fields[4] as List).cast(), sets: (fields[5] as List).cast(), details: fields[6] as String, @@ -38,7 +38,7 @@ class RuleAdapter extends TypeAdapter { ..writeByte(2) ..write(obj.group) ..writeByte(3) - ..write(obj.maturity) + ..write(obj.state) ..writeByte(4) ..write(obj.incompatible) ..writeByte(5) @@ -66,7 +66,7 @@ Rule _$RuleFromJson(Map json) => Rule( name: json['name'] as String, description: json['description'] as String, group: json['group'] as String, - maturity: json['maturity'] as String, + state: json['state'] as String, incompatible: (json['incompatible'] as List) .map((e) => e as String) .toList(), @@ -78,7 +78,7 @@ Map _$RuleToJson(Rule instance) => { 'name': instance.name, 'description': instance.description, 'group': instance.group, - 'maturity': instance.maturity, + 'state': instance.state, 'incompatible': instance.incompatible, 'sets': instance.sets, 'details': instance.details, diff --git a/experimental/linting_tool/lib/pages/saved_lints_page.dart b/experimental/linting_tool/lib/pages/saved_lints_page.dart index 45940a432..2d88bf15c 100644 --- a/experimental/linting_tool/lib/pages/saved_lints_page.dart +++ b/experimental/linting_tool/lib/pages/saved_lints_page.dart @@ -110,10 +110,8 @@ class _SavedLintsPageState extends State { ); } - break; case 'Delete': await profilesStore.deleteProfile(profile); - break; default: } }, diff --git a/experimental/linting_tool/lib/repository/api_provider.dart b/experimental/linting_tool/lib/repository/api_provider.dart index 76045a830..76d2349a9 100644 --- a/experimental/linting_tool/lib/repository/api_provider.dart +++ b/experimental/linting_tool/lib/repository/api_provider.dart @@ -8,15 +8,14 @@ import 'package:linting_tool/model/rule.dart'; import 'package:yaml/yaml.dart'; class APIProvider { - static const String _baseURL = 'https://dart-lang.github.io/linter'; - final http.Client httpClient; APIProvider(this.httpClient); Future> getRulesList() async { - final response = - await httpClient.get(Uri.parse('$_baseURL//lints/machine/rules.json')); + final response = await httpClient.get(Uri.parse( + 'https://raw.githubusercontent.com/dart-lang/site-www/main/src/_data/linter_rules.json', + )); if (response.statusCode == 200) { final data = json.decode(response.body) as List; @@ -31,7 +30,7 @@ class APIProvider { Future getTemplateFile() async { final response = await httpClient.get(Uri.parse( - 'https://raw.githubusercontent.com/flutter/flutter/master/packages/flutter_tools/templates/app_shared/analysis_options.yaml.tmpl')); + 'https://raw.githubusercontent.com/flutter/flutter/main/packages/flutter_tools/templates/app_shared/analysis_options.yaml.tmpl')); if (response.statusCode == 200) { return loadYaml(response.body) as YamlMap; } else { diff --git a/experimental/linting_tool/lib/theme/app_theme.dart b/experimental/linting_tool/lib/theme/app_theme.dart index 8fd8e704d..9096a21be 100644 --- a/experimental/linting_tool/lib/theme/app_theme.dart +++ b/experimental/linting_tool/lib/theme/app_theme.dart @@ -9,7 +9,7 @@ import 'package:linting_tool/theme/colors.dart'; abstract class AppTheme { static ThemeData buildReplyLightTheme(BuildContext context) { - final base = ThemeData.light(); + final base = ThemeData.light(useMaterial3: true); return base.copyWith( bottomSheetTheme: BottomSheetThemeData( backgroundColor: AppColors.blue700, diff --git a/experimental/linting_tool/lib/widgets/adaptive_nav.dart b/experimental/linting_tool/lib/widgets/adaptive_nav.dart index 199fb5567..0a45f096e 100644 --- a/experimental/linting_tool/lib/widgets/adaptive_nav.dart +++ b/experimental/linting_tool/lib/widgets/adaptive_nav.dart @@ -331,7 +331,6 @@ class _NavigationRailTrailingSection extends StatelessWidget { ), ], ); - break; default: break; } diff --git a/experimental/linting_tool/lib/widgets/lint_expansion_tile.dart b/experimental/linting_tool/lib/widgets/lint_expansion_tile.dart index 001156d56..8e476f998 100644 --- a/experimental/linting_tool/lib/widgets/lint_expansion_tile.dart +++ b/experimental/linting_tool/lib/widgets/lint_expansion_tile.dart @@ -79,11 +79,11 @@ class _LintExpansionTileState extends State { TextSpan( children: [ TextSpan( - text: 'Maturity:', + text: 'State:', style: textTheme.titleSmall, ), TextSpan( - text: ' ${rule.maturity}', + text: ' ${rule.state}', ), ], ), diff --git a/experimental/linting_tool/lib/widgets/saved_rule_tile.dart b/experimental/linting_tool/lib/widgets/saved_rule_tile.dart index 853383140..79c927025 100644 --- a/experimental/linting_tool/lib/widgets/saved_rule_tile.dart +++ b/experimental/linting_tool/lib/widgets/saved_rule_tile.dart @@ -101,11 +101,11 @@ class _SavedRuleTileState extends State { TextSpan( children: [ TextSpan( - text: 'Maturity:', + text: 'State:', style: textTheme.titleSmall, ), TextSpan( - text: ' ${rule.maturity}', + text: ' ${rule.state}', ), ], ), diff --git a/experimental/linting_tool/pubspec.yaml b/experimental/linting_tool/pubspec.yaml index 4cb3c1163..c074417ef 100644 --- a/experimental/linting_tool/pubspec.yaml +++ b/experimental/linting_tool/pubspec.yaml @@ -6,7 +6,7 @@ version: 1.0.0+1 publish_to: "none" environment: - sdk: ">=2.17.0-0 <3.0.0" + sdk: ^3.1.0 dependencies: flutter: @@ -14,14 +14,14 @@ dependencies: adaptive_breakpoints: ^0.1.1 cupertino_icons: ^1.0.2 equatable: ^2.0.3 - file_selector: ^0.9.1 + file_selector: ^1.0.0 flutter_markdown: ^0.6.2 - google_fonts: ^4.0.0 + google_fonts: ^6.0.0 hive: ^2.0.4 hive_flutter: ^1.1.0 - http: ^0.13.3 + http: ^1.0.0 json2yaml: ^3.0.0 - json_annotation: ^4.5.0 + json_annotation: ^4.8.1 mockito: ^5.0.13 provider: ^6.0.2 yaml: ^3.1.0 @@ -32,12 +32,13 @@ dependencies: path: plugins/window_size dev_dependencies: + analysis_defaults: + path: ../../analysis_defaults flutter_test: sdk: flutter - build_runner: ^2.0.6 - flutter_lints: ^2.0.1 + build_runner: ^2.4.6 hive_generator: ^2.0.0 - json_serializable: ^6.2.0 + json_serializable: ^6.7.1 flutter: uses-material-design: true diff --git a/experimental/linting_tool/test/widget_test.dart b/experimental/linting_tool/test/widget_test.dart index 10bffef4b..f32e5cb64 100644 --- a/experimental/linting_tool/test/widget_test.dart +++ b/experimental/linting_tool/test/widget_test.dart @@ -72,11 +72,11 @@ void main() { testWidgets('NavigationRail smoke test', (tester) async { var responseBody = - '''[{"name": "always_use_package_imports","description": "Avoid relative imports for files in `lib/`.","group": "errors","maturity": "stable","incompatible": [],"sets": [],"details": "*DO* avoid relative imports for files in `lib/`.\n\nWhen mixing relative and absolute imports it's possible to create confusion\nwhere the same member gets imported in two different ways. One way to avoid\nthat is to ensure you consistently use absolute imports for files withing the\n`lib/` directory.\n\nThis is the opposite of 'prefer_relative_imports'.\nMight be used with 'avoid_relative_lib_imports' to avoid relative imports of\nfiles within `lib/` directory outside of it. (for example `test/`)\n\n**GOOD:**\n\n```dart\nimport 'package:foo/bar.dart';\n\nimport 'package:foo/baz.dart';\n\nimport 'package:foo/src/baz.dart';\n...\n```\n\n**BAD:**\n\n```dart\nimport 'baz.dart';\n\nimport 'src/bag.dart'\n\nimport '../lib/baz.dart';\n\n...\n```\n\n"}]'''; + '''[{"name": "always_use_package_imports","description": "Avoid relative imports for files in `lib/`.","group": "errors","state": "stable","incompatible": [],"sets": [],"details": "*DO* avoid relative imports for files in `lib/`.\n\nWhen mixing relative and absolute imports it's possible to create confusion\nwhere the same member gets imported in two different ways. One way to avoid\nthat is to ensure you consistently use absolute imports for files withing the\n`lib/` directory.\n\nThis is the opposite of 'prefer_relative_imports'.\nMight be used with 'avoid_relative_lib_imports' to avoid relative imports of\nfiles within `lib/` directory outside of it. (for example `test/`)\n\n**GOOD:**\n\n```dart\nimport 'package:foo/bar.dart';\n\nimport 'package:foo/baz.dart';\n\nimport 'package:foo/src/baz.dart';\n...\n```\n\n**BAD:**\n\n```dart\nimport 'baz.dart';\n\nimport 'src/bag.dart'\n\nimport '../lib/baz.dart';\n\n...\n```\n\n"}]'''; when(_mockClient.get(Uri.parse( - 'https://dart-lang.github.io/linter//lints/machine/rules.json'))) - .thenAnswer( + 'https://raw.githubusercontent.com/dart-lang/site-www/main/src/_data/linter_rules.json', + ))).thenAnswer( (_) async => http.Response(responseBody, 400), ); diff --git a/experimental/linting_tool/test/widget_test.mocks.dart b/experimental/linting_tool/test/widget_test.mocks.dart index 4e4b435c9..c3b2fb95d 100644 --- a/experimental/linting_tool/test/widget_test.mocks.dart +++ b/experimental/linting_tool/test/widget_test.mocks.dart @@ -1,15 +1,13 @@ -// Mocks generated by Mockito 5.2.0 from annotations +// Mocks generated by Mockito 5.4.2 from annotations // in linting_tool/test/widget_test.dart. // Do not manually edit this file. -import 'dart:async' as _i5; -import 'dart:convert' as _i6; -import 'dart:typed_data' as _i7; +// ignore_for_file: no_leading_underscores_for_library_prefixes +import 'dart:async' as _i3; +import 'dart:convert' as _i4; +import 'dart:typed_data' as _i5; -import 'package:http/src/base_request.dart' as _i8; -import 'package:http/src/client.dart' as _i4; -import 'package:http/src/response.dart' as _i2; -import 'package:http/src/streamed_response.dart' as _i3; +import 'package:http/http.dart' as _i2; import 'package:mockito/mockito.dart' as _i1; // ignore_for_file: type=lint @@ -21,88 +19,245 @@ import 'package:mockito/mockito.dart' as _i1; // ignore_for_file: prefer_const_constructors // ignore_for_file: unnecessary_parenthesis // ignore_for_file: camel_case_types +// ignore_for_file: subtype_of_sealed_class -class _FakeResponse_0 extends _i1.Fake implements _i2.Response {} +class _FakeResponse_0 extends _i1.SmartFake implements _i2.Response { + _FakeResponse_0( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} -class _FakeStreamedResponse_1 extends _i1.Fake - implements _i3.StreamedResponse {} +class _FakeStreamedResponse_1 extends _i1.SmartFake + implements _i2.StreamedResponse { + _FakeStreamedResponse_1( + Object parent, + Invocation parentInvocation, + ) : super( + parent, + parentInvocation, + ); +} /// A class which mocks [Client]. /// /// See the documentation for Mockito's code generation for more information. -class MockClient extends _i1.Mock implements _i4.Client { +class MockClient extends _i1.Mock implements _i2.Client { MockClient() { _i1.throwOnMissingStub(this); } @override - _i5.Future<_i2.Response> head(Uri? url, {Map? headers}) => - (super.noSuchMethod(Invocation.method(#head, [url], {#headers: headers}), - returnValue: Future<_i2.Response>.value(_FakeResponse_0())) - as _i5.Future<_i2.Response>); + _i3.Future<_i2.Response> head( + Uri? url, { + Map? headers, + }) => + (super.noSuchMethod( + Invocation.method( + #head, + [url], + {#headers: headers}, + ), + returnValue: _i3.Future<_i2.Response>.value(_FakeResponse_0( + this, + Invocation.method( + #head, + [url], + {#headers: headers}, + ), + )), + ) as _i3.Future<_i2.Response>); @override - _i5.Future<_i2.Response> get(Uri? url, {Map? headers}) => - (super.noSuchMethod(Invocation.method(#get, [url], {#headers: headers}), - returnValue: Future<_i2.Response>.value(_FakeResponse_0())) - as _i5.Future<_i2.Response>); + _i3.Future<_i2.Response> get( + Uri? url, { + Map? headers, + }) => + (super.noSuchMethod( + Invocation.method( + #get, + [url], + {#headers: headers}, + ), + returnValue: _i3.Future<_i2.Response>.value(_FakeResponse_0( + this, + Invocation.method( + #get, + [url], + {#headers: headers}, + ), + )), + ) as _i3.Future<_i2.Response>); @override - _i5.Future<_i2.Response> post(Uri? url, - {Map? headers, - Object? body, - _i6.Encoding? encoding}) => + _i3.Future<_i2.Response> post( + Uri? url, { + Map? headers, + Object? body, + _i4.Encoding? encoding, + }) => (super.noSuchMethod( - Invocation.method(#post, [url], - {#headers: headers, #body: body, #encoding: encoding}), - returnValue: Future<_i2.Response>.value(_FakeResponse_0())) - as _i5.Future<_i2.Response>); + Invocation.method( + #post, + [url], + { + #headers: headers, + #body: body, + #encoding: encoding, + }, + ), + returnValue: _i3.Future<_i2.Response>.value(_FakeResponse_0( + this, + Invocation.method( + #post, + [url], + { + #headers: headers, + #body: body, + #encoding: encoding, + }, + ), + )), + ) as _i3.Future<_i2.Response>); @override - _i5.Future<_i2.Response> put(Uri? url, - {Map? headers, - Object? body, - _i6.Encoding? encoding}) => + _i3.Future<_i2.Response> put( + Uri? url, { + Map? headers, + Object? body, + _i4.Encoding? encoding, + }) => (super.noSuchMethod( - Invocation.method(#put, [url], - {#headers: headers, #body: body, #encoding: encoding}), - returnValue: Future<_i2.Response>.value(_FakeResponse_0())) - as _i5.Future<_i2.Response>); + Invocation.method( + #put, + [url], + { + #headers: headers, + #body: body, + #encoding: encoding, + }, + ), + returnValue: _i3.Future<_i2.Response>.value(_FakeResponse_0( + this, + Invocation.method( + #put, + [url], + { + #headers: headers, + #body: body, + #encoding: encoding, + }, + ), + )), + ) as _i3.Future<_i2.Response>); @override - _i5.Future<_i2.Response> patch(Uri? url, - {Map? headers, - Object? body, - _i6.Encoding? encoding}) => + _i3.Future<_i2.Response> patch( + Uri? url, { + Map? headers, + Object? body, + _i4.Encoding? encoding, + }) => (super.noSuchMethod( - Invocation.method(#patch, [url], - {#headers: headers, #body: body, #encoding: encoding}), - returnValue: Future<_i2.Response>.value(_FakeResponse_0())) - as _i5.Future<_i2.Response>); + Invocation.method( + #patch, + [url], + { + #headers: headers, + #body: body, + #encoding: encoding, + }, + ), + returnValue: _i3.Future<_i2.Response>.value(_FakeResponse_0( + this, + Invocation.method( + #patch, + [url], + { + #headers: headers, + #body: body, + #encoding: encoding, + }, + ), + )), + ) as _i3.Future<_i2.Response>); @override - _i5.Future<_i2.Response> delete(Uri? url, - {Map? headers, - Object? body, - _i6.Encoding? encoding}) => + _i3.Future<_i2.Response> delete( + Uri? url, { + Map? headers, + Object? body, + _i4.Encoding? encoding, + }) => (super.noSuchMethod( - Invocation.method(#delete, [url], - {#headers: headers, #body: body, #encoding: encoding}), - returnValue: Future<_i2.Response>.value(_FakeResponse_0())) - as _i5.Future<_i2.Response>); + Invocation.method( + #delete, + [url], + { + #headers: headers, + #body: body, + #encoding: encoding, + }, + ), + returnValue: _i3.Future<_i2.Response>.value(_FakeResponse_0( + this, + Invocation.method( + #delete, + [url], + { + #headers: headers, + #body: body, + #encoding: encoding, + }, + ), + )), + ) as _i3.Future<_i2.Response>); @override - _i5.Future read(Uri? url, {Map? headers}) => - (super.noSuchMethod(Invocation.method(#read, [url], {#headers: headers}), - returnValue: Future.value('')) as _i5.Future); + _i3.Future read( + Uri? url, { + Map? headers, + }) => + (super.noSuchMethod( + Invocation.method( + #read, + [url], + {#headers: headers}, + ), + returnValue: _i3.Future.value(''), + ) as _i3.Future); @override - _i5.Future<_i7.Uint8List> readBytes(Uri? url, - {Map? headers}) => + _i3.Future<_i5.Uint8List> readBytes( + Uri? url, { + Map? headers, + }) => (super.noSuchMethod( - Invocation.method(#readBytes, [url], {#headers: headers}), - returnValue: Future<_i7.Uint8List>.value(_i7.Uint8List(0))) - as _i5.Future<_i7.Uint8List>); + Invocation.method( + #readBytes, + [url], + {#headers: headers}, + ), + returnValue: _i3.Future<_i5.Uint8List>.value(_i5.Uint8List(0)), + ) as _i3.Future<_i5.Uint8List>); @override - _i5.Future<_i3.StreamedResponse> send(_i8.BaseRequest? request) => - (super.noSuchMethod(Invocation.method(#send, [request]), - returnValue: - Future<_i3.StreamedResponse>.value(_FakeStreamedResponse_1())) - as _i5.Future<_i3.StreamedResponse>); + _i3.Future<_i2.StreamedResponse> send(_i2.BaseRequest? request) => + (super.noSuchMethod( + Invocation.method( + #send, + [request], + ), + returnValue: + _i3.Future<_i2.StreamedResponse>.value(_FakeStreamedResponse_1( + this, + Invocation.method( + #send, + [request], + ), + )), + ) as _i3.Future<_i2.StreamedResponse>); @override - void close() => super.noSuchMethod(Invocation.method(#close, []), - returnValueForMissingStub: null); + void close() => super.noSuchMethod( + Invocation.method( + #close, + [], + ), + returnValueForMissingStub: null, + ); } diff --git a/experimental/material_3_demo/.metadata b/experimental/material_3_demo/.metadata index df1c01bcc..a7cbe7932 100644 --- a/experimental/material_3_demo/.metadata +++ b/experimental/material_3_demo/.metadata @@ -4,8 +4,8 @@ # This file should be version controlled. version: - revision: 7e2d09f29b2f416b63fd6c4544a40d3aaa1ec423 - channel: master + revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + channel: beta project_type: app @@ -13,23 +13,26 @@ project_type: app migration: platforms: - platform: root - create_revision: 7e2d09f29b2f416b63fd6c4544a40d3aaa1ec423 - base_revision: 7e2d09f29b2f416b63fd6c4544a40d3aaa1ec423 + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f - platform: android - create_revision: 7e2d09f29b2f416b63fd6c4544a40d3aaa1ec423 - base_revision: 7e2d09f29b2f416b63fd6c4544a40d3aaa1ec423 + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f - platform: ios - create_revision: 7e2d09f29b2f416b63fd6c4544a40d3aaa1ec423 - base_revision: 7e2d09f29b2f416b63fd6c4544a40d3aaa1ec423 + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + - platform: linux + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f - platform: macos - create_revision: 7e2d09f29b2f416b63fd6c4544a40d3aaa1ec423 - base_revision: 7e2d09f29b2f416b63fd6c4544a40d3aaa1ec423 + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f - platform: web - create_revision: 7e2d09f29b2f416b63fd6c4544a40d3aaa1ec423 - base_revision: 7e2d09f29b2f416b63fd6c4544a40d3aaa1ec423 + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f - platform: windows - create_revision: 7e2d09f29b2f416b63fd6c4544a40d3aaa1ec423 - base_revision: 7e2d09f29b2f416b63fd6c4544a40d3aaa1ec423 + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f # User provided section diff --git a/experimental/material_3_demo/analysis_options.yaml b/experimental/material_3_demo/analysis_options.yaml index f04c6cf0f..13d6fe105 100644 --- a/experimental/material_3_demo/analysis_options.yaml +++ b/experimental/material_3_demo/analysis_options.yaml @@ -1 +1 @@ -include: ../../analysis_options.yaml +include: package:analysis_defaults/flutter.yaml diff --git a/experimental/material_3_demo/android/app/build.gradle b/experimental/material_3_demo/android/app/build.gradle index b91fc8f0d..70c38f517 100644 --- a/experimental/material_3_demo/android/app/build.gradle +++ b/experimental/material_3_demo/android/app/build.gradle @@ -46,7 +46,7 @@ android { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "com.example.material_3_demo" // You can update the following values to match your application needs. - // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. minSdkVersion flutter.minSdkVersion targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() diff --git a/experimental/material_3_demo/android/app/src/main/AndroidManifest.xml b/experimental/material_3_demo/android/app/src/main/AndroidManifest.xml index 563cffa9e..a863694d1 100644 --- a/experimental/material_3_demo/android/app/src/main/AndroidManifest.xml +++ b/experimental/material_3_demo/android/app/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ - diff --git a/experimental/material_3_demo/android/build.gradle b/experimental/material_3_demo/android/build.gradle index 4256f9173..e50c3a02b 100644 --- a/experimental/material_3_demo/android/build.gradle +++ b/experimental/material_3_demo/android/build.gradle @@ -1,12 +1,12 @@ buildscript { - ext.kotlin_version = '1.6.10' + ext.kotlin_version = '1.7.10' repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:4.1.0' + classpath 'com.android.tools.build:gradle:7.3.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/experimental/material_3_demo/android/gradle/wrapper/gradle-wrapper.properties b/experimental/material_3_demo/android/gradle/wrapper/gradle-wrapper.properties index bc6a58afd..3c472b99c 100644 --- a/experimental/material_3_demo/android/gradle/wrapper/gradle-wrapper.properties +++ b/experimental/material_3_demo/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Fri Jun 23 08:50:38 CEST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip diff --git a/experimental/material_3_demo/integration_test/integration_test.dart b/experimental/material_3_demo/integration_test/integration_test.dart new file mode 100644 index 000000000..a8d59c4e6 --- /dev/null +++ b/experimental/material_3_demo/integration_test/integration_test.dart @@ -0,0 +1,15 @@ +// Copyright 2021 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter_test/flutter_test.dart'; +import 'package:integration_test/integration_test.dart'; +import 'package:material_3_demo/main.dart' as app; + +void main() { + IntegrationTestWidgetsFlutterBinding.ensureInitialized(); + + testWidgets('verify app can run', (tester) async { + app.main(); + }); +} diff --git a/experimental/material_3_demo/ios/Podfile b/experimental/material_3_demo/ios/Podfile index 88359b225..fdcc671eb 100644 --- a/experimental/material_3_demo/ios/Podfile +++ b/experimental/material_3_demo/ios/Podfile @@ -32,6 +32,9 @@ target 'Runner' do use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end end post_install do |installer| diff --git a/experimental/material_3_demo/ios/Runner.xcodeproj/project.pbxproj b/experimental/material_3_demo/ios/Runner.xcodeproj/project.pbxproj index e5e32fd39..85f86f725 100644 --- a/experimental/material_3_demo/ios/Runner.xcodeproj/project.pbxproj +++ b/experimental/material_3_demo/ios/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 50; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -13,8 +13,19 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXCopyFilesBuildPhase section */ 9705A1C41CF9048500538489 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; @@ -42,6 +53,8 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -66,12 +79,21 @@ name = Flutter; sourceTree = ""; }; + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; 97C146E51CF9000F007C117D = { isa = PBXGroup; children = ( 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, ); sourceTree = ""; }; @@ -79,6 +101,7 @@ isa = PBXGroup; children = ( 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, ); name = Products; sourceTree = ""; @@ -101,6 +124,24 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C807D294A63A400263BE5 /* Sources */, + 331C807E294A63A400263BE5 /* Frameworks */, + 331C807F294A63A400263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; 97C146ED1CF9000F007C117D /* Runner */ = { isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; @@ -130,6 +171,10 @@ LastUpgradeCheck = 1300; ORGANIZATIONNAME = ""; TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; 97C146ED1CF9000F007C117D = { CreatedOnToolsVersion = 7.3.1; LastSwiftMigration = 1100; @@ -150,11 +195,19 @@ projectRoot = ""; targets = ( 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EC1CF9000F007C117D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -171,10 +224,12 @@ /* Begin PBXShellScriptBuildPhase section */ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); name = "Thin Binary"; outputPaths = ( @@ -185,6 +240,7 @@ }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -200,6 +256,14 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EA1CF9000F007C117D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -211,6 +275,14 @@ }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin PBXVariantGroup section */ 97C146FA1CF9000F007C117D /* Main.storyboard */ = { isa = PBXVariantGroup; @@ -288,6 +360,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = TC87DMJLQP; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -302,6 +375,56 @@ }; name = Profile; }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AE0B7B92F70575B8D7E0D07E /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.material3Demo.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 89B67EB44CE7B6631473024E /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.material3Demo.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 640959BDD8F10B91D80A66BE /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.material3Demo.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; 97C147031CF9000F007C117D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -416,6 +539,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = TC87DMJLQP; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -438,6 +562,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = TC87DMJLQP; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -455,6 +580,16 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/experimental/material_3_demo/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/experimental/material_3_demo/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index c87d15a33..e42adcb34 100644 --- a/experimental/material_3_demo/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/experimental/material_3_demo/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -37,6 +37,17 @@ + + + + CADisableMinimumFrameDurationOnPhone + UIApplicationSupportsIndirectInputEvents + diff --git a/experimental/material_3_demo/ios/RunnerTests/RunnerTests.swift b/experimental/material_3_demo/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 000000000..86a7c3b1b --- /dev/null +++ b/experimental/material_3_demo/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/experimental/material_3_demo/lib/component_screen.dart b/experimental/material_3_demo/lib/component_screen.dart index ff3c8bd01..f3456df8d 100644 --- a/experimental/material_3_demo/lib/component_screen.dart +++ b/experimental/material_3_demo/lib/component_screen.dart @@ -3,6 +3,7 @@ // found in the LICENSE file. import 'package:flutter/material.dart'; +import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; const rowDivider = SizedBox(width: 20); @@ -26,25 +27,46 @@ class FirstComponentList extends StatelessWidget { @override Widget build(BuildContext context) { - return ListView( - padding: showSecondList - ? const EdgeInsetsDirectional.only(end: smallSpacing) - : EdgeInsets.zero, - children: [ - const Actions(), + List children = [ + const Actions(), + colDivider, + const Communication(), + colDivider, + const Containment(), + if (!showSecondList) ...[ colDivider, - const Communication(), + Navigation(scaffoldKey: scaffoldKey), colDivider, - const Containment(), - if (!showSecondList) ...[ - colDivider, - Navigation(scaffoldKey: scaffoldKey), - colDivider, - const Selection(), - colDivider, - const TextInputs() - ], + const Selection(), + colDivider, + const TextInputs() ], + ]; + List heights = List.filled(children.length, null); + + // Fully traverse this list before moving on. + return FocusTraversalGroup( + child: CustomScrollView( + slivers: [ + SliverPadding( + padding: showSecondList + ? const EdgeInsetsDirectional.only(end: smallSpacing) + : EdgeInsets.zero, + sliver: SliverList( + delegate: BuildSlivers( + heights: heights, + builder: (context, index) { + return _CacheHeight( + heights: heights, + index: index, + child: children[index], + ); + }, + ), + ), + ), + ], + ), ); } } @@ -59,19 +81,128 @@ class SecondComponentList extends StatelessWidget { @override Widget build(BuildContext context) { - return ListView( - padding: const EdgeInsetsDirectional.only(end: smallSpacing), - children: [ - Navigation(scaffoldKey: scaffoldKey), - colDivider, - const Selection(), - colDivider, - const TextInputs(), - ], + List children = [ + Navigation(scaffoldKey: scaffoldKey), + colDivider, + const Selection(), + colDivider, + const TextInputs(), + ]; + List heights = List.filled(children.length, null); + + // Fully traverse this list before moving on. + return FocusTraversalGroup( + child: CustomScrollView( + slivers: [ + SliverPadding( + padding: const EdgeInsetsDirectional.only(end: smallSpacing), + sliver: SliverList( + delegate: BuildSlivers( + heights: heights, + builder: (context, index) { + return _CacheHeight( + heights: heights, + index: index, + child: children[index], + ); + }, + ), + ), + ), + ], + ), ); } } +// If the content of a CustomScrollView does not change, then it's +// safe to cache the heights of each item as they are laid out. The +// sum of the cached heights are returned by an override of +// `SliverChildDelegate.estimateMaxScrollOffset`. The default version +// of this method bases its estimate on the average height of the +// visible items. The override ensures that the scrollbar thumb's +// size, which depends on the max scroll offset, will shrink smoothly +// as the contents of the list are exposed for the first time, and +// then remain fixed. +class _CacheHeight extends SingleChildRenderObjectWidget { + const _CacheHeight({ + super.child, + required this.heights, + required this.index, + }); + + final List heights; + final int index; + + @override + RenderObject createRenderObject(BuildContext context) { + return _RenderCacheHeight( + heights: heights, + index: index, + ); + } + + @override + void updateRenderObject( + BuildContext context, _RenderCacheHeight renderObject) { + renderObject + ..heights = heights + ..index = index; + } +} + +class _RenderCacheHeight extends RenderProxyBox { + _RenderCacheHeight({ + required List heights, + required int index, + }) : _heights = heights, + _index = index, + super(); + + List _heights; + List get heights => _heights; + set heights(List value) { + if (value == _heights) { + return; + } + _heights = value; + markNeedsLayout(); + } + + int _index; + int get index => _index; + set index(int value) { + if (value == index) { + return; + } + _index = value; + markNeedsLayout(); + } + + @override + void performLayout() { + super.performLayout(); + heights[index] = size.height; + } +} + +// The heights information is used to override the `estimateMaxScrollOffset` and +// provide a more accurate estimation for the max scroll offset. +class BuildSlivers extends SliverChildBuilderDelegate { + BuildSlivers({ + required NullableIndexedWidgetBuilder builder, + required this.heights, + }) : super(builder, childCount: heights.length); + + final List heights; + + @override + double? estimateMaxScrollOffset(int firstIndex, int lastIndex, + double leadingScrollOffset, double trailingScrollOffset) { + return heights.reduce((sum, height) => (sum ?? 0) + (height ?? 0))!; + } +} + class Actions extends StatelessWidget { const Actions({super.key}); @@ -134,8 +265,8 @@ class Navigation extends StatelessWidget { ), NavigationDrawers(scaffoldKey: scaffoldKey), const NavigationRails(), - // TODO: Add Search https://github.com/flutter/flutter/issues/117483 const Tabs(), + const SearchAnchors(), const TopAppBars(), ]); } @@ -149,12 +280,12 @@ class Selection extends StatelessWidget { return const ComponentGroupDecoration(label: 'Selection', children: [ Checkboxes(), Chips(), - // TODO: Add Date pickers https://github.com/flutter/flutter/issues/101481 + DatePickers(), Menus(), Radios(), Sliders(), Switches(), - // TODO: Add Time pickers https://github.com/flutter/flutter/issues/101480 + TimePickers(), ]); } } @@ -181,7 +312,7 @@ class Buttons extends StatefulWidget { class _ButtonsState extends State { @override Widget build(BuildContext context) { - return ComponentDecoration( + return const ComponentDecoration( label: 'Common buttons', tooltipMessage: 'Use ElevatedButton, FilledButton, FilledButton.tonal, OutlinedButton, or TextButton', @@ -189,7 +320,7 @@ class _ButtonsState extends State { scrollDirection: Axis.horizontal, child: Row( mainAxisAlignment: MainAxisAlignment.spaceAround, - children: const [ + children: [ ButtonsWithoutIcon(isDisabled: false), ButtonsWithIcon(), ButtonsWithoutIcon(isDisabled: true), @@ -602,11 +733,11 @@ class _DialogsState extends State { 'A dialog is a type of modal window that appears in front of app content to provide critical information, or prompt for a decision to be made.'), actions: [ TextButton( - child: const Text('Okay'), + child: const Text('Dismiss'), onPressed: () => Navigator.of(context).pop(), ), FilledButton( - child: const Text('Dismiss'), + child: const Text('Okay'), onPressed: () => Navigator.of(context).pop(), ), ], @@ -675,11 +806,11 @@ class Dividers extends StatelessWidget { @override Widget build(BuildContext context) { - return ComponentDecoration( + return const ComponentDecoration( label: 'Dividers', tooltipMessage: 'Use Divider or VerticalDivider', child: Column( - children: const [ + children: [ Divider(key: Key('divider')), ], ), @@ -692,11 +823,11 @@ class Switches extends StatelessWidget { @override Widget build(BuildContext context) { - return ComponentDecoration( + return const ComponentDecoration( label: 'Switches', tooltipMessage: 'Use SwitchListTile or Switch', child: Column( - children: const [ + children: [ SwitchRow(isEnabled: true), SwitchRow(isEnabled: false), ], @@ -1011,13 +1142,13 @@ class NavigationBars extends StatefulWidget { this.onSelectItem, required this.selectedIndex, required this.isExampleBar, - this.isBadgeExample, + this.isBadgeExample = false, }); final void Function(int)? onSelectItem; final int selectedIndex; final bool isExampleBar; - final bool? isBadgeExample; + final bool isBadgeExample; @override State createState() => _NavigationBarsState(); @@ -1042,23 +1173,26 @@ class _NavigationBarsState extends State { @override Widget build(BuildContext context) { - bool isBadgeExample = widget.isBadgeExample ?? false; - Widget navigationBar = NavigationBar( - selectedIndex: selectedIndex, - onDestinationSelected: (index) { - setState(() { - selectedIndex = index; - }); - if (!widget.isExampleBar) widget.onSelectItem!(index); - }, - destinations: widget.isExampleBar && isBadgeExample - ? barWithBadgeDestinations - : widget.isExampleBar - ? exampleBarDestinations - : appBarDestinations, + // App NavigationBar should get first focus. + Widget navigationBar = Focus( + autofocus: !(widget.isExampleBar || widget.isBadgeExample), + child: NavigationBar( + selectedIndex: selectedIndex, + onDestinationSelected: (index) { + setState(() { + selectedIndex = index; + }); + if (!widget.isExampleBar) widget.onSelectItem!(index); + }, + destinations: widget.isExampleBar && widget.isBadgeExample + ? barWithBadgeDestinations + : widget.isExampleBar + ? exampleBarDestinations + : appBarDestinations, + ), ); - if (widget.isExampleBar && isBadgeExample) { + if (widget.isExampleBar && widget.isBadgeExample) { navigationBar = ComponentDecoration( label: 'Badges', tooltipMessage: 'Use Badge or Badge.count', @@ -1082,73 +1216,105 @@ class IconToggleButtons extends StatefulWidget { } class _IconToggleButtonsState extends State { + bool standardSelected = false; + bool filledSelected = false; + bool tonalSelected = false; + bool outlinedSelected = false; + @override Widget build(BuildContext context) { return ComponentDecoration( label: 'Icon buttons', - tooltipMessage: 'Use IconButton', + tooltipMessage: + 'Use IconButton, IconButton.filled, IconButton.filledTonal, and IconButton.outlined', child: Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ Column( // Standard IconButton - children: const [ - IconToggleButton( - isEnabled: true, - tooltip: 'Standard', + children: [ + IconButton( + isSelected: standardSelected, + icon: const Icon(Icons.settings_outlined), + selectedIcon: const Icon(Icons.settings), + onPressed: () { + setState(() { + standardSelected = !standardSelected; + }); + }, ), colDivider, - IconToggleButton( - isEnabled: false, - tooltip: 'Standard (disabled)', + IconButton( + isSelected: standardSelected, + icon: const Icon(Icons.settings_outlined), + selectedIcon: const Icon(Icons.settings), + onPressed: null, ), ], ), Column( - children: const [ + children: [ // Filled IconButton - IconToggleButton( - isEnabled: true, - tooltip: 'Filled', - getDefaultStyle: enabledFilledButtonStyle, + IconButton.filled( + isSelected: filledSelected, + icon: const Icon(Icons.settings_outlined), + selectedIcon: const Icon(Icons.settings), + onPressed: () { + setState(() { + filledSelected = !filledSelected; + }); + }, ), colDivider, - IconToggleButton( - isEnabled: false, - tooltip: 'Filled (disabled)', - getDefaultStyle: disabledFilledButtonStyle, + IconButton.filled( + isSelected: filledSelected, + icon: const Icon(Icons.settings_outlined), + selectedIcon: const Icon(Icons.settings), + onPressed: null, ), ], ), Column( - children: const [ + children: [ // Filled Tonal IconButton - IconToggleButton( - isEnabled: true, - tooltip: 'Filled tonal', - getDefaultStyle: enabledFilledTonalButtonStyle, + IconButton.filledTonal( + isSelected: tonalSelected, + icon: const Icon(Icons.settings_outlined), + selectedIcon: const Icon(Icons.settings), + onPressed: () { + setState(() { + tonalSelected = !tonalSelected; + }); + }, ), colDivider, - IconToggleButton( - isEnabled: false, - tooltip: 'Filled tonal (disabled)', - getDefaultStyle: disabledFilledTonalButtonStyle, + IconButton.filledTonal( + isSelected: tonalSelected, + icon: const Icon(Icons.settings_outlined), + selectedIcon: const Icon(Icons.settings), + onPressed: null, ), ], ), Column( - children: const [ + children: [ // Outlined IconButton - IconToggleButton( - isEnabled: true, - tooltip: 'Outlined', - getDefaultStyle: enabledOutlinedButtonStyle, + IconButton.outlined( + isSelected: outlinedSelected, + icon: const Icon(Icons.settings_outlined), + selectedIcon: const Icon(Icons.settings), + onPressed: () { + setState(() { + outlinedSelected = !outlinedSelected; + }); + }, ), colDivider, - IconToggleButton( - isEnabled: false, - tooltip: 'Outlined (disabled)', - getDefaultStyle: disabledOutlinedButtonStyle, + IconButton.outlined( + isSelected: outlinedSelected, + icon: const Icon(Icons.settings_outlined), + selectedIcon: const Icon(Icons.settings), + onPressed: null, ), ], ), @@ -1158,134 +1324,6 @@ class _IconToggleButtonsState extends State { } } -class IconToggleButton extends StatefulWidget { - const IconToggleButton({ - required this.isEnabled, - required this.tooltip, - this.getDefaultStyle, - super.key, - }); - - final bool isEnabled; - final String tooltip; - final ButtonStyle? Function(bool, ColorScheme)? getDefaultStyle; - - @override - State createState() => _IconToggleButtonState(); -} - -class _IconToggleButtonState extends State { - bool selected = false; - - @override - Widget build(BuildContext context) { - final ColorScheme colors = Theme.of(context).colorScheme; - final VoidCallback? onPressed = widget.isEnabled - ? () { - setState(() { - selected = !selected; - }); - } - : null; - ButtonStyle? style = widget.getDefaultStyle?.call(selected, colors); - - return IconButton( - visualDensity: VisualDensity.standard, - isSelected: selected, - tooltip: widget.tooltip, - icon: const Icon(Icons.settings_outlined), - selectedIcon: const Icon(Icons.settings), - onPressed: onPressed, - style: style, - ); - } -} - -ButtonStyle enabledFilledButtonStyle(bool selected, ColorScheme colors) { - return IconButton.styleFrom( - foregroundColor: selected ? colors.onPrimary : colors.primary, - backgroundColor: selected ? colors.primary : colors.surfaceVariant, - disabledForegroundColor: colors.onSurface.withOpacity(0.38), - disabledBackgroundColor: colors.onSurface.withOpacity(0.12), - hoverColor: selected - ? colors.onPrimary.withOpacity(0.08) - : colors.primary.withOpacity(0.08), - focusColor: selected - ? colors.onPrimary.withOpacity(0.12) - : colors.primary.withOpacity(0.12), - highlightColor: selected - ? colors.onPrimary.withOpacity(0.12) - : colors.primary.withOpacity(0.12), - ); -} - -ButtonStyle disabledFilledButtonStyle(bool selected, ColorScheme colors) { - return IconButton.styleFrom( - disabledForegroundColor: colors.onSurface.withOpacity(0.38), - disabledBackgroundColor: colors.onSurface.withOpacity(0.12), - ); -} - -ButtonStyle enabledFilledTonalButtonStyle(bool selected, ColorScheme colors) { - return IconButton.styleFrom( - foregroundColor: - selected ? colors.onSecondaryContainer : colors.onSurfaceVariant, - backgroundColor: - selected ? colors.secondaryContainer : colors.surfaceVariant, - hoverColor: selected - ? colors.onSecondaryContainer.withOpacity(0.08) - : colors.onSurfaceVariant.withOpacity(0.08), - focusColor: selected - ? colors.onSecondaryContainer.withOpacity(0.12) - : colors.onSurfaceVariant.withOpacity(0.12), - highlightColor: selected - ? colors.onSecondaryContainer.withOpacity(0.12) - : colors.onSurfaceVariant.withOpacity(0.12), - ); -} - -ButtonStyle disabledFilledTonalButtonStyle(bool selected, ColorScheme colors) { - return IconButton.styleFrom( - disabledForegroundColor: colors.onSurface.withOpacity(0.38), - disabledBackgroundColor: colors.onSurface.withOpacity(0.12), - ); -} - -ButtonStyle enabledOutlinedButtonStyle(bool selected, ColorScheme colors) { - return IconButton.styleFrom( - backgroundColor: selected ? colors.inverseSurface : null, - hoverColor: selected - ? colors.onInverseSurface.withOpacity(0.08) - : colors.onSurfaceVariant.withOpacity(0.08), - focusColor: selected - ? colors.onInverseSurface.withOpacity(0.12) - : colors.onSurfaceVariant.withOpacity(0.12), - highlightColor: selected - ? colors.onInverseSurface.withOpacity(0.12) - : colors.onSurface.withOpacity(0.12), - side: BorderSide(color: colors.outline), - ).copyWith( - foregroundColor: MaterialStateProperty.resolveWith((states) { - if (states.contains(MaterialState.selected)) { - return colors.onInverseSurface; - } - if (states.contains(MaterialState.pressed)) { - return colors.onSurface; - } - return null; - }), - ); -} - -ButtonStyle disabledOutlinedButtonStyle(bool selected, ColorScheme colors) { - return IconButton.styleFrom( - disabledForegroundColor: colors.onSurface.withOpacity(0.38), - disabledBackgroundColor: - selected ? colors.onSurface.withOpacity(0.12) : null, - side: selected ? null : BorderSide(color: colors.outline.withOpacity(0.12)), - ); -} - class Chips extends StatefulWidget { const Chips({super.key}); @@ -1362,16 +1400,108 @@ class _ChipsState extends State { } } +class DatePickers extends StatefulWidget { + const DatePickers({super.key}); + + @override + State createState() => _DatePickersState(); +} + +class _DatePickersState extends State { + DateTime? selectedDate; + final DateTime _firstDate = DateTime(DateTime.now().year - 2); + final DateTime _lastDate = DateTime(DateTime.now().year + 1); + + @override + Widget build(BuildContext context) { + return ComponentDecoration( + label: 'Date picker', + tooltipMessage: 'Use showDatePicker', + child: TextButton( + onPressed: () async { + DateTime? date = await showDatePicker( + context: context, + initialDate: selectedDate ?? DateTime.now(), + firstDate: _firstDate, + lastDate: _lastDate, + ); + setState(() { + selectedDate = date; + if (selectedDate != null) { + ScaffoldMessenger.of(context).showSnackBar(SnackBar( + content: Text( + 'Selected Date: ${selectedDate!.day}/${selectedDate!.month}/${selectedDate!.year}'), + )); + } + }); + }, + child: const Text( + 'Show date picker', + style: TextStyle(fontWeight: FontWeight.bold), + ), + ), + ); + } +} + +class TimePickers extends StatefulWidget { + const TimePickers({super.key}); + + @override + State createState() => _TimePickersState(); +} + +class _TimePickersState extends State { + TimeOfDay? selectedTime; + + @override + Widget build(BuildContext context) { + return ComponentDecoration( + label: 'Time picker', + tooltipMessage: 'Use showTimePicker', + child: TextButton( + onPressed: () async { + final TimeOfDay? time = await showTimePicker( + context: context, + initialTime: selectedTime ?? TimeOfDay.now(), + builder: (context, child) { + return MediaQuery( + data: MediaQuery.of(context).copyWith( + alwaysUse24HourFormat: true, + ), + child: child!, + ); + }, + ); + setState(() { + selectedTime = time; + if (selectedTime != null) { + ScaffoldMessenger.of(context).showSnackBar(SnackBar( + content: + Text('Selected time: ${selectedTime!.format(context)}'), + )); + } + }); + }, + child: const Text( + 'Show time picker', + style: TextStyle(fontWeight: FontWeight.bold), + ), + ), + ); + } +} + class SegmentedButtons extends StatelessWidget { const SegmentedButtons({super.key}); @override Widget build(BuildContext context) { - return ComponentDecoration( + return const ComponentDecoration( label: 'Segmented buttons', tooltipMessage: 'Use SegmentedButton', child: Column( - children: const [ + children: [ SingleChoice(), colDivider, MultipleChoice(), @@ -1552,6 +1682,7 @@ class _BottomSheetSectionState extends State { ), onPressed: () { showModalBottomSheet( + showDragHandle: true, context: context, // TODO: Remove when this is in the framework https://github.com/flutter/flutter/issues/118619 constraints: const BoxConstraints(maxWidth: 640), @@ -2066,9 +2197,9 @@ class _MenusState extends State { tooltipMessage: 'Use MenuAnchor or DropdownMenu', child: Column( children: [ - Row( + const Row( mainAxisAlignment: MainAxisAlignment.center, - children: const [ + children: [ ButtonAnchorExample(), rowDivider, IconButtonAnchorExample(), @@ -2188,7 +2319,102 @@ class _SlidersState extends State { } } -class ComponentDecoration extends StatelessWidget { +class SearchAnchors extends StatefulWidget { + const SearchAnchors({super.key}); + + @override + State createState() => _SearchAnchorsState(); +} + +class _SearchAnchorsState extends State { + String? selectedColor; + List searchHistory = []; + + Iterable getHistoryList(SearchController controller) { + return searchHistory.map((color) => ListTile( + leading: const Icon(Icons.history), + title: Text(color.label), + trailing: IconButton( + icon: const Icon(Icons.call_missed), + onPressed: () { + controller.text = color.label; + controller.selection = + TextSelection.collapsed(offset: controller.text.length); + }), + onTap: () { + controller.closeView(color.label); + handleSelection(color); + }, + )); + } + + Iterable getSuggestions(SearchController controller) { + final String input = controller.value.text; + return ColorItem.values + .where((color) => color.label.contains(input)) + .map((filteredColor) => ListTile( + leading: CircleAvatar(backgroundColor: filteredColor.color), + title: Text(filteredColor.label), + trailing: IconButton( + icon: const Icon(Icons.call_missed), + onPressed: () { + controller.text = filteredColor.label; + controller.selection = + TextSelection.collapsed(offset: controller.text.length); + }), + onTap: () { + controller.closeView(filteredColor.label); + handleSelection(filteredColor); + }, + )); + } + + void handleSelection(ColorItem color) { + setState(() { + selectedColor = color.label; + if (searchHistory.length >= 5) { + searchHistory.removeLast(); + } + searchHistory.insert(0, color); + }); + } + + @override + Widget build(BuildContext context) { + return ComponentDecoration( + label: 'Search', + tooltipMessage: 'Use SearchAnchor or SearchAnchor.bar', + child: Column( + children: [ + SearchAnchor.bar( + barHintText: 'Search colors', + suggestionsBuilder: (context, controller) { + if (controller.text.isEmpty) { + if (searchHistory.isNotEmpty) { + return getHistoryList(controller); + } + return [ + const Center( + child: Text('No search history.', + style: TextStyle(color: Colors.grey)), + ) + ]; + } + return getSuggestions(controller); + }, + ), + const SizedBox(height: 20), + if (selectedColor == null) + const Text('Select a color') + else + Text('Last selected color is $selectedColor') + ], + ), + ); + } +} + +class ComponentDecoration extends StatefulWidget { const ComponentDecoration({ super.key, required this.label, @@ -2200,6 +2426,13 @@ class ComponentDecoration extends StatelessWidget { final Widget child; final String? tooltipMessage; + @override + State createState() => _ComponentDecorationState(); +} + +class _ComponentDecorationState extends State { + final focusNode = FocusNode(); + @override Widget build(BuildContext context) { return RepaintBoundary( @@ -2210,9 +2443,10 @@ class ComponentDecoration extends StatelessWidget { Row( mainAxisAlignment: MainAxisAlignment.center, children: [ - Text(label, style: Theme.of(context).textTheme.titleSmall), + Text(widget.label, + style: Theme.of(context).textTheme.titleSmall), Tooltip( - message: tooltipMessage, + message: widget.tooltipMessage, child: const Padding( padding: EdgeInsets.symmetric(horizontal: 5.0), child: Icon(Icons.info_outline, size: 16)), @@ -2222,18 +2456,32 @@ class ComponentDecoration extends StatelessWidget { ConstrainedBox( constraints: const BoxConstraints.tightFor(width: widthConstraint), - child: Card( - elevation: 0, - shape: RoundedRectangleBorder( - side: BorderSide( - color: Theme.of(context).colorScheme.outlineVariant, + // Tapping within the a component card should request focus + // for that component's children. + child: Focus( + focusNode: focusNode, + canRequestFocus: true, + child: GestureDetector( + onTapDown: (_) { + focusNode.requestFocus(); + }, + behavior: HitTestBehavior.opaque, + child: Card( + elevation: 0, + shape: RoundedRectangleBorder( + side: BorderSide( + color: Theme.of(context).colorScheme.outlineVariant, + ), + borderRadius: const BorderRadius.all(Radius.circular(12)), + ), + child: Padding( + padding: const EdgeInsets.symmetric( + horizontal: 5.0, vertical: 20.0), + child: Center( + child: widget.child, + ), + ), ), - borderRadius: const BorderRadius.all(Radius.circular(12)), - ), - child: Padding( - padding: const EdgeInsets.symmetric( - horizontal: 5.0, vertical: 20.0), - child: Center(child: child), ), ), ), @@ -2253,22 +2501,48 @@ class ComponentGroupDecoration extends StatelessWidget { @override Widget build(BuildContext context) { - return Card( - margin: EdgeInsets.zero, - elevation: 0, - color: Theme.of(context).colorScheme.surfaceVariant.withOpacity(0.3), - child: Padding( - padding: const EdgeInsets.symmetric(vertical: 20.0), - child: Center( - child: Column( - children: [ - Text(label, style: Theme.of(context).textTheme.titleLarge), - colDivider, - ...children - ], + // Fully traverse this component group before moving on + return FocusTraversalGroup( + child: Card( + margin: EdgeInsets.zero, + elevation: 0, + color: Theme.of(context).colorScheme.surfaceVariant.withOpacity(0.3), + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 20.0), + child: Center( + child: Column( + children: [ + Text(label, style: Theme.of(context).textTheme.titleLarge), + colDivider, + ...children + ], + ), ), ), ), ); } } + +enum ColorItem { + red('red', Colors.red), + orange('orange', Colors.orange), + yellow('yellow', Colors.yellow), + green('green', Colors.green), + blue('blue', Colors.blue), + indigo('indigo', Colors.indigo), + violet('violet', Color(0xFF8F00FF)), + purple('purple', Colors.purple), + pink('pink', Colors.pink), + silver('silver', Color(0xFF808080)), + gold('gold', Color(0xFFFFD700)), + beige('beige', Color(0xFFF5F5DC)), + brown('brown', Colors.brown), + grey('grey', Colors.grey), + black('black', Colors.black), + white('white', Colors.white); + + const ColorItem(this.label, this.color); + final String label; + final Color color; +} diff --git a/experimental/material_3_demo/lib/constants.dart b/experimental/material_3_demo/lib/constants.dart new file mode 100644 index 000000000..41b97ebd2 --- /dev/null +++ b/experimental/material_3_demo/lib/constants.dart @@ -0,0 +1,66 @@ +// Copyright 2021 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter/material.dart'; + +// NavigationRail shows if the screen width is greater or equal to +// narrowScreenWidthThreshold; otherwise, NavigationBar is used for navigation. +const double narrowScreenWidthThreshold = 450; + +const double mediumWidthBreakpoint = 1000; +const double largeWidthBreakpoint = 1500; + +const double transitionLength = 500; + +// Whether the user has chosen a theme color via a direct [ColorSeed] selection, +// or an image [ColorImageProvider]. +enum ColorSelectionMethod { + colorSeed, + image, +} + +enum ColorSeed { + baseColor('M3 Baseline', Color(0xff6750a4)), + indigo('Indigo', Colors.indigo), + blue('Blue', Colors.blue), + teal('Teal', Colors.teal), + green('Green', Colors.green), + yellow('Yellow', Colors.yellow), + orange('Orange', Colors.orange), + deepOrange('Deep Orange', Colors.deepOrange), + pink('Pink', Colors.pink); + + const ColorSeed(this.label, this.color); + final String label; + final Color color; +} + +enum ColorImageProvider { + leaves('Leaves', + 'https://flutter.github.io/assets-for-api-docs/assets/material/content_based_color_scheme_1.png'), + peonies('Peonies', + 'https://flutter.github.io/assets-for-api-docs/assets/material/content_based_color_scheme_2.png'), + bubbles('Bubbles', + 'https://flutter.github.io/assets-for-api-docs/assets/material/content_based_color_scheme_3.png'), + seaweed('Seaweed', + 'https://flutter.github.io/assets-for-api-docs/assets/material/content_based_color_scheme_4.png'), + seagrapes('Sea Grapes', + 'https://flutter.github.io/assets-for-api-docs/assets/material/content_based_color_scheme_5.png'), + petals('Petals', + 'https://flutter.github.io/assets-for-api-docs/assets/material/content_based_color_scheme_6.png'); + + const ColorImageProvider(this.label, this.url); + final String label; + final String url; +} + +enum ScreenSelected { + component(0), + color(1), + typography(2), + elevation(3); + + const ScreenSelected(this.value); + final int value; +} diff --git a/experimental/material_3_demo/lib/elevation_screen.dart b/experimental/material_3_demo/lib/elevation_screen.dart index 0f3d6299e..6522e9b8e 100644 --- a/experimental/material_3_demo/lib/elevation_screen.dart +++ b/experimental/material_3_demo/lib/elevation_screen.dart @@ -23,7 +23,10 @@ class ElevationScreen extends StatelessWidget { ), ), ), - ElevationGrid(surfaceTintColor: surfaceTint), + ElevationGrid( + surfaceTintColor: surfaceTint, + shadowColor: Colors.transparent, + ), SliverList( delegate: SliverChildListDelegate([ const SizedBox(height: 10), @@ -146,7 +149,7 @@ class _ElevationCardState extends State { style: Theme.of(context).textTheme.labelMedium, ), Text( - '${widget.info.level.toInt()} dp', + '${widget.info.elevation.toInt()} dp', style: Theme.of(context).textTheme.labelMedium, ), if (widget.surfaceTint != null) diff --git a/experimental/material_3_demo/lib/home.dart b/experimental/material_3_demo/lib/home.dart new file mode 100644 index 000000000..f31532126 --- /dev/null +++ b/experimental/material_3_demo/lib/home.dart @@ -0,0 +1,872 @@ +// Copyright 2021 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter/material.dart'; + +import 'color_palettes_screen.dart'; +import 'component_screen.dart'; +import 'constants.dart'; +import 'elevation_screen.dart'; +import 'typography_screen.dart'; + +class Home extends StatefulWidget { + const Home({ + super.key, + required this.useLightMode, + required this.useMaterial3, + required this.colorSelected, + required this.handleBrightnessChange, + required this.handleMaterialVersionChange, + required this.handleColorSelect, + required this.handleImageSelect, + required this.colorSelectionMethod, + required this.imageSelected, + }); + + final bool useLightMode; + final bool useMaterial3; + final ColorSeed colorSelected; + final ColorImageProvider imageSelected; + final ColorSelectionMethod colorSelectionMethod; + + final void Function(bool useLightMode) handleBrightnessChange; + final void Function() handleMaterialVersionChange; + final void Function(int value) handleColorSelect; + final void Function(int value) handleImageSelect; + + @override + State createState() => _HomeState(); +} + +class _HomeState extends State with SingleTickerProviderStateMixin { + final GlobalKey scaffoldKey = GlobalKey(); + late final AnimationController controller; + late final CurvedAnimation railAnimation; + bool controllerInitialized = false; + bool showMediumSizeLayout = false; + bool showLargeSizeLayout = false; + + int screenIndex = ScreenSelected.component.value; + + @override + initState() { + super.initState(); + controller = AnimationController( + duration: Duration(milliseconds: transitionLength.toInt() * 2), + value: 0, + vsync: this, + ); + railAnimation = CurvedAnimation( + parent: controller, + curve: const Interval(0.5, 1.0), + ); + } + + @override + void dispose() { + controller.dispose(); + super.dispose(); + } + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + + final double width = MediaQuery.of(context).size.width; + final AnimationStatus status = controller.status; + if (width > mediumWidthBreakpoint) { + if (width > largeWidthBreakpoint) { + showMediumSizeLayout = false; + showLargeSizeLayout = true; + } else { + showMediumSizeLayout = true; + showLargeSizeLayout = false; + } + if (status != AnimationStatus.forward && + status != AnimationStatus.completed) { + controller.forward(); + } + } else { + showMediumSizeLayout = false; + showLargeSizeLayout = false; + if (status != AnimationStatus.reverse && + status != AnimationStatus.dismissed) { + controller.reverse(); + } + } + if (!controllerInitialized) { + controllerInitialized = true; + controller.value = width > mediumWidthBreakpoint ? 1 : 0; + } + } + + void handleScreenChanged(int screenSelected) { + setState(() { + screenIndex = screenSelected; + }); + } + + Widget createScreenFor( + ScreenSelected screenSelected, bool showNavBarExample) { + switch (screenSelected) { + case ScreenSelected.component: + return Expanded( + child: OneTwoTransition( + animation: railAnimation, + one: FirstComponentList( + showNavBottomBar: showNavBarExample, + scaffoldKey: scaffoldKey, + showSecondList: showMediumSizeLayout || showLargeSizeLayout), + two: SecondComponentList( + scaffoldKey: scaffoldKey, + ), + ), + ); + case ScreenSelected.color: + return const ColorPalettesScreen(); + case ScreenSelected.typography: + return const TypographyScreen(); + case ScreenSelected.elevation: + return const ElevationScreen(); + } + } + + PreferredSizeWidget createAppBar() { + return AppBar( + title: widget.useMaterial3 + ? const Text('Material 3') + : const Text('Material 2'), + actions: !showMediumSizeLayout && !showLargeSizeLayout + ? [ + _BrightnessButton( + handleBrightnessChange: widget.handleBrightnessChange, + ), + _Material3Button( + handleMaterialVersionChange: widget.handleMaterialVersionChange, + ), + _ColorSeedButton( + handleColorSelect: widget.handleColorSelect, + colorSelected: widget.colorSelected, + colorSelectionMethod: widget.colorSelectionMethod, + ), + _ColorImageButton( + handleImageSelect: widget.handleImageSelect, + imageSelected: widget.imageSelected, + colorSelectionMethod: widget.colorSelectionMethod, + ) + ] + : [Container()], + ); + } + + Widget _trailingActions() => Column( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Flexible( + child: _BrightnessButton( + handleBrightnessChange: widget.handleBrightnessChange, + showTooltipBelow: false, + ), + ), + Flexible( + child: _Material3Button( + handleMaterialVersionChange: widget.handleMaterialVersionChange, + showTooltipBelow: false, + ), + ), + Flexible( + child: _ColorSeedButton( + handleColorSelect: widget.handleColorSelect, + colorSelected: widget.colorSelected, + colorSelectionMethod: widget.colorSelectionMethod, + ), + ), + Flexible( + child: _ColorImageButton( + handleImageSelect: widget.handleImageSelect, + imageSelected: widget.imageSelected, + colorSelectionMethod: widget.colorSelectionMethod, + ), + ), + ], + ); + + @override + Widget build(BuildContext context) { + return AnimatedBuilder( + animation: controller, + builder: (context, child) { + return NavigationTransition( + scaffoldKey: scaffoldKey, + animationController: controller, + railAnimation: railAnimation, + appBar: createAppBar(), + body: createScreenFor( + ScreenSelected.values[screenIndex], controller.value == 1), + navigationRail: NavigationRail( + extended: showLargeSizeLayout, + destinations: navRailDestinations, + selectedIndex: screenIndex, + onDestinationSelected: (index) { + setState(() { + screenIndex = index; + handleScreenChanged(screenIndex); + }); + }, + trailing: Expanded( + child: Padding( + padding: const EdgeInsets.only(bottom: 20), + child: showLargeSizeLayout + ? _ExpandedTrailingActions( + useLightMode: widget.useLightMode, + handleBrightnessChange: widget.handleBrightnessChange, + useMaterial3: widget.useMaterial3, + handleMaterialVersionChange: + widget.handleMaterialVersionChange, + handleImageSelect: widget.handleImageSelect, + handleColorSelect: widget.handleColorSelect, + colorSelectionMethod: widget.colorSelectionMethod, + imageSelected: widget.imageSelected, + colorSelected: widget.colorSelected, + ) + : _trailingActions(), + ), + ), + ), + navigationBar: NavigationBars( + onSelectItem: (index) { + setState(() { + screenIndex = index; + handleScreenChanged(screenIndex); + }); + }, + selectedIndex: screenIndex, + isExampleBar: false, + ), + ); + }, + ); + } +} + +class _BrightnessButton extends StatelessWidget { + const _BrightnessButton({ + required this.handleBrightnessChange, + this.showTooltipBelow = true, + }); + + final Function handleBrightnessChange; + final bool showTooltipBelow; + + @override + Widget build(BuildContext context) { + final isBright = Theme.of(context).brightness == Brightness.light; + return Tooltip( + preferBelow: showTooltipBelow, + message: 'Toggle brightness', + child: IconButton( + icon: isBright + ? const Icon(Icons.dark_mode_outlined) + : const Icon(Icons.light_mode_outlined), + onPressed: () => handleBrightnessChange(!isBright), + ), + ); + } +} + +class _Material3Button extends StatelessWidget { + const _Material3Button({ + required this.handleMaterialVersionChange, + this.showTooltipBelow = true, + }); + + final void Function() handleMaterialVersionChange; + final bool showTooltipBelow; + + @override + Widget build(BuildContext context) { + final useMaterial3 = Theme.of(context).useMaterial3; + return Tooltip( + preferBelow: showTooltipBelow, + message: 'Switch to Material ${useMaterial3 ? 2 : 3}', + child: IconButton( + icon: useMaterial3 + ? const Icon(Icons.filter_2) + : const Icon(Icons.filter_3), + onPressed: handleMaterialVersionChange, + ), + ); + } +} + +class _ColorSeedButton extends StatelessWidget { + const _ColorSeedButton({ + required this.handleColorSelect, + required this.colorSelected, + required this.colorSelectionMethod, + }); + + final void Function(int) handleColorSelect; + final ColorSeed colorSelected; + final ColorSelectionMethod colorSelectionMethod; + + @override + Widget build(BuildContext context) { + return PopupMenuButton( + icon: Icon( + Icons.palette_outlined, + color: Theme.of(context).colorScheme.onSurfaceVariant, + ), + tooltip: 'Select a seed color', + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), + itemBuilder: (context) { + return List.generate(ColorSeed.values.length, (index) { + ColorSeed currentColor = ColorSeed.values[index]; + + return PopupMenuItem( + value: index, + enabled: currentColor != colorSelected || + colorSelectionMethod != ColorSelectionMethod.colorSeed, + child: Wrap( + children: [ + Padding( + padding: const EdgeInsets.only(left: 10), + child: Icon( + currentColor == colorSelected && + colorSelectionMethod != ColorSelectionMethod.image + ? Icons.color_lens + : Icons.color_lens_outlined, + color: currentColor.color, + ), + ), + Padding( + padding: const EdgeInsets.only(left: 20), + child: Text(currentColor.label), + ), + ], + ), + ); + }); + }, + onSelected: handleColorSelect, + ); + } +} + +class _ColorImageButton extends StatelessWidget { + const _ColorImageButton({ + required this.handleImageSelect, + required this.imageSelected, + required this.colorSelectionMethod, + }); + + final void Function(int) handleImageSelect; + final ColorImageProvider imageSelected; + final ColorSelectionMethod colorSelectionMethod; + + @override + Widget build(BuildContext context) { + return PopupMenuButton( + icon: Icon( + Icons.image_outlined, + color: Theme.of(context).colorScheme.onSurfaceVariant, + ), + tooltip: 'Select a color extraction image', + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), + itemBuilder: (context) { + return List.generate(ColorImageProvider.values.length, (index) { + ColorImageProvider currentImageProvider = + ColorImageProvider.values[index]; + + return PopupMenuItem( + value: index, + enabled: currentImageProvider != imageSelected || + colorSelectionMethod != ColorSelectionMethod.image, + child: Wrap( + crossAxisAlignment: WrapCrossAlignment.center, + children: [ + Padding( + padding: const EdgeInsets.only(left: 10), + child: ConstrainedBox( + constraints: const BoxConstraints(maxWidth: 48), + child: Padding( + padding: const EdgeInsets.all(4.0), + child: ClipRRect( + borderRadius: BorderRadius.circular(8.0), + child: Image( + image: NetworkImage( + ColorImageProvider.values[index].url), + ), + ), + ), + ), + ), + Padding( + padding: const EdgeInsets.only(left: 20), + child: Text(currentImageProvider.label), + ), + ], + ), + ); + }); + }, + onSelected: handleImageSelect, + ); + } +} + +class _ExpandedTrailingActions extends StatelessWidget { + const _ExpandedTrailingActions({ + required this.useLightMode, + required this.handleBrightnessChange, + required this.useMaterial3, + required this.handleMaterialVersionChange, + required this.handleColorSelect, + required this.handleImageSelect, + required this.imageSelected, + required this.colorSelected, + required this.colorSelectionMethod, + }); + + final void Function(bool) handleBrightnessChange; + final void Function() handleMaterialVersionChange; + final void Function(int) handleImageSelect; + final void Function(int) handleColorSelect; + + final bool useLightMode; + final bool useMaterial3; + + final ColorImageProvider imageSelected; + final ColorSeed colorSelected; + final ColorSelectionMethod colorSelectionMethod; + + @override + Widget build(BuildContext context) { + final screenHeight = MediaQuery.of(context).size.height; + final trailingActionsBody = Container( + constraints: const BoxConstraints.tightFor(width: 250), + padding: const EdgeInsets.symmetric(horizontal: 30), + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Row( + children: [ + const Text('Brightness'), + Expanded(child: Container()), + Switch( + value: useLightMode, + onChanged: (value) { + handleBrightnessChange(value); + }) + ], + ), + Row( + children: [ + useMaterial3 + ? const Text('Material 3') + : const Text('Material 2'), + Expanded(child: Container()), + Switch( + value: useMaterial3, + onChanged: (_) { + handleMaterialVersionChange(); + }) + ], + ), + const Divider(), + _ExpandedColorSeedAction( + handleColorSelect: handleColorSelect, + colorSelected: colorSelected, + colorSelectionMethod: colorSelectionMethod, + ), + const Divider(), + _ExpandedImageColorAction( + handleImageSelect: handleImageSelect, + imageSelected: imageSelected, + colorSelectionMethod: colorSelectionMethod, + ), + ], + ), + ); + return screenHeight > 740 + ? trailingActionsBody + : SingleChildScrollView(child: trailingActionsBody); + } +} + +class _ExpandedColorSeedAction extends StatelessWidget { + const _ExpandedColorSeedAction({ + required this.handleColorSelect, + required this.colorSelected, + required this.colorSelectionMethod, + }); + + final void Function(int) handleColorSelect; + final ColorSeed colorSelected; + final ColorSelectionMethod colorSelectionMethod; + + @override + Widget build(BuildContext context) { + return ConstrainedBox( + constraints: const BoxConstraints(maxHeight: 200.0), + child: GridView.count( + crossAxisCount: 3, + children: List.generate( + ColorSeed.values.length, + (i) => IconButton( + icon: const Icon(Icons.radio_button_unchecked), + color: ColorSeed.values[i].color, + isSelected: colorSelected.color == ColorSeed.values[i].color && + colorSelectionMethod == ColorSelectionMethod.colorSeed, + selectedIcon: const Icon(Icons.circle), + onPressed: () => handleColorSelect(i), + tooltip: ColorSeed.values[i].label, + ), + ), + ), + ); + } +} + +class _ExpandedImageColorAction extends StatelessWidget { + const _ExpandedImageColorAction({ + required this.handleImageSelect, + required this.imageSelected, + required this.colorSelectionMethod, + }); + + final void Function(int) handleImageSelect; + final ColorImageProvider imageSelected; + final ColorSelectionMethod colorSelectionMethod; + + @override + Widget build(BuildContext context) { + return ConstrainedBox( + constraints: const BoxConstraints(maxHeight: 150.0), + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 8.0), + child: GridView.count( + crossAxisCount: 3, + children: List.generate( + ColorImageProvider.values.length, + (i) => Tooltip( + message: ColorImageProvider.values[i].label, + child: InkWell( + borderRadius: BorderRadius.circular(4.0), + onTap: () => handleImageSelect(i), + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Material( + borderRadius: BorderRadius.circular(4.0), + elevation: imageSelected == ColorImageProvider.values[i] && + colorSelectionMethod == ColorSelectionMethod.image + ? 3 + : 0, + child: Padding( + padding: const EdgeInsets.all(4.0), + child: ClipRRect( + borderRadius: BorderRadius.circular(4.0), + child: Image( + image: NetworkImage(ColorImageProvider.values[i].url), + ), + ), + ), + ), + ), + ), + ), + ), + ), + ), + ); + } +} + +class NavigationTransition extends StatefulWidget { + const NavigationTransition( + {super.key, + required this.scaffoldKey, + required this.animationController, + required this.railAnimation, + required this.navigationRail, + required this.navigationBar, + required this.appBar, + required this.body}); + + final GlobalKey scaffoldKey; + final AnimationController animationController; + final CurvedAnimation railAnimation; + final Widget navigationRail; + final Widget navigationBar; + final PreferredSizeWidget appBar; + final Widget body; + + @override + State createState() => _NavigationTransitionState(); +} + +class _NavigationTransitionState extends State { + late final AnimationController controller; + late final CurvedAnimation railAnimation; + late final ReverseAnimation barAnimation; + bool controllerInitialized = false; + bool showDivider = false; + + @override + void initState() { + super.initState(); + + controller = widget.animationController; + railAnimation = widget.railAnimation; + + barAnimation = ReverseAnimation( + CurvedAnimation( + parent: controller, + curve: const Interval(0.0, 0.5), + ), + ); + } + + @override + Widget build(BuildContext context) { + final ColorScheme colorScheme = Theme.of(context).colorScheme; + + return Scaffold( + key: widget.scaffoldKey, + appBar: widget.appBar, + body: Row( + children: [ + RailTransition( + animation: railAnimation, + backgroundColor: colorScheme.surface, + child: widget.navigationRail, + ), + widget.body, + ], + ), + bottomNavigationBar: BarTransition( + animation: barAnimation, + backgroundColor: colorScheme.surface, + child: widget.navigationBar, + ), + endDrawer: const NavigationDrawerSection(), + ); + } +} + +final List navRailDestinations = appBarDestinations + .map( + (destination) => NavigationRailDestination( + icon: Tooltip( + message: destination.label, + child: destination.icon, + ), + selectedIcon: Tooltip( + message: destination.label, + child: destination.selectedIcon, + ), + label: Text(destination.label), + ), + ) + .toList(); + +class SizeAnimation extends CurvedAnimation { + SizeAnimation(Animation parent) + : super( + parent: parent, + curve: const Interval( + 0.2, + 0.8, + curve: Curves.easeInOutCubicEmphasized, + ), + reverseCurve: Interval( + 0, + 0.2, + curve: Curves.easeInOutCubicEmphasized.flipped, + ), + ); +} + +class OffsetAnimation extends CurvedAnimation { + OffsetAnimation(Animation parent) + : super( + parent: parent, + curve: const Interval( + 0.4, + 1.0, + curve: Curves.easeInOutCubicEmphasized, + ), + reverseCurve: Interval( + 0, + 0.2, + curve: Curves.easeInOutCubicEmphasized.flipped, + ), + ); +} + +class RailTransition extends StatefulWidget { + const RailTransition( + {super.key, + required this.animation, + required this.backgroundColor, + required this.child}); + + final Animation animation; + final Widget child; + final Color backgroundColor; + + @override + State createState() => _RailTransition(); +} + +class _RailTransition extends State { + late Animation offsetAnimation; + late Animation widthAnimation; + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + + // The animations are only rebuilt by this method when the text + // direction changes because this widget only depends on Directionality. + final bool ltr = Directionality.of(context) == TextDirection.ltr; + + widthAnimation = Tween( + begin: 0, + end: 1, + ).animate(SizeAnimation(widget.animation)); + + offsetAnimation = Tween( + begin: ltr ? const Offset(-1, 0) : const Offset(1, 0), + end: Offset.zero, + ).animate(OffsetAnimation(widget.animation)); + } + + @override + Widget build(BuildContext context) { + return ClipRect( + child: DecoratedBox( + decoration: BoxDecoration(color: widget.backgroundColor), + child: Align( + alignment: Alignment.topLeft, + widthFactor: widthAnimation.value, + child: FractionalTranslation( + translation: offsetAnimation.value, + child: widget.child, + ), + ), + ), + ); + } +} + +class BarTransition extends StatefulWidget { + const BarTransition( + {super.key, + required this.animation, + required this.backgroundColor, + required this.child}); + + final Animation animation; + final Color backgroundColor; + final Widget child; + + @override + State createState() => _BarTransition(); +} + +class _BarTransition extends State { + late final Animation offsetAnimation; + late final Animation heightAnimation; + + @override + void initState() { + super.initState(); + + offsetAnimation = Tween( + begin: const Offset(0, 1), + end: Offset.zero, + ).animate(OffsetAnimation(widget.animation)); + + heightAnimation = Tween( + begin: 0, + end: 1, + ).animate(SizeAnimation(widget.animation)); + } + + @override + Widget build(BuildContext context) { + return ClipRect( + child: DecoratedBox( + decoration: BoxDecoration(color: widget.backgroundColor), + child: Align( + alignment: Alignment.topLeft, + heightFactor: heightAnimation.value, + child: FractionalTranslation( + translation: offsetAnimation.value, + child: widget.child, + ), + ), + ), + ); + } +} + +class OneTwoTransition extends StatefulWidget { + const OneTwoTransition({ + super.key, + required this.animation, + required this.one, + required this.two, + }); + + final Animation animation; + final Widget one; + final Widget two; + + @override + State createState() => _OneTwoTransitionState(); +} + +class _OneTwoTransitionState extends State { + late final Animation offsetAnimation; + late final Animation widthAnimation; + + @override + void initState() { + super.initState(); + + offsetAnimation = Tween( + begin: const Offset(1, 0), + end: Offset.zero, + ).animate(OffsetAnimation(widget.animation)); + + widthAnimation = Tween( + begin: 0, + end: mediumWidthBreakpoint, + ).animate(SizeAnimation(widget.animation)); + } + + @override + Widget build(BuildContext context) { + return Row( + children: [ + Flexible( + flex: mediumWidthBreakpoint.toInt(), + child: widget.one, + ), + if (widthAnimation.value.toInt() > 0) ...[ + Flexible( + flex: widthAnimation.value.toInt(), + child: FractionalTranslation( + translation: offsetAnimation.value, + child: widget.two, + ), + ) + ], + ], + ); + } +} diff --git a/experimental/material_3_demo/lib/main.dart b/experimental/material_3_demo/lib/main.dart index b36fd8f10..5a0ec563b 100644 --- a/experimental/material_3_demo/lib/main.dart +++ b/experimental/material_3_demo/lib/main.dart @@ -3,75 +3,35 @@ // found in the LICENSE file. import 'package:flutter/material.dart'; -import 'package:flutter/scheduler.dart'; -import 'color_palettes_screen.dart'; -import 'component_screen.dart'; -import 'elevation_screen.dart'; -import 'typography_screen.dart'; +import 'constants.dart'; +import 'home.dart'; void main() { runApp( - const MaterialApp( - debugShowCheckedModeBanner: false, - home: Material3Demo(), - ), + const App(), ); } -class Material3Demo extends StatefulWidget { - const Material3Demo({super.key}); +class App extends StatefulWidget { + const App({super.key}); @override - State createState() => _Material3DemoState(); -} - -// NavigationRail shows if the screen width is greater or equal to -// screenWidthThreshold; otherwise, NavigationBar is used for navigation. -const double narrowScreenWidthThreshold = 450; - -const double transitionLength = 500; - -enum ColorSeed { - baseColor('M3 Baseline', Color(0xff6750a4)), - indigo('Indigo', Colors.indigo), - blue('Blue', Colors.blue), - teal('Teal', Colors.teal), - green('Green', Colors.green), - yellow('Yellow', Colors.yellow), - orange('Orange', Colors.orange), - deepOrange('Deep Orange', Colors.deepOrange), - pink('Pink', Colors.pink); - - const ColorSeed(this.label, this.color); - final String label; - final Color color; + State createState() => _AppState(); } -enum ScreenSelected { - component(0), - color(1), - typography(2), - elevation(3); - - const ScreenSelected(this.value); - final int value; -} - -class _Material3DemoState extends State - with SingleTickerProviderStateMixin { - final GlobalKey scaffoldKey = GlobalKey(); - late final AnimationController controller; - late final CurvedAnimation railAnimation; - bool controllerInitialized = false; - bool showMediumSizeLayout = false; - bool showLargeSizeLayout = false; +class _AppState extends State { bool useMaterial3 = true; ThemeMode themeMode = ThemeMode.system; + ColorSeed colorSelected = ColorSeed.baseColor; + ColorImageProvider imageSelected = ColorImageProvider.leaves; + ColorScheme? imageColorScheme = const ColorScheme.light(); + ColorSelectionMethod colorSelectionMethod = ColorSelectionMethod.colorSeed; + bool get useLightMode { switch (themeMode) { case ThemeMode.system: - return SchedulerBinding.instance.window.platformBrightness == + return View.of(context).platformDispatcher.platformBrightness == Brightness.light; case ThemeMode.light: return true; @@ -80,67 +40,6 @@ class _Material3DemoState extends State } } - ColorSeed colorSelected = ColorSeed.baseColor; - int screenIndex = ScreenSelected.component.value; - - @override - initState() { - super.initState(); - controller = AnimationController( - duration: Duration(milliseconds: transitionLength.toInt() * 2), - value: 0, - vsync: this, - ); - railAnimation = CurvedAnimation( - parent: controller, - curve: const Interval(0.5, 1.0), - ); - } - - @override - void dispose() { - controller.dispose(); - super.dispose(); - } - - @override - void didChangeDependencies() { - super.didChangeDependencies(); - - final double width = MediaQuery.of(context).size.width; - final AnimationStatus status = controller.status; - if (width > 1000) { - if (width > 1500) { - showMediumSizeLayout = false; - showLargeSizeLayout = true; - } else { - showMediumSizeLayout = true; - showLargeSizeLayout = false; - } - if (status != AnimationStatus.forward && - status != AnimationStatus.completed) { - controller.forward(); - } - } else { - showMediumSizeLayout = false; - showLargeSizeLayout = false; - if (status != AnimationStatus.reverse && - status != AnimationStatus.dismissed) { - controller.reverse(); - } - } - if (!controllerInitialized) { - controllerInitialized = true; - controller.value = width > 1000 ? 1 : 0; - } - } - - void handleScreenChanged(int screenSelected) { - setState(() { - screenIndex = screenSelected; - }); - } - void handleBrightnessChange(bool useLightMode) { setState(() { themeMode = useLightMode ? ThemeMode.light : ThemeMode.dark; @@ -155,138 +54,23 @@ class _Material3DemoState extends State void handleColorSelect(int value) { setState(() { + colorSelectionMethod = ColorSelectionMethod.colorSeed; colorSelected = ColorSeed.values[value]; }); } - Widget createScreenFor( - ScreenSelected screenSelected, bool showNavBarExample) { - switch (screenSelected) { - case ScreenSelected.component: - return Expanded( - child: OneTwoTransition( - animation: railAnimation, - one: FirstComponentList( - showNavBottomBar: showNavBarExample, - scaffoldKey: scaffoldKey, - showSecondList: showMediumSizeLayout || showLargeSizeLayout), - two: SecondComponentList( - scaffoldKey: scaffoldKey, - ), - ), - ); - case ScreenSelected.color: - return const ColorPalettesScreen(); - case ScreenSelected.typography: - return const TypographyScreen(); - case ScreenSelected.elevation: - return const ElevationScreen(); - default: - return FirstComponentList( - showNavBottomBar: showNavBarExample, - scaffoldKey: scaffoldKey, - showSecondList: showMediumSizeLayout || showLargeSizeLayout); - } - } - - PreferredSizeWidget createAppBar() { - return AppBar( - title: useMaterial3 ? const Text('Material 3') : const Text('Material 2'), - actions: !showMediumSizeLayout && !showLargeSizeLayout - ? [ - _BrightnessButton( - handleBrightnessChange: handleBrightnessChange, - ), - _Material3Button( - handleMaterialVersionChange: handleMaterialVersionChange, - ), - _ColorSeedButton( - handleColorSelect: handleColorSelect, - colorSelected: colorSelected, - ), - ] - : [Container()], - ); + void handleImageSelect(int value) { + final String url = ColorImageProvider.values[value].url; + ColorScheme.fromImageProvider(provider: NetworkImage(url)) + .then((newScheme) { + setState(() { + colorSelectionMethod = ColorSelectionMethod.image; + imageSelected = ColorImageProvider.values[value]; + imageColorScheme = newScheme; + }); + }); } - Widget _expandedTrailingActions() => Container( - constraints: const BoxConstraints.tightFor(width: 250), - padding: const EdgeInsets.symmetric(horizontal: 30), - child: Column( - mainAxisAlignment: MainAxisAlignment.end, - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - Row( - children: [ - const Text('Brightness'), - Expanded(child: Container()), - Switch( - value: useLightMode, - onChanged: (value) { - handleBrightnessChange(value); - }) - ], - ), - Row( - children: [ - useMaterial3 - ? const Text('Material 3') - : const Text('Material 2'), - Expanded(child: Container()), - Switch( - value: useMaterial3, - onChanged: (_) { - handleMaterialVersionChange(); - }) - ], - ), - const Divider(), - ConstrainedBox( - constraints: const BoxConstraints(maxHeight: 200.0), - child: GridView.count( - crossAxisCount: 3, - children: List.generate( - ColorSeed.values.length, - (i) => IconButton( - icon: const Icon(Icons.radio_button_unchecked), - color: ColorSeed.values[i].color, - isSelected: - colorSelected.color == ColorSeed.values[i].color, - selectedIcon: const Icon(Icons.circle), - onPressed: () { - handleColorSelect(i); - }, - )), - ), - ), - ], - ), - ); - - Widget _trailingActions() => Column( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - Flexible( - child: _BrightnessButton( - handleBrightnessChange: handleBrightnessChange, - showTooltipBelow: false, - ), - ), - Flexible( - child: _Material3Button( - handleMaterialVersionChange: handleMaterialVersionChange, - showTooltipBelow: false, - ), - ), - Flexible( - child: _ColorSeedButton( - handleColorSelect: handleColorSelect, - colorSelected: colorSelected, - ), - ), - ], - ); - @override Widget build(BuildContext context) { return MaterialApp( @@ -294,444 +78,33 @@ class _Material3DemoState extends State title: 'Material 3', themeMode: themeMode, theme: ThemeData( - colorSchemeSeed: colorSelected.color, + colorSchemeSeed: colorSelectionMethod == ColorSelectionMethod.colorSeed + ? colorSelected.color + : null, + colorScheme: colorSelectionMethod == ColorSelectionMethod.image + ? imageColorScheme + : null, useMaterial3: useMaterial3, brightness: Brightness.light, ), darkTheme: ThemeData( - colorSchemeSeed: colorSelected.color, + colorSchemeSeed: colorSelectionMethod == ColorSelectionMethod.colorSeed + ? colorSelected.color + : imageColorScheme!.primary, useMaterial3: useMaterial3, brightness: Brightness.dark, ), - home: AnimatedBuilder( - animation: controller, - builder: (context, child) { - return NavigationTransition( - scaffoldKey: scaffoldKey, - animationController: controller, - railAnimation: railAnimation, - appBar: createAppBar(), - body: createScreenFor( - ScreenSelected.values[screenIndex], controller.value == 1), - navigationRail: NavigationRail( - extended: showLargeSizeLayout, - destinations: navRailDestinations, - selectedIndex: screenIndex, - onDestinationSelected: (index) { - setState(() { - screenIndex = index; - handleScreenChanged(screenIndex); - }); - }, - trailing: Expanded( - child: Padding( - padding: const EdgeInsets.only(bottom: 20), - child: showLargeSizeLayout - ? _expandedTrailingActions() - : _trailingActions(), - ), - ), - ), - navigationBar: NavigationBars( - onSelectItem: (index) { - setState(() { - screenIndex = index; - handleScreenChanged(screenIndex); - }); - }, - selectedIndex: screenIndex, - isExampleBar: false, - ), - ); - }, - ), - ); - } -} - -class _BrightnessButton extends StatelessWidget { - const _BrightnessButton({ - required this.handleBrightnessChange, - this.showTooltipBelow = true, - }); - - final Function handleBrightnessChange; - final bool showTooltipBelow; - - @override - Widget build(BuildContext context) { - final isBright = Theme.of(context).brightness == Brightness.light; - return Tooltip( - preferBelow: showTooltipBelow, - message: 'Toggle brightness', - child: IconButton( - icon: isBright - ? const Icon(Icons.dark_mode_outlined) - : const Icon(Icons.light_mode_outlined), - onPressed: () => handleBrightnessChange(!isBright), - ), - ); - } -} - -class _Material3Button extends StatelessWidget { - const _Material3Button({ - required this.handleMaterialVersionChange, - this.showTooltipBelow = true, - }); - - final void Function() handleMaterialVersionChange; - final bool showTooltipBelow; - - @override - Widget build(BuildContext context) { - final useMaterial3 = Theme.of(context).useMaterial3; - return Tooltip( - preferBelow: showTooltipBelow, - message: 'Switch to Material ${useMaterial3 ? 2 : 3}', - child: IconButton( - icon: useMaterial3 - ? const Icon(Icons.filter_2) - : const Icon(Icons.filter_3), - onPressed: handleMaterialVersionChange, - ), - ); - } -} - -class _ColorSeedButton extends StatelessWidget { - const _ColorSeedButton({ - required this.handleColorSelect, - required this.colorSelected, - }); - - final void Function(int) handleColorSelect; - final ColorSeed colorSelected; - - @override - Widget build(BuildContext context) { - return PopupMenuButton( - icon: Icon( - Icons.palette_outlined, - color: Theme.of(context).colorScheme.onSurfaceVariant, - ), - tooltip: 'Select a seed color', - shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), - itemBuilder: (context) { - return List.generate(ColorSeed.values.length, (index) { - ColorSeed currentColor = ColorSeed.values[index]; - - return PopupMenuItem( - value: index, - enabled: currentColor != colorSelected, - child: Wrap( - children: [ - Padding( - padding: const EdgeInsets.only(left: 10), - child: Icon( - currentColor == colorSelected - ? Icons.color_lens - : Icons.color_lens_outlined, - color: currentColor.color, - ), - ), - Padding( - padding: const EdgeInsets.only(left: 20), - child: Text(currentColor.label), - ), - ], - ), - ); - }); - }, - onSelected: handleColorSelect, - ); - } -} - -class NavigationTransition extends StatefulWidget { - const NavigationTransition( - {super.key, - required this.scaffoldKey, - required this.animationController, - required this.railAnimation, - required this.navigationRail, - required this.navigationBar, - required this.appBar, - required this.body}); - - final GlobalKey scaffoldKey; - final AnimationController animationController; - final CurvedAnimation railAnimation; - final Widget navigationRail; - final Widget navigationBar; - final PreferredSizeWidget appBar; - final Widget body; - - @override - State createState() => _NavigationTransitionState(); -} - -class _NavigationTransitionState extends State { - late final AnimationController controller; - late final CurvedAnimation railAnimation; - late final ReverseAnimation barAnimation; - bool controllerInitialized = false; - bool showDivider = false; - - @override - void initState() { - super.initState(); - - controller = widget.animationController; - railAnimation = widget.railAnimation; - - barAnimation = ReverseAnimation( - CurvedAnimation( - parent: controller, - curve: const Interval(0.0, 0.5), - ), - ); - } - - @override - Widget build(BuildContext context) { - final ColorScheme colorScheme = Theme.of(context).colorScheme; - - return Scaffold( - key: widget.scaffoldKey, - appBar: widget.appBar, - body: Row( - children: [ - RailTransition( - animation: railAnimation, - backgroundColor: colorScheme.surface, - child: widget.navigationRail, - ), - widget.body, - ], - ), - bottomNavigationBar: BarTransition( - animation: barAnimation, - backgroundColor: colorScheme.surface, - child: widget.navigationBar, - ), - endDrawer: const NavigationDrawerSection(), - ); - } -} - -final List navRailDestinations = appBarDestinations - .map( - (destination) => NavigationRailDestination( - icon: Tooltip( - message: destination.label, - child: destination.icon, - ), - selectedIcon: Tooltip( - message: destination.label, - child: destination.selectedIcon, - ), - label: Text(destination.label), - ), - ) - .toList(); - -class SizeAnimation extends CurvedAnimation { - SizeAnimation(Animation parent) - : super( - parent: parent, - curve: const Interval( - 0.2, - 0.8, - curve: Curves.easeInOutCubicEmphasized, - ), - reverseCurve: Interval( - 0, - 0.2, - curve: Curves.easeInOutCubicEmphasized.flipped, - ), - ); -} - -class OffsetAnimation extends CurvedAnimation { - OffsetAnimation(Animation parent) - : super( - parent: parent, - curve: const Interval( - 0.4, - 1.0, - curve: Curves.easeInOutCubicEmphasized, - ), - reverseCurve: Interval( - 0, - 0.2, - curve: Curves.easeInOutCubicEmphasized.flipped, - ), - ); -} - -class RailTransition extends StatefulWidget { - const RailTransition( - {super.key, - required this.animation, - required this.backgroundColor, - required this.child}); - - final Animation animation; - final Widget child; - final Color backgroundColor; - - @override - State createState() => _RailTransition(); -} - -class _RailTransition extends State { - late Animation offsetAnimation; - late Animation widthAnimation; - - @override - void didChangeDependencies() { - super.didChangeDependencies(); - - // The animations are only rebuilt by this method when the text - // direction changes because this widget only depends on Directionality. - final bool ltr = Directionality.of(context) == TextDirection.ltr; - - widthAnimation = Tween( - begin: 0, - end: 1, - ).animate(SizeAnimation(widget.animation)); - - offsetAnimation = Tween( - begin: ltr ? const Offset(-1, 0) : const Offset(1, 0), - end: Offset.zero, - ).animate(OffsetAnimation(widget.animation)); - } - - @override - Widget build(BuildContext context) { - return ClipRect( - child: DecoratedBox( - decoration: BoxDecoration(color: widget.backgroundColor), - child: Align( - alignment: Alignment.topLeft, - widthFactor: widthAnimation.value, - child: FractionalTranslation( - translation: offsetAnimation.value, - child: widget.child, - ), - ), - ), - ); - } -} - -class BarTransition extends StatefulWidget { - const BarTransition( - {super.key, - required this.animation, - required this.backgroundColor, - required this.child}); - - final Animation animation; - final Color backgroundColor; - final Widget child; - - @override - State createState() => _BarTransition(); -} - -class _BarTransition extends State { - late final Animation offsetAnimation; - late final Animation heightAnimation; - - @override - void initState() { - super.initState(); - - offsetAnimation = Tween( - begin: const Offset(0, 1), - end: Offset.zero, - ).animate(OffsetAnimation(widget.animation)); - - heightAnimation = Tween( - begin: 0, - end: 1, - ).animate(SizeAnimation(widget.animation)); - } - - @override - Widget build(BuildContext context) { - return ClipRect( - child: DecoratedBox( - decoration: BoxDecoration(color: widget.backgroundColor), - child: Align( - alignment: Alignment.topLeft, - heightFactor: heightAnimation.value, - child: FractionalTranslation( - translation: offsetAnimation.value, - child: widget.child, - ), - ), + home: Home( + useLightMode: useLightMode, + useMaterial3: useMaterial3, + colorSelected: colorSelected, + imageSelected: imageSelected, + handleBrightnessChange: handleBrightnessChange, + handleMaterialVersionChange: handleMaterialVersionChange, + handleColorSelect: handleColorSelect, + handleImageSelect: handleImageSelect, + colorSelectionMethod: colorSelectionMethod, ), ); } } - -class OneTwoTransition extends StatefulWidget { - const OneTwoTransition({ - super.key, - required this.animation, - required this.one, - required this.two, - }); - - final Animation animation; - final Widget one; - final Widget two; - - @override - State createState() => _OneTwoTransitionState(); -} - -class _OneTwoTransitionState extends State { - late final Animation offsetAnimation; - late final Animation widthAnimation; - - @override - void initState() { - super.initState(); - - offsetAnimation = Tween( - begin: const Offset(1, 0), - end: Offset.zero, - ).animate(OffsetAnimation(widget.animation)); - - widthAnimation = Tween( - begin: 0, - end: 1000, - ).animate(SizeAnimation(widget.animation)); - } - - @override - Widget build(BuildContext context) { - return Row( - children: [ - Flexible( - flex: 1000, - child: widget.one, - ), - if (widthAnimation.value.toInt() > 0) ...[ - Flexible( - flex: widthAnimation.value.toInt(), - child: FractionalTranslation( - translation: offsetAnimation.value, - child: widget.two, - ), - ) - ], - ], - ); - } -} diff --git a/experimental/material_3_demo/linux/.gitignore b/experimental/material_3_demo/linux/.gitignore new file mode 100644 index 000000000..d3896c984 --- /dev/null +++ b/experimental/material_3_demo/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/experimental/material_3_demo/linux/CMakeLists.txt b/experimental/material_3_demo/linux/CMakeLists.txt new file mode 100644 index 000000000..4d8398481 --- /dev/null +++ b/experimental/material_3_demo/linux/CMakeLists.txt @@ -0,0 +1,139 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.10) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "material_3_demo") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.example.material_3_demo") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/experimental/material_3_demo/linux/flutter/CMakeLists.txt b/experimental/material_3_demo/linux/flutter/CMakeLists.txt new file mode 100644 index 000000000..d5bd01648 --- /dev/null +++ b/experimental/material_3_demo/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/experimental/material_3_demo/linux/flutter/generated_plugin_registrant.cc b/experimental/material_3_demo/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 000000000..f6f23bfe9 --- /dev/null +++ b/experimental/material_3_demo/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + +#include + +void fl_register_plugins(FlPluginRegistry* registry) { + g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin"); + url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar); +} diff --git a/experimental/material_3_demo/linux/flutter/generated_plugin_registrant.h b/experimental/material_3_demo/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 000000000..e0f0a47bc --- /dev/null +++ b/experimental/material_3_demo/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/experimental/material_3_demo/linux/flutter/generated_plugins.cmake b/experimental/material_3_demo/linux/flutter/generated_plugins.cmake new file mode 100644 index 000000000..f16b4c342 --- /dev/null +++ b/experimental/material_3_demo/linux/flutter/generated_plugins.cmake @@ -0,0 +1,24 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST + url_launcher_linux +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/experimental/material_3_demo/linux/main.cc b/experimental/material_3_demo/linux/main.cc new file mode 100644 index 000000000..e7c5c5437 --- /dev/null +++ b/experimental/material_3_demo/linux/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/experimental/material_3_demo/linux/my_application.cc b/experimental/material_3_demo/linux/my_application.cc new file mode 100644 index 000000000..0eb2ec9a5 --- /dev/null +++ b/experimental/material_3_demo/linux/my_application.cc @@ -0,0 +1,104 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "material_3_demo"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "material_3_demo"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/experimental/material_3_demo/linux/my_application.h b/experimental/material_3_demo/linux/my_application.h new file mode 100644 index 000000000..72271d5e4 --- /dev/null +++ b/experimental/material_3_demo/linux/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/experimental/material_3_demo/macos/Podfile b/experimental/material_3_demo/macos/Podfile index 049abe295..c795730db 100644 --- a/experimental/material_3_demo/macos/Podfile +++ b/experimental/material_3_demo/macos/Podfile @@ -31,6 +31,9 @@ target 'Runner' do use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end end post_install do |installer| diff --git a/experimental/material_3_demo/macos/Runner.xcodeproj/project.pbxproj b/experimental/material_3_demo/macos/Runner.xcodeproj/project.pbxproj index 8c64178e0..ddd81a110 100644 --- a/experimental/material_3_demo/macos/Runner.xcodeproj/project.pbxproj +++ b/experimental/material_3_demo/macos/Runner.xcodeproj/project.pbxproj @@ -21,7 +21,7 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 29893622E48563911C289557 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 13168370F89CE850498E884F /* Pods_Runner.framework */; }; + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; @@ -30,6 +30,13 @@ /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 33CC10E52044A3C60003C045 /* Project object */; @@ -53,10 +60,11 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 13168370F89CE850498E884F /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* material_3_demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = material_3_demo.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10ED2044A3C60003C045 /* material_3_demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "material_3_demo.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; @@ -68,34 +76,34 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 73B8DF92B3D56F290108F695 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - F108BC42B08AF0DCE6FE7E0F /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; - F7B140583E6057BF7218F5FF /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 33CC10EA2044A3C60003C045 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 29893622E48563911C289557 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 1CEE48D24C5E4B574B6EA5CE /* Pods */ = { + 331C80D6294CF71000263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - F7B140583E6057BF7218F5FF /* Pods-Runner.debug.xcconfig */, - 73B8DF92B3D56F290108F695 /* Pods-Runner.release.xcconfig */, - F108BC42B08AF0DCE6FE7E0F /* Pods-Runner.profile.xcconfig */, + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, ); - name = Pods; - path = Pods; + path = RunnerTests; sourceTree = ""; }; 33BA886A226E78AF003329D5 /* Configs */ = { @@ -114,9 +122,9 @@ children = ( 33FAB671232836740065AC1E /* Runner */, 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 1CEE48D24C5E4B574B6EA5CE /* Pods */, ); sourceTree = ""; }; @@ -124,6 +132,7 @@ isa = PBXGroup; children = ( 33CC10ED2044A3C60003C045 /* material_3_demo.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, ); name = Products; sourceTree = ""; @@ -166,7 +175,6 @@ D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 13168370F89CE850498E884F /* Pods_Runner.framework */, ); name = Frameworks; sourceTree = ""; @@ -174,17 +182,33 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; 33CC10EC2044A3C60003C045 /* Runner */ = { isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 62AA8B239FF89DC9F3C6C609 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 9D8B14DF00D7FCC6D93AE630 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -206,6 +230,10 @@ LastUpgradeCheck = 1300; ORGANIZATIONNAME = ""; TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; 33CC10EC2044A3C60003C045 = { CreatedOnToolsVersion = 9.2; LastSwiftMigration = 1100; @@ -236,12 +264,20 @@ projectRoot = ""; targets = ( 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, 33CC111A2044C6BA0003C045 /* Flutter Assemble */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 33CC10EB2044A3C60003C045 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -292,48 +328,17 @@ shellPath = /bin/sh; shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 62AA8B239FF89DC9F3C6C609 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - 9D8B14DF00D7FCC6D93AE630 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ 33CC10E92044A3C60003C045 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -347,6 +352,11 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; @@ -367,6 +377,48 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.material3Demo.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/material_3_demo.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/material_3_demo"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.material3Demo.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/material_3_demo.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/material_3_demo"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.material3Demo.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/material_3_demo.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/material_3_demo"; + }; + name = Profile; + }; 338D0CE9231458BD00FA5F75 /* Profile */ = { isa = XCBuildConfiguration; baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; @@ -597,6 +649,16 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/experimental/material_3_demo/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/experimental/material_3_demo/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 2e347306a..7bf63357a 100644 --- a/experimental/material_3_demo/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/experimental/material_3_demo/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -37,6 +37,17 @@ + + + + - - diff --git a/experimental/material_3_demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/experimental/material_3_demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png index 3c4935a7c..82b6f9d9a 100644 Binary files a/experimental/material_3_demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png and b/experimental/material_3_demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png differ diff --git a/experimental/material_3_demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/experimental/material_3_demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png index ed4cc1642..13b35eba5 100644 Binary files a/experimental/material_3_demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png and b/experimental/material_3_demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png differ diff --git a/experimental/material_3_demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/experimental/material_3_demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png index 483be6138..0a3f5fa40 100644 Binary files a/experimental/material_3_demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png and b/experimental/material_3_demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png differ diff --git a/experimental/material_3_demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/experimental/material_3_demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png index bcbf36df2..bdb57226d 100644 Binary files a/experimental/material_3_demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png and b/experimental/material_3_demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png differ diff --git a/experimental/material_3_demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png b/experimental/material_3_demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png index 9c0a65286..f083318e0 100644 Binary files a/experimental/material_3_demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png and b/experimental/material_3_demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png differ diff --git a/experimental/material_3_demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/experimental/material_3_demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png index e71a72613..326c0e72c 100644 Binary files a/experimental/material_3_demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png and b/experimental/material_3_demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png differ diff --git a/experimental/material_3_demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/experimental/material_3_demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png index 8a31fe2dd..2f1632cfd 100644 Binary files a/experimental/material_3_demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png and b/experimental/material_3_demo/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png differ diff --git a/experimental/material_3_demo/macos/Runner/Configs/AppInfo.xcconfig b/experimental/material_3_demo/macos/Runner/Configs/AppInfo.xcconfig index e5e7671cb..76173beaf 100644 --- a/experimental/material_3_demo/macos/Runner/Configs/AppInfo.xcconfig +++ b/experimental/material_3_demo/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = material_3_demo PRODUCT_BUNDLE_IDENTIFIER = com.example.material3Demo // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2022 com.example. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2023 com.example. All rights reserved. diff --git a/experimental/material_3_demo/macos/Runner/DebugProfile.entitlements b/experimental/material_3_demo/macos/Runner/DebugProfile.entitlements index dddb8a30c..08c3ab17c 100644 --- a/experimental/material_3_demo/macos/Runner/DebugProfile.entitlements +++ b/experimental/material_3_demo/macos/Runner/DebugProfile.entitlements @@ -8,5 +8,7 @@ com.apple.security.network.server + com.apple.security.network.client + diff --git a/experimental/material_3_demo/macos/Runner/Release.entitlements b/experimental/material_3_demo/macos/Runner/Release.entitlements index 852fa1a47..ee95ab7e5 100644 --- a/experimental/material_3_demo/macos/Runner/Release.entitlements +++ b/experimental/material_3_demo/macos/Runner/Release.entitlements @@ -4,5 +4,7 @@ com.apple.security.app-sandbox + com.apple.security.network.client + diff --git a/experimental/material_3_demo/macos/RunnerTests/RunnerTests.swift b/experimental/material_3_demo/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 000000000..5418c9f53 --- /dev/null +++ b/experimental/material_3_demo/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import FlutterMacOS +import Cocoa +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/experimental/material_3_demo/pubspec.yaml b/experimental/material_3_demo/pubspec.yaml index 09c335396..8ddae793d 100644 --- a/experimental/material_3_demo/pubspec.yaml +++ b/experimental/material_3_demo/pubspec.yaml @@ -8,7 +8,7 @@ publish_to: "none" version: 1.0.0+1 environment: - sdk: ">=2.18.0-0 <3.0.0" + sdk: ^3.1.0 dependencies: flutter: @@ -18,10 +18,12 @@ dependencies: url_launcher: ^6.1.8 dev_dependencies: + analysis_defaults: + path: ../../analysis_defaults flutter_test: sdk: flutter - - flutter_lints: ^2.0.1 + integration_test: + sdk: flutter flutter: uses-material-design: true diff --git a/experimental/material_3_demo/test/color_screen_test.dart b/experimental/material_3_demo/test/color_screen_test.dart index a29b089f7..3f82ce741 100644 --- a/experimental/material_3_demo/test/color_screen_test.dart +++ b/experimental/material_3_demo/test/color_screen_test.dart @@ -15,8 +15,8 @@ void main() { 'Color palettes screen shows correctly when color icon is clicked ' 'on NavigationBar', (tester) async { widgetSetup(tester, 449); - addTearDown(tester.binding.window.clearPhysicalSizeTestValue); - await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + addTearDown(tester.view.resetPhysicalSize); + await tester.pumpWidget(const App()); expect(find.text('Light ColorScheme'), findsNothing); expect(find.text('Dark ColorScheme'), findsNothing); @@ -44,8 +44,8 @@ void main() { 'on NavigationRail', (tester) async { widgetSetup( tester, 1200); // NavigationRail shows only when width is > 1000. - addTearDown(tester.binding.window.clearPhysicalSizeTestValue); - await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + addTearDown(tester.view.resetPhysicalSize); + await tester.pumpWidget(const App()); await tester.pumpAndSettle(); expect(find.text('Light ColorScheme'), findsNothing); expect(find.text('Dark ColorScheme'), findsNothing); @@ -65,8 +65,8 @@ void main() { }); testWidgets('Color screen shows correct content', (tester) async { - await tester.pumpWidget(MaterialApp( - home: Scaffold(body: Row(children: const [ColorPalettesScreen()])), + await tester.pumpWidget(const MaterialApp( + home: Scaffold(body: Row(children: [ColorPalettesScreen()])), )); expect(find.text('Light ColorScheme'), findsOneWidget); expect(find.text('Dark ColorScheme'), findsOneWidget); diff --git a/experimental/material_3_demo/test/component_screen_test.dart b/experimental/material_3_demo/test/component_screen_test.dart index e5f820995..b76721d5f 100644 --- a/experimental/material_3_demo/test/component_screen_test.dart +++ b/experimental/material_3_demo/test/component_screen_test.dart @@ -11,7 +11,7 @@ import 'package:material_3_demo/main.dart'; void main() { testWidgets('Default main page shows all M3 components', (tester) async { widgetSetup(tester, 800, windowHeight: 7000); - await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + await tester.pumpWidget(const App()); // Elements on the app bar expect(find.text('Material 3'), findsOneWidget); @@ -37,7 +37,8 @@ void main() { expect(find.widgetWithText(FloatingActionButton, 'Create'), findsOneWidget); // Icon buttons - expect(find.byType(IconToggleButton), findsNWidgets(8)); + expect(find.widgetWithIcon(IconButton, Icons.settings_outlined), + findsNWidgets(8)); // Segmented buttons expect(find.byType(SegmentedButton), findsOneWidget); @@ -93,6 +94,9 @@ void main() { // Tabs expect(find.byType(TabBar), findsOneWidget); + // Search + expect(find.byType(SearchBar), findsOneWidget); + // Top app bars expect(find.byType(AppBar), findsNWidgets(6)); @@ -106,6 +110,9 @@ void main() { expect(find.byType(FilterChip), findsNWidgets(2)); expect(find.byType(InputChip), findsNWidgets(2)); + // Date pickers + expect(find.widgetWithText(TextButton, 'Show date picker'), findsOneWidget); + // Menus expect(find.byType(MenuAnchor), findsNWidgets(5)); expect(find.byType(DropdownMenu), findsOneWidget); @@ -121,6 +128,9 @@ void main() { // Switches expect(find.byType(Switch), findsNWidgets(4)); + // Time pickers + expect(find.widgetWithText(TextButton, 'Show time picker'), findsOneWidget); + // TextFields expect(find.widgetWithText(TextField, 'Disabled'), findsNWidgets(2)); expect(find.widgetWithText(TextField, 'Filled'), findsNWidgets(2)); @@ -131,7 +141,7 @@ void main() { 'NavigationRail doesn\'t show when width value is small than 1000 ' '(in Portrait mode or narrow screen)', (tester) async { widgetSetup(tester, 999, windowHeight: 7000); - await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + await tester.pumpWidget(const App()); await tester.pumpAndSettle(); // When screen width is less than 1000, NavigationBar will show. At the same @@ -152,7 +162,7 @@ void main() { 'NavigationRail shows when width value is greater than or equal ' 'to 1000 (in Landscape mode or wider screen)', (tester) async { widgetSetup(tester, 1001, windowHeight: 3000); - await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + await tester.pumpWidget(const App()); await tester.pumpAndSettle(); // When screen width is greater than or equal to 1000, NavigationRail will show. @@ -178,7 +188,7 @@ void main() { 'Material version switches between Material3 and Material2 when' 'the version icon is clicked', (tester) async { widgetSetup(tester, 450, windowHeight: 7000); - await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + await tester.pumpWidget(const App()); BuildContext defaultElevatedButton = tester.firstElement(find.byType(ElevatedButton)); BuildContext defaultIconButton = @@ -244,7 +254,7 @@ void main() { testWidgets( 'Other screens become Material2 mode after changing mode from ' 'main screen', (tester) async { - await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + await tester.pumpWidget(const App()); Finder appbarM2Icon = find.descendant( of: find.byType(AppBar), matching: find.widgetWithIcon(IconButton, Icons.filter_2)); @@ -279,7 +289,7 @@ void main() { testWidgets( 'Brightness mode switches between dark and light when' 'the brightness icon is clicked', (tester) async { - await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + await tester.pumpWidget(const App()); Finder lightIcon = find.descendant( of: find.byType(AppBar), matching: find.widgetWithIcon(IconButton, Icons.light_mode_outlined)); @@ -314,7 +324,7 @@ void main() { (tester) async { Color m3BaseColor = const Color(0xff6750a4); await tester.pumpWidget(Container()); - await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + await tester.pumpWidget(const App()); await tester.pump(); Finder menuIcon = find.descendant( of: find.byType(AppBar), @@ -341,8 +351,7 @@ void main() { void widgetSetup(WidgetTester tester, double windowWidth, {double? windowHeight}) { final height = windowHeight ?? 846; - tester.binding.window.devicePixelRatioTestValue = (2); - final dpi = tester.binding.window.devicePixelRatio; - tester.binding.window.physicalSizeTestValue = - Size(windowWidth * dpi, height * dpi); + tester.view.devicePixelRatio = 2; + final dpi = tester.view.devicePixelRatio; + tester.view.physicalSize = Size(windowWidth * dpi, height * dpi); } diff --git a/experimental/material_3_demo/test/elevation_screen_test.dart b/experimental/material_3_demo/test/elevation_screen_test.dart index 737a355a6..77014efca 100644 --- a/experimental/material_3_demo/test/elevation_screen_test.dart +++ b/experimental/material_3_demo/test/elevation_screen_test.dart @@ -15,8 +15,8 @@ void main() { 'Surface Tones screen shows correctly when the corresponding icon is ' 'selected on NavigationBar', (tester) async { widgetSetup(tester, 449); - addTearDown(tester.binding.window.clearPhysicalSizeTestValue); - await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + addTearDown(tester.view.resetPhysicalSize); + await tester.pumpWidget(const App()); expect(find.text('Surface Tint Color Only'), findsNothing); expect(find.byType(NavigationBar), findsOneWidget); @@ -40,8 +40,8 @@ void main() { 'selected on NavigationRail', (tester) async { widgetSetup( tester, 1200); // NavigationRail shows only when width is > 1000. - addTearDown(tester.binding.window.clearPhysicalSizeTestValue); - await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + addTearDown(tester.view.resetPhysicalSize); + await tester.pumpWidget(const App()); expect(find.text('Surface Tint Color Only'), findsNothing); Finder tintIconOnRail = find.descendant( of: find.byType(NavigationRail), @@ -57,8 +57,8 @@ void main() { }); testWidgets('Surface Tones screen shows correct content', (tester) async { - await tester.pumpWidget(MaterialApp( - home: Scaffold(body: Row(children: const [ElevationScreen()])), + await tester.pumpWidget(const MaterialApp( + home: Scaffold(body: Row(children: [ElevationScreen()])), )); expect(find.text('Surface Tint Color Only'), findsOneWidget); expect(find.text('Surface Tint Color and Shadow Color'), findsOneWidget); diff --git a/experimental/material_3_demo/test/typography_screen_test.dart b/experimental/material_3_demo/test/typography_screen_test.dart index 234c14b3d..42c10cd2f 100644 --- a/experimental/material_3_demo/test/typography_screen_test.dart +++ b/experimental/material_3_demo/test/typography_screen_test.dart @@ -15,8 +15,8 @@ void main() { 'Typography screen shows correctly when the corresponding icon is ' 'selected on NavigationBar', (tester) async { widgetSetup(tester, 449); - addTearDown(tester.binding.window.clearPhysicalSizeTestValue); - await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + addTearDown(tester.view.resetPhysicalSize); + await tester.pumpWidget(const App()); expect(find.text('Display Large'), findsNothing); expect(find.byType(NavigationBar), findsOneWidget); @@ -39,8 +39,8 @@ void main() { 'selected on NavigationRail', (tester) async { widgetSetup( tester, 1200); // NavigationRail shows only when width is > 1000. - addTearDown(tester.binding.window.clearPhysicalSizeTestValue); - await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + addTearDown(tester.view.resetPhysicalSize); + await tester.pumpWidget(const App()); expect(find.text('Display Large'), findsNothing); Finder textIconOnRail = find.descendant( of: find.byType(NavigationRail), @@ -57,8 +57,8 @@ void main() { }); testWidgets('Typography screen shows correct content', (tester) async { - await tester.pumpWidget(MaterialApp( - home: Scaffold(body: Row(children: const [TypographyScreen()])), + await tester.pumpWidget(const MaterialApp( + home: Scaffold(body: Row(children: [TypographyScreen()])), )); expect(find.text('Display Large'), findsOneWidget); expect(find.text('Display Medium'), findsOneWidget); diff --git a/experimental/material_3_demo/web/index.html b/experimental/material_3_demo/web/index.html index 772a4875a..2168a65da 100644 --- a/experimental/material_3_demo/web/index.html +++ b/experimental/material_3_demo/web/index.html @@ -31,74 +31,29 @@ material_3_demo + + + + - diff --git a/experimental/material_3_demo/windows/CMakeLists.txt b/experimental/material_3_demo/windows/CMakeLists.txt index 327c4c996..dec9d0b6f 100644 --- a/experimental/material_3_demo/windows/CMakeLists.txt +++ b/experimental/material_3_demo/windows/CMakeLists.txt @@ -52,6 +52,7 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) # Application build; see runner/CMakeLists.txt. add_subdirectory("runner") + # Generated plugin build rules, which manage building the plugins and adding # them to the application. include(flutter/generated_plugins.cmake) diff --git a/experimental/material_3_demo/windows/runner/CMakeLists.txt b/experimental/material_3_demo/windows/runner/CMakeLists.txt index b9e550fba..394917c05 100644 --- a/experimental/material_3_demo/windows/runner/CMakeLists.txt +++ b/experimental/material_3_demo/windows/runner/CMakeLists.txt @@ -20,12 +20,20 @@ add_executable(${BINARY_NAME} WIN32 # that need different build settings. apply_standard_settings(${BINARY_NAME}) +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + # Disable Windows macros that collide with C++ standard library functions. target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") # Add dependency libraries and include directories. Add any application-specific # dependencies here. target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") # Run the Flutter tool portions of the build. This must not be removed. diff --git a/experimental/material_3_demo/windows/runner/Runner.rc b/experimental/material_3_demo/windows/runner/Runner.rc index 1b2c26782..0a24f5fd6 100644 --- a/experimental/material_3_demo/windows/runner/Runner.rc +++ b/experimental/material_3_demo/windows/runner/Runner.rc @@ -60,14 +60,14 @@ IDI_APP_ICON ICON "resources\\app_icon.ico" // Version // -#ifdef FLUTTER_BUILD_NUMBER -#define VERSION_AS_NUMBER FLUTTER_BUILD_NUMBER +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD #else -#define VERSION_AS_NUMBER 1,0,0 +#define VERSION_AS_NUMBER 1,0,0,0 #endif -#ifdef FLUTTER_BUILD_NAME -#define VERSION_AS_STRING #FLUTTER_BUILD_NAME +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION #else #define VERSION_AS_STRING "1.0.0" #endif @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "material_3_demo" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "material_3_demo" "\0" - VALUE "LegalCopyright", "Copyright (C) 2022 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2023 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "material_3_demo.exe" "\0" VALUE "ProductName", "material_3_demo" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/experimental/material_3_demo/windows/runner/flutter_window.cpp b/experimental/material_3_demo/windows/runner/flutter_window.cpp index b43b9095e..b25e363ef 100644 --- a/experimental/material_3_demo/windows/runner/flutter_window.cpp +++ b/experimental/material_3_demo/windows/runner/flutter_window.cpp @@ -26,6 +26,11 @@ bool FlutterWindow::OnCreate() { } RegisterPlugins(flutter_controller_->engine()); SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + return true; } diff --git a/experimental/material_3_demo/windows/runner/main.cpp b/experimental/material_3_demo/windows/runner/main.cpp index 9e45ce43d..8585dc232 100644 --- a/experimental/material_3_demo/windows/runner/main.cpp +++ b/experimental/material_3_demo/windows/runner/main.cpp @@ -27,7 +27,7 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, FlutterWindow window(project); Win32Window::Point origin(10, 10); Win32Window::Size size(1280, 720); - if (!window.CreateAndShow(L"material_3_demo", origin, size)) { + if (!window.Create(L"material_3_demo", origin, size)) { return EXIT_FAILURE; } window.SetQuitOnClose(true); diff --git a/experimental/material_3_demo/windows/runner/runner.exe.manifest b/experimental/material_3_demo/windows/runner/runner.exe.manifest index c977c4a42..a42ea7687 100644 --- a/experimental/material_3_demo/windows/runner/runner.exe.manifest +++ b/experimental/material_3_demo/windows/runner/runner.exe.manifest @@ -7,7 +7,7 @@ - + diff --git a/experimental/material_3_demo/windows/runner/utils.cpp b/experimental/material_3_demo/windows/runner/utils.cpp index f5bf9fa0f..b2b08734d 100644 --- a/experimental/material_3_demo/windows/runner/utils.cpp +++ b/experimental/material_3_demo/windows/runner/utils.cpp @@ -47,16 +47,17 @@ std::string Utf8FromUtf16(const wchar_t* utf16_string) { } int target_length = ::WideCharToMultiByte( CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, nullptr, 0, nullptr, nullptr); + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); std::string utf8_string; - if (target_length == 0 || target_length > utf8_string.max_size()) { + if (target_length <= 0 || target_length > utf8_string.max_size()) { return utf8_string; } utf8_string.resize(target_length); int converted_length = ::WideCharToMultiByte( CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, utf8_string.data(), - target_length, nullptr, nullptr); + input_length, utf8_string.data(), target_length, nullptr, nullptr); if (converted_length == 0) { return std::string(); } diff --git a/experimental/material_3_demo/windows/runner/win32_window.cpp b/experimental/material_3_demo/windows/runner/win32_window.cpp index c10f08dc7..60608d0fe 100644 --- a/experimental/material_3_demo/windows/runner/win32_window.cpp +++ b/experimental/material_3_demo/windows/runner/win32_window.cpp @@ -1,13 +1,31 @@ #include "win32_window.h" +#include #include #include "resource.h" namespace { +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + // The number of Win32Window objects that currently exist. static int g_active_window_count = 0; @@ -31,8 +49,8 @@ void EnableFullDpiSupportIfAvailable(HWND hwnd) { GetProcAddress(user32_module, "EnableNonClientDpiScaling")); if (enable_non_client_dpi_scaling != nullptr) { enable_non_client_dpi_scaling(hwnd); - FreeLibrary(user32_module); } + FreeLibrary(user32_module); } } // namespace @@ -42,7 +60,7 @@ class WindowClassRegistrar { public: ~WindowClassRegistrar() = default; - // Returns the singleton registar instance. + // Returns the singleton registrar instance. static WindowClassRegistrar* GetInstance() { if (!instance_) { instance_ = new WindowClassRegistrar(); @@ -102,9 +120,9 @@ Win32Window::~Win32Window() { Destroy(); } -bool Win32Window::CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size) { +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { Destroy(); const wchar_t* window_class = @@ -117,7 +135,7 @@ bool Win32Window::CreateAndShow(const std::wstring& title, double scale_factor = dpi / 96.0; HWND window = CreateWindow( - window_class, title.c_str(), WS_OVERLAPPEDWINDOW | WS_VISIBLE, + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), Scale(size.width, scale_factor), Scale(size.height, scale_factor), nullptr, nullptr, GetModuleHandle(nullptr), this); @@ -126,9 +144,15 @@ bool Win32Window::CreateAndShow(const std::wstring& title, return false; } + UpdateTheme(window); + return OnCreate(); } +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + // static LRESULT CALLBACK Win32Window::WndProc(HWND const window, UINT const message, @@ -188,6 +212,10 @@ Win32Window::MessageHandler(HWND hwnd, SetFocus(child_content_); } return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; } return DefWindowProc(window_handle_, message, wparam, lparam); @@ -243,3 +271,18 @@ bool Win32Window::OnCreate() { void Win32Window::OnDestroy() { // No-op; provided for subclasses. } + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/experimental/material_3_demo/windows/runner/win32_window.h b/experimental/material_3_demo/windows/runner/win32_window.h index 17ba43112..e901dde68 100644 --- a/experimental/material_3_demo/windows/runner/win32_window.h +++ b/experimental/material_3_demo/windows/runner/win32_window.h @@ -28,15 +28,16 @@ class Win32Window { Win32Window(); virtual ~Win32Window(); - // Creates and shows a win32 window with |title| and position and size using + // Creates a win32 window with |title| that is positioned and sized using // |origin| and |size|. New windows are created on the default monitor. Window // sizes are specified to the OS in physical pixels, hence to ensure a - // consistent size to will treat the width height passed in to this function - // as logical pixels and scale to appropriate for the default monitor. Returns - // true if the window was created successfully. - bool CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size); + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); // Release OS resources associated with window. void Destroy(); @@ -76,7 +77,7 @@ class Win32Window { // OS callback called by message pump. Handles the WM_NCCREATE message which // is passed when the non-client area is being created and enables automatic // non-client DPI scaling so that the non-client area automatically - // responsponds to changes in DPI. All other messages are handled by + // responds to changes in DPI. All other messages are handled by // MessageHandler. static LRESULT CALLBACK WndProc(HWND const window, UINT const message, @@ -86,6 +87,9 @@ class Win32Window { // Retrieves a class instance pointer for |window| static Win32Window* GetThisFromHandle(HWND const window) noexcept; + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + bool quit_on_close_ = false; // window handle for top level window. diff --git a/experimental/pedometer/.metadata b/experimental/pedometer/.metadata index 4defcaca8..795ad527a 100644 --- a/experimental/pedometer/.metadata +++ b/experimental/pedometer/.metadata @@ -15,6 +15,9 @@ migration: - platform: root create_revision: 098aac7ffeef2a1846eb3a7f14788520c8400a14 base_revision: 098aac7ffeef2a1846eb3a7f14788520c8400a14 + - platform: android + create_revision: 098aac7ffeef2a1846eb3a7f14788520c8400a14 + base_revision: 098aac7ffeef2a1846eb3a7f14788520c8400a14 - platform: ios create_revision: 098aac7ffeef2a1846eb3a7f14788520c8400a14 base_revision: 098aac7ffeef2a1846eb3a7f14788520c8400a14 diff --git a/experimental/pedometer/README.md b/experimental/pedometer/README.md index e3402143f..1612864ab 100644 --- a/experimental/pedometer/README.md +++ b/experimental/pedometer/README.md @@ -1,56 +1,93 @@ # FFIgen + JNIgen pedometer -This is a demo for some of our tooling around calling platform APIs directly from dart code. This repository represents a demo of a plugin that leverages FFIgen & JNIgen. There is also an example pedometer app that uses the bindings generated from these tools. +This is a demo for some of our tooling around +calling platform APIs directly from dart code. +This repository represents a demo of a plugin that leverages FFIgen & JNIgen. +There is also an example pedometer app that +uses the bindings generated from these tools. -- [FFIgen](https://pub.dev/packages/ffigen) is used to generate bindings for C, Objective-C and Swift APIs -- [JNIgen](https://pub.dev/packages/jnigen) is used to generate bindings for Jave and Kotlin APIs - -**These tools are both experimental and are currently a work in progress.** If you find any issues or have feedback, please file it on the corresponding Github repositories. +- [FFIgen](https://pub.dev/packages/ffigen) is used to generate + bindings for C, Objective-C and Swift APIs. +- [JNIgen](https://pub.dev/packages/jnigen) is used to generate + bindings for Java and Kotlin APIs. +**These tools are both experimental and are currently a work in progress.** +If you find any issues or have feedback, +please file it on the corresponding GitHub repositories. ## Re-generating bindings -The bindings that allow the dart code to call the platform code have already been generated [here](/lib). You can regenerate them by following the steps below. + +The bindings that allow the Dart code to call the platform code have +already been generated in the [`\lib` folder](./lib). +You can regenerate them by following the steps below: ### FFIgen -Configuration for FFIgen is [here](/ffigen.yaml) for the [CoreMotion](https://developer.apple.com/documentation/coremotion) framework. FFIgen currently does not support autogenerating the code to handle callbacks. So, there were a few steps needed to appropriately handle callbacks in Objective-C. You can [read more here](https://dart.dev/guides/libraries/objective-c-interop#callbacks-and-multithreading-limitations). -`dart run ffigen --config ffigen.yaml` +Configuration of FFIgen for the +[CoreMotion framework](https://developer.apple.com/documentation/coremotion) +is in the [`ffigen.yaml` file](./ffigen.yaml). +FFIgen currently does not support autogenerating code to handle callbacks. +So, there are a few extra steps needed to +appropriately handle callbacks in Objective-C. +You can read more about this limitation on +[dart.dev]((https://dart.dev/guides/libraries/objective-c-interop#callbacks-and-multithreading-limitations). + +```bash +dart run ffigen --config ffigen.yaml +``` + ### JNIgen -Configuration for JNIgen is [here](/jnigen.yaml) for the [HealthConnect API](https://developer.android.com/guide/health-and-fitness/health-connect). Right now, JNIgen requires an Android folder to generate the bindings so there are a few steps to regenerate: -1. `flutter create .` -2. `flutter build apk` -3. `dart run jnigen --config jnigen.yaml` -4. delete the android folder +Configuration of JNIgen for the +[HealthConnect API](https://developer.android.com/guide/health-and-fitness/health-connect) +is in the [`jnigen.yaml` file](./jnigen.yaml). +1. Build an Android APK file from the example app. + Currently, JNIgen requires at least one APK build + to obtain the classpaths of Android Gradle libraries. + + ```bash + cd example && flutter build apk + ``` + +2. Return to the `/pedometer` directory and run `jnigen`: + + ```bash + cd .. && dart run jnigen --config jnigen.yaml + ``` ## Running the example app + +The example app is located in the [`/example`](./example) directory, +and the following commands assume they are being run from that location. + Note that step counting is only available on physical devices. ### iOS -- `flutter run` -- Allow *pedometer* app access to step counting + +- Run `flutter run` and choose your physical device. +- Allow the *pedometer* app access to step counting. ### Android -- Make sure that Google Fit is installed (to ensure that steps are being counted) -- `flutter run` -- Install Health Connect and grant access to Google Fit and the *jni_demo* app +- Make sure that [Google Fit](https://play.google.com/store/apps/details?id=com.google.android.apps.fitness) + is installed (to ensure that steps are being counted). +- Run `flutter run` and choose your physical device. +- Install [Health Connect](https://play.google.com/store/apps/details?id=com.google.android.apps.healthdata) + and grant access to Google Fit and the *jni_demo* app. -## Project stucture -* `src`: Contains the native source code, and a CmakeFile.txt file for building - that source code into a dynamic library. +## Project structure + +* `src`: Contains the native source code, and a `CMakeLists.txt` file for + building that source code into a dynamic library. -* `lib`: Contains the Dart code that defines the API of the plugin, and which +* `lib`: Contains the Dart code that defines the API of the plugin and calls into the native code using `dart:ffi`. -* platform folders (`ios` etc.): Contains the build files - for building and bundling the native code library with the platform application. +* platform folders (`ios` etc.): Contain the build files for + building and bundling the native code library with the platform application. -* `example`: Contains the native source code, and a CmakeFile.txt file for building +* `example`: Contains the native source code for building that source code into a dynamic library. - - - diff --git a/experimental/pedometer/android/.gitignore b/experimental/pedometer/android/.gitignore new file mode 100644 index 000000000..161bdcdaf --- /dev/null +++ b/experimental/pedometer/android/.gitignore @@ -0,0 +1,9 @@ +*.iml +.gradle +/local.properties +/.idea/workspace.xml +/.idea/libraries +.DS_Store +/build +/captures +.cxx diff --git a/experimental/pedometer/android/build.gradle b/experimental/pedometer/android/build.gradle new file mode 100644 index 000000000..40efb86c0 --- /dev/null +++ b/experimental/pedometer/android/build.gradle @@ -0,0 +1,59 @@ +// The Android Gradle Plugin builds the native code with the Android NDK. + +group 'dev.flutter.pedometer' +version '1.0' + +buildscript { + repositories { + google() + mavenCentral() + } + + dependencies { + // The Android Gradle Plugin knows how to build native code with the NDK. + classpath 'com.android.tools.build:gradle:7.3.0' + } +} + +rootProject.allprojects { + repositories { + google() + mavenCentral() + } +} + +apply plugin: 'com.android.library' + +android { + // Bumping the plugin compileSdkVersion requires all clients of this plugin + // to bump the version in their app. + compileSdkVersion 31 + + // Bumping the plugin ndkVersion requires all clients of this plugin to bump + // the version in their app and to download a newer version of the NDK. + ndkVersion "21.4.7075529" + + // Invoke the shared CMake build with the Android Gradle Plugin. + externalNativeBuild { + cmake { + path "../src/health_connect/CMakeLists.txt" + + // The default CMake version for the Android Gradle Plugin is 3.10.2. + // https://developer.android.com/studio/projects/install-ndk#vanilla_cmake + // + // The Flutter tooling requires that developers have CMake 3.10 or later + // installed. You should not increase this version, as doing so will cause + // the plugin to fail to compile for some customers of the plugin. + // version "3.10.2" + } + } + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + defaultConfig { + minSdkVersion 16 + } +} diff --git a/experimental/pedometer/android/settings.gradle b/experimental/pedometer/android/settings.gradle new file mode 100644 index 000000000..f295a58f7 --- /dev/null +++ b/experimental/pedometer/android/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'pedometer' diff --git a/experimental/pedometer/android/src/main/AndroidManifest.xml b/experimental/pedometer/android/src/main/AndroidManifest.xml new file mode 100644 index 000000000..1a19daf14 --- /dev/null +++ b/experimental/pedometer/android/src/main/AndroidManifest.xml @@ -0,0 +1,3 @@ + + diff --git a/experimental/pedometer/classes.jar b/experimental/pedometer/classes.jar deleted file mode 100644 index c5462a88e..000000000 Binary files a/experimental/pedometer/classes.jar and /dev/null differ diff --git a/experimental/pedometer/example/README.md b/experimental/pedometer/example/README.md index 808ae6feb..c75236490 100644 --- a/experimental/pedometer/example/README.md +++ b/experimental/pedometer/example/README.md @@ -2,15 +2,4 @@ Demonstrates how to use the pedometer plugin. -## Getting Started - -This project is a starting point for a Flutter application. - -A few resources to get you started if this is your first Flutter project: - -- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) -- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) - -For help getting started with Flutter development, view the -[online documentation](https://docs.flutter.dev/), which offers tutorials, -samples, guidance on mobile development, and a full API reference. +Visit the primary [pedometer README](../README.md) for more information. diff --git a/experimental/pedometer/example/android/app/build.gradle b/experimental/pedometer/example/android/app/build.gradle index 20998ca96..d7627dcca 100644 --- a/experimental/pedometer/example/android/app/build.gradle +++ b/experimental/pedometer/example/android/app/build.gradle @@ -65,12 +65,6 @@ android { signingConfig signingConfigs.debug } } - - externalNativeBuild { - cmake { - path "../../../src/health_connect/CMakeLists.txt" - } - } } flutter { diff --git a/experimental/pedometer/example/android/build.gradle b/experimental/pedometer/example/android/build.gradle index 11f164c35..4c47d6997 100644 --- a/experimental/pedometer/example/android/build.gradle +++ b/experimental/pedometer/example/android/build.gradle @@ -26,7 +26,7 @@ subprojects { project.evaluationDependsOn(':app') } -task clean(type: Delete) { +tasks.register("clean", Delete) { delete rootProject.buildDir } diff --git a/experimental/pedometer/example/lib/main.dart b/experimental/pedometer/example/lib/main.dart index 82a754b73..705a530f6 100644 --- a/experimental/pedometer/example/lib/main.dart +++ b/experimental/pedometer/example/lib/main.dart @@ -17,6 +17,7 @@ class MyApp extends StatelessWidget { title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, + useMaterial3: true, ), home: const Home(), ); @@ -40,9 +41,7 @@ class RoundClipper extends CustomClipper { } class Home extends StatefulWidget { - const Home({ - Key? key, - }) : super(key: key); + const Home({super.key}); @override State createState() => _HomeState(); @@ -154,7 +153,7 @@ class _HomeState extends State { aspectRatio: 1.2, child: BarChart( BarChartData( - titlesData: FlTitlesData( + titlesData: const FlTitlesData( show: true, // Top titles are null topTitles: @@ -178,7 +177,7 @@ class _HomeState extends State { show: false, ), barGroups: barGroups, - gridData: FlGridData(show: false), + gridData: const FlGridData(show: false), alignment: BarChartAlignment.spaceAround, ), ), diff --git a/experimental/pedometer/example/lib/steps_repo.dart b/experimental/pedometer/example/lib/steps_repo.dart index 22da6be3c..80a21e6b8 100644 --- a/experimental/pedometer/example/lib/steps_repo.dart +++ b/experimental/pedometer/example/lib/steps_repo.dart @@ -141,22 +141,19 @@ class _AndroidStepsRepo implements StepsRepo { final end = DateTime(now.year, now.month, now.day, h + 1).millisecondsSinceEpoch; final request = hc.AggregateRequest( - hc.Set.of1( - hc.AggregateMetric.type(hc.Long.type), - hc.StepsRecord.COUNT_TOTAL, - ), + {hc.StepsRecord.COUNT_TOTAL} + .toJSet(hc.AggregateMetric.type(jni.JLong.type)), hc.TimeRangeFilter.between( hc.Instant.ofEpochMilli(start), hc.Instant.ofEpochMilli(end), ), - hc.Set.of(jni.JObject.type), + jni.JSet.hash(jni.JObject.type), ); futures.add(client.aggregate(request)); } final data = await Future.wait(futures); return data.asMap().entries.map((entry) { - final stepsLong = - entry.value.get0(hc.Long.type, hc.StepsRecord.COUNT_TOTAL); + final stepsLong = entry.value.get0(hc.StepsRecord.COUNT_TOTAL); final steps = stepsLong.isNull ? 0 : stepsLong.intValue(); return Steps(entry.key.toString().padLeft(2, '0'), steps); }).toList(); diff --git a/experimental/pedometer/example/pubspec.yaml b/experimental/pedometer/example/pubspec.yaml index 1df87eb09..8fd6ed455 100644 --- a/experimental/pedometer/example/pubspec.yaml +++ b/experimental/pedometer/example/pubspec.yaml @@ -19,7 +19,7 @@ publish_to: 'none' # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: '>=2.19.0-389.0.dev <3.0.0' + sdk: ^3.1.0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions @@ -44,12 +44,8 @@ dependencies: cupertino_icons: ^1.0.2 ffi: ^2.0.1 intl: ^0.18.0 - jni: - git: - url: https://github.com/dart-lang/jnigen - ref: suspend-fun - path: ./jni - fl_chart: ^0.55.2 + jni: ^0.7.0 + fl_chart: ^0.64.0 dev_dependencies: flutter_test: @@ -60,7 +56,7 @@ dev_dependencies: # activated in the `analysis_options.yaml` file located at the root of your # package. See that file for information about deactivating specific lint # rules and activating additional ones. - flutter_lints: ^2.0.0 + flutter_lints: ^3.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/experimental/pedometer/jnigen.yaml b/experimental/pedometer/jnigen.yaml index 3f140db9b..3d7bc151d 100644 --- a/experimental/pedometer/jnigen.yaml +++ b/experimental/pedometer/jnigen.yaml @@ -1,12 +1,7 @@ android_sdk_config: add_gradle_deps: true - -summarizer: - backend: asm - -# Experimental flag to convert suspend functions in Kotlin to Dart async -# functions. Only available in suspend-fun branch of jnigen for now. -suspend_fun_to_async: true + add_gradle_sources: true + android_example: 'example/' output: c: @@ -16,8 +11,6 @@ output: path: lib/health_connect.dart structure: single_file -class_path: - - 'classes.jar' classes: - 'androidx.health.connect.client.HealthConnectClient' - 'androidx.health.connect.client.PermissionController' @@ -27,8 +20,6 @@ classes: - 'android.content.Intent' - 'android.app.Activity' - 'java.time.Instant' - - 'java.lang.Long' - - 'java.util.Set' - 'androidx.health.connect.client.request' - 'androidx.health.connect.client.aggregate.AggregationResult' - 'androidx.health.connect.client.aggregate.AggregateMetric' diff --git a/experimental/pedometer/lib/health_connect.dart b/experimental/pedometer/lib/health_connect.dart index ea44f7dce..15600018c 100644 --- a/experimental/pedometer/lib/health_connect.dart +++ b/experimental/pedometer/lib/health_connect.dart @@ -10,7 +10,10 @@ // ignore_for_file: overridden_fields // ignore_for_file: unnecessary_cast // ignore_for_file: unused_element +// ignore_for_file: unused_field // ignore_for_file: unused_import +// ignore_for_file: unused_local_variable +// ignore_for_file: unused_shown_name import "dart:isolate" show ReceivePort; import "dart:ffi" as ffi; @@ -22,44 +25,161 @@ import "package:jni/jni.dart" as jni; final ffi.Pointer Function(String sym) jniLookup = ProtectedJniExtensions.initGeneratedLibrary("health_connect"); +/// from: androidx.health.connect.client.HealthConnectClient$Companion +class HealthConnectClient_Companion extends jni.JObject { + @override + late final jni.JObjType $type = type; + + HealthConnectClient_Companion.fromRef(super.ref) : super.fromRef(); + + /// The type which includes information such as the signature of this class. + static const type = $HealthConnectClient_CompanionType(); + + /// from: static public final java.lang.String DEFAULT_PROVIDER_PACKAGE_NAME + static const DEFAULT_PROVIDER_PACKAGE_NAME = + r"""com.google.android.apps.healthdata"""; + + /// from: static public final java.lang.String HEALTH_CONNECT_CLIENT_TAG + static const HEALTH_CONNECT_CLIENT_TAG = r"""HealthConnectClient"""; + + static final _isAvailable = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>( + "HealthConnectClient_Companion__isAvailable") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public final boolean isAvailable(android.content.Context context, java.util.List list) + bool isAvailable( + Context context, + jni.JList list, + ) { + return _isAvailable(reference, context.reference, list.reference).boolean; + } + + static final _getOrCreate = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>( + "HealthConnectClient_Companion__getOrCreate") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public final androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context, java.util.List list) + /// The returned object must be released after use, by calling the [release] method. + HealthConnectClient getOrCreate( + Context context, + jni.JList list, + ) { + return const $HealthConnectClientType().fromRef( + _getOrCreate(reference, context.reference, list.reference).object); + } + + static final _isAvailable1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>>( + "HealthConnectClient_Companion__isAvailable1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public final boolean isAvailable(android.content.Context context) + bool isAvailable1( + Context context, + ) { + return _isAvailable1(reference, context.reference).boolean; + } + + static final _getOrCreate1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>>( + "HealthConnectClient_Companion__getOrCreate1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public final androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context) + /// The returned object must be released after use, by calling the [release] method. + HealthConnectClient getOrCreate1( + Context context, + ) { + return const $HealthConnectClientType() + .fromRef(_getOrCreate1(reference, context.reference).object); + } +} + +class $HealthConnectClient_CompanionType + extends jni.JObjType { + const $HealthConnectClient_CompanionType(); + + @override + String get signature => + r"Landroidx/health/connect/client/HealthConnectClient$Companion;"; + + @override + HealthConnectClient_Companion fromRef(jni.JObjectPtr ref) => + HealthConnectClient_Companion.fromRef(ref); + + @override + jni.JObjType get superType => const jni.JObjectType(); + + @override + final superCount = 1; + + @override + int get hashCode => ($HealthConnectClient_CompanionType).hashCode; + + @override + bool operator ==(Object other) { + return other.runtimeType == ($HealthConnectClient_CompanionType) && + other is $HealthConnectClient_CompanionType; + } +} + /// from: androidx.health.connect.client.HealthConnectClient class HealthConnectClient extends jni.JObject { - late final jni.JObjType? _$type; @override - jni.JObjType get $type => _$type ??= type; + late final jni.JObjType $type = type; - HealthConnectClient.fromRef( - jni.JObjectPtr ref, - ) : super.fromRef(ref); + HealthConnectClient.fromRef(super.ref) : super.fromRef(); /// The type which includes information such as the signature of this class. static const type = $HealthConnectClientType(); - static final _get_Companion = jniLookup>( "get_HealthConnectClient__Companion") .asFunction(); /// from: static public final androidx.health.connect.client.HealthConnectClient$Companion Companion - /// The returned object must be deleted after use, by calling the `delete` method. - static jni.JObject get Companion => - const jni.JObjectType().fromRef(_get_Companion().object); + /// The returned object must be released after use, by calling the [release] method. + static HealthConnectClient_Companion get Companion => + const $HealthConnectClient_CompanionType() + .fromRef(_get_Companion().object); /// from: static public final java.lang.String DEFAULT_PROVIDER_PACKAGE_NAME static const DEFAULT_PROVIDER_PACKAGE_NAME = - "com.google.android.apps.healthdata"; + r"""com.google.android.apps.healthdata"""; + + /// from: static public final java.lang.String HEALTH_CONNECT_CLIENT_TAG + static const HEALTH_CONNECT_CLIENT_TAG = r"""HealthConnectClient"""; static final _getPermissionController = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>( + ffi + .NativeFunction)>>( "HealthConnectClient__getPermissionController") .asFunction)>(); /// from: public abstract androidx.health.connect.client.PermissionController getPermissionController() - /// The returned object must be deleted after use, by calling the `delete` method. - PermissionController getPermissionController() => - const $PermissionControllerType() - .fromRef(_getPermissionController(reference).object); + /// The returned object must be released after use, by calling the [release] method. + PermissionController getPermissionController() { + return const $PermissionControllerType() + .fromRef(_getPermissionController(reference).object); + } static final _insertRecords = jniLookup< ffi.NativeFunction< @@ -72,14 +192,17 @@ class HealthConnectClient extends jni.JObject { ffi.Pointer)>(); /// from: public abstract java.lang.Object insertRecords(java.util.List list, kotlin.coroutines.Continuation continuation) - /// The returned object must be deleted after use, by calling the `delete` method. - Future insertRecords(jni.JObject list) async { + /// The returned object must be released after use, by calling the [release] method. + Future insertRecords( + jni.JList list, + ) async { final $p = ReceivePort(); - final $c = jni.Jni.newPortContinuation($p); - _insertRecords(reference, list.reference, $c).object; - final $o = ffi.Pointer.fromAddress(await $p.first); + final $c = + jni.JObject.fromRef(ProtectedJniExtensions.newPortContinuation($p)); + _insertRecords(reference, list.reference, $c.reference).object; + final $o = jni.JObjectPtr.fromAddress(await $p.first); final $k = const jni.JObjectType().getClass().reference; - if (jni.Jni.env.IsInstanceOf($o, $k) == 0) { + if (!jni.Jni.env.IsInstanceOf($o, $k)) { throw "Failed"; } return const jni.JObjectType().fromRef($o); @@ -96,14 +219,17 @@ class HealthConnectClient extends jni.JObject { ffi.Pointer)>(); /// from: public abstract java.lang.Object updateRecords(java.util.List list, kotlin.coroutines.Continuation continuation) - /// The returned object must be deleted after use, by calling the `delete` method. - Future updateRecords(jni.JObject list) async { + /// The returned object must be released after use, by calling the [release] method. + Future updateRecords( + jni.JList list, + ) async { final $p = ReceivePort(); - final $c = jni.Jni.newPortContinuation($p); - _updateRecords(reference, list.reference, $c).object; - final $o = ffi.Pointer.fromAddress(await $p.first); + final $c = + jni.JObject.fromRef(ProtectedJniExtensions.newPortContinuation($p)); + _updateRecords(reference, list.reference, $c.reference).object; + final $o = jni.JObjectPtr.fromAddress(await $p.first); final $k = const jni.JObjectType().getClass().reference; - if (jni.Jni.env.IsInstanceOf($o, $k) == 0) { + if (!jni.Jni.env.IsInstanceOf($o, $k)) { throw "Failed"; } return const jni.JObjectType().fromRef($o); @@ -126,17 +252,21 @@ class HealthConnectClient extends jni.JObject { ffi.Pointer)>(); /// from: public abstract java.lang.Object deleteRecords(kotlin.reflect.KClass kClass, java.util.List list, java.util.List list1, kotlin.coroutines.Continuation continuation) - /// The returned object must be deleted after use, by calling the `delete` method. + /// The returned object must be released after use, by calling the [release] method. Future deleteRecords( - jni.JObject kClass, jni.JObject list, jni.JObject list1) async { + jni.JObject kClass, + jni.JList list, + jni.JList list1, + ) async { final $p = ReceivePort(); - final $c = jni.Jni.newPortContinuation($p); - _deleteRecords( - reference, kClass.reference, list.reference, list1.reference, $c) + final $c = + jni.JObject.fromRef(ProtectedJniExtensions.newPortContinuation($p)); + _deleteRecords(reference, kClass.reference, list.reference, list1.reference, + $c.reference) .object; - final $o = ffi.Pointer.fromAddress(await $p.first); + final $o = jni.JObjectPtr.fromAddress(await $p.first); final $k = const jni.JObjectType().getClass().reference; - if (jni.Jni.env.IsInstanceOf($o, $k) == 0) { + if (!jni.Jni.env.IsInstanceOf($o, $k)) { throw "Failed"; } return const jni.JObjectType().fromRef($o); @@ -155,16 +285,20 @@ class HealthConnectClient extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public abstract java.lang.Object deleteRecords(kotlin.reflect.KClass kClass, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, kotlin.coroutines.Continuation continuation) - /// The returned object must be deleted after use, by calling the `delete` method. + /// The returned object must be released after use, by calling the [release] method. Future deleteRecords1( - jni.JObject kClass, TimeRangeFilter timeRangeFilter) async { + jni.JObject kClass, + TimeRangeFilter timeRangeFilter, + ) async { final $p = ReceivePort(); - final $c = jni.Jni.newPortContinuation($p); - _deleteRecords1(reference, kClass.reference, timeRangeFilter.reference, $c) + final $c = + jni.JObject.fromRef(ProtectedJniExtensions.newPortContinuation($p)); + _deleteRecords1(reference, kClass.reference, timeRangeFilter.reference, + $c.reference) .object; - final $o = ffi.Pointer.fromAddress(await $p.first); + final $o = jni.JObjectPtr.fromAddress(await $p.first); final $k = const jni.JObjectType().getClass().reference; - if (jni.Jni.env.IsInstanceOf($o, $k) == 0) { + if (!jni.Jni.env.IsInstanceOf($o, $k)) { throw "Failed"; } return const jni.JObjectType().fromRef($o); @@ -182,15 +316,20 @@ class HealthConnectClient extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public abstract java.lang.Object readRecord(kotlin.reflect.KClass kClass, java.lang.String string, kotlin.coroutines.Continuation continuation) - /// The returned object must be deleted after use, by calling the `delete` method. - Future readRecord( - jni.JObjType $T, jni.JObject kClass, jni.JString string) async { + /// The returned object must be released after use, by calling the [release] method. + Future readRecord<$T extends jni.JObject>( + jni.JObject kClass, + jni.JString string, { + required jni.JObjType<$T> T, + }) async { final $p = ReceivePort(); - final $c = jni.Jni.newPortContinuation($p); - _readRecord(reference, kClass.reference, string.reference, $c).object; - final $o = ffi.Pointer.fromAddress(await $p.first); + final $c = + jni.JObject.fromRef(ProtectedJniExtensions.newPortContinuation($p)); + _readRecord(reference, kClass.reference, string.reference, $c.reference) + .object; + final $o = jni.JObjectPtr.fromAddress(await $p.first); final $k = const jni.JObjectType().getClass().reference; - if (jni.Jni.env.IsInstanceOf($o, $k) == 0) { + if (!jni.Jni.env.IsInstanceOf($o, $k)) { throw "Failed"; } return const jni.JObjectType().fromRef($o); @@ -207,15 +346,21 @@ class HealthConnectClient extends jni.JObject { ffi.Pointer)>(); /// from: public abstract java.lang.Object readRecords(androidx.health.connect.client.request.ReadRecordsRequest readRecordsRequest, kotlin.coroutines.Continuation continuation) - /// The returned object must be deleted after use, by calling the `delete` method. - Future readRecords( - jni.JObjType $T, ReadRecordsRequest readRecordsRequest) async { + /// The returned object must be released after use, by calling the [release] method. + Future readRecords<$T extends jni.JObject>( + ReadRecordsRequest<$T> readRecordsRequest, { + jni.JObjType<$T>? T, + }) async { + T ??= jni.lowestCommonSuperType([ + (readRecordsRequest.$type as $ReadRecordsRequestType).T, + ]) as jni.JObjType<$T>; final $p = ReceivePort(); - final $c = jni.Jni.newPortContinuation($p); - _readRecords(reference, readRecordsRequest.reference, $c).object; - final $o = ffi.Pointer.fromAddress(await $p.first); + final $c = + jni.JObject.fromRef(ProtectedJniExtensions.newPortContinuation($p)); + _readRecords(reference, readRecordsRequest.reference, $c.reference).object; + final $o = jni.JObjectPtr.fromAddress(await $p.first); final $k = const jni.JObjectType().getClass().reference; - if (jni.Jni.env.IsInstanceOf($o, $k) == 0) { + if (!jni.Jni.env.IsInstanceOf($o, $k)) { throw "Failed"; } return const jni.JObjectType().fromRef($o); @@ -232,14 +377,17 @@ class HealthConnectClient extends jni.JObject { ffi.Pointer)>(); /// from: public abstract java.lang.Object aggregate(androidx.health.connect.client.request.AggregateRequest aggregateRequest, kotlin.coroutines.Continuation continuation) - /// The returned object must be deleted after use, by calling the `delete` method. - Future aggregate(AggregateRequest aggregateRequest) async { + /// The returned object must be released after use, by calling the [release] method. + Future aggregate( + AggregateRequest aggregateRequest, + ) async { final $p = ReceivePort(); - final $c = jni.Jni.newPortContinuation($p); - _aggregate(reference, aggregateRequest.reference, $c).object; - final $o = ffi.Pointer.fromAddress(await $p.first); + final $c = + jni.JObject.fromRef(ProtectedJniExtensions.newPortContinuation($p)); + _aggregate(reference, aggregateRequest.reference, $c.reference).object; + final $o = jni.JObjectPtr.fromAddress(await $p.first); final $k = const $AggregationResultType().getClass().reference; - if (jni.Jni.env.IsInstanceOf($o, $k) == 0) { + if (!jni.Jni.env.IsInstanceOf($o, $k)) { throw "Failed"; } return const $AggregationResultType().fromRef($o); @@ -255,20 +403,22 @@ class HealthConnectClient extends jni.JObject { ffi.Pointer)>(); /// from: public abstract java.lang.Object aggregateGroupByDuration(androidx.health.connect.client.request.AggregateGroupByDurationRequest aggregateGroupByDurationRequest, kotlin.coroutines.Continuation continuation) - /// The returned object must be deleted after use, by calling the `delete` method. - Future aggregateGroupByDuration( - AggregateGroupByDurationRequest aggregateGroupByDurationRequest) async { + /// The returned object must be released after use, by calling the [release] method. + Future> aggregateGroupByDuration( + AggregateGroupByDurationRequest aggregateGroupByDurationRequest, + ) async { final $p = ReceivePort(); - final $c = jni.Jni.newPortContinuation($p); + final $c = + jni.JObject.fromRef(ProtectedJniExtensions.newPortContinuation($p)); _aggregateGroupByDuration( - reference, aggregateGroupByDurationRequest.reference, $c) + reference, aggregateGroupByDurationRequest.reference, $c.reference) .object; - final $o = ffi.Pointer.fromAddress(await $p.first); - final $k = const jni.JObjectType().getClass().reference; - if (jni.Jni.env.IsInstanceOf($o, $k) == 0) { + final $o = jni.JObjectPtr.fromAddress(await $p.first); + final $k = const jni.JListType(jni.JObjectType()).getClass().reference; + if (!jni.Jni.env.IsInstanceOf($o, $k)) { throw "Failed"; } - return const jni.JObjectType().fromRef($o); + return const jni.JListType(jni.JObjectType()).fromRef($o); } static final _aggregateGroupByPeriod = jniLookup< @@ -281,20 +431,22 @@ class HealthConnectClient extends jni.JObject { ffi.Pointer)>(); /// from: public abstract java.lang.Object aggregateGroupByPeriod(androidx.health.connect.client.request.AggregateGroupByPeriodRequest aggregateGroupByPeriodRequest, kotlin.coroutines.Continuation continuation) - /// The returned object must be deleted after use, by calling the `delete` method. - Future aggregateGroupByPeriod( - AggregateGroupByPeriodRequest aggregateGroupByPeriodRequest) async { + /// The returned object must be released after use, by calling the [release] method. + Future> aggregateGroupByPeriod( + AggregateGroupByPeriodRequest aggregateGroupByPeriodRequest, + ) async { final $p = ReceivePort(); - final $c = jni.Jni.newPortContinuation($p); + final $c = + jni.JObject.fromRef(ProtectedJniExtensions.newPortContinuation($p)); _aggregateGroupByPeriod( - reference, aggregateGroupByPeriodRequest.reference, $c) + reference, aggregateGroupByPeriodRequest.reference, $c.reference) .object; - final $o = ffi.Pointer.fromAddress(await $p.first); - final $k = const jni.JObjectType().getClass().reference; - if (jni.Jni.env.IsInstanceOf($o, $k) == 0) { + final $o = jni.JObjectPtr.fromAddress(await $p.first); + final $k = const jni.JListType(jni.JObjectType()).getClass().reference; + if (!jni.Jni.env.IsInstanceOf($o, $k)) { throw "Failed"; } - return const jni.JObjectType().fromRef($o); + return const jni.JListType(jni.JObjectType()).fromRef($o); } static final _getChangesToken = jniLookup< @@ -307,20 +459,82 @@ class HealthConnectClient extends jni.JObject { ffi.Pointer)>(); /// from: public abstract java.lang.Object getChangesToken(androidx.health.connect.client.request.ChangesTokenRequest changesTokenRequest, kotlin.coroutines.Continuation continuation) - /// The returned object must be deleted after use, by calling the `delete` method. + /// The returned object must be released after use, by calling the [release] method. Future getChangesToken( - ChangesTokenRequest changesTokenRequest) async { + ChangesTokenRequest changesTokenRequest, + ) async { final $p = ReceivePort(); - final $c = jni.Jni.newPortContinuation($p); - _getChangesToken(reference, changesTokenRequest.reference, $c).object; - final $o = ffi.Pointer.fromAddress(await $p.first); + final $c = + jni.JObject.fromRef(ProtectedJniExtensions.newPortContinuation($p)); + _getChangesToken(reference, changesTokenRequest.reference, $c.reference) + .object; + final $o = jni.JObjectPtr.fromAddress(await $p.first); final $k = const jni.JStringType().getClass().reference; - if (jni.Jni.env.IsInstanceOf($o, $k) == 0) { + if (!jni.Jni.env.IsInstanceOf($o, $k)) { throw "Failed"; } return const jni.JStringType().fromRef($o); } + static final _registerForDataNotifications = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>( + "HealthConnectClient__registerForDataNotifications") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); + + /// from: public abstract java.lang.Object registerForDataNotifications(java.lang.String string, java.lang.Iterable iterable, kotlin.coroutines.Continuation continuation) + /// The returned object must be released after use, by calling the [release] method. + Future registerForDataNotifications( + jni.JString string, + jni.JObject iterable, + ) async { + final $p = ReceivePort(); + final $c = + jni.JObject.fromRef(ProtectedJniExtensions.newPortContinuation($p)); + _registerForDataNotifications( + reference, string.reference, iterable.reference, $c.reference) + .object; + final $o = jni.JObjectPtr.fromAddress(await $p.first); + final $k = const jni.JObjectType().getClass().reference; + if (!jni.Jni.env.IsInstanceOf($o, $k)) { + throw "Failed"; + } + return const jni.JObjectType().fromRef($o); + } + + static final _unregisterFromDataNotifications = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer, ffi.Pointer)>>( + "HealthConnectClient__unregisterFromDataNotifications") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer)>(); + + /// from: public abstract java.lang.Object unregisterFromDataNotifications(java.lang.String string, kotlin.coroutines.Continuation continuation) + /// The returned object must be released after use, by calling the [release] method. + Future unregisterFromDataNotifications( + jni.JString string, + ) async { + final $p = ReceivePort(); + final $c = + jni.JObject.fromRef(ProtectedJniExtensions.newPortContinuation($p)); + _unregisterFromDataNotifications(reference, string.reference, $c.reference) + .object; + final $o = jni.JObjectPtr.fromAddress(await $p.first); + final $k = const jni.JObjectType().getClass().reference; + if (!jni.Jni.env.IsInstanceOf($o, $k)) { + throw "Failed"; + } + return const jni.JObjectType().fromRef($o); + } + static final _getChanges = jniLookup< ffi.NativeFunction< jni.JniResult Function( @@ -332,14 +546,17 @@ class HealthConnectClient extends jni.JObject { ffi.Pointer)>(); /// from: public abstract java.lang.Object getChanges(java.lang.String string, kotlin.coroutines.Continuation continuation) - /// The returned object must be deleted after use, by calling the `delete` method. - Future getChanges(jni.JString string) async { + /// The returned object must be released after use, by calling the [release] method. + Future getChanges( + jni.JString string, + ) async { final $p = ReceivePort(); - final $c = jni.Jni.newPortContinuation($p); - _getChanges(reference, string.reference, $c).object; - final $o = ffi.Pointer.fromAddress(await $p.first); + final $c = + jni.JObject.fromRef(ProtectedJniExtensions.newPortContinuation($p)); + _getChanges(reference, string.reference, $c.reference).object; + final $o = jni.JObjectPtr.fromAddress(await $p.first); final $k = const jni.JObjectType().getClass().reference; - if (jni.Jni.env.IsInstanceOf($o, $k) == 0) { + if (!jni.Jni.env.IsInstanceOf($o, $k)) { throw "Failed"; } return const jni.JObjectType().fromRef($o); @@ -354,8 +571,12 @@ class HealthConnectClient extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: static public boolean isAvailable(android.content.Context context, java.util.List list) - static bool isAvailable(Context context, jni.JObject list) => - _isAvailable(context.reference, list.reference).boolean; + static bool isAvailable( + Context context, + jni.JList list, + ) { + return _isAvailable(context.reference, list.reference).boolean; + } static final _getOrCreate = jniLookup< ffi.NativeFunction< @@ -366,32 +587,42 @@ class HealthConnectClient extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: static public androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context, java.util.List list) - /// The returned object must be deleted after use, by calling the `delete` method. - static HealthConnectClient getOrCreate(Context context, jni.JObject list) => - const $HealthConnectClientType() - .fromRef(_getOrCreate(context.reference, list.reference).object); + /// The returned object must be released after use, by calling the [release] method. + static HealthConnectClient getOrCreate( + Context context, + jni.JList list, + ) { + return const $HealthConnectClientType() + .fromRef(_getOrCreate(context.reference, list.reference).object); + } static final _isAvailable1 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("HealthConnectClient__isAvailable1") + ffi + .NativeFunction)>>( + "HealthConnectClient__isAvailable1") .asFunction)>(); /// from: static public boolean isAvailable(android.content.Context context) - static bool isAvailable1(Context context) => - _isAvailable1(context.reference).boolean; + static bool isAvailable1( + Context context, + ) { + return _isAvailable1(context.reference).boolean; + } static final _getOrCreate1 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("HealthConnectClient__getOrCreate1") + ffi + .NativeFunction)>>( + "HealthConnectClient__getOrCreate1") .asFunction)>(); /// from: static public androidx.health.connect.client.HealthConnectClient getOrCreate(android.content.Context context) - /// The returned object must be deleted after use, by calling the `delete` method. - static HealthConnectClient getOrCreate1(Context context) => - const $HealthConnectClientType() - .fromRef(_getOrCreate1(context.reference).object); + /// The returned object must be released after use, by calling the [release] method. + static HealthConnectClient getOrCreate1( + Context context, + ) { + return const $HealthConnectClientType() + .fromRef(_getOrCreate1(context.reference).object); + } } class $HealthConnectClientType extends jni.JObjType { @@ -404,43 +635,112 @@ class $HealthConnectClientType extends jni.JObjType { @override HealthConnectClient fromRef(jni.JObjectPtr ref) => HealthConnectClient.fromRef(ref); + + @override + jni.JObjType get superType => const jni.JObjectType(); + + @override + final superCount = 1; + + @override + int get hashCode => ($HealthConnectClientType).hashCode; + + @override + bool operator ==(Object other) { + return other.runtimeType == ($HealthConnectClientType) && + other is $HealthConnectClientType; + } } -extension $HealthConnectClientArray on jni.JArray { - HealthConnectClient operator [](int index) { - return (elementType as $HealthConnectClientType) - .fromRef(elementAt(index, jni.JniCallType.objectType).object); +/// from: androidx.health.connect.client.PermissionController$Companion +class PermissionController_Companion extends jni.JObject { + @override + late final jni.JObjType $type = type; + + PermissionController_Companion.fromRef(super.ref) : super.fromRef(); + + /// The type which includes information such as the signature of this class. + static const type = $PermissionController_CompanionType(); + static final _createRequestPermissionResultContract = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>>( + "PermissionController_Companion__createRequestPermissionResultContract") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); + + /// from: public final androidx.activity.result.contract.ActivityResultContract createRequestPermissionResultContract(java.lang.String string) + /// The returned object must be released after use, by calling the [release] method. + jni.JObject createRequestPermissionResultContract( + jni.JString string, + ) { + return const jni.JObjectType().fromRef( + _createRequestPermissionResultContract(reference, string.reference) + .object); + } + + static final _createRequestPermissionResultContract1 = jniLookup< + ffi + .NativeFunction)>>( + "PermissionController_Companion__createRequestPermissionResultContract1") + .asFunction)>(); + + /// from: public final androidx.activity.result.contract.ActivityResultContract createRequestPermissionResultContract() + /// The returned object must be released after use, by calling the [release] method. + jni.JObject createRequestPermissionResultContract1() { + return const jni.JObjectType() + .fromRef(_createRequestPermissionResultContract1(reference).object); } +} + +class $PermissionController_CompanionType + extends jni.JObjType { + const $PermissionController_CompanionType(); + + @override + String get signature => + r"Landroidx/health/connect/client/PermissionController$Companion;"; + + @override + PermissionController_Companion fromRef(jni.JObjectPtr ref) => + PermissionController_Companion.fromRef(ref); - void operator []=(int index, HealthConnectClient value) { - (this as jni.JArray)[index] = value; + @override + jni.JObjType get superType => const jni.JObjectType(); + + @override + final superCount = 1; + + @override + int get hashCode => ($PermissionController_CompanionType).hashCode; + + @override + bool operator ==(Object other) { + return other.runtimeType == ($PermissionController_CompanionType) && + other is $PermissionController_CompanionType; } } /// from: androidx.health.connect.client.PermissionController class PermissionController extends jni.JObject { - late final jni.JObjType? _$type; @override - jni.JObjType get $type => _$type ??= type; + late final jni.JObjType $type = type; - PermissionController.fromRef( - jni.JObjectPtr ref, - ) : super.fromRef(ref); + PermissionController.fromRef(super.ref) : super.fromRef(); /// The type which includes information such as the signature of this class. static const type = $PermissionControllerType(); + static final _get_Companion = + jniLookup>( + "get_PermissionController__Companion") + .asFunction(); - static final _createRequestPermissionActivityContract = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>( - "PermissionController__createRequestPermissionActivityContract") - .asFunction)>(); - - /// from: public abstract androidx.activity.result.contract.ActivityResultContract createRequestPermissionActivityContract() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject createRequestPermissionActivityContract() => - const jni.JObjectType() - .fromRef(_createRequestPermissionActivityContract(reference).object); + /// from: static public final androidx.health.connect.client.PermissionController$Companion Companion + /// The returned object must be released after use, by calling the [release] method. + static PermissionController_Companion get Companion => + const $PermissionController_CompanionType() + .fromRef(_get_Companion().object); static final _getGrantedPermissions = jniLookup< ffi.NativeFunction< @@ -452,17 +752,20 @@ class PermissionController extends jni.JObject { ffi.Pointer)>(); /// from: public abstract java.lang.Object getGrantedPermissions(java.util.Set set, kotlin.coroutines.Continuation continuation) - /// The returned object must be deleted after use, by calling the `delete` method. - Future> getGrantedPermissions(Set set0) async { + /// The returned object must be released after use, by calling the [release] method. + Future> getGrantedPermissions( + jni.JSet set0, + ) async { final $p = ReceivePort(); - final $c = jni.Jni.newPortContinuation($p); - _getGrantedPermissions(reference, set0.reference, $c).object; - final $o = ffi.Pointer.fromAddress(await $p.first); - final $k = const $SetType(jni.JObjectType()).getClass().reference; - if (jni.Jni.env.IsInstanceOf($o, $k) == 0) { + final $c = + jni.JObject.fromRef(ProtectedJniExtensions.newPortContinuation($p)); + _getGrantedPermissions(reference, set0.reference, $c.reference).object; + final $o = jni.JObjectPtr.fromAddress(await $p.first); + final $k = const jni.JSetType(jni.JObjectType()).getClass().reference; + if (!jni.Jni.env.IsInstanceOf($o, $k)) { throw "Failed"; } - return const $SetType(jni.JObjectType()).fromRef($o); + return const jni.JSetType(jni.JObjectType()).fromRef($o); } static final _revokeAllPermissions = jniLookup< @@ -475,18 +778,46 @@ class PermissionController extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public abstract java.lang.Object revokeAllPermissions(kotlin.coroutines.Continuation continuation) - /// The returned object must be deleted after use, by calling the `delete` method. + /// The returned object must be released after use, by calling the [release] method. Future revokeAllPermissions() async { final $p = ReceivePort(); - final $c = jni.Jni.newPortContinuation($p); - _revokeAllPermissions(reference, $c).object; - final $o = ffi.Pointer.fromAddress(await $p.first); + final $c = + jni.JObject.fromRef(ProtectedJniExtensions.newPortContinuation($p)); + _revokeAllPermissions(reference, $c.reference).object; + final $o = jni.JObjectPtr.fromAddress(await $p.first); final $k = const jni.JObjectType().getClass().reference; - if (jni.Jni.env.IsInstanceOf($o, $k) == 0) { + if (!jni.Jni.env.IsInstanceOf($o, $k)) { throw "Failed"; } return const jni.JObjectType().fromRef($o); } + + static final _createRequestPermissionResultContract = jniLookup< + ffi + .NativeFunction)>>( + "PermissionController__createRequestPermissionResultContract") + .asFunction)>(); + + /// from: static public androidx.activity.result.contract.ActivityResultContract createRequestPermissionResultContract(java.lang.String string) + /// The returned object must be released after use, by calling the [release] method. + static jni.JObject createRequestPermissionResultContract( + jni.JString string, + ) { + return const jni.JObjectType().fromRef( + _createRequestPermissionResultContract(string.reference).object); + } + + static final _createRequestPermissionResultContract1 = + jniLookup>( + "PermissionController__createRequestPermissionResultContract1") + .asFunction(); + + /// from: static public androidx.activity.result.contract.ActivityResultContract createRequestPermissionResultContract() + /// The returned object must be released after use, by calling the [release] method. + static jni.JObject createRequestPermissionResultContract1() { + return const jni.JObjectType() + .fromRef(_createRequestPermissionResultContract1().object); + } } class $PermissionControllerType extends jni.JObjType { @@ -499,41 +830,93 @@ class $PermissionControllerType extends jni.JObjType { @override PermissionController fromRef(jni.JObjectPtr ref) => PermissionController.fromRef(ref); + + @override + jni.JObjType get superType => const jni.JObjectType(); + + @override + final superCount = 1; + + @override + int get hashCode => ($PermissionControllerType).hashCode; + + @override + bool operator ==(Object other) { + return other.runtimeType == ($PermissionControllerType) && + other is $PermissionControllerType; + } } -extension $PermissionControllerArray on jni.JArray { - PermissionController operator [](int index) { - return (elementType as $PermissionControllerType) - .fromRef(elementAt(index, jni.JniCallType.objectType).object); +/// from: androidx.health.connect.client.records.StepsRecord$Companion +class StepsRecord_Companion extends jni.JObject { + @override + late final jni.JObjType $type = type; + + StepsRecord_Companion.fromRef(super.ref) : super.fromRef(); + + /// The type which includes information such as the signature of this class. + static const type = $StepsRecord_CompanionType(); + static final _new0 = jniLookup< + ffi + .NativeFunction)>>( + "StepsRecord_Companion__new0") + .asFunction)>(); + + /// from: public void (kotlin.jvm.internal.DefaultConstructorMarker defaultConstructorMarker) + /// The returned object must be released after use, by calling the [release] method. + factory StepsRecord_Companion( + jni.JObject defaultConstructorMarker, + ) { + return StepsRecord_Companion.fromRef( + _new0(defaultConstructorMarker.reference).object); } +} + +class $StepsRecord_CompanionType extends jni.JObjType { + const $StepsRecord_CompanionType(); + + @override + String get signature => + r"Landroidx/health/connect/client/records/StepsRecord$Companion;"; + + @override + StepsRecord_Companion fromRef(jni.JObjectPtr ref) => + StepsRecord_Companion.fromRef(ref); + + @override + jni.JObjType get superType => const jni.JObjectType(); + + @override + final superCount = 1; + + @override + int get hashCode => ($StepsRecord_CompanionType).hashCode; - void operator []=(int index, PermissionController value) { - (this as jni.JArray)[index] = value; + @override + bool operator ==(Object other) { + return other.runtimeType == ($StepsRecord_CompanionType) && + other is $StepsRecord_CompanionType; } } /// from: androidx.health.connect.client.records.StepsRecord class StepsRecord extends jni.JObject { - late final jni.JObjType? _$type; @override - jni.JObjType get $type => _$type ??= type; + late final jni.JObjType $type = type; - StepsRecord.fromRef( - jni.JObjectPtr ref, - ) : super.fromRef(ref); + StepsRecord.fromRef(super.ref) : super.fromRef(); /// The type which includes information such as the signature of this class. static const type = $StepsRecordType(); - static final _get_Companion = jniLookup>( "get_StepsRecord__Companion") .asFunction(); /// from: static public final androidx.health.connect.client.records.StepsRecord$Companion Companion - /// The returned object must be deleted after use, by calling the `delete` method. - static jni.JObject get Companion => - const jni.JObjectType().fromRef(_get_Companion().object); + /// The returned object must be released after use, by calling the [release] method. + static StepsRecord_Companion get Companion => + const $StepsRecord_CompanionType().fromRef(_get_Companion().object); static final _get_COUNT_TOTAL = jniLookup>( @@ -541,12 +924,12 @@ class StepsRecord extends jni.JObject { .asFunction(); /// from: static public final androidx.health.connect.client.aggregate.AggregateMetric COUNT_TOTAL - /// The returned object must be deleted after use, by calling the `delete` method. - static AggregateMetric get COUNT_TOTAL => - const $AggregateMetricType($LongType()) + /// The returned object must be released after use, by calling the [release] method. + static AggregateMetric get COUNT_TOTAL => + const $AggregateMetricType(jni.JLongType()) .fromRef(_get_COUNT_TOTAL().object); - static final _ctor = jniLookup< + static final _new0 = jniLookup< ffi.NativeFunction< jni.JniResult Function( ffi.Int64, @@ -554,7 +937,7 @@ class StepsRecord extends jni.JObject { ffi.Pointer, ffi.Pointer, ffi.Pointer, - ffi.Pointer)>>("StepsRecord__ctor") + ffi.Pointer)>>("StepsRecord__new0") .asFunction< jni.JniResult Function( int, @@ -565,13 +948,21 @@ class StepsRecord extends jni.JObject { ffi.Pointer)>(); /// from: public void (long j, java.time.Instant instant, java.time.ZoneOffset zoneOffset, java.time.Instant instant1, java.time.ZoneOffset zoneOffset1, androidx.health.connect.client.records.metadata.Metadata metadata) - StepsRecord(int j, Instant instant, jni.JObject zoneOffset, Instant instant1, - jni.JObject zoneOffset1, jni.JObject metadata) - : super.fromRef(_ctor(j, instant.reference, zoneOffset.reference, - instant1.reference, zoneOffset1.reference, metadata.reference) - .object); + /// The returned object must be released after use, by calling the [release] method. + factory StepsRecord( + int j, + Instant instant, + jni.JObject zoneOffset, + Instant instant1, + jni.JObject zoneOffset1, + jni.JObject metadata, + ) { + return StepsRecord.fromRef(_new0(j, instant.reference, zoneOffset.reference, + instant1.reference, zoneOffset1.reference, metadata.reference) + .object); + } - static final _ctor1 = jniLookup< + static final _new1 = jniLookup< ffi.NativeFunction< jni.JniResult Function( ffi.Int64, @@ -581,7 +972,7 @@ class StepsRecord extends jni.JObject { ffi.Pointer, ffi.Pointer, ffi.Int32, - ffi.Pointer)>>("StepsRecord__ctor1") + ffi.Pointer)>>("StepsRecord__new1") .asFunction< jni.JniResult Function( int, @@ -594,89 +985,100 @@ class StepsRecord extends jni.JObject { ffi.Pointer)>(); /// from: public void (long j, java.time.Instant instant, java.time.ZoneOffset zoneOffset, java.time.Instant instant1, java.time.ZoneOffset zoneOffset1, androidx.health.connect.client.records.metadata.Metadata metadata, int i, kotlin.jvm.internal.DefaultConstructorMarker defaultConstructorMarker) - StepsRecord.ctor1( - int j, - Instant instant, - jni.JObject zoneOffset, - Instant instant1, - jni.JObject zoneOffset1, - jni.JObject metadata, - int i, - jni.JObject defaultConstructorMarker) - : super.fromRef(_ctor1( - j, - instant.reference, - zoneOffset.reference, - instant1.reference, - zoneOffset1.reference, - metadata.reference, - i, - defaultConstructorMarker.reference) - .object); + /// The returned object must be released after use, by calling the [release] method. + factory StepsRecord.new1( + int j, + Instant instant, + jni.JObject zoneOffset, + Instant instant1, + jni.JObject zoneOffset1, + jni.JObject metadata, + int i, + jni.JObject defaultConstructorMarker, + ) { + return StepsRecord.fromRef(_new1( + j, + instant.reference, + zoneOffset.reference, + instant1.reference, + zoneOffset1.reference, + metadata.reference, + i, + defaultConstructorMarker.reference) + .object); + } static final _getCount = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("StepsRecord__getCount") + ffi + .NativeFunction)>>( + "StepsRecord__getCount") .asFunction)>(); /// from: public final long getCount() - int getCount() => _getCount(reference).long; + int getCount() { + return _getCount(reference).long; + } static final _getStartTime = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("StepsRecord__getStartTime") + ffi + .NativeFunction)>>( + "StepsRecord__getStartTime") .asFunction)>(); /// from: public java.time.Instant getStartTime() - /// The returned object must be deleted after use, by calling the `delete` method. - Instant getStartTime() => - const $InstantType().fromRef(_getStartTime(reference).object); + /// The returned object must be released after use, by calling the [release] method. + Instant getStartTime() { + return const $InstantType().fromRef(_getStartTime(reference).object); + } static final _getStartZoneOffset = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("StepsRecord__getStartZoneOffset") + ffi + .NativeFunction)>>( + "StepsRecord__getStartZoneOffset") .asFunction)>(); /// from: public java.time.ZoneOffset getStartZoneOffset() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getStartZoneOffset() => - const jni.JObjectType().fromRef(_getStartZoneOffset(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getStartZoneOffset() { + return const jni.JObjectType() + .fromRef(_getStartZoneOffset(reference).object); + } static final _getEndTime = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("StepsRecord__getEndTime") + ffi + .NativeFunction)>>( + "StepsRecord__getEndTime") .asFunction)>(); /// from: public java.time.Instant getEndTime() - /// The returned object must be deleted after use, by calling the `delete` method. - Instant getEndTime() => - const $InstantType().fromRef(_getEndTime(reference).object); + /// The returned object must be released after use, by calling the [release] method. + Instant getEndTime() { + return const $InstantType().fromRef(_getEndTime(reference).object); + } static final _getEndZoneOffset = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("StepsRecord__getEndZoneOffset") + ffi + .NativeFunction)>>( + "StepsRecord__getEndZoneOffset") .asFunction)>(); /// from: public java.time.ZoneOffset getEndZoneOffset() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getEndZoneOffset() => - const jni.JObjectType().fromRef(_getEndZoneOffset(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getEndZoneOffset() { + return const jni.JObjectType().fromRef(_getEndZoneOffset(reference).object); + } static final _getMetadata = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("StepsRecord__getMetadata") + ffi + .NativeFunction)>>( + "StepsRecord__getMetadata") .asFunction)>(); /// from: public androidx.health.connect.client.records.metadata.Metadata getMetadata() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getMetadata() => - const jni.JObjectType().fromRef(_getMetadata(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getMetadata() { + return const jni.JObjectType().fromRef(_getMetadata(reference).object); + } static final _equals1 = jniLookup< ffi.NativeFunction< @@ -687,17 +1089,22 @@ class StepsRecord extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public boolean equals(java.lang.Object object) - bool equals1(jni.JObject object) => - _equals1(reference, object.reference).boolean; + bool equals1( + jni.JObject object, + ) { + return _equals1(reference, object.reference).boolean; + } static final _hashCode1 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("StepsRecord__hashCode1") + ffi + .NativeFunction)>>( + "StepsRecord__hashCode1") .asFunction)>(); /// from: public int hashCode() - int hashCode1() => _hashCode1(reference).integer; + int hashCode1() { + return _hashCode1(reference).integer; + } } class $StepsRecordType extends jni.JObjType { @@ -709,32 +1116,31 @@ class $StepsRecordType extends jni.JObjType { @override StepsRecord fromRef(jni.JObjectPtr ref) => StepsRecord.fromRef(ref); -} -extension $StepsRecordArray on jni.JArray { - StepsRecord operator [](int index) { - return (elementType as $StepsRecordType) - .fromRef(elementAt(index, jni.JniCallType.objectType).object); - } + @override + jni.JObjType get superType => const jni.JObjectType(); - void operator []=(int index, StepsRecord value) { - (this as jni.JArray)[index] = value; - } -} + @override + final superCount = 1; + + @override + int get hashCode => ($StepsRecordType).hashCode; + + @override + bool operator ==(Object other) { + return other.runtimeType == ($StepsRecordType) && other is $StepsRecordType; + } +} /// from: androidx.health.connect.client.time.TimeRangeFilter$Companion class TimeRangeFilter_Companion extends jni.JObject { - late final jni.JObjType? _$type; @override - jni.JObjType get $type => _$type ??= type; + late final jni.JObjType $type = type; - TimeRangeFilter_Companion.fromRef( - jni.JObjectPtr ref, - ) : super.fromRef(ref); + TimeRangeFilter_Companion.fromRef(super.ref) : super.fromRef(); /// The type which includes information such as the signature of this class. static const type = $TimeRangeFilter_CompanionType(); - static final _between = jniLookup< ffi.NativeFunction< jni.JniResult Function( @@ -746,10 +1152,14 @@ class TimeRangeFilter_Companion extends jni.JObject { ffi.Pointer)>(); /// from: public final androidx.health.connect.client.time.TimeRangeFilter between(java.time.Instant instant, java.time.Instant instant1) - /// The returned object must be deleted after use, by calling the `delete` method. - TimeRangeFilter between(Instant instant, Instant instant1) => - const $TimeRangeFilterType().fromRef( - _between(reference, instant.reference, instant1.reference).object); + /// The returned object must be released after use, by calling the [release] method. + TimeRangeFilter between( + Instant instant, + Instant instant1, + ) { + return const $TimeRangeFilterType().fromRef( + _between(reference, instant.reference, instant1.reference).object); + } static final _between1 = jniLookup< ffi.NativeFunction< @@ -761,12 +1171,15 @@ class TimeRangeFilter_Companion extends jni.JObject { ffi.Pointer)>(); /// from: public final androidx.health.connect.client.time.TimeRangeFilter between(java.time.LocalDateTime localDateTime, java.time.LocalDateTime localDateTime1) - /// The returned object must be deleted after use, by calling the `delete` method. + /// The returned object must be released after use, by calling the [release] method. TimeRangeFilter between1( - jni.JObject localDateTime, jni.JObject localDateTime1) => - const $TimeRangeFilterType().fromRef(_between1( - reference, localDateTime.reference, localDateTime1.reference) - .object); + jni.JObject localDateTime, + jni.JObject localDateTime1, + ) { + return const $TimeRangeFilterType().fromRef( + _between1(reference, localDateTime.reference, localDateTime1.reference) + .object); + } static final _before = jniLookup< ffi.NativeFunction< @@ -777,9 +1190,13 @@ class TimeRangeFilter_Companion extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public final androidx.health.connect.client.time.TimeRangeFilter before(java.time.Instant instant) - /// The returned object must be deleted after use, by calling the `delete` method. - TimeRangeFilter before(Instant instant) => const $TimeRangeFilterType() - .fromRef(_before(reference, instant.reference).object); + /// The returned object must be released after use, by calling the [release] method. + TimeRangeFilter before( + Instant instant, + ) { + return const $TimeRangeFilterType() + .fromRef(_before(reference, instant.reference).object); + } static final _before1 = jniLookup< ffi.NativeFunction< @@ -790,10 +1207,13 @@ class TimeRangeFilter_Companion extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public final androidx.health.connect.client.time.TimeRangeFilter before(java.time.LocalDateTime localDateTime) - /// The returned object must be deleted after use, by calling the `delete` method. - TimeRangeFilter before1(jni.JObject localDateTime) => - const $TimeRangeFilterType() - .fromRef(_before1(reference, localDateTime.reference).object); + /// The returned object must be released after use, by calling the [release] method. + TimeRangeFilter before1( + jni.JObject localDateTime, + ) { + return const $TimeRangeFilterType() + .fromRef(_before1(reference, localDateTime.reference).object); + } static final _after = jniLookup< ffi.NativeFunction< @@ -804,9 +1224,13 @@ class TimeRangeFilter_Companion extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public final androidx.health.connect.client.time.TimeRangeFilter after(java.time.Instant instant) - /// The returned object must be deleted after use, by calling the `delete` method. - TimeRangeFilter after(Instant instant) => const $TimeRangeFilterType() - .fromRef(_after(reference, instant.reference).object); + /// The returned object must be released after use, by calling the [release] method. + TimeRangeFilter after( + Instant instant, + ) { + return const $TimeRangeFilterType() + .fromRef(_after(reference, instant.reference).object); + } static final _after1 = jniLookup< ffi.NativeFunction< @@ -817,20 +1241,28 @@ class TimeRangeFilter_Companion extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public final androidx.health.connect.client.time.TimeRangeFilter after(java.time.LocalDateTime localDateTime) - /// The returned object must be deleted after use, by calling the `delete` method. - TimeRangeFilter after1(jni.JObject localDateTime) => - const $TimeRangeFilterType() - .fromRef(_after1(reference, localDateTime.reference).object); + /// The returned object must be released after use, by calling the [release] method. + TimeRangeFilter after1( + jni.JObject localDateTime, + ) { + return const $TimeRangeFilterType() + .fromRef(_after1(reference, localDateTime.reference).object); + } - static final _ctor = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("TimeRangeFilter_Companion__ctor") + static final _new0 = jniLookup< + ffi + .NativeFunction)>>( + "TimeRangeFilter_Companion__new0") .asFunction)>(); /// from: public void (kotlin.jvm.internal.DefaultConstructorMarker defaultConstructorMarker) - TimeRangeFilter_Companion(jni.JObject defaultConstructorMarker) - : super.fromRef(_ctor(defaultConstructorMarker.reference).object); + /// The returned object must be released after use, by calling the [release] method. + factory TimeRangeFilter_Companion( + jni.JObject defaultConstructorMarker, + ) { + return TimeRangeFilter_Companion.fromRef( + _new0(defaultConstructorMarker.reference).object); + } } class $TimeRangeFilter_CompanionType @@ -844,62 +1276,67 @@ class $TimeRangeFilter_CompanionType @override TimeRangeFilter_Companion fromRef(jni.JObjectPtr ref) => TimeRangeFilter_Companion.fromRef(ref); -} -extension $TimeRangeFilter_CompanionArray - on jni.JArray { - TimeRangeFilter_Companion operator [](int index) { - return (elementType as $TimeRangeFilter_CompanionType) - .fromRef(elementAt(index, jni.JniCallType.objectType).object); - } + @override + jni.JObjType get superType => const jni.JObjectType(); + + @override + final superCount = 1; + + @override + int get hashCode => ($TimeRangeFilter_CompanionType).hashCode; - void operator []=(int index, TimeRangeFilter_Companion value) { - (this as jni.JArray)[index] = value; + @override + bool operator ==(Object other) { + return other.runtimeType == ($TimeRangeFilter_CompanionType) && + other is $TimeRangeFilter_CompanionType; } } /// from: androidx.health.connect.client.time.TimeRangeFilter class TimeRangeFilter extends jni.JObject { - late final jni.JObjType? _$type; @override - jni.JObjType get $type => _$type ??= type; + late final jni.JObjType $type = type; - TimeRangeFilter.fromRef( - jni.JObjectPtr ref, - ) : super.fromRef(ref); + TimeRangeFilter.fromRef(super.ref) : super.fromRef(); /// The type which includes information such as the signature of this class. static const type = $TimeRangeFilterType(); - static final _get_Companion = jniLookup>( "get_TimeRangeFilter__Companion") .asFunction(); /// from: static public final androidx.health.connect.client.time.TimeRangeFilter$Companion Companion - /// The returned object must be deleted after use, by calling the `delete` method. + /// The returned object must be released after use, by calling the [release] method. static TimeRangeFilter_Companion get Companion => const $TimeRangeFilter_CompanionType().fromRef(_get_Companion().object); - static final _ctor = jniLookup< + static final _new0 = jniLookup< ffi.NativeFunction< jni.JniResult Function( ffi.Pointer, ffi.Pointer, ffi.Pointer, - ffi.Pointer)>>("TimeRangeFilter__ctor") + ffi.Pointer)>>("TimeRangeFilter__new0") .asFunction< jni.JniResult Function(ffi.Pointer, ffi.Pointer, ffi.Pointer, ffi.Pointer)>(); /// from: public void (java.time.Instant instant, java.time.Instant instant1, java.time.LocalDateTime localDateTime, java.time.LocalDateTime localDateTime1) - TimeRangeFilter(Instant instant, Instant instant1, jni.JObject localDateTime, - jni.JObject localDateTime1) - : super.fromRef(_ctor(instant.reference, instant1.reference, - localDateTime.reference, localDateTime1.reference) - .object); + /// The returned object must be released after use, by calling the [release] method. + factory TimeRangeFilter( + Instant instant, + Instant instant1, + jni.JObject localDateTime, + jni.JObject localDateTime1, + ) { + return TimeRangeFilter.fromRef(_new0(instant.reference, instant1.reference, + localDateTime.reference, localDateTime1.reference) + .object); + } - static final _ctor1 = jniLookup< + static final _new1 = jniLookup< ffi.NativeFunction< jni.JniResult Function( ffi.Pointer, @@ -907,7 +1344,7 @@ class TimeRangeFilter extends jni.JObject { ffi.Pointer, ffi.Pointer, ffi.Int32, - ffi.Pointer)>>("TimeRangeFilter__ctor1") + ffi.Pointer)>>("TimeRangeFilter__new1") .asFunction< jni.JniResult Function( ffi.Pointer, @@ -918,21 +1355,24 @@ class TimeRangeFilter extends jni.JObject { ffi.Pointer)>(); /// from: public void (java.time.Instant instant, java.time.Instant instant1, java.time.LocalDateTime localDateTime, java.time.LocalDateTime localDateTime1, int i, kotlin.jvm.internal.DefaultConstructorMarker defaultConstructorMarker) - TimeRangeFilter.ctor1( - Instant instant, - Instant instant1, - jni.JObject localDateTime, - jni.JObject localDateTime1, - int i, - jni.JObject defaultConstructorMarker) - : super.fromRef(_ctor1( - instant.reference, - instant1.reference, - localDateTime.reference, - localDateTime1.reference, - i, - defaultConstructorMarker.reference) - .object); + /// The returned object must be released after use, by calling the [release] method. + factory TimeRangeFilter.new1( + Instant instant, + Instant instant1, + jni.JObject localDateTime, + jni.JObject localDateTime1, + int i, + jni.JObject defaultConstructorMarker, + ) { + return TimeRangeFilter.fromRef(_new1( + instant.reference, + instant1.reference, + localDateTime.reference, + localDateTime1.reference, + i, + defaultConstructorMarker.reference) + .object); + } static final _equals1 = jniLookup< ffi.NativeFunction< @@ -943,24 +1383,32 @@ class TimeRangeFilter extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public boolean equals(java.lang.Object object) - bool equals1(jni.JObject object) => - _equals1(reference, object.reference).boolean; + bool equals1( + jni.JObject object, + ) { + return _equals1(reference, object.reference).boolean; + } static final _hashCode1 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("TimeRangeFilter__hashCode1") + ffi + .NativeFunction)>>( + "TimeRangeFilter__hashCode1") .asFunction)>(); /// from: public int hashCode() - int hashCode1() => _hashCode1(reference).integer; + int hashCode1() { + return _hashCode1(reference).integer; + } - static final _ctor2 = jniLookup>( - "TimeRangeFilter__ctor2") + static final _new2 = jniLookup>( + "TimeRangeFilter__new2") .asFunction(); /// from: public void () - TimeRangeFilter.ctor2() : super.fromRef(_ctor2().object); + /// The returned object must be released after use, by calling the [release] method. + factory TimeRangeFilter.new2() { + return TimeRangeFilter.fromRef(_new2().object); + } static final _between = jniLookup< ffi.NativeFunction< @@ -971,10 +1419,14 @@ class TimeRangeFilter extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: static public final androidx.health.connect.client.time.TimeRangeFilter between(java.time.Instant instant, java.time.Instant instant1) - /// The returned object must be deleted after use, by calling the `delete` method. - static TimeRangeFilter between(Instant instant, Instant instant1) => - const $TimeRangeFilterType() - .fromRef(_between(instant.reference, instant1.reference).object); + /// The returned object must be released after use, by calling the [release] method. + static TimeRangeFilter between( + Instant instant, + Instant instant1, + ) { + return const $TimeRangeFilterType() + .fromRef(_between(instant.reference, instant1.reference).object); + } static final _between1 = jniLookup< ffi.NativeFunction< @@ -985,57 +1437,74 @@ class TimeRangeFilter extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: static public final androidx.health.connect.client.time.TimeRangeFilter between(java.time.LocalDateTime localDateTime, java.time.LocalDateTime localDateTime1) - /// The returned object must be deleted after use, by calling the `delete` method. + /// The returned object must be released after use, by calling the [release] method. static TimeRangeFilter between1( - jni.JObject localDateTime, jni.JObject localDateTime1) => - const $TimeRangeFilterType().fromRef( - _between1(localDateTime.reference, localDateTime1.reference).object); + jni.JObject localDateTime, + jni.JObject localDateTime1, + ) { + return const $TimeRangeFilterType().fromRef( + _between1(localDateTime.reference, localDateTime1.reference).object); + } static final _before = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("TimeRangeFilter__before") + ffi + .NativeFunction)>>( + "TimeRangeFilter__before") .asFunction)>(); /// from: static public final androidx.health.connect.client.time.TimeRangeFilter before(java.time.Instant instant) - /// The returned object must be deleted after use, by calling the `delete` method. - static TimeRangeFilter before(Instant instant) => - const $TimeRangeFilterType().fromRef(_before(instant.reference).object); + /// The returned object must be released after use, by calling the [release] method. + static TimeRangeFilter before( + Instant instant, + ) { + return const $TimeRangeFilterType() + .fromRef(_before(instant.reference).object); + } static final _before1 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("TimeRangeFilter__before1") + ffi + .NativeFunction)>>( + "TimeRangeFilter__before1") .asFunction)>(); /// from: static public final androidx.health.connect.client.time.TimeRangeFilter before(java.time.LocalDateTime localDateTime) - /// The returned object must be deleted after use, by calling the `delete` method. - static TimeRangeFilter before1(jni.JObject localDateTime) => - const $TimeRangeFilterType() - .fromRef(_before1(localDateTime.reference).object); + /// The returned object must be released after use, by calling the [release] method. + static TimeRangeFilter before1( + jni.JObject localDateTime, + ) { + return const $TimeRangeFilterType() + .fromRef(_before1(localDateTime.reference).object); + } static final _after = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("TimeRangeFilter__after") + ffi + .NativeFunction)>>( + "TimeRangeFilter__after") .asFunction)>(); /// from: static public final androidx.health.connect.client.time.TimeRangeFilter after(java.time.Instant instant) - /// The returned object must be deleted after use, by calling the `delete` method. - static TimeRangeFilter after(Instant instant) => - const $TimeRangeFilterType().fromRef(_after(instant.reference).object); + /// The returned object must be released after use, by calling the [release] method. + static TimeRangeFilter after( + Instant instant, + ) { + return const $TimeRangeFilterType() + .fromRef(_after(instant.reference).object); + } static final _after1 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("TimeRangeFilter__after1") + ffi + .NativeFunction)>>( + "TimeRangeFilter__after1") .asFunction)>(); /// from: static public final androidx.health.connect.client.time.TimeRangeFilter after(java.time.LocalDateTime localDateTime) - /// The returned object must be deleted after use, by calling the `delete` method. - static TimeRangeFilter after1(jni.JObject localDateTime) => - const $TimeRangeFilterType() - .fromRef(_after1(localDateTime.reference).object); + /// The returned object must be released after use, by calling the [release] method. + static TimeRangeFilter after1( + jni.JObject localDateTime, + ) { + return const $TimeRangeFilterType() + .fromRef(_after1(localDateTime.reference).object); + } } class $TimeRangeFilterType extends jni.JObjType { @@ -1047,58 +1516,59 @@ class $TimeRangeFilterType extends jni.JObjType { @override TimeRangeFilter fromRef(jni.JObjectPtr ref) => TimeRangeFilter.fromRef(ref); -} -extension $TimeRangeFilterArray on jni.JArray { - TimeRangeFilter operator [](int index) { - return (elementType as $TimeRangeFilterType) - .fromRef(elementAt(index, jni.JniCallType.objectType).object); - } + @override + jni.JObjType get superType => const jni.JObjectType(); + + @override + final superCount = 1; - void operator []=(int index, TimeRangeFilter value) { - (this as jni.JArray)[index] = value; + @override + int get hashCode => ($TimeRangeFilterType).hashCode; + + @override + bool operator ==(Object other) { + return other.runtimeType == ($TimeRangeFilterType) && + other is $TimeRangeFilterType; } } /// from: android.content.Context class Context extends jni.JObject { - late final jni.JObjType? _$type; @override - jni.JObjType get $type => _$type ??= type; + late final jni.JObjType $type = type; - Context.fromRef( - jni.JObjectPtr ref, - ) : super.fromRef(ref); + Context.fromRef(super.ref) : super.fromRef(); /// The type which includes information such as the signature of this class. static const type = $ContextType(); /// from: static public final java.lang.String ACCESSIBILITY_SERVICE - static const ACCESSIBILITY_SERVICE = "accessibility"; + static const ACCESSIBILITY_SERVICE = r"""accessibility"""; /// from: static public final java.lang.String ACCOUNT_SERVICE - static const ACCOUNT_SERVICE = "account"; + static const ACCOUNT_SERVICE = r"""account"""; /// from: static public final java.lang.String ACTIVITY_SERVICE - static const ACTIVITY_SERVICE = "activity"; + static const ACTIVITY_SERVICE = r"""activity"""; /// from: static public final java.lang.String ALARM_SERVICE - static const ALARM_SERVICE = "alarm"; + static const ALARM_SERVICE = r"""alarm"""; /// from: static public final java.lang.String APPWIDGET_SERVICE - static const APPWIDGET_SERVICE = "appwidget"; + static const APPWIDGET_SERVICE = r"""appwidget"""; /// from: static public final java.lang.String APP_OPS_SERVICE - static const APP_OPS_SERVICE = "appops"; + static const APP_OPS_SERVICE = r"""appops"""; /// from: static public final java.lang.String APP_SEARCH_SERVICE - static const APP_SEARCH_SERVICE = "app_search"; + static const APP_SEARCH_SERVICE = r"""app_search"""; /// from: static public final java.lang.String AUDIO_SERVICE - static const AUDIO_SERVICE = "audio"; + static const AUDIO_SERVICE = r"""audio"""; /// from: static public final java.lang.String BATTERY_SERVICE - static const BATTERY_SERVICE = "batterymanager"; + static const BATTERY_SERVICE = r"""batterymanager"""; /// from: static public final int BIND_ABOVE_CLIENT static const BIND_ABOVE_CLIENT = 8; @@ -1134,40 +1604,41 @@ class Context extends jni.JObject { static const BIND_WAIVE_PRIORITY = 32; /// from: static public final java.lang.String BIOMETRIC_SERVICE - static const BIOMETRIC_SERVICE = "biometric"; + static const BIOMETRIC_SERVICE = r"""biometric"""; /// from: static public final java.lang.String BLOB_STORE_SERVICE - static const BLOB_STORE_SERVICE = "blob_store"; + static const BLOB_STORE_SERVICE = r"""blob_store"""; /// from: static public final java.lang.String BLUETOOTH_SERVICE - static const BLUETOOTH_SERVICE = "bluetooth"; + static const BLUETOOTH_SERVICE = r"""bluetooth"""; /// from: static public final java.lang.String BUGREPORT_SERVICE - static const BUGREPORT_SERVICE = "bugreport"; + static const BUGREPORT_SERVICE = r"""bugreport"""; /// from: static public final java.lang.String CAMERA_SERVICE - static const CAMERA_SERVICE = "camera"; + static const CAMERA_SERVICE = r"""camera"""; /// from: static public final java.lang.String CAPTIONING_SERVICE - static const CAPTIONING_SERVICE = "captioning"; + static const CAPTIONING_SERVICE = r"""captioning"""; /// from: static public final java.lang.String CARRIER_CONFIG_SERVICE - static const CARRIER_CONFIG_SERVICE = "carrier_config"; + static const CARRIER_CONFIG_SERVICE = r"""carrier_config"""; /// from: static public final java.lang.String CLIPBOARD_SERVICE - static const CLIPBOARD_SERVICE = "clipboard"; + static const CLIPBOARD_SERVICE = r"""clipboard"""; /// from: static public final java.lang.String COMPANION_DEVICE_SERVICE - static const COMPANION_DEVICE_SERVICE = "companiondevice"; + static const COMPANION_DEVICE_SERVICE = r"""companiondevice"""; /// from: static public final java.lang.String CONNECTIVITY_DIAGNOSTICS_SERVICE - static const CONNECTIVITY_DIAGNOSTICS_SERVICE = "connectivity_diagnostics"; + static const CONNECTIVITY_DIAGNOSTICS_SERVICE = + r"""connectivity_diagnostics"""; /// from: static public final java.lang.String CONNECTIVITY_SERVICE - static const CONNECTIVITY_SERVICE = "connectivity"; + static const CONNECTIVITY_SERVICE = r"""connectivity"""; /// from: static public final java.lang.String CONSUMER_IR_SERVICE - static const CONSUMER_IR_SERVICE = "consumer_ir"; + static const CONSUMER_IR_SERVICE = r"""consumer_ir"""; /// from: static public final int CONTEXT_IGNORE_SECURITY static const CONTEXT_IGNORE_SECURITY = 2; @@ -1179,85 +1650,85 @@ class Context extends jni.JObject { static const CONTEXT_RESTRICTED = 4; /// from: static public final java.lang.String CROSS_PROFILE_APPS_SERVICE - static const CROSS_PROFILE_APPS_SERVICE = "crossprofileapps"; + static const CROSS_PROFILE_APPS_SERVICE = r"""crossprofileapps"""; /// from: static public final java.lang.String DEVICE_POLICY_SERVICE - static const DEVICE_POLICY_SERVICE = "device_policy"; + static const DEVICE_POLICY_SERVICE = r"""device_policy"""; /// from: static public final java.lang.String DISPLAY_HASH_SERVICE - static const DISPLAY_HASH_SERVICE = "display_hash"; + static const DISPLAY_HASH_SERVICE = r"""display_hash"""; /// from: static public final java.lang.String DISPLAY_SERVICE - static const DISPLAY_SERVICE = "display"; + static const DISPLAY_SERVICE = r"""display"""; /// from: static public final java.lang.String DOMAIN_VERIFICATION_SERVICE - static const DOMAIN_VERIFICATION_SERVICE = "domain_verification"; + static const DOMAIN_VERIFICATION_SERVICE = r"""domain_verification"""; /// from: static public final java.lang.String DOWNLOAD_SERVICE - static const DOWNLOAD_SERVICE = "download"; + static const DOWNLOAD_SERVICE = r"""download"""; /// from: static public final java.lang.String DROPBOX_SERVICE - static const DROPBOX_SERVICE = "dropbox"; + static const DROPBOX_SERVICE = r"""dropbox"""; /// from: static public final java.lang.String EUICC_SERVICE - static const EUICC_SERVICE = "euicc"; + static const EUICC_SERVICE = r"""euicc"""; /// from: static public final java.lang.String FILE_INTEGRITY_SERVICE - static const FILE_INTEGRITY_SERVICE = "file_integrity"; + static const FILE_INTEGRITY_SERVICE = r"""file_integrity"""; /// from: static public final java.lang.String FINGERPRINT_SERVICE - static const FINGERPRINT_SERVICE = "fingerprint"; + static const FINGERPRINT_SERVICE = r"""fingerprint"""; /// from: static public final java.lang.String GAME_SERVICE - static const GAME_SERVICE = "game"; + static const GAME_SERVICE = r"""game"""; /// from: static public final java.lang.String HARDWARE_PROPERTIES_SERVICE - static const HARDWARE_PROPERTIES_SERVICE = "hardware_properties"; + static const HARDWARE_PROPERTIES_SERVICE = r"""hardware_properties"""; /// from: static public final java.lang.String INPUT_METHOD_SERVICE - static const INPUT_METHOD_SERVICE = "input_method"; + static const INPUT_METHOD_SERVICE = r"""input_method"""; /// from: static public final java.lang.String INPUT_SERVICE - static const INPUT_SERVICE = "input"; + static const INPUT_SERVICE = r"""input"""; /// from: static public final java.lang.String IPSEC_SERVICE - static const IPSEC_SERVICE = "ipsec"; + static const IPSEC_SERVICE = r"""ipsec"""; /// from: static public final java.lang.String JOB_SCHEDULER_SERVICE - static const JOB_SCHEDULER_SERVICE = "jobscheduler"; + static const JOB_SCHEDULER_SERVICE = r"""jobscheduler"""; /// from: static public final java.lang.String KEYGUARD_SERVICE - static const KEYGUARD_SERVICE = "keyguard"; + static const KEYGUARD_SERVICE = r"""keyguard"""; /// from: static public final java.lang.String LAUNCHER_APPS_SERVICE - static const LAUNCHER_APPS_SERVICE = "launcherapps"; + static const LAUNCHER_APPS_SERVICE = r"""launcherapps"""; /// from: static public final java.lang.String LAYOUT_INFLATER_SERVICE - static const LAYOUT_INFLATER_SERVICE = "layout_inflater"; + static const LAYOUT_INFLATER_SERVICE = r"""layout_inflater"""; /// from: static public final java.lang.String LOCALE_SERVICE - static const LOCALE_SERVICE = "locale"; + static const LOCALE_SERVICE = r"""locale"""; /// from: static public final java.lang.String LOCATION_SERVICE - static const LOCATION_SERVICE = "location"; + static const LOCATION_SERVICE = r"""location"""; /// from: static public final java.lang.String MEDIA_COMMUNICATION_SERVICE - static const MEDIA_COMMUNICATION_SERVICE = "media_communication"; + static const MEDIA_COMMUNICATION_SERVICE = r"""media_communication"""; /// from: static public final java.lang.String MEDIA_METRICS_SERVICE - static const MEDIA_METRICS_SERVICE = "media_metrics"; + static const MEDIA_METRICS_SERVICE = r"""media_metrics"""; /// from: static public final java.lang.String MEDIA_PROJECTION_SERVICE - static const MEDIA_PROJECTION_SERVICE = "media_projection"; + static const MEDIA_PROJECTION_SERVICE = r"""media_projection"""; /// from: static public final java.lang.String MEDIA_ROUTER_SERVICE - static const MEDIA_ROUTER_SERVICE = "media_router"; + static const MEDIA_ROUTER_SERVICE = r"""media_router"""; /// from: static public final java.lang.String MEDIA_SESSION_SERVICE - static const MEDIA_SESSION_SERVICE = "media_session"; + static const MEDIA_SESSION_SERVICE = r"""media_session"""; /// from: static public final java.lang.String MIDI_SERVICE - static const MIDI_SERVICE = "midi"; + static const MIDI_SERVICE = r"""midi"""; /// from: static public final int MODE_APPEND static const MODE_APPEND = 32768; @@ -1281,28 +1752,28 @@ class Context extends jni.JObject { static const MODE_WORLD_WRITEABLE = 2; /// from: static public final java.lang.String NETWORK_STATS_SERVICE - static const NETWORK_STATS_SERVICE = "netstats"; + static const NETWORK_STATS_SERVICE = r"""netstats"""; /// from: static public final java.lang.String NFC_SERVICE - static const NFC_SERVICE = "nfc"; + static const NFC_SERVICE = r"""nfc"""; /// from: static public final java.lang.String NOTIFICATION_SERVICE - static const NOTIFICATION_SERVICE = "notification"; + static const NOTIFICATION_SERVICE = r"""notification"""; /// from: static public final java.lang.String NSD_SERVICE - static const NSD_SERVICE = "servicediscovery"; + static const NSD_SERVICE = r"""servicediscovery"""; /// from: static public final java.lang.String PEOPLE_SERVICE - static const PEOPLE_SERVICE = "people"; + static const PEOPLE_SERVICE = r"""people"""; /// from: static public final java.lang.String PERFORMANCE_HINT_SERVICE - static const PERFORMANCE_HINT_SERVICE = "performance_hint"; + static const PERFORMANCE_HINT_SERVICE = r"""performance_hint"""; /// from: static public final java.lang.String POWER_SERVICE - static const POWER_SERVICE = "power"; + static const POWER_SERVICE = r"""power"""; /// from: static public final java.lang.String PRINT_SERVICE - static const PRINT_SERVICE = "print"; + static const PRINT_SERVICE = r"""print"""; /// from: static public final int RECEIVER_EXPORTED static const RECEIVER_EXPORTED = 2; @@ -1314,179 +1785,192 @@ class Context extends jni.JObject { static const RECEIVER_VISIBLE_TO_INSTANT_APPS = 1; /// from: static public final java.lang.String RESTRICTIONS_SERVICE - static const RESTRICTIONS_SERVICE = "restrictions"; + static const RESTRICTIONS_SERVICE = r"""restrictions"""; /// from: static public final java.lang.String ROLE_SERVICE - static const ROLE_SERVICE = "role"; + static const ROLE_SERVICE = r"""role"""; /// from: static public final java.lang.String SEARCH_SERVICE - static const SEARCH_SERVICE = "search"; + static const SEARCH_SERVICE = r"""search"""; /// from: static public final java.lang.String SENSOR_SERVICE - static const SENSOR_SERVICE = "sensor"; + static const SENSOR_SERVICE = r"""sensor"""; /// from: static public final java.lang.String SHORTCUT_SERVICE - static const SHORTCUT_SERVICE = "shortcut"; + static const SHORTCUT_SERVICE = r"""shortcut"""; /// from: static public final java.lang.String STATUS_BAR_SERVICE - static const STATUS_BAR_SERVICE = "statusbar"; + static const STATUS_BAR_SERVICE = r"""statusbar"""; /// from: static public final java.lang.String STORAGE_SERVICE - static const STORAGE_SERVICE = "storage"; + static const STORAGE_SERVICE = r"""storage"""; /// from: static public final java.lang.String STORAGE_STATS_SERVICE - static const STORAGE_STATS_SERVICE = "storagestats"; + static const STORAGE_STATS_SERVICE = r"""storagestats"""; /// from: static public final java.lang.String SYSTEM_HEALTH_SERVICE - static const SYSTEM_HEALTH_SERVICE = "systemhealth"; + static const SYSTEM_HEALTH_SERVICE = r"""systemhealth"""; /// from: static public final java.lang.String TELECOM_SERVICE - static const TELECOM_SERVICE = "telecom"; + static const TELECOM_SERVICE = r"""telecom"""; /// from: static public final java.lang.String TELEPHONY_IMS_SERVICE - static const TELEPHONY_IMS_SERVICE = "telephony_ims"; + static const TELEPHONY_IMS_SERVICE = r"""telephony_ims"""; /// from: static public final java.lang.String TELEPHONY_SERVICE - static const TELEPHONY_SERVICE = "phone"; + static const TELEPHONY_SERVICE = r"""phone"""; /// from: static public final java.lang.String TELEPHONY_SUBSCRIPTION_SERVICE static const TELEPHONY_SUBSCRIPTION_SERVICE = - "telephony_subscription_service"; + r"""telephony_subscription_service"""; /// from: static public final java.lang.String TEXT_CLASSIFICATION_SERVICE - static const TEXT_CLASSIFICATION_SERVICE = "textclassification"; + static const TEXT_CLASSIFICATION_SERVICE = r"""textclassification"""; /// from: static public final java.lang.String TEXT_SERVICES_MANAGER_SERVICE - static const TEXT_SERVICES_MANAGER_SERVICE = "textservices"; + static const TEXT_SERVICES_MANAGER_SERVICE = r"""textservices"""; /// from: static public final java.lang.String TV_INPUT_SERVICE - static const TV_INPUT_SERVICE = "tv_input"; + static const TV_INPUT_SERVICE = r"""tv_input"""; /// from: static public final java.lang.String TV_INTERACTIVE_APP_SERVICE - static const TV_INTERACTIVE_APP_SERVICE = "tv_interactive_app"; + static const TV_INTERACTIVE_APP_SERVICE = r"""tv_interactive_app"""; /// from: static public final java.lang.String UI_MODE_SERVICE - static const UI_MODE_SERVICE = "uimode"; + static const UI_MODE_SERVICE = r"""uimode"""; /// from: static public final java.lang.String USAGE_STATS_SERVICE - static const USAGE_STATS_SERVICE = "usagestats"; + static const USAGE_STATS_SERVICE = r"""usagestats"""; /// from: static public final java.lang.String USB_SERVICE - static const USB_SERVICE = "usb"; + static const USB_SERVICE = r"""usb"""; /// from: static public final java.lang.String USER_SERVICE - static const USER_SERVICE = "user"; + static const USER_SERVICE = r"""user"""; /// from: static public final java.lang.String VIBRATOR_MANAGER_SERVICE - static const VIBRATOR_MANAGER_SERVICE = "vibrator_manager"; + static const VIBRATOR_MANAGER_SERVICE = r"""vibrator_manager"""; /// from: static public final java.lang.String VIBRATOR_SERVICE - static const VIBRATOR_SERVICE = "vibrator"; + static const VIBRATOR_SERVICE = r"""vibrator"""; /// from: static public final java.lang.String VPN_MANAGEMENT_SERVICE - static const VPN_MANAGEMENT_SERVICE = "vpn_management"; + static const VPN_MANAGEMENT_SERVICE = r"""vpn_management"""; /// from: static public final java.lang.String WALLPAPER_SERVICE - static const WALLPAPER_SERVICE = "wallpaper"; + static const WALLPAPER_SERVICE = r"""wallpaper"""; /// from: static public final java.lang.String WIFI_AWARE_SERVICE - static const WIFI_AWARE_SERVICE = "wifiaware"; + static const WIFI_AWARE_SERVICE = r"""wifiaware"""; /// from: static public final java.lang.String WIFI_P2P_SERVICE - static const WIFI_P2P_SERVICE = "wifip2p"; + static const WIFI_P2P_SERVICE = r"""wifip2p"""; /// from: static public final java.lang.String WIFI_RTT_RANGING_SERVICE - static const WIFI_RTT_RANGING_SERVICE = "wifirtt"; + static const WIFI_RTT_RANGING_SERVICE = r"""wifirtt"""; /// from: static public final java.lang.String WIFI_SERVICE - static const WIFI_SERVICE = "wifi"; + static const WIFI_SERVICE = r"""wifi"""; /// from: static public final java.lang.String WINDOW_SERVICE - static const WINDOW_SERVICE = "window"; + static const WINDOW_SERVICE = r"""window"""; - static final _ctor = - jniLookup>("Context__ctor") + static final _new0 = + jniLookup>("Context__new0") .asFunction(); /// from: public void () - Context() : super.fromRef(_ctor().object); + /// The returned object must be released after use, by calling the [release] method. + factory Context() { + return Context.fromRef(_new0().object); + } static final _getAssets = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Context__getAssets") + ffi + .NativeFunction)>>( + "Context__getAssets") .asFunction)>(); /// from: public abstract android.content.res.AssetManager getAssets() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getAssets() => - const jni.JObjectType().fromRef(_getAssets(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getAssets() { + return const jni.JObjectType().fromRef(_getAssets(reference).object); + } static final _getResources = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Context__getResources") + ffi + .NativeFunction)>>( + "Context__getResources") .asFunction)>(); /// from: public abstract android.content.res.Resources getResources() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getResources() => - const jni.JObjectType().fromRef(_getResources(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getResources() { + return const jni.JObjectType().fromRef(_getResources(reference).object); + } static final _getPackageManager = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Context__getPackageManager") + ffi + .NativeFunction)>>( + "Context__getPackageManager") .asFunction)>(); /// from: public abstract android.content.pm.PackageManager getPackageManager() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getPackageManager() => - const jni.JObjectType().fromRef(_getPackageManager(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getPackageManager() { + return const jni.JObjectType() + .fromRef(_getPackageManager(reference).object); + } static final _getContentResolver = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Context__getContentResolver") + ffi + .NativeFunction)>>( + "Context__getContentResolver") .asFunction)>(); /// from: public abstract android.content.ContentResolver getContentResolver() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getContentResolver() => - const jni.JObjectType().fromRef(_getContentResolver(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getContentResolver() { + return const jni.JObjectType() + .fromRef(_getContentResolver(reference).object); + } static final _getMainLooper = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Context__getMainLooper") + ffi + .NativeFunction)>>( + "Context__getMainLooper") .asFunction)>(); /// from: public abstract android.os.Looper getMainLooper() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getMainLooper() => - const jni.JObjectType().fromRef(_getMainLooper(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getMainLooper() { + return const jni.JObjectType().fromRef(_getMainLooper(reference).object); + } static final _getMainExecutor = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Context__getMainExecutor") + ffi + .NativeFunction)>>( + "Context__getMainExecutor") .asFunction)>(); /// from: public java.util.concurrent.Executor getMainExecutor() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getMainExecutor() => - const jni.JObjectType().fromRef(_getMainExecutor(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getMainExecutor() { + return const jni.JObjectType().fromRef(_getMainExecutor(reference).object); + } static final _getApplicationContext = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Context__getApplicationContext") + ffi + .NativeFunction)>>( + "Context__getApplicationContext") .asFunction)>(); /// from: public abstract android.content.Context getApplicationContext() - /// The returned object must be deleted after use, by calling the `delete` method. - Context getApplicationContext() => - const $ContextType().fromRef(_getApplicationContext(reference).object); + /// The returned object must be released after use, by calling the [release] method. + Context getApplicationContext() { + return const $ContextType() + .fromRef(_getApplicationContext(reference).object); + } static final _registerComponentCallbacks = jniLookup< ffi.NativeFunction< @@ -1498,9 +1982,12 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void registerComponentCallbacks(android.content.ComponentCallbacks componentCallbacks) - void registerComponentCallbacks(jni.JObject componentCallbacks) => - _registerComponentCallbacks(reference, componentCallbacks.reference) - .check(); + void registerComponentCallbacks( + jni.JObject componentCallbacks, + ) { + return _registerComponentCallbacks(reference, componentCallbacks.reference) + .check(); + } static final _unregisterComponentCallbacks = jniLookup< ffi.NativeFunction< @@ -1512,9 +1999,13 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void unregisterComponentCallbacks(android.content.ComponentCallbacks componentCallbacks) - void unregisterComponentCallbacks(jni.JObject componentCallbacks) => - _unregisterComponentCallbacks(reference, componentCallbacks.reference) - .check(); + void unregisterComponentCallbacks( + jni.JObject componentCallbacks, + ) { + return _unregisterComponentCallbacks( + reference, componentCallbacks.reference) + .check(); + } static final _getText = jniLookup< ffi.NativeFunction< @@ -1523,9 +2014,12 @@ class Context extends jni.JObject { .asFunction, int)>(); /// from: public final java.lang.CharSequence getText(int i) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getText(int i) => - const jni.JObjectType().fromRef(_getText(reference, i).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getText( + int i, + ) { + return const jni.JObjectType().fromRef(_getText(reference, i).object); + } static final _getString = jniLookup< ffi.NativeFunction< @@ -1534,9 +2028,12 @@ class Context extends jni.JObject { .asFunction, int)>(); /// from: public final java.lang.String getString(int i) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JString getString(int i) => - const jni.JStringType().fromRef(_getString(reference, i).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JString getString( + int i, + ) { + return const jni.JStringType().fromRef(_getString(reference, i).object); + } static final _getString1 = jniLookup< ffi.NativeFunction< @@ -1547,10 +2044,14 @@ class Context extends jni.JObject { ffi.Pointer, int, ffi.Pointer)>(); /// from: public final java.lang.String getString(int i, java.lang.Object[] objects) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JString getString1(int i, jni.JArray objects) => - const jni.JStringType() - .fromRef(_getString1(reference, i, objects.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JString getString1( + int i, + jni.JArray objects, + ) { + return const jni.JStringType() + .fromRef(_getString1(reference, i, objects.reference).object); + } static final _getColor = jniLookup< ffi.NativeFunction< @@ -1559,7 +2060,11 @@ class Context extends jni.JObject { .asFunction, int)>(); /// from: public final int getColor(int i) - int getColor(int i) => _getColor(reference, i).integer; + int getColor( + int i, + ) { + return _getColor(reference, i).integer; + } static final _getDrawable = jniLookup< ffi.NativeFunction< @@ -1568,9 +2073,12 @@ class Context extends jni.JObject { .asFunction, int)>(); /// from: public final android.graphics.drawable.Drawable getDrawable(int i) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getDrawable(int i) => - const jni.JObjectType().fromRef(_getDrawable(reference, i).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getDrawable( + int i, + ) { + return const jni.JObjectType().fromRef(_getDrawable(reference, i).object); + } static final _getColorStateList = jniLookup< ffi.NativeFunction< @@ -1579,9 +2087,13 @@ class Context extends jni.JObject { .asFunction, int)>(); /// from: public final android.content.res.ColorStateList getColorStateList(int i) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getColorStateList(int i) => - const jni.JObjectType().fromRef(_getColorStateList(reference, i).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getColorStateList( + int i, + ) { + return const jni.JObjectType() + .fromRef(_getColorStateList(reference, i).object); + } static final _setTheme = jniLookup< ffi.NativeFunction< @@ -1590,18 +2102,23 @@ class Context extends jni.JObject { .asFunction, int)>(); /// from: public abstract void setTheme(int i) - void setTheme(int i) => _setTheme(reference, i).check(); + void setTheme( + int i, + ) { + return _setTheme(reference, i).check(); + } static final _getTheme = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Context__getTheme") + ffi + .NativeFunction)>>( + "Context__getTheme") .asFunction)>(); /// from: public abstract android.content.res.Resources$Theme getTheme() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getTheme() => - const jni.JObjectType().fromRef(_getTheme(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getTheme() { + return const jni.JObjectType().fromRef(_getTheme(reference).object); + } static final _obtainStyledAttributes = jniLookup< ffi.NativeFunction< @@ -1612,10 +2129,13 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public final android.content.res.TypedArray obtainStyledAttributes(int[] is) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject obtainStyledAttributes(jni.JArray is0) => - const jni.JObjectType() - .fromRef(_obtainStyledAttributes(reference, is0.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject obtainStyledAttributes( + jni.JArray is0, + ) { + return const jni.JObjectType() + .fromRef(_obtainStyledAttributes(reference, is0.reference).object); + } static final _obtainStyledAttributes1 = jniLookup< ffi.NativeFunction< @@ -1626,10 +2146,14 @@ class Context extends jni.JObject { ffi.Pointer, int, ffi.Pointer)>(); /// from: public final android.content.res.TypedArray obtainStyledAttributes(int i, int[] is) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject obtainStyledAttributes1(int i, jni.JArray is0) => - const jni.JObjectType().fromRef( - _obtainStyledAttributes1(reference, i, is0.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject obtainStyledAttributes1( + int i, + jni.JArray is0, + ) { + return const jni.JObjectType() + .fromRef(_obtainStyledAttributes1(reference, i, is0.reference).object); + } static final _obtainStyledAttributes2 = jniLookup< ffi.NativeFunction< @@ -1642,12 +2166,15 @@ class Context extends jni.JObject { ffi.Pointer)>(); /// from: public final android.content.res.TypedArray obtainStyledAttributes(android.util.AttributeSet attributeSet, int[] is) - /// The returned object must be deleted after use, by calling the `delete` method. + /// The returned object must be released after use, by calling the [release] method. jni.JObject obtainStyledAttributes2( - jni.JObject attributeSet, jni.JArray is0) => - const jni.JObjectType().fromRef(_obtainStyledAttributes2( - reference, attributeSet.reference, is0.reference) - .object); + jni.JObject attributeSet, + jni.JArray is0, + ) { + return const jni.JObjectType().fromRef(_obtainStyledAttributes2( + reference, attributeSet.reference, is0.reference) + .object); + } static final _obtainStyledAttributes3 = jniLookup< ffi.NativeFunction< @@ -1662,111 +2189,130 @@ class Context extends jni.JObject { ffi.Pointer, int, int)>(); /// from: public final android.content.res.TypedArray obtainStyledAttributes(android.util.AttributeSet attributeSet, int[] is, int i, int i1) - /// The returned object must be deleted after use, by calling the `delete` method. + /// The returned object must be released after use, by calling the [release] method. jni.JObject obtainStyledAttributes3( - jni.JObject attributeSet, jni.JArray is0, int i, int i1) => - const jni.JObjectType().fromRef(_obtainStyledAttributes3( - reference, attributeSet.reference, is0.reference, i, i1) - .object); + jni.JObject attributeSet, + jni.JArray is0, + int i, + int i1, + ) { + return const jni.JObjectType().fromRef(_obtainStyledAttributes3( + reference, attributeSet.reference, is0.reference, i, i1) + .object); + } static final _getClassLoader = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Context__getClassLoader") + ffi + .NativeFunction)>>( + "Context__getClassLoader") .asFunction)>(); /// from: public abstract java.lang.ClassLoader getClassLoader() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getClassLoader() => - const jni.JObjectType().fromRef(_getClassLoader(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getClassLoader() { + return const jni.JObjectType().fromRef(_getClassLoader(reference).object); + } static final _getPackageName = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Context__getPackageName") + ffi + .NativeFunction)>>( + "Context__getPackageName") .asFunction)>(); /// from: public abstract java.lang.String getPackageName() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JString getPackageName() => - const jni.JStringType().fromRef(_getPackageName(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JString getPackageName() { + return const jni.JStringType().fromRef(_getPackageName(reference).object); + } static final _getOpPackageName = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Context__getOpPackageName") + ffi + .NativeFunction)>>( + "Context__getOpPackageName") .asFunction)>(); /// from: public java.lang.String getOpPackageName() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JString getOpPackageName() => - const jni.JStringType().fromRef(_getOpPackageName(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JString getOpPackageName() { + return const jni.JStringType().fromRef(_getOpPackageName(reference).object); + } static final _getAttributionTag = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Context__getAttributionTag") + ffi + .NativeFunction)>>( + "Context__getAttributionTag") .asFunction)>(); /// from: public java.lang.String getAttributionTag() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JString getAttributionTag() => - const jni.JStringType().fromRef(_getAttributionTag(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JString getAttributionTag() { + return const jni.JStringType() + .fromRef(_getAttributionTag(reference).object); + } static final _getAttributionSource = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Context__getAttributionSource") + ffi + .NativeFunction)>>( + "Context__getAttributionSource") .asFunction)>(); /// from: public android.content.AttributionSource getAttributionSource() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getAttributionSource() => - const jni.JObjectType().fromRef(_getAttributionSource(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getAttributionSource() { + return const jni.JObjectType() + .fromRef(_getAttributionSource(reference).object); + } static final _getParams = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Context__getParams") + ffi + .NativeFunction)>>( + "Context__getParams") .asFunction)>(); /// from: public android.content.ContextParams getParams() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getParams() => - const jni.JObjectType().fromRef(_getParams(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getParams() { + return const jni.JObjectType().fromRef(_getParams(reference).object); + } static final _getApplicationInfo = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Context__getApplicationInfo") + ffi + .NativeFunction)>>( + "Context__getApplicationInfo") .asFunction)>(); /// from: public abstract android.content.pm.ApplicationInfo getApplicationInfo() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getApplicationInfo() => - const jni.JObjectType().fromRef(_getApplicationInfo(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getApplicationInfo() { + return const jni.JObjectType() + .fromRef(_getApplicationInfo(reference).object); + } static final _getPackageResourcePath = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Context__getPackageResourcePath") + ffi + .NativeFunction)>>( + "Context__getPackageResourcePath") .asFunction)>(); /// from: public abstract java.lang.String getPackageResourcePath() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JString getPackageResourcePath() => const jni.JStringType() - .fromRef(_getPackageResourcePath(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JString getPackageResourcePath() { + return const jni.JStringType() + .fromRef(_getPackageResourcePath(reference).object); + } static final _getPackageCodePath = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Context__getPackageCodePath") + ffi + .NativeFunction)>>( + "Context__getPackageCodePath") .asFunction)>(); /// from: public abstract java.lang.String getPackageCodePath() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JString getPackageCodePath() => - const jni.JStringType().fromRef(_getPackageCodePath(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JString getPackageCodePath() { + return const jni.JStringType() + .fromRef(_getPackageCodePath(reference).object); + } static final _getSharedPreferences = jniLookup< ffi.NativeFunction< @@ -1779,10 +2325,14 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer, int)>(); /// from: public abstract android.content.SharedPreferences getSharedPreferences(java.lang.String string, int i) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getSharedPreferences(jni.JString string, int i) => - const jni.JObjectType().fromRef( - _getSharedPreferences(reference, string.reference, i).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getSharedPreferences( + jni.JString string, + int i, + ) { + return const jni.JObjectType() + .fromRef(_getSharedPreferences(reference, string.reference, i).object); + } static final _moveSharedPreferencesFrom = jniLookup< ffi.NativeFunction< @@ -1795,9 +2345,14 @@ class Context extends jni.JObject { ffi.Pointer)>(); /// from: public abstract boolean moveSharedPreferencesFrom(android.content.Context context, java.lang.String string) - bool moveSharedPreferencesFrom(Context context, jni.JString string) => - _moveSharedPreferencesFrom(reference, context.reference, string.reference) - .boolean; + bool moveSharedPreferencesFrom( + Context context, + jni.JString string, + ) { + return _moveSharedPreferencesFrom( + reference, context.reference, string.reference) + .boolean; + } static final _deleteSharedPreferences = jniLookup< ffi.NativeFunction< @@ -1808,8 +2363,11 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public abstract boolean deleteSharedPreferences(java.lang.String string) - bool deleteSharedPreferences(jni.JString string) => - _deleteSharedPreferences(reference, string.reference).boolean; + bool deleteSharedPreferences( + jni.JString string, + ) { + return _deleteSharedPreferences(reference, string.reference).boolean; + } static final _openFileInput = jniLookup< ffi.NativeFunction< @@ -1820,9 +2378,13 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public abstract java.io.FileInputStream openFileInput(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject openFileInput(jni.JString string) => const jni.JObjectType() - .fromRef(_openFileInput(reference, string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject openFileInput( + jni.JString string, + ) { + return const jni.JObjectType() + .fromRef(_openFileInput(reference, string.reference).object); + } static final _openFileOutput = jniLookup< ffi.NativeFunction< @@ -1833,10 +2395,14 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer, int)>(); /// from: public abstract java.io.FileOutputStream openFileOutput(java.lang.String string, int i) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject openFileOutput(jni.JString string, int i) => - const jni.JObjectType() - .fromRef(_openFileOutput(reference, string.reference, i).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject openFileOutput( + jni.JString string, + int i, + ) { + return const jni.JObjectType() + .fromRef(_openFileOutput(reference, string.reference, i).object); + } static final _deleteFile = jniLookup< ffi.NativeFunction< @@ -1847,8 +2413,11 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public abstract boolean deleteFile(java.lang.String string) - bool deleteFile(jni.JString string) => - _deleteFile(reference, string.reference).boolean; + bool deleteFile( + jni.JString string, + ) { + return _deleteFile(reference, string.reference).boolean; + } static final _getFileStreamPath = jniLookup< ffi.NativeFunction< @@ -1859,42 +2428,50 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public abstract java.io.File getFileStreamPath(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getFileStreamPath(jni.JString string) => const jni.JObjectType() - .fromRef(_getFileStreamPath(reference, string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getFileStreamPath( + jni.JString string, + ) { + return const jni.JObjectType() + .fromRef(_getFileStreamPath(reference, string.reference).object); + } static final _getDataDir = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Context__getDataDir") + ffi + .NativeFunction)>>( + "Context__getDataDir") .asFunction)>(); /// from: public abstract java.io.File getDataDir() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getDataDir() => - const jni.JObjectType().fromRef(_getDataDir(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getDataDir() { + return const jni.JObjectType().fromRef(_getDataDir(reference).object); + } static final _getFilesDir = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Context__getFilesDir") + ffi + .NativeFunction)>>( + "Context__getFilesDir") .asFunction)>(); /// from: public abstract java.io.File getFilesDir() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getFilesDir() => - const jni.JObjectType().fromRef(_getFilesDir(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getFilesDir() { + return const jni.JObjectType().fromRef(_getFilesDir(reference).object); + } static final _getNoBackupFilesDir = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Context__getNoBackupFilesDir") + ffi + .NativeFunction)>>( + "Context__getNoBackupFilesDir") .asFunction)>(); /// from: public abstract java.io.File getNoBackupFilesDir() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getNoBackupFilesDir() => - const jni.JObjectType().fromRef(_getNoBackupFilesDir(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getNoBackupFilesDir() { + return const jni.JObjectType() + .fromRef(_getNoBackupFilesDir(reference).object); + } static final _getExternalFilesDir = jniLookup< ffi.NativeFunction< @@ -1905,9 +2482,13 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public abstract java.io.File getExternalFilesDir(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getExternalFilesDir(jni.JString string) => const jni.JObjectType() - .fromRef(_getExternalFilesDir(reference, string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getExternalFilesDir( + jni.JString string, + ) { + return const jni.JObjectType() + .fromRef(_getExternalFilesDir(reference, string.reference).object); + } static final _getExternalFilesDirs = jniLookup< ffi.NativeFunction< @@ -1918,101 +2499,114 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public abstract java.io.File[] getExternalFilesDirs(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JArray getExternalFilesDirs(jni.JString string) => - const jni.JArrayType(jni.JObjectType()) - .fromRef(_getExternalFilesDirs(reference, string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JArray getExternalFilesDirs( + jni.JString string, + ) { + return const jni.JArrayType(jni.JObjectType()) + .fromRef(_getExternalFilesDirs(reference, string.reference).object); + } static final _getObbDir = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Context__getObbDir") + ffi + .NativeFunction)>>( + "Context__getObbDir") .asFunction)>(); /// from: public abstract java.io.File getObbDir() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getObbDir() => - const jni.JObjectType().fromRef(_getObbDir(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getObbDir() { + return const jni.JObjectType().fromRef(_getObbDir(reference).object); + } static final _getObbDirs = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Context__getObbDirs") + ffi + .NativeFunction)>>( + "Context__getObbDirs") .asFunction)>(); /// from: public abstract java.io.File[] getObbDirs() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JArray getObbDirs() => - const jni.JArrayType(jni.JObjectType()) - .fromRef(_getObbDirs(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JArray getObbDirs() { + return const jni.JArrayType(jni.JObjectType()) + .fromRef(_getObbDirs(reference).object); + } static final _getCacheDir = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Context__getCacheDir") + ffi + .NativeFunction)>>( + "Context__getCacheDir") .asFunction)>(); /// from: public abstract java.io.File getCacheDir() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getCacheDir() => - const jni.JObjectType().fromRef(_getCacheDir(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getCacheDir() { + return const jni.JObjectType().fromRef(_getCacheDir(reference).object); + } static final _getCodeCacheDir = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Context__getCodeCacheDir") + ffi + .NativeFunction)>>( + "Context__getCodeCacheDir") .asFunction)>(); /// from: public abstract java.io.File getCodeCacheDir() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getCodeCacheDir() => - const jni.JObjectType().fromRef(_getCodeCacheDir(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getCodeCacheDir() { + return const jni.JObjectType().fromRef(_getCodeCacheDir(reference).object); + } static final _getExternalCacheDir = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Context__getExternalCacheDir") + ffi + .NativeFunction)>>( + "Context__getExternalCacheDir") .asFunction)>(); /// from: public abstract java.io.File getExternalCacheDir() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getExternalCacheDir() => - const jni.JObjectType().fromRef(_getExternalCacheDir(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getExternalCacheDir() { + return const jni.JObjectType() + .fromRef(_getExternalCacheDir(reference).object); + } static final _getExternalCacheDirs = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Context__getExternalCacheDirs") + ffi + .NativeFunction)>>( + "Context__getExternalCacheDirs") .asFunction)>(); /// from: public abstract java.io.File[] getExternalCacheDirs() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JArray getExternalCacheDirs() => - const jni.JArrayType(jni.JObjectType()) - .fromRef(_getExternalCacheDirs(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JArray getExternalCacheDirs() { + return const jni.JArrayType(jni.JObjectType()) + .fromRef(_getExternalCacheDirs(reference).object); + } static final _getExternalMediaDirs = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Context__getExternalMediaDirs") + ffi + .NativeFunction)>>( + "Context__getExternalMediaDirs") .asFunction)>(); /// from: public abstract java.io.File[] getExternalMediaDirs() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JArray getExternalMediaDirs() => - const jni.JArrayType(jni.JObjectType()) - .fromRef(_getExternalMediaDirs(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JArray getExternalMediaDirs() { + return const jni.JArrayType(jni.JObjectType()) + .fromRef(_getExternalMediaDirs(reference).object); + } static final _fileList = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Context__fileList") + ffi + .NativeFunction)>>( + "Context__fileList") .asFunction)>(); /// from: public abstract java.lang.String[] fileList() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JArray fileList() => const jni.JArrayType(jni.JStringType()) - .fromRef(_fileList(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JArray fileList() { + return const jni.JArrayType(jni.JStringType()) + .fromRef(_fileList(reference).object); + } static final _getDir = jniLookup< ffi.NativeFunction< @@ -2023,9 +2617,14 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer, int)>(); /// from: public abstract java.io.File getDir(java.lang.String string, int i) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getDir(jni.JString string, int i) => const jni.JObjectType() - .fromRef(_getDir(reference, string.reference, i).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getDir( + jni.JString string, + int i, + ) { + return const jni.JObjectType() + .fromRef(_getDir(reference, string.reference, i).object); + } static final _openOrCreateDatabase = jniLookup< ffi.NativeFunction< @@ -2039,12 +2638,16 @@ class Context extends jni.JObject { int, ffi.Pointer)>(); /// from: public abstract android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String string, int i, android.database.sqlite.SQLiteDatabase$CursorFactory cursorFactory) - /// The returned object must be deleted after use, by calling the `delete` method. + /// The returned object must be released after use, by calling the [release] method. jni.JObject openOrCreateDatabase( - jni.JString string, int i, jni.JObject cursorFactory) => - const jni.JObjectType().fromRef(_openOrCreateDatabase( - reference, string.reference, i, cursorFactory.reference) - .object); + jni.JString string, + int i, + jni.JObject cursorFactory, + ) { + return const jni.JObjectType().fromRef(_openOrCreateDatabase( + reference, string.reference, i, cursorFactory.reference) + .object); + } static final _openOrCreateDatabase1 = jniLookup< ffi.NativeFunction< @@ -2059,16 +2662,21 @@ class Context extends jni.JObject { int, ffi.Pointer, ffi.Pointer)>(); /// from: public abstract android.database.sqlite.SQLiteDatabase openOrCreateDatabase(java.lang.String string, int i, android.database.sqlite.SQLiteDatabase$CursorFactory cursorFactory, android.database.DatabaseErrorHandler databaseErrorHandler) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject openOrCreateDatabase1(jni.JString string, int i, - jni.JObject cursorFactory, jni.JObject databaseErrorHandler) => - const jni.JObjectType().fromRef(_openOrCreateDatabase1( - reference, - string.reference, - i, - cursorFactory.reference, - databaseErrorHandler.reference) - .object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject openOrCreateDatabase1( + jni.JString string, + int i, + jni.JObject cursorFactory, + jni.JObject databaseErrorHandler, + ) { + return const jni.JObjectType().fromRef(_openOrCreateDatabase1( + reference, + string.reference, + i, + cursorFactory.reference, + databaseErrorHandler.reference) + .object); + } static final _moveDatabaseFrom = jniLookup< ffi.NativeFunction< @@ -2081,8 +2689,13 @@ class Context extends jni.JObject { ffi.Pointer)>(); /// from: public abstract boolean moveDatabaseFrom(android.content.Context context, java.lang.String string) - bool moveDatabaseFrom(Context context, jni.JString string) => - _moveDatabaseFrom(reference, context.reference, string.reference).boolean; + bool moveDatabaseFrom( + Context context, + jni.JString string, + ) { + return _moveDatabaseFrom(reference, context.reference, string.reference) + .boolean; + } static final _deleteDatabase = jniLookup< ffi.NativeFunction< @@ -2093,8 +2706,11 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public abstract boolean deleteDatabase(java.lang.String string) - bool deleteDatabase(jni.JString string) => - _deleteDatabase(reference, string.reference).boolean; + bool deleteDatabase( + jni.JString string, + ) { + return _deleteDatabase(reference, string.reference).boolean; + } static final _getDatabasePath = jniLookup< ffi.NativeFunction< @@ -2105,63 +2721,72 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public abstract java.io.File getDatabasePath(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getDatabasePath(jni.JString string) => const jni.JObjectType() - .fromRef(_getDatabasePath(reference, string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getDatabasePath( + jni.JString string, + ) { + return const jni.JObjectType() + .fromRef(_getDatabasePath(reference, string.reference).object); + } static final _databaseList = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Context__databaseList") + ffi + .NativeFunction)>>( + "Context__databaseList") .asFunction)>(); /// from: public abstract java.lang.String[] databaseList() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JArray databaseList() => - const jni.JArrayType(jni.JStringType()) - .fromRef(_databaseList(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JArray databaseList() { + return const jni.JArrayType(jni.JStringType()) + .fromRef(_databaseList(reference).object); + } static final _getWallpaper = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Context__getWallpaper") + ffi + .NativeFunction)>>( + "Context__getWallpaper") .asFunction)>(); /// from: public abstract android.graphics.drawable.Drawable getWallpaper() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getWallpaper() => - const jni.JObjectType().fromRef(_getWallpaper(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getWallpaper() { + return const jni.JObjectType().fromRef(_getWallpaper(reference).object); + } static final _peekWallpaper = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Context__peekWallpaper") + ffi + .NativeFunction)>>( + "Context__peekWallpaper") .asFunction)>(); /// from: public abstract android.graphics.drawable.Drawable peekWallpaper() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject peekWallpaper() => - const jni.JObjectType().fromRef(_peekWallpaper(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject peekWallpaper() { + return const jni.JObjectType().fromRef(_peekWallpaper(reference).object); + } static final _getWallpaperDesiredMinimumWidth = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>( + ffi + .NativeFunction)>>( "Context__getWallpaperDesiredMinimumWidth") .asFunction)>(); /// from: public abstract int getWallpaperDesiredMinimumWidth() - int getWallpaperDesiredMinimumWidth() => - _getWallpaperDesiredMinimumWidth(reference).integer; + int getWallpaperDesiredMinimumWidth() { + return _getWallpaperDesiredMinimumWidth(reference).integer; + } static final _getWallpaperDesiredMinimumHeight = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>( + ffi + .NativeFunction)>>( "Context__getWallpaperDesiredMinimumHeight") .asFunction)>(); /// from: public abstract int getWallpaperDesiredMinimumHeight() - int getWallpaperDesiredMinimumHeight() => - _getWallpaperDesiredMinimumHeight(reference).integer; + int getWallpaperDesiredMinimumHeight() { + return _getWallpaperDesiredMinimumHeight(reference).integer; + } static final _setWallpaper = jniLookup< ffi.NativeFunction< @@ -2172,8 +2797,11 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public abstract void setWallpaper(android.graphics.Bitmap bitmap) - void setWallpaper(jni.JObject bitmap) => - _setWallpaper(reference, bitmap.reference).check(); + void setWallpaper( + jni.JObject bitmap, + ) { + return _setWallpaper(reference, bitmap.reference).check(); + } static final _setWallpaper1 = jniLookup< ffi.NativeFunction< @@ -2184,17 +2812,22 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public abstract void setWallpaper(java.io.InputStream inputStream) - void setWallpaper1(jni.JObject inputStream) => - _setWallpaper1(reference, inputStream.reference).check(); + void setWallpaper1( + jni.JObject inputStream, + ) { + return _setWallpaper1(reference, inputStream.reference).check(); + } static final _clearWallpaper = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Context__clearWallpaper") + ffi + .NativeFunction)>>( + "Context__clearWallpaper") .asFunction)>(); /// from: public abstract void clearWallpaper() - void clearWallpaper() => _clearWallpaper(reference).check(); + void clearWallpaper() { + return _clearWallpaper(reference).check(); + } static final _startActivity = jniLookup< ffi.NativeFunction< @@ -2205,8 +2838,11 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public abstract void startActivity(android.content.Intent intent) - void startActivity(Intent intent) => - _startActivity(reference, intent.reference).check(); + void startActivity( + Intent intent, + ) { + return _startActivity(reference, intent.reference).check(); + } static final _startActivity1 = jniLookup< ffi.NativeFunction< @@ -2219,8 +2855,13 @@ class Context extends jni.JObject { ffi.Pointer)>(); /// from: public abstract void startActivity(android.content.Intent intent, android.os.Bundle bundle) - void startActivity1(Intent intent, jni.JObject bundle) => - _startActivity1(reference, intent.reference, bundle.reference).check(); + void startActivity1( + Intent intent, + jni.JObject bundle, + ) { + return _startActivity1(reference, intent.reference, bundle.reference) + .check(); + } static final _startActivities = jniLookup< ffi.NativeFunction< @@ -2231,8 +2872,11 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public abstract void startActivities(android.content.Intent[] intents) - void startActivities(jni.JArray intents) => - _startActivities(reference, intents.reference).check(); + void startActivities( + jni.JArray intents, + ) { + return _startActivities(reference, intents.reference).check(); + } static final _startActivities1 = jniLookup< ffi.NativeFunction< @@ -2245,8 +2889,13 @@ class Context extends jni.JObject { ffi.Pointer)>(); /// from: public abstract void startActivities(android.content.Intent[] intents, android.os.Bundle bundle) - void startActivities1(jni.JArray intents, jni.JObject bundle) => - _startActivities1(reference, intents.reference, bundle.reference).check(); + void startActivities1( + jni.JArray intents, + jni.JObject bundle, + ) { + return _startActivities1(reference, intents.reference, bundle.reference) + .check(); + } static final _startIntentSender = jniLookup< ffi.NativeFunction< @@ -2263,10 +2912,16 @@ class Context extends jni.JObject { /// from: public abstract void startIntentSender(android.content.IntentSender intentSender, android.content.Intent intent, int i, int i1, int i2) void startIntentSender( - jni.JObject intentSender, Intent intent, int i, int i1, int i2) => - _startIntentSender( - reference, intentSender.reference, intent.reference, i, i1, i2) - .check(); + jni.JObject intentSender, + Intent intent, + int i, + int i1, + int i2, + ) { + return _startIntentSender( + reference, intentSender.reference, intent.reference, i, i1, i2) + .check(); + } static final _startIntentSender1 = jniLookup< ffi.NativeFunction< @@ -2283,11 +2938,18 @@ class Context extends jni.JObject { ffi.Pointer, int, int, int, ffi.Pointer)>(); /// from: public abstract void startIntentSender(android.content.IntentSender intentSender, android.content.Intent intent, int i, int i1, int i2, android.os.Bundle bundle) - void startIntentSender1(jni.JObject intentSender, Intent intent, int i, - int i1, int i2, jni.JObject bundle) => - _startIntentSender1(reference, intentSender.reference, intent.reference, - i, i1, i2, bundle.reference) - .check(); + void startIntentSender1( + jni.JObject intentSender, + Intent intent, + int i, + int i1, + int i2, + jni.JObject bundle, + ) { + return _startIntentSender1(reference, intentSender.reference, + intent.reference, i, i1, i2, bundle.reference) + .check(); + } static final _sendBroadcast = jniLookup< ffi.NativeFunction< @@ -2298,8 +2960,11 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public abstract void sendBroadcast(android.content.Intent intent) - void sendBroadcast(Intent intent) => - _sendBroadcast(reference, intent.reference).check(); + void sendBroadcast( + Intent intent, + ) { + return _sendBroadcast(reference, intent.reference).check(); + } static final _sendBroadcast1 = jniLookup< ffi.NativeFunction< @@ -2312,8 +2977,13 @@ class Context extends jni.JObject { ffi.Pointer)>(); /// from: public abstract void sendBroadcast(android.content.Intent intent, java.lang.String string) - void sendBroadcast1(Intent intent, jni.JString string) => - _sendBroadcast1(reference, intent.reference, string.reference).check(); + void sendBroadcast1( + Intent intent, + jni.JString string, + ) { + return _sendBroadcast1(reference, intent.reference, string.reference) + .check(); + } static final _sendBroadcastWithMultiplePermissions = jniLookup< ffi.NativeFunction< @@ -2326,10 +2996,13 @@ class Context extends jni.JObject { /// from: public void sendBroadcastWithMultiplePermissions(android.content.Intent intent, java.lang.String[] strings) void sendBroadcastWithMultiplePermissions( - Intent intent, jni.JArray strings) => - _sendBroadcastWithMultiplePermissions( - reference, intent.reference, strings.reference) - .check(); + Intent intent, + jni.JArray strings, + ) { + return _sendBroadcastWithMultiplePermissions( + reference, intent.reference, strings.reference) + .check(); + } static final _sendOrderedBroadcast = jniLookup< ffi.NativeFunction< @@ -2342,9 +3015,13 @@ class Context extends jni.JObject { ffi.Pointer)>(); /// from: public abstract void sendOrderedBroadcast(android.content.Intent intent, java.lang.String string) - void sendOrderedBroadcast(Intent intent, jni.JString string) => - _sendOrderedBroadcast(reference, intent.reference, string.reference) - .check(); + void sendOrderedBroadcast( + Intent intent, + jni.JString string, + ) { + return _sendOrderedBroadcast(reference, intent.reference, string.reference) + .check(); + } static final _sendOrderedBroadcast1 = jniLookup< ffi.NativeFunction< @@ -2370,23 +3047,25 @@ class Context extends jni.JObject { /// from: public abstract void sendOrderedBroadcast(android.content.Intent intent, java.lang.String string, android.content.BroadcastReceiver broadcastReceiver, android.os.Handler handler, int i, java.lang.String string1, android.os.Bundle bundle) void sendOrderedBroadcast1( - Intent intent, - jni.JString string, - jni.JObject broadcastReceiver, - jni.JObject handler, - int i, - jni.JString string1, - jni.JObject bundle) => - _sendOrderedBroadcast1( - reference, - intent.reference, - string.reference, - broadcastReceiver.reference, - handler.reference, - i, - string1.reference, - bundle.reference) - .check(); + Intent intent, + jni.JString string, + jni.JObject broadcastReceiver, + jni.JObject handler, + int i, + jni.JString string1, + jni.JObject bundle, + ) { + return _sendOrderedBroadcast1( + reference, + intent.reference, + string.reference, + broadcastReceiver.reference, + handler.reference, + i, + string1.reference, + bundle.reference) + .check(); + } static final _sendBroadcastAsUser = jniLookup< ffi.NativeFunction< @@ -2399,9 +3078,14 @@ class Context extends jni.JObject { ffi.Pointer)>(); /// from: public abstract void sendBroadcastAsUser(android.content.Intent intent, android.os.UserHandle userHandle) - void sendBroadcastAsUser(Intent intent, jni.JObject userHandle) => - _sendBroadcastAsUser(reference, intent.reference, userHandle.reference) - .check(); + void sendBroadcastAsUser( + Intent intent, + jni.JObject userHandle, + ) { + return _sendBroadcastAsUser( + reference, intent.reference, userHandle.reference) + .check(); + } static final _sendBroadcastAsUser1 = jniLookup< ffi.NativeFunction< @@ -2416,10 +3100,14 @@ class Context extends jni.JObject { /// from: public abstract void sendBroadcastAsUser(android.content.Intent intent, android.os.UserHandle userHandle, java.lang.String string) void sendBroadcastAsUser1( - Intent intent, jni.JObject userHandle, jni.JString string) => - _sendBroadcastAsUser1(reference, intent.reference, userHandle.reference, - string.reference) - .check(); + Intent intent, + jni.JObject userHandle, + jni.JString string, + ) { + return _sendBroadcastAsUser1( + reference, intent.reference, userHandle.reference, string.reference) + .check(); + } static final _sendOrderedBroadcastAsUser = jniLookup< ffi.NativeFunction< @@ -2448,25 +3136,27 @@ class Context extends jni.JObject { /// from: public abstract void sendOrderedBroadcastAsUser(android.content.Intent intent, android.os.UserHandle userHandle, java.lang.String string, android.content.BroadcastReceiver broadcastReceiver, android.os.Handler handler, int i, java.lang.String string1, android.os.Bundle bundle) void sendOrderedBroadcastAsUser( - Intent intent, - jni.JObject userHandle, - jni.JString string, - jni.JObject broadcastReceiver, - jni.JObject handler, - int i, - jni.JString string1, - jni.JObject bundle) => - _sendOrderedBroadcastAsUser( - reference, - intent.reference, - userHandle.reference, - string.reference, - broadcastReceiver.reference, - handler.reference, - i, - string1.reference, - bundle.reference) - .check(); + Intent intent, + jni.JObject userHandle, + jni.JString string, + jni.JObject broadcastReceiver, + jni.JObject handler, + int i, + jni.JString string1, + jni.JObject bundle, + ) { + return _sendOrderedBroadcastAsUser( + reference, + intent.reference, + userHandle.reference, + string.reference, + broadcastReceiver.reference, + handler.reference, + i, + string1.reference, + bundle.reference) + .check(); + } static final _sendOrderedBroadcast2 = jniLookup< ffi.NativeFunction< @@ -2494,25 +3184,27 @@ class Context extends jni.JObject { /// from: public void sendOrderedBroadcast(android.content.Intent intent, java.lang.String string, java.lang.String string1, android.content.BroadcastReceiver broadcastReceiver, android.os.Handler handler, int i, java.lang.String string2, android.os.Bundle bundle) void sendOrderedBroadcast2( - Intent intent, - jni.JString string, - jni.JString string1, - jni.JObject broadcastReceiver, - jni.JObject handler, - int i, - jni.JString string2, - jni.JObject bundle) => - _sendOrderedBroadcast2( - reference, - intent.reference, - string.reference, - string1.reference, - broadcastReceiver.reference, - handler.reference, - i, - string2.reference, - bundle.reference) - .check(); + Intent intent, + jni.JString string, + jni.JString string1, + jni.JObject broadcastReceiver, + jni.JObject handler, + int i, + jni.JString string2, + jni.JObject bundle, + ) { + return _sendOrderedBroadcast2( + reference, + intent.reference, + string.reference, + string1.reference, + broadcastReceiver.reference, + handler.reference, + i, + string2.reference, + bundle.reference) + .check(); + } static final _sendStickyBroadcast = jniLookup< ffi.NativeFunction< @@ -2523,8 +3215,11 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public abstract void sendStickyBroadcast(android.content.Intent intent) - void sendStickyBroadcast(Intent intent) => - _sendStickyBroadcast(reference, intent.reference).check(); + void sendStickyBroadcast( + Intent intent, + ) { + return _sendStickyBroadcast(reference, intent.reference).check(); + } static final _sendStickyBroadcast1 = jniLookup< ffi.NativeFunction< @@ -2537,9 +3232,13 @@ class Context extends jni.JObject { ffi.Pointer)>(); /// from: public void sendStickyBroadcast(android.content.Intent intent, android.os.Bundle bundle) - void sendStickyBroadcast1(Intent intent, jni.JObject bundle) => - _sendStickyBroadcast1(reference, intent.reference, bundle.reference) - .check(); + void sendStickyBroadcast1( + Intent intent, + jni.JObject bundle, + ) { + return _sendStickyBroadcast1(reference, intent.reference, bundle.reference) + .check(); + } static final _sendStickyOrderedBroadcast = jniLookup< ffi.NativeFunction< @@ -2563,17 +3262,24 @@ class Context extends jni.JObject { ffi.Pointer)>(); /// from: public abstract void sendStickyOrderedBroadcast(android.content.Intent intent, android.content.BroadcastReceiver broadcastReceiver, android.os.Handler handler, int i, java.lang.String string, android.os.Bundle bundle) - void sendStickyOrderedBroadcast(Intent intent, jni.JObject broadcastReceiver, - jni.JObject handler, int i, jni.JString string, jni.JObject bundle) => - _sendStickyOrderedBroadcast( - reference, - intent.reference, - broadcastReceiver.reference, - handler.reference, - i, - string.reference, - bundle.reference) - .check(); + void sendStickyOrderedBroadcast( + Intent intent, + jni.JObject broadcastReceiver, + jni.JObject handler, + int i, + jni.JString string, + jni.JObject bundle, + ) { + return _sendStickyOrderedBroadcast( + reference, + intent.reference, + broadcastReceiver.reference, + handler.reference, + i, + string.reference, + bundle.reference) + .check(); + } static final _removeStickyBroadcast = jniLookup< ffi.NativeFunction< @@ -2584,8 +3290,11 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public abstract void removeStickyBroadcast(android.content.Intent intent) - void removeStickyBroadcast(Intent intent) => - _removeStickyBroadcast(reference, intent.reference).check(); + void removeStickyBroadcast( + Intent intent, + ) { + return _removeStickyBroadcast(reference, intent.reference).check(); + } static final _sendStickyBroadcastAsUser = jniLookup< ffi.NativeFunction< @@ -2598,10 +3307,14 @@ class Context extends jni.JObject { ffi.Pointer)>(); /// from: public abstract void sendStickyBroadcastAsUser(android.content.Intent intent, android.os.UserHandle userHandle) - void sendStickyBroadcastAsUser(Intent intent, jni.JObject userHandle) => - _sendStickyBroadcastAsUser( - reference, intent.reference, userHandle.reference) - .check(); + void sendStickyBroadcastAsUser( + Intent intent, + jni.JObject userHandle, + ) { + return _sendStickyBroadcastAsUser( + reference, intent.reference, userHandle.reference) + .check(); + } static final _sendStickyOrderedBroadcastAsUser = jniLookup< ffi.NativeFunction< @@ -2628,23 +3341,25 @@ class Context extends jni.JObject { /// from: public abstract void sendStickyOrderedBroadcastAsUser(android.content.Intent intent, android.os.UserHandle userHandle, android.content.BroadcastReceiver broadcastReceiver, android.os.Handler handler, int i, java.lang.String string, android.os.Bundle bundle) void sendStickyOrderedBroadcastAsUser( - Intent intent, - jni.JObject userHandle, - jni.JObject broadcastReceiver, - jni.JObject handler, - int i, - jni.JString string, - jni.JObject bundle) => - _sendStickyOrderedBroadcastAsUser( - reference, - intent.reference, - userHandle.reference, - broadcastReceiver.reference, - handler.reference, - i, - string.reference, - bundle.reference) - .check(); + Intent intent, + jni.JObject userHandle, + jni.JObject broadcastReceiver, + jni.JObject handler, + int i, + jni.JString string, + jni.JObject bundle, + ) { + return _sendStickyOrderedBroadcastAsUser( + reference, + intent.reference, + userHandle.reference, + broadcastReceiver.reference, + handler.reference, + i, + string.reference, + bundle.reference) + .check(); + } static final _removeStickyBroadcastAsUser = jniLookup< ffi.NativeFunction< @@ -2656,10 +3371,14 @@ class Context extends jni.JObject { ffi.Pointer)>(); /// from: public abstract void removeStickyBroadcastAsUser(android.content.Intent intent, android.os.UserHandle userHandle) - void removeStickyBroadcastAsUser(Intent intent, jni.JObject userHandle) => - _removeStickyBroadcastAsUser( - reference, intent.reference, userHandle.reference) - .check(); + void removeStickyBroadcastAsUser( + Intent intent, + jni.JObject userHandle, + ) { + return _removeStickyBroadcastAsUser( + reference, intent.reference, userHandle.reference) + .check(); + } static final _registerReceiver = jniLookup< ffi.NativeFunction< @@ -2672,12 +3391,15 @@ class Context extends jni.JObject { ffi.Pointer)>(); /// from: public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver broadcastReceiver, android.content.IntentFilter intentFilter) - /// The returned object must be deleted after use, by calling the `delete` method. + /// The returned object must be released after use, by calling the [release] method. Intent registerReceiver( - jni.JObject broadcastReceiver, jni.JObject intentFilter) => - const $IntentType().fromRef(_registerReceiver( - reference, broadcastReceiver.reference, intentFilter.reference) - .object); + jni.JObject broadcastReceiver, + jni.JObject intentFilter, + ) { + return const $IntentType().fromRef(_registerReceiver( + reference, broadcastReceiver.reference, intentFilter.reference) + .object); + } static final _registerReceiver1 = jniLookup< ffi.NativeFunction< @@ -2691,12 +3413,16 @@ class Context extends jni.JObject { ffi.Pointer, int)>(); /// from: public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver broadcastReceiver, android.content.IntentFilter intentFilter, int i) - /// The returned object must be deleted after use, by calling the `delete` method. + /// The returned object must be released after use, by calling the [release] method. Intent registerReceiver1( - jni.JObject broadcastReceiver, jni.JObject intentFilter, int i) => - const $IntentType().fromRef(_registerReceiver1( - reference, broadcastReceiver.reference, intentFilter.reference, i) - .object); + jni.JObject broadcastReceiver, + jni.JObject intentFilter, + int i, + ) { + return const $IntentType().fromRef(_registerReceiver1( + reference, broadcastReceiver.reference, intentFilter.reference, i) + .object); + } static final _registerReceiver2 = jniLookup< ffi.NativeFunction< @@ -2715,16 +3441,21 @@ class Context extends jni.JObject { ffi.Pointer)>(); /// from: public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver broadcastReceiver, android.content.IntentFilter intentFilter, java.lang.String string, android.os.Handler handler) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent registerReceiver2(jni.JObject broadcastReceiver, - jni.JObject intentFilter, jni.JString string, jni.JObject handler) => - const $IntentType().fromRef(_registerReceiver2( - reference, - broadcastReceiver.reference, - intentFilter.reference, - string.reference, - handler.reference) - .object); + /// The returned object must be released after use, by calling the [release] method. + Intent registerReceiver2( + jni.JObject broadcastReceiver, + jni.JObject intentFilter, + jni.JString string, + jni.JObject handler, + ) { + return const $IntentType().fromRef(_registerReceiver2( + reference, + broadcastReceiver.reference, + intentFilter.reference, + string.reference, + handler.reference) + .object); + } static final _registerReceiver3 = jniLookup< ffi.NativeFunction< @@ -2745,21 +3476,23 @@ class Context extends jni.JObject { int)>(); /// from: public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver broadcastReceiver, android.content.IntentFilter intentFilter, java.lang.String string, android.os.Handler handler, int i) - /// The returned object must be deleted after use, by calling the `delete` method. + /// The returned object must be released after use, by calling the [release] method. Intent registerReceiver3( - jni.JObject broadcastReceiver, - jni.JObject intentFilter, - jni.JString string, - jni.JObject handler, - int i) => - const $IntentType().fromRef(_registerReceiver3( - reference, - broadcastReceiver.reference, - intentFilter.reference, - string.reference, - handler.reference, - i) - .object); + jni.JObject broadcastReceiver, + jni.JObject intentFilter, + jni.JString string, + jni.JObject handler, + int i, + ) { + return const $IntentType().fromRef(_registerReceiver3( + reference, + broadcastReceiver.reference, + intentFilter.reference, + string.reference, + handler.reference, + i) + .object); + } static final _unregisterReceiver = jniLookup< ffi.NativeFunction< @@ -2770,8 +3503,11 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public abstract void unregisterReceiver(android.content.BroadcastReceiver broadcastReceiver) - void unregisterReceiver(jni.JObject broadcastReceiver) => - _unregisterReceiver(reference, broadcastReceiver.reference).check(); + void unregisterReceiver( + jni.JObject broadcastReceiver, + ) { + return _unregisterReceiver(reference, broadcastReceiver.reference).check(); + } static final _startService = jniLookup< ffi.NativeFunction< @@ -2782,9 +3518,13 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public abstract android.content.ComponentName startService(android.content.Intent intent) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject startService(Intent intent) => const jni.JObjectType() - .fromRef(_startService(reference, intent.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject startService( + Intent intent, + ) { + return const jni.JObjectType() + .fromRef(_startService(reference, intent.reference).object); + } static final _startForegroundService = jniLookup< ffi.NativeFunction< @@ -2795,9 +3535,13 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public abstract android.content.ComponentName startForegroundService(android.content.Intent intent) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject startForegroundService(Intent intent) => const jni.JObjectType() - .fromRef(_startForegroundService(reference, intent.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject startForegroundService( + Intent intent, + ) { + return const jni.JObjectType() + .fromRef(_startForegroundService(reference, intent.reference).object); + } static final _stopService = jniLookup< ffi.NativeFunction< @@ -2808,8 +3552,11 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public abstract boolean stopService(android.content.Intent intent) - bool stopService(Intent intent) => - _stopService(reference, intent.reference).boolean; + bool stopService( + Intent intent, + ) { + return _stopService(reference, intent.reference).boolean; + } static final _bindService = jniLookup< ffi.NativeFunction< @@ -2823,9 +3570,15 @@ class Context extends jni.JObject { ffi.Pointer, int)>(); /// from: public abstract boolean bindService(android.content.Intent intent, android.content.ServiceConnection serviceConnection, int i) - bool bindService(Intent intent, jni.JObject serviceConnection, int i) => - _bindService(reference, intent.reference, serviceConnection.reference, i) - .boolean; + bool bindService( + Intent intent, + jni.JObject serviceConnection, + int i, + ) { + return _bindService( + reference, intent.reference, serviceConnection.reference, i) + .boolean; + } static final _bindService1 = jniLookup< ffi.NativeFunction< @@ -2840,11 +3593,16 @@ class Context extends jni.JObject { int, ffi.Pointer, ffi.Pointer)>(); /// from: public boolean bindService(android.content.Intent intent, int i, java.util.concurrent.Executor executor, android.content.ServiceConnection serviceConnection) - bool bindService1(Intent intent, int i, jni.JObject executor, - jni.JObject serviceConnection) => - _bindService1(reference, intent.reference, i, executor.reference, - serviceConnection.reference) - .boolean; + bool bindService1( + Intent intent, + int i, + jni.JObject executor, + jni.JObject serviceConnection, + ) { + return _bindService1(reference, intent.reference, i, executor.reference, + serviceConnection.reference) + .boolean; + } static final _bindIsolatedService = jniLookup< ffi.NativeFunction< @@ -2865,11 +3623,17 @@ class Context extends jni.JObject { ffi.Pointer)>(); /// from: public boolean bindIsolatedService(android.content.Intent intent, int i, java.lang.String string, java.util.concurrent.Executor executor, android.content.ServiceConnection serviceConnection) - bool bindIsolatedService(Intent intent, int i, jni.JString string, - jni.JObject executor, jni.JObject serviceConnection) => - _bindIsolatedService(reference, intent.reference, i, string.reference, - executor.reference, serviceConnection.reference) - .boolean; + bool bindIsolatedService( + Intent intent, + int i, + jni.JString string, + jni.JObject executor, + jni.JObject serviceConnection, + ) { + return _bindIsolatedService(reference, intent.reference, i, + string.reference, executor.reference, serviceConnection.reference) + .boolean; + } static final _bindServiceAsUser = jniLookup< ffi.NativeFunction< @@ -2884,11 +3648,16 @@ class Context extends jni.JObject { ffi.Pointer, int, ffi.Pointer)>(); /// from: public boolean bindServiceAsUser(android.content.Intent intent, android.content.ServiceConnection serviceConnection, int i, android.os.UserHandle userHandle) - bool bindServiceAsUser(Intent intent, jni.JObject serviceConnection, int i, - jni.JObject userHandle) => - _bindServiceAsUser(reference, intent.reference, - serviceConnection.reference, i, userHandle.reference) - .boolean; + bool bindServiceAsUser( + Intent intent, + jni.JObject serviceConnection, + int i, + jni.JObject userHandle, + ) { + return _bindServiceAsUser(reference, intent.reference, + serviceConnection.reference, i, userHandle.reference) + .boolean; + } static final _updateServiceGroup = jniLookup< ffi.NativeFunction< @@ -2902,9 +3671,14 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer, int, int)>(); /// from: public void updateServiceGroup(android.content.ServiceConnection serviceConnection, int i, int i1) - void updateServiceGroup(jni.JObject serviceConnection, int i, int i1) => - _updateServiceGroup(reference, serviceConnection.reference, i, i1) - .check(); + void updateServiceGroup( + jni.JObject serviceConnection, + int i, + int i1, + ) { + return _updateServiceGroup(reference, serviceConnection.reference, i, i1) + .check(); + } static final _unbindService = jniLookup< ffi.NativeFunction< @@ -2915,8 +3689,11 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public abstract void unbindService(android.content.ServiceConnection serviceConnection) - void unbindService(jni.JObject serviceConnection) => - _unbindService(reference, serviceConnection.reference).check(); + void unbindService( + jni.JObject serviceConnection, + ) { + return _unbindService(reference, serviceConnection.reference).check(); + } static final _startInstrumentation = jniLookup< ffi.NativeFunction< @@ -2931,10 +3708,14 @@ class Context extends jni.JObject { /// from: public abstract boolean startInstrumentation(android.content.ComponentName componentName, java.lang.String string, android.os.Bundle bundle) bool startInstrumentation( - jni.JObject componentName, jni.JString string, jni.JObject bundle) => - _startInstrumentation(reference, componentName.reference, - string.reference, bundle.reference) - .boolean; + jni.JObject componentName, + jni.JString string, + jni.JObject bundle, + ) { + return _startInstrumentation(reference, componentName.reference, + string.reference, bundle.reference) + .boolean; + } static final _getSystemService = jniLookup< ffi.NativeFunction< @@ -2945,9 +3726,13 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public abstract java.lang.Object getSystemService(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getSystemService(jni.JString string) => const jni.JObjectType() - .fromRef(_getSystemService(reference, string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getSystemService( + jni.JString string, + ) { + return const jni.JObjectType() + .fromRef(_getSystemService(reference, string.reference).object); + } static final _getSystemService1 = jniLookup< ffi.NativeFunction< @@ -2958,10 +3743,13 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public final T getSystemService(java.lang.Class class) - /// The returned object must be deleted after use, by calling the `delete` method. - T getSystemService1( - jni.JObjType $T, jni.JObject class0) => - $T.fromRef(_getSystemService1(reference, class0.reference).object); + /// The returned object must be released after use, by calling the [release] method. + $T getSystemService1<$T extends jni.JObject>( + jni.JObject class0, { + required jni.JObjType<$T> T, + }) { + return T.fromRef(_getSystemService1(reference, class0.reference).object); + } static final _getSystemServiceName = jniLookup< ffi.NativeFunction< @@ -2972,10 +3760,13 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public abstract java.lang.String getSystemServiceName(java.lang.Class class) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JString getSystemServiceName(jni.JObject class0) => - const jni.JStringType() - .fromRef(_getSystemServiceName(reference, class0.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JString getSystemServiceName( + jni.JObject class0, + ) { + return const jni.JStringType() + .fromRef(_getSystemServiceName(reference, class0.reference).object); + } static final _checkPermission = jniLookup< ffi.NativeFunction< @@ -2989,8 +3780,13 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer, int, int)>(); /// from: public abstract int checkPermission(java.lang.String string, int i, int i1) - int checkPermission(jni.JString string, int i, int i1) => - _checkPermission(reference, string.reference, i, i1).integer; + int checkPermission( + jni.JString string, + int i, + int i1, + ) { + return _checkPermission(reference, string.reference, i, i1).integer; + } static final _checkCallingPermission = jniLookup< ffi.NativeFunction< @@ -3001,8 +3797,11 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public abstract int checkCallingPermission(java.lang.String string) - int checkCallingPermission(jni.JString string) => - _checkCallingPermission(reference, string.reference).integer; + int checkCallingPermission( + jni.JString string, + ) { + return _checkCallingPermission(reference, string.reference).integer; + } static final _checkCallingOrSelfPermission = jniLookup< ffi.NativeFunction< @@ -3014,8 +3813,11 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public abstract int checkCallingOrSelfPermission(java.lang.String string) - int checkCallingOrSelfPermission(jni.JString string) => - _checkCallingOrSelfPermission(reference, string.reference).integer; + int checkCallingOrSelfPermission( + jni.JString string, + ) { + return _checkCallingOrSelfPermission(reference, string.reference).integer; + } static final _checkSelfPermission = jniLookup< ffi.NativeFunction< @@ -3026,8 +3828,11 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public abstract int checkSelfPermission(java.lang.String string) - int checkSelfPermission(jni.JString string) => - _checkSelfPermission(reference, string.reference).integer; + int checkSelfPermission( + jni.JString string, + ) { + return _checkSelfPermission(reference, string.reference).integer; + } static final _enforcePermission = jniLookup< ffi.NativeFunction< @@ -3043,9 +3848,15 @@ class Context extends jni.JObject { /// from: public abstract void enforcePermission(java.lang.String string, int i, int i1, java.lang.String string1) void enforcePermission( - jni.JString string, int i, int i1, jni.JString string1) => - _enforcePermission(reference, string.reference, i, i1, string1.reference) - .check(); + jni.JString string, + int i, + int i1, + jni.JString string1, + ) { + return _enforcePermission( + reference, string.reference, i, i1, string1.reference) + .check(); + } static final _enforceCallingPermission = jniLookup< ffi.NativeFunction< @@ -3058,9 +3869,14 @@ class Context extends jni.JObject { ffi.Pointer)>(); /// from: public abstract void enforceCallingPermission(java.lang.String string, java.lang.String string1) - void enforceCallingPermission(jni.JString string, jni.JString string1) => - _enforceCallingPermission(reference, string.reference, string1.reference) - .check(); + void enforceCallingPermission( + jni.JString string, + jni.JString string1, + ) { + return _enforceCallingPermission( + reference, string.reference, string1.reference) + .check(); + } static final _enforceCallingOrSelfPermission = jniLookup< ffi.NativeFunction< @@ -3073,10 +3889,13 @@ class Context extends jni.JObject { /// from: public abstract void enforceCallingOrSelfPermission(java.lang.String string, java.lang.String string1) void enforceCallingOrSelfPermission( - jni.JString string, jni.JString string1) => - _enforceCallingOrSelfPermission( - reference, string.reference, string1.reference) - .check(); + jni.JString string, + jni.JString string1, + ) { + return _enforceCallingOrSelfPermission( + reference, string.reference, string1.reference) + .check(); + } static final _grantUriPermission = jniLookup< ffi.NativeFunction< @@ -3090,9 +3909,14 @@ class Context extends jni.JObject { ffi.Pointer, int)>(); /// from: public abstract void grantUriPermission(java.lang.String string, android.net.Uri uri, int i) - void grantUriPermission(jni.JString string, jni.JObject uri, int i) => - _grantUriPermission(reference, string.reference, uri.reference, i) - .check(); + void grantUriPermission( + jni.JString string, + jni.JObject uri, + int i, + ) { + return _grantUriPermission(reference, string.reference, uri.reference, i) + .check(); + } static final _revokeUriPermission = jniLookup< ffi.NativeFunction< @@ -3105,8 +3929,12 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer, int)>(); /// from: public abstract void revokeUriPermission(android.net.Uri uri, int i) - void revokeUriPermission(jni.JObject uri, int i) => - _revokeUriPermission(reference, uri.reference, i).check(); + void revokeUriPermission( + jni.JObject uri, + int i, + ) { + return _revokeUriPermission(reference, uri.reference, i).check(); + } static final _revokeUriPermission1 = jniLookup< ffi.NativeFunction< @@ -3120,9 +3948,14 @@ class Context extends jni.JObject { ffi.Pointer, int)>(); /// from: public abstract void revokeUriPermission(java.lang.String string, android.net.Uri uri, int i) - void revokeUriPermission1(jni.JString string, jni.JObject uri, int i) => - _revokeUriPermission1(reference, string.reference, uri.reference, i) - .check(); + void revokeUriPermission1( + jni.JString string, + jni.JObject uri, + int i, + ) { + return _revokeUriPermission1(reference, string.reference, uri.reference, i) + .check(); + } static final _checkUriPermission = jniLookup< ffi.NativeFunction< @@ -3137,8 +3970,14 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer, int, int, int)>(); /// from: public abstract int checkUriPermission(android.net.Uri uri, int i, int i1, int i2) - int checkUriPermission(jni.JObject uri, int i, int i1, int i2) => - _checkUriPermission(reference, uri.reference, i, i1, i2).integer; + int checkUriPermission( + jni.JObject uri, + int i, + int i1, + int i2, + ) { + return _checkUriPermission(reference, uri.reference, i, i1, i2).integer; + } static final _checkUriPermissions = jniLookup< ffi.NativeFunction< @@ -3153,11 +3992,16 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer, int, int, int)>(); /// from: public java.lang.Object[] checkUriPermissions(java.util.List list, int i, int i1, int i2) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JArray checkUriPermissions( - jni.JObject list, int i, int i1, int i2) => - const jni.JArrayType(jni.JIntType()).fromRef( - _checkUriPermissions(reference, list.reference, i, i1, i2).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JArray checkUriPermissions( + jni.JList list, + int i, + int i1, + int i2, + ) { + return const jni.JArrayType(jni.jintType()).fromRef( + _checkUriPermissions(reference, list.reference, i, i1, i2).object); + } static final _checkCallingUriPermission = jniLookup< ffi.NativeFunction< @@ -3170,8 +4014,12 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer, int)>(); /// from: public abstract int checkCallingUriPermission(android.net.Uri uri, int i) - int checkCallingUriPermission(jni.JObject uri, int i) => - _checkCallingUriPermission(reference, uri.reference, i).integer; + int checkCallingUriPermission( + jni.JObject uri, + int i, + ) { + return _checkCallingUriPermission(reference, uri.reference, i).integer; + } static final _checkCallingUriPermissions = jniLookup< ffi.NativeFunction< @@ -3184,10 +4032,14 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer, int)>(); /// from: public java.lang.Object[] checkCallingUriPermissions(java.util.List list, int i) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JArray checkCallingUriPermissions(jni.JObject list, int i) => - const jni.JArrayType(jni.JIntType()).fromRef( - _checkCallingUriPermissions(reference, list.reference, i).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JArray checkCallingUriPermissions( + jni.JList list, + int i, + ) { + return const jni.JArrayType(jni.jintType()).fromRef( + _checkCallingUriPermissions(reference, list.reference, i).object); + } static final _checkCallingOrSelfUriPermission = jniLookup< ffi.NativeFunction< @@ -3200,8 +4052,13 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer, int)>(); /// from: public abstract int checkCallingOrSelfUriPermission(android.net.Uri uri, int i) - int checkCallingOrSelfUriPermission(jni.JObject uri, int i) => - _checkCallingOrSelfUriPermission(reference, uri.reference, i).integer; + int checkCallingOrSelfUriPermission( + jni.JObject uri, + int i, + ) { + return _checkCallingOrSelfUriPermission(reference, uri.reference, i) + .integer; + } static final _checkCallingOrSelfUriPermissions = jniLookup< ffi.NativeFunction< @@ -3214,12 +4071,14 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer, int)>(); /// from: public java.lang.Object[] checkCallingOrSelfUriPermissions(java.util.List list, int i) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JArray checkCallingOrSelfUriPermissions( - jni.JObject list, int i) => - const jni.JArrayType(jni.JIntType()).fromRef( - _checkCallingOrSelfUriPermissions(reference, list.reference, i) - .object); + /// The returned object must be released after use, by calling the [release] method. + jni.JArray checkCallingOrSelfUriPermissions( + jni.JList list, + int i, + ) { + return const jni.JArrayType(jni.jintType()).fromRef( + _checkCallingOrSelfUriPermissions(reference, list.reference, i).object); + } static final _checkUriPermission1 = jniLookup< ffi.NativeFunction< @@ -3236,11 +4095,18 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer, int, int, int)>(); /// from: public abstract int checkUriPermission(android.net.Uri uri, java.lang.String string, java.lang.String string1, int i, int i1, int i2) - int checkUriPermission1(jni.JObject uri, jni.JString string, - jni.JString string1, int i, int i1, int i2) => - _checkUriPermission1(reference, uri.reference, string.reference, - string1.reference, i, i1, i2) - .integer; + int checkUriPermission1( + jni.JObject uri, + jni.JString string, + jni.JString string1, + int i, + int i1, + int i2, + ) { + return _checkUriPermission1(reference, uri.reference, string.reference, + string1.reference, i, i1, i2) + .integer; + } static final _enforceUriPermission = jniLookup< ffi.NativeFunction< @@ -3257,10 +4123,16 @@ class Context extends jni.JObject { /// from: public abstract void enforceUriPermission(android.net.Uri uri, int i, int i1, int i2, java.lang.String string) void enforceUriPermission( - jni.JObject uri, int i, int i1, int i2, jni.JString string) => - _enforceUriPermission( - reference, uri.reference, i, i1, i2, string.reference) - .check(); + jni.JObject uri, + int i, + int i1, + int i2, + jni.JString string, + ) { + return _enforceUriPermission( + reference, uri.reference, i, i1, i2, string.reference) + .check(); + } static final _enforceCallingUriPermission = jniLookup< ffi.NativeFunction< @@ -3276,10 +4148,14 @@ class Context extends jni.JObject { /// from: public abstract void enforceCallingUriPermission(android.net.Uri uri, int i, java.lang.String string) void enforceCallingUriPermission( - jni.JObject uri, int i, jni.JString string) => - _enforceCallingUriPermission( - reference, uri.reference, i, string.reference) - .check(); + jni.JObject uri, + int i, + jni.JString string, + ) { + return _enforceCallingUriPermission( + reference, uri.reference, i, string.reference) + .check(); + } static final _enforceCallingOrSelfUriPermission = jniLookup< ffi.NativeFunction< @@ -3295,10 +4171,14 @@ class Context extends jni.JObject { /// from: public abstract void enforceCallingOrSelfUriPermission(android.net.Uri uri, int i, java.lang.String string) void enforceCallingOrSelfUriPermission( - jni.JObject uri, int i, jni.JString string) => - _enforceCallingOrSelfUriPermission( - reference, uri.reference, i, string.reference) - .check(); + jni.JObject uri, + int i, + jni.JString string, + ) { + return _enforceCallingOrSelfUriPermission( + reference, uri.reference, i, string.reference) + .check(); + } static final _enforceUriPermission1 = jniLookup< ffi.NativeFunction< @@ -3323,11 +4203,19 @@ class Context extends jni.JObject { ffi.Pointer)>(); /// from: public abstract void enforceUriPermission(android.net.Uri uri, java.lang.String string, java.lang.String string1, int i, int i1, int i2, java.lang.String string2) - void enforceUriPermission1(jni.JObject uri, jni.JString string, - jni.JString string1, int i, int i1, int i2, jni.JString string2) => - _enforceUriPermission1(reference, uri.reference, string.reference, - string1.reference, i, i1, i2, string2.reference) - .check(); + void enforceUriPermission1( + jni.JObject uri, + jni.JString string, + jni.JString string1, + int i, + int i1, + int i2, + jni.JString string2, + ) { + return _enforceUriPermission1(reference, uri.reference, string.reference, + string1.reference, i, i1, i2, string2.reference) + .check(); + } static final _revokeSelfPermissionOnKill = jniLookup< ffi.NativeFunction< @@ -3339,8 +4227,11 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void revokeSelfPermissionOnKill(java.lang.String string) - void revokeSelfPermissionOnKill(jni.JString string) => - _revokeSelfPermissionOnKill(reference, string.reference).check(); + void revokeSelfPermissionOnKill( + jni.JString string, + ) { + return _revokeSelfPermissionOnKill(reference, string.reference).check(); + } static final _revokeSelfPermissionsOnKill = jniLookup< ffi.NativeFunction< @@ -3352,8 +4243,12 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void revokeSelfPermissionsOnKill(java.util.Collection collection) - void revokeSelfPermissionsOnKill(jni.JObject collection) => - _revokeSelfPermissionsOnKill(reference, collection.reference).check(); + void revokeSelfPermissionsOnKill( + jni.JObject collection, + ) { + return _revokeSelfPermissionsOnKill(reference, collection.reference) + .check(); + } static final _createPackageContext = jniLookup< ffi.NativeFunction< @@ -3366,10 +4261,14 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer, int)>(); /// from: public abstract android.content.Context createPackageContext(java.lang.String string, int i) - /// The returned object must be deleted after use, by calling the `delete` method. - Context createPackageContext(jni.JString string, int i) => - const $ContextType().fromRef( - _createPackageContext(reference, string.reference, i).object); + /// The returned object must be released after use, by calling the [release] method. + Context createPackageContext( + jni.JString string, + int i, + ) { + return const $ContextType() + .fromRef(_createPackageContext(reference, string.reference, i).object); + } static final _createContextForSplit = jniLookup< ffi.NativeFunction< @@ -3380,9 +4279,13 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public abstract android.content.Context createContextForSplit(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - Context createContextForSplit(jni.JString string) => const $ContextType() - .fromRef(_createContextForSplit(reference, string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + Context createContextForSplit( + jni.JString string, + ) { + return const $ContextType() + .fromRef(_createContextForSplit(reference, string.reference).object); + } static final _createConfigurationContext = jniLookup< ffi.NativeFunction< @@ -3394,11 +4297,13 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public abstract android.content.Context createConfigurationContext(android.content.res.Configuration configuration) - /// The returned object must be deleted after use, by calling the `delete` method. - Context createConfigurationContext(jni.JObject configuration) => - const $ContextType().fromRef( - _createConfigurationContext(reference, configuration.reference) - .object); + /// The returned object must be released after use, by calling the [release] method. + Context createConfigurationContext( + jni.JObject configuration, + ) { + return const $ContextType().fromRef( + _createConfigurationContext(reference, configuration.reference).object); + } static final _createDisplayContext = jniLookup< ffi.NativeFunction< @@ -3409,9 +4314,13 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public abstract android.content.Context createDisplayContext(android.view.Display display) - /// The returned object must be deleted after use, by calling the `delete` method. - Context createDisplayContext(jni.JObject display) => const $ContextType() - .fromRef(_createDisplayContext(reference, display.reference).object); + /// The returned object must be released after use, by calling the [release] method. + Context createDisplayContext( + jni.JObject display, + ) { + return const $ContextType() + .fromRef(_createDisplayContext(reference, display.reference).object); + } static final _createWindowContext = jniLookup< ffi.NativeFunction< @@ -3422,9 +4331,14 @@ class Context extends jni.JObject { ffi.Pointer, int, ffi.Pointer)>(); /// from: public android.content.Context createWindowContext(int i, android.os.Bundle bundle) - /// The returned object must be deleted after use, by calling the `delete` method. - Context createWindowContext(int i, jni.JObject bundle) => const $ContextType() - .fromRef(_createWindowContext(reference, i, bundle.reference).object); + /// The returned object must be released after use, by calling the [release] method. + Context createWindowContext( + int i, + jni.JObject bundle, + ) { + return const $ContextType() + .fromRef(_createWindowContext(reference, i, bundle.reference).object); + } static final _createWindowContext1 = jniLookup< ffi.NativeFunction< @@ -3438,12 +4352,16 @@ class Context extends jni.JObject { int, ffi.Pointer)>(); /// from: public android.content.Context createWindowContext(android.view.Display display, int i, android.os.Bundle bundle) - /// The returned object must be deleted after use, by calling the `delete` method. + /// The returned object must be released after use, by calling the [release] method. Context createWindowContext1( - jni.JObject display, int i, jni.JObject bundle) => - const $ContextType().fromRef(_createWindowContext1( - reference, display.reference, i, bundle.reference) - .object); + jni.JObject display, + int i, + jni.JObject bundle, + ) { + return const $ContextType().fromRef( + _createWindowContext1(reference, display.reference, i, bundle.reference) + .object); + } static final _createContext = jniLookup< ffi.NativeFunction< @@ -3454,9 +4372,13 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public android.content.Context createContext(android.content.ContextParams contextParams) - /// The returned object must be deleted after use, by calling the `delete` method. - Context createContext(jni.JObject contextParams) => const $ContextType() - .fromRef(_createContext(reference, contextParams.reference).object); + /// The returned object must be released after use, by calling the [release] method. + Context createContext( + jni.JObject contextParams, + ) { + return const $ContextType() + .fromRef(_createContext(reference, contextParams.reference).object); + } static final _createAttributionContext = jniLookup< ffi.NativeFunction< @@ -3467,59 +4389,71 @@ class Context extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public android.content.Context createAttributionContext(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - Context createAttributionContext(jni.JString string) => const $ContextType() - .fromRef(_createAttributionContext(reference, string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + Context createAttributionContext( + jni.JString string, + ) { + return const $ContextType() + .fromRef(_createAttributionContext(reference, string.reference).object); + } static final _createDeviceProtectedStorageContext = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>( + ffi + .NativeFunction)>>( "Context__createDeviceProtectedStorageContext") .asFunction)>(); /// from: public abstract android.content.Context createDeviceProtectedStorageContext() - /// The returned object must be deleted after use, by calling the `delete` method. - Context createDeviceProtectedStorageContext() => const $ContextType() - .fromRef(_createDeviceProtectedStorageContext(reference).object); + /// The returned object must be released after use, by calling the [release] method. + Context createDeviceProtectedStorageContext() { + return const $ContextType() + .fromRef(_createDeviceProtectedStorageContext(reference).object); + } static final _getDisplay = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Context__getDisplay") + ffi + .NativeFunction)>>( + "Context__getDisplay") .asFunction)>(); /// from: public android.view.Display getDisplay() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getDisplay() => - const jni.JObjectType().fromRef(_getDisplay(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getDisplay() { + return const jni.JObjectType().fromRef(_getDisplay(reference).object); + } static final _isRestricted = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Context__isRestricted") + ffi + .NativeFunction)>>( + "Context__isRestricted") .asFunction)>(); /// from: public boolean isRestricted() - bool isRestricted() => _isRestricted(reference).boolean; + bool isRestricted() { + return _isRestricted(reference).boolean; + } static final _isDeviceProtectedStorage = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Context__isDeviceProtectedStorage") + ffi + .NativeFunction)>>( + "Context__isDeviceProtectedStorage") .asFunction)>(); /// from: public abstract boolean isDeviceProtectedStorage() - bool isDeviceProtectedStorage() => - _isDeviceProtectedStorage(reference).boolean; + bool isDeviceProtectedStorage() { + return _isDeviceProtectedStorage(reference).boolean; + } static final _isUiContext = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Context__isUiContext") + ffi + .NativeFunction)>>( + "Context__isUiContext") .asFunction)>(); /// from: public boolean isUiContext() - bool isUiContext() => _isUiContext(reference).boolean; + bool isUiContext() { + return _isUiContext(reference).boolean; + } } class $ContextType extends jni.JObjType { @@ -3530,640 +4464,943 @@ class $ContextType extends jni.JObjType { @override Context fromRef(jni.JObjectPtr ref) => Context.fromRef(ref); -} -extension $ContextArray on jni.JArray { - Context operator [](int index) { - return (elementType as $ContextType) - .fromRef(elementAt(index, jni.JniCallType.objectType).object); - } + @override + jni.JObjType get superType => const jni.JObjectType(); + + @override + final superCount = 1; + + @override + int get hashCode => ($ContextType).hashCode; - void operator []=(int index, Context value) { - (this as jni.JArray)[index] = value; + @override + bool operator ==(Object other) { + return other.runtimeType == ($ContextType) && other is $ContextType; } } -/// from: android.content.Intent -class Intent extends jni.JObject { - late final jni.JObjType? _$type; +/// from: android.content.Intent$FilterComparison +class Intent_FilterComparison extends jni.JObject { @override - jni.JObjType get $type => _$type ??= type; + late final jni.JObjType $type = type; - Intent.fromRef( - jni.JObjectPtr ref, - ) : super.fromRef(ref); + Intent_FilterComparison.fromRef(super.ref) : super.fromRef(); /// The type which includes information such as the signature of this class. - static const type = $IntentType(); - - /// from: static public final java.lang.String ACTION_AIRPLANE_MODE_CHANGED - static const ACTION_AIRPLANE_MODE_CHANGED = - "android.intent.action.AIRPLANE_MODE"; + static const type = $Intent_FilterComparisonType(); + static final _new0 = jniLookup< + ffi + .NativeFunction)>>( + "Intent_FilterComparison__new0") + .asFunction)>(); - /// from: static public final java.lang.String ACTION_ALL_APPS - static const ACTION_ALL_APPS = "android.intent.action.ALL_APPS"; + /// from: public void (android.content.Intent intent) + /// The returned object must be released after use, by calling the [release] method. + factory Intent_FilterComparison( + Intent intent, + ) { + return Intent_FilterComparison.fromRef(_new0(intent.reference).object); + } - /// from: static public final java.lang.String ACTION_ANSWER - static const ACTION_ANSWER = "android.intent.action.ANSWER"; + static final _getIntent = jniLookup< + ffi + .NativeFunction)>>( + "Intent_FilterComparison__getIntent") + .asFunction)>(); - /// from: static public final java.lang.String ACTION_APPLICATION_LOCALE_CHANGED - static const ACTION_APPLICATION_LOCALE_CHANGED = - "android.intent.action.APPLICATION_LOCALE_CHANGED"; + /// from: public android.content.Intent getIntent() + /// The returned object must be released after use, by calling the [release] method. + Intent getIntent() { + return const $IntentType().fromRef(_getIntent(reference).object); + } - /// from: static public final java.lang.String ACTION_APPLICATION_PREFERENCES - static const ACTION_APPLICATION_PREFERENCES = - "android.intent.action.APPLICATION_PREFERENCES"; + static final _equals1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Pointer)>>("Intent_FilterComparison__equals1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer)>(); - /// from: static public final java.lang.String ACTION_APPLICATION_RESTRICTIONS_CHANGED - static const ACTION_APPLICATION_RESTRICTIONS_CHANGED = - "android.intent.action.APPLICATION_RESTRICTIONS_CHANGED"; + /// from: public boolean equals(java.lang.Object object) + bool equals1( + jni.JObject object, + ) { + return _equals1(reference, object.reference).boolean; + } - /// from: static public final java.lang.String ACTION_APP_ERROR - static const ACTION_APP_ERROR = "android.intent.action.APP_ERROR"; + static final _hashCode1 = jniLookup< + ffi + .NativeFunction)>>( + "Intent_FilterComparison__hashCode1") + .asFunction)>(); - /// from: static public final java.lang.String ACTION_ASSIST - static const ACTION_ASSIST = "android.intent.action.ASSIST"; + /// from: public int hashCode() + int hashCode1() { + return _hashCode1(reference).integer; + } +} - /// from: static public final java.lang.String ACTION_ATTACH_DATA - static const ACTION_ATTACH_DATA = "android.intent.action.ATTACH_DATA"; +class $Intent_FilterComparisonType + extends jni.JObjType { + const $Intent_FilterComparisonType(); - /// from: static public final java.lang.String ACTION_AUTO_REVOKE_PERMISSIONS - static const ACTION_AUTO_REVOKE_PERMISSIONS = - "android.intent.action.AUTO_REVOKE_PERMISSIONS"; + @override + String get signature => r"Landroid/content/Intent$FilterComparison;"; - /// from: static public final java.lang.String ACTION_BATTERY_CHANGED - static const ACTION_BATTERY_CHANGED = "android.intent.action.BATTERY_CHANGED"; + @override + Intent_FilterComparison fromRef(jni.JObjectPtr ref) => + Intent_FilterComparison.fromRef(ref); - /// from: static public final java.lang.String ACTION_BATTERY_LOW - static const ACTION_BATTERY_LOW = "android.intent.action.BATTERY_LOW"; + @override + jni.JObjType get superType => const jni.JObjectType(); - /// from: static public final java.lang.String ACTION_BATTERY_OKAY - static const ACTION_BATTERY_OKAY = "android.intent.action.BATTERY_OKAY"; + @override + final superCount = 1; - /// from: static public final java.lang.String ACTION_BOOT_COMPLETED - static const ACTION_BOOT_COMPLETED = "android.intent.action.BOOT_COMPLETED"; + @override + int get hashCode => ($Intent_FilterComparisonType).hashCode; - /// from: static public final java.lang.String ACTION_BUG_REPORT - static const ACTION_BUG_REPORT = "android.intent.action.BUG_REPORT"; + @override + bool operator ==(Object other) { + return other.runtimeType == ($Intent_FilterComparisonType) && + other is $Intent_FilterComparisonType; + } +} - /// from: static public final java.lang.String ACTION_CALL - static const ACTION_CALL = "android.intent.action.CALL"; +/// from: android.content.Intent$ShortcutIconResource +class Intent_ShortcutIconResource extends jni.JObject { + @override + late final jni.JObjType $type = type; - /// from: static public final java.lang.String ACTION_CALL_BUTTON - static const ACTION_CALL_BUTTON = "android.intent.action.CALL_BUTTON"; + Intent_ShortcutIconResource.fromRef(super.ref) : super.fromRef(); - /// from: static public final java.lang.String ACTION_CAMERA_BUTTON - static const ACTION_CAMERA_BUTTON = "android.intent.action.CAMERA_BUTTON"; + /// The type which includes information such as the signature of this class. + static const type = $Intent_ShortcutIconResourceType(); + static final _get_CREATOR = + jniLookup>( + "get_Intent_ShortcutIconResource__CREATOR") + .asFunction(); - /// from: static public final java.lang.String ACTION_CARRIER_SETUP - static const ACTION_CARRIER_SETUP = "android.intent.action.CARRIER_SETUP"; + /// from: static public final android.os.Parcelable$Creator CREATOR + /// The returned object must be released after use, by calling the [release] method. + static jni.JObject get CREATOR => + const jni.JObjectType().fromRef(_get_CREATOR().object); - /// from: static public final java.lang.String ACTION_CHOOSER - static const ACTION_CHOOSER = "android.intent.action.CHOOSER"; + static final _get_packageName = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + jni.JObjectPtr, + )>>("get_Intent_ShortcutIconResource__packageName") + .asFunction< + jni.JniResult Function( + jni.JObjectPtr, + )>(); - /// from: static public final java.lang.String ACTION_CLOSE_SYSTEM_DIALOGS - static const ACTION_CLOSE_SYSTEM_DIALOGS = - "android.intent.action.CLOSE_SYSTEM_DIALOGS"; + static final _set_packageName = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + jni.JObjectPtr, ffi.Pointer)>>( + "set_Intent_ShortcutIconResource__packageName") + .asFunction< + jni.JniResult Function(jni.JObjectPtr, ffi.Pointer)>(); - /// from: static public final java.lang.String ACTION_CONFIGURATION_CHANGED - static const ACTION_CONFIGURATION_CHANGED = - "android.intent.action.CONFIGURATION_CHANGED"; + /// from: public java.lang.String packageName + /// The returned object must be released after use, by calling the [release] method. + jni.JString get packageName => + const jni.JStringType().fromRef(_get_packageName(reference).object); - /// from: static public final java.lang.String ACTION_CREATE_DOCUMENT - static const ACTION_CREATE_DOCUMENT = "android.intent.action.CREATE_DOCUMENT"; + /// from: public java.lang.String packageName + /// The returned object must be released after use, by calling the [release] method. + set packageName(jni.JString value) => + _set_packageName(reference, value.reference).check(); - /// from: static public final java.lang.String ACTION_CREATE_REMINDER - static const ACTION_CREATE_REMINDER = "android.intent.action.CREATE_REMINDER"; + static final _get_resourceName = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + jni.JObjectPtr, + )>>("get_Intent_ShortcutIconResource__resourceName") + .asFunction< + jni.JniResult Function( + jni.JObjectPtr, + )>(); - /// from: static public final java.lang.String ACTION_CREATE_SHORTCUT - static const ACTION_CREATE_SHORTCUT = "android.intent.action.CREATE_SHORTCUT"; + static final _set_resourceName = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + jni.JObjectPtr, ffi.Pointer)>>( + "set_Intent_ShortcutIconResource__resourceName") + .asFunction< + jni.JniResult Function(jni.JObjectPtr, ffi.Pointer)>(); - /// from: static public final java.lang.String ACTION_DATE_CHANGED - static const ACTION_DATE_CHANGED = "android.intent.action.DATE_CHANGED"; + /// from: public java.lang.String resourceName + /// The returned object must be released after use, by calling the [release] method. + jni.JString get resourceName => + const jni.JStringType().fromRef(_get_resourceName(reference).object); - /// from: static public final java.lang.String ACTION_DEFAULT - static const ACTION_DEFAULT = "android.intent.action.VIEW"; + /// from: public java.lang.String resourceName + /// The returned object must be released after use, by calling the [release] method. + set resourceName(jni.JString value) => + _set_resourceName(reference, value.reference).check(); - /// from: static public final java.lang.String ACTION_DEFINE - static const ACTION_DEFINE = "android.intent.action.DEFINE"; + static final _new0 = jniLookup>( + "Intent_ShortcutIconResource__new0") + .asFunction(); - /// from: static public final java.lang.String ACTION_DELETE - static const ACTION_DELETE = "android.intent.action.DELETE"; + /// from: public void () + /// The returned object must be released after use, by calling the [release] method. + factory Intent_ShortcutIconResource() { + return Intent_ShortcutIconResource.fromRef(_new0().object); + } - /// from: static public final java.lang.String ACTION_DEVICE_STORAGE_LOW - static const ACTION_DEVICE_STORAGE_LOW = - "android.intent.action.DEVICE_STORAGE_LOW"; + static final _fromContext = jniLookup< + ffi.NativeFunction< + jni.JniResult Function(ffi.Pointer, + ffi.Int32)>>("Intent_ShortcutIconResource__fromContext") + .asFunction, int)>(); - /// from: static public final java.lang.String ACTION_DEVICE_STORAGE_OK - static const ACTION_DEVICE_STORAGE_OK = - "android.intent.action.DEVICE_STORAGE_OK"; + /// from: static public android.content.Intent$ShortcutIconResource fromContext(android.content.Context context, int i) + /// The returned object must be released after use, by calling the [release] method. + static Intent_ShortcutIconResource fromContext( + Context context, + int i, + ) { + return const $Intent_ShortcutIconResourceType() + .fromRef(_fromContext(context.reference, i).object); + } + + static final _describeContents = jniLookup< + ffi + .NativeFunction)>>( + "Intent_ShortcutIconResource__describeContents") + .asFunction)>(); + + /// from: public int describeContents() + int describeContents() { + return _describeContents(reference).integer; + } + + static final _writeToParcel = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Int32)>>("Intent_ShortcutIconResource__writeToParcel") + .asFunction< + jni.JniResult Function( + ffi.Pointer, ffi.Pointer, int)>(); + + /// from: public void writeToParcel(android.os.Parcel parcel, int i) + void writeToParcel( + jni.JObject parcel, + int i, + ) { + return _writeToParcel(reference, parcel.reference, i).check(); + } + + static final _toString1 = jniLookup< + ffi + .NativeFunction)>>( + "Intent_ShortcutIconResource__toString1") + .asFunction)>(); + + /// from: public java.lang.String toString() + /// The returned object must be released after use, by calling the [release] method. + jni.JString toString1() { + return const jni.JStringType().fromRef(_toString1(reference).object); + } +} + +class $Intent_ShortcutIconResourceType + extends jni.JObjType { + const $Intent_ShortcutIconResourceType(); + + @override + String get signature => r"Landroid/content/Intent$ShortcutIconResource;"; + + @override + Intent_ShortcutIconResource fromRef(jni.JObjectPtr ref) => + Intent_ShortcutIconResource.fromRef(ref); + + @override + jni.JObjType get superType => const jni.JObjectType(); + + @override + final superCount = 1; + + @override + int get hashCode => ($Intent_ShortcutIconResourceType).hashCode; + + @override + bool operator ==(Object other) { + return other.runtimeType == ($Intent_ShortcutIconResourceType) && + other is $Intent_ShortcutIconResourceType; + } +} + +/// from: android.content.Intent +class Intent extends jni.JObject { + @override + late final jni.JObjType $type = type; + + Intent.fromRef(super.ref) : super.fromRef(); + + /// The type which includes information such as the signature of this class. + static const type = $IntentType(); + + /// from: static public final java.lang.String ACTION_AIRPLANE_MODE_CHANGED + static const ACTION_AIRPLANE_MODE_CHANGED = + r"""android.intent.action.AIRPLANE_MODE"""; + + /// from: static public final java.lang.String ACTION_ALL_APPS + static const ACTION_ALL_APPS = r"""android.intent.action.ALL_APPS"""; + + /// from: static public final java.lang.String ACTION_ANSWER + static const ACTION_ANSWER = r"""android.intent.action.ANSWER"""; + + /// from: static public final java.lang.String ACTION_APPLICATION_LOCALE_CHANGED + static const ACTION_APPLICATION_LOCALE_CHANGED = + r"""android.intent.action.APPLICATION_LOCALE_CHANGED"""; + + /// from: static public final java.lang.String ACTION_APPLICATION_PREFERENCES + static const ACTION_APPLICATION_PREFERENCES = + r"""android.intent.action.APPLICATION_PREFERENCES"""; + + /// from: static public final java.lang.String ACTION_APPLICATION_RESTRICTIONS_CHANGED + static const ACTION_APPLICATION_RESTRICTIONS_CHANGED = + r"""android.intent.action.APPLICATION_RESTRICTIONS_CHANGED"""; + + /// from: static public final java.lang.String ACTION_APP_ERROR + static const ACTION_APP_ERROR = r"""android.intent.action.APP_ERROR"""; + + /// from: static public final java.lang.String ACTION_ASSIST + static const ACTION_ASSIST = r"""android.intent.action.ASSIST"""; + + /// from: static public final java.lang.String ACTION_ATTACH_DATA + static const ACTION_ATTACH_DATA = r"""android.intent.action.ATTACH_DATA"""; + + /// from: static public final java.lang.String ACTION_AUTO_REVOKE_PERMISSIONS + static const ACTION_AUTO_REVOKE_PERMISSIONS = + r"""android.intent.action.AUTO_REVOKE_PERMISSIONS"""; + + /// from: static public final java.lang.String ACTION_BATTERY_CHANGED + static const ACTION_BATTERY_CHANGED = + r"""android.intent.action.BATTERY_CHANGED"""; + + /// from: static public final java.lang.String ACTION_BATTERY_LOW + static const ACTION_BATTERY_LOW = r"""android.intent.action.BATTERY_LOW"""; + + /// from: static public final java.lang.String ACTION_BATTERY_OKAY + static const ACTION_BATTERY_OKAY = r"""android.intent.action.BATTERY_OKAY"""; + + /// from: static public final java.lang.String ACTION_BOOT_COMPLETED + static const ACTION_BOOT_COMPLETED = + r"""android.intent.action.BOOT_COMPLETED"""; + + /// from: static public final java.lang.String ACTION_BUG_REPORT + static const ACTION_BUG_REPORT = r"""android.intent.action.BUG_REPORT"""; + + /// from: static public final java.lang.String ACTION_CALL + static const ACTION_CALL = r"""android.intent.action.CALL"""; + + /// from: static public final java.lang.String ACTION_CALL_BUTTON + static const ACTION_CALL_BUTTON = r"""android.intent.action.CALL_BUTTON"""; + + /// from: static public final java.lang.String ACTION_CAMERA_BUTTON + static const ACTION_CAMERA_BUTTON = + r"""android.intent.action.CAMERA_BUTTON"""; + + /// from: static public final java.lang.String ACTION_CARRIER_SETUP + static const ACTION_CARRIER_SETUP = + r"""android.intent.action.CARRIER_SETUP"""; + + /// from: static public final java.lang.String ACTION_CHOOSER + static const ACTION_CHOOSER = r"""android.intent.action.CHOOSER"""; + + /// from: static public final java.lang.String ACTION_CLOSE_SYSTEM_DIALOGS + static const ACTION_CLOSE_SYSTEM_DIALOGS = + r"""android.intent.action.CLOSE_SYSTEM_DIALOGS"""; + + /// from: static public final java.lang.String ACTION_CONFIGURATION_CHANGED + static const ACTION_CONFIGURATION_CHANGED = + r"""android.intent.action.CONFIGURATION_CHANGED"""; + + /// from: static public final java.lang.String ACTION_CREATE_DOCUMENT + static const ACTION_CREATE_DOCUMENT = + r"""android.intent.action.CREATE_DOCUMENT"""; + + /// from: static public final java.lang.String ACTION_CREATE_REMINDER + static const ACTION_CREATE_REMINDER = + r"""android.intent.action.CREATE_REMINDER"""; + + /// from: static public final java.lang.String ACTION_CREATE_SHORTCUT + static const ACTION_CREATE_SHORTCUT = + r"""android.intent.action.CREATE_SHORTCUT"""; + + /// from: static public final java.lang.String ACTION_DATE_CHANGED + static const ACTION_DATE_CHANGED = r"""android.intent.action.DATE_CHANGED"""; + + /// from: static public final java.lang.String ACTION_DEFAULT + static const ACTION_DEFAULT = r"""android.intent.action.VIEW"""; + + /// from: static public final java.lang.String ACTION_DEFINE + static const ACTION_DEFINE = r"""android.intent.action.DEFINE"""; + + /// from: static public final java.lang.String ACTION_DELETE + static const ACTION_DELETE = r"""android.intent.action.DELETE"""; + + /// from: static public final java.lang.String ACTION_DEVICE_STORAGE_LOW + static const ACTION_DEVICE_STORAGE_LOW = + r"""android.intent.action.DEVICE_STORAGE_LOW"""; + + /// from: static public final java.lang.String ACTION_DEVICE_STORAGE_OK + static const ACTION_DEVICE_STORAGE_OK = + r"""android.intent.action.DEVICE_STORAGE_OK"""; /// from: static public final java.lang.String ACTION_DIAL - static const ACTION_DIAL = "android.intent.action.DIAL"; + static const ACTION_DIAL = r"""android.intent.action.DIAL"""; /// from: static public final java.lang.String ACTION_DOCK_EVENT - static const ACTION_DOCK_EVENT = "android.intent.action.DOCK_EVENT"; + static const ACTION_DOCK_EVENT = r"""android.intent.action.DOCK_EVENT"""; /// from: static public final java.lang.String ACTION_DREAMING_STARTED static const ACTION_DREAMING_STARTED = - "android.intent.action.DREAMING_STARTED"; + r"""android.intent.action.DREAMING_STARTED"""; /// from: static public final java.lang.String ACTION_DREAMING_STOPPED static const ACTION_DREAMING_STOPPED = - "android.intent.action.DREAMING_STOPPED"; + r"""android.intent.action.DREAMING_STOPPED"""; /// from: static public final java.lang.String ACTION_EDIT - static const ACTION_EDIT = "android.intent.action.EDIT"; + static const ACTION_EDIT = r"""android.intent.action.EDIT"""; /// from: static public final java.lang.String ACTION_EXTERNAL_APPLICATIONS_AVAILABLE static const ACTION_EXTERNAL_APPLICATIONS_AVAILABLE = - "android.intent.action.EXTERNAL_APPLICATIONS_AVAILABLE"; + r"""android.intent.action.EXTERNAL_APPLICATIONS_AVAILABLE"""; /// from: static public final java.lang.String ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE static const ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE = - "android.intent.action.EXTERNAL_APPLICATIONS_UNAVAILABLE"; + r"""android.intent.action.EXTERNAL_APPLICATIONS_UNAVAILABLE"""; /// from: static public final java.lang.String ACTION_FACTORY_TEST - static const ACTION_FACTORY_TEST = "android.intent.action.FACTORY_TEST"; + static const ACTION_FACTORY_TEST = r"""android.intent.action.FACTORY_TEST"""; /// from: static public final java.lang.String ACTION_GET_CONTENT - static const ACTION_GET_CONTENT = "android.intent.action.GET_CONTENT"; + static const ACTION_GET_CONTENT = r"""android.intent.action.GET_CONTENT"""; /// from: static public final java.lang.String ACTION_GET_RESTRICTION_ENTRIES static const ACTION_GET_RESTRICTION_ENTRIES = - "android.intent.action.GET_RESTRICTION_ENTRIES"; + r"""android.intent.action.GET_RESTRICTION_ENTRIES"""; /// from: static public final java.lang.String ACTION_GTALK_SERVICE_CONNECTED static const ACTION_GTALK_SERVICE_CONNECTED = - "android.intent.action.GTALK_CONNECTED"; + r"""android.intent.action.GTALK_CONNECTED"""; /// from: static public final java.lang.String ACTION_GTALK_SERVICE_DISCONNECTED static const ACTION_GTALK_SERVICE_DISCONNECTED = - "android.intent.action.GTALK_DISCONNECTED"; + r"""android.intent.action.GTALK_DISCONNECTED"""; /// from: static public final java.lang.String ACTION_HEADSET_PLUG - static const ACTION_HEADSET_PLUG = "android.intent.action.HEADSET_PLUG"; + static const ACTION_HEADSET_PLUG = r"""android.intent.action.HEADSET_PLUG"""; /// from: static public final java.lang.String ACTION_INPUT_METHOD_CHANGED static const ACTION_INPUT_METHOD_CHANGED = - "android.intent.action.INPUT_METHOD_CHANGED"; + r"""android.intent.action.INPUT_METHOD_CHANGED"""; /// from: static public final java.lang.String ACTION_INSERT - static const ACTION_INSERT = "android.intent.action.INSERT"; + static const ACTION_INSERT = r"""android.intent.action.INSERT"""; /// from: static public final java.lang.String ACTION_INSERT_OR_EDIT - static const ACTION_INSERT_OR_EDIT = "android.intent.action.INSERT_OR_EDIT"; + static const ACTION_INSERT_OR_EDIT = + r"""android.intent.action.INSERT_OR_EDIT"""; /// from: static public final java.lang.String ACTION_INSTALL_FAILURE - static const ACTION_INSTALL_FAILURE = "android.intent.action.INSTALL_FAILURE"; + static const ACTION_INSTALL_FAILURE = + r"""android.intent.action.INSTALL_FAILURE"""; /// from: static public final java.lang.String ACTION_INSTALL_PACKAGE - static const ACTION_INSTALL_PACKAGE = "android.intent.action.INSTALL_PACKAGE"; + static const ACTION_INSTALL_PACKAGE = + r"""android.intent.action.INSTALL_PACKAGE"""; /// from: static public final java.lang.String ACTION_LOCALE_CHANGED - static const ACTION_LOCALE_CHANGED = "android.intent.action.LOCALE_CHANGED"; + static const ACTION_LOCALE_CHANGED = + r"""android.intent.action.LOCALE_CHANGED"""; /// from: static public final java.lang.String ACTION_LOCKED_BOOT_COMPLETED static const ACTION_LOCKED_BOOT_COMPLETED = - "android.intent.action.LOCKED_BOOT_COMPLETED"; + r"""android.intent.action.LOCKED_BOOT_COMPLETED"""; /// from: static public final java.lang.String ACTION_MAIN - static const ACTION_MAIN = "android.intent.action.MAIN"; + static const ACTION_MAIN = r"""android.intent.action.MAIN"""; /// from: static public final java.lang.String ACTION_MANAGED_PROFILE_ADDED static const ACTION_MANAGED_PROFILE_ADDED = - "android.intent.action.MANAGED_PROFILE_ADDED"; + r"""android.intent.action.MANAGED_PROFILE_ADDED"""; /// from: static public final java.lang.String ACTION_MANAGED_PROFILE_AVAILABLE static const ACTION_MANAGED_PROFILE_AVAILABLE = - "android.intent.action.MANAGED_PROFILE_AVAILABLE"; + r"""android.intent.action.MANAGED_PROFILE_AVAILABLE"""; /// from: static public final java.lang.String ACTION_MANAGED_PROFILE_REMOVED static const ACTION_MANAGED_PROFILE_REMOVED = - "android.intent.action.MANAGED_PROFILE_REMOVED"; + r"""android.intent.action.MANAGED_PROFILE_REMOVED"""; /// from: static public final java.lang.String ACTION_MANAGED_PROFILE_UNAVAILABLE static const ACTION_MANAGED_PROFILE_UNAVAILABLE = - "android.intent.action.MANAGED_PROFILE_UNAVAILABLE"; + r"""android.intent.action.MANAGED_PROFILE_UNAVAILABLE"""; /// from: static public final java.lang.String ACTION_MANAGED_PROFILE_UNLOCKED static const ACTION_MANAGED_PROFILE_UNLOCKED = - "android.intent.action.MANAGED_PROFILE_UNLOCKED"; + r"""android.intent.action.MANAGED_PROFILE_UNLOCKED"""; /// from: static public final java.lang.String ACTION_MANAGE_NETWORK_USAGE static const ACTION_MANAGE_NETWORK_USAGE = - "android.intent.action.MANAGE_NETWORK_USAGE"; + r"""android.intent.action.MANAGE_NETWORK_USAGE"""; /// from: static public final java.lang.String ACTION_MANAGE_PACKAGE_STORAGE static const ACTION_MANAGE_PACKAGE_STORAGE = - "android.intent.action.MANAGE_PACKAGE_STORAGE"; + r"""android.intent.action.MANAGE_PACKAGE_STORAGE"""; /// from: static public final java.lang.String ACTION_MANAGE_UNUSED_APPS static const ACTION_MANAGE_UNUSED_APPS = - "android.intent.action.MANAGE_UNUSED_APPS"; + r"""android.intent.action.MANAGE_UNUSED_APPS"""; /// from: static public final java.lang.String ACTION_MEDIA_BAD_REMOVAL static const ACTION_MEDIA_BAD_REMOVAL = - "android.intent.action.MEDIA_BAD_REMOVAL"; + r"""android.intent.action.MEDIA_BAD_REMOVAL"""; /// from: static public final java.lang.String ACTION_MEDIA_BUTTON - static const ACTION_MEDIA_BUTTON = "android.intent.action.MEDIA_BUTTON"; + static const ACTION_MEDIA_BUTTON = r"""android.intent.action.MEDIA_BUTTON"""; /// from: static public final java.lang.String ACTION_MEDIA_CHECKING - static const ACTION_MEDIA_CHECKING = "android.intent.action.MEDIA_CHECKING"; + static const ACTION_MEDIA_CHECKING = + r"""android.intent.action.MEDIA_CHECKING"""; /// from: static public final java.lang.String ACTION_MEDIA_EJECT - static const ACTION_MEDIA_EJECT = "android.intent.action.MEDIA_EJECT"; + static const ACTION_MEDIA_EJECT = r"""android.intent.action.MEDIA_EJECT"""; /// from: static public final java.lang.String ACTION_MEDIA_MOUNTED - static const ACTION_MEDIA_MOUNTED = "android.intent.action.MEDIA_MOUNTED"; + static const ACTION_MEDIA_MOUNTED = + r"""android.intent.action.MEDIA_MOUNTED"""; /// from: static public final java.lang.String ACTION_MEDIA_NOFS - static const ACTION_MEDIA_NOFS = "android.intent.action.MEDIA_NOFS"; + static const ACTION_MEDIA_NOFS = r"""android.intent.action.MEDIA_NOFS"""; /// from: static public final java.lang.String ACTION_MEDIA_REMOVED - static const ACTION_MEDIA_REMOVED = "android.intent.action.MEDIA_REMOVED"; + static const ACTION_MEDIA_REMOVED = + r"""android.intent.action.MEDIA_REMOVED"""; /// from: static public final java.lang.String ACTION_MEDIA_SCANNER_FINISHED static const ACTION_MEDIA_SCANNER_FINISHED = - "android.intent.action.MEDIA_SCANNER_FINISHED"; + r"""android.intent.action.MEDIA_SCANNER_FINISHED"""; /// from: static public final java.lang.String ACTION_MEDIA_SCANNER_SCAN_FILE static const ACTION_MEDIA_SCANNER_SCAN_FILE = - "android.intent.action.MEDIA_SCANNER_SCAN_FILE"; + r"""android.intent.action.MEDIA_SCANNER_SCAN_FILE"""; /// from: static public final java.lang.String ACTION_MEDIA_SCANNER_STARTED static const ACTION_MEDIA_SCANNER_STARTED = - "android.intent.action.MEDIA_SCANNER_STARTED"; + r"""android.intent.action.MEDIA_SCANNER_STARTED"""; /// from: static public final java.lang.String ACTION_MEDIA_SHARED - static const ACTION_MEDIA_SHARED = "android.intent.action.MEDIA_SHARED"; + static const ACTION_MEDIA_SHARED = r"""android.intent.action.MEDIA_SHARED"""; /// from: static public final java.lang.String ACTION_MEDIA_UNMOUNTABLE static const ACTION_MEDIA_UNMOUNTABLE = - "android.intent.action.MEDIA_UNMOUNTABLE"; + r"""android.intent.action.MEDIA_UNMOUNTABLE"""; /// from: static public final java.lang.String ACTION_MEDIA_UNMOUNTED - static const ACTION_MEDIA_UNMOUNTED = "android.intent.action.MEDIA_UNMOUNTED"; + static const ACTION_MEDIA_UNMOUNTED = + r"""android.intent.action.MEDIA_UNMOUNTED"""; /// from: static public final java.lang.String ACTION_MY_PACKAGE_REPLACED static const ACTION_MY_PACKAGE_REPLACED = - "android.intent.action.MY_PACKAGE_REPLACED"; + r"""android.intent.action.MY_PACKAGE_REPLACED"""; /// from: static public final java.lang.String ACTION_MY_PACKAGE_SUSPENDED static const ACTION_MY_PACKAGE_SUSPENDED = - "android.intent.action.MY_PACKAGE_SUSPENDED"; + r"""android.intent.action.MY_PACKAGE_SUSPENDED"""; /// from: static public final java.lang.String ACTION_MY_PACKAGE_UNSUSPENDED static const ACTION_MY_PACKAGE_UNSUSPENDED = - "android.intent.action.MY_PACKAGE_UNSUSPENDED"; + r"""android.intent.action.MY_PACKAGE_UNSUSPENDED"""; /// from: static public final java.lang.String ACTION_NEW_OUTGOING_CALL static const ACTION_NEW_OUTGOING_CALL = - "android.intent.action.NEW_OUTGOING_CALL"; + r"""android.intent.action.NEW_OUTGOING_CALL"""; /// from: static public final java.lang.String ACTION_OPEN_DOCUMENT - static const ACTION_OPEN_DOCUMENT = "android.intent.action.OPEN_DOCUMENT"; + static const ACTION_OPEN_DOCUMENT = + r"""android.intent.action.OPEN_DOCUMENT"""; /// from: static public final java.lang.String ACTION_OPEN_DOCUMENT_TREE static const ACTION_OPEN_DOCUMENT_TREE = - "android.intent.action.OPEN_DOCUMENT_TREE"; + r"""android.intent.action.OPEN_DOCUMENT_TREE"""; /// from: static public final java.lang.String ACTION_PACKAGES_SUSPENDED static const ACTION_PACKAGES_SUSPENDED = - "android.intent.action.PACKAGES_SUSPENDED"; + r"""android.intent.action.PACKAGES_SUSPENDED"""; /// from: static public final java.lang.String ACTION_PACKAGES_UNSUSPENDED static const ACTION_PACKAGES_UNSUSPENDED = - "android.intent.action.PACKAGES_UNSUSPENDED"; + r"""android.intent.action.PACKAGES_UNSUSPENDED"""; /// from: static public final java.lang.String ACTION_PACKAGE_ADDED - static const ACTION_PACKAGE_ADDED = "android.intent.action.PACKAGE_ADDED"; + static const ACTION_PACKAGE_ADDED = + r"""android.intent.action.PACKAGE_ADDED"""; /// from: static public final java.lang.String ACTION_PACKAGE_CHANGED - static const ACTION_PACKAGE_CHANGED = "android.intent.action.PACKAGE_CHANGED"; + static const ACTION_PACKAGE_CHANGED = + r"""android.intent.action.PACKAGE_CHANGED"""; /// from: static public final java.lang.String ACTION_PACKAGE_DATA_CLEARED static const ACTION_PACKAGE_DATA_CLEARED = - "android.intent.action.PACKAGE_DATA_CLEARED"; + r"""android.intent.action.PACKAGE_DATA_CLEARED"""; /// from: static public final java.lang.String ACTION_PACKAGE_FIRST_LAUNCH static const ACTION_PACKAGE_FIRST_LAUNCH = - "android.intent.action.PACKAGE_FIRST_LAUNCH"; + r"""android.intent.action.PACKAGE_FIRST_LAUNCH"""; /// from: static public final java.lang.String ACTION_PACKAGE_FULLY_REMOVED static const ACTION_PACKAGE_FULLY_REMOVED = - "android.intent.action.PACKAGE_FULLY_REMOVED"; + r"""android.intent.action.PACKAGE_FULLY_REMOVED"""; /// from: static public final java.lang.String ACTION_PACKAGE_INSTALL - static const ACTION_PACKAGE_INSTALL = "android.intent.action.PACKAGE_INSTALL"; + static const ACTION_PACKAGE_INSTALL = + r"""android.intent.action.PACKAGE_INSTALL"""; /// from: static public final java.lang.String ACTION_PACKAGE_NEEDS_VERIFICATION static const ACTION_PACKAGE_NEEDS_VERIFICATION = - "android.intent.action.PACKAGE_NEEDS_VERIFICATION"; + r"""android.intent.action.PACKAGE_NEEDS_VERIFICATION"""; /// from: static public final java.lang.String ACTION_PACKAGE_REMOVED - static const ACTION_PACKAGE_REMOVED = "android.intent.action.PACKAGE_REMOVED"; + static const ACTION_PACKAGE_REMOVED = + r"""android.intent.action.PACKAGE_REMOVED"""; /// from: static public final java.lang.String ACTION_PACKAGE_REPLACED static const ACTION_PACKAGE_REPLACED = - "android.intent.action.PACKAGE_REPLACED"; + r"""android.intent.action.PACKAGE_REPLACED"""; /// from: static public final java.lang.String ACTION_PACKAGE_RESTARTED static const ACTION_PACKAGE_RESTARTED = - "android.intent.action.PACKAGE_RESTARTED"; + r"""android.intent.action.PACKAGE_RESTARTED"""; /// from: static public final java.lang.String ACTION_PACKAGE_VERIFIED static const ACTION_PACKAGE_VERIFIED = - "android.intent.action.PACKAGE_VERIFIED"; + r"""android.intent.action.PACKAGE_VERIFIED"""; /// from: static public final java.lang.String ACTION_PASTE - static const ACTION_PASTE = "android.intent.action.PASTE"; + static const ACTION_PASTE = r"""android.intent.action.PASTE"""; /// from: static public final java.lang.String ACTION_PICK - static const ACTION_PICK = "android.intent.action.PICK"; + static const ACTION_PICK = r"""android.intent.action.PICK"""; /// from: static public final java.lang.String ACTION_PICK_ACTIVITY - static const ACTION_PICK_ACTIVITY = "android.intent.action.PICK_ACTIVITY"; + static const ACTION_PICK_ACTIVITY = + r"""android.intent.action.PICK_ACTIVITY"""; /// from: static public final java.lang.String ACTION_POWER_CONNECTED static const ACTION_POWER_CONNECTED = - "android.intent.action.ACTION_POWER_CONNECTED"; + r"""android.intent.action.ACTION_POWER_CONNECTED"""; /// from: static public final java.lang.String ACTION_POWER_DISCONNECTED static const ACTION_POWER_DISCONNECTED = - "android.intent.action.ACTION_POWER_DISCONNECTED"; + r"""android.intent.action.ACTION_POWER_DISCONNECTED"""; /// from: static public final java.lang.String ACTION_POWER_USAGE_SUMMARY static const ACTION_POWER_USAGE_SUMMARY = - "android.intent.action.POWER_USAGE_SUMMARY"; + r"""android.intent.action.POWER_USAGE_SUMMARY"""; /// from: static public final java.lang.String ACTION_PROCESS_TEXT - static const ACTION_PROCESS_TEXT = "android.intent.action.PROCESS_TEXT"; + static const ACTION_PROCESS_TEXT = r"""android.intent.action.PROCESS_TEXT"""; /// from: static public final java.lang.String ACTION_PROFILE_ACCESSIBLE static const ACTION_PROFILE_ACCESSIBLE = - "android.intent.action.PROFILE_ACCESSIBLE"; + r"""android.intent.action.PROFILE_ACCESSIBLE"""; /// from: static public final java.lang.String ACTION_PROFILE_INACCESSIBLE static const ACTION_PROFILE_INACCESSIBLE = - "android.intent.action.PROFILE_INACCESSIBLE"; + r"""android.intent.action.PROFILE_INACCESSIBLE"""; /// from: static public final java.lang.String ACTION_PROVIDER_CHANGED static const ACTION_PROVIDER_CHANGED = - "android.intent.action.PROVIDER_CHANGED"; + r"""android.intent.action.PROVIDER_CHANGED"""; /// from: static public final java.lang.String ACTION_QUICK_CLOCK - static const ACTION_QUICK_CLOCK = "android.intent.action.QUICK_CLOCK"; + static const ACTION_QUICK_CLOCK = r"""android.intent.action.QUICK_CLOCK"""; /// from: static public final java.lang.String ACTION_QUICK_VIEW - static const ACTION_QUICK_VIEW = "android.intent.action.QUICK_VIEW"; + static const ACTION_QUICK_VIEW = r"""android.intent.action.QUICK_VIEW"""; /// from: static public final java.lang.String ACTION_REBOOT - static const ACTION_REBOOT = "android.intent.action.REBOOT"; + static const ACTION_REBOOT = r"""android.intent.action.REBOOT"""; /// from: static public final java.lang.String ACTION_RUN - static const ACTION_RUN = "android.intent.action.RUN"; + static const ACTION_RUN = r"""android.intent.action.RUN"""; /// from: static public final java.lang.String ACTION_SAFETY_CENTER - static const ACTION_SAFETY_CENTER = "android.intent.action.SAFETY_CENTER"; + static const ACTION_SAFETY_CENTER = + r"""android.intent.action.SAFETY_CENTER"""; /// from: static public final java.lang.String ACTION_SCREEN_OFF - static const ACTION_SCREEN_OFF = "android.intent.action.SCREEN_OFF"; + static const ACTION_SCREEN_OFF = r"""android.intent.action.SCREEN_OFF"""; /// from: static public final java.lang.String ACTION_SCREEN_ON - static const ACTION_SCREEN_ON = "android.intent.action.SCREEN_ON"; + static const ACTION_SCREEN_ON = r"""android.intent.action.SCREEN_ON"""; /// from: static public final java.lang.String ACTION_SEARCH - static const ACTION_SEARCH = "android.intent.action.SEARCH"; + static const ACTION_SEARCH = r"""android.intent.action.SEARCH"""; /// from: static public final java.lang.String ACTION_SEARCH_LONG_PRESS static const ACTION_SEARCH_LONG_PRESS = - "android.intent.action.SEARCH_LONG_PRESS"; + r"""android.intent.action.SEARCH_LONG_PRESS"""; /// from: static public final java.lang.String ACTION_SEND - static const ACTION_SEND = "android.intent.action.SEND"; + static const ACTION_SEND = r"""android.intent.action.SEND"""; /// from: static public final java.lang.String ACTION_SENDTO - static const ACTION_SENDTO = "android.intent.action.SENDTO"; + static const ACTION_SENDTO = r"""android.intent.action.SENDTO"""; /// from: static public final java.lang.String ACTION_SEND_MULTIPLE - static const ACTION_SEND_MULTIPLE = "android.intent.action.SEND_MULTIPLE"; + static const ACTION_SEND_MULTIPLE = + r"""android.intent.action.SEND_MULTIPLE"""; /// from: static public final java.lang.String ACTION_SET_WALLPAPER - static const ACTION_SET_WALLPAPER = "android.intent.action.SET_WALLPAPER"; + static const ACTION_SET_WALLPAPER = + r"""android.intent.action.SET_WALLPAPER"""; /// from: static public final java.lang.String ACTION_SHOW_APP_INFO - static const ACTION_SHOW_APP_INFO = "android.intent.action.SHOW_APP_INFO"; + static const ACTION_SHOW_APP_INFO = + r"""android.intent.action.SHOW_APP_INFO"""; /// from: static public final java.lang.String ACTION_SHOW_WORK_APPS - static const ACTION_SHOW_WORK_APPS = "android.intent.action.SHOW_WORK_APPS"; + static const ACTION_SHOW_WORK_APPS = + r"""android.intent.action.SHOW_WORK_APPS"""; /// from: static public final java.lang.String ACTION_SHUTDOWN - static const ACTION_SHUTDOWN = "android.intent.action.ACTION_SHUTDOWN"; + static const ACTION_SHUTDOWN = r"""android.intent.action.ACTION_SHUTDOWN"""; /// from: static public final java.lang.String ACTION_SYNC - static const ACTION_SYNC = "android.intent.action.SYNC"; + static const ACTION_SYNC = r"""android.intent.action.SYNC"""; /// from: static public final java.lang.String ACTION_SYSTEM_TUTORIAL - static const ACTION_SYSTEM_TUTORIAL = "android.intent.action.SYSTEM_TUTORIAL"; + static const ACTION_SYSTEM_TUTORIAL = + r"""android.intent.action.SYSTEM_TUTORIAL"""; /// from: static public final java.lang.String ACTION_TIMEZONE_CHANGED static const ACTION_TIMEZONE_CHANGED = - "android.intent.action.TIMEZONE_CHANGED"; + r"""android.intent.action.TIMEZONE_CHANGED"""; /// from: static public final java.lang.String ACTION_TIME_CHANGED - static const ACTION_TIME_CHANGED = "android.intent.action.TIME_SET"; + static const ACTION_TIME_CHANGED = r"""android.intent.action.TIME_SET"""; /// from: static public final java.lang.String ACTION_TIME_TICK - static const ACTION_TIME_TICK = "android.intent.action.TIME_TICK"; + static const ACTION_TIME_TICK = r"""android.intent.action.TIME_TICK"""; /// from: static public final java.lang.String ACTION_TRANSLATE - static const ACTION_TRANSLATE = "android.intent.action.TRANSLATE"; + static const ACTION_TRANSLATE = r"""android.intent.action.TRANSLATE"""; /// from: static public final java.lang.String ACTION_UID_REMOVED - static const ACTION_UID_REMOVED = "android.intent.action.UID_REMOVED"; + static const ACTION_UID_REMOVED = r"""android.intent.action.UID_REMOVED"""; /// from: static public final java.lang.String ACTION_UMS_CONNECTED - static const ACTION_UMS_CONNECTED = "android.intent.action.UMS_CONNECTED"; + static const ACTION_UMS_CONNECTED = + r"""android.intent.action.UMS_CONNECTED"""; /// from: static public final java.lang.String ACTION_UMS_DISCONNECTED static const ACTION_UMS_DISCONNECTED = - "android.intent.action.UMS_DISCONNECTED"; + r"""android.intent.action.UMS_DISCONNECTED"""; /// from: static public final java.lang.String ACTION_UNINSTALL_PACKAGE static const ACTION_UNINSTALL_PACKAGE = - "android.intent.action.UNINSTALL_PACKAGE"; + r"""android.intent.action.UNINSTALL_PACKAGE"""; /// from: static public final java.lang.String ACTION_USER_BACKGROUND - static const ACTION_USER_BACKGROUND = "android.intent.action.USER_BACKGROUND"; + static const ACTION_USER_BACKGROUND = + r"""android.intent.action.USER_BACKGROUND"""; /// from: static public final java.lang.String ACTION_USER_FOREGROUND - static const ACTION_USER_FOREGROUND = "android.intent.action.USER_FOREGROUND"; + static const ACTION_USER_FOREGROUND = + r"""android.intent.action.USER_FOREGROUND"""; /// from: static public final java.lang.String ACTION_USER_INITIALIZE - static const ACTION_USER_INITIALIZE = "android.intent.action.USER_INITIALIZE"; + static const ACTION_USER_INITIALIZE = + r"""android.intent.action.USER_INITIALIZE"""; /// from: static public final java.lang.String ACTION_USER_PRESENT - static const ACTION_USER_PRESENT = "android.intent.action.USER_PRESENT"; + static const ACTION_USER_PRESENT = r"""android.intent.action.USER_PRESENT"""; /// from: static public final java.lang.String ACTION_USER_UNLOCKED - static const ACTION_USER_UNLOCKED = "android.intent.action.USER_UNLOCKED"; + static const ACTION_USER_UNLOCKED = + r"""android.intent.action.USER_UNLOCKED"""; /// from: static public final java.lang.String ACTION_VIEW - static const ACTION_VIEW = "android.intent.action.VIEW"; + static const ACTION_VIEW = r"""android.intent.action.VIEW"""; /// from: static public final java.lang.String ACTION_VIEW_LOCUS - static const ACTION_VIEW_LOCUS = "android.intent.action.VIEW_LOCUS"; + static const ACTION_VIEW_LOCUS = r"""android.intent.action.VIEW_LOCUS"""; /// from: static public final java.lang.String ACTION_VIEW_PERMISSION_USAGE static const ACTION_VIEW_PERMISSION_USAGE = - "android.intent.action.VIEW_PERMISSION_USAGE"; + r"""android.intent.action.VIEW_PERMISSION_USAGE"""; /// from: static public final java.lang.String ACTION_VIEW_PERMISSION_USAGE_FOR_PERIOD static const ACTION_VIEW_PERMISSION_USAGE_FOR_PERIOD = - "android.intent.action.VIEW_PERMISSION_USAGE_FOR_PERIOD"; + r"""android.intent.action.VIEW_PERMISSION_USAGE_FOR_PERIOD"""; /// from: static public final java.lang.String ACTION_VOICE_COMMAND - static const ACTION_VOICE_COMMAND = "android.intent.action.VOICE_COMMAND"; + static const ACTION_VOICE_COMMAND = + r"""android.intent.action.VOICE_COMMAND"""; /// from: static public final java.lang.String ACTION_WALLPAPER_CHANGED static const ACTION_WALLPAPER_CHANGED = - "android.intent.action.WALLPAPER_CHANGED"; + r"""android.intent.action.WALLPAPER_CHANGED"""; /// from: static public final java.lang.String ACTION_WEB_SEARCH - static const ACTION_WEB_SEARCH = "android.intent.action.WEB_SEARCH"; + static const ACTION_WEB_SEARCH = r"""android.intent.action.WEB_SEARCH"""; /// from: static public final java.lang.String CATEGORY_ACCESSIBILITY_SHORTCUT_TARGET static const CATEGORY_ACCESSIBILITY_SHORTCUT_TARGET = - "android.intent.category.ACCESSIBILITY_SHORTCUT_TARGET"; + r"""android.intent.category.ACCESSIBILITY_SHORTCUT_TARGET"""; /// from: static public final java.lang.String CATEGORY_ALTERNATIVE - static const CATEGORY_ALTERNATIVE = "android.intent.category.ALTERNATIVE"; + static const CATEGORY_ALTERNATIVE = + r"""android.intent.category.ALTERNATIVE"""; /// from: static public final java.lang.String CATEGORY_APP_BROWSER - static const CATEGORY_APP_BROWSER = "android.intent.category.APP_BROWSER"; + static const CATEGORY_APP_BROWSER = + r"""android.intent.category.APP_BROWSER"""; /// from: static public final java.lang.String CATEGORY_APP_CALCULATOR static const CATEGORY_APP_CALCULATOR = - "android.intent.category.APP_CALCULATOR"; + r"""android.intent.category.APP_CALCULATOR"""; /// from: static public final java.lang.String CATEGORY_APP_CALENDAR - static const CATEGORY_APP_CALENDAR = "android.intent.category.APP_CALENDAR"; + static const CATEGORY_APP_CALENDAR = + r"""android.intent.category.APP_CALENDAR"""; /// from: static public final java.lang.String CATEGORY_APP_CONTACTS - static const CATEGORY_APP_CONTACTS = "android.intent.category.APP_CONTACTS"; + static const CATEGORY_APP_CONTACTS = + r"""android.intent.category.APP_CONTACTS"""; /// from: static public final java.lang.String CATEGORY_APP_EMAIL - static const CATEGORY_APP_EMAIL = "android.intent.category.APP_EMAIL"; + static const CATEGORY_APP_EMAIL = r"""android.intent.category.APP_EMAIL"""; /// from: static public final java.lang.String CATEGORY_APP_FILES - static const CATEGORY_APP_FILES = "android.intent.category.APP_FILES"; + static const CATEGORY_APP_FILES = r"""android.intent.category.APP_FILES"""; /// from: static public final java.lang.String CATEGORY_APP_FITNESS - static const CATEGORY_APP_FITNESS = "android.intent.category.APP_FITNESS"; + static const CATEGORY_APP_FITNESS = + r"""android.intent.category.APP_FITNESS"""; /// from: static public final java.lang.String CATEGORY_APP_GALLERY - static const CATEGORY_APP_GALLERY = "android.intent.category.APP_GALLERY"; + static const CATEGORY_APP_GALLERY = + r"""android.intent.category.APP_GALLERY"""; /// from: static public final java.lang.String CATEGORY_APP_MAPS - static const CATEGORY_APP_MAPS = "android.intent.category.APP_MAPS"; + static const CATEGORY_APP_MAPS = r"""android.intent.category.APP_MAPS"""; /// from: static public final java.lang.String CATEGORY_APP_MARKET - static const CATEGORY_APP_MARKET = "android.intent.category.APP_MARKET"; + static const CATEGORY_APP_MARKET = r"""android.intent.category.APP_MARKET"""; /// from: static public final java.lang.String CATEGORY_APP_MESSAGING - static const CATEGORY_APP_MESSAGING = "android.intent.category.APP_MESSAGING"; + static const CATEGORY_APP_MESSAGING = + r"""android.intent.category.APP_MESSAGING"""; /// from: static public final java.lang.String CATEGORY_APP_MUSIC - static const CATEGORY_APP_MUSIC = "android.intent.category.APP_MUSIC"; + static const CATEGORY_APP_MUSIC = r"""android.intent.category.APP_MUSIC"""; /// from: static public final java.lang.String CATEGORY_APP_WEATHER - static const CATEGORY_APP_WEATHER = "android.intent.category.APP_WEATHER"; + static const CATEGORY_APP_WEATHER = + r"""android.intent.category.APP_WEATHER"""; /// from: static public final java.lang.String CATEGORY_BROWSABLE - static const CATEGORY_BROWSABLE = "android.intent.category.BROWSABLE"; + static const CATEGORY_BROWSABLE = r"""android.intent.category.BROWSABLE"""; /// from: static public final java.lang.String CATEGORY_CAR_DOCK - static const CATEGORY_CAR_DOCK = "android.intent.category.CAR_DOCK"; + static const CATEGORY_CAR_DOCK = r"""android.intent.category.CAR_DOCK"""; /// from: static public final java.lang.String CATEGORY_CAR_MODE - static const CATEGORY_CAR_MODE = "android.intent.category.CAR_MODE"; + static const CATEGORY_CAR_MODE = r"""android.intent.category.CAR_MODE"""; /// from: static public final java.lang.String CATEGORY_DEFAULT - static const CATEGORY_DEFAULT = "android.intent.category.DEFAULT"; + static const CATEGORY_DEFAULT = r"""android.intent.category.DEFAULT"""; /// from: static public final java.lang.String CATEGORY_DESK_DOCK - static const CATEGORY_DESK_DOCK = "android.intent.category.DESK_DOCK"; + static const CATEGORY_DESK_DOCK = r"""android.intent.category.DESK_DOCK"""; /// from: static public final java.lang.String CATEGORY_DEVELOPMENT_PREFERENCE static const CATEGORY_DEVELOPMENT_PREFERENCE = - "android.intent.category.DEVELOPMENT_PREFERENCE"; + r"""android.intent.category.DEVELOPMENT_PREFERENCE"""; /// from: static public final java.lang.String CATEGORY_EMBED - static const CATEGORY_EMBED = "android.intent.category.EMBED"; + static const CATEGORY_EMBED = r"""android.intent.category.EMBED"""; /// from: static public final java.lang.String CATEGORY_FRAMEWORK_INSTRUMENTATION_TEST static const CATEGORY_FRAMEWORK_INSTRUMENTATION_TEST = - "android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST"; + r"""android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST"""; /// from: static public final java.lang.String CATEGORY_HE_DESK_DOCK - static const CATEGORY_HE_DESK_DOCK = "android.intent.category.HE_DESK_DOCK"; + static const CATEGORY_HE_DESK_DOCK = + r"""android.intent.category.HE_DESK_DOCK"""; /// from: static public final java.lang.String CATEGORY_HOME - static const CATEGORY_HOME = "android.intent.category.HOME"; + static const CATEGORY_HOME = r"""android.intent.category.HOME"""; /// from: static public final java.lang.String CATEGORY_INFO - static const CATEGORY_INFO = "android.intent.category.INFO"; + static const CATEGORY_INFO = r"""android.intent.category.INFO"""; /// from: static public final java.lang.String CATEGORY_LAUNCHER - static const CATEGORY_LAUNCHER = "android.intent.category.LAUNCHER"; + static const CATEGORY_LAUNCHER = r"""android.intent.category.LAUNCHER"""; /// from: static public final java.lang.String CATEGORY_LEANBACK_LAUNCHER static const CATEGORY_LEANBACK_LAUNCHER = - "android.intent.category.LEANBACK_LAUNCHER"; + r"""android.intent.category.LEANBACK_LAUNCHER"""; /// from: static public final java.lang.String CATEGORY_LE_DESK_DOCK - static const CATEGORY_LE_DESK_DOCK = "android.intent.category.LE_DESK_DOCK"; + static const CATEGORY_LE_DESK_DOCK = + r"""android.intent.category.LE_DESK_DOCK"""; /// from: static public final java.lang.String CATEGORY_MONKEY - static const CATEGORY_MONKEY = "android.intent.category.MONKEY"; + static const CATEGORY_MONKEY = r"""android.intent.category.MONKEY"""; /// from: static public final java.lang.String CATEGORY_OPENABLE - static const CATEGORY_OPENABLE = "android.intent.category.OPENABLE"; + static const CATEGORY_OPENABLE = r"""android.intent.category.OPENABLE"""; /// from: static public final java.lang.String CATEGORY_PREFERENCE - static const CATEGORY_PREFERENCE = "android.intent.category.PREFERENCE"; + static const CATEGORY_PREFERENCE = r"""android.intent.category.PREFERENCE"""; /// from: static public final java.lang.String CATEGORY_SAMPLE_CODE - static const CATEGORY_SAMPLE_CODE = "android.intent.category.SAMPLE_CODE"; + static const CATEGORY_SAMPLE_CODE = + r"""android.intent.category.SAMPLE_CODE"""; /// from: static public final java.lang.String CATEGORY_SECONDARY_HOME static const CATEGORY_SECONDARY_HOME = - "android.intent.category.SECONDARY_HOME"; + r"""android.intent.category.SECONDARY_HOME"""; /// from: static public final java.lang.String CATEGORY_SELECTED_ALTERNATIVE static const CATEGORY_SELECTED_ALTERNATIVE = - "android.intent.category.SELECTED_ALTERNATIVE"; + r"""android.intent.category.SELECTED_ALTERNATIVE"""; /// from: static public final java.lang.String CATEGORY_TAB - static const CATEGORY_TAB = "android.intent.category.TAB"; + static const CATEGORY_TAB = r"""android.intent.category.TAB"""; /// from: static public final java.lang.String CATEGORY_TEST - static const CATEGORY_TEST = "android.intent.category.TEST"; + static const CATEGORY_TEST = r"""android.intent.category.TEST"""; /// from: static public final java.lang.String CATEGORY_TYPED_OPENABLE static const CATEGORY_TYPED_OPENABLE = - "android.intent.category.TYPED_OPENABLE"; + r"""android.intent.category.TYPED_OPENABLE"""; /// from: static public final java.lang.String CATEGORY_UNIT_TEST - static const CATEGORY_UNIT_TEST = "android.intent.category.UNIT_TEST"; + static const CATEGORY_UNIT_TEST = r"""android.intent.category.UNIT_TEST"""; /// from: static public final java.lang.String CATEGORY_VOICE - static const CATEGORY_VOICE = "android.intent.category.VOICE"; + static const CATEGORY_VOICE = r"""android.intent.category.VOICE"""; /// from: static public final java.lang.String CATEGORY_VR_HOME - static const CATEGORY_VR_HOME = "android.intent.category.VR_HOME"; + static const CATEGORY_VR_HOME = r"""android.intent.category.VR_HOME"""; static final _get_CREATOR = jniLookup>( @@ -4171,100 +5408,108 @@ class Intent extends jni.JObject { .asFunction(); /// from: static public final android.os.Parcelable$Creator CREATOR - /// The returned object must be deleted after use, by calling the `delete` method. + /// The returned object must be released after use, by calling the [release] method. static jni.JObject get CREATOR => const jni.JObjectType().fromRef(_get_CREATOR().object); /// from: static public final java.lang.String EXTRA_ALARM_COUNT - static const EXTRA_ALARM_COUNT = "android.intent.extra.ALARM_COUNT"; + static const EXTRA_ALARM_COUNT = r"""android.intent.extra.ALARM_COUNT"""; /// from: static public final java.lang.String EXTRA_ALLOW_MULTIPLE - static const EXTRA_ALLOW_MULTIPLE = "android.intent.extra.ALLOW_MULTIPLE"; + static const EXTRA_ALLOW_MULTIPLE = + r"""android.intent.extra.ALLOW_MULTIPLE"""; /// from: static public final java.lang.String EXTRA_ALLOW_REPLACE - static const EXTRA_ALLOW_REPLACE = "android.intent.extra.ALLOW_REPLACE"; + static const EXTRA_ALLOW_REPLACE = r"""android.intent.extra.ALLOW_REPLACE"""; /// from: static public final java.lang.String EXTRA_ALTERNATE_INTENTS static const EXTRA_ALTERNATE_INTENTS = - "android.intent.extra.ALTERNATE_INTENTS"; + r"""android.intent.extra.ALTERNATE_INTENTS"""; /// from: static public final java.lang.String EXTRA_ASSIST_CONTEXT - static const EXTRA_ASSIST_CONTEXT = "android.intent.extra.ASSIST_CONTEXT"; + static const EXTRA_ASSIST_CONTEXT = + r"""android.intent.extra.ASSIST_CONTEXT"""; /// from: static public final java.lang.String EXTRA_ASSIST_INPUT_DEVICE_ID static const EXTRA_ASSIST_INPUT_DEVICE_ID = - "android.intent.extra.ASSIST_INPUT_DEVICE_ID"; + r"""android.intent.extra.ASSIST_INPUT_DEVICE_ID"""; /// from: static public final java.lang.String EXTRA_ASSIST_INPUT_HINT_KEYBOARD static const EXTRA_ASSIST_INPUT_HINT_KEYBOARD = - "android.intent.extra.ASSIST_INPUT_HINT_KEYBOARD"; + r"""android.intent.extra.ASSIST_INPUT_HINT_KEYBOARD"""; /// from: static public final java.lang.String EXTRA_ASSIST_PACKAGE - static const EXTRA_ASSIST_PACKAGE = "android.intent.extra.ASSIST_PACKAGE"; + static const EXTRA_ASSIST_PACKAGE = + r"""android.intent.extra.ASSIST_PACKAGE"""; /// from: static public final java.lang.String EXTRA_ASSIST_UID - static const EXTRA_ASSIST_UID = "android.intent.extra.ASSIST_UID"; + static const EXTRA_ASSIST_UID = r"""android.intent.extra.ASSIST_UID"""; /// from: static public final java.lang.String EXTRA_ATTRIBUTION_TAGS - static const EXTRA_ATTRIBUTION_TAGS = "android.intent.extra.ATTRIBUTION_TAGS"; + static const EXTRA_ATTRIBUTION_TAGS = + r"""android.intent.extra.ATTRIBUTION_TAGS"""; /// from: static public final java.lang.String EXTRA_AUTO_LAUNCH_SINGLE_CHOICE static const EXTRA_AUTO_LAUNCH_SINGLE_CHOICE = - "android.intent.extra.AUTO_LAUNCH_SINGLE_CHOICE"; + r"""android.intent.extra.AUTO_LAUNCH_SINGLE_CHOICE"""; /// from: static public final java.lang.String EXTRA_BCC - static const EXTRA_BCC = "android.intent.extra.BCC"; + static const EXTRA_BCC = r"""android.intent.extra.BCC"""; /// from: static public final java.lang.String EXTRA_BUG_REPORT - static const EXTRA_BUG_REPORT = "android.intent.extra.BUG_REPORT"; + static const EXTRA_BUG_REPORT = r"""android.intent.extra.BUG_REPORT"""; /// from: static public final java.lang.String EXTRA_CC - static const EXTRA_CC = "android.intent.extra.CC"; + static const EXTRA_CC = r"""android.intent.extra.CC"""; /// from: static public final java.lang.String EXTRA_CHANGED_COMPONENT_NAME static const EXTRA_CHANGED_COMPONENT_NAME = - "android.intent.extra.changed_component_name"; + r"""android.intent.extra.changed_component_name"""; /// from: static public final java.lang.String EXTRA_CHANGED_COMPONENT_NAME_LIST static const EXTRA_CHANGED_COMPONENT_NAME_LIST = - "android.intent.extra.changed_component_name_list"; + r"""android.intent.extra.changed_component_name_list"""; /// from: static public final java.lang.String EXTRA_CHANGED_PACKAGE_LIST static const EXTRA_CHANGED_PACKAGE_LIST = - "android.intent.extra.changed_package_list"; + r"""android.intent.extra.changed_package_list"""; /// from: static public final java.lang.String EXTRA_CHANGED_UID_LIST - static const EXTRA_CHANGED_UID_LIST = "android.intent.extra.changed_uid_list"; + static const EXTRA_CHANGED_UID_LIST = + r"""android.intent.extra.changed_uid_list"""; /// from: static public final java.lang.String EXTRA_CHOOSER_REFINEMENT_INTENT_SENDER static const EXTRA_CHOOSER_REFINEMENT_INTENT_SENDER = - "android.intent.extra.CHOOSER_REFINEMENT_INTENT_SENDER"; + r"""android.intent.extra.CHOOSER_REFINEMENT_INTENT_SENDER"""; /// from: static public final java.lang.String EXTRA_CHOOSER_TARGETS - static const EXTRA_CHOOSER_TARGETS = "android.intent.extra.CHOOSER_TARGETS"; + static const EXTRA_CHOOSER_TARGETS = + r"""android.intent.extra.CHOOSER_TARGETS"""; /// from: static public final java.lang.String EXTRA_CHOSEN_COMPONENT - static const EXTRA_CHOSEN_COMPONENT = "android.intent.extra.CHOSEN_COMPONENT"; + static const EXTRA_CHOSEN_COMPONENT = + r"""android.intent.extra.CHOSEN_COMPONENT"""; /// from: static public final java.lang.String EXTRA_CHOSEN_COMPONENT_INTENT_SENDER static const EXTRA_CHOSEN_COMPONENT_INTENT_SENDER = - "android.intent.extra.CHOSEN_COMPONENT_INTENT_SENDER"; + r"""android.intent.extra.CHOSEN_COMPONENT_INTENT_SENDER"""; /// from: static public final java.lang.String EXTRA_COMPONENT_NAME - static const EXTRA_COMPONENT_NAME = "android.intent.extra.COMPONENT_NAME"; + static const EXTRA_COMPONENT_NAME = + r"""android.intent.extra.COMPONENT_NAME"""; /// from: static public final java.lang.String EXTRA_CONTENT_ANNOTATIONS static const EXTRA_CONTENT_ANNOTATIONS = - "android.intent.extra.CONTENT_ANNOTATIONS"; + r"""android.intent.extra.CONTENT_ANNOTATIONS"""; /// from: static public final java.lang.String EXTRA_CONTENT_QUERY - static const EXTRA_CONTENT_QUERY = "android.intent.extra.CONTENT_QUERY"; + static const EXTRA_CONTENT_QUERY = r"""android.intent.extra.CONTENT_QUERY"""; /// from: static public final java.lang.String EXTRA_DATA_REMOVED - static const EXTRA_DATA_REMOVED = "android.intent.extra.DATA_REMOVED"; + static const EXTRA_DATA_REMOVED = r"""android.intent.extra.DATA_REMOVED"""; /// from: static public final java.lang.String EXTRA_DOCK_STATE - static const EXTRA_DOCK_STATE = "android.intent.extra.DOCK_STATE"; + static const EXTRA_DOCK_STATE = r"""android.intent.extra.DOCK_STATE"""; /// from: static public final int EXTRA_DOCK_STATE_CAR static const EXTRA_DOCK_STATE_CAR = 2; @@ -4282,180 +5527,186 @@ class Intent extends jni.JObject { static const EXTRA_DOCK_STATE_UNDOCKED = 0; /// from: static public final java.lang.String EXTRA_DONT_KILL_APP - static const EXTRA_DONT_KILL_APP = "android.intent.extra.DONT_KILL_APP"; + static const EXTRA_DONT_KILL_APP = r"""android.intent.extra.DONT_KILL_APP"""; /// from: static public final java.lang.String EXTRA_DURATION_MILLIS - static const EXTRA_DURATION_MILLIS = "android.intent.extra.DURATION_MILLIS"; + static const EXTRA_DURATION_MILLIS = + r"""android.intent.extra.DURATION_MILLIS"""; /// from: static public final java.lang.String EXTRA_EMAIL - static const EXTRA_EMAIL = "android.intent.extra.EMAIL"; + static const EXTRA_EMAIL = r"""android.intent.extra.EMAIL"""; /// from: static public final java.lang.String EXTRA_END_TIME - static const EXTRA_END_TIME = "android.intent.extra.END_TIME"; + static const EXTRA_END_TIME = r"""android.intent.extra.END_TIME"""; /// from: static public final java.lang.String EXTRA_EXCLUDE_COMPONENTS static const EXTRA_EXCLUDE_COMPONENTS = - "android.intent.extra.EXCLUDE_COMPONENTS"; + r"""android.intent.extra.EXCLUDE_COMPONENTS"""; /// from: static public final java.lang.String EXTRA_FROM_STORAGE - static const EXTRA_FROM_STORAGE = "android.intent.extra.FROM_STORAGE"; + static const EXTRA_FROM_STORAGE = r"""android.intent.extra.FROM_STORAGE"""; /// from: static public final java.lang.String EXTRA_HTML_TEXT - static const EXTRA_HTML_TEXT = "android.intent.extra.HTML_TEXT"; + static const EXTRA_HTML_TEXT = r"""android.intent.extra.HTML_TEXT"""; /// from: static public final java.lang.String EXTRA_INDEX - static const EXTRA_INDEX = "android.intent.extra.INDEX"; + static const EXTRA_INDEX = r"""android.intent.extra.INDEX"""; /// from: static public final java.lang.String EXTRA_INITIAL_INTENTS - static const EXTRA_INITIAL_INTENTS = "android.intent.extra.INITIAL_INTENTS"; + static const EXTRA_INITIAL_INTENTS = + r"""android.intent.extra.INITIAL_INTENTS"""; /// from: static public final java.lang.String EXTRA_INSTALLER_PACKAGE_NAME static const EXTRA_INSTALLER_PACKAGE_NAME = - "android.intent.extra.INSTALLER_PACKAGE_NAME"; + r"""android.intent.extra.INSTALLER_PACKAGE_NAME"""; /// from: static public final java.lang.String EXTRA_INTENT - static const EXTRA_INTENT = "android.intent.extra.INTENT"; + static const EXTRA_INTENT = r"""android.intent.extra.INTENT"""; /// from: static public final java.lang.String EXTRA_KEY_EVENT - static const EXTRA_KEY_EVENT = "android.intent.extra.KEY_EVENT"; + static const EXTRA_KEY_EVENT = r"""android.intent.extra.KEY_EVENT"""; /// from: static public final java.lang.String EXTRA_LOCALE_LIST - static const EXTRA_LOCALE_LIST = "android.intent.extra.LOCALE_LIST"; + static const EXTRA_LOCALE_LIST = r"""android.intent.extra.LOCALE_LIST"""; /// from: static public final java.lang.String EXTRA_LOCAL_ONLY - static const EXTRA_LOCAL_ONLY = "android.intent.extra.LOCAL_ONLY"; + static const EXTRA_LOCAL_ONLY = r"""android.intent.extra.LOCAL_ONLY"""; /// from: static public final java.lang.String EXTRA_LOCUS_ID - static const EXTRA_LOCUS_ID = "android.intent.extra.LOCUS_ID"; + static const EXTRA_LOCUS_ID = r"""android.intent.extra.LOCUS_ID"""; /// from: static public final java.lang.String EXTRA_MIME_TYPES - static const EXTRA_MIME_TYPES = "android.intent.extra.MIME_TYPES"; + static const EXTRA_MIME_TYPES = r"""android.intent.extra.MIME_TYPES"""; /// from: static public final java.lang.String EXTRA_NOT_UNKNOWN_SOURCE static const EXTRA_NOT_UNKNOWN_SOURCE = - "android.intent.extra.NOT_UNKNOWN_SOURCE"; + r"""android.intent.extra.NOT_UNKNOWN_SOURCE"""; /// from: static public final java.lang.String EXTRA_ORIGINATING_URI - static const EXTRA_ORIGINATING_URI = "android.intent.extra.ORIGINATING_URI"; + static const EXTRA_ORIGINATING_URI = + r"""android.intent.extra.ORIGINATING_URI"""; /// from: static public final java.lang.String EXTRA_PACKAGE_NAME - static const EXTRA_PACKAGE_NAME = "android.intent.extra.PACKAGE_NAME"; + static const EXTRA_PACKAGE_NAME = r"""android.intent.extra.PACKAGE_NAME"""; /// from: static public final java.lang.String EXTRA_PERMISSION_GROUP_NAME static const EXTRA_PERMISSION_GROUP_NAME = - "android.intent.extra.PERMISSION_GROUP_NAME"; + r"""android.intent.extra.PERMISSION_GROUP_NAME"""; /// from: static public final java.lang.String EXTRA_PHONE_NUMBER - static const EXTRA_PHONE_NUMBER = "android.intent.extra.PHONE_NUMBER"; + static const EXTRA_PHONE_NUMBER = r"""android.intent.extra.PHONE_NUMBER"""; /// from: static public final java.lang.String EXTRA_PROCESS_TEXT - static const EXTRA_PROCESS_TEXT = "android.intent.extra.PROCESS_TEXT"; + static const EXTRA_PROCESS_TEXT = r"""android.intent.extra.PROCESS_TEXT"""; /// from: static public final java.lang.String EXTRA_PROCESS_TEXT_READONLY static const EXTRA_PROCESS_TEXT_READONLY = - "android.intent.extra.PROCESS_TEXT_READONLY"; + r"""android.intent.extra.PROCESS_TEXT_READONLY"""; /// from: static public final java.lang.String EXTRA_QUICK_VIEW_FEATURES static const EXTRA_QUICK_VIEW_FEATURES = - "android.intent.extra.QUICK_VIEW_FEATURES"; + r"""android.intent.extra.QUICK_VIEW_FEATURES"""; /// from: static public final java.lang.String EXTRA_QUIET_MODE - static const EXTRA_QUIET_MODE = "android.intent.extra.QUIET_MODE"; + static const EXTRA_QUIET_MODE = r"""android.intent.extra.QUIET_MODE"""; /// from: static public final java.lang.String EXTRA_REFERRER - static const EXTRA_REFERRER = "android.intent.extra.REFERRER"; + static const EXTRA_REFERRER = r"""android.intent.extra.REFERRER"""; /// from: static public final java.lang.String EXTRA_REFERRER_NAME - static const EXTRA_REFERRER_NAME = "android.intent.extra.REFERRER_NAME"; + static const EXTRA_REFERRER_NAME = r"""android.intent.extra.REFERRER_NAME"""; /// from: static public final java.lang.String EXTRA_REMOTE_INTENT_TOKEN static const EXTRA_REMOTE_INTENT_TOKEN = - "android.intent.extra.remote_intent_token"; + r"""android.intent.extra.remote_intent_token"""; /// from: static public final java.lang.String EXTRA_REPLACEMENT_EXTRAS static const EXTRA_REPLACEMENT_EXTRAS = - "android.intent.extra.REPLACEMENT_EXTRAS"; + r"""android.intent.extra.REPLACEMENT_EXTRAS"""; /// from: static public final java.lang.String EXTRA_REPLACING - static const EXTRA_REPLACING = "android.intent.extra.REPLACING"; + static const EXTRA_REPLACING = r"""android.intent.extra.REPLACING"""; /// from: static public final java.lang.String EXTRA_RESTRICTIONS_BUNDLE static const EXTRA_RESTRICTIONS_BUNDLE = - "android.intent.extra.restrictions_bundle"; + r"""android.intent.extra.restrictions_bundle"""; /// from: static public final java.lang.String EXTRA_RESTRICTIONS_INTENT static const EXTRA_RESTRICTIONS_INTENT = - "android.intent.extra.restrictions_intent"; + r"""android.intent.extra.restrictions_intent"""; /// from: static public final java.lang.String EXTRA_RESTRICTIONS_LIST static const EXTRA_RESTRICTIONS_LIST = - "android.intent.extra.restrictions_list"; + r"""android.intent.extra.restrictions_list"""; /// from: static public final java.lang.String EXTRA_RESULT_RECEIVER - static const EXTRA_RESULT_RECEIVER = "android.intent.extra.RESULT_RECEIVER"; + static const EXTRA_RESULT_RECEIVER = + r"""android.intent.extra.RESULT_RECEIVER"""; /// from: static public final java.lang.String EXTRA_RETURN_RESULT - static const EXTRA_RETURN_RESULT = "android.intent.extra.RETURN_RESULT"; + static const EXTRA_RETURN_RESULT = r"""android.intent.extra.RETURN_RESULT"""; /// from: static public final java.lang.String EXTRA_SHORTCUT_ICON - static const EXTRA_SHORTCUT_ICON = "android.intent.extra.shortcut.ICON"; + static const EXTRA_SHORTCUT_ICON = r"""android.intent.extra.shortcut.ICON"""; /// from: static public final java.lang.String EXTRA_SHORTCUT_ICON_RESOURCE static const EXTRA_SHORTCUT_ICON_RESOURCE = - "android.intent.extra.shortcut.ICON_RESOURCE"; + r"""android.intent.extra.shortcut.ICON_RESOURCE"""; /// from: static public final java.lang.String EXTRA_SHORTCUT_ID - static const EXTRA_SHORTCUT_ID = "android.intent.extra.shortcut.ID"; + static const EXTRA_SHORTCUT_ID = r"""android.intent.extra.shortcut.ID"""; /// from: static public final java.lang.String EXTRA_SHORTCUT_INTENT - static const EXTRA_SHORTCUT_INTENT = "android.intent.extra.shortcut.INTENT"; + static const EXTRA_SHORTCUT_INTENT = + r"""android.intent.extra.shortcut.INTENT"""; /// from: static public final java.lang.String EXTRA_SHORTCUT_NAME - static const EXTRA_SHORTCUT_NAME = "android.intent.extra.shortcut.NAME"; + static const EXTRA_SHORTCUT_NAME = r"""android.intent.extra.shortcut.NAME"""; /// from: static public final java.lang.String EXTRA_SHUTDOWN_USERSPACE_ONLY static const EXTRA_SHUTDOWN_USERSPACE_ONLY = - "android.intent.extra.SHUTDOWN_USERSPACE_ONLY"; + r"""android.intent.extra.SHUTDOWN_USERSPACE_ONLY"""; /// from: static public final java.lang.String EXTRA_SPLIT_NAME - static const EXTRA_SPLIT_NAME = "android.intent.extra.SPLIT_NAME"; + static const EXTRA_SPLIT_NAME = r"""android.intent.extra.SPLIT_NAME"""; /// from: static public final java.lang.String EXTRA_START_TIME - static const EXTRA_START_TIME = "android.intent.extra.START_TIME"; + static const EXTRA_START_TIME = r"""android.intent.extra.START_TIME"""; /// from: static public final java.lang.String EXTRA_STREAM - static const EXTRA_STREAM = "android.intent.extra.STREAM"; + static const EXTRA_STREAM = r"""android.intent.extra.STREAM"""; /// from: static public final java.lang.String EXTRA_SUBJECT - static const EXTRA_SUBJECT = "android.intent.extra.SUBJECT"; + static const EXTRA_SUBJECT = r"""android.intent.extra.SUBJECT"""; /// from: static public final java.lang.String EXTRA_SUSPENDED_PACKAGE_EXTRAS static const EXTRA_SUSPENDED_PACKAGE_EXTRAS = - "android.intent.extra.SUSPENDED_PACKAGE_EXTRAS"; + r"""android.intent.extra.SUSPENDED_PACKAGE_EXTRAS"""; /// from: static public final java.lang.String EXTRA_TEMPLATE - static const EXTRA_TEMPLATE = "android.intent.extra.TEMPLATE"; + static const EXTRA_TEMPLATE = r"""android.intent.extra.TEMPLATE"""; /// from: static public final java.lang.String EXTRA_TEXT - static const EXTRA_TEXT = "android.intent.extra.TEXT"; + static const EXTRA_TEXT = r"""android.intent.extra.TEXT"""; /// from: static public final java.lang.String EXTRA_TIME - static const EXTRA_TIME = "android.intent.extra.TIME"; + static const EXTRA_TIME = r"""android.intent.extra.TIME"""; /// from: static public final java.lang.String EXTRA_TIMEZONE - static const EXTRA_TIMEZONE = "time-zone"; + static const EXTRA_TIMEZONE = r"""time-zone"""; /// from: static public final java.lang.String EXTRA_TITLE - static const EXTRA_TITLE = "android.intent.extra.TITLE"; + static const EXTRA_TITLE = r"""android.intent.extra.TITLE"""; /// from: static public final java.lang.String EXTRA_UID - static const EXTRA_UID = "android.intent.extra.UID"; + static const EXTRA_UID = r"""android.intent.extra.UID"""; /// from: static public final java.lang.String EXTRA_USER - static const EXTRA_USER = "android.intent.extra.USER"; + static const EXTRA_USER = r"""android.intent.extra.USER"""; /// from: static public final java.lang.String EXTRA_USER_INITIATED - static const EXTRA_USER_INITIATED = "android.intent.extra.USER_INITIATED"; + static const EXTRA_USER_INITIATED = + r"""android.intent.extra.USER_INITIATED"""; /// from: static public final int FILL_IN_ACTION static const FILL_IN_ACTION = 1; @@ -4596,7 +5847,7 @@ class Intent extends jni.JObject { static const FLAG_RECEIVER_VISIBLE_TO_INSTANT_APPS = 2097152; /// from: static public final java.lang.String METADATA_DOCK_HOME - static const METADATA_DOCK_HOME = "android.dock_home"; + static const METADATA_DOCK_HOME = r"""android.dock_home"""; /// from: static public final int URI_ALLOW_UNSAFE static const URI_ALLOW_UNSAFE = 4; @@ -4607,71 +5858,101 @@ class Intent extends jni.JObject { /// from: static public final int URI_INTENT_SCHEME static const URI_INTENT_SCHEME = 1; - static final _ctor = - jniLookup>("Intent__ctor") + static final _new0 = + jniLookup>("Intent__new0") .asFunction(); /// from: public void () - Intent() : super.fromRef(_ctor().object); + /// The returned object must be released after use, by calling the [release] method. + factory Intent() { + return Intent.fromRef(_new0().object); + } - static final _ctor1 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>("Intent__ctor1") + static final _new1 = jniLookup< + ffi + .NativeFunction)>>( + "Intent__new1") .asFunction)>(); /// from: public void (android.content.Intent intent) - Intent.ctor1(Intent intent) : super.fromRef(_ctor1(intent.reference).object); + /// The returned object must be released after use, by calling the [release] method. + factory Intent.new1( + Intent intent, + ) { + return Intent.fromRef(_new1(intent.reference).object); + } - static final _ctor2 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>("Intent__ctor2") + static final _new2 = jniLookup< + ffi + .NativeFunction)>>( + "Intent__new2") .asFunction)>(); /// from: public void (java.lang.String string) - Intent.ctor2(jni.JString string) - : super.fromRef(_ctor2(string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + factory Intent.new2( + jni.JString string, + ) { + return Intent.fromRef(_new2(string.reference).object); + } - static final _ctor3 = jniLookup< + static final _new3 = jniLookup< ffi.NativeFunction< jni.JniResult Function(ffi.Pointer, - ffi.Pointer)>>("Intent__ctor3") + ffi.Pointer)>>("Intent__new3") .asFunction< jni.JniResult Function( ffi.Pointer, ffi.Pointer)>(); /// from: public void (java.lang.String string, android.net.Uri uri) - Intent.ctor3(jni.JString string, jni.JObject uri) - : super.fromRef(_ctor3(string.reference, uri.reference).object); + /// The returned object must be released after use, by calling the [release] method. + factory Intent.new3( + jni.JString string, + jni.JObject uri, + ) { + return Intent.fromRef(_new3(string.reference, uri.reference).object); + } - static final _ctor4 = jniLookup< + static final _new4 = jniLookup< ffi.NativeFunction< jni.JniResult Function(ffi.Pointer, - ffi.Pointer)>>("Intent__ctor4") + ffi.Pointer)>>("Intent__new4") .asFunction< jni.JniResult Function( ffi.Pointer, ffi.Pointer)>(); /// from: public void (android.content.Context context, java.lang.Class class) - Intent.ctor4(Context context, jni.JObject class0) - : super.fromRef(_ctor4(context.reference, class0.reference).object); + /// The returned object must be released after use, by calling the [release] method. + factory Intent.new4( + Context context, + jni.JObject class0, + ) { + return Intent.fromRef(_new4(context.reference, class0.reference).object); + } - static final _ctor5 = jniLookup< + static final _new5 = jniLookup< ffi.NativeFunction< jni.JniResult Function( ffi.Pointer, ffi.Pointer, ffi.Pointer, - ffi.Pointer)>>("Intent__ctor5") + ffi.Pointer)>>("Intent__new5") .asFunction< jni.JniResult Function(ffi.Pointer, ffi.Pointer, ffi.Pointer, ffi.Pointer)>(); /// from: public void (java.lang.String string, android.net.Uri uri, android.content.Context context, java.lang.Class class) - Intent.ctor5( - jni.JString string, jni.JObject uri, Context context, jni.JObject class0) - : super.fromRef(_ctor5(string.reference, uri.reference, context.reference, - class0.reference) - .object); + /// The returned object must be released after use, by calling the [release] method. + factory Intent.new5( + jni.JString string, + jni.JObject uri, + Context context, + jni.JObject class0, + ) { + return Intent.fromRef(_new5(string.reference, uri.reference, + context.reference, class0.reference) + .object); + } static final _createChooser = jniLookup< ffi.NativeFunction< @@ -4682,10 +5963,14 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: static public android.content.Intent createChooser(android.content.Intent intent, java.lang.CharSequence charSequence) - /// The returned object must be deleted after use, by calling the `delete` method. - static Intent createChooser(Intent intent, jni.JObject charSequence) => - const $IntentType().fromRef( - _createChooser(intent.reference, charSequence.reference).object); + /// The returned object must be released after use, by calling the [release] method. + static Intent createChooser( + Intent intent, + jni.JObject charSequence, + ) { + return const $IntentType().fromRef( + _createChooser(intent.reference, charSequence.reference).object); + } static final _createChooser1 = jniLookup< ffi.NativeFunction< @@ -4698,45 +5983,55 @@ class Intent extends jni.JObject { ffi.Pointer)>(); /// from: static public android.content.Intent createChooser(android.content.Intent intent, java.lang.CharSequence charSequence, android.content.IntentSender intentSender) - /// The returned object must be deleted after use, by calling the `delete` method. + /// The returned object must be released after use, by calling the [release] method. static Intent createChooser1( - Intent intent, jni.JObject charSequence, jni.JObject intentSender) => - const $IntentType().fromRef(_createChooser1( - intent.reference, charSequence.reference, intentSender.reference) - .object); + Intent intent, + jni.JObject charSequence, + jni.JObject intentSender, + ) { + return const $IntentType().fromRef(_createChooser1( + intent.reference, charSequence.reference, intentSender.reference) + .object); + } static final _clone = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>("Intent__clone") + ffi + .NativeFunction)>>( + "Intent__clone") .asFunction)>(); /// from: public java.lang.Object clone() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject clone() => - const jni.JObjectType().fromRef(_clone(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject clone() { + return const jni.JObjectType().fromRef(_clone(reference).object); + } static final _cloneFilter = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Intent__cloneFilter") + ffi + .NativeFunction)>>( + "Intent__cloneFilter") .asFunction)>(); /// from: public android.content.Intent cloneFilter() - /// The returned object must be deleted after use, by calling the `delete` method. - Intent cloneFilter() => - const $IntentType().fromRef(_cloneFilter(reference).object); + /// The returned object must be released after use, by calling the [release] method. + Intent cloneFilter() { + return const $IntentType().fromRef(_cloneFilter(reference).object); + } static final _makeMainActivity = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Intent__makeMainActivity") + ffi + .NativeFunction)>>( + "Intent__makeMainActivity") .asFunction)>(); /// from: static public android.content.Intent makeMainActivity(android.content.ComponentName componentName) - /// The returned object must be deleted after use, by calling the `delete` method. - static Intent makeMainActivity(jni.JObject componentName) => - const $IntentType() - .fromRef(_makeMainActivity(componentName.reference).object); + /// The returned object must be released after use, by calling the [release] method. + static Intent makeMainActivity( + jni.JObject componentName, + ) { + return const $IntentType() + .fromRef(_makeMainActivity(componentName.reference).object); + } static final _makeMainSelectorActivity = jniLookup< ffi.NativeFunction< @@ -4747,35 +6042,43 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: static public android.content.Intent makeMainSelectorActivity(java.lang.String string, java.lang.String string1) - /// The returned object must be deleted after use, by calling the `delete` method. + /// The returned object must be released after use, by calling the [release] method. static Intent makeMainSelectorActivity( - jni.JString string, jni.JString string1) => - const $IntentType().fromRef( - _makeMainSelectorActivity(string.reference, string1.reference) - .object); + jni.JString string, + jni.JString string1, + ) { + return const $IntentType().fromRef( + _makeMainSelectorActivity(string.reference, string1.reference).object); + } static final _makeRestartActivityTask = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Intent__makeRestartActivityTask") + ffi + .NativeFunction)>>( + "Intent__makeRestartActivityTask") .asFunction)>(); /// from: static public android.content.Intent makeRestartActivityTask(android.content.ComponentName componentName) - /// The returned object must be deleted after use, by calling the `delete` method. - static Intent makeRestartActivityTask(jni.JObject componentName) => - const $IntentType() - .fromRef(_makeRestartActivityTask(componentName.reference).object); + /// The returned object must be released after use, by calling the [release] method. + static Intent makeRestartActivityTask( + jni.JObject componentName, + ) { + return const $IntentType() + .fromRef(_makeRestartActivityTask(componentName.reference).object); + } static final _getIntent = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Intent__getIntent") + ffi + .NativeFunction)>>( + "Intent__getIntent") .asFunction)>(); /// from: static public android.content.Intent getIntent(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - static Intent getIntent(jni.JString string) => - const $IntentType().fromRef(_getIntent(string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + static Intent getIntent( + jni.JString string, + ) { + return const $IntentType().fromRef(_getIntent(string.reference).object); + } static final _parseUri = jniLookup< ffi.NativeFunction< @@ -4784,73 +6087,87 @@ class Intent extends jni.JObject { .asFunction, int)>(); /// from: static public android.content.Intent parseUri(java.lang.String string, int i) - /// The returned object must be deleted after use, by calling the `delete` method. - static Intent parseUri(jni.JString string, int i) => - const $IntentType().fromRef(_parseUri(string.reference, i).object); + /// The returned object must be released after use, by calling the [release] method. + static Intent parseUri( + jni.JString string, + int i, + ) { + return const $IntentType().fromRef(_parseUri(string.reference, i).object); + } static final _getIntentOld = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Intent__getIntentOld") + ffi + .NativeFunction)>>( + "Intent__getIntentOld") .asFunction)>(); /// from: static public android.content.Intent getIntentOld(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - static Intent getIntentOld(jni.JString string) => - const $IntentType().fromRef(_getIntentOld(string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + static Intent getIntentOld( + jni.JString string, + ) { + return const $IntentType().fromRef(_getIntentOld(string.reference).object); + } static final _getAction = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Intent__getAction") + ffi + .NativeFunction)>>( + "Intent__getAction") .asFunction)>(); /// from: public java.lang.String getAction() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JString getAction() => - const jni.JStringType().fromRef(_getAction(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JString getAction() { + return const jni.JStringType().fromRef(_getAction(reference).object); + } static final _getData = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>("Intent__getData") + ffi + .NativeFunction)>>( + "Intent__getData") .asFunction)>(); /// from: public android.net.Uri getData() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getData() => - const jni.JObjectType().fromRef(_getData(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getData() { + return const jni.JObjectType().fromRef(_getData(reference).object); + } static final _getDataString = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Intent__getDataString") + ffi + .NativeFunction)>>( + "Intent__getDataString") .asFunction)>(); /// from: public java.lang.String getDataString() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JString getDataString() => - const jni.JStringType().fromRef(_getDataString(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JString getDataString() { + return const jni.JStringType().fromRef(_getDataString(reference).object); + } static final _getScheme = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Intent__getScheme") + ffi + .NativeFunction)>>( + "Intent__getScheme") .asFunction)>(); /// from: public java.lang.String getScheme() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JString getScheme() => - const jni.JStringType().fromRef(_getScheme(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JString getScheme() { + return const jni.JStringType().fromRef(_getScheme(reference).object); + } static final _getType = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>("Intent__getType") + ffi + .NativeFunction)>>( + "Intent__getType") .asFunction)>(); /// from: public java.lang.String getType() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JString getType() => - const jni.JStringType().fromRef(_getType(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JString getType() { + return const jni.JStringType().fromRef(_getType(reference).object); + } static final _resolveType = jniLookup< ffi.NativeFunction< @@ -4861,9 +6178,13 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public java.lang.String resolveType(android.content.Context context) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JString resolveType(Context context) => const jni.JStringType() - .fromRef(_resolveType(reference, context.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JString resolveType( + Context context, + ) { + return const jni.JStringType() + .fromRef(_resolveType(reference, context.reference).object); + } static final _resolveType1 = jniLookup< ffi.NativeFunction< @@ -4874,10 +6195,13 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public java.lang.String resolveType(android.content.ContentResolver contentResolver) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JString resolveType1(jni.JObject contentResolver) => - const jni.JStringType() - .fromRef(_resolveType1(reference, contentResolver.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JString resolveType1( + jni.JObject contentResolver, + ) { + return const jni.JStringType() + .fromRef(_resolveType1(reference, contentResolver.reference).object); + } static final _resolveTypeIfNeeded = jniLookup< ffi.NativeFunction< @@ -4888,21 +6212,25 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public java.lang.String resolveTypeIfNeeded(android.content.ContentResolver contentResolver) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JString resolveTypeIfNeeded(jni.JObject contentResolver) => - const jni.JStringType().fromRef( - _resolveTypeIfNeeded(reference, contentResolver.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JString resolveTypeIfNeeded( + jni.JObject contentResolver, + ) { + return const jni.JStringType().fromRef( + _resolveTypeIfNeeded(reference, contentResolver.reference).object); + } static final _getIdentifier = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Intent__getIdentifier") + ffi + .NativeFunction)>>( + "Intent__getIdentifier") .asFunction)>(); /// from: public java.lang.String getIdentifier() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JString getIdentifier() => - const jni.JStringType().fromRef(_getIdentifier(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JString getIdentifier() { + return const jni.JStringType().fromRef(_getIdentifier(reference).object); + } static final _hasCategory = jniLookup< ffi.NativeFunction< @@ -4913,41 +6241,48 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public boolean hasCategory(java.lang.String string) - bool hasCategory(jni.JString string) => - _hasCategory(reference, string.reference).boolean; + bool hasCategory( + jni.JString string, + ) { + return _hasCategory(reference, string.reference).boolean; + } static final _getCategories = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Intent__getCategories") + ffi + .NativeFunction)>>( + "Intent__getCategories") .asFunction)>(); /// from: public java.util.Set getCategories() - /// The returned object must be deleted after use, by calling the `delete` method. - Set getCategories() => const $SetType(jni.JStringType()) - .fromRef(_getCategories(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JSet getCategories() { + return const jni.JSetType(jni.JStringType()) + .fromRef(_getCategories(reference).object); + } static final _getSelector = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Intent__getSelector") + ffi + .NativeFunction)>>( + "Intent__getSelector") .asFunction)>(); /// from: public android.content.Intent getSelector() - /// The returned object must be deleted after use, by calling the `delete` method. - Intent getSelector() => - const $IntentType().fromRef(_getSelector(reference).object); + /// The returned object must be released after use, by calling the [release] method. + Intent getSelector() { + return const $IntentType().fromRef(_getSelector(reference).object); + } static final _getClipData = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Intent__getClipData") + ffi + .NativeFunction)>>( + "Intent__getClipData") .asFunction)>(); /// from: public android.content.ClipData getClipData() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getClipData() => - const jni.JObjectType().fromRef(_getClipData(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getClipData() { + return const jni.JObjectType().fromRef(_getClipData(reference).object); + } static final _setExtrasClassLoader = jniLookup< ffi.NativeFunction< @@ -4958,8 +6293,11 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void setExtrasClassLoader(java.lang.ClassLoader classLoader) - void setExtrasClassLoader(jni.JObject classLoader) => - _setExtrasClassLoader(reference, classLoader.reference).check(); + void setExtrasClassLoader( + jni.JObject classLoader, + ) { + return _setExtrasClassLoader(reference, classLoader.reference).check(); + } static final _hasExtra = jniLookup< ffi.NativeFunction< @@ -4970,17 +6308,22 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public boolean hasExtra(java.lang.String string) - bool hasExtra(jni.JString string) => - _hasExtra(reference, string.reference).boolean; + bool hasExtra( + jni.JString string, + ) { + return _hasExtra(reference, string.reference).boolean; + } static final _hasFileDescriptors = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Intent__hasFileDescriptors") + ffi + .NativeFunction)>>( + "Intent__hasFileDescriptors") .asFunction)>(); /// from: public boolean hasFileDescriptors() - bool hasFileDescriptors() => _hasFileDescriptors(reference).boolean; + bool hasFileDescriptors() { + return _hasFileDescriptors(reference).boolean; + } static final _getBooleanExtra = jniLookup< ffi.NativeFunction< @@ -4991,8 +6334,12 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer, int)>(); /// from: public boolean getBooleanExtra(java.lang.String string, boolean z) - bool getBooleanExtra(jni.JString string, bool z) => - _getBooleanExtra(reference, string.reference, z ? 1 : 0).boolean; + bool getBooleanExtra( + jni.JString string, + bool z, + ) { + return _getBooleanExtra(reference, string.reference, z ? 1 : 0).boolean; + } static final _getByteExtra = jniLookup< ffi.NativeFunction< @@ -5003,8 +6350,12 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer, int)>(); /// from: public byte getByteExtra(java.lang.String string, byte b) - int getByteExtra(jni.JString string, int b) => - _getByteExtra(reference, string.reference, b).byte; + int getByteExtra( + jni.JString string, + int b, + ) { + return _getByteExtra(reference, string.reference, b).byte; + } static final _getShortExtra = jniLookup< ffi.NativeFunction< @@ -5015,8 +6366,12 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer, int)>(); /// from: public short getShortExtra(java.lang.String string, short s) - int getShortExtra(jni.JString string, int s) => - _getShortExtra(reference, string.reference, s).short; + int getShortExtra( + jni.JString string, + int s, + ) { + return _getShortExtra(reference, string.reference, s).short; + } static final _getCharExtra = jniLookup< ffi.NativeFunction< @@ -5027,8 +6382,12 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer, int)>(); /// from: public char getCharExtra(java.lang.String string, char c) - int getCharExtra(jni.JString string, int c) => - _getCharExtra(reference, string.reference, c).char; + int getCharExtra( + jni.JString string, + int c, + ) { + return _getCharExtra(reference, string.reference, c).char; + } static final _getIntExtra = jniLookup< ffi.NativeFunction< @@ -5039,8 +6398,12 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer, int)>(); /// from: public int getIntExtra(java.lang.String string, int i) - int getIntExtra(jni.JString string, int i) => - _getIntExtra(reference, string.reference, i).integer; + int getIntExtra( + jni.JString string, + int i, + ) { + return _getIntExtra(reference, string.reference, i).integer; + } static final _getLongExtra = jniLookup< ffi.NativeFunction< @@ -5051,8 +6414,12 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer, int)>(); /// from: public long getLongExtra(java.lang.String string, long j) - int getLongExtra(jni.JString string, int j) => - _getLongExtra(reference, string.reference, j).long; + int getLongExtra( + jni.JString string, + int j, + ) { + return _getLongExtra(reference, string.reference, j).long; + } static final _getFloatExtra = jniLookup< ffi.NativeFunction< @@ -5063,8 +6430,12 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer, double)>(); /// from: public float getFloatExtra(java.lang.String string, float f) - double getFloatExtra(jni.JString string, double f) => - _getFloatExtra(reference, string.reference, f).float; + double getFloatExtra( + jni.JString string, + double f, + ) { + return _getFloatExtra(reference, string.reference, f).float; + } static final _getDoubleExtra = jniLookup< ffi.NativeFunction< @@ -5075,8 +6446,12 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer, double)>(); /// from: public double getDoubleExtra(java.lang.String string, double d) - double getDoubleExtra(jni.JString string, double d) => - _getDoubleExtra(reference, string.reference, d).doubleFloat; + double getDoubleExtra( + jni.JString string, + double d, + ) { + return _getDoubleExtra(reference, string.reference, d).doubleFloat; + } static final _getStringExtra = jniLookup< ffi.NativeFunction< @@ -5087,9 +6462,13 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public java.lang.String getStringExtra(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JString getStringExtra(jni.JString string) => const jni.JStringType() - .fromRef(_getStringExtra(reference, string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JString getStringExtra( + jni.JString string, + ) { + return const jni.JStringType() + .fromRef(_getStringExtra(reference, string.reference).object); + } static final _getCharSequenceExtra = jniLookup< ffi.NativeFunction< @@ -5100,10 +6479,13 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public java.lang.CharSequence getCharSequenceExtra(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getCharSequenceExtra(jni.JString string) => - const jni.JObjectType() - .fromRef(_getCharSequenceExtra(reference, string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getCharSequenceExtra( + jni.JString string, + ) { + return const jni.JObjectType() + .fromRef(_getCharSequenceExtra(reference, string.reference).object); + } static final _getParcelableExtra = jniLookup< ffi.NativeFunction< @@ -5114,10 +6496,13 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public T getParcelableExtra(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - T getParcelableExtra( - jni.JObjType $T, jni.JString string) => - $T.fromRef(_getParcelableExtra(reference, string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + $T getParcelableExtra<$T extends jni.JObject>( + jni.JString string, { + required jni.JObjType<$T> T, + }) { + return T.fromRef(_getParcelableExtra(reference, string.reference).object); + } static final _getParcelableExtra1 = jniLookup< ffi.NativeFunction< @@ -5130,12 +6515,16 @@ class Intent extends jni.JObject { ffi.Pointer)>(); /// from: public T getParcelableExtra(java.lang.String string, java.lang.Class class) - /// The returned object must be deleted after use, by calling the `delete` method. - T getParcelableExtra1( - jni.JObjType $T, jni.JString string, jni.JObject class0) => - $T.fromRef( - _getParcelableExtra1(reference, string.reference, class0.reference) - .object); + /// The returned object must be released after use, by calling the [release] method. + $T getParcelableExtra1<$T extends jni.JObject>( + jni.JString string, + jni.JObject class0, { + required jni.JObjType<$T> T, + }) { + return T.fromRef( + _getParcelableExtra1(reference, string.reference, class0.reference) + .object); + } static final _getParcelableArrayExtra = jniLookup< ffi.NativeFunction< @@ -5146,10 +6535,13 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public android.os.Parcelable[] getParcelableArrayExtra(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JArray getParcelableArrayExtra(jni.JString string) => - const jni.JArrayType(jni.JObjectType()).fromRef( - _getParcelableArrayExtra(reference, string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JArray getParcelableArrayExtra( + jni.JString string, + ) { + return const jni.JArrayType(jni.JObjectType()) + .fromRef(_getParcelableArrayExtra(reference, string.reference).object); + } static final _getParcelableArrayExtra1 = jniLookup< ffi.NativeFunction< @@ -5162,12 +6554,16 @@ class Intent extends jni.JObject { ffi.Pointer)>(); /// from: public java.lang.Object[] getParcelableArrayExtra(java.lang.String string, java.lang.Class class) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JArray getParcelableArrayExtra1( - jni.JObjType $T, jni.JString string, jni.JObject class0) => - jni.JArrayType($T).fromRef(_getParcelableArrayExtra1( - reference, string.reference, class0.reference) - .object); + /// The returned object must be released after use, by calling the [release] method. + jni.JArray<$T> getParcelableArrayExtra1<$T extends jni.JObject>( + jni.JString string, + jni.JObject class0, { + required jni.JObjType<$T> T, + }) { + return jni.JArrayType(T).fromRef( + _getParcelableArrayExtra1(reference, string.reference, class0.reference) + .object); + } static final _getParcelableArrayListExtra = jniLookup< ffi.NativeFunction< @@ -5179,11 +6575,14 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public java.util.ArrayList getParcelableArrayListExtra(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getParcelableArrayListExtra( - jni.JObjType $T, jni.JString string) => - const jni.JObjectType().fromRef( - _getParcelableArrayListExtra(reference, string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getParcelableArrayListExtra<$T extends jni.JObject>( + jni.JString string, { + required jni.JObjType<$T> T, + }) { + return const jni.JObjectType().fromRef( + _getParcelableArrayListExtra(reference, string.reference).object); + } static final _getParcelableArrayListExtra1 = jniLookup< ffi.NativeFunction< @@ -5195,12 +6594,16 @@ class Intent extends jni.JObject { ffi.Pointer)>(); /// from: public java.util.ArrayList getParcelableArrayListExtra(java.lang.String string, java.lang.Class class) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getParcelableArrayListExtra1( - jni.JObjType $T, jni.JString string, jni.JObject class0) => - const jni.JObjectType().fromRef(_getParcelableArrayListExtra1( - reference, string.reference, class0.reference) - .object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getParcelableArrayListExtra1<$T extends jni.JObject>( + jni.JString string, + jni.JObject class0, { + required jni.JObjType<$T> T, + }) { + return const jni.JObjectType().fromRef(_getParcelableArrayListExtra1( + reference, string.reference, class0.reference) + .object); + } static final _getSerializableExtra = jniLookup< ffi.NativeFunction< @@ -5211,10 +6614,13 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public java.io.Serializable getSerializableExtra(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getSerializableExtra(jni.JString string) => - const jni.JObjectType() - .fromRef(_getSerializableExtra(reference, string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getSerializableExtra( + jni.JString string, + ) { + return const jni.JObjectType() + .fromRef(_getSerializableExtra(reference, string.reference).object); + } static final _getSerializableExtra1 = jniLookup< ffi.NativeFunction< @@ -5227,12 +6633,16 @@ class Intent extends jni.JObject { ffi.Pointer)>(); /// from: public T getSerializableExtra(java.lang.String string, java.lang.Class class) - /// The returned object must be deleted after use, by calling the `delete` method. - T getSerializableExtra1( - jni.JObjType $T, jni.JString string, jni.JObject class0) => - $T.fromRef( - _getSerializableExtra1(reference, string.reference, class0.reference) - .object); + /// The returned object must be released after use, by calling the [release] method. + $T getSerializableExtra1<$T extends jni.JObject>( + jni.JString string, + jni.JObject class0, { + required jni.JObjType<$T> T, + }) { + return T.fromRef( + _getSerializableExtra1(reference, string.reference, class0.reference) + .object); + } static final _getIntegerArrayListExtra = jniLookup< ffi.NativeFunction< @@ -5243,10 +6653,13 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public java.util.ArrayList getIntegerArrayListExtra(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getIntegerArrayListExtra(jni.JString string) => - const jni.JObjectType().fromRef( - _getIntegerArrayListExtra(reference, string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getIntegerArrayListExtra( + jni.JString string, + ) { + return const jni.JObjectType() + .fromRef(_getIntegerArrayListExtra(reference, string.reference).object); + } static final _getStringArrayListExtra = jniLookup< ffi.NativeFunction< @@ -5257,10 +6670,13 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public java.util.ArrayList getStringArrayListExtra(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getStringArrayListExtra(jni.JString string) => - const jni.JObjectType().fromRef( - _getStringArrayListExtra(reference, string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getStringArrayListExtra( + jni.JString string, + ) { + return const jni.JObjectType() + .fromRef(_getStringArrayListExtra(reference, string.reference).object); + } static final _getCharSequenceArrayListExtra = jniLookup< ffi.NativeFunction< @@ -5272,10 +6688,13 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public java.util.ArrayList getCharSequenceArrayListExtra(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getCharSequenceArrayListExtra(jni.JString string) => - const jni.JObjectType().fromRef( - _getCharSequenceArrayListExtra(reference, string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getCharSequenceArrayListExtra( + jni.JString string, + ) { + return const jni.JObjectType().fromRef( + _getCharSequenceArrayListExtra(reference, string.reference).object); + } static final _getBooleanArrayExtra = jniLookup< ffi.NativeFunction< @@ -5286,10 +6705,13 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public boolean[] getBooleanArrayExtra(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JArray getBooleanArrayExtra(jni.JString string) => - const jni.JArrayType(jni.JBooleanType()) - .fromRef(_getBooleanArrayExtra(reference, string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JArray getBooleanArrayExtra( + jni.JString string, + ) { + return const jni.JArrayType(jni.jbooleanType()) + .fromRef(_getBooleanArrayExtra(reference, string.reference).object); + } static final _getByteArrayExtra = jniLookup< ffi.NativeFunction< @@ -5300,10 +6722,13 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public byte[] getByteArrayExtra(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JArray getByteArrayExtra(jni.JString string) => - const jni.JArrayType(jni.JByteType()) - .fromRef(_getByteArrayExtra(reference, string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JArray getByteArrayExtra( + jni.JString string, + ) { + return const jni.JArrayType(jni.jbyteType()) + .fromRef(_getByteArrayExtra(reference, string.reference).object); + } static final _getShortArrayExtra = jniLookup< ffi.NativeFunction< @@ -5314,10 +6739,13 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public short[] getShortArrayExtra(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JArray getShortArrayExtra(jni.JString string) => - const jni.JArrayType(jni.JShortType()) - .fromRef(_getShortArrayExtra(reference, string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JArray getShortArrayExtra( + jni.JString string, + ) { + return const jni.JArrayType(jni.jshortType()) + .fromRef(_getShortArrayExtra(reference, string.reference).object); + } static final _getCharArrayExtra = jniLookup< ffi.NativeFunction< @@ -5328,10 +6756,13 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public char[] getCharArrayExtra(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JArray getCharArrayExtra(jni.JString string) => - const jni.JArrayType(jni.JCharType()) - .fromRef(_getCharArrayExtra(reference, string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JArray getCharArrayExtra( + jni.JString string, + ) { + return const jni.JArrayType(jni.jcharType()) + .fromRef(_getCharArrayExtra(reference, string.reference).object); + } static final _getIntArrayExtra = jniLookup< ffi.NativeFunction< @@ -5342,10 +6773,13 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public int[] getIntArrayExtra(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JArray getIntArrayExtra(jni.JString string) => - const jni.JArrayType(jni.JIntType()) - .fromRef(_getIntArrayExtra(reference, string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JArray getIntArrayExtra( + jni.JString string, + ) { + return const jni.JArrayType(jni.jintType()) + .fromRef(_getIntArrayExtra(reference, string.reference).object); + } static final _getLongArrayExtra = jniLookup< ffi.NativeFunction< @@ -5356,10 +6790,13 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public long[] getLongArrayExtra(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JArray getLongArrayExtra(jni.JString string) => - const jni.JArrayType(jni.JLongType()) - .fromRef(_getLongArrayExtra(reference, string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JArray getLongArrayExtra( + jni.JString string, + ) { + return const jni.JArrayType(jni.jlongType()) + .fromRef(_getLongArrayExtra(reference, string.reference).object); + } static final _getFloatArrayExtra = jniLookup< ffi.NativeFunction< @@ -5370,10 +6807,13 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public float[] getFloatArrayExtra(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JArray getFloatArrayExtra(jni.JString string) => - const jni.JArrayType(jni.JFloatType()) - .fromRef(_getFloatArrayExtra(reference, string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JArray getFloatArrayExtra( + jni.JString string, + ) { + return const jni.JArrayType(jni.jfloatType()) + .fromRef(_getFloatArrayExtra(reference, string.reference).object); + } static final _getDoubleArrayExtra = jniLookup< ffi.NativeFunction< @@ -5384,10 +6824,13 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public double[] getDoubleArrayExtra(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JArray getDoubleArrayExtra(jni.JString string) => - const jni.JArrayType(jni.JDoubleType()) - .fromRef(_getDoubleArrayExtra(reference, string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JArray getDoubleArrayExtra( + jni.JString string, + ) { + return const jni.JArrayType(jni.jdoubleType()) + .fromRef(_getDoubleArrayExtra(reference, string.reference).object); + } static final _getStringArrayExtra = jniLookup< ffi.NativeFunction< @@ -5398,10 +6841,13 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public java.lang.String[] getStringArrayExtra(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JArray getStringArrayExtra(jni.JString string) => - const jni.JArrayType(jni.JStringType()) - .fromRef(_getStringArrayExtra(reference, string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JArray getStringArrayExtra( + jni.JString string, + ) { + return const jni.JArrayType(jni.JStringType()) + .fromRef(_getStringArrayExtra(reference, string.reference).object); + } static final _getCharSequenceArrayExtra = jniLookup< ffi.NativeFunction< @@ -5412,10 +6858,13 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public java.lang.CharSequence[] getCharSequenceArrayExtra(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JArray getCharSequenceArrayExtra(jni.JString string) => - const jni.JArrayType(jni.JObjectType()).fromRef( - _getCharSequenceArrayExtra(reference, string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JArray getCharSequenceArrayExtra( + jni.JString string, + ) { + return const jni.JArrayType(jni.JObjectType()).fromRef( + _getCharSequenceArrayExtra(reference, string.reference).object); + } static final _getBundleExtra = jniLookup< ffi.NativeFunction< @@ -5426,62 +6875,72 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public android.os.Bundle getBundleExtra(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getBundleExtra(jni.JString string) => const jni.JObjectType() - .fromRef(_getBundleExtra(reference, string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getBundleExtra( + jni.JString string, + ) { + return const jni.JObjectType() + .fromRef(_getBundleExtra(reference, string.reference).object); + } static final _getExtras = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Intent__getExtras") + ffi + .NativeFunction)>>( + "Intent__getExtras") .asFunction)>(); /// from: public android.os.Bundle getExtras() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getExtras() => - const jni.JObjectType().fromRef(_getExtras(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getExtras() { + return const jni.JObjectType().fromRef(_getExtras(reference).object); + } static final _getFlags = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Intent__getFlags") + ffi + .NativeFunction)>>( + "Intent__getFlags") .asFunction)>(); /// from: public int getFlags() - int getFlags() => _getFlags(reference).integer; + int getFlags() { + return _getFlags(reference).integer; + } static final _getPackage = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Intent__getPackage") + ffi + .NativeFunction)>>( + "Intent__getPackage") .asFunction)>(); /// from: public java.lang.String getPackage() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JString getPackage() => - const jni.JStringType().fromRef(_getPackage(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JString getPackage() { + return const jni.JStringType().fromRef(_getPackage(reference).object); + } static final _getComponent = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Intent__getComponent") + ffi + .NativeFunction)>>( + "Intent__getComponent") .asFunction)>(); /// from: public android.content.ComponentName getComponent() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getComponent() => - const jni.JObjectType().fromRef(_getComponent(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getComponent() { + return const jni.JObjectType().fromRef(_getComponent(reference).object); + } static final _getSourceBounds = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Intent__getSourceBounds") + ffi + .NativeFunction)>>( + "Intent__getSourceBounds") .asFunction)>(); /// from: public android.graphics.Rect getSourceBounds() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getSourceBounds() => - const jni.JObjectType().fromRef(_getSourceBounds(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getSourceBounds() { + return const jni.JObjectType().fromRef(_getSourceBounds(reference).object); + } static final _resolveActivity = jniLookup< ffi.NativeFunction< @@ -5492,10 +6951,13 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public android.content.ComponentName resolveActivity(android.content.pm.PackageManager packageManager) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject resolveActivity(jni.JObject packageManager) => - const jni.JObjectType().fromRef( - _resolveActivity(reference, packageManager.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject resolveActivity( + jni.JObject packageManager, + ) { + return const jni.JObjectType() + .fromRef(_resolveActivity(reference, packageManager.reference).object); + } static final _resolveActivityInfo = jniLookup< ffi.NativeFunction< @@ -5508,10 +6970,14 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer, int)>(); /// from: public android.content.pm.ActivityInfo resolveActivityInfo(android.content.pm.PackageManager packageManager, int i) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject resolveActivityInfo(jni.JObject packageManager, int i) => - const jni.JObjectType().fromRef( - _resolveActivityInfo(reference, packageManager.reference, i).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject resolveActivityInfo( + jni.JObject packageManager, + int i, + ) { + return const jni.JObjectType().fromRef( + _resolveActivityInfo(reference, packageManager.reference, i).object); + } static final _setAction = jniLookup< ffi.NativeFunction< @@ -5522,9 +6988,13 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public android.content.Intent setAction(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent setAction(jni.JString string) => const $IntentType() - .fromRef(_setAction(reference, string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + Intent setAction( + jni.JString string, + ) { + return const $IntentType() + .fromRef(_setAction(reference, string.reference).object); + } static final _setData = jniLookup< ffi.NativeFunction< @@ -5535,9 +7005,13 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public android.content.Intent setData(android.net.Uri uri) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent setData(jni.JObject uri) => - const $IntentType().fromRef(_setData(reference, uri.reference).object); + /// The returned object must be released after use, by calling the [release] method. + Intent setData( + jni.JObject uri, + ) { + return const $IntentType() + .fromRef(_setData(reference, uri.reference).object); + } static final _setDataAndNormalize = jniLookup< ffi.NativeFunction< @@ -5548,9 +7022,13 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public android.content.Intent setDataAndNormalize(android.net.Uri uri) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent setDataAndNormalize(jni.JObject uri) => const $IntentType() - .fromRef(_setDataAndNormalize(reference, uri.reference).object); + /// The returned object must be released after use, by calling the [release] method. + Intent setDataAndNormalize( + jni.JObject uri, + ) { + return const $IntentType() + .fromRef(_setDataAndNormalize(reference, uri.reference).object); + } static final _setType = jniLookup< ffi.NativeFunction< @@ -5561,9 +7039,13 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public android.content.Intent setType(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent setType(jni.JString string) => - const $IntentType().fromRef(_setType(reference, string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + Intent setType( + jni.JString string, + ) { + return const $IntentType() + .fromRef(_setType(reference, string.reference).object); + } static final _setTypeAndNormalize = jniLookup< ffi.NativeFunction< @@ -5574,9 +7056,13 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public android.content.Intent setTypeAndNormalize(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent setTypeAndNormalize(jni.JString string) => const $IntentType() - .fromRef(_setTypeAndNormalize(reference, string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + Intent setTypeAndNormalize( + jni.JString string, + ) { + return const $IntentType() + .fromRef(_setTypeAndNormalize(reference, string.reference).object); + } static final _setDataAndType = jniLookup< ffi.NativeFunction< @@ -5589,10 +7075,14 @@ class Intent extends jni.JObject { ffi.Pointer)>(); /// from: public android.content.Intent setDataAndType(android.net.Uri uri, java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent setDataAndType(jni.JObject uri, jni.JString string) => - const $IntentType().fromRef( - _setDataAndType(reference, uri.reference, string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + Intent setDataAndType( + jni.JObject uri, + jni.JString string, + ) { + return const $IntentType().fromRef( + _setDataAndType(reference, uri.reference, string.reference).object); + } static final _setDataAndTypeAndNormalize = jniLookup< ffi.NativeFunction< @@ -5605,11 +7095,15 @@ class Intent extends jni.JObject { ffi.Pointer)>(); /// from: public android.content.Intent setDataAndTypeAndNormalize(android.net.Uri uri, java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent setDataAndTypeAndNormalize(jni.JObject uri, jni.JString string) => - const $IntentType().fromRef(_setDataAndTypeAndNormalize( - reference, uri.reference, string.reference) - .object); + /// The returned object must be released after use, by calling the [release] method. + Intent setDataAndTypeAndNormalize( + jni.JObject uri, + jni.JString string, + ) { + return const $IntentType().fromRef( + _setDataAndTypeAndNormalize(reference, uri.reference, string.reference) + .object); + } static final _setIdentifier = jniLookup< ffi.NativeFunction< @@ -5620,9 +7114,13 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public android.content.Intent setIdentifier(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent setIdentifier(jni.JString string) => const $IntentType() - .fromRef(_setIdentifier(reference, string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + Intent setIdentifier( + jni.JString string, + ) { + return const $IntentType() + .fromRef(_setIdentifier(reference, string.reference).object); + } static final _addCategory = jniLookup< ffi.NativeFunction< @@ -5633,9 +7131,13 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public android.content.Intent addCategory(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent addCategory(jni.JString string) => const $IntentType() - .fromRef(_addCategory(reference, string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + Intent addCategory( + jni.JString string, + ) { + return const $IntentType() + .fromRef(_addCategory(reference, string.reference).object); + } static final _removeCategory = jniLookup< ffi.NativeFunction< @@ -5646,8 +7148,11 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void removeCategory(java.lang.String string) - void removeCategory(jni.JString string) => - _removeCategory(reference, string.reference).check(); + void removeCategory( + jni.JString string, + ) { + return _removeCategory(reference, string.reference).check(); + } static final _setSelector = jniLookup< ffi.NativeFunction< @@ -5658,8 +7163,11 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void setSelector(android.content.Intent intent) - void setSelector(Intent intent) => - _setSelector(reference, intent.reference).check(); + void setSelector( + Intent intent, + ) { + return _setSelector(reference, intent.reference).check(); + } static final _setClipData = jniLookup< ffi.NativeFunction< @@ -5670,8 +7178,11 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void setClipData(android.content.ClipData clipData) - void setClipData(jni.JObject clipData) => - _setClipData(reference, clipData.reference).check(); + void setClipData( + jni.JObject clipData, + ) { + return _setClipData(reference, clipData.reference).check(); + } static final _putExtra = jniLookup< ffi.NativeFunction< @@ -5682,9 +7193,14 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer, int)>(); /// from: public android.content.Intent putExtra(java.lang.String string, boolean z) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent putExtra(jni.JString string, bool z) => const $IntentType() - .fromRef(_putExtra(reference, string.reference, z ? 1 : 0).object); + /// The returned object must be released after use, by calling the [release] method. + Intent putExtra( + jni.JString string, + bool z, + ) { + return const $IntentType() + .fromRef(_putExtra(reference, string.reference, z ? 1 : 0).object); + } static final _putExtra1 = jniLookup< ffi.NativeFunction< @@ -5695,9 +7211,14 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer, int)>(); /// from: public android.content.Intent putExtra(java.lang.String string, byte b) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent putExtra1(jni.JString string, int b) => const $IntentType() - .fromRef(_putExtra1(reference, string.reference, b).object); + /// The returned object must be released after use, by calling the [release] method. + Intent putExtra1( + jni.JString string, + int b, + ) { + return const $IntentType() + .fromRef(_putExtra1(reference, string.reference, b).object); + } static final _putExtra2 = jniLookup< ffi.NativeFunction< @@ -5708,9 +7229,14 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer, int)>(); /// from: public android.content.Intent putExtra(java.lang.String string, char c) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent putExtra2(jni.JString string, int c) => const $IntentType() - .fromRef(_putExtra2(reference, string.reference, c).object); + /// The returned object must be released after use, by calling the [release] method. + Intent putExtra2( + jni.JString string, + int c, + ) { + return const $IntentType() + .fromRef(_putExtra2(reference, string.reference, c).object); + } static final _putExtra3 = jniLookup< ffi.NativeFunction< @@ -5721,9 +7247,14 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer, int)>(); /// from: public android.content.Intent putExtra(java.lang.String string, short s) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent putExtra3(jni.JString string, int s) => const $IntentType() - .fromRef(_putExtra3(reference, string.reference, s).object); + /// The returned object must be released after use, by calling the [release] method. + Intent putExtra3( + jni.JString string, + int s, + ) { + return const $IntentType() + .fromRef(_putExtra3(reference, string.reference, s).object); + } static final _putExtra4 = jniLookup< ffi.NativeFunction< @@ -5734,9 +7265,14 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer, int)>(); /// from: public android.content.Intent putExtra(java.lang.String string, int i) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent putExtra4(jni.JString string, int i) => const $IntentType() - .fromRef(_putExtra4(reference, string.reference, i).object); + /// The returned object must be released after use, by calling the [release] method. + Intent putExtra4( + jni.JString string, + int i, + ) { + return const $IntentType() + .fromRef(_putExtra4(reference, string.reference, i).object); + } static final _putExtra5 = jniLookup< ffi.NativeFunction< @@ -5747,9 +7283,14 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer, int)>(); /// from: public android.content.Intent putExtra(java.lang.String string, long j) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent putExtra5(jni.JString string, int j) => const $IntentType() - .fromRef(_putExtra5(reference, string.reference, j).object); + /// The returned object must be released after use, by calling the [release] method. + Intent putExtra5( + jni.JString string, + int j, + ) { + return const $IntentType() + .fromRef(_putExtra5(reference, string.reference, j).object); + } static final _putExtra6 = jniLookup< ffi.NativeFunction< @@ -5760,9 +7301,14 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer, double)>(); /// from: public android.content.Intent putExtra(java.lang.String string, float f) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent putExtra6(jni.JString string, double f) => const $IntentType() - .fromRef(_putExtra6(reference, string.reference, f).object); + /// The returned object must be released after use, by calling the [release] method. + Intent putExtra6( + jni.JString string, + double f, + ) { + return const $IntentType() + .fromRef(_putExtra6(reference, string.reference, f).object); + } static final _putExtra7 = jniLookup< ffi.NativeFunction< @@ -5773,9 +7319,14 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer, double)>(); /// from: public android.content.Intent putExtra(java.lang.String string, double d) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent putExtra7(jni.JString string, double d) => const $IntentType() - .fromRef(_putExtra7(reference, string.reference, d).object); + /// The returned object must be released after use, by calling the [release] method. + Intent putExtra7( + jni.JString string, + double d, + ) { + return const $IntentType() + .fromRef(_putExtra7(reference, string.reference, d).object); + } static final _putExtra8 = jniLookup< ffi.NativeFunction< @@ -5788,10 +7339,14 @@ class Intent extends jni.JObject { ffi.Pointer)>(); /// from: public android.content.Intent putExtra(java.lang.String string, java.lang.String string1) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent putExtra8(jni.JString string, jni.JString string1) => - const $IntentType().fromRef( - _putExtra8(reference, string.reference, string1.reference).object); + /// The returned object must be released after use, by calling the [release] method. + Intent putExtra8( + jni.JString string, + jni.JString string1, + ) { + return const $IntentType().fromRef( + _putExtra8(reference, string.reference, string1.reference).object); + } static final _putExtra9 = jniLookup< ffi.NativeFunction< @@ -5804,11 +7359,14 @@ class Intent extends jni.JObject { ffi.Pointer)>(); /// from: public android.content.Intent putExtra(java.lang.String string, java.lang.CharSequence charSequence) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent putExtra9(jni.JString string, jni.JObject charSequence) => - const $IntentType().fromRef( - _putExtra9(reference, string.reference, charSequence.reference) - .object); + /// The returned object must be released after use, by calling the [release] method. + Intent putExtra9( + jni.JString string, + jni.JObject charSequence, + ) { + return const $IntentType().fromRef( + _putExtra9(reference, string.reference, charSequence.reference).object); + } static final _putExtra10 = jniLookup< ffi.NativeFunction< @@ -5821,11 +7379,14 @@ class Intent extends jni.JObject { ffi.Pointer)>(); /// from: public android.content.Intent putExtra(java.lang.String string, android.os.Parcelable parcelable) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent putExtra10(jni.JString string, jni.JObject parcelable) => - const $IntentType().fromRef( - _putExtra10(reference, string.reference, parcelable.reference) - .object); + /// The returned object must be released after use, by calling the [release] method. + Intent putExtra10( + jni.JString string, + jni.JObject parcelable, + ) { + return const $IntentType().fromRef( + _putExtra10(reference, string.reference, parcelable.reference).object); + } static final _putExtra11 = jniLookup< ffi.NativeFunction< @@ -5838,11 +7399,14 @@ class Intent extends jni.JObject { ffi.Pointer)>(); /// from: public android.content.Intent putExtra(java.lang.String string, android.os.Parcelable[] parcelables) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent putExtra11(jni.JString string, jni.JArray parcelables) => - const $IntentType().fromRef( - _putExtra11(reference, string.reference, parcelables.reference) - .object); + /// The returned object must be released after use, by calling the [release] method. + Intent putExtra11( + jni.JString string, + jni.JArray parcelables, + ) { + return const $IntentType().fromRef( + _putExtra11(reference, string.reference, parcelables.reference).object); + } static final _putParcelableArrayListExtra = jniLookup< ffi.NativeFunction< @@ -5854,12 +7418,15 @@ class Intent extends jni.JObject { ffi.Pointer)>(); /// from: public android.content.Intent putParcelableArrayListExtra(java.lang.String string, java.util.ArrayList arrayList) - /// The returned object must be deleted after use, by calling the `delete` method. + /// The returned object must be released after use, by calling the [release] method. Intent putParcelableArrayListExtra( - jni.JString string, jni.JObject arrayList) => - const $IntentType().fromRef(_putParcelableArrayListExtra( - reference, string.reference, arrayList.reference) - .object); + jni.JString string, + jni.JObject arrayList, + ) { + return const $IntentType().fromRef(_putParcelableArrayListExtra( + reference, string.reference, arrayList.reference) + .object); + } static final _putIntegerArrayListExtra = jniLookup< ffi.NativeFunction< @@ -5872,11 +7439,15 @@ class Intent extends jni.JObject { ffi.Pointer)>(); /// from: public android.content.Intent putIntegerArrayListExtra(java.lang.String string, java.util.ArrayList arrayList) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent putIntegerArrayListExtra(jni.JString string, jni.JObject arrayList) => - const $IntentType().fromRef(_putIntegerArrayListExtra( - reference, string.reference, arrayList.reference) - .object); + /// The returned object must be released after use, by calling the [release] method. + Intent putIntegerArrayListExtra( + jni.JString string, + jni.JObject arrayList, + ) { + return const $IntentType().fromRef(_putIntegerArrayListExtra( + reference, string.reference, arrayList.reference) + .object); + } static final _putStringArrayListExtra = jniLookup< ffi.NativeFunction< @@ -5889,11 +7460,15 @@ class Intent extends jni.JObject { ffi.Pointer)>(); /// from: public android.content.Intent putStringArrayListExtra(java.lang.String string, java.util.ArrayList arrayList) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent putStringArrayListExtra(jni.JString string, jni.JObject arrayList) => - const $IntentType().fromRef(_putStringArrayListExtra( - reference, string.reference, arrayList.reference) - .object); + /// The returned object must be released after use, by calling the [release] method. + Intent putStringArrayListExtra( + jni.JString string, + jni.JObject arrayList, + ) { + return const $IntentType().fromRef(_putStringArrayListExtra( + reference, string.reference, arrayList.reference) + .object); + } static final _putCharSequenceArrayListExtra = jniLookup< ffi.NativeFunction< @@ -5905,12 +7480,15 @@ class Intent extends jni.JObject { ffi.Pointer)>(); /// from: public android.content.Intent putCharSequenceArrayListExtra(java.lang.String string, java.util.ArrayList arrayList) - /// The returned object must be deleted after use, by calling the `delete` method. + /// The returned object must be released after use, by calling the [release] method. Intent putCharSequenceArrayListExtra( - jni.JString string, jni.JObject arrayList) => - const $IntentType().fromRef(_putCharSequenceArrayListExtra( - reference, string.reference, arrayList.reference) - .object); + jni.JString string, + jni.JObject arrayList, + ) { + return const $IntentType().fromRef(_putCharSequenceArrayListExtra( + reference, string.reference, arrayList.reference) + .object); + } static final _putExtra12 = jniLookup< ffi.NativeFunction< @@ -5923,11 +7501,15 @@ class Intent extends jni.JObject { ffi.Pointer)>(); /// from: public android.content.Intent putExtra(java.lang.String string, java.io.Serializable serializable) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent putExtra12(jni.JString string, jni.JObject serializable) => - const $IntentType().fromRef( - _putExtra12(reference, string.reference, serializable.reference) - .object); + /// The returned object must be released after use, by calling the [release] method. + Intent putExtra12( + jni.JString string, + jni.JObject serializable, + ) { + return const $IntentType().fromRef( + _putExtra12(reference, string.reference, serializable.reference) + .object); + } static final _putExtra13 = jniLookup< ffi.NativeFunction< @@ -5940,10 +7522,14 @@ class Intent extends jni.JObject { ffi.Pointer)>(); /// from: public android.content.Intent putExtra(java.lang.String string, boolean[] zs) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent putExtra13(jni.JString string, jni.JArray zs) => - const $IntentType().fromRef( - _putExtra13(reference, string.reference, zs.reference).object); + /// The returned object must be released after use, by calling the [release] method. + Intent putExtra13( + jni.JString string, + jni.JArray zs, + ) { + return const $IntentType() + .fromRef(_putExtra13(reference, string.reference, zs.reference).object); + } static final _putExtra14 = jniLookup< ffi.NativeFunction< @@ -5956,10 +7542,14 @@ class Intent extends jni.JObject { ffi.Pointer)>(); /// from: public android.content.Intent putExtra(java.lang.String string, byte[] bs) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent putExtra14(jni.JString string, jni.JArray bs) => - const $IntentType().fromRef( - _putExtra14(reference, string.reference, bs.reference).object); + /// The returned object must be released after use, by calling the [release] method. + Intent putExtra14( + jni.JString string, + jni.JArray bs, + ) { + return const $IntentType() + .fromRef(_putExtra14(reference, string.reference, bs.reference).object); + } static final _putExtra15 = jniLookup< ffi.NativeFunction< @@ -5972,10 +7562,14 @@ class Intent extends jni.JObject { ffi.Pointer)>(); /// from: public android.content.Intent putExtra(java.lang.String string, short[] ss) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent putExtra15(jni.JString string, jni.JArray ss) => - const $IntentType().fromRef( - _putExtra15(reference, string.reference, ss.reference).object); + /// The returned object must be released after use, by calling the [release] method. + Intent putExtra15( + jni.JString string, + jni.JArray ss, + ) { + return const $IntentType() + .fromRef(_putExtra15(reference, string.reference, ss.reference).object); + } static final _putExtra16 = jniLookup< ffi.NativeFunction< @@ -5988,10 +7582,14 @@ class Intent extends jni.JObject { ffi.Pointer)>(); /// from: public android.content.Intent putExtra(java.lang.String string, char[] cs) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent putExtra16(jni.JString string, jni.JArray cs) => - const $IntentType().fromRef( - _putExtra16(reference, string.reference, cs.reference).object); + /// The returned object must be released after use, by calling the [release] method. + Intent putExtra16( + jni.JString string, + jni.JArray cs, + ) { + return const $IntentType() + .fromRef(_putExtra16(reference, string.reference, cs.reference).object); + } static final _putExtra17 = jniLookup< ffi.NativeFunction< @@ -6004,10 +7602,14 @@ class Intent extends jni.JObject { ffi.Pointer)>(); /// from: public android.content.Intent putExtra(java.lang.String string, int[] is) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent putExtra17(jni.JString string, jni.JArray is0) => - const $IntentType().fromRef( - _putExtra17(reference, string.reference, is0.reference).object); + /// The returned object must be released after use, by calling the [release] method. + Intent putExtra17( + jni.JString string, + jni.JArray is0, + ) { + return const $IntentType().fromRef( + _putExtra17(reference, string.reference, is0.reference).object); + } static final _putExtra18 = jniLookup< ffi.NativeFunction< @@ -6020,10 +7622,14 @@ class Intent extends jni.JObject { ffi.Pointer)>(); /// from: public android.content.Intent putExtra(java.lang.String string, long[] js) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent putExtra18(jni.JString string, jni.JArray js) => - const $IntentType().fromRef( - _putExtra18(reference, string.reference, js.reference).object); + /// The returned object must be released after use, by calling the [release] method. + Intent putExtra18( + jni.JString string, + jni.JArray js, + ) { + return const $IntentType() + .fromRef(_putExtra18(reference, string.reference, js.reference).object); + } static final _putExtra19 = jniLookup< ffi.NativeFunction< @@ -6036,10 +7642,14 @@ class Intent extends jni.JObject { ffi.Pointer)>(); /// from: public android.content.Intent putExtra(java.lang.String string, float[] fs) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent putExtra19(jni.JString string, jni.JArray fs) => - const $IntentType().fromRef( - _putExtra19(reference, string.reference, fs.reference).object); + /// The returned object must be released after use, by calling the [release] method. + Intent putExtra19( + jni.JString string, + jni.JArray fs, + ) { + return const $IntentType() + .fromRef(_putExtra19(reference, string.reference, fs.reference).object); + } static final _putExtra20 = jniLookup< ffi.NativeFunction< @@ -6052,10 +7662,14 @@ class Intent extends jni.JObject { ffi.Pointer)>(); /// from: public android.content.Intent putExtra(java.lang.String string, double[] ds) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent putExtra20(jni.JString string, jni.JArray ds) => - const $IntentType().fromRef( - _putExtra20(reference, string.reference, ds.reference).object); + /// The returned object must be released after use, by calling the [release] method. + Intent putExtra20( + jni.JString string, + jni.JArray ds, + ) { + return const $IntentType() + .fromRef(_putExtra20(reference, string.reference, ds.reference).object); + } static final _putExtra21 = jniLookup< ffi.NativeFunction< @@ -6068,10 +7682,14 @@ class Intent extends jni.JObject { ffi.Pointer)>(); /// from: public android.content.Intent putExtra(java.lang.String string, java.lang.String[] strings) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent putExtra21(jni.JString string, jni.JArray strings) => - const $IntentType().fromRef( - _putExtra21(reference, string.reference, strings.reference).object); + /// The returned object must be released after use, by calling the [release] method. + Intent putExtra21( + jni.JString string, + jni.JArray strings, + ) { + return const $IntentType().fromRef( + _putExtra21(reference, string.reference, strings.reference).object); + } static final _putExtra22 = jniLookup< ffi.NativeFunction< @@ -6084,12 +7702,15 @@ class Intent extends jni.JObject { ffi.Pointer)>(); /// from: public android.content.Intent putExtra(java.lang.String string, java.lang.CharSequence[] charSequences) - /// The returned object must be deleted after use, by calling the `delete` method. + /// The returned object must be released after use, by calling the [release] method. Intent putExtra22( - jni.JString string, jni.JArray charSequences) => - const $IntentType().fromRef( - _putExtra22(reference, string.reference, charSequences.reference) - .object); + jni.JString string, + jni.JArray charSequences, + ) { + return const $IntentType().fromRef( + _putExtra22(reference, string.reference, charSequences.reference) + .object); + } static final _putExtra23 = jniLookup< ffi.NativeFunction< @@ -6102,10 +7723,14 @@ class Intent extends jni.JObject { ffi.Pointer)>(); /// from: public android.content.Intent putExtra(java.lang.String string, android.os.Bundle bundle) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent putExtra23(jni.JString string, jni.JObject bundle) => - const $IntentType().fromRef( - _putExtra23(reference, string.reference, bundle.reference).object); + /// The returned object must be released after use, by calling the [release] method. + Intent putExtra23( + jni.JString string, + jni.JObject bundle, + ) { + return const $IntentType().fromRef( + _putExtra23(reference, string.reference, bundle.reference).object); + } static final _putExtras = jniLookup< ffi.NativeFunction< @@ -6116,9 +7741,13 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public android.content.Intent putExtras(android.content.Intent intent) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent putExtras(Intent intent) => const $IntentType() - .fromRef(_putExtras(reference, intent.reference).object); + /// The returned object must be released after use, by calling the [release] method. + Intent putExtras( + Intent intent, + ) { + return const $IntentType() + .fromRef(_putExtras(reference, intent.reference).object); + } static final _putExtras1 = jniLookup< ffi.NativeFunction< @@ -6129,9 +7758,13 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public android.content.Intent putExtras(android.os.Bundle bundle) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent putExtras1(jni.JObject bundle) => const $IntentType() - .fromRef(_putExtras1(reference, bundle.reference).object); + /// The returned object must be released after use, by calling the [release] method. + Intent putExtras1( + jni.JObject bundle, + ) { + return const $IntentType() + .fromRef(_putExtras1(reference, bundle.reference).object); + } static final _replaceExtras = jniLookup< ffi.NativeFunction< @@ -6142,9 +7775,13 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public android.content.Intent replaceExtras(android.content.Intent intent) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent replaceExtras(Intent intent) => const $IntentType() - .fromRef(_replaceExtras(reference, intent.reference).object); + /// The returned object must be released after use, by calling the [release] method. + Intent replaceExtras( + Intent intent, + ) { + return const $IntentType() + .fromRef(_replaceExtras(reference, intent.reference).object); + } static final _replaceExtras1 = jniLookup< ffi.NativeFunction< @@ -6155,9 +7792,13 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public android.content.Intent replaceExtras(android.os.Bundle bundle) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent replaceExtras1(jni.JObject bundle) => const $IntentType() - .fromRef(_replaceExtras1(reference, bundle.reference).object); + /// The returned object must be released after use, by calling the [release] method. + Intent replaceExtras1( + jni.JObject bundle, + ) { + return const $IntentType() + .fromRef(_replaceExtras1(reference, bundle.reference).object); + } static final _removeExtra = jniLookup< ffi.NativeFunction< @@ -6168,8 +7809,11 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void removeExtra(java.lang.String string) - void removeExtra(jni.JString string) => - _removeExtra(reference, string.reference).check(); + void removeExtra( + jni.JString string, + ) { + return _removeExtra(reference, string.reference).check(); + } static final _setFlags = jniLookup< ffi.NativeFunction< @@ -6178,9 +7822,12 @@ class Intent extends jni.JObject { .asFunction, int)>(); /// from: public android.content.Intent setFlags(int i) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent setFlags(int i) => - const $IntentType().fromRef(_setFlags(reference, i).object); + /// The returned object must be released after use, by calling the [release] method. + Intent setFlags( + int i, + ) { + return const $IntentType().fromRef(_setFlags(reference, i).object); + } static final _addFlags = jniLookup< ffi.NativeFunction< @@ -6189,9 +7836,12 @@ class Intent extends jni.JObject { .asFunction, int)>(); /// from: public android.content.Intent addFlags(int i) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent addFlags(int i) => - const $IntentType().fromRef(_addFlags(reference, i).object); + /// The returned object must be released after use, by calling the [release] method. + Intent addFlags( + int i, + ) { + return const $IntentType().fromRef(_addFlags(reference, i).object); + } static final _removeFlags = jniLookup< ffi.NativeFunction< @@ -6200,7 +7850,11 @@ class Intent extends jni.JObject { .asFunction, int)>(); /// from: public void removeFlags(int i) - void removeFlags(int i) => _removeFlags(reference, i).check(); + void removeFlags( + int i, + ) { + return _removeFlags(reference, i).check(); + } static final _setPackage = jniLookup< ffi.NativeFunction< @@ -6211,9 +7865,13 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public android.content.Intent setPackage(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent setPackage(jni.JString string) => const $IntentType() - .fromRef(_setPackage(reference, string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + Intent setPackage( + jni.JString string, + ) { + return const $IntentType() + .fromRef(_setPackage(reference, string.reference).object); + } static final _setComponent = jniLookup< ffi.NativeFunction< @@ -6224,9 +7882,13 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public android.content.Intent setComponent(android.content.ComponentName componentName) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent setComponent(jni.JObject componentName) => const $IntentType() - .fromRef(_setComponent(reference, componentName.reference).object); + /// The returned object must be released after use, by calling the [release] method. + Intent setComponent( + jni.JObject componentName, + ) { + return const $IntentType() + .fromRef(_setComponent(reference, componentName.reference).object); + } static final _setClassName = jniLookup< ffi.NativeFunction< @@ -6239,10 +7901,14 @@ class Intent extends jni.JObject { ffi.Pointer)>(); /// from: public android.content.Intent setClassName(android.content.Context context, java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent setClassName(Context context, jni.JString string) => - const $IntentType().fromRef( - _setClassName(reference, context.reference, string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + Intent setClassName( + Context context, + jni.JString string, + ) { + return const $IntentType().fromRef( + _setClassName(reference, context.reference, string.reference).object); + } static final _setClassName1 = jniLookup< ffi.NativeFunction< @@ -6255,11 +7921,14 @@ class Intent extends jni.JObject { ffi.Pointer)>(); /// from: public android.content.Intent setClassName(java.lang.String string, java.lang.String string1) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent setClassName1(jni.JString string, jni.JString string1) => - const $IntentType().fromRef( - _setClassName1(reference, string.reference, string1.reference) - .object); + /// The returned object must be released after use, by calling the [release] method. + Intent setClassName1( + jni.JString string, + jni.JString string1, + ) { + return const $IntentType().fromRef( + _setClassName1(reference, string.reference, string1.reference).object); + } static final _setClass = jniLookup< ffi.NativeFunction< @@ -6272,10 +7941,14 @@ class Intent extends jni.JObject { ffi.Pointer)>(); /// from: public android.content.Intent setClass(android.content.Context context, java.lang.Class class) - /// The returned object must be deleted after use, by calling the `delete` method. - Intent setClass(Context context, jni.JObject class0) => - const $IntentType().fromRef( - _setClass(reference, context.reference, class0.reference).object); + /// The returned object must be released after use, by calling the [release] method. + Intent setClass( + Context context, + jni.JObject class0, + ) { + return const $IntentType().fromRef( + _setClass(reference, context.reference, class0.reference).object); + } static final _setSourceBounds = jniLookup< ffi.NativeFunction< @@ -6286,8 +7959,11 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void setSourceBounds(android.graphics.Rect rect) - void setSourceBounds(jni.JObject rect) => - _setSourceBounds(reference, rect.reference).check(); + void setSourceBounds( + jni.JObject rect, + ) { + return _setSourceBounds(reference, rect.reference).check(); + } static final _fillIn = jniLookup< ffi.NativeFunction< @@ -6298,8 +7974,12 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer, int)>(); /// from: public int fillIn(android.content.Intent intent, int i) - int fillIn(Intent intent, int i) => - _fillIn(reference, intent.reference, i).integer; + int fillIn( + Intent intent, + int i, + ) { + return _fillIn(reference, intent.reference, i).integer; + } static final _filterEquals = jniLookup< ffi.NativeFunction< @@ -6310,38 +7990,46 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public boolean filterEquals(android.content.Intent intent) - bool filterEquals(Intent intent) => - _filterEquals(reference, intent.reference).boolean; + bool filterEquals( + Intent intent, + ) { + return _filterEquals(reference, intent.reference).boolean; + } static final _filterHashCode = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Intent__filterHashCode") + ffi + .NativeFunction)>>( + "Intent__filterHashCode") .asFunction)>(); /// from: public int filterHashCode() - int filterHashCode() => _filterHashCode(reference).integer; + int filterHashCode() { + return _filterHashCode(reference).integer; + } static final _toString1 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Intent__toString1") + ffi + .NativeFunction)>>( + "Intent__toString1") .asFunction)>(); /// from: public java.lang.String toString() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JString toString1() => - const jni.JStringType().fromRef(_toString1(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JString toString1() { + return const jni.JStringType().fromRef(_toString1(reference).object); + } static final _toURI = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>("Intent__toURI") + ffi + .NativeFunction)>>( + "Intent__toURI") .asFunction)>(); /// from: public java.lang.String toURI() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JString toURI() => - const jni.JStringType().fromRef(_toURI(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JString toURI() { + return const jni.JStringType().fromRef(_toURI(reference).object); + } static final _toUri = jniLookup< ffi.NativeFunction< @@ -6350,18 +8038,23 @@ class Intent extends jni.JObject { .asFunction, int)>(); /// from: public java.lang.String toUri(int i) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JString toUri(int i) => - const jni.JStringType().fromRef(_toUri(reference, i).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JString toUri( + int i, + ) { + return const jni.JStringType().fromRef(_toUri(reference, i).object); + } static final _describeContents = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Intent__describeContents") + ffi + .NativeFunction)>>( + "Intent__describeContents") .asFunction)>(); /// from: public int describeContents() - int describeContents() => _describeContents(reference).integer; + int describeContents() { + return _describeContents(reference).integer; + } static final _writeToParcel = jniLookup< ffi.NativeFunction< @@ -6372,8 +8065,12 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer, int)>(); /// from: public void writeToParcel(android.os.Parcel parcel, int i) - void writeToParcel(jni.JObject parcel, int i) => - _writeToParcel(reference, parcel.reference, i).check(); + void writeToParcel( + jni.JObject parcel, + int i, + ) { + return _writeToParcel(reference, parcel.reference, i).check(); + } static final _readFromParcel = jniLookup< ffi.NativeFunction< @@ -6384,8 +8081,11 @@ class Intent extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void readFromParcel(android.os.Parcel parcel) - void readFromParcel(jni.JObject parcel) => - _readFromParcel(reference, parcel.reference).check(); + void readFromParcel( + jni.JObject parcel, + ) { + return _readFromParcel(reference, parcel.reference).check(); + } static final _parseIntent = jniLookup< ffi.NativeFunction< @@ -6398,24 +8098,31 @@ class Intent extends jni.JObject { ffi.Pointer)>(); /// from: static public android.content.Intent parseIntent(android.content.res.Resources resources, org.xmlpull.v1.XmlPullParser xmlPullParser, android.util.AttributeSet attributeSet) - /// The returned object must be deleted after use, by calling the `delete` method. - static Intent parseIntent(jni.JObject resources, jni.JObject xmlPullParser, - jni.JObject attributeSet) => - const $IntentType().fromRef(_parseIntent(resources.reference, - xmlPullParser.reference, attributeSet.reference) - .object); + /// The returned object must be released after use, by calling the [release] method. + static Intent parseIntent( + jni.JObject resources, + jni.JObject xmlPullParser, + jni.JObject attributeSet, + ) { + return const $IntentType().fromRef(_parseIntent(resources.reference, + xmlPullParser.reference, attributeSet.reference) + .object); + } static final _normalizeMimeType = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Intent__normalizeMimeType") + ffi + .NativeFunction)>>( + "Intent__normalizeMimeType") .asFunction)>(); /// from: static public java.lang.String normalizeMimeType(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - static jni.JString normalizeMimeType(jni.JString string) => - const jni.JStringType() - .fromRef(_normalizeMimeType(string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + static jni.JString normalizeMimeType( + jni.JString string, + ) { + return const jni.JStringType() + .fromRef(_normalizeMimeType(string.reference).object); + } } class $IntentType extends jni.JObjType { @@ -6426,28 +8133,28 @@ class $IntentType extends jni.JObjType { @override Intent fromRef(jni.JObjectPtr ref) => Intent.fromRef(ref); -} -extension $IntentArray on jni.JArray { - Intent operator [](int index) { - return (elementType as $IntentType) - .fromRef(elementAt(index, jni.JniCallType.objectType).object); - } + @override + jni.JObjType get superType => const jni.JObjectType(); - void operator []=(int index, Intent value) { - (this as jni.JArray)[index] = value; + @override + final superCount = 1; + + @override + int get hashCode => ($IntentType).hashCode; + + @override + bool operator ==(Object other) { + return other.runtimeType == ($IntentType) && other is $IntentType; } } /// from: android.app.Activity class Activity extends jni.JObject { - late final jni.JObjType? _$type; @override - jni.JObjType get $type => _$type ??= type; + late final jni.JObjType $type = type; - Activity.fromRef( - jni.JObjectPtr ref, - ) : super.fromRef(ref); + Activity.fromRef(super.ref) : super.fromRef(); /// The type which includes information such as the signature of this class. static const type = $ActivityType(); @@ -6473,9 +8180,9 @@ class Activity extends jni.JObject { .asFunction(); /// from: static protected final int[] FOCUSED_STATE_SET - /// The returned object must be deleted after use, by calling the `delete` method. - static jni.JArray get FOCUSED_STATE_SET => - const jni.JArrayType(jni.JIntType()) + /// The returned object must be released after use, by calling the [release] method. + static jni.JArray get FOCUSED_STATE_SET => + const jni.JArrayType(jni.jintType()) .fromRef(_get_FOCUSED_STATE_SET().object); /// from: static public final int RESULT_CANCELED @@ -6487,23 +8194,27 @@ class Activity extends jni.JObject { /// from: static public final int RESULT_OK static const RESULT_OK = -1; - static final _ctor = - jniLookup>("Activity__ctor") + static final _new0 = + jniLookup>("Activity__new0") .asFunction(); /// from: public void () - Activity() : super.fromRef(_ctor().object); + /// The returned object must be released after use, by calling the [release] method. + factory Activity() { + return Activity.fromRef(_new0().object); + } static final _getIntent = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__getIntent") + ffi + .NativeFunction)>>( + "Activity__getIntent") .asFunction)>(); /// from: public android.content.Intent getIntent() - /// The returned object must be deleted after use, by calling the `delete` method. - Intent getIntent() => - const $IntentType().fromRef(_getIntent(reference).object); + /// The returned object must be released after use, by calling the [release] method. + Intent getIntent() { + return const $IntentType().fromRef(_getIntent(reference).object); + } static final _setIntent = jniLookup< ffi.NativeFunction< @@ -6514,8 +8225,11 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void setIntent(android.content.Intent intent) - void setIntent(Intent intent) => - _setIntent(reference, intent.reference).check(); + void setIntent( + Intent intent, + ) { + return _setIntent(reference, intent.reference).check(); + } static final _setLocusContext = jniLookup< ffi.NativeFunction< @@ -6528,83 +8242,96 @@ class Activity extends jni.JObject { ffi.Pointer)>(); /// from: public void setLocusContext(android.content.LocusId locusId, android.os.Bundle bundle) - void setLocusContext(jni.JObject locusId, jni.JObject bundle) => - _setLocusContext(reference, locusId.reference, bundle.reference).check(); + void setLocusContext( + jni.JObject locusId, + jni.JObject bundle, + ) { + return _setLocusContext(reference, locusId.reference, bundle.reference) + .check(); + } static final _getApplication = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__getApplication") + ffi + .NativeFunction)>>( + "Activity__getApplication") .asFunction)>(); /// from: public final android.app.Application getApplication() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getApplication() => - const jni.JObjectType().fromRef(_getApplication(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getApplication() { + return const jni.JObjectType().fromRef(_getApplication(reference).object); + } static final _isChild = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__isChild") + ffi + .NativeFunction)>>( + "Activity__isChild") .asFunction)>(); /// from: public final boolean isChild() - bool isChild() => _isChild(reference).boolean; + bool isChild() { + return _isChild(reference).boolean; + } static final _getParent = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__getParent") + ffi + .NativeFunction)>>( + "Activity__getParent") .asFunction)>(); /// from: public final android.app.Activity getParent() - /// The returned object must be deleted after use, by calling the `delete` method. - Activity getParent() => - const $ActivityType().fromRef(_getParent(reference).object); + /// The returned object must be released after use, by calling the [release] method. + Activity getParent() { + return const $ActivityType().fromRef(_getParent(reference).object); + } static final _getWindowManager = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__getWindowManager") + ffi + .NativeFunction)>>( + "Activity__getWindowManager") .asFunction)>(); /// from: public android.view.WindowManager getWindowManager() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getWindowManager() => - const jni.JObjectType().fromRef(_getWindowManager(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getWindowManager() { + return const jni.JObjectType().fromRef(_getWindowManager(reference).object); + } static final _getWindow = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__getWindow") + ffi + .NativeFunction)>>( + "Activity__getWindow") .asFunction)>(); /// from: public android.view.Window getWindow() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getWindow() => - const jni.JObjectType().fromRef(_getWindow(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getWindow() { + return const jni.JObjectType().fromRef(_getWindow(reference).object); + } static final _getLoaderManager = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__getLoaderManager") + ffi + .NativeFunction)>>( + "Activity__getLoaderManager") .asFunction)>(); /// from: public android.app.LoaderManager getLoaderManager() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getLoaderManager() => - const jni.JObjectType().fromRef(_getLoaderManager(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getLoaderManager() { + return const jni.JObjectType().fromRef(_getLoaderManager(reference).object); + } static final _getCurrentFocus = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__getCurrentFocus") + ffi + .NativeFunction)>>( + "Activity__getCurrentFocus") .asFunction)>(); /// from: public android.view.View getCurrentFocus() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getCurrentFocus() => - const jni.JObjectType().fromRef(_getCurrentFocus(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getCurrentFocus() { + return const jni.JObjectType().fromRef(_getCurrentFocus(reference).object); + } static final _attachBaseContext = jniLookup< ffi.NativeFunction< @@ -6615,8 +8342,11 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: protected void attachBaseContext(android.content.Context context) - void attachBaseContext(Context context) => - _attachBaseContext(reference, context.reference).check(); + void attachBaseContext( + Context context, + ) { + return _attachBaseContext(reference, context.reference).check(); + } static final _registerActivityLifecycleCallbacks = jniLookup< ffi.NativeFunction< @@ -6629,10 +8359,12 @@ class Activity extends jni.JObject { /// from: public void registerActivityLifecycleCallbacks(android.app.Application$ActivityLifecycleCallbacks activityLifecycleCallbacks) void registerActivityLifecycleCallbacks( - jni.JObject activityLifecycleCallbacks) => - _registerActivityLifecycleCallbacks( - reference, activityLifecycleCallbacks.reference) - .check(); + jni.JObject activityLifecycleCallbacks, + ) { + return _registerActivityLifecycleCallbacks( + reference, activityLifecycleCallbacks.reference) + .check(); + } static final _unregisterActivityLifecycleCallbacks = jniLookup< ffi.NativeFunction< @@ -6645,10 +8377,12 @@ class Activity extends jni.JObject { /// from: public void unregisterActivityLifecycleCallbacks(android.app.Application$ActivityLifecycleCallbacks activityLifecycleCallbacks) void unregisterActivityLifecycleCallbacks( - jni.JObject activityLifecycleCallbacks) => - _unregisterActivityLifecycleCallbacks( - reference, activityLifecycleCallbacks.reference) - .check(); + jni.JObject activityLifecycleCallbacks, + ) { + return _unregisterActivityLifecycleCallbacks( + reference, activityLifecycleCallbacks.reference) + .check(); + } static final _registerComponentCallbacks = jniLookup< ffi.NativeFunction< @@ -6660,9 +8394,12 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void registerComponentCallbacks(android.content.ComponentCallbacks componentCallbacks) - void registerComponentCallbacks(jni.JObject componentCallbacks) => - _registerComponentCallbacks(reference, componentCallbacks.reference) - .check(); + void registerComponentCallbacks( + jni.JObject componentCallbacks, + ) { + return _registerComponentCallbacks(reference, componentCallbacks.reference) + .check(); + } static final _unregisterComponentCallbacks = jniLookup< ffi.NativeFunction< @@ -6674,9 +8411,13 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void unregisterComponentCallbacks(android.content.ComponentCallbacks componentCallbacks) - void unregisterComponentCallbacks(jni.JObject componentCallbacks) => - _unregisterComponentCallbacks(reference, componentCallbacks.reference) - .check(); + void unregisterComponentCallbacks( + jni.JObject componentCallbacks, + ) { + return _unregisterComponentCallbacks( + reference, componentCallbacks.reference) + .check(); + } static final _onCreate = jniLookup< ffi.NativeFunction< @@ -6687,19 +8428,23 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: protected void onCreate(android.os.Bundle bundle) - void onCreate(jni.JObject bundle) => - _onCreate(reference, bundle.reference).check(); + void onCreate( + jni.JObject bundle, + ) { + return _onCreate(reference, bundle.reference).check(); + } static final _getSplashScreen = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__getSplashScreen") + ffi + .NativeFunction)>>( + "Activity__getSplashScreen") .asFunction)>(); /// from: public final android.window.SplashScreen getSplashScreen() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getSplashScreen() => - const jni.JObjectType().fromRef(_getSplashScreen(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getSplashScreen() { + return const jni.JObjectType().fromRef(_getSplashScreen(reference).object); + } static final _onCreate1 = jniLookup< ffi.NativeFunction< @@ -6712,9 +8457,13 @@ class Activity extends jni.JObject { ffi.Pointer)>(); /// from: public void onCreate(android.os.Bundle bundle, android.os.PersistableBundle persistableBundle) - void onCreate1(jni.JObject bundle, jni.JObject persistableBundle) => - _onCreate1(reference, bundle.reference, persistableBundle.reference) - .check(); + void onCreate1( + jni.JObject bundle, + jni.JObject persistableBundle, + ) { + return _onCreate1(reference, bundle.reference, persistableBundle.reference) + .check(); + } static final _onRestoreInstanceState = jniLookup< ffi.NativeFunction< @@ -6725,8 +8474,11 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: protected void onRestoreInstanceState(android.os.Bundle bundle) - void onRestoreInstanceState(jni.JObject bundle) => - _onRestoreInstanceState(reference, bundle.reference).check(); + void onRestoreInstanceState( + jni.JObject bundle, + ) { + return _onRestoreInstanceState(reference, bundle.reference).check(); + } static final _onRestoreInstanceState1 = jniLookup< ffi.NativeFunction< @@ -6740,10 +8492,13 @@ class Activity extends jni.JObject { /// from: public void onRestoreInstanceState(android.os.Bundle bundle, android.os.PersistableBundle persistableBundle) void onRestoreInstanceState1( - jni.JObject bundle, jni.JObject persistableBundle) => - _onRestoreInstanceState1( - reference, bundle.reference, persistableBundle.reference) - .check(); + jni.JObject bundle, + jni.JObject persistableBundle, + ) { + return _onRestoreInstanceState1( + reference, bundle.reference, persistableBundle.reference) + .check(); + } static final _onPostCreate = jniLookup< ffi.NativeFunction< @@ -6754,8 +8509,11 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: protected void onPostCreate(android.os.Bundle bundle) - void onPostCreate(jni.JObject bundle) => - _onPostCreate(reference, bundle.reference).check(); + void onPostCreate( + jni.JObject bundle, + ) { + return _onPostCreate(reference, bundle.reference).check(); + } static final _onPostCreate1 = jniLookup< ffi.NativeFunction< @@ -6768,54 +8526,69 @@ class Activity extends jni.JObject { ffi.Pointer)>(); /// from: public void onPostCreate(android.os.Bundle bundle, android.os.PersistableBundle persistableBundle) - void onPostCreate1(jni.JObject bundle, jni.JObject persistableBundle) => - _onPostCreate1(reference, bundle.reference, persistableBundle.reference) - .check(); + void onPostCreate1( + jni.JObject bundle, + jni.JObject persistableBundle, + ) { + return _onPostCreate1( + reference, bundle.reference, persistableBundle.reference) + .check(); + } static final _onStart = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__onStart") + ffi + .NativeFunction)>>( + "Activity__onStart") .asFunction)>(); /// from: protected void onStart() - void onStart() => _onStart(reference).check(); + void onStart() { + return _onStart(reference).check(); + } static final _onRestart = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__onRestart") + ffi + .NativeFunction)>>( + "Activity__onRestart") .asFunction)>(); /// from: protected void onRestart() - void onRestart() => _onRestart(reference).check(); + void onRestart() { + return _onRestart(reference).check(); + } static final _onStateNotSaved = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__onStateNotSaved") + ffi + .NativeFunction)>>( + "Activity__onStateNotSaved") .asFunction)>(); /// from: public void onStateNotSaved() - void onStateNotSaved() => _onStateNotSaved(reference).check(); + void onStateNotSaved() { + return _onStateNotSaved(reference).check(); + } static final _onResume = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__onResume") + ffi + .NativeFunction)>>( + "Activity__onResume") .asFunction)>(); /// from: protected void onResume() - void onResume() => _onResume(reference).check(); + void onResume() { + return _onResume(reference).check(); + } static final _onPostResume = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__onPostResume") + ffi + .NativeFunction)>>( + "Activity__onPostResume") .asFunction)>(); /// from: protected void onPostResume() - void onPostResume() => _onPostResume(reference).check(); + void onPostResume() { + return _onPostResume(reference).check(); + } static final _onTopResumedActivityChanged = jniLookup< ffi.NativeFunction< @@ -6824,47 +8597,57 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public void onTopResumedActivityChanged(boolean z) - void onTopResumedActivityChanged(bool z) => - _onTopResumedActivityChanged(reference, z ? 1 : 0).check(); + void onTopResumedActivityChanged( + bool z, + ) { + return _onTopResumedActivityChanged(reference, z ? 1 : 0).check(); + } static final _isVoiceInteraction = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__isVoiceInteraction") + ffi + .NativeFunction)>>( + "Activity__isVoiceInteraction") .asFunction)>(); /// from: public boolean isVoiceInteraction() - bool isVoiceInteraction() => _isVoiceInteraction(reference).boolean; + bool isVoiceInteraction() { + return _isVoiceInteraction(reference).boolean; + } static final _isVoiceInteractionRoot = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__isVoiceInteractionRoot") + ffi + .NativeFunction)>>( + "Activity__isVoiceInteractionRoot") .asFunction)>(); /// from: public boolean isVoiceInteractionRoot() - bool isVoiceInteractionRoot() => _isVoiceInteractionRoot(reference).boolean; + bool isVoiceInteractionRoot() { + return _isVoiceInteractionRoot(reference).boolean; + } static final _getVoiceInteractor = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__getVoiceInteractor") + ffi + .NativeFunction)>>( + "Activity__getVoiceInteractor") .asFunction)>(); /// from: public android.app.VoiceInteractor getVoiceInteractor() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getVoiceInteractor() => - const jni.JObjectType().fromRef(_getVoiceInteractor(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getVoiceInteractor() { + return const jni.JObjectType() + .fromRef(_getVoiceInteractor(reference).object); + } static final _isLocalVoiceInteractionSupported = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>( + ffi + .NativeFunction)>>( "Activity__isLocalVoiceInteractionSupported") .asFunction)>(); /// from: public boolean isLocalVoiceInteractionSupported() - bool isLocalVoiceInteractionSupported() => - _isLocalVoiceInteractionSupported(reference).boolean; + bool isLocalVoiceInteractionSupported() { + return _isLocalVoiceInteractionSupported(reference).boolean; + } static final _startLocalVoiceInteraction = jniLookup< ffi.NativeFunction< @@ -6876,38 +8659,44 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void startLocalVoiceInteraction(android.os.Bundle bundle) - void startLocalVoiceInteraction(jni.JObject bundle) => - _startLocalVoiceInteraction(reference, bundle.reference).check(); + void startLocalVoiceInteraction( + jni.JObject bundle, + ) { + return _startLocalVoiceInteraction(reference, bundle.reference).check(); + } static final _onLocalVoiceInteractionStarted = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>( + ffi + .NativeFunction)>>( "Activity__onLocalVoiceInteractionStarted") .asFunction)>(); /// from: public void onLocalVoiceInteractionStarted() - void onLocalVoiceInteractionStarted() => - _onLocalVoiceInteractionStarted(reference).check(); + void onLocalVoiceInteractionStarted() { + return _onLocalVoiceInteractionStarted(reference).check(); + } static final _onLocalVoiceInteractionStopped = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>( + ffi + .NativeFunction)>>( "Activity__onLocalVoiceInteractionStopped") .asFunction)>(); /// from: public void onLocalVoiceInteractionStopped() - void onLocalVoiceInteractionStopped() => - _onLocalVoiceInteractionStopped(reference).check(); + void onLocalVoiceInteractionStopped() { + return _onLocalVoiceInteractionStopped(reference).check(); + } static final _stopLocalVoiceInteraction = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>( + ffi + .NativeFunction)>>( "Activity__stopLocalVoiceInteraction") .asFunction)>(); /// from: public void stopLocalVoiceInteraction() - void stopLocalVoiceInteraction() => - _stopLocalVoiceInteraction(reference).check(); + void stopLocalVoiceInteraction() { + return _stopLocalVoiceInteraction(reference).check(); + } static final _onNewIntent = jniLookup< ffi.NativeFunction< @@ -6918,8 +8707,11 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: protected void onNewIntent(android.content.Intent intent) - void onNewIntent(Intent intent) => - _onNewIntent(reference, intent.reference).check(); + void onNewIntent( + Intent intent, + ) { + return _onNewIntent(reference, intent.reference).check(); + } static final _onSaveInstanceState = jniLookup< ffi.NativeFunction< @@ -6930,8 +8722,11 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: protected void onSaveInstanceState(android.os.Bundle bundle) - void onSaveInstanceState(jni.JObject bundle) => - _onSaveInstanceState(reference, bundle.reference).check(); + void onSaveInstanceState( + jni.JObject bundle, + ) { + return _onSaveInstanceState(reference, bundle.reference).check(); + } static final _onSaveInstanceState1 = jniLookup< ffi.NativeFunction< @@ -6945,28 +8740,35 @@ class Activity extends jni.JObject { /// from: public void onSaveInstanceState(android.os.Bundle bundle, android.os.PersistableBundle persistableBundle) void onSaveInstanceState1( - jni.JObject bundle, jni.JObject persistableBundle) => - _onSaveInstanceState1( - reference, bundle.reference, persistableBundle.reference) - .check(); + jni.JObject bundle, + jni.JObject persistableBundle, + ) { + return _onSaveInstanceState1( + reference, bundle.reference, persistableBundle.reference) + .check(); + } static final _onPause = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__onPause") + ffi + .NativeFunction)>>( + "Activity__onPause") .asFunction)>(); /// from: protected void onPause() - void onPause() => _onPause(reference).check(); + void onPause() { + return _onPause(reference).check(); + } static final _onUserLeaveHint = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__onUserLeaveHint") + ffi + .NativeFunction)>>( + "Activity__onUserLeaveHint") .asFunction)>(); /// from: protected void onUserLeaveHint() - void onUserLeaveHint() => _onUserLeaveHint(reference).check(); + void onUserLeaveHint() { + return _onUserLeaveHint(reference).check(); + } static final _onCreateThumbnail = jniLookup< ffi.NativeFunction< @@ -6979,19 +8781,26 @@ class Activity extends jni.JObject { ffi.Pointer)>(); /// from: public boolean onCreateThumbnail(android.graphics.Bitmap bitmap, android.graphics.Canvas canvas) - bool onCreateThumbnail(jni.JObject bitmap, jni.JObject canvas) => - _onCreateThumbnail(reference, bitmap.reference, canvas.reference).boolean; + bool onCreateThumbnail( + jni.JObject bitmap, + jni.JObject canvas, + ) { + return _onCreateThumbnail(reference, bitmap.reference, canvas.reference) + .boolean; + } static final _onCreateDescription = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__onCreateDescription") + ffi + .NativeFunction)>>( + "Activity__onCreateDescription") .asFunction)>(); /// from: public java.lang.CharSequence onCreateDescription() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject onCreateDescription() => - const jni.JObjectType().fromRef(_onCreateDescription(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject onCreateDescription() { + return const jni.JObjectType() + .fromRef(_onCreateDescription(reference).object); + } static final _onProvideAssistData = jniLookup< ffi.NativeFunction< @@ -7002,8 +8811,11 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void onProvideAssistData(android.os.Bundle bundle) - void onProvideAssistData(jni.JObject bundle) => - _onProvideAssistData(reference, bundle.reference).check(); + void onProvideAssistData( + jni.JObject bundle, + ) { + return _onProvideAssistData(reference, bundle.reference).check(); + } static final _onProvideAssistContent = jniLookup< ffi.NativeFunction< @@ -7014,8 +8826,11 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void onProvideAssistContent(android.app.assist.AssistContent assistContent) - void onProvideAssistContent(jni.JObject assistContent) => - _onProvideAssistContent(reference, assistContent.reference).check(); + void onProvideAssistContent( + jni.JObject assistContent, + ) { + return _onProvideAssistContent(reference, assistContent.reference).check(); + } static final _onGetDirectActions = jniLookup< ffi.NativeFunction< @@ -7029,10 +8844,13 @@ class Activity extends jni.JObject { /// from: public void onGetDirectActions(android.os.CancellationSignal cancellationSignal, java.util.function.Consumer consumer) void onGetDirectActions( - jni.JObject cancellationSignal, jni.JObject consumer) => - _onGetDirectActions( - reference, cancellationSignal.reference, consumer.reference) - .check(); + jni.JObject cancellationSignal, + jni.JObject consumer, + ) { + return _onGetDirectActions( + reference, cancellationSignal.reference, consumer.reference) + .check(); + } static final _onPerformDirectAction = jniLookup< ffi.NativeFunction< @@ -7051,31 +8869,38 @@ class Activity extends jni.JObject { ffi.Pointer)>(); /// from: public void onPerformDirectAction(java.lang.String string, android.os.Bundle bundle, android.os.CancellationSignal cancellationSignal, java.util.function.Consumer consumer) - void onPerformDirectAction(jni.JString string, jni.JObject bundle, - jni.JObject cancellationSignal, jni.JObject consumer) => - _onPerformDirectAction(reference, string.reference, bundle.reference, - cancellationSignal.reference, consumer.reference) - .check(); + void onPerformDirectAction( + jni.JString string, + jni.JObject bundle, + jni.JObject cancellationSignal, + jni.JObject consumer, + ) { + return _onPerformDirectAction(reference, string.reference, bundle.reference, + cancellationSignal.reference, consumer.reference) + .check(); + } static final _requestShowKeyboardShortcuts = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>( + ffi + .NativeFunction)>>( "Activity__requestShowKeyboardShortcuts") .asFunction)>(); /// from: public final void requestShowKeyboardShortcuts() - void requestShowKeyboardShortcuts() => - _requestShowKeyboardShortcuts(reference).check(); + void requestShowKeyboardShortcuts() { + return _requestShowKeyboardShortcuts(reference).check(); + } static final _dismissKeyboardShortcutsHelper = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>( + ffi + .NativeFunction)>>( "Activity__dismissKeyboardShortcutsHelper") .asFunction)>(); /// from: public final void dismissKeyboardShortcutsHelper() - void dismissKeyboardShortcutsHelper() => - _dismissKeyboardShortcutsHelper(reference).check(); + void dismissKeyboardShortcutsHelper() { + return _dismissKeyboardShortcutsHelper(reference).check(); + } static final _onProvideKeyboardShortcuts = jniLookup< ffi.NativeFunction< @@ -7089,9 +8914,15 @@ class Activity extends jni.JObject { ffi.Pointer, int)>(); /// from: public void onProvideKeyboardShortcuts(java.util.List list, android.view.Menu menu, int i) - void onProvideKeyboardShortcuts(jni.JObject list, jni.JObject menu, int i) => - _onProvideKeyboardShortcuts(reference, list.reference, menu.reference, i) - .check(); + void onProvideKeyboardShortcuts( + jni.JList list, + jni.JObject menu, + int i, + ) { + return _onProvideKeyboardShortcuts( + reference, list.reference, menu.reference, i) + .check(); + } static final _showAssist = jniLookup< ffi.NativeFunction< @@ -7102,35 +8933,44 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public boolean showAssist(android.os.Bundle bundle) - bool showAssist(jni.JObject bundle) => - _showAssist(reference, bundle.reference).boolean; + bool showAssist( + jni.JObject bundle, + ) { + return _showAssist(reference, bundle.reference).boolean; + } static final _onStop = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__onStop") + ffi + .NativeFunction)>>( + "Activity__onStop") .asFunction)>(); /// from: protected void onStop() - void onStop() => _onStop(reference).check(); + void onStop() { + return _onStop(reference).check(); + } static final _onDestroy = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__onDestroy") + ffi + .NativeFunction)>>( + "Activity__onDestroy") .asFunction)>(); /// from: protected void onDestroy() - void onDestroy() => _onDestroy(reference).check(); + void onDestroy() { + return _onDestroy(reference).check(); + } static final _reportFullyDrawn = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__reportFullyDrawn") + ffi + .NativeFunction)>>( + "Activity__reportFullyDrawn") .asFunction)>(); /// from: public void reportFullyDrawn() - void reportFullyDrawn() => _reportFullyDrawn(reference).check(); + void reportFullyDrawn() { + return _reportFullyDrawn(reference).check(); + } static final _onMultiWindowModeChanged = jniLookup< ffi.NativeFunction< @@ -7141,9 +8981,14 @@ class Activity extends jni.JObject { ffi.Pointer, int, ffi.Pointer)>(); /// from: public void onMultiWindowModeChanged(boolean z, android.content.res.Configuration configuration) - void onMultiWindowModeChanged(bool z, jni.JObject configuration) => - _onMultiWindowModeChanged(reference, z ? 1 : 0, configuration.reference) - .check(); + void onMultiWindowModeChanged( + bool z, + jni.JObject configuration, + ) { + return _onMultiWindowModeChanged( + reference, z ? 1 : 0, configuration.reference) + .check(); + } static final _onMultiWindowModeChanged1 = jniLookup< ffi.NativeFunction< @@ -7152,17 +8997,22 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public void onMultiWindowModeChanged(boolean z) - void onMultiWindowModeChanged1(bool z) => - _onMultiWindowModeChanged1(reference, z ? 1 : 0).check(); + void onMultiWindowModeChanged1( + bool z, + ) { + return _onMultiWindowModeChanged1(reference, z ? 1 : 0).check(); + } static final _isInMultiWindowMode = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__isInMultiWindowMode") + ffi + .NativeFunction)>>( + "Activity__isInMultiWindowMode") .asFunction)>(); /// from: public boolean isInMultiWindowMode() - bool isInMultiWindowMode() => _isInMultiWindowMode(reference).boolean; + bool isInMultiWindowMode() { + return _isInMultiWindowMode(reference).boolean; + } static final _onPictureInPictureModeChanged = jniLookup< ffi.NativeFunction< @@ -7174,10 +9024,14 @@ class Activity extends jni.JObject { ffi.Pointer, int, ffi.Pointer)>(); /// from: public void onPictureInPictureModeChanged(boolean z, android.content.res.Configuration configuration) - void onPictureInPictureModeChanged(bool z, jni.JObject configuration) => - _onPictureInPictureModeChanged( - reference, z ? 1 : 0, configuration.reference) - .check(); + void onPictureInPictureModeChanged( + bool z, + jni.JObject configuration, + ) { + return _onPictureInPictureModeChanged( + reference, z ? 1 : 0, configuration.reference) + .check(); + } static final _onPictureInPictureUiStateChanged = jniLookup< ffi.NativeFunction< @@ -7189,10 +9043,13 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void onPictureInPictureUiStateChanged(android.app.PictureInPictureUiState pictureInPictureUiState) - void onPictureInPictureUiStateChanged(jni.JObject pictureInPictureUiState) => - _onPictureInPictureUiStateChanged( - reference, pictureInPictureUiState.reference) - .check(); + void onPictureInPictureUiStateChanged( + jni.JObject pictureInPictureUiState, + ) { + return _onPictureInPictureUiStateChanged( + reference, pictureInPictureUiState.reference) + .check(); + } static final _onPictureInPictureModeChanged1 = jniLookup< ffi.NativeFunction< @@ -7201,28 +9058,33 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public void onPictureInPictureModeChanged(boolean z) - void onPictureInPictureModeChanged1(bool z) => - _onPictureInPictureModeChanged1(reference, z ? 1 : 0).check(); + void onPictureInPictureModeChanged1( + bool z, + ) { + return _onPictureInPictureModeChanged1(reference, z ? 1 : 0).check(); + } static final _isInPictureInPictureMode = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__isInPictureInPictureMode") + ffi + .NativeFunction)>>( + "Activity__isInPictureInPictureMode") .asFunction)>(); /// from: public boolean isInPictureInPictureMode() - bool isInPictureInPictureMode() => - _isInPictureInPictureMode(reference).boolean; + bool isInPictureInPictureMode() { + return _isInPictureInPictureMode(reference).boolean; + } static final _enterPictureInPictureMode = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>( + ffi + .NativeFunction)>>( "Activity__enterPictureInPictureMode") .asFunction)>(); /// from: public void enterPictureInPictureMode() - void enterPictureInPictureMode() => - _enterPictureInPictureMode(reference).check(); + void enterPictureInPictureMode() { + return _enterPictureInPictureMode(reference).check(); + } static final _enterPictureInPictureMode1 = jniLookup< ffi.NativeFunction< @@ -7234,9 +9096,13 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public boolean enterPictureInPictureMode(android.app.PictureInPictureParams pictureInPictureParams) - bool enterPictureInPictureMode1(jni.JObject pictureInPictureParams) => - _enterPictureInPictureMode1(reference, pictureInPictureParams.reference) - .boolean; + bool enterPictureInPictureMode1( + jni.JObject pictureInPictureParams, + ) { + return _enterPictureInPictureMode1( + reference, pictureInPictureParams.reference) + .boolean; + } static final _setPictureInPictureParams = jniLookup< ffi.NativeFunction< @@ -7248,29 +9114,35 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void setPictureInPictureParams(android.app.PictureInPictureParams pictureInPictureParams) - void setPictureInPictureParams(jni.JObject pictureInPictureParams) => - _setPictureInPictureParams(reference, pictureInPictureParams.reference) - .check(); + void setPictureInPictureParams( + jni.JObject pictureInPictureParams, + ) { + return _setPictureInPictureParams( + reference, pictureInPictureParams.reference) + .check(); + } static final _getMaxNumPictureInPictureActions = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>( + ffi + .NativeFunction)>>( "Activity__getMaxNumPictureInPictureActions") .asFunction)>(); /// from: public int getMaxNumPictureInPictureActions() - int getMaxNumPictureInPictureActions() => - _getMaxNumPictureInPictureActions(reference).integer; + int getMaxNumPictureInPictureActions() { + return _getMaxNumPictureInPictureActions(reference).integer; + } static final _onPictureInPictureRequested = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>( + ffi + .NativeFunction)>>( "Activity__onPictureInPictureRequested") .asFunction)>(); /// from: public boolean onPictureInPictureRequested() - bool onPictureInPictureRequested() => - _onPictureInPictureRequested(reference).boolean; + bool onPictureInPictureRequested() { + return _onPictureInPictureRequested(reference).boolean; + } static final _setShouldDockBigOverlays = jniLookup< ffi.NativeFunction< @@ -7279,17 +9151,22 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public void setShouldDockBigOverlays(boolean z) - void setShouldDockBigOverlays(bool z) => - _setShouldDockBigOverlays(reference, z ? 1 : 0).check(); + void setShouldDockBigOverlays( + bool z, + ) { + return _setShouldDockBigOverlays(reference, z ? 1 : 0).check(); + } static final _shouldDockBigOverlays = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__shouldDockBigOverlays") + ffi + .NativeFunction)>>( + "Activity__shouldDockBigOverlays") .asFunction)>(); /// from: public boolean shouldDockBigOverlays() - bool shouldDockBigOverlays() => _shouldDockBigOverlays(reference).boolean; + bool shouldDockBigOverlays() { + return _shouldDockBigOverlays(reference).boolean; + } static final _onConfigurationChanged = jniLookup< ffi.NativeFunction< @@ -7300,49 +9177,59 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void onConfigurationChanged(android.content.res.Configuration configuration) - void onConfigurationChanged(jni.JObject configuration) => - _onConfigurationChanged(reference, configuration.reference).check(); + void onConfigurationChanged( + jni.JObject configuration, + ) { + return _onConfigurationChanged(reference, configuration.reference).check(); + } static final _getChangingConfigurations = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>( + ffi + .NativeFunction)>>( "Activity__getChangingConfigurations") .asFunction)>(); /// from: public int getChangingConfigurations() - int getChangingConfigurations() => - _getChangingConfigurations(reference).integer; + int getChangingConfigurations() { + return _getChangingConfigurations(reference).integer; + } static final _getLastNonConfigurationInstance = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>( + ffi + .NativeFunction)>>( "Activity__getLastNonConfigurationInstance") .asFunction)>(); /// from: public java.lang.Object getLastNonConfigurationInstance() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getLastNonConfigurationInstance() => const jni.JObjectType() - .fromRef(_getLastNonConfigurationInstance(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getLastNonConfigurationInstance() { + return const jni.JObjectType() + .fromRef(_getLastNonConfigurationInstance(reference).object); + } static final _onRetainNonConfigurationInstance = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>( + ffi + .NativeFunction)>>( "Activity__onRetainNonConfigurationInstance") .asFunction)>(); /// from: public java.lang.Object onRetainNonConfigurationInstance() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject onRetainNonConfigurationInstance() => const jni.JObjectType() - .fromRef(_onRetainNonConfigurationInstance(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject onRetainNonConfigurationInstance() { + return const jni.JObjectType() + .fromRef(_onRetainNonConfigurationInstance(reference).object); + } static final _onLowMemory = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__onLowMemory") + ffi + .NativeFunction)>>( + "Activity__onLowMemory") .asFunction)>(); /// from: public void onLowMemory() - void onLowMemory() => _onLowMemory(reference).check(); + void onLowMemory() { + return _onLowMemory(reference).check(); + } static final _onTrimMemory = jniLookup< ffi.NativeFunction< @@ -7351,18 +9238,24 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public void onTrimMemory(int i) - void onTrimMemory(int i) => _onTrimMemory(reference, i).check(); + void onTrimMemory( + int i, + ) { + return _onTrimMemory(reference, i).check(); + } static final _getFragmentManager = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__getFragmentManager") + ffi + .NativeFunction)>>( + "Activity__getFragmentManager") .asFunction)>(); /// from: public android.app.FragmentManager getFragmentManager() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getFragmentManager() => - const jni.JObjectType().fromRef(_getFragmentManager(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getFragmentManager() { + return const jni.JObjectType() + .fromRef(_getFragmentManager(reference).object); + } static final _onAttachFragment = jniLookup< ffi.NativeFunction< @@ -7373,8 +9266,11 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void onAttachFragment(android.app.Fragment fragment) - void onAttachFragment(jni.JObject fragment) => - _onAttachFragment(reference, fragment.reference).check(); + void onAttachFragment( + jni.JObject fragment, + ) { + return _onAttachFragment(reference, fragment.reference).check(); + } static final _managedQuery = jniLookup< ffi.NativeFunction< @@ -7395,21 +9291,23 @@ class Activity extends jni.JObject { ffi.Pointer)>(); /// from: public final android.database.Cursor managedQuery(android.net.Uri uri, java.lang.String[] strings, java.lang.String string, java.lang.String[] strings1, java.lang.String string1) - /// The returned object must be deleted after use, by calling the `delete` method. + /// The returned object must be released after use, by calling the [release] method. jni.JObject managedQuery( - jni.JObject uri, - jni.JArray strings, - jni.JString string, - jni.JArray strings1, - jni.JString string1) => - const jni.JObjectType().fromRef(_managedQuery( - reference, - uri.reference, - strings.reference, - string.reference, - strings1.reference, - string1.reference) - .object); + jni.JObject uri, + jni.JArray strings, + jni.JString string, + jni.JArray strings1, + jni.JString string1, + ) { + return const jni.JObjectType().fromRef(_managedQuery( + reference, + uri.reference, + strings.reference, + string.reference, + strings1.reference, + string1.reference) + .object); + } static final _startManagingCursor = jniLookup< ffi.NativeFunction< @@ -7420,8 +9318,11 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void startManagingCursor(android.database.Cursor cursor) - void startManagingCursor(jni.JObject cursor) => - _startManagingCursor(reference, cursor.reference).check(); + void startManagingCursor( + jni.JObject cursor, + ) { + return _startManagingCursor(reference, cursor.reference).check(); + } static final _stopManagingCursor = jniLookup< ffi.NativeFunction< @@ -7432,8 +9333,11 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void stopManagingCursor(android.database.Cursor cursor) - void stopManagingCursor(jni.JObject cursor) => - _stopManagingCursor(reference, cursor.reference).check(); + void stopManagingCursor( + jni.JObject cursor, + ) { + return _stopManagingCursor(reference, cursor.reference).check(); + } static final _findViewById = jniLookup< ffi.NativeFunction< @@ -7442,9 +9346,13 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public T findViewById(int i) - /// The returned object must be deleted after use, by calling the `delete` method. - T findViewById(jni.JObjType $T, int i) => - $T.fromRef(_findViewById(reference, i).object); + /// The returned object must be released after use, by calling the [release] method. + $T findViewById<$T extends jni.JObject>( + int i, { + required jni.JObjType<$T> T, + }) { + return T.fromRef(_findViewById(reference, i).object); + } static final _requireViewById = jniLookup< ffi.NativeFunction< @@ -7453,20 +9361,25 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public final T requireViewById(int i) - /// The returned object must be deleted after use, by calling the `delete` method. - T requireViewById(jni.JObjType $T, int i) => - $T.fromRef(_requireViewById(reference, i).object); + /// The returned object must be released after use, by calling the [release] method. + $T requireViewById<$T extends jni.JObject>( + int i, { + required jni.JObjType<$T> T, + }) { + return T.fromRef(_requireViewById(reference, i).object); + } static final _getActionBar = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__getActionBar") + ffi + .NativeFunction)>>( + "Activity__getActionBar") .asFunction)>(); /// from: public android.app.ActionBar getActionBar() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getActionBar() => - const jni.JObjectType().fromRef(_getActionBar(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getActionBar() { + return const jni.JObjectType().fromRef(_getActionBar(reference).object); + } static final _setActionBar = jniLookup< ffi.NativeFunction< @@ -7477,8 +9390,11 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void setActionBar(android.widget.Toolbar toolbar) - void setActionBar(jni.JObject toolbar) => - _setActionBar(reference, toolbar.reference).check(); + void setActionBar( + jni.JObject toolbar, + ) { + return _setActionBar(reference, toolbar.reference).check(); + } static final _setContentView = jniLookup< ffi.NativeFunction< @@ -7487,7 +9403,11 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public void setContentView(int i) - void setContentView(int i) => _setContentView(reference, i).check(); + void setContentView( + int i, + ) { + return _setContentView(reference, i).check(); + } static final _setContentView1 = jniLookup< ffi.NativeFunction< @@ -7498,8 +9418,11 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void setContentView(android.view.View view) - void setContentView1(jni.JObject view) => - _setContentView1(reference, view.reference).check(); + void setContentView1( + jni.JObject view, + ) { + return _setContentView1(reference, view.reference).check(); + } static final _setContentView2 = jniLookup< ffi.NativeFunction< @@ -7512,9 +9435,13 @@ class Activity extends jni.JObject { ffi.Pointer)>(); /// from: public void setContentView(android.view.View view, android.view.ViewGroup$LayoutParams layoutParams) - void setContentView2(jni.JObject view, jni.JObject layoutParams) => - _setContentView2(reference, view.reference, layoutParams.reference) - .check(); + void setContentView2( + jni.JObject view, + jni.JObject layoutParams, + ) { + return _setContentView2(reference, view.reference, layoutParams.reference) + .check(); + } static final _addContentView = jniLookup< ffi.NativeFunction< @@ -7527,20 +9454,26 @@ class Activity extends jni.JObject { ffi.Pointer)>(); /// from: public void addContentView(android.view.View view, android.view.ViewGroup$LayoutParams layoutParams) - void addContentView(jni.JObject view, jni.JObject layoutParams) => - _addContentView(reference, view.reference, layoutParams.reference) - .check(); + void addContentView( + jni.JObject view, + jni.JObject layoutParams, + ) { + return _addContentView(reference, view.reference, layoutParams.reference) + .check(); + } static final _getContentTransitionManager = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>( + ffi + .NativeFunction)>>( "Activity__getContentTransitionManager") .asFunction)>(); /// from: public android.transition.TransitionManager getContentTransitionManager() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getContentTransitionManager() => const jni.JObjectType() - .fromRef(_getContentTransitionManager(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getContentTransitionManager() { + return const jni.JObjectType() + .fromRef(_getContentTransitionManager(reference).object); + } static final _setContentTransitionManager = jniLookup< ffi.NativeFunction< @@ -7552,20 +9485,24 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void setContentTransitionManager(android.transition.TransitionManager transitionManager) - void setContentTransitionManager(jni.JObject transitionManager) => - _setContentTransitionManager(reference, transitionManager.reference) - .check(); + void setContentTransitionManager( + jni.JObject transitionManager, + ) { + return _setContentTransitionManager(reference, transitionManager.reference) + .check(); + } static final _getContentScene = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__getContentScene") + ffi + .NativeFunction)>>( + "Activity__getContentScene") .asFunction)>(); /// from: public android.transition.Scene getContentScene() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getContentScene() => - const jni.JObjectType().fromRef(_getContentScene(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getContentScene() { + return const jni.JObjectType().fromRef(_getContentScene(reference).object); + } static final _setFinishOnTouchOutside = jniLookup< ffi.NativeFunction< @@ -7574,8 +9511,11 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public void setFinishOnTouchOutside(boolean z) - void setFinishOnTouchOutside(bool z) => - _setFinishOnTouchOutside(reference, z ? 1 : 0).check(); + void setFinishOnTouchOutside( + bool z, + ) { + return _setFinishOnTouchOutside(reference, z ? 1 : 0).check(); + } static final _setDefaultKeyMode = jniLookup< ffi.NativeFunction< @@ -7584,7 +9524,11 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public final void setDefaultKeyMode(int i) - void setDefaultKeyMode(int i) => _setDefaultKeyMode(reference, i).check(); + void setDefaultKeyMode( + int i, + ) { + return _setDefaultKeyMode(reference, i).check(); + } static final _onKeyDown = jniLookup< ffi.NativeFunction< @@ -7595,8 +9539,12 @@ class Activity extends jni.JObject { ffi.Pointer, int, ffi.Pointer)>(); /// from: public boolean onKeyDown(int i, android.view.KeyEvent keyEvent) - bool onKeyDown(int i, jni.JObject keyEvent) => - _onKeyDown(reference, i, keyEvent.reference).boolean; + bool onKeyDown( + int i, + jni.JObject keyEvent, + ) { + return _onKeyDown(reference, i, keyEvent.reference).boolean; + } static final _onKeyLongPress = jniLookup< ffi.NativeFunction< @@ -7607,8 +9555,12 @@ class Activity extends jni.JObject { ffi.Pointer, int, ffi.Pointer)>(); /// from: public boolean onKeyLongPress(int i, android.view.KeyEvent keyEvent) - bool onKeyLongPress(int i, jni.JObject keyEvent) => - _onKeyLongPress(reference, i, keyEvent.reference).boolean; + bool onKeyLongPress( + int i, + jni.JObject keyEvent, + ) { + return _onKeyLongPress(reference, i, keyEvent.reference).boolean; + } static final _onKeyUp = jniLookup< ffi.NativeFunction< @@ -7619,8 +9571,12 @@ class Activity extends jni.JObject { ffi.Pointer, int, ffi.Pointer)>(); /// from: public boolean onKeyUp(int i, android.view.KeyEvent keyEvent) - bool onKeyUp(int i, jni.JObject keyEvent) => - _onKeyUp(reference, i, keyEvent.reference).boolean; + bool onKeyUp( + int i, + jni.JObject keyEvent, + ) { + return _onKeyUp(reference, i, keyEvent.reference).boolean; + } static final _onKeyMultiple = jniLookup< ffi.NativeFunction< @@ -7631,17 +9587,24 @@ class Activity extends jni.JObject { ffi.Pointer, int, int, ffi.Pointer)>(); /// from: public boolean onKeyMultiple(int i, int i1, android.view.KeyEvent keyEvent) - bool onKeyMultiple(int i, int i1, jni.JObject keyEvent) => - _onKeyMultiple(reference, i, i1, keyEvent.reference).boolean; + bool onKeyMultiple( + int i, + int i1, + jni.JObject keyEvent, + ) { + return _onKeyMultiple(reference, i, i1, keyEvent.reference).boolean; + } static final _onBackPressed = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__onBackPressed") + ffi + .NativeFunction)>>( + "Activity__onBackPressed") .asFunction)>(); /// from: public void onBackPressed() - void onBackPressed() => _onBackPressed(reference).check(); + void onBackPressed() { + return _onBackPressed(reference).check(); + } static final _onKeyShortcut = jniLookup< ffi.NativeFunction< @@ -7652,8 +9615,12 @@ class Activity extends jni.JObject { ffi.Pointer, int, ffi.Pointer)>(); /// from: public boolean onKeyShortcut(int i, android.view.KeyEvent keyEvent) - bool onKeyShortcut(int i, jni.JObject keyEvent) => - _onKeyShortcut(reference, i, keyEvent.reference).boolean; + bool onKeyShortcut( + int i, + jni.JObject keyEvent, + ) { + return _onKeyShortcut(reference, i, keyEvent.reference).boolean; + } static final _onTouchEvent = jniLookup< ffi.NativeFunction< @@ -7664,8 +9631,11 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public boolean onTouchEvent(android.view.MotionEvent motionEvent) - bool onTouchEvent(jni.JObject motionEvent) => - _onTouchEvent(reference, motionEvent.reference).boolean; + bool onTouchEvent( + jni.JObject motionEvent, + ) { + return _onTouchEvent(reference, motionEvent.reference).boolean; + } static final _onTrackballEvent = jniLookup< ffi.NativeFunction< @@ -7676,8 +9646,11 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public boolean onTrackballEvent(android.view.MotionEvent motionEvent) - bool onTrackballEvent(jni.JObject motionEvent) => - _onTrackballEvent(reference, motionEvent.reference).boolean; + bool onTrackballEvent( + jni.JObject motionEvent, + ) { + return _onTrackballEvent(reference, motionEvent.reference).boolean; + } static final _onGenericMotionEvent = jniLookup< ffi.NativeFunction< @@ -7688,17 +9661,22 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public boolean onGenericMotionEvent(android.view.MotionEvent motionEvent) - bool onGenericMotionEvent(jni.JObject motionEvent) => - _onGenericMotionEvent(reference, motionEvent.reference).boolean; + bool onGenericMotionEvent( + jni.JObject motionEvent, + ) { + return _onGenericMotionEvent(reference, motionEvent.reference).boolean; + } static final _onUserInteraction = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__onUserInteraction") + ffi + .NativeFunction)>>( + "Activity__onUserInteraction") .asFunction)>(); /// from: public void onUserInteraction() - void onUserInteraction() => _onUserInteraction(reference).check(); + void onUserInteraction() { + return _onUserInteraction(reference).check(); + } static final _onWindowAttributesChanged = jniLookup< ffi.NativeFunction< @@ -7710,17 +9688,23 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void onWindowAttributesChanged(android.view.WindowManager$LayoutParams layoutParams) - void onWindowAttributesChanged(jni.JObject layoutParams) => - _onWindowAttributesChanged(reference, layoutParams.reference).check(); + void onWindowAttributesChanged( + jni.JObject layoutParams, + ) { + return _onWindowAttributesChanged(reference, layoutParams.reference) + .check(); + } static final _onContentChanged = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__onContentChanged") + ffi + .NativeFunction)>>( + "Activity__onContentChanged") .asFunction)>(); /// from: public void onContentChanged() - void onContentChanged() => _onContentChanged(reference).check(); + void onContentChanged() { + return _onContentChanged(reference).check(); + } static final _onWindowFocusChanged = jniLookup< ffi.NativeFunction< @@ -7729,35 +9713,44 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public void onWindowFocusChanged(boolean z) - void onWindowFocusChanged(bool z) => - _onWindowFocusChanged(reference, z ? 1 : 0).check(); + void onWindowFocusChanged( + bool z, + ) { + return _onWindowFocusChanged(reference, z ? 1 : 0).check(); + } static final _onAttachedToWindow = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__onAttachedToWindow") + ffi + .NativeFunction)>>( + "Activity__onAttachedToWindow") .asFunction)>(); /// from: public void onAttachedToWindow() - void onAttachedToWindow() => _onAttachedToWindow(reference).check(); + void onAttachedToWindow() { + return _onAttachedToWindow(reference).check(); + } static final _onDetachedFromWindow = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__onDetachedFromWindow") + ffi + .NativeFunction)>>( + "Activity__onDetachedFromWindow") .asFunction)>(); /// from: public void onDetachedFromWindow() - void onDetachedFromWindow() => _onDetachedFromWindow(reference).check(); + void onDetachedFromWindow() { + return _onDetachedFromWindow(reference).check(); + } static final _hasWindowFocus = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__hasWindowFocus") + ffi + .NativeFunction)>>( + "Activity__hasWindowFocus") .asFunction)>(); /// from: public boolean hasWindowFocus() - bool hasWindowFocus() => _hasWindowFocus(reference).boolean; + bool hasWindowFocus() { + return _hasWindowFocus(reference).boolean; + } static final _dispatchKeyEvent = jniLookup< ffi.NativeFunction< @@ -7768,8 +9761,11 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public boolean dispatchKeyEvent(android.view.KeyEvent keyEvent) - bool dispatchKeyEvent(jni.JObject keyEvent) => - _dispatchKeyEvent(reference, keyEvent.reference).boolean; + bool dispatchKeyEvent( + jni.JObject keyEvent, + ) { + return _dispatchKeyEvent(reference, keyEvent.reference).boolean; + } static final _dispatchKeyShortcutEvent = jniLookup< ffi.NativeFunction< @@ -7780,8 +9776,11 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public boolean dispatchKeyShortcutEvent(android.view.KeyEvent keyEvent) - bool dispatchKeyShortcutEvent(jni.JObject keyEvent) => - _dispatchKeyShortcutEvent(reference, keyEvent.reference).boolean; + bool dispatchKeyShortcutEvent( + jni.JObject keyEvent, + ) { + return _dispatchKeyShortcutEvent(reference, keyEvent.reference).boolean; + } static final _dispatchTouchEvent = jniLookup< ffi.NativeFunction< @@ -7792,8 +9791,11 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public boolean dispatchTouchEvent(android.view.MotionEvent motionEvent) - bool dispatchTouchEvent(jni.JObject motionEvent) => - _dispatchTouchEvent(reference, motionEvent.reference).boolean; + bool dispatchTouchEvent( + jni.JObject motionEvent, + ) { + return _dispatchTouchEvent(reference, motionEvent.reference).boolean; + } static final _dispatchTrackballEvent = jniLookup< ffi.NativeFunction< @@ -7804,8 +9806,11 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public boolean dispatchTrackballEvent(android.view.MotionEvent motionEvent) - bool dispatchTrackballEvent(jni.JObject motionEvent) => - _dispatchTrackballEvent(reference, motionEvent.reference).boolean; + bool dispatchTrackballEvent( + jni.JObject motionEvent, + ) { + return _dispatchTrackballEvent(reference, motionEvent.reference).boolean; + } static final _dispatchGenericMotionEvent = jniLookup< ffi.NativeFunction< @@ -7817,8 +9822,12 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public boolean dispatchGenericMotionEvent(android.view.MotionEvent motionEvent) - bool dispatchGenericMotionEvent(jni.JObject motionEvent) => - _dispatchGenericMotionEvent(reference, motionEvent.reference).boolean; + bool dispatchGenericMotionEvent( + jni.JObject motionEvent, + ) { + return _dispatchGenericMotionEvent(reference, motionEvent.reference) + .boolean; + } static final _dispatchPopulateAccessibilityEvent = jniLookup< ffi.NativeFunction< @@ -7830,10 +9839,13 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent accessibilityEvent) - bool dispatchPopulateAccessibilityEvent(jni.JObject accessibilityEvent) => - _dispatchPopulateAccessibilityEvent( - reference, accessibilityEvent.reference) - .boolean; + bool dispatchPopulateAccessibilityEvent( + jni.JObject accessibilityEvent, + ) { + return _dispatchPopulateAccessibilityEvent( + reference, accessibilityEvent.reference) + .boolean; + } static final _onCreatePanelView = jniLookup< ffi.NativeFunction< @@ -7842,9 +9854,13 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public android.view.View onCreatePanelView(int i) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject onCreatePanelView(int i) => - const jni.JObjectType().fromRef(_onCreatePanelView(reference, i).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject onCreatePanelView( + int i, + ) { + return const jni.JObjectType() + .fromRef(_onCreatePanelView(reference, i).object); + } static final _onCreatePanelMenu = jniLookup< ffi.NativeFunction< @@ -7855,8 +9871,12 @@ class Activity extends jni.JObject { ffi.Pointer, int, ffi.Pointer)>(); /// from: public boolean onCreatePanelMenu(int i, android.view.Menu menu) - bool onCreatePanelMenu(int i, jni.JObject menu) => - _onCreatePanelMenu(reference, i, menu.reference).boolean; + bool onCreatePanelMenu( + int i, + jni.JObject menu, + ) { + return _onCreatePanelMenu(reference, i, menu.reference).boolean; + } static final _onPreparePanel = jniLookup< ffi.NativeFunction< @@ -7870,8 +9890,14 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public boolean onPreparePanel(int i, android.view.View view, android.view.Menu menu) - bool onPreparePanel(int i, jni.JObject view, jni.JObject menu) => - _onPreparePanel(reference, i, view.reference, menu.reference).boolean; + bool onPreparePanel( + int i, + jni.JObject view, + jni.JObject menu, + ) { + return _onPreparePanel(reference, i, view.reference, menu.reference) + .boolean; + } static final _onMenuOpened = jniLookup< ffi.NativeFunction< @@ -7882,8 +9908,12 @@ class Activity extends jni.JObject { ffi.Pointer, int, ffi.Pointer)>(); /// from: public boolean onMenuOpened(int i, android.view.Menu menu) - bool onMenuOpened(int i, jni.JObject menu) => - _onMenuOpened(reference, i, menu.reference).boolean; + bool onMenuOpened( + int i, + jni.JObject menu, + ) { + return _onMenuOpened(reference, i, menu.reference).boolean; + } static final _onMenuItemSelected = jniLookup< ffi.NativeFunction< @@ -7894,8 +9924,12 @@ class Activity extends jni.JObject { ffi.Pointer, int, ffi.Pointer)>(); /// from: public boolean onMenuItemSelected(int i, android.view.MenuItem menuItem) - bool onMenuItemSelected(int i, jni.JObject menuItem) => - _onMenuItemSelected(reference, i, menuItem.reference).boolean; + bool onMenuItemSelected( + int i, + jni.JObject menuItem, + ) { + return _onMenuItemSelected(reference, i, menuItem.reference).boolean; + } static final _onPanelClosed = jniLookup< ffi.NativeFunction< @@ -7906,17 +9940,23 @@ class Activity extends jni.JObject { ffi.Pointer, int, ffi.Pointer)>(); /// from: public void onPanelClosed(int i, android.view.Menu menu) - void onPanelClosed(int i, jni.JObject menu) => - _onPanelClosed(reference, i, menu.reference).check(); + void onPanelClosed( + int i, + jni.JObject menu, + ) { + return _onPanelClosed(reference, i, menu.reference).check(); + } static final _invalidateOptionsMenu = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__invalidateOptionsMenu") + ffi + .NativeFunction)>>( + "Activity__invalidateOptionsMenu") .asFunction)>(); /// from: public void invalidateOptionsMenu() - void invalidateOptionsMenu() => _invalidateOptionsMenu(reference).check(); + void invalidateOptionsMenu() { + return _invalidateOptionsMenu(reference).check(); + } static final _onCreateOptionsMenu = jniLookup< ffi.NativeFunction< @@ -7927,8 +9967,11 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public boolean onCreateOptionsMenu(android.view.Menu menu) - bool onCreateOptionsMenu(jni.JObject menu) => - _onCreateOptionsMenu(reference, menu.reference).boolean; + bool onCreateOptionsMenu( + jni.JObject menu, + ) { + return _onCreateOptionsMenu(reference, menu.reference).boolean; + } static final _onPrepareOptionsMenu = jniLookup< ffi.NativeFunction< @@ -7939,8 +9982,11 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public boolean onPrepareOptionsMenu(android.view.Menu menu) - bool onPrepareOptionsMenu(jni.JObject menu) => - _onPrepareOptionsMenu(reference, menu.reference).boolean; + bool onPrepareOptionsMenu( + jni.JObject menu, + ) { + return _onPrepareOptionsMenu(reference, menu.reference).boolean; + } static final _onOptionsItemSelected = jniLookup< ffi.NativeFunction< @@ -7951,17 +9997,22 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public boolean onOptionsItemSelected(android.view.MenuItem menuItem) - bool onOptionsItemSelected(jni.JObject menuItem) => - _onOptionsItemSelected(reference, menuItem.reference).boolean; + bool onOptionsItemSelected( + jni.JObject menuItem, + ) { + return _onOptionsItemSelected(reference, menuItem.reference).boolean; + } static final _onNavigateUp = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__onNavigateUp") + ffi + .NativeFunction)>>( + "Activity__onNavigateUp") .asFunction)>(); /// from: public boolean onNavigateUp() - bool onNavigateUp() => _onNavigateUp(reference).boolean; + bool onNavigateUp() { + return _onNavigateUp(reference).boolean; + } static final _onNavigateUpFromChild = jniLookup< ffi.NativeFunction< @@ -7972,8 +10023,11 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public boolean onNavigateUpFromChild(android.app.Activity activity) - bool onNavigateUpFromChild(Activity activity) => - _onNavigateUpFromChild(reference, activity.reference).boolean; + bool onNavigateUpFromChild( + Activity activity, + ) { + return _onNavigateUpFromChild(reference, activity.reference).boolean; + } static final _onCreateNavigateUpTaskStack = jniLookup< ffi.NativeFunction< @@ -7985,9 +10039,12 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void onCreateNavigateUpTaskStack(android.app.TaskStackBuilder taskStackBuilder) - void onCreateNavigateUpTaskStack(jni.JObject taskStackBuilder) => - _onCreateNavigateUpTaskStack(reference, taskStackBuilder.reference) - .check(); + void onCreateNavigateUpTaskStack( + jni.JObject taskStackBuilder, + ) { + return _onCreateNavigateUpTaskStack(reference, taskStackBuilder.reference) + .check(); + } static final _onPrepareNavigateUpTaskStack = jniLookup< ffi.NativeFunction< @@ -7999,9 +10056,12 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void onPrepareNavigateUpTaskStack(android.app.TaskStackBuilder taskStackBuilder) - void onPrepareNavigateUpTaskStack(jni.JObject taskStackBuilder) => - _onPrepareNavigateUpTaskStack(reference, taskStackBuilder.reference) - .check(); + void onPrepareNavigateUpTaskStack( + jni.JObject taskStackBuilder, + ) { + return _onPrepareNavigateUpTaskStack(reference, taskStackBuilder.reference) + .check(); + } static final _onOptionsMenuClosed = jniLookup< ffi.NativeFunction< @@ -8012,26 +10072,33 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void onOptionsMenuClosed(android.view.Menu menu) - void onOptionsMenuClosed(jni.JObject menu) => - _onOptionsMenuClosed(reference, menu.reference).check(); + void onOptionsMenuClosed( + jni.JObject menu, + ) { + return _onOptionsMenuClosed(reference, menu.reference).check(); + } static final _openOptionsMenu = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__openOptionsMenu") + ffi + .NativeFunction)>>( + "Activity__openOptionsMenu") .asFunction)>(); /// from: public void openOptionsMenu() - void openOptionsMenu() => _openOptionsMenu(reference).check(); + void openOptionsMenu() { + return _openOptionsMenu(reference).check(); + } static final _closeOptionsMenu = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__closeOptionsMenu") + ffi + .NativeFunction)>>( + "Activity__closeOptionsMenu") .asFunction)>(); /// from: public void closeOptionsMenu() - void closeOptionsMenu() => _closeOptionsMenu(reference).check(); + void closeOptionsMenu() { + return _closeOptionsMenu(reference).check(); + } static final _onCreateContextMenu = jniLookup< ffi.NativeFunction< @@ -8045,11 +10112,15 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void onCreateContextMenu(android.view.ContextMenu contextMenu, android.view.View view, android.view.ContextMenu$ContextMenuInfo contextMenuInfo) - void onCreateContextMenu(jni.JObject contextMenu, jni.JObject view, - jni.JObject contextMenuInfo) => - _onCreateContextMenu(reference, contextMenu.reference, view.reference, - contextMenuInfo.reference) - .check(); + void onCreateContextMenu( + jni.JObject contextMenu, + jni.JObject view, + jni.JObject contextMenuInfo, + ) { + return _onCreateContextMenu(reference, contextMenu.reference, + view.reference, contextMenuInfo.reference) + .check(); + } static final _registerForContextMenu = jniLookup< ffi.NativeFunction< @@ -8060,8 +10131,11 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void registerForContextMenu(android.view.View view) - void registerForContextMenu(jni.JObject view) => - _registerForContextMenu(reference, view.reference).check(); + void registerForContextMenu( + jni.JObject view, + ) { + return _registerForContextMenu(reference, view.reference).check(); + } static final _unregisterForContextMenu = jniLookup< ffi.NativeFunction< @@ -8072,8 +10146,11 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void unregisterForContextMenu(android.view.View view) - void unregisterForContextMenu(jni.JObject view) => - _unregisterForContextMenu(reference, view.reference).check(); + void unregisterForContextMenu( + jni.JObject view, + ) { + return _unregisterForContextMenu(reference, view.reference).check(); + } static final _openContextMenu = jniLookup< ffi.NativeFunction< @@ -8084,17 +10161,22 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void openContextMenu(android.view.View view) - void openContextMenu(jni.JObject view) => - _openContextMenu(reference, view.reference).check(); + void openContextMenu( + jni.JObject view, + ) { + return _openContextMenu(reference, view.reference).check(); + } static final _closeContextMenu = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__closeContextMenu") + ffi + .NativeFunction)>>( + "Activity__closeContextMenu") .asFunction)>(); /// from: public void closeContextMenu() - void closeContextMenu() => _closeContextMenu(reference).check(); + void closeContextMenu() { + return _closeContextMenu(reference).check(); + } static final _onContextItemSelected = jniLookup< ffi.NativeFunction< @@ -8105,8 +10187,11 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public boolean onContextItemSelected(android.view.MenuItem menuItem) - bool onContextItemSelected(jni.JObject menuItem) => - _onContextItemSelected(reference, menuItem.reference).boolean; + bool onContextItemSelected( + jni.JObject menuItem, + ) { + return _onContextItemSelected(reference, menuItem.reference).boolean; + } static final _onContextMenuClosed = jniLookup< ffi.NativeFunction< @@ -8117,8 +10202,11 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void onContextMenuClosed(android.view.Menu menu) - void onContextMenuClosed(jni.JObject menu) => - _onContextMenuClosed(reference, menu.reference).check(); + void onContextMenuClosed( + jni.JObject menu, + ) { + return _onContextMenuClosed(reference, menu.reference).check(); + } static final _onCreateDialog = jniLookup< ffi.NativeFunction< @@ -8127,9 +10215,13 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: protected android.app.Dialog onCreateDialog(int i) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject onCreateDialog(int i) => - const jni.JObjectType().fromRef(_onCreateDialog(reference, i).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject onCreateDialog( + int i, + ) { + return const jni.JObjectType() + .fromRef(_onCreateDialog(reference, i).object); + } static final _onCreateDialog1 = jniLookup< ffi.NativeFunction< @@ -8140,10 +10232,14 @@ class Activity extends jni.JObject { ffi.Pointer, int, ffi.Pointer)>(); /// from: protected android.app.Dialog onCreateDialog(int i, android.os.Bundle bundle) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject onCreateDialog1(int i, jni.JObject bundle) => - const jni.JObjectType() - .fromRef(_onCreateDialog1(reference, i, bundle.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject onCreateDialog1( + int i, + jni.JObject bundle, + ) { + return const jni.JObjectType() + .fromRef(_onCreateDialog1(reference, i, bundle.reference).object); + } static final _onPrepareDialog = jniLookup< ffi.NativeFunction< @@ -8154,8 +10250,12 @@ class Activity extends jni.JObject { ffi.Pointer, int, ffi.Pointer)>(); /// from: protected void onPrepareDialog(int i, android.app.Dialog dialog) - void onPrepareDialog(int i, jni.JObject dialog) => - _onPrepareDialog(reference, i, dialog.reference).check(); + void onPrepareDialog( + int i, + jni.JObject dialog, + ) { + return _onPrepareDialog(reference, i, dialog.reference).check(); + } static final _onPrepareDialog1 = jniLookup< ffi.NativeFunction< @@ -8169,9 +10269,14 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: protected void onPrepareDialog(int i, android.app.Dialog dialog, android.os.Bundle bundle) - void onPrepareDialog1(int i, jni.JObject dialog, jni.JObject bundle) => - _onPrepareDialog1(reference, i, dialog.reference, bundle.reference) - .check(); + void onPrepareDialog1( + int i, + jni.JObject dialog, + jni.JObject bundle, + ) { + return _onPrepareDialog1(reference, i, dialog.reference, bundle.reference) + .check(); + } static final _showDialog = jniLookup< ffi.NativeFunction< @@ -8180,7 +10285,11 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public final void showDialog(int i) - void showDialog(int i) => _showDialog(reference, i).check(); + void showDialog( + int i, + ) { + return _showDialog(reference, i).check(); + } static final _showDialog1 = jniLookup< ffi.NativeFunction< @@ -8191,8 +10300,12 @@ class Activity extends jni.JObject { ffi.Pointer, int, ffi.Pointer)>(); /// from: public final boolean showDialog(int i, android.os.Bundle bundle) - bool showDialog1(int i, jni.JObject bundle) => - _showDialog1(reference, i, bundle.reference).boolean; + bool showDialog1( + int i, + jni.JObject bundle, + ) { + return _showDialog1(reference, i, bundle.reference).boolean; + } static final _dismissDialog = jniLookup< ffi.NativeFunction< @@ -8201,7 +10314,11 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public final void dismissDialog(int i) - void dismissDialog(int i) => _dismissDialog(reference, i).check(); + void dismissDialog( + int i, + ) { + return _dismissDialog(reference, i).check(); + } static final _removeDialog = jniLookup< ffi.NativeFunction< @@ -8210,7 +10327,11 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public final void removeDialog(int i) - void removeDialog(int i) => _removeDialog(reference, i).check(); + void removeDialog( + int i, + ) { + return _removeDialog(reference, i).check(); + } static final _onSearchRequested = jniLookup< ffi.NativeFunction< @@ -8221,28 +10342,34 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public boolean onSearchRequested(android.view.SearchEvent searchEvent) - bool onSearchRequested(jni.JObject searchEvent) => - _onSearchRequested(reference, searchEvent.reference).boolean; + bool onSearchRequested( + jni.JObject searchEvent, + ) { + return _onSearchRequested(reference, searchEvent.reference).boolean; + } static final _onSearchRequested1 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__onSearchRequested1") + ffi + .NativeFunction)>>( + "Activity__onSearchRequested1") .asFunction)>(); /// from: public boolean onSearchRequested() - bool onSearchRequested1() => _onSearchRequested1(reference).boolean; + bool onSearchRequested1() { + return _onSearchRequested1(reference).boolean; + } static final _getSearchEvent = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__getSearchEvent") + ffi + .NativeFunction)>>( + "Activity__getSearchEvent") .asFunction)>(); /// from: public final android.view.SearchEvent getSearchEvent() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getSearchEvent() => - const jni.JObjectType().fromRef(_getSearchEvent(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getSearchEvent() { + return const jni.JObjectType().fromRef(_getSearchEvent(reference).object); + } static final _startSearch = jniLookup< ffi.NativeFunction< @@ -8257,10 +10384,16 @@ class Activity extends jni.JObject { int, ffi.Pointer, int)>(); /// from: public void startSearch(java.lang.String string, boolean z, android.os.Bundle bundle, boolean z1) - void startSearch(jni.JString string, bool z, jni.JObject bundle, bool z1) => - _startSearch(reference, string.reference, z ? 1 : 0, bundle.reference, - z1 ? 1 : 0) - .check(); + void startSearch( + jni.JString string, + bool z, + jni.JObject bundle, + bool z1, + ) { + return _startSearch(reference, string.reference, z ? 1 : 0, + bundle.reference, z1 ? 1 : 0) + .check(); + } static final _triggerSearch = jniLookup< ffi.NativeFunction< @@ -8273,8 +10406,13 @@ class Activity extends jni.JObject { ffi.Pointer)>(); /// from: public void triggerSearch(java.lang.String string, android.os.Bundle bundle) - void triggerSearch(jni.JString string, jni.JObject bundle) => - _triggerSearch(reference, string.reference, bundle.reference).check(); + void triggerSearch( + jni.JString string, + jni.JObject bundle, + ) { + return _triggerSearch(reference, string.reference, bundle.reference) + .check(); + } static final _takeKeyEvents = jniLookup< ffi.NativeFunction< @@ -8283,7 +10421,11 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public void takeKeyEvents(boolean z) - void takeKeyEvents(bool z) => _takeKeyEvents(reference, z ? 1 : 0).check(); + void takeKeyEvents( + bool z, + ) { + return _takeKeyEvents(reference, z ? 1 : 0).check(); + } static final _requestWindowFeature = jniLookup< ffi.NativeFunction< @@ -8292,8 +10434,11 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public final boolean requestWindowFeature(int i) - bool requestWindowFeature(int i) => - _requestWindowFeature(reference, i).boolean; + bool requestWindowFeature( + int i, + ) { + return _requestWindowFeature(reference, i).boolean; + } static final _setFeatureDrawableResource = jniLookup< ffi.NativeFunction< @@ -8302,8 +10447,12 @@ class Activity extends jni.JObject { .asFunction, int, int)>(); /// from: public final void setFeatureDrawableResource(int i, int i1) - void setFeatureDrawableResource(int i, int i1) => - _setFeatureDrawableResource(reference, i, i1).check(); + void setFeatureDrawableResource( + int i, + int i1, + ) { + return _setFeatureDrawableResource(reference, i, i1).check(); + } static final _setFeatureDrawableUri = jniLookup< ffi.NativeFunction< @@ -8314,8 +10463,12 @@ class Activity extends jni.JObject { ffi.Pointer, int, ffi.Pointer)>(); /// from: public final void setFeatureDrawableUri(int i, android.net.Uri uri) - void setFeatureDrawableUri(int i, jni.JObject uri) => - _setFeatureDrawableUri(reference, i, uri.reference).check(); + void setFeatureDrawableUri( + int i, + jni.JObject uri, + ) { + return _setFeatureDrawableUri(reference, i, uri.reference).check(); + } static final _setFeatureDrawable = jniLookup< ffi.NativeFunction< @@ -8326,8 +10479,12 @@ class Activity extends jni.JObject { ffi.Pointer, int, ffi.Pointer)>(); /// from: public final void setFeatureDrawable(int i, android.graphics.drawable.Drawable drawable) - void setFeatureDrawable(int i, jni.JObject drawable) => - _setFeatureDrawable(reference, i, drawable.reference).check(); + void setFeatureDrawable( + int i, + jni.JObject drawable, + ) { + return _setFeatureDrawable(reference, i, drawable.reference).check(); + } static final _setFeatureDrawableAlpha = jniLookup< ffi.NativeFunction< @@ -8336,30 +10493,37 @@ class Activity extends jni.JObject { .asFunction, int, int)>(); /// from: public final void setFeatureDrawableAlpha(int i, int i1) - void setFeatureDrawableAlpha(int i, int i1) => - _setFeatureDrawableAlpha(reference, i, i1).check(); + void setFeatureDrawableAlpha( + int i, + int i1, + ) { + return _setFeatureDrawableAlpha(reference, i, i1).check(); + } static final _getLayoutInflater = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__getLayoutInflater") + ffi + .NativeFunction)>>( + "Activity__getLayoutInflater") .asFunction)>(); /// from: public android.view.LayoutInflater getLayoutInflater() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getLayoutInflater() => - const jni.JObjectType().fromRef(_getLayoutInflater(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getLayoutInflater() { + return const jni.JObjectType() + .fromRef(_getLayoutInflater(reference).object); + } static final _getMenuInflater = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__getMenuInflater") + ffi + .NativeFunction)>>( + "Activity__getMenuInflater") .asFunction)>(); /// from: public android.view.MenuInflater getMenuInflater() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getMenuInflater() => - const jni.JObjectType().fromRef(_getMenuInflater(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getMenuInflater() { + return const jni.JObjectType().fromRef(_getMenuInflater(reference).object); + } static final _setTheme = jniLookup< ffi.NativeFunction< @@ -8368,7 +10532,11 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public void setTheme(int i) - void setTheme(int i) => _setTheme(reference, i).check(); + void setTheme( + int i, + ) { + return _setTheme(reference, i).check(); + } static final _onApplyThemeResource = jniLookup< ffi.NativeFunction< @@ -8382,8 +10550,14 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer, int, int)>(); /// from: protected void onApplyThemeResource(android.content.res.Resources$Theme theme, int i, boolean z) - void onApplyThemeResource(jni.JObject theme, int i, bool z) => - _onApplyThemeResource(reference, theme.reference, i, z ? 1 : 0).check(); + void onApplyThemeResource( + jni.JObject theme, + int i, + bool z, + ) { + return _onApplyThemeResource(reference, theme.reference, i, z ? 1 : 0) + .check(); + } static final _requestPermissions = jniLookup< ffi.NativeFunction< @@ -8396,8 +10570,12 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer, int)>(); /// from: public final void requestPermissions(java.lang.String[] strings, int i) - void requestPermissions(jni.JArray strings, int i) => - _requestPermissions(reference, strings.reference, i).check(); + void requestPermissions( + jni.JArray strings, + int i, + ) { + return _requestPermissions(reference, strings.reference, i).check(); + } static final _onRequestPermissionsResult = jniLookup< ffi.NativeFunction< @@ -8410,10 +10588,14 @@ class Activity extends jni.JObject { /// from: public void onRequestPermissionsResult(int i, java.lang.String[] strings, int[] is) void onRequestPermissionsResult( - int i, jni.JArray strings, jni.JArray is0) => - _onRequestPermissionsResult( - reference, i, strings.reference, is0.reference) - .check(); + int i, + jni.JArray strings, + jni.JArray is0, + ) { + return _onRequestPermissionsResult( + reference, i, strings.reference, is0.reference) + .check(); + } static final _shouldShowRequestPermissionRationale = jniLookup< ffi.NativeFunction< @@ -8425,9 +10607,12 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public boolean shouldShowRequestPermissionRationale(java.lang.String string) - bool shouldShowRequestPermissionRationale(jni.JString string) => - _shouldShowRequestPermissionRationale(reference, string.reference) - .boolean; + bool shouldShowRequestPermissionRationale( + jni.JString string, + ) { + return _shouldShowRequestPermissionRationale(reference, string.reference) + .boolean; + } static final _startActivityForResult = jniLookup< ffi.NativeFunction< @@ -8440,8 +10625,12 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer, int)>(); /// from: public void startActivityForResult(android.content.Intent intent, int i) - void startActivityForResult(Intent intent, int i) => - _startActivityForResult(reference, intent.reference, i).check(); + void startActivityForResult( + Intent intent, + int i, + ) { + return _startActivityForResult(reference, intent.reference, i).check(); + } static final _startActivityForResult1 = jniLookup< ffi.NativeFunction< @@ -8455,19 +10644,26 @@ class Activity extends jni.JObject { int, ffi.Pointer)>(); /// from: public void startActivityForResult(android.content.Intent intent, int i, android.os.Bundle bundle) - void startActivityForResult1(Intent intent, int i, jni.JObject bundle) => - _startActivityForResult1(reference, intent.reference, i, bundle.reference) - .check(); + void startActivityForResult1( + Intent intent, + int i, + jni.JObject bundle, + ) { + return _startActivityForResult1( + reference, intent.reference, i, bundle.reference) + .check(); + } static final _isActivityTransitionRunning = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>( + ffi + .NativeFunction)>>( "Activity__isActivityTransitionRunning") .asFunction)>(); /// from: public boolean isActivityTransitionRunning() - bool isActivityTransitionRunning() => - _isActivityTransitionRunning(reference).boolean; + bool isActivityTransitionRunning() { + return _isActivityTransitionRunning(reference).boolean; + } static final _startIntentSenderForResult = jniLookup< ffi.NativeFunction< @@ -8484,11 +10680,18 @@ class Activity extends jni.JObject { int, ffi.Pointer, int, int, int)>(); /// from: public void startIntentSenderForResult(android.content.IntentSender intentSender, int i, android.content.Intent intent, int i1, int i2, int i3) - void startIntentSenderForResult(jni.JObject intentSender, int i, - Intent intent, int i1, int i2, int i3) => - _startIntentSenderForResult(reference, intentSender.reference, i, - intent.reference, i1, i2, i3) - .check(); + void startIntentSenderForResult( + jni.JObject intentSender, + int i, + Intent intent, + int i1, + int i2, + int i3, + ) { + return _startIntentSenderForResult( + reference, intentSender.reference, i, intent.reference, i1, i2, i3) + .check(); + } static final _startIntentSenderForResult1 = jniLookup< ffi.NativeFunction< @@ -8514,11 +10717,19 @@ class Activity extends jni.JObject { ffi.Pointer)>(); /// from: public void startIntentSenderForResult(android.content.IntentSender intentSender, int i, android.content.Intent intent, int i1, int i2, int i3, android.os.Bundle bundle) - void startIntentSenderForResult1(jni.JObject intentSender, int i, - Intent intent, int i1, int i2, int i3, jni.JObject bundle) => - _startIntentSenderForResult1(reference, intentSender.reference, i, - intent.reference, i1, i2, i3, bundle.reference) - .check(); + void startIntentSenderForResult1( + jni.JObject intentSender, + int i, + Intent intent, + int i1, + int i2, + int i3, + jni.JObject bundle, + ) { + return _startIntentSenderForResult1(reference, intentSender.reference, i, + intent.reference, i1, i2, i3, bundle.reference) + .check(); + } static final _startActivity = jniLookup< ffi.NativeFunction< @@ -8529,8 +10740,11 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void startActivity(android.content.Intent intent) - void startActivity(Intent intent) => - _startActivity(reference, intent.reference).check(); + void startActivity( + Intent intent, + ) { + return _startActivity(reference, intent.reference).check(); + } static final _startActivity1 = jniLookup< ffi.NativeFunction< @@ -8543,8 +10757,13 @@ class Activity extends jni.JObject { ffi.Pointer)>(); /// from: public void startActivity(android.content.Intent intent, android.os.Bundle bundle) - void startActivity1(Intent intent, jni.JObject bundle) => - _startActivity1(reference, intent.reference, bundle.reference).check(); + void startActivity1( + Intent intent, + jni.JObject bundle, + ) { + return _startActivity1(reference, intent.reference, bundle.reference) + .check(); + } static final _startActivities = jniLookup< ffi.NativeFunction< @@ -8555,8 +10774,11 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void startActivities(android.content.Intent[] intents) - void startActivities(jni.JArray intents) => - _startActivities(reference, intents.reference).check(); + void startActivities( + jni.JArray intents, + ) { + return _startActivities(reference, intents.reference).check(); + } static final _startActivities1 = jniLookup< ffi.NativeFunction< @@ -8569,8 +10791,13 @@ class Activity extends jni.JObject { ffi.Pointer)>(); /// from: public void startActivities(android.content.Intent[] intents, android.os.Bundle bundle) - void startActivities1(jni.JArray intents, jni.JObject bundle) => - _startActivities1(reference, intents.reference, bundle.reference).check(); + void startActivities1( + jni.JArray intents, + jni.JObject bundle, + ) { + return _startActivities1(reference, intents.reference, bundle.reference) + .check(); + } static final _startIntentSender = jniLookup< ffi.NativeFunction< @@ -8587,10 +10814,16 @@ class Activity extends jni.JObject { /// from: public void startIntentSender(android.content.IntentSender intentSender, android.content.Intent intent, int i, int i1, int i2) void startIntentSender( - jni.JObject intentSender, Intent intent, int i, int i1, int i2) => - _startIntentSender( - reference, intentSender.reference, intent.reference, i, i1, i2) - .check(); + jni.JObject intentSender, + Intent intent, + int i, + int i1, + int i2, + ) { + return _startIntentSender( + reference, intentSender.reference, intent.reference, i, i1, i2) + .check(); + } static final _startIntentSender1 = jniLookup< ffi.NativeFunction< @@ -8607,11 +10840,18 @@ class Activity extends jni.JObject { ffi.Pointer, int, int, int, ffi.Pointer)>(); /// from: public void startIntentSender(android.content.IntentSender intentSender, android.content.Intent intent, int i, int i1, int i2, android.os.Bundle bundle) - void startIntentSender1(jni.JObject intentSender, Intent intent, int i, - int i1, int i2, jni.JObject bundle) => - _startIntentSender1(reference, intentSender.reference, intent.reference, - i, i1, i2, bundle.reference) - .check(); + void startIntentSender1( + jni.JObject intentSender, + Intent intent, + int i, + int i1, + int i2, + jni.JObject bundle, + ) { + return _startIntentSender1(reference, intentSender.reference, + intent.reference, i, i1, i2, bundle.reference) + .check(); + } static final _startActivityIfNeeded = jniLookup< ffi.NativeFunction< @@ -8624,8 +10864,12 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer, int)>(); /// from: public boolean startActivityIfNeeded(android.content.Intent intent, int i) - bool startActivityIfNeeded(Intent intent, int i) => - _startActivityIfNeeded(reference, intent.reference, i).boolean; + bool startActivityIfNeeded( + Intent intent, + int i, + ) { + return _startActivityIfNeeded(reference, intent.reference, i).boolean; + } static final _startActivityIfNeeded1 = jniLookup< ffi.NativeFunction< @@ -8639,9 +10883,15 @@ class Activity extends jni.JObject { int, ffi.Pointer)>(); /// from: public boolean startActivityIfNeeded(android.content.Intent intent, int i, android.os.Bundle bundle) - bool startActivityIfNeeded1(Intent intent, int i, jni.JObject bundle) => - _startActivityIfNeeded1(reference, intent.reference, i, bundle.reference) - .boolean; + bool startActivityIfNeeded1( + Intent intent, + int i, + jni.JObject bundle, + ) { + return _startActivityIfNeeded1( + reference, intent.reference, i, bundle.reference) + .boolean; + } static final _startNextMatchingActivity = jniLookup< ffi.NativeFunction< @@ -8653,8 +10903,11 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public boolean startNextMatchingActivity(android.content.Intent intent) - bool startNextMatchingActivity(Intent intent) => - _startNextMatchingActivity(reference, intent.reference).boolean; + bool startNextMatchingActivity( + Intent intent, + ) { + return _startNextMatchingActivity(reference, intent.reference).boolean; + } static final _startNextMatchingActivity1 = jniLookup< ffi.NativeFunction< @@ -8666,9 +10919,14 @@ class Activity extends jni.JObject { ffi.Pointer)>(); /// from: public boolean startNextMatchingActivity(android.content.Intent intent, android.os.Bundle bundle) - bool startNextMatchingActivity1(Intent intent, jni.JObject bundle) => - _startNextMatchingActivity1(reference, intent.reference, bundle.reference) - .boolean; + bool startNextMatchingActivity1( + Intent intent, + jni.JObject bundle, + ) { + return _startNextMatchingActivity1( + reference, intent.reference, bundle.reference) + .boolean; + } static final _startActivityFromChild = jniLookup< ffi.NativeFunction< @@ -8682,10 +10940,15 @@ class Activity extends jni.JObject { ffi.Pointer, int)>(); /// from: public void startActivityFromChild(android.app.Activity activity, android.content.Intent intent, int i) - void startActivityFromChild(Activity activity, Intent intent, int i) => - _startActivityFromChild( - reference, activity.reference, intent.reference, i) - .check(); + void startActivityFromChild( + Activity activity, + Intent intent, + int i, + ) { + return _startActivityFromChild( + reference, activity.reference, intent.reference, i) + .check(); + } static final _startActivityFromChild1 = jniLookup< ffi.NativeFunction< @@ -8701,10 +10964,15 @@ class Activity extends jni.JObject { /// from: public void startActivityFromChild(android.app.Activity activity, android.content.Intent intent, int i, android.os.Bundle bundle) void startActivityFromChild1( - Activity activity, Intent intent, int i, jni.JObject bundle) => - _startActivityFromChild1(reference, activity.reference, intent.reference, - i, bundle.reference) - .check(); + Activity activity, + Intent intent, + int i, + jni.JObject bundle, + ) { + return _startActivityFromChild1(reference, activity.reference, + intent.reference, i, bundle.reference) + .check(); + } static final _startActivityFromFragment = jniLookup< ffi.NativeFunction< @@ -8718,10 +10986,15 @@ class Activity extends jni.JObject { ffi.Pointer, int)>(); /// from: public void startActivityFromFragment(android.app.Fragment fragment, android.content.Intent intent, int i) - void startActivityFromFragment(jni.JObject fragment, Intent intent, int i) => - _startActivityFromFragment( - reference, fragment.reference, intent.reference, i) - .check(); + void startActivityFromFragment( + jni.JObject fragment, + Intent intent, + int i, + ) { + return _startActivityFromFragment( + reference, fragment.reference, intent.reference, i) + .check(); + } static final _startActivityFromFragment1 = jniLookup< ffi.NativeFunction< @@ -8738,10 +11011,15 @@ class Activity extends jni.JObject { /// from: public void startActivityFromFragment(android.app.Fragment fragment, android.content.Intent intent, int i, android.os.Bundle bundle) void startActivityFromFragment1( - jni.JObject fragment, Intent intent, int i, jni.JObject bundle) => - _startActivityFromFragment1(reference, fragment.reference, - intent.reference, i, bundle.reference) - .check(); + jni.JObject fragment, + Intent intent, + int i, + jni.JObject bundle, + ) { + return _startActivityFromFragment1(reference, fragment.reference, + intent.reference, i, bundle.reference) + .check(); + } static final _startIntentSenderFromChild = jniLookup< ffi.NativeFunction< @@ -8766,11 +11044,19 @@ class Activity extends jni.JObject { int)>(); /// from: public void startIntentSenderFromChild(android.app.Activity activity, android.content.IntentSender intentSender, int i, android.content.Intent intent, int i1, int i2, int i3) - void startIntentSenderFromChild(Activity activity, jni.JObject intentSender, - int i, Intent intent, int i1, int i2, int i3) => - _startIntentSenderFromChild(reference, activity.reference, - intentSender.reference, i, intent.reference, i1, i2, i3) - .check(); + void startIntentSenderFromChild( + Activity activity, + jni.JObject intentSender, + int i, + Intent intent, + int i1, + int i2, + int i3, + ) { + return _startIntentSenderFromChild(reference, activity.reference, + intentSender.reference, i, intent.reference, i1, i2, i3) + .check(); + } static final _startIntentSenderFromChild1 = jniLookup< ffi.NativeFunction< @@ -8798,19 +11084,28 @@ class Activity extends jni.JObject { ffi.Pointer)>(); /// from: public void startIntentSenderFromChild(android.app.Activity activity, android.content.IntentSender intentSender, int i, android.content.Intent intent, int i1, int i2, int i3, android.os.Bundle bundle) - void startIntentSenderFromChild1(Activity activity, jni.JObject intentSender, - int i, Intent intent, int i1, int i2, int i3, jni.JObject bundle) => - _startIntentSenderFromChild1( - reference, - activity.reference, - intentSender.reference, - i, - intent.reference, - i1, - i2, - i3, - bundle.reference) - .check(); + void startIntentSenderFromChild1( + Activity activity, + jni.JObject intentSender, + int i, + Intent intent, + int i1, + int i2, + int i3, + jni.JObject bundle, + ) { + return _startIntentSenderFromChild1( + reference, + activity.reference, + intentSender.reference, + i, + intent.reference, + i1, + i2, + i3, + bundle.reference) + .check(); + } static final _overridePendingTransition = jniLookup< ffi.NativeFunction< @@ -8819,8 +11114,12 @@ class Activity extends jni.JObject { .asFunction, int, int)>(); /// from: public void overridePendingTransition(int i, int i1) - void overridePendingTransition(int i, int i1) => - _overridePendingTransition(reference, i, i1).check(); + void overridePendingTransition( + int i, + int i1, + ) { + return _overridePendingTransition(reference, i, i1).check(); + } static final _overridePendingTransition1 = jniLookup< ffi.NativeFunction< @@ -8833,8 +11132,13 @@ class Activity extends jni.JObject { jni.JniResult Function(ffi.Pointer, int, int, int)>(); /// from: public void overridePendingTransition(int i, int i1, int i2) - void overridePendingTransition1(int i, int i1, int i2) => - _overridePendingTransition1(reference, i, i1, i2).check(); + void overridePendingTransition1( + int i, + int i1, + int i2, + ) { + return _overridePendingTransition1(reference, i, i1, i2).check(); + } static final _setResult = jniLookup< ffi.NativeFunction< @@ -8843,7 +11147,11 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public final void setResult(int i) - void setResult(int i) => _setResult(reference, i).check(); + void setResult( + int i, + ) { + return _setResult(reference, i).check(); + } static final _setResult1 = jniLookup< ffi.NativeFunction< @@ -8854,52 +11162,63 @@ class Activity extends jni.JObject { ffi.Pointer, int, ffi.Pointer)>(); /// from: public final void setResult(int i, android.content.Intent intent) - void setResult1(int i, Intent intent) => - _setResult1(reference, i, intent.reference).check(); + void setResult1( + int i, + Intent intent, + ) { + return _setResult1(reference, i, intent.reference).check(); + } static final _getReferrer = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__getReferrer") + ffi + .NativeFunction)>>( + "Activity__getReferrer") .asFunction)>(); /// from: public android.net.Uri getReferrer() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getReferrer() => - const jni.JObjectType().fromRef(_getReferrer(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getReferrer() { + return const jni.JObjectType().fromRef(_getReferrer(reference).object); + } static final _onProvideReferrer = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__onProvideReferrer") + ffi + .NativeFunction)>>( + "Activity__onProvideReferrer") .asFunction)>(); /// from: public android.net.Uri onProvideReferrer() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject onProvideReferrer() => - const jni.JObjectType().fromRef(_onProvideReferrer(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject onProvideReferrer() { + return const jni.JObjectType() + .fromRef(_onProvideReferrer(reference).object); + } static final _getCallingPackage = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__getCallingPackage") + ffi + .NativeFunction)>>( + "Activity__getCallingPackage") .asFunction)>(); /// from: public java.lang.String getCallingPackage() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JString getCallingPackage() => - const jni.JStringType().fromRef(_getCallingPackage(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JString getCallingPackage() { + return const jni.JStringType() + .fromRef(_getCallingPackage(reference).object); + } static final _getCallingActivity = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__getCallingActivity") + ffi + .NativeFunction)>>( + "Activity__getCallingActivity") .asFunction)>(); /// from: public android.content.ComponentName getCallingActivity() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getCallingActivity() => - const jni.JObjectType().fromRef(_getCallingActivity(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getCallingActivity() { + return const jni.JObjectType() + .fromRef(_getCallingActivity(reference).object); + } static final _setVisible = jniLookup< ffi.NativeFunction< @@ -8908,62 +11227,77 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public void setVisible(boolean z) - void setVisible(bool z) => _setVisible(reference, z ? 1 : 0).check(); + void setVisible( + bool z, + ) { + return _setVisible(reference, z ? 1 : 0).check(); + } static final _isFinishing = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__isFinishing") + ffi + .NativeFunction)>>( + "Activity__isFinishing") .asFunction)>(); /// from: public boolean isFinishing() - bool isFinishing() => _isFinishing(reference).boolean; + bool isFinishing() { + return _isFinishing(reference).boolean; + } static final _isDestroyed = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__isDestroyed") + ffi + .NativeFunction)>>( + "Activity__isDestroyed") .asFunction)>(); /// from: public boolean isDestroyed() - bool isDestroyed() => _isDestroyed(reference).boolean; + bool isDestroyed() { + return _isDestroyed(reference).boolean; + } static final _isChangingConfigurations = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__isChangingConfigurations") + ffi + .NativeFunction)>>( + "Activity__isChangingConfigurations") .asFunction)>(); /// from: public boolean isChangingConfigurations() - bool isChangingConfigurations() => - _isChangingConfigurations(reference).boolean; + bool isChangingConfigurations() { + return _isChangingConfigurations(reference).boolean; + } static final _recreate = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__recreate") + ffi + .NativeFunction)>>( + "Activity__recreate") .asFunction)>(); /// from: public void recreate() - void recreate() => _recreate(reference).check(); + void recreate() { + return _recreate(reference).check(); + } static final _finish = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__finish") + ffi + .NativeFunction)>>( + "Activity__finish") .asFunction)>(); /// from: public void finish() - void finish() => _finish(reference).check(); + void finish() { + return _finish(reference).check(); + } static final _finishAffinity = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__finishAffinity") + ffi + .NativeFunction)>>( + "Activity__finishAffinity") .asFunction)>(); /// from: public void finishAffinity() - void finishAffinity() => _finishAffinity(reference).check(); + void finishAffinity() { + return _finishAffinity(reference).check(); + } static final _finishFromChild = jniLookup< ffi.NativeFunction< @@ -8974,17 +11308,22 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void finishFromChild(android.app.Activity activity) - void finishFromChild(Activity activity) => - _finishFromChild(reference, activity.reference).check(); + void finishFromChild( + Activity activity, + ) { + return _finishFromChild(reference, activity.reference).check(); + } static final _finishAfterTransition = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__finishAfterTransition") + ffi + .NativeFunction)>>( + "Activity__finishAfterTransition") .asFunction)>(); /// from: public void finishAfterTransition() - void finishAfterTransition() => _finishAfterTransition(reference).check(); + void finishAfterTransition() { + return _finishAfterTransition(reference).check(); + } static final _finishActivity = jniLookup< ffi.NativeFunction< @@ -8993,7 +11332,11 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public void finishActivity(int i) - void finishActivity(int i) => _finishActivity(reference, i).check(); + void finishActivity( + int i, + ) { + return _finishActivity(reference, i).check(); + } static final _finishActivityFromChild = jniLookup< ffi.NativeFunction< @@ -9006,26 +11349,34 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer, int)>(); /// from: public void finishActivityFromChild(android.app.Activity activity, int i) - void finishActivityFromChild(Activity activity, int i) => - _finishActivityFromChild(reference, activity.reference, i).check(); + void finishActivityFromChild( + Activity activity, + int i, + ) { + return _finishActivityFromChild(reference, activity.reference, i).check(); + } static final _finishAndRemoveTask = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__finishAndRemoveTask") + ffi + .NativeFunction)>>( + "Activity__finishAndRemoveTask") .asFunction)>(); /// from: public void finishAndRemoveTask() - void finishAndRemoveTask() => _finishAndRemoveTask(reference).check(); + void finishAndRemoveTask() { + return _finishAndRemoveTask(reference).check(); + } static final _releaseInstance = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__releaseInstance") + ffi + .NativeFunction)>>( + "Activity__releaseInstance") .asFunction)>(); /// from: public boolean releaseInstance() - bool releaseInstance() => _releaseInstance(reference).boolean; + bool releaseInstance() { + return _releaseInstance(reference).boolean; + } static final _onActivityResult = jniLookup< ffi.NativeFunction< @@ -9039,8 +11390,13 @@ class Activity extends jni.JObject { ffi.Pointer, int, int, ffi.Pointer)>(); /// from: protected void onActivityResult(int i, int i1, android.content.Intent intent) - void onActivityResult(int i, int i1, Intent intent) => - _onActivityResult(reference, i, i1, intent.reference).check(); + void onActivityResult( + int i, + int i1, + Intent intent, + ) { + return _onActivityResult(reference, i, i1, intent.reference).check(); + } static final _onActivityReenter = jniLookup< ffi.NativeFunction< @@ -9051,8 +11407,12 @@ class Activity extends jni.JObject { ffi.Pointer, int, ffi.Pointer)>(); /// from: public void onActivityReenter(int i, android.content.Intent intent) - void onActivityReenter(int i, Intent intent) => - _onActivityReenter(reference, i, intent.reference).check(); + void onActivityReenter( + int i, + Intent intent, + ) { + return _onActivityReenter(reference, i, intent.reference).check(); + } static final _createPendingResult = jniLookup< ffi.NativeFunction< @@ -9066,10 +11426,15 @@ class Activity extends jni.JObject { ffi.Pointer, int, ffi.Pointer, int)>(); /// from: public android.app.PendingIntent createPendingResult(int i, android.content.Intent intent, int i1) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject createPendingResult(int i, Intent intent, int i1) => - const jni.JObjectType().fromRef( - _createPendingResult(reference, i, intent.reference, i1).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject createPendingResult( + int i, + Intent intent, + int i1, + ) { + return const jni.JObjectType().fromRef( + _createPendingResult(reference, i, intent.reference, i1).object); + } static final _setRequestedOrientation = jniLookup< ffi.NativeFunction< @@ -9078,35 +11443,44 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public void setRequestedOrientation(int i) - void setRequestedOrientation(int i) => - _setRequestedOrientation(reference, i).check(); + void setRequestedOrientation( + int i, + ) { + return _setRequestedOrientation(reference, i).check(); + } static final _getRequestedOrientation = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__getRequestedOrientation") + ffi + .NativeFunction)>>( + "Activity__getRequestedOrientation") .asFunction)>(); /// from: public int getRequestedOrientation() - int getRequestedOrientation() => _getRequestedOrientation(reference).integer; + int getRequestedOrientation() { + return _getRequestedOrientation(reference).integer; + } static final _getTaskId = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__getTaskId") + ffi + .NativeFunction)>>( + "Activity__getTaskId") .asFunction)>(); /// from: public int getTaskId() - int getTaskId() => _getTaskId(reference).integer; + int getTaskId() { + return _getTaskId(reference).integer; + } static final _isTaskRoot = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__isTaskRoot") + ffi + .NativeFunction)>>( + "Activity__isTaskRoot") .asFunction)>(); /// from: public boolean isTaskRoot() - bool isTaskRoot() => _isTaskRoot(reference).boolean; + bool isTaskRoot() { + return _isTaskRoot(reference).boolean; + } static final _moveTaskToBack = jniLookup< ffi.NativeFunction< @@ -9115,29 +11489,36 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public boolean moveTaskToBack(boolean z) - bool moveTaskToBack(bool z) => _moveTaskToBack(reference, z ? 1 : 0).boolean; + bool moveTaskToBack( + bool z, + ) { + return _moveTaskToBack(reference, z ? 1 : 0).boolean; + } static final _getLocalClassName = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__getLocalClassName") + ffi + .NativeFunction)>>( + "Activity__getLocalClassName") .asFunction)>(); /// from: public java.lang.String getLocalClassName() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JString getLocalClassName() => - const jni.JStringType().fromRef(_getLocalClassName(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JString getLocalClassName() { + return const jni.JStringType() + .fromRef(_getLocalClassName(reference).object); + } static final _getComponentName = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__getComponentName") + ffi + .NativeFunction)>>( + "Activity__getComponentName") .asFunction)>(); /// from: public android.content.ComponentName getComponentName() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getComponentName() => - const jni.JObjectType().fromRef(_getComponentName(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getComponentName() { + return const jni.JObjectType().fromRef(_getComponentName(reference).object); + } static final _getPreferences = jniLookup< ffi.NativeFunction< @@ -9146,18 +11527,24 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public android.content.SharedPreferences getPreferences(int i) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getPreferences(int i) => - const jni.JObjectType().fromRef(_getPreferences(reference, i).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getPreferences( + int i, + ) { + return const jni.JObjectType() + .fromRef(_getPreferences(reference, i).object); + } static final _isLaunchedFromBubble = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__isLaunchedFromBubble") + ffi + .NativeFunction)>>( + "Activity__isLaunchedFromBubble") .asFunction)>(); /// from: public boolean isLaunchedFromBubble() - bool isLaunchedFromBubble() => _isLaunchedFromBubble(reference).boolean; + bool isLaunchedFromBubble() { + return _isLaunchedFromBubble(reference).boolean; + } static final _getSystemService = jniLookup< ffi.NativeFunction< @@ -9168,9 +11555,13 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public java.lang.Object getSystemService(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getSystemService(jni.JString string) => const jni.JObjectType() - .fromRef(_getSystemService(reference, string.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getSystemService( + jni.JString string, + ) { + return const jni.JObjectType() + .fromRef(_getSystemService(reference, string.reference).object); + } static final _setTitle = jniLookup< ffi.NativeFunction< @@ -9181,8 +11572,11 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void setTitle(java.lang.CharSequence charSequence) - void setTitle(jni.JObject charSequence) => - _setTitle(reference, charSequence.reference).check(); + void setTitle( + jni.JObject charSequence, + ) { + return _setTitle(reference, charSequence.reference).check(); + } static final _setTitle1 = jniLookup< ffi.NativeFunction< @@ -9191,7 +11585,11 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public void setTitle(int i) - void setTitle1(int i) => _setTitle1(reference, i).check(); + void setTitle1( + int i, + ) { + return _setTitle1(reference, i).check(); + } static final _setTitleColor = jniLookup< ffi.NativeFunction< @@ -9200,27 +11598,34 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public void setTitleColor(int i) - void setTitleColor(int i) => _setTitleColor(reference, i).check(); + void setTitleColor( + int i, + ) { + return _setTitleColor(reference, i).check(); + } static final _getTitle = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__getTitle") + ffi + .NativeFunction)>>( + "Activity__getTitle") .asFunction)>(); /// from: public final java.lang.CharSequence getTitle() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getTitle() => - const jni.JObjectType().fromRef(_getTitle(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getTitle() { + return const jni.JObjectType().fromRef(_getTitle(reference).object); + } static final _getTitleColor = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__getTitleColor") + ffi + .NativeFunction)>>( + "Activity__getTitleColor") .asFunction)>(); /// from: public final int getTitleColor() - int getTitleColor() => _getTitleColor(reference).integer; + int getTitleColor() { + return _getTitleColor(reference).integer; + } static final _onTitleChanged = jniLookup< ffi.NativeFunction< @@ -9233,8 +11638,12 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer, int)>(); /// from: protected void onTitleChanged(java.lang.CharSequence charSequence, int i) - void onTitleChanged(jni.JObject charSequence, int i) => - _onTitleChanged(reference, charSequence.reference, i).check(); + void onTitleChanged( + jni.JObject charSequence, + int i, + ) { + return _onTitleChanged(reference, charSequence.reference, i).check(); + } static final _onChildTitleChanged = jniLookup< ffi.NativeFunction< @@ -9247,10 +11656,14 @@ class Activity extends jni.JObject { ffi.Pointer)>(); /// from: protected void onChildTitleChanged(android.app.Activity activity, java.lang.CharSequence charSequence) - void onChildTitleChanged(Activity activity, jni.JObject charSequence) => - _onChildTitleChanged( - reference, activity.reference, charSequence.reference) - .check(); + void onChildTitleChanged( + Activity activity, + jni.JObject charSequence, + ) { + return _onChildTitleChanged( + reference, activity.reference, charSequence.reference) + .check(); + } static final _setTaskDescription = jniLookup< ffi.NativeFunction< @@ -9261,8 +11674,11 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void setTaskDescription(android.app.ActivityManager$TaskDescription taskDescription) - void setTaskDescription(jni.JObject taskDescription) => - _setTaskDescription(reference, taskDescription.reference).check(); + void setTaskDescription( + jni.JObject taskDescription, + ) { + return _setTaskDescription(reference, taskDescription.reference).check(); + } static final _setProgressBarVisibility = jniLookup< ffi.NativeFunction< @@ -9271,8 +11687,11 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public final void setProgressBarVisibility(boolean z) - void setProgressBarVisibility(bool z) => - _setProgressBarVisibility(reference, z ? 1 : 0).check(); + void setProgressBarVisibility( + bool z, + ) { + return _setProgressBarVisibility(reference, z ? 1 : 0).check(); + } static final _setProgressBarIndeterminateVisibility = jniLookup< ffi.NativeFunction< @@ -9281,8 +11700,11 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public final void setProgressBarIndeterminateVisibility(boolean z) - void setProgressBarIndeterminateVisibility(bool z) => - _setProgressBarIndeterminateVisibility(reference, z ? 1 : 0).check(); + void setProgressBarIndeterminateVisibility( + bool z, + ) { + return _setProgressBarIndeterminateVisibility(reference, z ? 1 : 0).check(); + } static final _setProgressBarIndeterminate = jniLookup< ffi.NativeFunction< @@ -9291,8 +11713,11 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public final void setProgressBarIndeterminate(boolean z) - void setProgressBarIndeterminate(bool z) => - _setProgressBarIndeterminate(reference, z ? 1 : 0).check(); + void setProgressBarIndeterminate( + bool z, + ) { + return _setProgressBarIndeterminate(reference, z ? 1 : 0).check(); + } static final _setProgress = jniLookup< ffi.NativeFunction< @@ -9301,7 +11726,11 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public final void setProgress(int i) - void setProgress(int i) => _setProgress(reference, i).check(); + void setProgress( + int i, + ) { + return _setProgress(reference, i).check(); + } static final _setSecondaryProgress = jniLookup< ffi.NativeFunction< @@ -9310,8 +11739,11 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public final void setSecondaryProgress(int i) - void setSecondaryProgress(int i) => - _setSecondaryProgress(reference, i).check(); + void setSecondaryProgress( + int i, + ) { + return _setSecondaryProgress(reference, i).check(); + } static final _setVolumeControlStream = jniLookup< ffi.NativeFunction< @@ -9320,17 +11752,22 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public final void setVolumeControlStream(int i) - void setVolumeControlStream(int i) => - _setVolumeControlStream(reference, i).check(); + void setVolumeControlStream( + int i, + ) { + return _setVolumeControlStream(reference, i).check(); + } static final _getVolumeControlStream = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__getVolumeControlStream") + ffi + .NativeFunction)>>( + "Activity__getVolumeControlStream") .asFunction)>(); /// from: public final int getVolumeControlStream() - int getVolumeControlStream() => _getVolumeControlStream(reference).integer; + int getVolumeControlStream() { + return _getVolumeControlStream(reference).integer; + } static final _setMediaController = jniLookup< ffi.NativeFunction< @@ -9341,19 +11778,24 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public final void setMediaController(android.media.session.MediaController mediaController) - void setMediaController(jni.JObject mediaController) => - _setMediaController(reference, mediaController.reference).check(); + void setMediaController( + jni.JObject mediaController, + ) { + return _setMediaController(reference, mediaController.reference).check(); + } static final _getMediaController = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__getMediaController") + ffi + .NativeFunction)>>( + "Activity__getMediaController") .asFunction)>(); /// from: public final android.media.session.MediaController getMediaController() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getMediaController() => - const jni.JObjectType().fromRef(_getMediaController(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getMediaController() { + return const jni.JObjectType() + .fromRef(_getMediaController(reference).object); + } static final _runOnUiThread = jniLookup< ffi.NativeFunction< @@ -9364,8 +11806,11 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public final void runOnUiThread(java.lang.Runnable runnable) - void runOnUiThread(jni.JObject runnable) => - _runOnUiThread(reference, runnable.reference).check(); + void runOnUiThread( + jni.JObject runnable, + ) { + return _runOnUiThread(reference, runnable.reference).check(); + } static final _onCreateView = jniLookup< ffi.NativeFunction< @@ -9379,12 +11824,16 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public android.view.View onCreateView(java.lang.String string, android.content.Context context, android.util.AttributeSet attributeSet) - /// The returned object must be deleted after use, by calling the `delete` method. + /// The returned object must be released after use, by calling the [release] method. jni.JObject onCreateView( - jni.JString string, Context context, jni.JObject attributeSet) => - const jni.JObjectType().fromRef(_onCreateView(reference, string.reference, - context.reference, attributeSet.reference) - .object); + jni.JString string, + Context context, + jni.JObject attributeSet, + ) { + return const jni.JObjectType().fromRef(_onCreateView(reference, + string.reference, context.reference, attributeSet.reference) + .object); + } static final _onCreateView1 = jniLookup< ffi.NativeFunction< @@ -9403,12 +11852,21 @@ class Activity extends jni.JObject { ffi.Pointer)>(); /// from: public android.view.View onCreateView(android.view.View view, java.lang.String string, android.content.Context context, android.util.AttributeSet attributeSet) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject onCreateView1(jni.JObject view, jni.JString string, - Context context, jni.JObject attributeSet) => - const jni.JObjectType().fromRef(_onCreateView1(reference, view.reference, - string.reference, context.reference, attributeSet.reference) - .object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject onCreateView1( + jni.JObject view, + jni.JString string, + Context context, + jni.JObject attributeSet, + ) { + return const jni.JObjectType().fromRef(_onCreateView1( + reference, + view.reference, + string.reference, + context.reference, + attributeSet.reference) + .object); + } static final _dump = jniLookup< ffi.NativeFunction< @@ -9427,20 +11885,27 @@ class Activity extends jni.JObject { ffi.Pointer)>(); /// from: public void dump(java.lang.String string, java.io.FileDescriptor fileDescriptor, java.io.PrintWriter printWriter, java.lang.String[] strings) - void dump(jni.JString string, jni.JObject fileDescriptor, - jni.JObject printWriter, jni.JArray strings) => - _dump(reference, string.reference, fileDescriptor.reference, - printWriter.reference, strings.reference) - .check(); + void dump( + jni.JString string, + jni.JObject fileDescriptor, + jni.JObject printWriter, + jni.JArray strings, + ) { + return _dump(reference, string.reference, fileDescriptor.reference, + printWriter.reference, strings.reference) + .check(); + } static final _isImmersive = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__isImmersive") + ffi + .NativeFunction)>>( + "Activity__isImmersive") .asFunction)>(); /// from: public boolean isImmersive() - bool isImmersive() => _isImmersive(reference).boolean; + bool isImmersive() { + return _isImmersive(reference).boolean; + } static final _setTranslucent = jniLookup< ffi.NativeFunction< @@ -9449,7 +11914,11 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public boolean setTranslucent(boolean z) - bool setTranslucent(bool z) => _setTranslucent(reference, z ? 1 : 0).boolean; + bool setTranslucent( + bool z, + ) { + return _setTranslucent(reference, z ? 1 : 0).boolean; + } static final _requestVisibleBehind = jniLookup< ffi.NativeFunction< @@ -9458,27 +11927,33 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public boolean requestVisibleBehind(boolean z) - bool requestVisibleBehind(bool z) => - _requestVisibleBehind(reference, z ? 1 : 0).boolean; + bool requestVisibleBehind( + bool z, + ) { + return _requestVisibleBehind(reference, z ? 1 : 0).boolean; + } static final _onVisibleBehindCanceled = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__onVisibleBehindCanceled") + ffi + .NativeFunction)>>( + "Activity__onVisibleBehindCanceled") .asFunction)>(); /// from: public void onVisibleBehindCanceled() - void onVisibleBehindCanceled() => _onVisibleBehindCanceled(reference).check(); + void onVisibleBehindCanceled() { + return _onVisibleBehindCanceled(reference).check(); + } static final _onEnterAnimationComplete = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__onEnterAnimationComplete") + ffi + .NativeFunction)>>( + "Activity__onEnterAnimationComplete") .asFunction)>(); /// from: public void onEnterAnimationComplete() - void onEnterAnimationComplete() => - _onEnterAnimationComplete(reference).check(); + void onEnterAnimationComplete() { + return _onEnterAnimationComplete(reference).check(); + } static final _setImmersive = jniLookup< ffi.NativeFunction< @@ -9487,7 +11962,11 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public void setImmersive(boolean z) - void setImmersive(bool z) => _setImmersive(reference, z ? 1 : 0).check(); + void setImmersive( + bool z, + ) { + return _setImmersive(reference, z ? 1 : 0).check(); + } static final _setVrModeEnabled = jniLookup< ffi.NativeFunction< @@ -9498,8 +11977,13 @@ class Activity extends jni.JObject { ffi.Pointer, int, ffi.Pointer)>(); /// from: public void setVrModeEnabled(boolean z, android.content.ComponentName componentName) - void setVrModeEnabled(bool z, jni.JObject componentName) => - _setVrModeEnabled(reference, z ? 1 : 0, componentName.reference).check(); + void setVrModeEnabled( + bool z, + jni.JObject componentName, + ) { + return _setVrModeEnabled(reference, z ? 1 : 0, componentName.reference) + .check(); + } static final _startActionMode = jniLookup< ffi.NativeFunction< @@ -9510,9 +11994,13 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public android.view.ActionMode startActionMode(android.view.ActionMode$Callback callback) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject startActionMode(jni.JObject callback) => const jni.JObjectType() - .fromRef(_startActionMode(reference, callback.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject startActionMode( + jni.JObject callback, + ) { + return const jni.JObjectType() + .fromRef(_startActionMode(reference, callback.reference).object); + } static final _startActionMode1 = jniLookup< ffi.NativeFunction< @@ -9525,10 +12013,14 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer, int)>(); /// from: public android.view.ActionMode startActionMode(android.view.ActionMode$Callback callback, int i) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject startActionMode1(jni.JObject callback, int i) => - const jni.JObjectType() - .fromRef(_startActionMode1(reference, callback.reference, i).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject startActionMode1( + jni.JObject callback, + int i, + ) { + return const jni.JObjectType() + .fromRef(_startActionMode1(reference, callback.reference, i).object); + } static final _onWindowStartingActionMode = jniLookup< ffi.NativeFunction< @@ -9540,10 +12032,13 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public android.view.ActionMode onWindowStartingActionMode(android.view.ActionMode$Callback callback) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject onWindowStartingActionMode(jni.JObject callback) => - const jni.JObjectType().fromRef( - _onWindowStartingActionMode(reference, callback.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject onWindowStartingActionMode( + jni.JObject callback, + ) { + return const jni.JObjectType().fromRef( + _onWindowStartingActionMode(reference, callback.reference).object); + } static final _onWindowStartingActionMode1 = jniLookup< ffi.NativeFunction< @@ -9556,11 +12051,14 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer, int)>(); /// from: public android.view.ActionMode onWindowStartingActionMode(android.view.ActionMode$Callback callback, int i) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject onWindowStartingActionMode1(jni.JObject callback, int i) => - const jni.JObjectType().fromRef( - _onWindowStartingActionMode1(reference, callback.reference, i) - .object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject onWindowStartingActionMode1( + jni.JObject callback, + int i, + ) { + return const jni.JObjectType().fromRef( + _onWindowStartingActionMode1(reference, callback.reference, i).object); + } static final _onActionModeStarted = jniLookup< ffi.NativeFunction< @@ -9571,8 +12069,11 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void onActionModeStarted(android.view.ActionMode actionMode) - void onActionModeStarted(jni.JObject actionMode) => - _onActionModeStarted(reference, actionMode.reference).check(); + void onActionModeStarted( + jni.JObject actionMode, + ) { + return _onActionModeStarted(reference, actionMode.reference).check(); + } static final _onActionModeFinished = jniLookup< ffi.NativeFunction< @@ -9583,8 +12084,11 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void onActionModeFinished(android.view.ActionMode actionMode) - void onActionModeFinished(jni.JObject actionMode) => - _onActionModeFinished(reference, actionMode.reference).check(); + void onActionModeFinished( + jni.JObject actionMode, + ) { + return _onActionModeFinished(reference, actionMode.reference).check(); + } static final _shouldUpRecreateTask = jniLookup< ffi.NativeFunction< @@ -9595,8 +12099,11 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public boolean shouldUpRecreateTask(android.content.Intent intent) - bool shouldUpRecreateTask(Intent intent) => - _shouldUpRecreateTask(reference, intent.reference).boolean; + bool shouldUpRecreateTask( + Intent intent, + ) { + return _shouldUpRecreateTask(reference, intent.reference).boolean; + } static final _navigateUpTo = jniLookup< ffi.NativeFunction< @@ -9607,8 +12114,11 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public boolean navigateUpTo(android.content.Intent intent) - bool navigateUpTo(Intent intent) => - _navigateUpTo(reference, intent.reference).boolean; + bool navigateUpTo( + Intent intent, + ) { + return _navigateUpTo(reference, intent.reference).boolean; + } static final _navigateUpToFromChild = jniLookup< ffi.NativeFunction< @@ -9621,20 +12131,27 @@ class Activity extends jni.JObject { ffi.Pointer)>(); /// from: public boolean navigateUpToFromChild(android.app.Activity activity, android.content.Intent intent) - bool navigateUpToFromChild(Activity activity, Intent intent) => - _navigateUpToFromChild(reference, activity.reference, intent.reference) - .boolean; + bool navigateUpToFromChild( + Activity activity, + Intent intent, + ) { + return _navigateUpToFromChild( + reference, activity.reference, intent.reference) + .boolean; + } static final _getParentActivityIntent = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__getParentActivityIntent") + ffi + .NativeFunction)>>( + "Activity__getParentActivityIntent") .asFunction)>(); /// from: public android.content.Intent getParentActivityIntent() - /// The returned object must be deleted after use, by calling the `delete` method. - Intent getParentActivityIntent() => - const $IntentType().fromRef(_getParentActivityIntent(reference).object); + /// The returned object must be released after use, by calling the [release] method. + Intent getParentActivityIntent() { + return const $IntentType() + .fromRef(_getParentActivityIntent(reference).object); + } static final _setEnterSharedElementCallback = jniLookup< ffi.NativeFunction< @@ -9646,9 +12163,13 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void setEnterSharedElementCallback(android.app.SharedElementCallback sharedElementCallback) - void setEnterSharedElementCallback(jni.JObject sharedElementCallback) => - _setEnterSharedElementCallback(reference, sharedElementCallback.reference) - .check(); + void setEnterSharedElementCallback( + jni.JObject sharedElementCallback, + ) { + return _setEnterSharedElementCallback( + reference, sharedElementCallback.reference) + .check(); + } static final _setExitSharedElementCallback = jniLookup< ffi.NativeFunction< @@ -9660,28 +12181,35 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public void setExitSharedElementCallback(android.app.SharedElementCallback sharedElementCallback) - void setExitSharedElementCallback(jni.JObject sharedElementCallback) => - _setExitSharedElementCallback(reference, sharedElementCallback.reference) - .check(); + void setExitSharedElementCallback( + jni.JObject sharedElementCallback, + ) { + return _setExitSharedElementCallback( + reference, sharedElementCallback.reference) + .check(); + } static final _postponeEnterTransition = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__postponeEnterTransition") + ffi + .NativeFunction)>>( + "Activity__postponeEnterTransition") .asFunction)>(); /// from: public void postponeEnterTransition() - void postponeEnterTransition() => _postponeEnterTransition(reference).check(); + void postponeEnterTransition() { + return _postponeEnterTransition(reference).check(); + } static final _startPostponedEnterTransition = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>( + ffi + .NativeFunction)>>( "Activity__startPostponedEnterTransition") .asFunction)>(); /// from: public void startPostponedEnterTransition() - void startPostponedEnterTransition() => - _startPostponedEnterTransition(reference).check(); + void startPostponedEnterTransition() { + return _startPostponedEnterTransition(reference).check(); + } static final _requestDragAndDropPermissions = jniLookup< ffi.NativeFunction< @@ -9693,39 +12221,46 @@ class Activity extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public android.view.DragAndDropPermissions requestDragAndDropPermissions(android.view.DragEvent dragEvent) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject requestDragAndDropPermissions(jni.JObject dragEvent) => - const jni.JObjectType().fromRef( - _requestDragAndDropPermissions(reference, dragEvent.reference) - .object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject requestDragAndDropPermissions( + jni.JObject dragEvent, + ) { + return const jni.JObjectType().fromRef( + _requestDragAndDropPermissions(reference, dragEvent.reference).object); + } static final _startLockTask = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__startLockTask") + ffi + .NativeFunction)>>( + "Activity__startLockTask") .asFunction)>(); /// from: public void startLockTask() - void startLockTask() => _startLockTask(reference).check(); + void startLockTask() { + return _startLockTask(reference).check(); + } static final _stopLockTask = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Activity__stopLockTask") + ffi + .NativeFunction)>>( + "Activity__stopLockTask") .asFunction)>(); /// from: public void stopLockTask() - void stopLockTask() => _stopLockTask(reference).check(); + void stopLockTask() { + return _stopLockTask(reference).check(); + } static final _showLockTaskEscapeMessage = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>( + ffi + .NativeFunction)>>( "Activity__showLockTaskEscapeMessage") .asFunction)>(); /// from: public void showLockTaskEscapeMessage() - void showLockTaskEscapeMessage() => - _showLockTaskEscapeMessage(reference).check(); + void showLockTaskEscapeMessage() { + return _showLockTaskEscapeMessage(reference).check(); + } static final _setRecentsScreenshotEnabled = jniLookup< ffi.NativeFunction< @@ -9734,8 +12269,11 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public void setRecentsScreenshotEnabled(boolean z) - void setRecentsScreenshotEnabled(bool z) => - _setRecentsScreenshotEnabled(reference, z ? 1 : 0).check(); + void setRecentsScreenshotEnabled( + bool z, + ) { + return _setRecentsScreenshotEnabled(reference, z ? 1 : 0).check(); + } static final _setShowWhenLocked = jniLookup< ffi.NativeFunction< @@ -9744,8 +12282,11 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public void setShowWhenLocked(boolean z) - void setShowWhenLocked(bool z) => - _setShowWhenLocked(reference, z ? 1 : 0).check(); + void setShowWhenLocked( + bool z, + ) { + return _setShowWhenLocked(reference, z ? 1 : 0).check(); + } static final _setInheritShowWhenLocked = jniLookup< ffi.NativeFunction< @@ -9754,8 +12295,11 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public void setInheritShowWhenLocked(boolean z) - void setInheritShowWhenLocked(bool z) => - _setInheritShowWhenLocked(reference, z ? 1 : 0).check(); + void setInheritShowWhenLocked( + bool z, + ) { + return _setInheritShowWhenLocked(reference, z ? 1 : 0).check(); + } static final _setTurnScreenOn = jniLookup< ffi.NativeFunction< @@ -9764,19 +12308,24 @@ class Activity extends jni.JObject { .asFunction, int)>(); /// from: public void setTurnScreenOn(boolean z) - void setTurnScreenOn(bool z) => - _setTurnScreenOn(reference, z ? 1 : 0).check(); + void setTurnScreenOn( + bool z, + ) { + return _setTurnScreenOn(reference, z ? 1 : 0).check(); + } static final _getOnBackInvokedDispatcher = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>( + ffi + .NativeFunction)>>( "Activity__getOnBackInvokedDispatcher") .asFunction)>(); /// from: public android.window.OnBackInvokedDispatcher getOnBackInvokedDispatcher() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject getOnBackInvokedDispatcher() => const jni.JObjectType() - .fromRef(_getOnBackInvokedDispatcher(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject getOnBackInvokedDispatcher() { + return const jni.JObjectType() + .fromRef(_getOnBackInvokedDispatcher(reference).object); + } } class $ActivityType extends jni.JObjType { @@ -9787,39 +12336,38 @@ class $ActivityType extends jni.JObjType { @override Activity fromRef(jni.JObjectPtr ref) => Activity.fromRef(ref); -} -extension $ActivityArray on jni.JArray { - Activity operator [](int index) { - return (elementType as $ActivityType) - .fromRef(elementAt(index, jni.JniCallType.objectType).object); - } + @override + jni.JObjType get superType => const jni.JObjectType(); - void operator []=(int index, Activity value) { - (this as jni.JArray)[index] = value; + @override + final superCount = 1; + + @override + int get hashCode => ($ActivityType).hashCode; + + @override + bool operator ==(Object other) { + return other.runtimeType == ($ActivityType) && other is $ActivityType; } } /// from: java.time.Instant class Instant extends jni.JObject { - late final jni.JObjType? _$type; @override - jni.JObjType get $type => _$type ??= type; + late final jni.JObjType $type = type; - Instant.fromRef( - jni.JObjectPtr ref, - ) : super.fromRef(ref); + Instant.fromRef(super.ref) : super.fromRef(); /// The type which includes information such as the signature of this class. static const type = $InstantType(); - static final _get_EPOCH = jniLookup>( "get_Instant__EPOCH") .asFunction(); /// from: static public final java.time.Instant EPOCH - /// The returned object must be deleted after use, by calling the `delete` method. + /// The returned object must be released after use, by calling the [release] method. static Instant get EPOCH => const $InstantType().fromRef(_get_EPOCH().object); static final _get_MAX = @@ -9828,7 +12376,7 @@ class Instant extends jni.JObject { .asFunction(); /// from: static public final java.time.Instant MAX - /// The returned object must be deleted after use, by calling the `delete` method. + /// The returned object must be released after use, by calling the [release] method. static Instant get MAX => const $InstantType().fromRef(_get_MAX().object); static final _get_MIN = @@ -9837,7 +12385,7 @@ class Instant extends jni.JObject { .asFunction(); /// from: static public final java.time.Instant MIN - /// The returned object must be deleted after use, by calling the `delete` method. + /// The returned object must be released after use, by calling the [release] method. static Instant get MIN => const $InstantType().fromRef(_get_MIN().object); static final _now = @@ -9845,18 +12393,24 @@ class Instant extends jni.JObject { .asFunction(); /// from: static public java.time.Instant now() - /// The returned object must be deleted after use, by calling the `delete` method. - static Instant now() => const $InstantType().fromRef(_now().object); + /// The returned object must be released after use, by calling the [release] method. + static Instant now() { + return const $InstantType().fromRef(_now().object); + } static final _now1 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>("Instant__now1") + ffi + .NativeFunction)>>( + "Instant__now1") .asFunction)>(); /// from: static public java.time.Instant now(java.time.Clock clock) - /// The returned object must be deleted after use, by calling the `delete` method. - static Instant now1(jni.JObject clock) => - const $InstantType().fromRef(_now1(clock.reference).object); + /// The returned object must be released after use, by calling the [release] method. + static Instant now1( + jni.JObject clock, + ) { + return const $InstantType().fromRef(_now1(clock.reference).object); + } static final _ofEpochSecond = jniLookup>( @@ -9864,9 +12418,12 @@ class Instant extends jni.JObject { .asFunction(); /// from: static public java.time.Instant ofEpochSecond(long j) - /// The returned object must be deleted after use, by calling the `delete` method. - static Instant ofEpochSecond(int j) => - const $InstantType().fromRef(_ofEpochSecond(j).object); + /// The returned object must be released after use, by calling the [release] method. + static Instant ofEpochSecond( + int j, + ) { + return const $InstantType().fromRef(_ofEpochSecond(j).object); + } static final _ofEpochSecond1 = jniLookup< ffi.NativeFunction>( @@ -9874,9 +12431,13 @@ class Instant extends jni.JObject { .asFunction(); /// from: static public java.time.Instant ofEpochSecond(long j, long j1) - /// The returned object must be deleted after use, by calling the `delete` method. - static Instant ofEpochSecond1(int j, int j1) => - const $InstantType().fromRef(_ofEpochSecond1(j, j1).object); + /// The returned object must be released after use, by calling the [release] method. + static Instant ofEpochSecond1( + int j, + int j1, + ) { + return const $InstantType().fromRef(_ofEpochSecond1(j, j1).object); + } static final _ofEpochMilli = jniLookup>( @@ -9884,29 +12445,41 @@ class Instant extends jni.JObject { .asFunction(); /// from: static public java.time.Instant ofEpochMilli(long j) - /// The returned object must be deleted after use, by calling the `delete` method. - static Instant ofEpochMilli(int j) => - const $InstantType().fromRef(_ofEpochMilli(j).object); + /// The returned object must be released after use, by calling the [release] method. + static Instant ofEpochMilli( + int j, + ) { + return const $InstantType().fromRef(_ofEpochMilli(j).object); + } static final _from = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>("Instant__from") + ffi + .NativeFunction)>>( + "Instant__from") .asFunction)>(); /// from: static public java.time.Instant from(java.time.temporal.TemporalAccessor temporalAccessor) - /// The returned object must be deleted after use, by calling the `delete` method. - static Instant from(jni.JObject temporalAccessor) => - const $InstantType().fromRef(_from(temporalAccessor.reference).object); + /// The returned object must be released after use, by calling the [release] method. + static Instant from( + jni.JObject temporalAccessor, + ) { + return const $InstantType() + .fromRef(_from(temporalAccessor.reference).object); + } static final _parse = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>("Instant__parse") + ffi + .NativeFunction)>>( + "Instant__parse") .asFunction)>(); /// from: static public java.time.Instant parse(java.lang.CharSequence charSequence) - /// The returned object must be deleted after use, by calling the `delete` method. - static Instant parse(jni.JObject charSequence) => - const $InstantType().fromRef(_parse(charSequence.reference).object); + /// The returned object must be released after use, by calling the [release] method. + static Instant parse( + jni.JObject charSequence, + ) { + return const $InstantType().fromRef(_parse(charSequence.reference).object); + } static final _isSupported = jniLookup< ffi.NativeFunction< @@ -9917,8 +12490,11 @@ class Instant extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public boolean isSupported(java.time.temporal.TemporalField temporalField) - bool isSupported(jni.JObject temporalField) => - _isSupported(reference, temporalField.reference).boolean; + bool isSupported( + jni.JObject temporalField, + ) { + return _isSupported(reference, temporalField.reference).boolean; + } static final _isSupported1 = jniLookup< ffi.NativeFunction< @@ -9929,8 +12505,11 @@ class Instant extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public boolean isSupported(java.time.temporal.TemporalUnit temporalUnit) - bool isSupported1(jni.JObject temporalUnit) => - _isSupported1(reference, temporalUnit.reference).boolean; + bool isSupported1( + jni.JObject temporalUnit, + ) { + return _isSupported1(reference, temporalUnit.reference).boolean; + } static final _range = jniLookup< ffi.NativeFunction< @@ -9941,9 +12520,13 @@ class Instant extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public java.time.temporal.ValueRange range(java.time.temporal.TemporalField temporalField) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject range(jni.JObject temporalField) => const jni.JObjectType() - .fromRef(_range(reference, temporalField.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject range( + jni.JObject temporalField, + ) { + return const jni.JObjectType() + .fromRef(_range(reference, temporalField.reference).object); + } static final _get0 = jniLookup< ffi.NativeFunction< @@ -9954,8 +12537,11 @@ class Instant extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public int get(java.time.temporal.TemporalField temporalField) - int get0(jni.JObject temporalField) => - _get0(reference, temporalField.reference).integer; + int get0( + jni.JObject temporalField, + ) { + return _get0(reference, temporalField.reference).integer; + } static final _getLong = jniLookup< ffi.NativeFunction< @@ -9966,26 +12552,33 @@ class Instant extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public long getLong(java.time.temporal.TemporalField temporalField) - int getLong(jni.JObject temporalField) => - _getLong(reference, temporalField.reference).long; + int getLong( + jni.JObject temporalField, + ) { + return _getLong(reference, temporalField.reference).long; + } static final _getEpochSecond = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Instant__getEpochSecond") + ffi + .NativeFunction)>>( + "Instant__getEpochSecond") .asFunction)>(); /// from: public long getEpochSecond() - int getEpochSecond() => _getEpochSecond(reference).long; + int getEpochSecond() { + return _getEpochSecond(reference).long; + } static final _getNano = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Instant__getNano") + ffi + .NativeFunction)>>( + "Instant__getNano") .asFunction)>(); /// from: public int getNano() - int getNano() => _getNano(reference).integer; + int getNano() { + return _getNano(reference).integer; + } static final _with0 = jniLookup< ffi.NativeFunction< @@ -9996,9 +12589,13 @@ class Instant extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public java.time.Instant with(java.time.temporal.TemporalAdjuster temporalAdjuster) - /// The returned object must be deleted after use, by calling the `delete` method. - Instant with0(jni.JObject temporalAdjuster) => const $InstantType() - .fromRef(_with0(reference, temporalAdjuster.reference).object); + /// The returned object must be released after use, by calling the [release] method. + Instant with0( + jni.JObject temporalAdjuster, + ) { + return const $InstantType() + .fromRef(_with0(reference, temporalAdjuster.reference).object); + } static final _with1 = jniLookup< ffi.NativeFunction< @@ -10009,9 +12606,14 @@ class Instant extends jni.JObject { ffi.Pointer, ffi.Pointer, int)>(); /// from: public java.time.Instant with(java.time.temporal.TemporalField temporalField, long j) - /// The returned object must be deleted after use, by calling the `delete` method. - Instant with1(jni.JObject temporalField, int j) => const $InstantType() - .fromRef(_with1(reference, temporalField.reference, j).object); + /// The returned object must be released after use, by calling the [release] method. + Instant with1( + jni.JObject temporalField, + int j, + ) { + return const $InstantType() + .fromRef(_with1(reference, temporalField.reference, j).object); + } static final _truncatedTo = jniLookup< ffi.NativeFunction< @@ -10022,9 +12624,13 @@ class Instant extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public java.time.Instant truncatedTo(java.time.temporal.TemporalUnit temporalUnit) - /// The returned object must be deleted after use, by calling the `delete` method. - Instant truncatedTo(jni.JObject temporalUnit) => const $InstantType() - .fromRef(_truncatedTo(reference, temporalUnit.reference).object); + /// The returned object must be released after use, by calling the [release] method. + Instant truncatedTo( + jni.JObject temporalUnit, + ) { + return const $InstantType() + .fromRef(_truncatedTo(reference, temporalUnit.reference).object); + } static final _plus = jniLookup< ffi.NativeFunction< @@ -10035,9 +12641,13 @@ class Instant extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public java.time.Instant plus(java.time.temporal.TemporalAmount temporalAmount) - /// The returned object must be deleted after use, by calling the `delete` method. - Instant plus(jni.JObject temporalAmount) => const $InstantType() - .fromRef(_plus(reference, temporalAmount.reference).object); + /// The returned object must be released after use, by calling the [release] method. + Instant plus( + jni.JObject temporalAmount, + ) { + return const $InstantType() + .fromRef(_plus(reference, temporalAmount.reference).object); + } static final _plus1 = jniLookup< ffi.NativeFunction< @@ -10048,9 +12658,14 @@ class Instant extends jni.JObject { ffi.Pointer, int, ffi.Pointer)>(); /// from: public java.time.Instant plus(long j, java.time.temporal.TemporalUnit temporalUnit) - /// The returned object must be deleted after use, by calling the `delete` method. - Instant plus1(int j, jni.JObject temporalUnit) => const $InstantType() - .fromRef(_plus1(reference, j, temporalUnit.reference).object); + /// The returned object must be released after use, by calling the [release] method. + Instant plus1( + int j, + jni.JObject temporalUnit, + ) { + return const $InstantType() + .fromRef(_plus1(reference, j, temporalUnit.reference).object); + } static final _plusSeconds = jniLookup< ffi.NativeFunction< @@ -10059,9 +12674,12 @@ class Instant extends jni.JObject { .asFunction, int)>(); /// from: public java.time.Instant plusSeconds(long j) - /// The returned object must be deleted after use, by calling the `delete` method. - Instant plusSeconds(int j) => - const $InstantType().fromRef(_plusSeconds(reference, j).object); + /// The returned object must be released after use, by calling the [release] method. + Instant plusSeconds( + int j, + ) { + return const $InstantType().fromRef(_plusSeconds(reference, j).object); + } static final _plusMillis = jniLookup< ffi.NativeFunction< @@ -10070,9 +12688,12 @@ class Instant extends jni.JObject { .asFunction, int)>(); /// from: public java.time.Instant plusMillis(long j) - /// The returned object must be deleted after use, by calling the `delete` method. - Instant plusMillis(int j) => - const $InstantType().fromRef(_plusMillis(reference, j).object); + /// The returned object must be released after use, by calling the [release] method. + Instant plusMillis( + int j, + ) { + return const $InstantType().fromRef(_plusMillis(reference, j).object); + } static final _plusNanos = jniLookup< ffi.NativeFunction< @@ -10081,9 +12702,12 @@ class Instant extends jni.JObject { .asFunction, int)>(); /// from: public java.time.Instant plusNanos(long j) - /// The returned object must be deleted after use, by calling the `delete` method. - Instant plusNanos(int j) => - const $InstantType().fromRef(_plusNanos(reference, j).object); + /// The returned object must be released after use, by calling the [release] method. + Instant plusNanos( + int j, + ) { + return const $InstantType().fromRef(_plusNanos(reference, j).object); + } static final _minus = jniLookup< ffi.NativeFunction< @@ -10094,9 +12718,13 @@ class Instant extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public java.time.Instant minus(java.time.temporal.TemporalAmount temporalAmount) - /// The returned object must be deleted after use, by calling the `delete` method. - Instant minus(jni.JObject temporalAmount) => const $InstantType() - .fromRef(_minus(reference, temporalAmount.reference).object); + /// The returned object must be released after use, by calling the [release] method. + Instant minus( + jni.JObject temporalAmount, + ) { + return const $InstantType() + .fromRef(_minus(reference, temporalAmount.reference).object); + } static final _minus1 = jniLookup< ffi.NativeFunction< @@ -10107,9 +12735,14 @@ class Instant extends jni.JObject { ffi.Pointer, int, ffi.Pointer)>(); /// from: public java.time.Instant minus(long j, java.time.temporal.TemporalUnit temporalUnit) - /// The returned object must be deleted after use, by calling the `delete` method. - Instant minus1(int j, jni.JObject temporalUnit) => const $InstantType() - .fromRef(_minus1(reference, j, temporalUnit.reference).object); + /// The returned object must be released after use, by calling the [release] method. + Instant minus1( + int j, + jni.JObject temporalUnit, + ) { + return const $InstantType() + .fromRef(_minus1(reference, j, temporalUnit.reference).object); + } static final _minusSeconds = jniLookup< ffi.NativeFunction< @@ -10118,9 +12751,12 @@ class Instant extends jni.JObject { .asFunction, int)>(); /// from: public java.time.Instant minusSeconds(long j) - /// The returned object must be deleted after use, by calling the `delete` method. - Instant minusSeconds(int j) => - const $InstantType().fromRef(_minusSeconds(reference, j).object); + /// The returned object must be released after use, by calling the [release] method. + Instant minusSeconds( + int j, + ) { + return const $InstantType().fromRef(_minusSeconds(reference, j).object); + } static final _minusMillis = jniLookup< ffi.NativeFunction< @@ -10129,9 +12765,12 @@ class Instant extends jni.JObject { .asFunction, int)>(); /// from: public java.time.Instant minusMillis(long j) - /// The returned object must be deleted after use, by calling the `delete` method. - Instant minusMillis(int j) => - const $InstantType().fromRef(_minusMillis(reference, j).object); + /// The returned object must be released after use, by calling the [release] method. + Instant minusMillis( + int j, + ) { + return const $InstantType().fromRef(_minusMillis(reference, j).object); + } static final _minusNanos = jniLookup< ffi.NativeFunction< @@ -10140,9 +12779,12 @@ class Instant extends jni.JObject { .asFunction, int)>(); /// from: public java.time.Instant minusNanos(long j) - /// The returned object must be deleted after use, by calling the `delete` method. - Instant minusNanos(int j) => - const $InstantType().fromRef(_minusNanos(reference, j).object); + /// The returned object must be released after use, by calling the [release] method. + Instant minusNanos( + int j, + ) { + return const $InstantType().fromRef(_minusNanos(reference, j).object); + } static final _query = jniLookup< ffi.NativeFunction< @@ -10153,10 +12795,13 @@ class Instant extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public R query(java.time.temporal.TemporalQuery temporalQuery) - /// The returned object must be deleted after use, by calling the `delete` method. - R query( - jni.JObjType $R, jni.JObject temporalQuery) => - $R.fromRef(_query(reference, temporalQuery.reference).object); + /// The returned object must be released after use, by calling the [release] method. + $R query<$R extends jni.JObject>( + jni.JObject temporalQuery, { + required jni.JObjType<$R> R, + }) { + return R.fromRef(_query(reference, temporalQuery.reference).object); + } static final _adjustInto = jniLookup< ffi.NativeFunction< @@ -10167,9 +12812,13 @@ class Instant extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public java.time.temporal.Temporal adjustInto(java.time.temporal.Temporal temporal) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject adjustInto(jni.JObject temporal) => const jni.JObjectType() - .fromRef(_adjustInto(reference, temporal.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject adjustInto( + jni.JObject temporal, + ) { + return const jni.JObjectType() + .fromRef(_adjustInto(reference, temporal.reference).object); + } static final _until = jniLookup< ffi.NativeFunction< @@ -10182,8 +12831,12 @@ class Instant extends jni.JObject { ffi.Pointer)>(); /// from: public long until(java.time.temporal.Temporal temporal, java.time.temporal.TemporalUnit temporalUnit) - int until(jni.JObject temporal, jni.JObject temporalUnit) => - _until(reference, temporal.reference, temporalUnit.reference).long; + int until( + jni.JObject temporal, + jni.JObject temporalUnit, + ) { + return _until(reference, temporal.reference, temporalUnit.reference).long; + } static final _atOffset = jniLookup< ffi.NativeFunction< @@ -10194,9 +12847,13 @@ class Instant extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public java.time.OffsetDateTime atOffset(java.time.ZoneOffset zoneOffset) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject atOffset(jni.JObject zoneOffset) => const jni.JObjectType() - .fromRef(_atOffset(reference, zoneOffset.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject atOffset( + jni.JObject zoneOffset, + ) { + return const jni.JObjectType() + .fromRef(_atOffset(reference, zoneOffset.reference).object); + } static final _atZone = jniLookup< ffi.NativeFunction< @@ -10207,18 +12864,24 @@ class Instant extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public java.time.ZonedDateTime atZone(java.time.ZoneId zoneId) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject atZone(jni.JObject zoneId) => const jni.JObjectType() - .fromRef(_atZone(reference, zoneId.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject atZone( + jni.JObject zoneId, + ) { + return const jni.JObjectType() + .fromRef(_atZone(reference, zoneId.reference).object); + } static final _toEpochMilli = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Instant__toEpochMilli") + ffi + .NativeFunction)>>( + "Instant__toEpochMilli") .asFunction)>(); /// from: public long toEpochMilli() - int toEpochMilli() => _toEpochMilli(reference).long; + int toEpochMilli() { + return _toEpochMilli(reference).long; + } static final _compareTo = jniLookup< ffi.NativeFunction< @@ -10229,8 +12892,11 @@ class Instant extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public int compareTo(java.time.Instant instant) - int compareTo(Instant instant) => - _compareTo(reference, instant.reference).integer; + int compareTo( + Instant instant, + ) { + return _compareTo(reference, instant.reference).integer; + } static final _isAfter = jniLookup< ffi.NativeFunction< @@ -10241,8 +12907,11 @@ class Instant extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public boolean isAfter(java.time.Instant instant) - bool isAfter(Instant instant) => - _isAfter(reference, instant.reference).boolean; + bool isAfter( + Instant instant, + ) { + return _isAfter(reference, instant.reference).boolean; + } static final _isBefore = jniLookup< ffi.NativeFunction< @@ -10253,8 +12922,11 @@ class Instant extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public boolean isBefore(java.time.Instant instant) - bool isBefore(Instant instant) => - _isBefore(reference, instant.reference).boolean; + bool isBefore( + Instant instant, + ) { + return _isBefore(reference, instant.reference).boolean; + } static final _equals1 = jniLookup< ffi.NativeFunction< @@ -10265,28 +12937,34 @@ class Instant extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public boolean equals(java.lang.Object object) - bool equals1(jni.JObject object) => - _equals1(reference, object.reference).boolean; + bool equals1( + jni.JObject object, + ) { + return _equals1(reference, object.reference).boolean; + } static final _hashCode1 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Instant__hashCode1") + ffi + .NativeFunction)>>( + "Instant__hashCode1") .asFunction)>(); /// from: public int hashCode() - int hashCode1() => _hashCode1(reference).integer; + int hashCode1() { + return _hashCode1(reference).integer; + } static final _toString1 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Instant__toString1") + ffi + .NativeFunction)>>( + "Instant__toString1") .asFunction)>(); /// from: public java.lang.String toString() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JString toString1() => - const jni.JStringType().fromRef(_toString1(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JString toString1() { + return const jni.JStringType().fromRef(_toString1(reference).object); + } static final _minus2 = jniLookup< ffi.NativeFunction< @@ -10297,9 +12975,14 @@ class Instant extends jni.JObject { ffi.Pointer, int, ffi.Pointer)>(); /// from: public java.time.temporal.Temporal minus(long j, java.time.temporal.TemporalUnit temporalUnit) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject minus2(int j, jni.JObject temporalUnit) => const jni.JObjectType() - .fromRef(_minus2(reference, j, temporalUnit.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject minus2( + int j, + jni.JObject temporalUnit, + ) { + return const jni.JObjectType() + .fromRef(_minus2(reference, j, temporalUnit.reference).object); + } static final _minus3 = jniLookup< ffi.NativeFunction< @@ -10310,9 +12993,13 @@ class Instant extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public java.time.temporal.Temporal minus(java.time.temporal.TemporalAmount temporalAmount) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject minus3(jni.JObject temporalAmount) => const jni.JObjectType() - .fromRef(_minus3(reference, temporalAmount.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject minus3( + jni.JObject temporalAmount, + ) { + return const jni.JObjectType() + .fromRef(_minus3(reference, temporalAmount.reference).object); + } static final _plus2 = jniLookup< ffi.NativeFunction< @@ -10323,9 +13010,14 @@ class Instant extends jni.JObject { ffi.Pointer, int, ffi.Pointer)>(); /// from: public java.time.temporal.Temporal plus(long j, java.time.temporal.TemporalUnit temporalUnit) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject plus2(int j, jni.JObject temporalUnit) => const jni.JObjectType() - .fromRef(_plus2(reference, j, temporalUnit.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject plus2( + int j, + jni.JObject temporalUnit, + ) { + return const jni.JObjectType() + .fromRef(_plus2(reference, j, temporalUnit.reference).object); + } static final _plus3 = jniLookup< ffi.NativeFunction< @@ -10336,9 +13028,13 @@ class Instant extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public java.time.temporal.Temporal plus(java.time.temporal.TemporalAmount temporalAmount) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject plus3(jni.JObject temporalAmount) => const jni.JObjectType() - .fromRef(_plus3(reference, temporalAmount.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject plus3( + jni.JObject temporalAmount, + ) { + return const jni.JObjectType() + .fromRef(_plus3(reference, temporalAmount.reference).object); + } static final _with2 = jniLookup< ffi.NativeFunction< @@ -10349,9 +13045,14 @@ class Instant extends jni.JObject { ffi.Pointer, ffi.Pointer, int)>(); /// from: public java.time.temporal.Temporal with(java.time.temporal.TemporalField temporalField, long j) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject with2(jni.JObject temporalField, int j) => const jni.JObjectType() - .fromRef(_with2(reference, temporalField.reference, j).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject with2( + jni.JObject temporalField, + int j, + ) { + return const jni.JObjectType() + .fromRef(_with2(reference, temporalField.reference, j).object); + } static final _with3 = jniLookup< ffi.NativeFunction< @@ -10362,9 +13063,13 @@ class Instant extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public java.time.temporal.Temporal with(java.time.temporal.TemporalAdjuster temporalAdjuster) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject with3(jni.JObject temporalAdjuster) => const jni.JObjectType() - .fromRef(_with3(reference, temporalAdjuster.reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JObject with3( + jni.JObject temporalAdjuster, + ) { + return const jni.JObjectType() + .fromRef(_with3(reference, temporalAdjuster.reference).object); + } static final _compareTo1 = jniLookup< ffi.NativeFunction< @@ -10375,8 +13080,11 @@ class Instant extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public int compareTo(java.lang.Object object) - int compareTo1(jni.JObject object) => - _compareTo1(reference, object.reference).integer; + int compareTo1( + jni.JObject object, + ) { + return _compareTo1(reference, object.reference).integer; + } } class $InstantType extends jni.JObjType { @@ -10387,1337 +13095,286 @@ class $InstantType extends jni.JObjType { @override Instant fromRef(jni.JObjectPtr ref) => Instant.fromRef(ref); -} -extension $InstantArray on jni.JArray { - Instant operator [](int index) { - return (elementType as $InstantType) - .fromRef(elementAt(index, jni.JniCallType.objectType).object); - } + @override + jni.JObjType get superType => const jni.JObjectType(); + + @override + final superCount = 1; + + @override + int get hashCode => ($InstantType).hashCode; - void operator []=(int index, Instant value) { - (this as jni.JArray)[index] = value; + @override + bool operator ==(Object other) { + return other.runtimeType == ($InstantType) && other is $InstantType; } } -/// from: java.lang.Long -class Long extends jni.JObject { - late final jni.JObjType? _$type; +/// from: androidx.health.connect.client.request.AggregateGroupByDurationRequest +class AggregateGroupByDurationRequest extends jni.JObject { @override - jni.JObjType get $type => _$type ??= type; + late final jni.JObjType $type = type; - Long.fromRef( - jni.JObjectPtr ref, - ) : super.fromRef(ref); + AggregateGroupByDurationRequest.fromRef(super.ref) : super.fromRef(); /// The type which includes information such as the signature of this class. - static const type = $LongType(); + static const type = $AggregateGroupByDurationRequestType(); + static final _new0 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>( + "AggregateGroupByDurationRequest__new0") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); - /// from: static public final int BYTES - static const BYTES = 8; + /// from: public void (java.util.Set set, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, java.time.Duration duration, java.util.Set set1) + /// The returned object must be released after use, by calling the [release] method. + factory AggregateGroupByDurationRequest( + jni.JSet> set0, + TimeRangeFilter timeRangeFilter, + jni.JObject duration, + jni.JSet set1, + ) { + return AggregateGroupByDurationRequest.fromRef(_new0(set0.reference, + timeRangeFilter.reference, duration.reference, set1.reference) + .object); + } - /// from: static public final long MAX_VALUE - static const MAX_VALUE = 9223372036854775807; + static final _new1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer)>>( + "AggregateGroupByDurationRequest__new1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer)>(); - /// from: static public final long MIN_VALUE - static const MIN_VALUE = -9223372036854775808; + /// from: public void (java.util.Set set, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, java.time.Duration duration, java.util.Set set1, int i, kotlin.jvm.internal.DefaultConstructorMarker defaultConstructorMarker) + /// The returned object must be released after use, by calling the [release] method. + factory AggregateGroupByDurationRequest.new1( + jni.JSet set0, + TimeRangeFilter timeRangeFilter, + jni.JObject duration, + jni.JSet set1, + int i, + jni.JObject defaultConstructorMarker, + ) { + return AggregateGroupByDurationRequest.fromRef(_new1( + set0.reference, + timeRangeFilter.reference, + duration.reference, + set1.reference, + i, + defaultConstructorMarker.reference) + .object); + } +} - /// from: static public final int SIZE - static const SIZE = 64; +class $AggregateGroupByDurationRequestType + extends jni.JObjType { + const $AggregateGroupByDurationRequestType(); - static final _get_TYPE = - jniLookup>("get_Long__TYPE") - .asFunction(); + @override + String get signature => + r"Landroidx/health/connect/client/request/AggregateGroupByDurationRequest;"; - /// from: static public final java.lang.Class TYPE - /// The returned object must be deleted after use, by calling the `delete` method. - static jni.JObject get TYPE => - const jni.JObjectType().fromRef(_get_TYPE().object); + @override + AggregateGroupByDurationRequest fromRef(jni.JObjectPtr ref) => + AggregateGroupByDurationRequest.fromRef(ref); - static final _ctor = - jniLookup>( - "Long__ctor") - .asFunction(); + @override + jni.JObjType get superType => const jni.JObjectType(); - /// from: public void (long j) - Long(int j) : super.fromRef(_ctor(j).object); + @override + final superCount = 1; - static final _ctor1 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>("Long__ctor1") - .asFunction)>(); + @override + int get hashCode => ($AggregateGroupByDurationRequestType).hashCode; - /// from: public void (java.lang.String string) - Long.ctor1(jni.JString string) - : super.fromRef(_ctor1(string.reference).object); + @override + bool operator ==(Object other) { + return other.runtimeType == ($AggregateGroupByDurationRequestType) && + other is $AggregateGroupByDurationRequestType; + } +} - static final _toString1 = jniLookup< - ffi.NativeFunction>( - "Long__toString1") - .asFunction(); +/// from: androidx.health.connect.client.request.AggregateGroupByPeriodRequest +class AggregateGroupByPeriodRequest extends jni.JObject { + @override + late final jni.JObjType $type = type; - /// from: static public java.lang.String toString(long j, int i) - /// The returned object must be deleted after use, by calling the `delete` method. - static jni.JString toString1(int j, int i) => - const jni.JStringType().fromRef(_toString1(j, i).object); + AggregateGroupByPeriodRequest.fromRef(super.ref) : super.fromRef(); - static final _toUnsignedString = jniLookup< - ffi.NativeFunction>( - "Long__toUnsignedString") - .asFunction(); + /// The type which includes information such as the signature of this class. + static const type = $AggregateGroupByPeriodRequestType(); + static final _new0 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer)>>( + "AggregateGroupByPeriodRequest__new0") + .asFunction< + jni.JniResult Function(ffi.Pointer, ffi.Pointer, + ffi.Pointer, ffi.Pointer)>(); - /// from: static public java.lang.String toUnsignedString(long j, int i) - /// The returned object must be deleted after use, by calling the `delete` method. - static jni.JString toUnsignedString(int j, int i) => - const jni.JStringType().fromRef(_toUnsignedString(j, i).object); + /// from: public void (java.util.Set set, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, java.time.Period period, java.util.Set set1) + /// The returned object must be released after use, by calling the [release] method. + factory AggregateGroupByPeriodRequest( + jni.JSet> set0, + TimeRangeFilter timeRangeFilter, + jni.JObject period, + jni.JSet set1, + ) { + return AggregateGroupByPeriodRequest.fromRef(_new0(set0.reference, + timeRangeFilter.reference, period.reference, set1.reference) + .object); + } - static final _toHexString = - jniLookup>( - "Long__toHexString") - .asFunction(); + static final _new1 = jniLookup< + ffi.NativeFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Int32, + ffi.Pointer)>>( + "AggregateGroupByPeriodRequest__new1") + .asFunction< + jni.JniResult Function( + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + ffi.Pointer, + int, + ffi.Pointer)>(); - /// from: static public java.lang.String toHexString(long j) - /// The returned object must be deleted after use, by calling the `delete` method. - static jni.JString toHexString(int j) => - const jni.JStringType().fromRef(_toHexString(j).object); + /// from: public void (java.util.Set set, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, java.time.Period period, java.util.Set set1, int i, kotlin.jvm.internal.DefaultConstructorMarker defaultConstructorMarker) + /// The returned object must be released after use, by calling the [release] method. + factory AggregateGroupByPeriodRequest.new1( + jni.JSet set0, + TimeRangeFilter timeRangeFilter, + jni.JObject period, + jni.JSet set1, + int i, + jni.JObject defaultConstructorMarker, + ) { + return AggregateGroupByPeriodRequest.fromRef(_new1( + set0.reference, + timeRangeFilter.reference, + period.reference, + set1.reference, + i, + defaultConstructorMarker.reference) + .object); + } +} - static final _toOctalString = - jniLookup>( - "Long__toOctalString") - .asFunction(); +class $AggregateGroupByPeriodRequestType + extends jni.JObjType { + const $AggregateGroupByPeriodRequestType(); - /// from: static public java.lang.String toOctalString(long j) - /// The returned object must be deleted after use, by calling the `delete` method. - static jni.JString toOctalString(int j) => - const jni.JStringType().fromRef(_toOctalString(j).object); + @override + String get signature => + r"Landroidx/health/connect/client/request/AggregateGroupByPeriodRequest;"; - static final _toBinaryString = - jniLookup>( - "Long__toBinaryString") - .asFunction(); + @override + AggregateGroupByPeriodRequest fromRef(jni.JObjectPtr ref) => + AggregateGroupByPeriodRequest.fromRef(ref); - /// from: static public java.lang.String toBinaryString(long j) - /// The returned object must be deleted after use, by calling the `delete` method. - static jni.JString toBinaryString(int j) => - const jni.JStringType().fromRef(_toBinaryString(j).object); + @override + jni.JObjType get superType => const jni.JObjectType(); - static final _toString2 = - jniLookup>( - "Long__toString2") - .asFunction(); + @override + final superCount = 1; - /// from: static public java.lang.String toString(long j) - /// The returned object must be deleted after use, by calling the `delete` method. - static jni.JString toString2(int j) => - const jni.JStringType().fromRef(_toString2(j).object); + @override + int get hashCode => ($AggregateGroupByPeriodRequestType).hashCode; - static final _toUnsignedString1 = - jniLookup>( - "Long__toUnsignedString1") - .asFunction(); - - /// from: static public java.lang.String toUnsignedString(long j) - /// The returned object must be deleted after use, by calling the `delete` method. - static jni.JString toUnsignedString1(int j) => - const jni.JStringType().fromRef(_toUnsignedString1(j).object); - - static final _parseLong = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer, ffi.Int32)>>("Long__parseLong") - .asFunction, int)>(); - - /// from: static public long parseLong(java.lang.String string, int i) - static int parseLong(jni.JString string, int i) => - _parseLong(string.reference, i).long; - - static final _parseLong1 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer, ffi.Int32, - ffi.Int32, ffi.Int32)>>("Long__parseLong1") - .asFunction< - jni.JniResult Function(ffi.Pointer, int, int, int)>(); - - /// from: static public long parseLong(java.lang.CharSequence charSequence, int i, int i1, int i2) - static int parseLong1(jni.JObject charSequence, int i, int i1, int i2) => - _parseLong1(charSequence.reference, i, i1, i2).long; - - static final _parseLong2 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Long__parseLong2") - .asFunction)>(); - - /// from: static public long parseLong(java.lang.String string) - static int parseLong2(jni.JString string) => - _parseLong2(string.reference).long; - - static final _parseUnsignedLong = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer, ffi.Int32)>>("Long__parseUnsignedLong") - .asFunction, int)>(); - - /// from: static public long parseUnsignedLong(java.lang.String string, int i) - static int parseUnsignedLong(jni.JString string, int i) => - _parseUnsignedLong(string.reference, i).long; - - static final _parseUnsignedLong1 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer, ffi.Int32, - ffi.Int32, ffi.Int32)>>("Long__parseUnsignedLong1") - .asFunction< - jni.JniResult Function(ffi.Pointer, int, int, int)>(); - - /// from: static public long parseUnsignedLong(java.lang.CharSequence charSequence, int i, int i1, int i2) - static int parseUnsignedLong1( - jni.JObject charSequence, int i, int i1, int i2) => - _parseUnsignedLong1(charSequence.reference, i, i1, i2).long; - - static final _parseUnsignedLong2 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Long__parseUnsignedLong2") - .asFunction)>(); - - /// from: static public long parseUnsignedLong(java.lang.String string) - static int parseUnsignedLong2(jni.JString string) => - _parseUnsignedLong2(string.reference).long; - - static final _valueOf = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer, ffi.Int32)>>("Long__valueOf") - .asFunction, int)>(); - - /// from: static public java.lang.Long valueOf(java.lang.String string, int i) - /// The returned object must be deleted after use, by calling the `delete` method. - static Long valueOf(jni.JString string, int i) => - const $LongType().fromRef(_valueOf(string.reference, i).object); - - static final _valueOf1 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>("Long__valueOf1") - .asFunction)>(); - - /// from: static public java.lang.Long valueOf(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - static Long valueOf1(jni.JString string) => - const $LongType().fromRef(_valueOf1(string.reference).object); - - static final _valueOf2 = - jniLookup>( - "Long__valueOf2") - .asFunction(); - - /// from: static public java.lang.Long valueOf(long j) - /// The returned object must be deleted after use, by calling the `delete` method. - static Long valueOf2(int j) => const $LongType().fromRef(_valueOf2(j).object); - - static final _decode = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>("Long__decode") - .asFunction)>(); - - /// from: static public java.lang.Long decode(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - static Long decode(jni.JString string) => - const $LongType().fromRef(_decode(string.reference).object); - - static final _byteValue = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>("Long__byteValue") - .asFunction)>(); - - /// from: public byte byteValue() - int byteValue() => _byteValue(reference).byte; - - static final _shortValue = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Long__shortValue") - .asFunction)>(); - - /// from: public short shortValue() - int shortValue() => _shortValue(reference).short; - - static final _intValue = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>("Long__intValue") - .asFunction)>(); - - /// from: public int intValue() - int intValue() => _intValue(reference).integer; - - static final _longValue = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>("Long__longValue") - .asFunction)>(); - - /// from: public long longValue() - int longValue() => _longValue(reference).long; - - static final _floatValue = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Long__floatValue") - .asFunction)>(); - - /// from: public float floatValue() - double floatValue() => _floatValue(reference).float; - - static final _doubleValue = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Long__doubleValue") - .asFunction)>(); - - /// from: public double doubleValue() - double doubleValue() => _doubleValue(reference).doubleFloat; - - static final _toString3 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>("Long__toString3") - .asFunction)>(); - - /// from: public java.lang.String toString() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JString toString3() => - const jni.JStringType().fromRef(_toString3(reference).object); - - static final _hashCode1 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>("Long__hashCode1") - .asFunction)>(); - - /// from: public int hashCode() - int hashCode1() => _hashCode1(reference).integer; - - static final _hashCode2 = - jniLookup>( - "Long__hashCode2") - .asFunction(); - - /// from: static public int hashCode(long j) - static int hashCode2(int j) => _hashCode2(j).integer; - - static final _equals1 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer, - ffi.Pointer)>>("Long__equals1") - .asFunction< - jni.JniResult Function( - ffi.Pointer, ffi.Pointer)>(); - - /// from: public boolean equals(java.lang.Object object) - bool equals1(jni.JObject object) => - _equals1(reference, object.reference).boolean; - - static final _getLong = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>("Long__getLong") - .asFunction)>(); - - /// from: static public java.lang.Long getLong(java.lang.String string) - /// The returned object must be deleted after use, by calling the `delete` method. - static Long getLong(jni.JString string) => - const $LongType().fromRef(_getLong(string.reference).object); - - static final _getLong1 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer, ffi.Int64)>>("Long__getLong1") - .asFunction, int)>(); - - /// from: static public java.lang.Long getLong(java.lang.String string, long j) - /// The returned object must be deleted after use, by calling the `delete` method. - static Long getLong1(jni.JString string, int j) => - const $LongType().fromRef(_getLong1(string.reference, j).object); - - static final _getLong2 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer, - ffi.Pointer)>>("Long__getLong2") - .asFunction< - jni.JniResult Function( - ffi.Pointer, ffi.Pointer)>(); - - /// from: static public java.lang.Long getLong(java.lang.String string, java.lang.Long long) - /// The returned object must be deleted after use, by calling the `delete` method. - static Long getLong2(jni.JString string, Long long) => const $LongType() - .fromRef(_getLong2(string.reference, long.reference).object); - - static final _compareTo = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer, - ffi.Pointer)>>("Long__compareTo") - .asFunction< - jni.JniResult Function( - ffi.Pointer, ffi.Pointer)>(); - - /// from: public int compareTo(java.lang.Long long) - int compareTo(Long long) => _compareTo(reference, long.reference).integer; - - static final _compare = jniLookup< - ffi.NativeFunction>( - "Long__compare") - .asFunction(); - - /// from: static public int compare(long j, long j1) - static int compare(int j, int j1) => _compare(j, j1).integer; - - static final _compareUnsigned = jniLookup< - ffi.NativeFunction>( - "Long__compareUnsigned") - .asFunction(); - - /// from: static public int compareUnsigned(long j, long j1) - static int compareUnsigned(int j, int j1) => _compareUnsigned(j, j1).integer; - - static final _divideUnsigned = jniLookup< - ffi.NativeFunction>( - "Long__divideUnsigned") - .asFunction(); - - /// from: static public long divideUnsigned(long j, long j1) - static int divideUnsigned(int j, int j1) => _divideUnsigned(j, j1).long; - - static final _remainderUnsigned = jniLookup< - ffi.NativeFunction>( - "Long__remainderUnsigned") - .asFunction(); - - /// from: static public long remainderUnsigned(long j, long j1) - static int remainderUnsigned(int j, int j1) => _remainderUnsigned(j, j1).long; - - static final _highestOneBit = - jniLookup>( - "Long__highestOneBit") - .asFunction(); - - /// from: static public long highestOneBit(long j) - static int highestOneBit(int j) => _highestOneBit(j).long; - - static final _lowestOneBit = - jniLookup>( - "Long__lowestOneBit") - .asFunction(); - - /// from: static public long lowestOneBit(long j) - static int lowestOneBit(int j) => _lowestOneBit(j).long; - - static final _numberOfLeadingZeros = - jniLookup>( - "Long__numberOfLeadingZeros") - .asFunction(); - - /// from: static public int numberOfLeadingZeros(long j) - static int numberOfLeadingZeros(int j) => _numberOfLeadingZeros(j).integer; - - static final _numberOfTrailingZeros = - jniLookup>( - "Long__numberOfTrailingZeros") - .asFunction(); - - /// from: static public int numberOfTrailingZeros(long j) - static int numberOfTrailingZeros(int j) => _numberOfTrailingZeros(j).integer; - - static final _bitCount = - jniLookup>( - "Long__bitCount") - .asFunction(); - - /// from: static public int bitCount(long j) - static int bitCount(int j) => _bitCount(j).integer; - - static final _rotateLeft = jniLookup< - ffi.NativeFunction>( - "Long__rotateLeft") - .asFunction(); - - /// from: static public long rotateLeft(long j, int i) - static int rotateLeft(int j, int i) => _rotateLeft(j, i).long; - - static final _rotateRight = jniLookup< - ffi.NativeFunction>( - "Long__rotateRight") - .asFunction(); - - /// from: static public long rotateRight(long j, int i) - static int rotateRight(int j, int i) => _rotateRight(j, i).long; - - static final _reverse = - jniLookup>( - "Long__reverse") - .asFunction(); - - /// from: static public long reverse(long j) - static int reverse(int j) => _reverse(j).long; - - static final _signum = - jniLookup>( - "Long__signum") - .asFunction(); - - /// from: static public int signum(long j) - static int signum(int j) => _signum(j).integer; - - static final _reverseBytes = - jniLookup>( - "Long__reverseBytes") - .asFunction(); - - /// from: static public long reverseBytes(long j) - static int reverseBytes(int j) => _reverseBytes(j).long; - - static final _sum = jniLookup< - ffi.NativeFunction>( - "Long__sum") - .asFunction(); - - /// from: static public long sum(long j, long j1) - static int sum(int j, int j1) => _sum(j, j1).long; - - static final _max = jniLookup< - ffi.NativeFunction>( - "Long__max") - .asFunction(); - - /// from: static public long max(long j, long j1) - static int max(int j, int j1) => _max(j, j1).long; - - static final _min = jniLookup< - ffi.NativeFunction>( - "Long__min") - .asFunction(); - - /// from: static public long min(long j, long j1) - static int min(int j, int j1) => _min(j, j1).long; - - static final _compareTo1 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer, - ffi.Pointer)>>("Long__compareTo1") - .asFunction< - jni.JniResult Function( - ffi.Pointer, ffi.Pointer)>(); - - /// from: public int compareTo(java.lang.Object object) - int compareTo1(jni.JObject object) => - _compareTo1(reference, object.reference).integer; -} - -class $LongType extends jni.JObjType { - const $LongType(); - - @override - String get signature => r"Ljava/lang/Long;"; - - @override - Long fromRef(jni.JObjectPtr ref) => Long.fromRef(ref); -} - -extension $LongArray on jni.JArray { - Long operator [](int index) { - return (elementType as $LongType) - .fromRef(elementAt(index, jni.JniCallType.objectType).object); - } - - void operator []=(int index, Long value) { - (this as jni.JArray)[index] = value; - } -} - -/// from: java.util.Set -class Set extends jni.JObject { - late final jni.JObjType? _$type; - @override - jni.JObjType get $type => _$type ??= type( - $E, - ); - - final jni.JObjType $E; - - Set.fromRef( - this.$E, - jni.JObjectPtr ref, - ) : super.fromRef(ref); - - /// The type which includes information such as the signature of this class. - static $SetType type( - jni.JObjType $E, - ) { - return $SetType( - $E, - ); - } - - static final _size = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>("Set__size") - .asFunction)>(); - - /// from: public abstract int size() - int size() => _size(reference).integer; - - static final _isEmpty = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>("Set__isEmpty") - .asFunction)>(); - - /// from: public abstract boolean isEmpty() - bool isEmpty() => _isEmpty(reference).boolean; - - static final _contains = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer, - ffi.Pointer)>>("Set__contains") - .asFunction< - jni.JniResult Function( - ffi.Pointer, ffi.Pointer)>(); - - /// from: public abstract boolean contains(java.lang.Object object) - bool contains(jni.JObject object) => - _contains(reference, object.reference).boolean; - - static final _iterator = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>("Set__iterator") - .asFunction)>(); - - /// from: public abstract java.util.Iterator iterator() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject iterator() => - const jni.JObjectType().fromRef(_iterator(reference).object); - - static final _toArray = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>("Set__toArray") - .asFunction)>(); - - /// from: public abstract java.lang.Object[] toArray() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JArray toArray() => const jni.JArrayType(jni.JObjectType()) - .fromRef(_toArray(reference).object); - - static final _toArray1 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer, - ffi.Pointer)>>("Set__toArray1") - .asFunction< - jni.JniResult Function( - ffi.Pointer, ffi.Pointer)>(); - - /// from: public abstract java.lang.Object[] toArray(java.lang.Object[] objects) - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JArray toArray1( - jni.JObjType $T, jni.JArray objects) => - jni.JArrayType($T) - .fromRef(_toArray1(reference, objects.reference).object); - - static final _add = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer, ffi.Pointer)>>("Set__add") - .asFunction< - jni.JniResult Function( - ffi.Pointer, ffi.Pointer)>(); - - /// from: public abstract boolean add(E object) - bool add(E object) => _add(reference, object.reference).boolean; - - static final _remove = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer, ffi.Pointer)>>("Set__remove") - .asFunction< - jni.JniResult Function( - ffi.Pointer, ffi.Pointer)>(); - - /// from: public abstract boolean remove(java.lang.Object object) - bool remove(jni.JObject object) => - _remove(reference, object.reference).boolean; - - static final _containsAll = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer, - ffi.Pointer)>>("Set__containsAll") - .asFunction< - jni.JniResult Function( - ffi.Pointer, ffi.Pointer)>(); - - /// from: public abstract boolean containsAll(java.util.Collection collection) - bool containsAll(jni.JObject collection) => - _containsAll(reference, collection.reference).boolean; - - static final _addAll = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer, ffi.Pointer)>>("Set__addAll") - .asFunction< - jni.JniResult Function( - ffi.Pointer, ffi.Pointer)>(); - - /// from: public abstract boolean addAll(java.util.Collection collection) - bool addAll(jni.JObject collection) => - _addAll(reference, collection.reference).boolean; - - static final _retainAll = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer, - ffi.Pointer)>>("Set__retainAll") - .asFunction< - jni.JniResult Function( - ffi.Pointer, ffi.Pointer)>(); - - /// from: public abstract boolean retainAll(java.util.Collection collection) - bool retainAll(jni.JObject collection) => - _retainAll(reference, collection.reference).boolean; - - static final _removeAll = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer, - ffi.Pointer)>>("Set__removeAll") - .asFunction< - jni.JniResult Function( - ffi.Pointer, ffi.Pointer)>(); - - /// from: public abstract boolean removeAll(java.util.Collection collection) - bool removeAll(jni.JObject collection) => - _removeAll(reference, collection.reference).boolean; - - static final _clear = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>("Set__clear") - .asFunction)>(); - - /// from: public abstract void clear() - void clear() => _clear(reference).check(); - - static final _equals1 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer, - ffi.Pointer)>>("Set__equals1") - .asFunction< - jni.JniResult Function( - ffi.Pointer, ffi.Pointer)>(); - - /// from: public abstract boolean equals(java.lang.Object object) - bool equals1(jni.JObject object) => - _equals1(reference, object.reference).boolean; - - static final _hashCode1 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>("Set__hashCode1") - .asFunction)>(); - - /// from: public abstract int hashCode() - int hashCode1() => _hashCode1(reference).integer; - - static final _spliterator = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("Set__spliterator") - .asFunction)>(); - - /// from: public java.util.Spliterator spliterator() - /// The returned object must be deleted after use, by calling the `delete` method. - jni.JObject spliterator() => - const jni.JObjectType().fromRef(_spliterator(reference).object); - - static final _of = - jniLookup>("Set__of") - .asFunction(); - - /// from: static public java.util.Set of() - /// The returned object must be deleted after use, by calling the `delete` method. - static Set of(jni.JObjType $E) => - $SetType($E).fromRef(_of().object); - - static final _of1 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>("Set__of1") - .asFunction)>(); - - /// from: static public java.util.Set of(E object) - /// The returned object must be deleted after use, by calling the `delete` method. - static Set of1(jni.JObjType $E, E object) => - $SetType($E).fromRef(_of1(object.reference).object); - - static final _of2 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer, ffi.Pointer)>>("Set__of2") - .asFunction< - jni.JniResult Function( - ffi.Pointer, ffi.Pointer)>(); - - /// from: static public java.util.Set of(E object, E object1) - /// The returned object must be deleted after use, by calling the `delete` method. - static Set of2( - jni.JObjType $E, E object, E object1) => - $SetType($E).fromRef(_of2(object.reference, object1.reference).object); - - static final _of3 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer, - ffi.Pointer, ffi.Pointer)>>("Set__of3") - .asFunction< - jni.JniResult Function(ffi.Pointer, ffi.Pointer, - ffi.Pointer)>(); - - /// from: static public java.util.Set of(E object, E object1, E object2) - /// The returned object must be deleted after use, by calling the `delete` method. - static Set of3( - jni.JObjType $E, E object, E object1, E object2) => - $SetType($E).fromRef( - _of3(object.reference, object1.reference, object2.reference).object); - - static final _of4 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer)>>("Set__of4") - .asFunction< - jni.JniResult Function(ffi.Pointer, ffi.Pointer, - ffi.Pointer, ffi.Pointer)>(); - - /// from: static public java.util.Set of(E object, E object1, E object2, E object3) - /// The returned object must be deleted after use, by calling the `delete` method. - static Set of4( - jni.JObjType $E, E object, E object1, E object2, E object3) => - $SetType($E).fromRef(_of4(object.reference, object1.reference, - object2.reference, object3.reference) - .object); - - static final _of5 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer)>>("Set__of5") - .asFunction< - jni.JniResult Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer)>(); - - /// from: static public java.util.Set of(E object, E object1, E object2, E object3, E object4) - /// The returned object must be deleted after use, by calling the `delete` method. - static Set of5(jni.JObjType $E, E object, - E object1, E object2, E object3, E object4) => - $SetType($E).fromRef(_of5(object.reference, object1.reference, - object2.reference, object3.reference, object4.reference) - .object); - - static final _of6 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer)>>("Set__of6") - .asFunction< - jni.JniResult Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer)>(); - - /// from: static public java.util.Set of(E object, E object1, E object2, E object3, E object4, E object5) - /// The returned object must be deleted after use, by calling the `delete` method. - static Set of6(jni.JObjType $E, E object, - E object1, E object2, E object3, E object4, E object5) => - $SetType($E).fromRef(_of6( - object.reference, - object1.reference, - object2.reference, - object3.reference, - object4.reference, - object5.reference) - .object); - - static final _of7 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer)>>("Set__of7") - .asFunction< - jni.JniResult Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer)>(); - - /// from: static public java.util.Set of(E object, E object1, E object2, E object3, E object4, E object5, E object6) - /// The returned object must be deleted after use, by calling the `delete` method. - static Set of7(jni.JObjType $E, E object, - E object1, E object2, E object3, E object4, E object5, E object6) => - $SetType($E).fromRef(_of7( - object.reference, - object1.reference, - object2.reference, - object3.reference, - object4.reference, - object5.reference, - object6.reference) - .object); - - static final _of8 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer)>>("Set__of8") - .asFunction< - jni.JniResult Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer)>(); - - /// from: static public java.util.Set of(E object, E object1, E object2, E object3, E object4, E object5, E object6, E object7) - /// The returned object must be deleted after use, by calling the `delete` method. - static Set of8( - jni.JObjType $E, - E object, - E object1, - E object2, - E object3, - E object4, - E object5, - E object6, - E object7) => - $SetType($E).fromRef(_of8( - object.reference, - object1.reference, - object2.reference, - object3.reference, - object4.reference, - object5.reference, - object6.reference, - object7.reference) - .object); - - static final _of9 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer)>>("Set__of9") - .asFunction< - jni.JniResult Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer)>(); - - /// from: static public java.util.Set of(E object, E object1, E object2, E object3, E object4, E object5, E object6, E object7, E object8) - /// The returned object must be deleted after use, by calling the `delete` method. - static Set of9( - jni.JObjType $E, - E object, - E object1, - E object2, - E object3, - E object4, - E object5, - E object6, - E object7, - E object8) => - $SetType($E).fromRef(_of9( - object.reference, - object1.reference, - object2.reference, - object3.reference, - object4.reference, - object5.reference, - object6.reference, - object7.reference, - object8.reference) - .object); - - static final _of10 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer)>>("Set__of10") - .asFunction< - jni.JniResult Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer)>(); - - /// from: static public java.util.Set of(E object, E object1, E object2, E object3, E object4, E object5, E object6, E object7, E object8, E object9) - /// The returned object must be deleted after use, by calling the `delete` method. - static Set of10( - jni.JObjType $E, - E object, - E object1, - E object2, - E object3, - E object4, - E object5, - E object6, - E object7, - E object8, - E object9) => - $SetType($E).fromRef(_of10( - object.reference, - object1.reference, - object2.reference, - object3.reference, - object4.reference, - object5.reference, - object6.reference, - object7.reference, - object8.reference, - object9.reference) - .object); - - static final _of11 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>("Set__of11") - .asFunction)>(); - - /// from: static public java.util.Set of(java.lang.Object[] objects) - /// The returned object must be deleted after use, by calling the `delete` method. - static Set of11( - jni.JObjType $E, jni.JArray objects) => - $SetType($E).fromRef(_of11(objects.reference).object); - - static final _copyOf = jniLookup< - ffi.NativeFunction< - jni.JniResult Function(ffi.Pointer)>>("Set__copyOf") - .asFunction)>(); - - /// from: static public java.util.Set copyOf(java.util.Collection collection) - /// The returned object must be deleted after use, by calling the `delete` method. - static Set copyOf( - jni.JObjType $E, jni.JObject collection) => - $SetType($E).fromRef(_copyOf(collection.reference).object); -} - -class $SetType extends jni.JObjType> { - final jni.JObjType $E; - - const $SetType( - this.$E, - ); - - @override - String get signature => r"Ljava/util/Set;"; - - @override - Set fromRef(jni.JObjectPtr ref) => Set.fromRef($E, ref); -} - -extension $SetArray on jni.JArray> { - Set operator [](int index) { - return (elementType as $SetType) - .fromRef(elementAt(index, jni.JniCallType.objectType).object); - } - - void operator []=(int index, Set value) { - (this as jni.JArray)[index] = value; - } -} - -/// from: androidx.health.connect.client.request.AggregateGroupByDurationRequest -class AggregateGroupByDurationRequest extends jni.JObject { - late final jni.JObjType? _$type; - @override - jni.JObjType get $type => _$type ??= type; - - AggregateGroupByDurationRequest.fromRef( - jni.JObjectPtr ref, - ) : super.fromRef(ref); - - /// The type which includes information such as the signature of this class. - static const type = $AggregateGroupByDurationRequestType(); - - static final _ctor = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer)>>( - "AggregateGroupByDurationRequest__ctor") - .asFunction< - jni.JniResult Function(ffi.Pointer, ffi.Pointer, - ffi.Pointer, ffi.Pointer)>(); - - /// from: public void (java.util.Set set, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, java.time.Duration duration, java.util.Set set1) - AggregateGroupByDurationRequest( - Set> set0, - TimeRangeFilter timeRangeFilter, - jni.JObject duration, - Set set1) - : super.fromRef(_ctor(set0.reference, timeRangeFilter.reference, - duration.reference, set1.reference) - .object); - - static final _ctor1 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Int32, - ffi.Pointer)>>( - "AggregateGroupByDurationRequest__ctor1") - .asFunction< - jni.JniResult Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - int, - ffi.Pointer)>(); - - /// from: public void (java.util.Set set, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, java.time.Duration duration, java.util.Set set1, int i, kotlin.jvm.internal.DefaultConstructorMarker defaultConstructorMarker) - AggregateGroupByDurationRequest.ctor1( - Set set0, - TimeRangeFilter timeRangeFilter, - jni.JObject duration, - Set set1, - int i, - jni.JObject defaultConstructorMarker) - : super.fromRef(_ctor1( - set0.reference, - timeRangeFilter.reference, - duration.reference, - set1.reference, - i, - defaultConstructorMarker.reference) - .object); -} - -class $AggregateGroupByDurationRequestType - extends jni.JObjType { - const $AggregateGroupByDurationRequestType(); - - @override - String get signature => - r"Landroidx/health/connect/client/request/AggregateGroupByDurationRequest;"; - - @override - AggregateGroupByDurationRequest fromRef(jni.JObjectPtr ref) => - AggregateGroupByDurationRequest.fromRef(ref); -} - -extension $AggregateGroupByDurationRequestArray - on jni.JArray { - AggregateGroupByDurationRequest operator [](int index) { - return (elementType as $AggregateGroupByDurationRequestType) - .fromRef(elementAt(index, jni.JniCallType.objectType).object); - } - - void operator []=(int index, AggregateGroupByDurationRequest value) { - (this as jni.JArray)[index] = value; - } -} - -/// from: androidx.health.connect.client.request.AggregateGroupByPeriodRequest -class AggregateGroupByPeriodRequest extends jni.JObject { - late final jni.JObjType? _$type; - @override - jni.JObjType get $type => _$type ??= type; - - AggregateGroupByPeriodRequest.fromRef( - jni.JObjectPtr ref, - ) : super.fromRef(ref); - - /// The type which includes information such as the signature of this class. - static const type = $AggregateGroupByPeriodRequestType(); - - static final _ctor = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer)>>( - "AggregateGroupByPeriodRequest__ctor") - .asFunction< - jni.JniResult Function(ffi.Pointer, ffi.Pointer, - ffi.Pointer, ffi.Pointer)>(); - - /// from: public void (java.util.Set set, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, java.time.Period period, java.util.Set set1) - AggregateGroupByPeriodRequest( - Set> set0, - TimeRangeFilter timeRangeFilter, - jni.JObject period, - Set set1) - : super.fromRef(_ctor(set0.reference, timeRangeFilter.reference, - period.reference, set1.reference) - .object); - - static final _ctor1 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Int32, - ffi.Pointer)>>( - "AggregateGroupByPeriodRequest__ctor1") - .asFunction< - jni.JniResult Function( - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - ffi.Pointer, - int, - ffi.Pointer)>(); - - /// from: public void (java.util.Set set, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, java.time.Period period, java.util.Set set1, int i, kotlin.jvm.internal.DefaultConstructorMarker defaultConstructorMarker) - AggregateGroupByPeriodRequest.ctor1( - Set set0, - TimeRangeFilter timeRangeFilter, - jni.JObject period, - Set set1, - int i, - jni.JObject defaultConstructorMarker) - : super.fromRef(_ctor1( - set0.reference, - timeRangeFilter.reference, - period.reference, - set1.reference, - i, - defaultConstructorMarker.reference) - .object); -} - -class $AggregateGroupByPeriodRequestType - extends jni.JObjType { - const $AggregateGroupByPeriodRequestType(); - - @override - String get signature => - r"Landroidx/health/connect/client/request/AggregateGroupByPeriodRequest;"; - - @override - AggregateGroupByPeriodRequest fromRef(jni.JObjectPtr ref) => - AggregateGroupByPeriodRequest.fromRef(ref); -} - -extension $AggregateGroupByPeriodRequestArray - on jni.JArray { - AggregateGroupByPeriodRequest operator [](int index) { - return (elementType as $AggregateGroupByPeriodRequestType) - .fromRef(elementAt(index, jni.JniCallType.objectType).object); - } - - void operator []=(int index, AggregateGroupByPeriodRequest value) { - (this as jni.JArray)[index] = value; + @override + bool operator ==(Object other) { + return other.runtimeType == ($AggregateGroupByPeriodRequestType) && + other is $AggregateGroupByPeriodRequestType; } } /// from: androidx.health.connect.client.request.AggregateRequest class AggregateRequest extends jni.JObject { - late final jni.JObjType? _$type; @override - jni.JObjType get $type => _$type ??= type; + late final jni.JObjType $type = type; - AggregateRequest.fromRef( - jni.JObjectPtr ref, - ) : super.fromRef(ref); + AggregateRequest.fromRef(super.ref) : super.fromRef(); /// The type which includes information such as the signature of this class. static const type = $AggregateRequestType(); - - static final _ctor = jniLookup< + static final _new0 = jniLookup< ffi.NativeFunction< jni.JniResult Function( ffi.Pointer, ffi.Pointer, - ffi.Pointer)>>("AggregateRequest__ctor") + ffi.Pointer)>>("AggregateRequest__new0") .asFunction< jni.JniResult Function(ffi.Pointer, ffi.Pointer, ffi.Pointer)>(); /// from: public void (java.util.Set set, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, java.util.Set set1) - AggregateRequest(Set> set0, - TimeRangeFilter timeRangeFilter, Set set1) - : super.fromRef( - _ctor(set0.reference, timeRangeFilter.reference, set1.reference) - .object); + /// The returned object must be released after use, by calling the [release] method. + factory AggregateRequest( + jni.JSet> set0, + TimeRangeFilter timeRangeFilter, + jni.JSet set1, + ) { + return AggregateRequest.fromRef( + _new0(set0.reference, timeRangeFilter.reference, set1.reference) + .object); + } - static final _ctor1 = jniLookup< + static final _new1 = jniLookup< ffi.NativeFunction< jni.JniResult Function( ffi.Pointer, ffi.Pointer, ffi.Pointer, ffi.Int32, - ffi.Pointer)>>("AggregateRequest__ctor1") + ffi.Pointer)>>("AggregateRequest__new1") .asFunction< jni.JniResult Function(ffi.Pointer, ffi.Pointer, ffi.Pointer, int, ffi.Pointer)>(); /// from: public void (java.util.Set set, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, java.util.Set set1, int i, kotlin.jvm.internal.DefaultConstructorMarker defaultConstructorMarker) - AggregateRequest.ctor1(Set set0, TimeRangeFilter timeRangeFilter, - Set set1, int i, jni.JObject defaultConstructorMarker) - : super.fromRef(_ctor1(set0.reference, timeRangeFilter.reference, - set1.reference, i, defaultConstructorMarker.reference) - .object); + /// The returned object must be released after use, by calling the [release] method. + factory AggregateRequest.new1( + jni.JSet set0, + TimeRangeFilter timeRangeFilter, + jni.JSet set1, + int i, + jni.JObject defaultConstructorMarker, + ) { + return AggregateRequest.fromRef(_new1( + set0.reference, + timeRangeFilter.reference, + set1.reference, + i, + defaultConstructorMarker.reference) + .object); + } } class $AggregateRequestType extends jni.JObjType { @@ -11729,61 +13386,73 @@ class $AggregateRequestType extends jni.JObjType { @override AggregateRequest fromRef(jni.JObjectPtr ref) => AggregateRequest.fromRef(ref); -} -extension $AggregateRequestArray on jni.JArray { - AggregateRequest operator [](int index) { - return (elementType as $AggregateRequestType) - .fromRef(elementAt(index, jni.JniCallType.objectType).object); - } + @override + jni.JObjType get superType => const jni.JObjectType(); + + @override + final superCount = 1; + + @override + int get hashCode => ($AggregateRequestType).hashCode; - void operator []=(int index, AggregateRequest value) { - (this as jni.JArray)[index] = value; + @override + bool operator ==(Object other) { + return other.runtimeType == ($AggregateRequestType) && + other is $AggregateRequestType; } } /// from: androidx.health.connect.client.request.ChangesTokenRequest class ChangesTokenRequest extends jni.JObject { - late final jni.JObjType? _$type; @override - jni.JObjType get $type => _$type ??= type; + late final jni.JObjType $type = type; - ChangesTokenRequest.fromRef( - jni.JObjectPtr ref, - ) : super.fromRef(ref); + ChangesTokenRequest.fromRef(super.ref) : super.fromRef(); /// The type which includes information such as the signature of this class. static const type = $ChangesTokenRequestType(); - - static final _ctor = jniLookup< + static final _new0 = jniLookup< ffi.NativeFunction< jni.JniResult Function(ffi.Pointer, - ffi.Pointer)>>("ChangesTokenRequest__ctor") + ffi.Pointer)>>("ChangesTokenRequest__new0") .asFunction< jni.JniResult Function( ffi.Pointer, ffi.Pointer)>(); /// from: public void (java.util.Set set, java.util.Set set1) - ChangesTokenRequest(Set set0, Set set1) - : super.fromRef(_ctor(set0.reference, set1.reference).object); + /// The returned object must be released after use, by calling the [release] method. + factory ChangesTokenRequest( + jni.JSet set0, + jni.JSet set1, + ) { + return ChangesTokenRequest.fromRef( + _new0(set0.reference, set1.reference).object); + } - static final _ctor1 = jniLookup< + static final _new1 = jniLookup< ffi.NativeFunction< jni.JniResult Function( ffi.Pointer, ffi.Pointer, ffi.Int32, - ffi.Pointer)>>("ChangesTokenRequest__ctor1") + ffi.Pointer)>>("ChangesTokenRequest__new1") .asFunction< jni.JniResult Function(ffi.Pointer, ffi.Pointer, int, ffi.Pointer)>(); /// from: public void (java.util.Set set, java.util.Set set1, int i, kotlin.jvm.internal.DefaultConstructorMarker defaultConstructorMarker) - ChangesTokenRequest.ctor1(Set set0, Set set1, int i, - jni.JObject defaultConstructorMarker) - : super.fromRef(_ctor1(set0.reference, set1.reference, i, - defaultConstructorMarker.reference) - .object); + /// The returned object must be released after use, by calling the [release] method. + factory ChangesTokenRequest.new1( + jni.JSet set0, + jni.JSet set1, + int i, + jni.JObject defaultConstructorMarker, + ) { + return ChangesTokenRequest.fromRef(_new1(set0.reference, set1.reference, i, + defaultConstructorMarker.reference) + .object); + } } class $ChangesTokenRequestType extends jni.JObjType { @@ -11796,44 +13465,45 @@ class $ChangesTokenRequestType extends jni.JObjType { @override ChangesTokenRequest fromRef(jni.JObjectPtr ref) => ChangesTokenRequest.fromRef(ref); -} -extension $ChangesTokenRequestArray on jni.JArray { - ChangesTokenRequest operator [](int index) { - return (elementType as $ChangesTokenRequestType) - .fromRef(elementAt(index, jni.JniCallType.objectType).object); - } + @override + jni.JObjType get superType => const jni.JObjectType(); - void operator []=(int index, ChangesTokenRequest value) { - (this as jni.JArray)[index] = value; + @override + final superCount = 1; + + @override + int get hashCode => ($ChangesTokenRequestType).hashCode; + + @override + bool operator ==(Object other) { + return other.runtimeType == ($ChangesTokenRequestType) && + other is $ChangesTokenRequestType; } } /// from: androidx.health.connect.client.request.ReadRecordsRequest -class ReadRecordsRequest extends jni.JObject { - late final jni.JObjType? _$type; +class ReadRecordsRequest<$T extends jni.JObject> extends jni.JObject { @override - jni.JObjType get $type => _$type ??= type( - $T, - ); + late final jni.JObjType> $type = type(T); - final jni.JObjType $T; + final jni.JObjType<$T> T; ReadRecordsRequest.fromRef( - this.$T, + this.T, jni.JObjectPtr ref, ) : super.fromRef(ref); /// The type which includes information such as the signature of this class. - static $ReadRecordsRequestType type( - jni.JObjType $T, + static $ReadRecordsRequestType<$T> type<$T extends jni.JObject>( + jni.JObjType<$T> T, ) { return $ReadRecordsRequestType( - $T, + T, ); } - static final _ctor = jniLookup< + static final _new0 = jniLookup< ffi.NativeFunction< jni.JniResult Function( ffi.Pointer, @@ -11841,25 +13511,30 @@ class ReadRecordsRequest extends jni.JObject { ffi.Pointer, ffi.Uint8, ffi.Int32, - ffi.Pointer)>>("ReadRecordsRequest__ctor") + ffi.Pointer)>>("ReadRecordsRequest__new0") .asFunction< jni.JniResult Function(ffi.Pointer, ffi.Pointer, ffi.Pointer, int, int, ffi.Pointer)>(); /// from: public void (kotlin.reflect.KClass kClass, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, java.util.Set set, boolean z, int i, java.lang.String string) - ReadRecordsRequest( - this.$T, - jni.JObject kClass, - TimeRangeFilter timeRangeFilter, - Set set0, - bool z, - int i, - jni.JString string) - : super.fromRef(_ctor(kClass.reference, timeRangeFilter.reference, - set0.reference, z ? 1 : 0, i, string.reference) + /// The returned object must be released after use, by calling the [release] method. + factory ReadRecordsRequest( + jni.JObject kClass, + TimeRangeFilter timeRangeFilter, + jni.JSet set0, + bool z, + int i, + jni.JString string, { + required jni.JObjType<$T> T, + }) { + return ReadRecordsRequest.fromRef( + T, + _new0(kClass.reference, timeRangeFilter.reference, set0.reference, + z ? 1 : 0, i, string.reference) .object); + } - static final _ctor1 = jniLookup< + static final _new1 = jniLookup< ffi.NativeFunction< jni.JniResult Function( ffi.Pointer, @@ -11869,7 +13544,7 @@ class ReadRecordsRequest extends jni.JObject { ffi.Int32, ffi.Pointer, ffi.Int32, - ffi.Pointer)>>("ReadRecordsRequest__ctor1") + ffi.Pointer)>>("ReadRecordsRequest__new1") .asFunction< jni.JniResult Function( ffi.Pointer, @@ -11882,17 +13557,21 @@ class ReadRecordsRequest extends jni.JObject { ffi.Pointer)>(); /// from: public void (kotlin.reflect.KClass kClass, androidx.health.connect.client.time.TimeRangeFilter timeRangeFilter, java.util.Set set, boolean z, int i, java.lang.String string, int i1, kotlin.jvm.internal.DefaultConstructorMarker defaultConstructorMarker) - ReadRecordsRequest.ctor1( - this.$T, - jni.JObject kClass, - TimeRangeFilter timeRangeFilter, - Set set0, - bool z, - int i, - jni.JString string, - int i1, - jni.JObject defaultConstructorMarker) - : super.fromRef(_ctor1( + /// The returned object must be released after use, by calling the [release] method. + factory ReadRecordsRequest.new1( + jni.JObject kClass, + TimeRangeFilter timeRangeFilter, + jni.JSet set0, + bool z, + int i, + jni.JString string, + int i1, + jni.JObject defaultConstructorMarker, { + required jni.JObjType<$T> T, + }) { + return ReadRecordsRequest.fromRef( + T, + _new1( kClass.reference, timeRangeFilter.reference, set0.reference, @@ -11902,6 +13581,7 @@ class ReadRecordsRequest extends jni.JObject { i1, defaultConstructorMarker.reference) .object); + } static final _equals1 = jniLookup< ffi.NativeFunction< @@ -11912,25 +13592,30 @@ class ReadRecordsRequest extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public boolean equals(java.lang.Object object) - bool equals1(jni.JObject object) => - _equals1(reference, object.reference).boolean; + bool equals1( + jni.JObject object, + ) { + return _equals1(reference, object.reference).boolean; + } static final _hashCode1 = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("ReadRecordsRequest__hashCode1") + ffi + .NativeFunction)>>( + "ReadRecordsRequest__hashCode1") .asFunction)>(); /// from: public int hashCode() - int hashCode1() => _hashCode1(reference).integer; + int hashCode1() { + return _hashCode1(reference).integer; + } } -class $ReadRecordsRequestType - extends jni.JObjType> { - final jni.JObjType $T; +class $ReadRecordsRequestType<$T extends jni.JObject> + extends jni.JObjType> { + final jni.JObjType<$T> T; const $ReadRecordsRequestType( - this.$T, + this.T, ); @override @@ -11938,60 +13623,68 @@ class $ReadRecordsRequestType r"Landroidx/health/connect/client/request/ReadRecordsRequest;"; @override - ReadRecordsRequest fromRef(jni.JObjectPtr ref) => - ReadRecordsRequest.fromRef($T, ref); -} + ReadRecordsRequest<$T> fromRef(jni.JObjectPtr ref) => + ReadRecordsRequest.fromRef(T, ref); -extension $ReadRecordsRequestArray - on jni.JArray> { - ReadRecordsRequest operator [](int index) { - return (elementType as $ReadRecordsRequestType) - .fromRef(elementAt(index, jni.JniCallType.objectType).object); - } + @override + jni.JObjType get superType => const jni.JObjectType(); + + @override + final superCount = 1; + + @override + int get hashCode => Object.hash($ReadRecordsRequestType, T); - void operator []=(int index, ReadRecordsRequest value) { - (this as jni.JArray)[index] = value; + @override + bool operator ==(Object other) { + return other.runtimeType == ($ReadRecordsRequestType<$T>) && + other is $ReadRecordsRequestType<$T> && + T == other.T; } } /// from: androidx.health.connect.client.aggregate.AggregationResult class AggregationResult extends jni.JObject { - late final jni.JObjType? _$type; @override - jni.JObjType get $type => _$type ??= type; + late final jni.JObjType $type = type; - AggregationResult.fromRef( - jni.JObjectPtr ref, - ) : super.fromRef(ref); + AggregationResult.fromRef(super.ref) : super.fromRef(); /// The type which includes information such as the signature of this class. static const type = $AggregationResultType(); - - static final _ctor = jniLookup< + static final _new0 = jniLookup< ffi.NativeFunction< jni.JniResult Function( ffi.Pointer, ffi.Pointer, - ffi.Pointer)>>("AggregationResult__ctor") + ffi.Pointer)>>("AggregationResult__new0") .asFunction< jni.JniResult Function(ffi.Pointer, ffi.Pointer, ffi.Pointer)>(); /// from: public void (java.util.Map map, java.util.Map map1, java.util.Set set) - AggregationResult(jni.JObject map, jni.JObject map1, Set set0) - : super.fromRef( - _ctor(map.reference, map1.reference, set0.reference).object); + /// The returned object must be released after use, by calling the [release] method. + factory AggregationResult( + jni.JMap map, + jni.JMap map1, + jni.JSet set0, + ) { + return AggregationResult.fromRef( + _new0(map.reference, map1.reference, set0.reference).object); + } static final _getDataOrigins = jniLookup< - ffi.NativeFunction< - jni.JniResult Function( - ffi.Pointer)>>("AggregationResult__getDataOrigins") + ffi + .NativeFunction)>>( + "AggregationResult__getDataOrigins") .asFunction)>(); /// from: public final java.util.Set getDataOrigins() - /// The returned object must be deleted after use, by calling the `delete` method. - Set getDataOrigins() => const $SetType(jni.JObjectType()) - .fromRef(_getDataOrigins(reference).object); + /// The returned object must be released after use, by calling the [release] method. + jni.JSet getDataOrigins() { + return const jni.JSetType(jni.JObjectType()) + .fromRef(_getDataOrigins(reference).object); + } static final _hasMetric = jniLookup< ffi.NativeFunction< @@ -12002,8 +13695,11 @@ class AggregationResult extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public final boolean hasMetric(androidx.health.connect.client.aggregate.AggregateMetric aggregateMetric) - bool hasMetric(AggregateMetric aggregateMetric) => - _hasMetric(reference, aggregateMetric.reference).boolean; + bool hasMetric( + AggregateMetric aggregateMetric, + ) { + return _hasMetric(reference, aggregateMetric.reference).boolean; + } static final _contains = jniLookup< ffi.NativeFunction< @@ -12014,8 +13710,11 @@ class AggregationResult extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public final boolean contains(androidx.health.connect.client.aggregate.AggregateMetric aggregateMetric) - bool contains(AggregateMetric aggregateMetric) => - _contains(reference, aggregateMetric.reference).boolean; + bool contains( + AggregateMetric aggregateMetric, + ) { + return _contains(reference, aggregateMetric.reference).boolean; + } static final _getMetric = jniLookup< ffi.NativeFunction< @@ -12026,10 +13725,16 @@ class AggregationResult extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public final T getMetric(androidx.health.connect.client.aggregate.AggregateMetric aggregateMetric) - /// The returned object must be deleted after use, by calling the `delete` method. - T getMetric( - jni.JObjType $T, AggregateMetric aggregateMetric) => - $T.fromRef(_getMetric(reference, aggregateMetric.reference).object); + /// The returned object must be released after use, by calling the [release] method. + $T getMetric<$T extends jni.JObject>( + AggregateMetric<$T> aggregateMetric, { + jni.JObjType<$T>? T, + }) { + T ??= jni.lowestCommonSuperType([ + (aggregateMetric.$type as $AggregateMetricType).T, + ]) as jni.JObjType<$T>; + return T.fromRef(_getMetric(reference, aggregateMetric.reference).object); + } static final _get0 = jniLookup< ffi.NativeFunction< @@ -12040,10 +13745,16 @@ class AggregationResult extends jni.JObject { ffi.Pointer, ffi.Pointer)>(); /// from: public final T get(androidx.health.connect.client.aggregate.AggregateMetric aggregateMetric) - /// The returned object must be deleted after use, by calling the `delete` method. - T get0( - jni.JObjType $T, AggregateMetric aggregateMetric) => - $T.fromRef(_get0(reference, aggregateMetric.reference).object); + /// The returned object must be released after use, by calling the [release] method. + $T get0<$T extends jni.JObject>( + AggregateMetric<$T> aggregateMetric, { + jni.JObjType<$T>? T, + }) { + T ??= jni.lowestCommonSuperType([ + (aggregateMetric.$type as $AggregateMetricType).T, + ]) as jni.JObjType<$T>; + return T.fromRef(_get0(reference, aggregateMetric.reference).object); + } } class $AggregationResultType extends jni.JObjType { @@ -12056,40 +13767,418 @@ class $AggregationResultType extends jni.JObjType { @override AggregationResult fromRef(jni.JObjectPtr ref) => AggregationResult.fromRef(ref); + + @override + jni.JObjType get superType => const jni.JObjectType(); + + @override + final superCount = 1; + + @override + int get hashCode => ($AggregationResultType).hashCode; + + @override + bool operator ==(Object other) { + return other.runtimeType == ($AggregationResultType) && + other is $AggregationResultType; + } +} + +/// from: androidx.health.connect.client.aggregate.AggregateMetric$AggregationType +class AggregateMetric_AggregationType extends jni.JObject { + @override + late final jni.JObjType $type = type; + + AggregateMetric_AggregationType.fromRef(super.ref) : super.fromRef(); + + /// The type which includes information such as the signature of this class. + static const type = $AggregateMetric_AggregationTypeType(); + static final _get_DURATION = + jniLookup>( + "get_AggregateMetric_AggregationType__DURATION") + .asFunction(); + + /// from: static public final androidx.health.connect.client.aggregate.AggregateMetric$AggregationType DURATION + /// The returned object must be released after use, by calling the [release] method. + static AggregateMetric_AggregationType get DURATION => + const $AggregateMetric_AggregationTypeType() + .fromRef(_get_DURATION().object); + + static final _get_AVERAGE = + jniLookup>( + "get_AggregateMetric_AggregationType__AVERAGE") + .asFunction(); + + /// from: static public final androidx.health.connect.client.aggregate.AggregateMetric$AggregationType AVERAGE + /// The returned object must be released after use, by calling the [release] method. + static AggregateMetric_AggregationType get AVERAGE => + const $AggregateMetric_AggregationTypeType() + .fromRef(_get_AVERAGE().object); + + static final _get_MINIMUM = + jniLookup>( + "get_AggregateMetric_AggregationType__MINIMUM") + .asFunction(); + + /// from: static public final androidx.health.connect.client.aggregate.AggregateMetric$AggregationType MINIMUM + /// The returned object must be released after use, by calling the [release] method. + static AggregateMetric_AggregationType get MINIMUM => + const $AggregateMetric_AggregationTypeType() + .fromRef(_get_MINIMUM().object); + + static final _get_MAXIMUM = + jniLookup>( + "get_AggregateMetric_AggregationType__MAXIMUM") + .asFunction(); + + /// from: static public final androidx.health.connect.client.aggregate.AggregateMetric$AggregationType MAXIMUM + /// The returned object must be released after use, by calling the [release] method. + static AggregateMetric_AggregationType get MAXIMUM => + const $AggregateMetric_AggregationTypeType() + .fromRef(_get_MAXIMUM().object); + + static final _get_TOTAL = + jniLookup>( + "get_AggregateMetric_AggregationType__TOTAL") + .asFunction(); + + /// from: static public final androidx.health.connect.client.aggregate.AggregateMetric$AggregationType TOTAL + /// The returned object must be released after use, by calling the [release] method. + static AggregateMetric_AggregationType get TOTAL => + const $AggregateMetric_AggregationTypeType().fromRef(_get_TOTAL().object); + + static final _get_COUNT = + jniLookup>( + "get_AggregateMetric_AggregationType__COUNT") + .asFunction(); + + /// from: static public final androidx.health.connect.client.aggregate.AggregateMetric$AggregationType COUNT + /// The returned object must be released after use, by calling the [release] method. + static AggregateMetric_AggregationType get COUNT => + const $AggregateMetric_AggregationTypeType().fromRef(_get_COUNT().object); + + static final _getAggregationTypeString = jniLookup< + ffi + .NativeFunction)>>( + "AggregateMetric_AggregationType__getAggregationTypeString") + .asFunction)>(); + + /// from: public final java.lang.String getAggregationTypeString() + /// The returned object must be released after use, by calling the [release] method. + jni.JString getAggregationTypeString() { + return const jni.JStringType() + .fromRef(_getAggregationTypeString(reference).object); + } + + static final _values = + jniLookup>( + "AggregateMetric_AggregationType__values") + .asFunction(); + + /// from: static public androidx.health.connect.client.aggregate.AggregateMetric$AggregationType[] values() + /// The returned object must be released after use, by calling the [release] method. + static jni.JArray values() { + return const jni.JArrayType($AggregateMetric_AggregationTypeType()) + .fromRef(_values().object); + } + + static final _valueOf = jniLookup< + ffi + .NativeFunction)>>( + "AggregateMetric_AggregationType__valueOf") + .asFunction)>(); + + /// from: static public androidx.health.connect.client.aggregate.AggregateMetric$AggregationType valueOf(java.lang.String string) + /// The returned object must be released after use, by calling the [release] method. + static AggregateMetric_AggregationType valueOf( + jni.JString string, + ) { + return const $AggregateMetric_AggregationTypeType() + .fromRef(_valueOf(string.reference).object); + } +} + +class $AggregateMetric_AggregationTypeType + extends jni.JObjType { + const $AggregateMetric_AggregationTypeType(); + + @override + String get signature => + r"Landroidx/health/connect/client/aggregate/AggregateMetric$AggregationType;"; + + @override + AggregateMetric_AggregationType fromRef(jni.JObjectPtr ref) => + AggregateMetric_AggregationType.fromRef(ref); + + @override + jni.JObjType get superType => const jni.JObjectType(); + + @override + final superCount = 1; + + @override + int get hashCode => ($AggregateMetric_AggregationTypeType).hashCode; + + @override + bool operator ==(Object other) { + return other.runtimeType == ($AggregateMetric_AggregationTypeType) && + other is $AggregateMetric_AggregationTypeType; + } +} + +/// from: androidx.health.connect.client.aggregate.AggregateMetric$Companion +class AggregateMetric_Companion extends jni.JObject { + @override + late final jni.JObjType $type = type; + + AggregateMetric_Companion.fromRef(super.ref) : super.fromRef(); + + /// The type which includes information such as the signature of this class. + static const type = $AggregateMetric_CompanionType(); + static final _new0 = jniLookup< + ffi + .NativeFunction)>>( + "AggregateMetric_Companion__new0") + .asFunction)>(); + + /// from: public void (kotlin.jvm.internal.DefaultConstructorMarker defaultConstructorMarker) + /// The returned object must be released after use, by calling the [release] method. + factory AggregateMetric_Companion( + jni.JObject defaultConstructorMarker, + ) { + return AggregateMetric_Companion.fromRef( + _new0(defaultConstructorMarker.reference).object); + } +} + +class $AggregateMetric_CompanionType + extends jni.JObjType { + const $AggregateMetric_CompanionType(); + + @override + String get signature => + r"Landroidx/health/connect/client/aggregate/AggregateMetric$Companion;"; + + @override + AggregateMetric_Companion fromRef(jni.JObjectPtr ref) => + AggregateMetric_Companion.fromRef(ref); + + @override + jni.JObjType get superType => const jni.JObjectType(); + + @override + final superCount = 1; + + @override + int get hashCode => ($AggregateMetric_CompanionType).hashCode; + + @override + bool operator ==(Object other) { + return other.runtimeType == ($AggregateMetric_CompanionType) && + other is $AggregateMetric_CompanionType; + } +} + +/// from: androidx.health.connect.client.aggregate.AggregateMetric$Converter$FromDouble +class AggregateMetric_Converter_FromDouble<$R extends jni.JObject> + extends jni.JObject { + @override + late final jni.JObjType> $type = + type(R); + + final jni.JObjType<$R> R; + + AggregateMetric_Converter_FromDouble.fromRef( + this.R, + jni.JObjectPtr ref, + ) : super.fromRef(ref); + + /// The type which includes information such as the signature of this class. + static $AggregateMetric_Converter_FromDoubleType<$R> + type<$R extends jni.JObject>( + jni.JObjType<$R> R, + ) { + return $AggregateMetric_Converter_FromDoubleType( + R, + ); + } +} + +class $AggregateMetric_Converter_FromDoubleType<$R extends jni.JObject> + extends jni.JObjType> { + final jni.JObjType<$R> R; + + const $AggregateMetric_Converter_FromDoubleType( + this.R, + ); + + @override + String get signature => + r"Landroidx/health/connect/client/aggregate/AggregateMetric$Converter$FromDouble;"; + + @override + AggregateMetric_Converter_FromDouble<$R> fromRef(jni.JObjectPtr ref) => + AggregateMetric_Converter_FromDouble.fromRef(R, ref); + + @override + jni.JObjType get superType => const jni.JObjectType(); + + @override + final superCount = 1; + + @override + int get hashCode => Object.hash($AggregateMetric_Converter_FromDoubleType, R); + + @override + bool operator ==(Object other) { + return other.runtimeType == + ($AggregateMetric_Converter_FromDoubleType<$R>) && + other is $AggregateMetric_Converter_FromDoubleType<$R> && + R == other.R; + } } -extension $AggregationResultArray on jni.JArray { - AggregationResult operator [](int index) { - return (elementType as $AggregationResultType) - .fromRef(elementAt(index, jni.JniCallType.objectType).object); +/// from: androidx.health.connect.client.aggregate.AggregateMetric$Converter$FromLong +class AggregateMetric_Converter_FromLong<$R extends jni.JObject> + extends jni.JObject { + @override + late final jni.JObjType> $type = + type(R); + + final jni.JObjType<$R> R; + + AggregateMetric_Converter_FromLong.fromRef( + this.R, + jni.JObjectPtr ref, + ) : super.fromRef(ref); + + /// The type which includes information such as the signature of this class. + static $AggregateMetric_Converter_FromLongType<$R> + type<$R extends jni.JObject>( + jni.JObjType<$R> R, + ) { + return $AggregateMetric_Converter_FromLongType( + R, + ); + } +} + +class $AggregateMetric_Converter_FromLongType<$R extends jni.JObject> + extends jni.JObjType> { + final jni.JObjType<$R> R; + + const $AggregateMetric_Converter_FromLongType( + this.R, + ); + + @override + String get signature => + r"Landroidx/health/connect/client/aggregate/AggregateMetric$Converter$FromLong;"; + + @override + AggregateMetric_Converter_FromLong<$R> fromRef(jni.JObjectPtr ref) => + AggregateMetric_Converter_FromLong.fromRef(R, ref); + + @override + jni.JObjType get superType => const jni.JObjectType(); + + @override + final superCount = 1; + + @override + int get hashCode => Object.hash($AggregateMetric_Converter_FromLongType, R); + + @override + bool operator ==(Object other) { + return other.runtimeType == ($AggregateMetric_Converter_FromLongType<$R>) && + other is $AggregateMetric_Converter_FromLongType<$R> && + R == other.R; + } +} + +/// from: androidx.health.connect.client.aggregate.AggregateMetric$Converter +class AggregateMetric_Converter<$T extends jni.JObject, $R extends jni.JObject> + extends jni.JObject { + @override + late final jni.JObjType> $type = type(T, R); + + final jni.JObjType<$T> T; + final jni.JObjType<$R> R; + + AggregateMetric_Converter.fromRef( + this.T, + this.R, + jni.JObjectPtr ref, + ) : super.fromRef(ref); + + /// The type which includes information such as the signature of this class. + static $AggregateMetric_ConverterType<$T, $R> + type<$T extends jni.JObject, $R extends jni.JObject>( + jni.JObjType<$T> T, + jni.JObjType<$R> R, + ) { + return $AggregateMetric_ConverterType( + T, + R, + ); } +} + +class $AggregateMetric_ConverterType<$T extends jni.JObject, + $R extends jni.JObject> + extends jni.JObjType> { + final jni.JObjType<$T> T; + final jni.JObjType<$R> R; + + const $AggregateMetric_ConverterType( + this.T, + this.R, + ); + + @override + String get signature => + r"Landroidx/health/connect/client/aggregate/AggregateMetric$Converter;"; + + @override + AggregateMetric_Converter<$T, $R> fromRef(jni.JObjectPtr ref) => + AggregateMetric_Converter.fromRef(T, R, ref); - void operator []=(int index, AggregationResult value) { - (this as jni.JArray)[index] = value; + @override + jni.JObjType get superType => const jni.JObjectType(); + + @override + final superCount = 1; + + @override + int get hashCode => Object.hash($AggregateMetric_ConverterType, T, R); + + @override + bool operator ==(Object other) { + return other.runtimeType == ($AggregateMetric_ConverterType<$T, $R>) && + other is $AggregateMetric_ConverterType<$T, $R> && + T == other.T && + R == other.R; } } /// from: androidx.health.connect.client.aggregate.AggregateMetric -class AggregateMetric extends jni.JObject { - late final jni.JObjType? _$type; +class AggregateMetric<$T extends jni.JObject> extends jni.JObject { @override - jni.JObjType get $type => _$type ??= type( - $T, - ); + late final jni.JObjType> $type = type(T); - final jni.JObjType $T; + final jni.JObjType<$T> T; AggregateMetric.fromRef( - this.$T, + this.T, jni.JObjectPtr ref, ) : super.fromRef(ref); /// The type which includes information such as the signature of this class. - static $AggregateMetricType type( - jni.JObjType $T, + static $AggregateMetricType<$T> type<$T extends jni.JObject>( + jni.JObjType<$T> T, ) { return $AggregateMetricType( - $T, + T, ); } @@ -12099,35 +14188,47 @@ class AggregateMetric extends jni.JObject { .asFunction(); /// from: static public final androidx.health.connect.client.aggregate.AggregateMetric$Companion Companion - /// The returned object must be deleted after use, by calling the `delete` method. - static jni.JObject get Companion => - const jni.JObjectType().fromRef(_get_Companion().object); + /// The returned object must be released after use, by calling the [release] method. + static AggregateMetric_Companion get Companion => + const $AggregateMetric_CompanionType().fromRef(_get_Companion().object); - static final _ctor = jniLookup< + static final _new0 = jniLookup< ffi.NativeFunction< jni.JniResult Function( ffi.Pointer, ffi.Pointer, ffi.Pointer, - ffi.Pointer)>>("AggregateMetric__ctor") + ffi.Pointer)>>("AggregateMetric__new0") .asFunction< jni.JniResult Function(ffi.Pointer, ffi.Pointer, ffi.Pointer, ffi.Pointer)>(); /// from: public void (androidx.health.connect.client.aggregate.AggregateMetric$Converter converter, java.lang.String string, androidx.health.connect.client.aggregate.AggregateMetric$AggregationType aggregationType, java.lang.String string1) - AggregateMetric(this.$T, jni.JObject converter, jni.JString string, - jni.JObject aggregationType, jni.JString string1) - : super.fromRef(_ctor(converter.reference, string.reference, - aggregationType.reference, string1.reference) + /// The returned object must be released after use, by calling the [release] method. + factory AggregateMetric( + AggregateMetric_Converter converter, + jni.JString string, + AggregateMetric_AggregationType aggregationType, + jni.JString string1, { + jni.JObjType<$T>? T, + }) { + T ??= jni.lowestCommonSuperType([ + (converter.$type as $AggregateMetric_ConverterType).R, + ]) as jni.JObjType<$T>; + return AggregateMetric.fromRef( + T, + _new0(converter.reference, string.reference, aggregationType.reference, + string1.reference) .object); + } } -class $AggregateMetricType - extends jni.JObjType> { - final jni.JObjType $T; +class $AggregateMetricType<$T extends jni.JObject> + extends jni.JObjType> { + final jni.JObjType<$T> T; const $AggregateMetricType( - this.$T, + this.T, ); @override @@ -12135,18 +14236,22 @@ class $AggregateMetricType r"Landroidx/health/connect/client/aggregate/AggregateMetric;"; @override - AggregateMetric fromRef(jni.JObjectPtr ref) => - AggregateMetric.fromRef($T, ref); -} + AggregateMetric<$T> fromRef(jni.JObjectPtr ref) => + AggregateMetric.fromRef(T, ref); -extension $AggregateMetricArray - on jni.JArray> { - AggregateMetric operator [](int index) { - return (elementType as $AggregateMetricType) - .fromRef(elementAt(index, jni.JniCallType.objectType).object); - } + @override + jni.JObjType get superType => const jni.JObjectType(); + + @override + final superCount = 1; + + @override + int get hashCode => Object.hash($AggregateMetricType, T); - void operator []=(int index, AggregateMetric value) { - (this as jni.JArray)[index] = value; + @override + bool operator ==(Object other) { + return other.runtimeType == ($AggregateMetricType<$T>) && + other is $AggregateMetricType<$T> && + T == other.T; } } diff --git a/experimental/pedometer/lib/main.dart b/experimental/pedometer/lib/main.dart deleted file mode 100644 index ab73b3a23..000000000 --- a/experimental/pedometer/lib/main.dart +++ /dev/null @@ -1 +0,0 @@ -void main() {} diff --git a/experimental/pedometer/lib/pedometer_bindings_generated.dart b/experimental/pedometer/lib/pedometer_bindings_generated.dart index eb254c907..65f0432fa 100644 --- a/experimental/pedometer/lib/pedometer_bindings_generated.dart +++ b/experimental/pedometer/lib/pedometer_bindings_generated.dart @@ -1,15 +1,7 @@ // AUTO GENERATED FILE, DO NOT EDIT. // // Generated by `package:ffigen`. - -// ignore_for_file: library_private_types_in_public_api -// ignore_for_file: non_constant_identifier_names -// ignore_for_file: camel_case_types -// ignore_for_file: no_leading_underscores_for_local_identifiers -// ignore_for_file: void_checks -// ignore_for_file: constant_identifier_names -// ignore_for_file: annotate_overrides - +// ignore_for_file: type=lint import 'dart:ffi' as ffi; import 'package:ffi/ffi.dart' as pkg_ffi; @@ -20731,8 +20723,8 @@ class PedometerBindings { 'objc_msgSend'); late final __objc_msgSend_728 = __objc_msgSend_728Ptr.asFunction< ffi.Pointer< - ffi.NativeFunction< - ffi.UnsignedLong Function(ffi.Pointer)>> + ffi + .NativeFunction)>> Function(ffi.Pointer, ffi.Pointer)>(); late final _sel_setSizeFunction_1 = _registerName1("setSizeFunction:"); @@ -20740,8 +20732,8 @@ class PedometerBindings { ffi.Pointer obj, ffi.Pointer sel, ffi.Pointer< - ffi.NativeFunction< - ffi.UnsignedLong Function(ffi.Pointer)>> + ffi + .NativeFunction)>> value, ) { return __objc_msgSend_729( @@ -26232,13 +26224,13 @@ class NSObject extends _ObjCWrapper { } } -class ObjCSel extends ffi.Opaque {} +final class ObjCSel extends ffi.Opaque {} -class ObjCObject extends ffi.Opaque {} +final class ObjCObject extends ffi.Opaque {} typedef instancetype = ffi.Pointer; -class _NSZone extends ffi.Opaque {} +final class _NSZone extends ffi.Opaque {} class Protocol extends _ObjCWrapper { Protocol._(ffi.Pointer id, PedometerBindings lib, @@ -29348,7 +29340,7 @@ class NSData extends NSObject { } } -class _NSRange extends ffi.Struct { +final class _NSRange extends ffi.Struct { @ffi.UnsignedLong() external int location; @@ -31659,7 +31651,7 @@ class ObjCBlock extends _ObjCBlockBase { ffi.Pointer<_ObjCBlock> get pointer => _id; } -class _ObjCBlockDesc extends ffi.Struct { +final class _ObjCBlockDesc extends ffi.Struct { @ffi.UnsignedLong() external int reserved; @@ -31673,7 +31665,7 @@ class _ObjCBlockDesc extends ffi.Struct { external ffi.Pointer signature; } -class _ObjCBlock extends ffi.Struct { +final class _ObjCBlock extends ffi.Struct { external ffi.Pointer isa; @ffi.Int() @@ -32548,21 +32540,21 @@ class ObjCBlock7 extends _ObjCBlockBase { ObjCBlock7.fromFunctionPointer( PedometerBindings lib, ffi.Pointer< - ffi.NativeFunction< + ffi + .NativeFunction< ffi.Bool Function(ffi.Pointer arg0, ffi.Pointer arg1)>> ptr) : this._( - lib - ._newBlock1( - _cFuncTrampoline ??= ffi.Pointer.fromFunction< - ffi.Bool Function( - ffi.Pointer<_ObjCBlock> block, - ffi.Pointer arg0, - ffi.Pointer arg1)>( - _ObjCBlock7_fnPtrTrampoline, false) - .cast(), - ptr.cast()), + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Bool Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>( + _ObjCBlock7_fnPtrTrampoline, false) + .cast(), + ptr.cast()), lib); static ffi.Pointer? _cFuncTrampoline; @@ -32825,21 +32817,21 @@ class ObjCBlock8 extends _ObjCBlockBase { ObjCBlock8.fromFunctionPointer( PedometerBindings lib, ffi.Pointer< - ffi.NativeFunction< + ffi + .NativeFunction< ffi.Bool Function(ffi.Pointer arg0, ffi.Pointer arg1)>> ptr) : this._( - lib - ._newBlock1( - _cFuncTrampoline ??= ffi.Pointer.fromFunction< - ffi.Bool Function( - ffi.Pointer<_ObjCBlock> block, - ffi.Pointer arg0, - ffi.Pointer arg1)>( - _ObjCBlock8_fnPtrTrampoline, false) - .cast(), - ptr.cast()), + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Bool Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>( + _ObjCBlock8_fnPtrTrampoline, false) + .cast(), + ptr.cast()), lib); static ffi.Pointer? _cFuncTrampoline; @@ -33120,9 +33112,12 @@ class NSDictionary extends NSObject { } static NSDictionary dictionaryWithObject_forKey_( - PedometerBindings _lib, NSObject object, NSObject key) { - final _ret = _lib._objc_msgSend_140(_lib._class_NSDictionary1, - _lib._sel_dictionaryWithObject_forKey_1, object._id, key._id); + PedometerBindings _lib, NSObject object, NSObject? key) { + final _ret = _lib._objc_msgSend_140( + _lib._class_NSDictionary1, + _lib._sel_dictionaryWithObject_forKey_1, + object._id, + key?._id ?? ffi.nullptr); return NSDictionary._(_ret, _lib, retain: true, release: true); } @@ -33532,19 +33527,26 @@ class ObjCBlock10 extends _ObjCBlockBase { /// Creates a block from a C function pointer. ObjCBlock10.fromFunctionPointer( PedometerBindings lib, - ffi.Pointer arg0, ffi.Pointer arg1, ffi.Pointer arg2)>> + ffi.Pointer< + ffi + .NativeFunction< + ffi.Bool Function( + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>> ptr) : this._( - lib._newBlock1( - _cFuncTrampoline ??= ffi.Pointer.fromFunction< - ffi.Bool Function( - ffi.Pointer<_ObjCBlock> block, - ffi.Pointer arg0, - ffi.Pointer arg1, - ffi.Pointer arg2)>( - _ObjCBlock10_fnPtrTrampoline, false) - .cast(), - ptr.cast()), + lib + ._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Bool Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1, + ffi.Pointer arg2)>( + _ObjCBlock10_fnPtrTrampoline, false) + .cast(), + ptr.cast()), lib); static ffi.Pointer? _cFuncTrampoline; @@ -33588,7 +33590,7 @@ class ObjCBlock10 extends _ObjCBlockBase { ffi.Pointer<_ObjCBlock> get pointer => _id; } -class NSFastEnumerationState extends ffi.Struct { +final class NSFastEnumerationState extends ffi.Struct { @ffi.UnsignedLong() external int state; @@ -35547,7 +35549,8 @@ class ObjCBlock17 extends _ObjCBlockBase { ObjCBlock17.fromFunctionPointer( PedometerBindings lib, ffi.Pointer< - ffi.NativeFunction< + ffi + .NativeFunction< ffi.Bool Function(ffi.Pointer arg0, ffi.Pointer arg1)>> ptr) @@ -36322,8 +36325,8 @@ class ObjCBlock18 extends _ObjCBlockBase { ObjCBlock18.fromFunctionPointer( PedometerBindings lib, ffi.Pointer< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer arg0)>> + ffi + .NativeFunction arg0)>> ptr) : this._( lib._newBlock1( @@ -36448,21 +36451,21 @@ class ObjCBlock19 extends _ObjCBlockBase { ObjCBlock19.fromFunctionPointer( PedometerBindings lib, ffi.Pointer< - ffi.NativeFunction< + ffi + .NativeFunction< ffi.Bool Function(ffi.Pointer arg0, ffi.Pointer arg1)>> ptr) : this._( - lib - ._newBlock1( - _cFuncTrampoline ??= ffi.Pointer.fromFunction< - ffi.Bool Function( - ffi.Pointer<_ObjCBlock> block, - ffi.Pointer arg0, - ffi.Pointer arg1)>( - _ObjCBlock19_fnPtrTrampoline, false) - .cast(), - ptr.cast()), + lib._newBlock1( + _cFuncTrampoline ??= ffi.Pointer.fromFunction< + ffi.Bool Function( + ffi.Pointer<_ObjCBlock> block, + ffi.Pointer arg0, + ffi.Pointer arg1)>( + _ObjCBlock19_fnPtrTrampoline, false) + .cast(), + ptr.cast()), lib); static ffi.Pointer? _cFuncTrampoline; @@ -38981,8 +38984,8 @@ class ObjCBlock21 extends _ObjCBlockBase { void call() { return _id.ref.invoke .cast< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer<_ObjCBlock> block)>>() + ffi + .NativeFunction block)>>() .asFunction block)>()(_id); } @@ -39018,9 +39021,9 @@ class NSMutableDictionary extends NSDictionary { return _lib._objc_msgSend_15(_id, _lib._sel_removeObjectForKey_1, aKey._id); } - void setObject_forKey_(NSObject anObject, NSObject aKey) { - return _lib._objc_msgSend_460( - _id, _lib._sel_setObject_forKey_1, anObject._id, aKey._id); + void setObject_forKey_(NSObject anObject, NSObject? aKey) { + return _lib._objc_msgSend_460(_id, _lib._sel_setObject_forKey_1, + anObject._id, aKey?._id ?? ffi.nullptr); } @override @@ -39061,9 +39064,9 @@ class NSMutableDictionary extends NSDictionary { _id, _lib._sel_setDictionary_1, otherDictionary?._id ?? ffi.nullptr); } - void setObject_forKeyedSubscript_(NSObject obj, NSObject key) { - return _lib._objc_msgSend_460( - _id, _lib._sel_setObject_forKeyedSubscript_1, obj._id, key._id); + void setObject_forKeyedSubscript_(NSObject obj, NSObject? key) { + return _lib._objc_msgSend_460(_id, _lib._sel_setObject_forKeyedSubscript_1, + obj._id, key?._id ?? ffi.nullptr); } static NSMutableDictionary dictionaryWithCapacity_( @@ -39118,9 +39121,12 @@ class NSMutableDictionary extends NSDictionary { } static NSMutableDictionary dictionaryWithObject_forKey_( - PedometerBindings _lib, NSObject object, NSObject key) { - final _ret = _lib._objc_msgSend_140(_lib._class_NSMutableDictionary1, - _lib._sel_dictionaryWithObject_forKey_1, object._id, key._id); + PedometerBindings _lib, NSObject object, NSObject? key) { + final _ret = _lib._objc_msgSend_140( + _lib._class_NSMutableDictionary1, + _lib._sel_dictionaryWithObject_forKey_1, + object._id, + key?._id ?? ffi.nullptr); return NSMutableDictionary._(_ret, _lib, retain: true, release: true); } @@ -46212,7 +46218,7 @@ class NSScanner extends NSObject { } } -class NSDecimal extends ffi.Opaque {} +final class NSDecimal extends ffi.Opaque {} class NSException extends NSObject { NSException._(ffi.Pointer id, PedometerBindings lib, @@ -46610,7 +46616,7 @@ class NSRunLoop extends NSObject { } } -class __CFRunLoop extends ffi.Opaque {} +final class __CFRunLoop extends ffi.Opaque {} class NSTimer extends NSObject { NSTimer._(ffi.Pointer id, PedometerBindings lib, @@ -46917,8 +46923,8 @@ class ObjCBlock34 extends _ObjCBlockBase { ObjCBlock34.fromFunctionPointer( PedometerBindings lib, ffi.Pointer< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer arg0)>> + ffi + .NativeFunction arg0)>> ptr) : this._( lib._newBlock1( @@ -47574,8 +47580,8 @@ class ObjCBlock35 extends _ObjCBlockBase { ObjCBlock35.fromFunctionPointer( PedometerBindings lib, ffi.Pointer< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer arg0)>> + ffi + .NativeFunction arg0)>> ptr) : this._( lib._newBlock1( @@ -50032,8 +50038,8 @@ class ObjCBlock36 extends _ObjCBlockBase { ObjCBlock36.fromFunctionPointer( PedometerBindings lib, ffi.Pointer< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer arg0)>> + ffi + .NativeFunction arg0)>> ptr) : this._( lib._newBlock1( @@ -51186,7 +51192,7 @@ abstract class NSOperationQueuePriority { static const int NSOperationQueuePriorityVeryHigh = 8; } -class dispatch_queue_s extends ffi.Opaque {} +final class dispatch_queue_s extends ffi.Opaque {} class NSPointerArray extends NSObject { NSPointerArray._(ffi.Pointer id, PedometerBindings lib, @@ -51503,8 +51509,8 @@ class NSPointerFunctions extends NSObject { set sizeFunction( ffi.Pointer< - ffi.NativeFunction< - ffi.UnsignedLong Function(ffi.Pointer)>> + ffi + .NativeFunction)>> value) { _lib._objc_msgSend_729(_id, _lib._sel_setSizeFunction_1, value); } @@ -51958,7 +51964,7 @@ class NSProcessInfo extends NSObject { } } -class NSOperatingSystemVersion extends ffi.Struct { +final class NSOperatingSystemVersion extends ffi.Struct { @ffi.Long() external int majorVersion; @@ -53506,8 +53512,8 @@ class ObjCBlock39 extends _ObjCBlockBase { ObjCBlock39.fromFunctionPointer( PedometerBindings lib, ffi.Pointer< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer arg0)>> + ffi + .NativeFunction arg0)>> ptr) : this._( lib._newBlock1( @@ -54306,9 +54312,9 @@ abstract class NSURLCredentialPersistence { static const int NSURLCredentialPersistenceSynchronizable = 3; } -class __SecIdentity extends ffi.Opaque {} +final class __SecIdentity extends ffi.Opaque {} -class __SecTrust extends ffi.Opaque {} +final class __SecTrust extends ffi.Opaque {} /// ! /// @class NSURLProtectionSpace @@ -54883,8 +54889,8 @@ class ObjCBlock41 extends _ObjCBlockBase { ObjCBlock41.fromFunctionPointer( PedometerBindings lib, ffi.Pointer< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer arg0)>> + ffi + .NativeFunction arg0)>> ptr) : this._( lib._newBlock1( @@ -54953,8 +54959,8 @@ class ObjCBlock42 extends _ObjCBlockBase { ObjCBlock42.fromFunctionPointer( PedometerBindings lib, ffi.Pointer< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer arg0)>> + ffi + .NativeFunction arg0)>> ptr) : this._( lib._newBlock1( @@ -57739,8 +57745,8 @@ class ObjCBlock44 extends _ObjCBlockBase { ObjCBlock44.fromFunctionPointer( PedometerBindings lib, ffi.Pointer< - ffi.NativeFunction< - ffi.Void Function(ffi.Pointer arg0)>> + ffi + .NativeFunction arg0)>> ptr) : this._( lib._newBlock1( diff --git a/experimental/pedometer/pubspec.yaml b/experimental/pedometer/pubspec.yaml index bff084378..ab9302668 100644 --- a/experimental/pedometer/pubspec.yaml +++ b/experimental/pedometer/pubspec.yaml @@ -4,30 +4,22 @@ version: 0.0.1 publish_to: "none" environment: - sdk: '>=2.19.0-389.0.dev <3.0.0' + sdk: ^3.1.0 flutter: ">=2.11.0" dependencies: flutter: sdk: flutter plugin_platform_interface: ^2.0.2 - jni: - git: - url: https://github.com/dart-lang/jnigen - ref: suspend-fun - path: ./jni + jni: ^0.7.0 ffi: ^2.0.1 dev_dependencies: - ffigen: ^7.2.1 - jnigen: - git: - url: https://github.com/dart-lang/jnigen - ref: suspend-fun - path: ./jnigen + ffigen: ^9.0.0 + jnigen: ^0.7.0 flutter_test: sdk: flutter - flutter_lints: ^2.0.0 + flutter_lints: ^3.0.0 # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec @@ -50,6 +42,8 @@ flutter: platforms: ios: ffiPlugin: true + android: + ffiPlugin: true # To add assets to your plugin package, add an assets section, like this: # assets: diff --git a/experimental/pedometer/src/health_connect/dartjni.h b/experimental/pedometer/src/health_connect/dartjni.h index 46907544a..8f1dc7481 100644 --- a/experimental/pedometer/src/health_connect/dartjni.h +++ b/experimental/pedometer/src/health_connect/dartjni.h @@ -10,11 +10,6 @@ #include #include -#include "include/dart_api.h" -#include "include/dart_native_api.h" - -#include "include/dart_api_dl.h" - #if _WIN32 #include #else @@ -44,6 +39,107 @@ #define __ENVP_CAST (void**) #endif +/// Locking functions for windows and pthread. + +#if defined _WIN32 +#include + +typedef CRITICAL_SECTION MutexLock; +typedef CONDITION_VARIABLE ConditionVariable; + +static inline void init_lock(MutexLock* lock) { + InitializeCriticalSection(lock); +} + +static inline void acquire_lock(MutexLock* lock) { + EnterCriticalSection(lock); +} + +static inline void release_lock(MutexLock* lock) { + LeaveCriticalSection(lock); +} + +static inline void destroy_lock(MutexLock* lock) { + DeleteCriticalSection(lock); +} + +static inline void init_cond(ConditionVariable* cond) { + InitializeConditionVariable(cond); +} + +static inline void signal_cond(ConditionVariable* cond) { + WakeConditionVariable(cond); +} + +static inline void wait_for(ConditionVariable* cond, MutexLock* lock) { + SleepConditionVariableCS(cond, lock, INFINITE); +} + +static inline void destroy_cond(ConditionVariable* cond) { + // Not available. +} + +#elif defined __APPLE__ || defined __LINUX__ || defined __ANDROID__ || \ + defined __GNUC__ +#include + +typedef pthread_mutex_t MutexLock; +typedef pthread_cond_t ConditionVariable; + +static inline void init_lock(MutexLock* lock) { + pthread_mutex_init(lock, NULL); +} + +static inline void acquire_lock(MutexLock* lock) { + pthread_mutex_lock(lock); +} + +static inline void release_lock(MutexLock* lock) { + pthread_mutex_unlock(lock); +} + +static inline void destroy_lock(MutexLock* lock) { + pthread_mutex_destroy(lock); +} + +static inline void init_cond(ConditionVariable* cond) { + pthread_cond_init(cond, NULL); +} + +static inline void signal_cond(ConditionVariable* cond) { + pthread_cond_signal(cond); +} + +static inline void wait_for(ConditionVariable* cond, MutexLock* lock) { + pthread_cond_wait(cond, lock); +} + +static inline void destroy_cond(ConditionVariable* cond) { + pthread_cond_destroy(cond); +} + +#else + +#error "No locking/condition variable support; Possibly unsupported platform" + +#endif + +typedef struct CallbackResult { + MutexLock lock; + ConditionVariable cond; + int ready; + jobject object; +} CallbackResult; + +typedef struct JniLocks { + MutexLock classLoadingLock; + MutexLock methodLoadingLock; + MutexLock fieldLoadingLock; +} JniLocks; + +/// Represents the error when dart-jni layer has already spawned singleton VM. +#define DART_JNI_SINGLETON_EXISTS (-99); + /// Stores the global state of the JNI. typedef struct JniContext { JavaVM* jvm; @@ -51,13 +147,14 @@ typedef struct JniContext { jmethodID loadClassMethod; jobject currentActivity; jobject appContext; + JniLocks locks; } JniContext; // jniEnv for this thread, used by inline functions in this header, // therefore declared as extern. extern thread_local JNIEnv* jniEnv; -extern JniContext jni; +extern JniContext* jni; /// Types used by JNI API to distinguish between primitive types. enum JniType { @@ -78,19 +175,19 @@ enum JniType { /// If [exception] is null, it means the result is valid. /// It's assumed that the caller knows the expected type in [result]. typedef struct JniResult { - jvalue result; + jvalue value; jthrowable exception; } JniResult; /// Similar to [JniResult] but for class lookups. typedef struct JniClassLookupResult { - jclass classRef; + jclass value; jthrowable exception; } JniClassLookupResult; /// Similar to [JniResult] but for method/field ID lookups. typedef struct JniPointerResult { - void* id; + const void* value; jthrowable exception; } JniPointerResult; @@ -107,7 +204,7 @@ typedef struct JniExceptionDetails { /// Flutter embedding checks for pending JNI exceptions before an FFI transition, which requires us /// to check for and clear the exception before returning to dart code, which requires these functions /// to return result types. -typedef struct JniAccessors { +typedef struct JniAccessorsStruct { JniClassLookupResult (*getClass)(char* internalName); JniPointerResult (*getFieldID)(jclass cls, char* fieldName, char* signature); JniPointerResult (*getStaticFieldID)(jclass cls, @@ -120,10 +217,10 @@ typedef struct JniAccessors { char* methodName, char* signature); JniResult (*newObject)(jclass cls, jmethodID ctor, jvalue* args); - JniPointerResult (*newPrimitiveArray)(jsize length, int type); - JniPointerResult (*newObjectArray)(jsize length, - jclass elementClass, - jobject initialElement); + JniResult (*newPrimitiveArray)(jsize length, int type); + JniResult (*newObjectArray)(jsize length, + jclass elementClass, + jobject initialElement); JniResult (*getArrayElement)(jarray array, int index, int type); JniResult (*callMethod)(jobject obj, jmethodID methodID, @@ -136,62 +233,81 @@ typedef struct JniAccessors { JniResult (*getField)(jobject obj, jfieldID fieldID, int callType); JniResult (*getStaticField)(jclass cls, jfieldID fieldID, int callType); JniExceptionDetails (*getExceptionDetails)(jthrowable exception); -} JniAccessors; +} JniAccessorsStruct; -FFI_PLUGIN_EXPORT JniAccessors* GetAccessors(); +FFI_PLUGIN_EXPORT JniAccessorsStruct* GetAccessors(); FFI_PLUGIN_EXPORT JavaVM* GetJavaVM(void); FFI_PLUGIN_EXPORT JNIEnv* GetJniEnv(void); -FFI_PLUGIN_EXPORT JNIEnv* SpawnJvm(JavaVMInitArgs* args); +/// Spawn a JVM with given arguments. +/// +/// Returns JNI_OK on success, and one of the documented JNI error codes on +/// failure. It returns DART_JNI_SINGLETON_EXISTS if an attempt to spawn multiple +/// JVMs is made, even if the underlying API potentially supports multiple VMs. +FFI_PLUGIN_EXPORT int SpawnJvm(JavaVMInitArgs* args); -FFI_PLUGIN_EXPORT jclass LoadClass(const char* name); +/// Load class through platform-specific mechanism. +/// +/// Currently uses application classloader on android, +/// and JNIEnv->FindClass on other platforms. +FFI_PLUGIN_EXPORT jclass FindClass(const char* name); +/// Returns Application classLoader (on Android), +/// which can be used to load application and platform classes. +/// +/// On other platforms, NULL is returned. FFI_PLUGIN_EXPORT jobject GetClassLoader(void); +/// Returns application context on Android. +/// +/// On other platforms, NULL is returned. FFI_PLUGIN_EXPORT jobject GetApplicationContext(void); +/// Returns current activity of the app on Android. FFI_PLUGIN_EXPORT jobject GetCurrentActivity(void); -// Migration note: Below inline functions are required by C bindings, but can be moved to dartjni.c -// once migration to pure dart bindings is complete. - -// `static inline` because `inline` doesn't work, it may still not -// inline the function in which case a linker error may be produced. -// -// There has to be a better way to do this. Either to force inlining on target -// platforms, or just leave it as normal function. +static inline void attach_thread() { + if (jniEnv == NULL) { + (*jni->jvm)->AttachCurrentThread(jni->jvm, __ENVP_CAST & jniEnv, NULL); + } +} -static inline void __load_class_into(jclass* cls, const char* name) { +/// Load class into [cls] using platform specific mechanism +static inline void load_class_platform(jclass* cls, const char* name) { #ifdef __ANDROID__ jstring className = (*jniEnv)->NewStringUTF(jniEnv, name); - *cls = (*jniEnv)->CallObjectMethod(jniEnv, jni.classLoader, - jni.loadClassMethod, className); + *cls = (*jniEnv)->CallObjectMethod(jniEnv, jni->classLoader, + jni->loadClassMethod, className); (*jniEnv)->DeleteLocalRef(jniEnv, className); #else *cls = (*jniEnv)->FindClass(jniEnv, name); #endif } -static inline void load_class(jclass* cls, const char* name) { +static inline void load_class_local_ref(jclass* cls, const char* name) { if (*cls == NULL) { - __load_class_into(cls, name); + acquire_lock(&jni->locks.classLoadingLock); + if (*cls == NULL) { + load_class_platform(cls, name); + } + release_lock(&jni->locks.classLoadingLock); } } -static inline void load_class_gr(jclass* cls, const char* name) { +static inline void load_class_global_ref(jclass* cls, const char* name) { if (*cls == NULL) { - jclass tmp; - __load_class_into(&tmp, name); - *cls = (*jniEnv)->NewGlobalRef(jniEnv, tmp); - (*jniEnv)->DeleteLocalRef(jniEnv, tmp); - } -} - -static inline void attach_thread() { - if (jniEnv == NULL) { - (*jni.jvm)->AttachCurrentThread(jni.jvm, __ENVP_CAST & jniEnv, NULL); + jclass tmp = NULL; + acquire_lock(&jni->locks.classLoadingLock); + if (*cls == NULL) { + load_class_platform(&tmp, name); + if (!(*jniEnv)->ExceptionCheck(jniEnv)) { + *cls = (*jniEnv)->NewGlobalRef(jniEnv, tmp); + (*jniEnv)->DeleteLocalRef(jniEnv, tmp); + } + } + release_lock(&jni->locks.classLoadingLock); } } @@ -200,7 +316,11 @@ static inline void load_method(jclass cls, const char* name, const char* sig) { if (*res == NULL) { - *res = (*jniEnv)->GetMethodID(jniEnv, cls, name, sig); + acquire_lock(&jni->locks.methodLoadingLock); + if (*res == NULL) { + *res = (*jniEnv)->GetMethodID(jniEnv, cls, name, sig); + } + release_lock(&jni->locks.methodLoadingLock); } } @@ -209,7 +329,11 @@ static inline void load_static_method(jclass cls, const char* name, const char* sig) { if (*res == NULL) { - *res = (*jniEnv)->GetStaticMethodID(jniEnv, cls, name, sig); + acquire_lock(&jni->locks.methodLoadingLock); + if (*res == NULL) { + *res = (*jniEnv)->GetStaticMethodID(jniEnv, cls, name, sig); + } + release_lock(&jni->locks.methodLoadingLock); } } @@ -218,7 +342,11 @@ static inline void load_field(jclass cls, const char* name, const char* sig) { if (*res == NULL) { - *res = (*jniEnv)->GetFieldID(jniEnv, cls, name, sig); + acquire_lock(&jni->locks.fieldLoadingLock); + if (*res == NULL) { + *res = (*jniEnv)->GetFieldID(jniEnv, cls, name, sig); + } + release_lock(&jni->locks.fieldLoadingLock); } } @@ -227,7 +355,11 @@ static inline void load_static_field(jclass cls, const char* name, const char* sig) { if (*res == NULL) { - *res = (*jniEnv)->GetStaticFieldID(jniEnv, cls, name, sig); + acquire_lock(&jni->locks.fieldLoadingLock); + if (*res == NULL) { + *res = (*jniEnv)->GetStaticFieldID(jniEnv, cls, name, sig); + } + release_lock(&jni->locks.fieldLoadingLock); } } @@ -239,17 +371,18 @@ static inline jobject to_global_ref(jobject ref) { // These functions are useful for C+Dart bindings, and not required for pure dart bindings. -FFI_PLUGIN_EXPORT JniContext GetJniContext(); +FFI_PLUGIN_EXPORT JniContext* GetJniContextPtr(); + /// For use by jni_gen's generated code /// don't use these. // these 2 fn ptr vars will be defined by generated code library -extern JniContext (*context_getter)(void); +extern JniContext* (*context_getter)(void); extern JNIEnv* (*env_getter)(void); // this function will be exported by generated code library // it will set above 2 variables. -FFI_PLUGIN_EXPORT void setJniGetters(struct JniContext (*cg)(void), +FFI_PLUGIN_EXPORT void setJniGetters(struct JniContext* (*cg)(void), JNIEnv* (*eg)(void)); static inline void load_env() { @@ -266,12 +399,26 @@ static inline jthrowable check_exception() { return to_global_ref(exception); } -DART_EXPORT intptr_t InitDartApiDL(void* data); +static inline JniResult to_global_ref_result(jobject ref) { + JniResult result; + result.exception = check_exception(); + if (result.exception == NULL) { + result.value.l = to_global_ref(ref); + } + return result; +} + +FFI_PLUGIN_EXPORT intptr_t InitDartApiDL(void* data); + +FFI_PLUGIN_EXPORT +JniResult DartException__ctor(jstring message); -JNIEXPORT void JNICALL -Java_com_github_dart_1lang_jni_PortContinuation__1resumeWith(JNIEnv* env, - jobject thiz, - jlong port, - jobject result); FFI_PLUGIN_EXPORT JniResult PortContinuation__ctor(int64_t j); + +FFI_PLUGIN_EXPORT +JniResult PortProxy__newInstance(jobject binaryName, + int64_t port, + int64_t functionPtr); + +FFI_PLUGIN_EXPORT void resultFor(CallbackResult* result, jobject object); diff --git a/experimental/pedometer/src/health_connect/health_connect.c b/experimental/pedometer/src/health_connect/health_connect.c index 7dec6a93f..a71cf8eca 100644 --- a/experimental/pedometer/src/health_connect/health_connect.c +++ b/experimental/pedometer/src/health_connect/health_connect.c @@ -5,16 +5,105 @@ #include "jni.h" thread_local JNIEnv* jniEnv; -JniContext jni; +JniContext* jni; -JniContext (*context_getter)(void); +JniContext* (*context_getter)(void); JNIEnv* (*env_getter)(void); -void setJniGetters(JniContext (*cg)(void), JNIEnv* (*eg)(void)) { +void setJniGetters(JniContext* (*cg)(void), JNIEnv* (*eg)(void)) { context_getter = cg; env_getter = eg; } +// androidx.health.connect.client.HealthConnectClient$Companion +jclass _c_HealthConnectClient_Companion = NULL; + +jmethodID _m_HealthConnectClient_Companion__isAvailable = NULL; +FFI_PLUGIN_EXPORT +JniResult HealthConnectClient_Companion__isAvailable(jobject self_, + jobject context, + jobject list) { + load_env(); + load_class_global_ref( + &_c_HealthConnectClient_Companion, + "androidx/health/connect/client/HealthConnectClient$Companion"); + if (_c_HealthConnectClient_Companion == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_HealthConnectClient_Companion, + &_m_HealthConnectClient_Companion__isAvailable, "isAvailable", + "(Landroid/content/Context;Ljava/util/List;)Z"); + if (_m_HealthConnectClient_Companion__isAvailable == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_HealthConnectClient_Companion__isAvailable, context, + list); + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_HealthConnectClient_Companion__getOrCreate = NULL; +FFI_PLUGIN_EXPORT +JniResult HealthConnectClient_Companion__getOrCreate(jobject self_, + jobject context, + jobject list) { + load_env(); + load_class_global_ref( + &_c_HealthConnectClient_Companion, + "androidx/health/connect/client/HealthConnectClient$Companion"); + if (_c_HealthConnectClient_Companion == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_HealthConnectClient_Companion, + &_m_HealthConnectClient_Companion__getOrCreate, "getOrCreate", + "(Landroid/content/Context;Ljava/util/List;)Landroidx/health/" + "connect/client/HealthConnectClient;"); + if (_m_HealthConnectClient_Companion__getOrCreate == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_HealthConnectClient_Companion__getOrCreate, context, + list); + return to_global_ref_result(_result); +} + +jmethodID _m_HealthConnectClient_Companion__isAvailable1 = NULL; +FFI_PLUGIN_EXPORT +JniResult HealthConnectClient_Companion__isAvailable1(jobject self_, + jobject context) { + load_env(); + load_class_global_ref( + &_c_HealthConnectClient_Companion, + "androidx/health/connect/client/HealthConnectClient$Companion"); + if (_c_HealthConnectClient_Companion == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_HealthConnectClient_Companion, + &_m_HealthConnectClient_Companion__isAvailable1, "isAvailable", + "(Landroid/content/Context;)Z"); + if (_m_HealthConnectClient_Companion__isAvailable1 == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_HealthConnectClient_Companion__isAvailable1, context); + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_HealthConnectClient_Companion__getOrCreate1 = NULL; +FFI_PLUGIN_EXPORT +JniResult HealthConnectClient_Companion__getOrCreate1(jobject self_, + jobject context) { + load_env(); + load_class_global_ref( + &_c_HealthConnectClient_Companion, + "androidx/health/connect/client/HealthConnectClient$Companion"); + if (_c_HealthConnectClient_Companion == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_HealthConnectClient_Companion, + &_m_HealthConnectClient_Companion__getOrCreate1, "getOrCreate", + "(Landroid/content/Context;)Landroidx/health/connect/client/" + "HealthConnectClient;"); + if (_m_HealthConnectClient_Companion__getOrCreate1 == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_HealthConnectClient_Companion__getOrCreate1, context); + return to_global_ref_result(_result); +} + // androidx.health.connect.client.HealthConnectClient jclass _c_HealthConnectClient = NULL; @@ -22,20 +111,19 @@ jmethodID _m_HealthConnectClient__getPermissionController = NULL; FFI_PLUGIN_EXPORT JniResult HealthConnectClient__getPermissionController(jobject self_) { load_env(); - load_class_gr(&_c_HealthConnectClient, - "androidx/health/connect/client/HealthConnectClient"); + load_class_global_ref(&_c_HealthConnectClient, + "androidx/health/connect/client/HealthConnectClient"); if (_c_HealthConnectClient == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_HealthConnectClient, &_m_HealthConnectClient__getPermissionController, "getPermissionController", "()Landroidx/health/connect/client/PermissionController;"); if (_m_HealthConnectClient__getPermissionController == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_HealthConnectClient__getPermissionController); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_HealthConnectClient__insertRecords = NULL; @@ -44,20 +132,19 @@ JniResult HealthConnectClient__insertRecords(jobject self_, jobject list, jobject continuation) { load_env(); - load_class_gr(&_c_HealthConnectClient, - "androidx/health/connect/client/HealthConnectClient"); + load_class_global_ref(&_c_HealthConnectClient, + "androidx/health/connect/client/HealthConnectClient"); if (_c_HealthConnectClient == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_HealthConnectClient, &_m_HealthConnectClient__insertRecords, "insertRecords", "(Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;"); if (_m_HealthConnectClient__insertRecords == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_HealthConnectClient__insertRecords, list, continuation); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_HealthConnectClient__updateRecords = NULL; @@ -66,20 +153,19 @@ JniResult HealthConnectClient__updateRecords(jobject self_, jobject list, jobject continuation) { load_env(); - load_class_gr(&_c_HealthConnectClient, - "androidx/health/connect/client/HealthConnectClient"); + load_class_global_ref(&_c_HealthConnectClient, + "androidx/health/connect/client/HealthConnectClient"); if (_c_HealthConnectClient == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_HealthConnectClient, &_m_HealthConnectClient__updateRecords, "updateRecords", "(Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;"); if (_m_HealthConnectClient__updateRecords == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_HealthConnectClient__updateRecords, list, continuation); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_HealthConnectClient__deleteRecords = NULL; @@ -90,21 +176,20 @@ JniResult HealthConnectClient__deleteRecords(jobject self_, jobject list1, jobject continuation) { load_env(); - load_class_gr(&_c_HealthConnectClient, - "androidx/health/connect/client/HealthConnectClient"); + load_class_global_ref(&_c_HealthConnectClient, + "androidx/health/connect/client/HealthConnectClient"); if (_c_HealthConnectClient == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_HealthConnectClient, &_m_HealthConnectClient__deleteRecords, "deleteRecords", "(Lkotlin/reflect/KClass;Ljava/util/List;Ljava/util/List;Lkotlin/" "coroutines/Continuation;)Ljava/lang/Object;"); if (_m_HealthConnectClient__deleteRecords == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_HealthConnectClient__deleteRecords, kClass, list, list1, continuation); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_HealthConnectClient__deleteRecords1 = NULL; @@ -114,22 +199,21 @@ JniResult HealthConnectClient__deleteRecords1(jobject self_, jobject timeRangeFilter, jobject continuation) { load_env(); - load_class_gr(&_c_HealthConnectClient, - "androidx/health/connect/client/HealthConnectClient"); + load_class_global_ref(&_c_HealthConnectClient, + "androidx/health/connect/client/HealthConnectClient"); if (_c_HealthConnectClient == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_HealthConnectClient, &_m_HealthConnectClient__deleteRecords1, "deleteRecords", "(Lkotlin/reflect/KClass;Landroidx/health/connect/client/time/" "TimeRangeFilter;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;"); if (_m_HealthConnectClient__deleteRecords1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_HealthConnectClient__deleteRecords1, kClass, timeRangeFilter, continuation); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_HealthConnectClient__readRecord = NULL; @@ -139,21 +223,20 @@ JniResult HealthConnectClient__readRecord(jobject self_, jobject string, jobject continuation) { load_env(); - load_class_gr(&_c_HealthConnectClient, - "androidx/health/connect/client/HealthConnectClient"); + load_class_global_ref(&_c_HealthConnectClient, + "androidx/health/connect/client/HealthConnectClient"); if (_c_HealthConnectClient == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_HealthConnectClient, &_m_HealthConnectClient__readRecord, "readRecord", "(Lkotlin/reflect/KClass;Ljava/lang/String;Lkotlin/coroutines/" "Continuation;)Ljava/lang/Object;"); if (_m_HealthConnectClient__readRecord == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_HealthConnectClient__readRecord, kClass, string, continuation); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_HealthConnectClient__readRecords = NULL; @@ -162,22 +245,21 @@ JniResult HealthConnectClient__readRecords(jobject self_, jobject readRecordsRequest, jobject continuation) { load_env(); - load_class_gr(&_c_HealthConnectClient, - "androidx/health/connect/client/HealthConnectClient"); + load_class_global_ref(&_c_HealthConnectClient, + "androidx/health/connect/client/HealthConnectClient"); if (_c_HealthConnectClient == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_HealthConnectClient, &_m_HealthConnectClient__readRecords, "readRecords", "(Landroidx/health/connect/client/request/ReadRecordsRequest;Lkotlin/" "coroutines/Continuation;)Ljava/lang/Object;"); if (_m_HealthConnectClient__readRecords == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_HealthConnectClient__readRecords, readRecordsRequest, continuation); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_HealthConnectClient__aggregate = NULL; @@ -186,21 +268,20 @@ JniResult HealthConnectClient__aggregate(jobject self_, jobject aggregateRequest, jobject continuation) { load_env(); - load_class_gr(&_c_HealthConnectClient, - "androidx/health/connect/client/HealthConnectClient"); + load_class_global_ref(&_c_HealthConnectClient, + "androidx/health/connect/client/HealthConnectClient"); if (_c_HealthConnectClient == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_HealthConnectClient, &_m_HealthConnectClient__aggregate, "aggregate", "(Landroidx/health/connect/client/request/AggregateRequest;Lkotlin/" "coroutines/Continuation;)Ljava/lang/Object;"); if (_m_HealthConnectClient__aggregate == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_HealthConnectClient__aggregate, aggregateRequest, continuation); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_HealthConnectClient__aggregateGroupByDuration = NULL; @@ -210,10 +291,10 @@ JniResult HealthConnectClient__aggregateGroupByDuration( jobject aggregateGroupByDurationRequest, jobject continuation) { load_env(); - load_class_gr(&_c_HealthConnectClient, - "androidx/health/connect/client/HealthConnectClient"); + load_class_global_ref(&_c_HealthConnectClient, + "androidx/health/connect/client/HealthConnectClient"); if (_c_HealthConnectClient == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_HealthConnectClient, &_m_HealthConnectClient__aggregateGroupByDuration, "aggregateGroupByDuration", @@ -221,12 +302,11 @@ JniResult HealthConnectClient__aggregateGroupByDuration( "AggregateGroupByDurationRequest;Lkotlin/coroutines/" "Continuation;)Ljava/lang/Object;"); if (_m_HealthConnectClient__aggregateGroupByDuration == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_HealthConnectClient__aggregateGroupByDuration, aggregateGroupByDurationRequest, continuation); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_HealthConnectClient__aggregateGroupByPeriod = NULL; @@ -236,10 +316,10 @@ JniResult HealthConnectClient__aggregateGroupByPeriod( jobject aggregateGroupByPeriodRequest, jobject continuation) { load_env(); - load_class_gr(&_c_HealthConnectClient, - "androidx/health/connect/client/HealthConnectClient"); + load_class_global_ref(&_c_HealthConnectClient, + "androidx/health/connect/client/HealthConnectClient"); if (_c_HealthConnectClient == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_HealthConnectClient, &_m_HealthConnectClient__aggregateGroupByPeriod, "aggregateGroupByPeriod", @@ -247,12 +327,11 @@ JniResult HealthConnectClient__aggregateGroupByPeriod( "AggregateGroupByPeriodRequest;Lkotlin/coroutines/" "Continuation;)Ljava/lang/Object;"); if (_m_HealthConnectClient__aggregateGroupByPeriod == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_HealthConnectClient__aggregateGroupByPeriod, aggregateGroupByPeriodRequest, continuation); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_HealthConnectClient__getChangesToken = NULL; @@ -261,22 +340,70 @@ JniResult HealthConnectClient__getChangesToken(jobject self_, jobject changesTokenRequest, jobject continuation) { load_env(); - load_class_gr(&_c_HealthConnectClient, - "androidx/health/connect/client/HealthConnectClient"); + load_class_global_ref(&_c_HealthConnectClient, + "androidx/health/connect/client/HealthConnectClient"); if (_c_HealthConnectClient == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_HealthConnectClient, &_m_HealthConnectClient__getChangesToken, "getChangesToken", "(Landroidx/health/connect/client/request/ChangesTokenRequest;Lkotlin/" "coroutines/Continuation;)Ljava/lang/Object;"); if (_m_HealthConnectClient__getChangesToken == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_HealthConnectClient__getChangesToken, changesTokenRequest, continuation); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); +} + +jmethodID _m_HealthConnectClient__registerForDataNotifications = NULL; +FFI_PLUGIN_EXPORT +JniResult HealthConnectClient__registerForDataNotifications( + jobject self_, + jobject string, + jobject iterable, + jobject continuation) { + load_env(); + load_class_global_ref(&_c_HealthConnectClient, + "androidx/health/connect/client/HealthConnectClient"); + if (_c_HealthConnectClient == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_HealthConnectClient, + &_m_HealthConnectClient__registerForDataNotifications, + "registerForDataNotifications", + "(Ljava/lang/String;Ljava/lang/Iterable;Lkotlin/coroutines/" + "Continuation;)Ljava/lang/Object;"); + if (_m_HealthConnectClient__registerForDataNotifications == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_HealthConnectClient__registerForDataNotifications, + string, iterable, continuation); + return to_global_ref_result(_result); +} + +jmethodID _m_HealthConnectClient__unregisterFromDataNotifications = NULL; +FFI_PLUGIN_EXPORT +JniResult HealthConnectClient__unregisterFromDataNotifications( + jobject self_, + jobject string, + jobject continuation) { + load_env(); + load_class_global_ref(&_c_HealthConnectClient, + "androidx/health/connect/client/HealthConnectClient"); + if (_c_HealthConnectClient == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method( + _c_HealthConnectClient, + &_m_HealthConnectClient__unregisterFromDataNotifications, + "unregisterFromDataNotifications", + "(Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;"); + if (_m_HealthConnectClient__unregisterFromDataNotifications == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_HealthConnectClient__unregisterFromDataNotifications, + string, continuation); + return to_global_ref_result(_result); } jmethodID _m_HealthConnectClient__getChanges = NULL; @@ -285,164 +412,196 @@ JniResult HealthConnectClient__getChanges(jobject self_, jobject string, jobject continuation) { load_env(); - load_class_gr(&_c_HealthConnectClient, - "androidx/health/connect/client/HealthConnectClient"); + load_class_global_ref(&_c_HealthConnectClient, + "androidx/health/connect/client/HealthConnectClient"); if (_c_HealthConnectClient == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_HealthConnectClient, &_m_HealthConnectClient__getChanges, "getChanges", "(Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;"); if (_m_HealthConnectClient__getChanges == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_HealthConnectClient__getChanges, string, continuation); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_HealthConnectClient__isAvailable = NULL; FFI_PLUGIN_EXPORT JniResult HealthConnectClient__isAvailable(jobject context, jobject list) { load_env(); - load_class_gr(&_c_HealthConnectClient, - "androidx/health/connect/client/HealthConnectClient"); + load_class_global_ref(&_c_HealthConnectClient, + "androidx/health/connect/client/HealthConnectClient"); if (_c_HealthConnectClient == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_static_method(_c_HealthConnectClient, &_m_HealthConnectClient__isAvailable, "isAvailable", "(Landroid/content/Context;Ljava/util/List;)Z"); if (_m_HealthConnectClient__isAvailable == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallStaticBooleanMethod( jniEnv, _c_HealthConnectClient, _m_HealthConnectClient__isAvailable, context, list); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_HealthConnectClient__getOrCreate = NULL; FFI_PLUGIN_EXPORT JniResult HealthConnectClient__getOrCreate(jobject context, jobject list) { load_env(); - load_class_gr(&_c_HealthConnectClient, - "androidx/health/connect/client/HealthConnectClient"); + load_class_global_ref(&_c_HealthConnectClient, + "androidx/health/connect/client/HealthConnectClient"); if (_c_HealthConnectClient == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_static_method(_c_HealthConnectClient, &_m_HealthConnectClient__getOrCreate, "getOrCreate", "(Landroid/content/Context;Ljava/util/List;)Landroidx/" "health/connect/client/HealthConnectClient;"); if (_m_HealthConnectClient__getOrCreate == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallStaticObjectMethod( jniEnv, _c_HealthConnectClient, _m_HealthConnectClient__getOrCreate, context, list); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_HealthConnectClient__isAvailable1 = NULL; FFI_PLUGIN_EXPORT JniResult HealthConnectClient__isAvailable1(jobject context) { load_env(); - load_class_gr(&_c_HealthConnectClient, - "androidx/health/connect/client/HealthConnectClient"); + load_class_global_ref(&_c_HealthConnectClient, + "androidx/health/connect/client/HealthConnectClient"); if (_c_HealthConnectClient == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_static_method(_c_HealthConnectClient, &_m_HealthConnectClient__isAvailable1, "isAvailable", "(Landroid/content/Context;)Z"); if (_m_HealthConnectClient__isAvailable1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallStaticBooleanMethod( jniEnv, _c_HealthConnectClient, _m_HealthConnectClient__isAvailable1, context); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_HealthConnectClient__getOrCreate1 = NULL; FFI_PLUGIN_EXPORT JniResult HealthConnectClient__getOrCreate1(jobject context) { load_env(); - load_class_gr(&_c_HealthConnectClient, - "androidx/health/connect/client/HealthConnectClient"); + load_class_global_ref(&_c_HealthConnectClient, + "androidx/health/connect/client/HealthConnectClient"); if (_c_HealthConnectClient == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_static_method(_c_HealthConnectClient, &_m_HealthConnectClient__getOrCreate1, "getOrCreate", "(Landroid/content/Context;)Landroidx/health/connect/" "client/HealthConnectClient;"); if (_m_HealthConnectClient__getOrCreate1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallStaticObjectMethod( jniEnv, _c_HealthConnectClient, _m_HealthConnectClient__getOrCreate1, context); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jfieldID _f_HealthConnectClient__Companion = NULL; FFI_PLUGIN_EXPORT JniResult get_HealthConnectClient__Companion() { load_env(); - load_class_gr(&_c_HealthConnectClient, - "androidx/health/connect/client/HealthConnectClient"); + load_class_global_ref(&_c_HealthConnectClient, + "androidx/health/connect/client/HealthConnectClient"); if (_c_HealthConnectClient == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_static_field( _c_HealthConnectClient, &_f_HealthConnectClient__Companion, "Companion", "Landroidx/health/connect/client/HealthConnectClient$Companion;"); - jobject _result = to_global_ref((*jniEnv)->GetStaticObjectField( - jniEnv, _c_HealthConnectClient, _f_HealthConnectClient__Companion)); - return (JniResult){.result = {.l = _result}, .exception = check_exception()}; + jobject _result = (*jniEnv)->GetStaticObjectField( + jniEnv, _c_HealthConnectClient, _f_HealthConnectClient__Companion); + return to_global_ref_result(_result); } -// androidx.health.connect.client.PermissionController -jclass _c_PermissionController = NULL; +// androidx.health.connect.client.PermissionController$Companion +jclass _c_PermissionController_Companion = NULL; -jmethodID _m_PermissionController__createRequestPermissionActivityContract = - NULL; +jmethodID + _m_PermissionController_Companion__createRequestPermissionResultContract = + NULL; +FFI_PLUGIN_EXPORT +JniResult PermissionController_Companion__createRequestPermissionResultContract( + jobject self_, + jobject string) { + load_env(); + load_class_global_ref( + &_c_PermissionController_Companion, + "androidx/health/connect/client/PermissionController$Companion"); + if (_c_PermissionController_Companion == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method( + _c_PermissionController_Companion, + &_m_PermissionController_Companion__createRequestPermissionResultContract, + "createRequestPermissionResultContract", + "(Ljava/lang/String;)Landroidx/activity/result/contract/" + "ActivityResultContract;"); + if (_m_PermissionController_Companion__createRequestPermissionResultContract == + NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, + _m_PermissionController_Companion__createRequestPermissionResultContract, + string); + return to_global_ref_result(_result); +} + +jmethodID + _m_PermissionController_Companion__createRequestPermissionResultContract1 = + NULL; FFI_PLUGIN_EXPORT -JniResult PermissionController__createRequestPermissionActivityContract( +JniResult +PermissionController_Companion__createRequestPermissionResultContract1( jobject self_) { load_env(); - load_class_gr(&_c_PermissionController, - "androidx/health/connect/client/PermissionController"); - if (_c_PermissionController == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_PermissionController, - &_m_PermissionController__createRequestPermissionActivityContract, - "createRequestPermissionActivityContract", - "()Landroidx/activity/result/contract/ActivityResultContract;"); - if (_m_PermissionController__createRequestPermissionActivityContract == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + load_class_global_ref( + &_c_PermissionController_Companion, + "androidx/health/connect/client/PermissionController$Companion"); + if (_c_PermissionController_Companion == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method( + _c_PermissionController_Companion, + &_m_PermissionController_Companion__createRequestPermissionResultContract1, + "createRequestPermissionResultContract", + "()Landroidx/activity/result/contract/ActivityResultContract;"); + if (_m_PermissionController_Companion__createRequestPermissionResultContract1 == + NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, - _m_PermissionController__createRequestPermissionActivityContract); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + _m_PermissionController_Companion__createRequestPermissionResultContract1); + return to_global_ref_result(_result); } +// androidx.health.connect.client.PermissionController +jclass _c_PermissionController = NULL; + jmethodID _m_PermissionController__getGrantedPermissions = NULL; FFI_PLUGIN_EXPORT JniResult PermissionController__getGrantedPermissions(jobject self_, jobject set, jobject continuation) { load_env(); - load_class_gr(&_c_PermissionController, - "androidx/health/connect/client/PermissionController"); + load_class_global_ref(&_c_PermissionController, + "androidx/health/connect/client/PermissionController"); if (_c_PermissionController == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_PermissionController, &_m_PermissionController__getGrantedPermissions, "getGrantedPermissions", "(Ljava/util/Set;Lkotlin/coroutines/Continuation;)Ljava/lang/Object;"); if (_m_PermissionController__getGrantedPermissions == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_PermissionController__getGrantedPermissions, set, continuation); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_PermissionController__revokeAllPermissions = NULL; @@ -450,250 +609,325 @@ FFI_PLUGIN_EXPORT JniResult PermissionController__revokeAllPermissions(jobject self_, jobject continuation) { load_env(); - load_class_gr(&_c_PermissionController, - "androidx/health/connect/client/PermissionController"); + load_class_global_ref(&_c_PermissionController, + "androidx/health/connect/client/PermissionController"); if (_c_PermissionController == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_PermissionController, &_m_PermissionController__revokeAllPermissions, "revokeAllPermissions", "(Lkotlin/coroutines/Continuation;)Ljava/lang/Object;"); if (_m_PermissionController__revokeAllPermissions == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_PermissionController__revokeAllPermissions, continuation); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); +} + +jmethodID _m_PermissionController__createRequestPermissionResultContract = NULL; +FFI_PLUGIN_EXPORT +JniResult PermissionController__createRequestPermissionResultContract( + jobject string) { + load_env(); + load_class_global_ref(&_c_PermissionController, + "androidx/health/connect/client/PermissionController"); + if (_c_PermissionController == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_static_method( + _c_PermissionController, + &_m_PermissionController__createRequestPermissionResultContract, + "createRequestPermissionResultContract", + "(Ljava/lang/String;)Landroidx/activity/result/contract/" + "ActivityResultContract;"); + if (_m_PermissionController__createRequestPermissionResultContract == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_PermissionController, + _m_PermissionController__createRequestPermissionResultContract, string); + return to_global_ref_result(_result); +} + +jmethodID _m_PermissionController__createRequestPermissionResultContract1 = + NULL; +FFI_PLUGIN_EXPORT +JniResult PermissionController__createRequestPermissionResultContract1() { + load_env(); + load_class_global_ref(&_c_PermissionController, + "androidx/health/connect/client/PermissionController"); + if (_c_PermissionController == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_static_method( + _c_PermissionController, + &_m_PermissionController__createRequestPermissionResultContract1, + "createRequestPermissionResultContract", + "()Landroidx/activity/result/contract/ActivityResultContract;"); + if (_m_PermissionController__createRequestPermissionResultContract1 == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_PermissionController, + _m_PermissionController__createRequestPermissionResultContract1); + return to_global_ref_result(_result); +} + +jfieldID _f_PermissionController__Companion = NULL; +FFI_PLUGIN_EXPORT +JniResult get_PermissionController__Companion() { + load_env(); + load_class_global_ref(&_c_PermissionController, + "androidx/health/connect/client/PermissionController"); + if (_c_PermissionController == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_static_field( + _c_PermissionController, &_f_PermissionController__Companion, "Companion", + "Landroidx/health/connect/client/PermissionController$Companion;"); + jobject _result = (*jniEnv)->GetStaticObjectField( + jniEnv, _c_PermissionController, _f_PermissionController__Companion); + return to_global_ref_result(_result); +} + +// androidx.health.connect.client.records.StepsRecord$Companion +jclass _c_StepsRecord_Companion = NULL; + +jmethodID _m_StepsRecord_Companion__new0 = NULL; +FFI_PLUGIN_EXPORT +JniResult StepsRecord_Companion__new0(jobject defaultConstructorMarker) { + load_env(); + load_class_global_ref( + &_c_StepsRecord_Companion, + "androidx/health/connect/client/records/StepsRecord$Companion"); + if (_c_StepsRecord_Companion == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_StepsRecord_Companion, &_m_StepsRecord_Companion__new0, + "", "(Lkotlin/jvm/internal/DefaultConstructorMarker;)V"); + if (_m_StepsRecord_Companion__new0 == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->NewObject(jniEnv, _c_StepsRecord_Companion, + _m_StepsRecord_Companion__new0, + defaultConstructorMarker); + return to_global_ref_result(_result); } // androidx.health.connect.client.records.StepsRecord jclass _c_StepsRecord = NULL; -jmethodID _m_StepsRecord__ctor = NULL; +jmethodID _m_StepsRecord__new0 = NULL; FFI_PLUGIN_EXPORT -JniResult StepsRecord__ctor(int64_t j, +JniResult StepsRecord__new0(int64_t j, jobject instant, jobject zoneOffset, jobject instant1, jobject zoneOffset1, jobject metadata) { load_env(); - load_class_gr(&_c_StepsRecord, - "androidx/health/connect/client/records/StepsRecord"); + load_class_global_ref(&_c_StepsRecord, + "androidx/health/connect/client/records/StepsRecord"); if (_c_StepsRecord == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_StepsRecord, &_m_StepsRecord__ctor, "", + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_StepsRecord, &_m_StepsRecord__new0, "", "(JLjava/time/Instant;Ljava/time/ZoneOffset;Ljava/time/" "Instant;Ljava/time/ZoneOffset;Landroidx/health/connect/client/" "records/metadata/Metadata;)V"); - if (_m_StepsRecord__ctor == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + if (_m_StepsRecord__new0 == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->NewObject( - jniEnv, _c_StepsRecord, _m_StepsRecord__ctor, j, instant, zoneOffset, + jniEnv, _c_StepsRecord, _m_StepsRecord__new0, j, instant, zoneOffset, instant1, zoneOffset1, metadata); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } -jmethodID _m_StepsRecord__ctor1 = NULL; +jmethodID _m_StepsRecord__new1 = NULL; FFI_PLUGIN_EXPORT -JniResult StepsRecord__ctor1(int64_t j, - jobject instant, - jobject zoneOffset, - jobject instant1, - jobject zoneOffset1, - jobject metadata, - int32_t i, - jobject defaultConstructorMarker) { +JniResult StepsRecord__new1(int64_t j, + jobject instant, + jobject zoneOffset, + jobject instant1, + jobject zoneOffset1, + jobject metadata, + int32_t i, + jobject defaultConstructorMarker) { load_env(); - load_class_gr(&_c_StepsRecord, - "androidx/health/connect/client/records/StepsRecord"); + load_class_global_ref(&_c_StepsRecord, + "androidx/health/connect/client/records/StepsRecord"); if (_c_StepsRecord == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( - _c_StepsRecord, &_m_StepsRecord__ctor1, "", + _c_StepsRecord, &_m_StepsRecord__new1, "", "(JLjava/time/Instant;Ljava/time/ZoneOffset;Ljava/time/Instant;Ljava/" "time/ZoneOffset;Landroidx/health/connect/client/records/metadata/" "Metadata;ILkotlin/jvm/internal/DefaultConstructorMarker;)V"); - if (_m_StepsRecord__ctor1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + if (_m_StepsRecord__new1 == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->NewObject( - jniEnv, _c_StepsRecord, _m_StepsRecord__ctor1, j, instant, zoneOffset, + jniEnv, _c_StepsRecord, _m_StepsRecord__new1, j, instant, zoneOffset, instant1, zoneOffset1, metadata, i, defaultConstructorMarker); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_StepsRecord__getCount = NULL; FFI_PLUGIN_EXPORT JniResult StepsRecord__getCount(jobject self_) { load_env(); - load_class_gr(&_c_StepsRecord, - "androidx/health/connect/client/records/StepsRecord"); + load_class_global_ref(&_c_StepsRecord, + "androidx/health/connect/client/records/StepsRecord"); if (_c_StepsRecord == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_StepsRecord, &_m_StepsRecord__getCount, "getCount", "()J"); if (_m_StepsRecord__getCount == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; int64_t _result = (*jniEnv)->CallLongMethod(jniEnv, self_, _m_StepsRecord__getCount); - return (JniResult){.result = {.j = _result}, .exception = check_exception()}; + return (JniResult){.value = {.j = _result}, .exception = check_exception()}; } jmethodID _m_StepsRecord__getStartTime = NULL; FFI_PLUGIN_EXPORT JniResult StepsRecord__getStartTime(jobject self_) { load_env(); - load_class_gr(&_c_StepsRecord, - "androidx/health/connect/client/records/StepsRecord"); + load_class_global_ref(&_c_StepsRecord, + "androidx/health/connect/client/records/StepsRecord"); if (_c_StepsRecord == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_StepsRecord, &_m_StepsRecord__getStartTime, "getStartTime", "()Ljava/time/Instant;"); if (_m_StepsRecord__getStartTime == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_StepsRecord__getStartTime); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_StepsRecord__getStartZoneOffset = NULL; FFI_PLUGIN_EXPORT JniResult StepsRecord__getStartZoneOffset(jobject self_) { load_env(); - load_class_gr(&_c_StepsRecord, - "androidx/health/connect/client/records/StepsRecord"); + load_class_global_ref(&_c_StepsRecord, + "androidx/health/connect/client/records/StepsRecord"); if (_c_StepsRecord == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_StepsRecord, &_m_StepsRecord__getStartZoneOffset, "getStartZoneOffset", "()Ljava/time/ZoneOffset;"); if (_m_StepsRecord__getStartZoneOffset == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_StepsRecord__getStartZoneOffset); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_StepsRecord__getEndTime = NULL; FFI_PLUGIN_EXPORT JniResult StepsRecord__getEndTime(jobject self_) { load_env(); - load_class_gr(&_c_StepsRecord, - "androidx/health/connect/client/records/StepsRecord"); + load_class_global_ref(&_c_StepsRecord, + "androidx/health/connect/client/records/StepsRecord"); if (_c_StepsRecord == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_StepsRecord, &_m_StepsRecord__getEndTime, "getEndTime", "()Ljava/time/Instant;"); if (_m_StepsRecord__getEndTime == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_StepsRecord__getEndTime); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_StepsRecord__getEndZoneOffset = NULL; FFI_PLUGIN_EXPORT JniResult StepsRecord__getEndZoneOffset(jobject self_) { load_env(); - load_class_gr(&_c_StepsRecord, - "androidx/health/connect/client/records/StepsRecord"); + load_class_global_ref(&_c_StepsRecord, + "androidx/health/connect/client/records/StepsRecord"); if (_c_StepsRecord == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_StepsRecord, &_m_StepsRecord__getEndZoneOffset, "getEndZoneOffset", "()Ljava/time/ZoneOffset;"); if (_m_StepsRecord__getEndZoneOffset == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_StepsRecord__getEndZoneOffset); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_StepsRecord__getMetadata = NULL; FFI_PLUGIN_EXPORT JniResult StepsRecord__getMetadata(jobject self_) { load_env(); - load_class_gr(&_c_StepsRecord, - "androidx/health/connect/client/records/StepsRecord"); + load_class_global_ref(&_c_StepsRecord, + "androidx/health/connect/client/records/StepsRecord"); if (_c_StepsRecord == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_StepsRecord, &_m_StepsRecord__getMetadata, "getMetadata", "()Landroidx/health/connect/client/records/metadata/Metadata;"); if (_m_StepsRecord__getMetadata == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_StepsRecord__getMetadata); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_StepsRecord__equals1 = NULL; FFI_PLUGIN_EXPORT JniResult StepsRecord__equals1(jobject self_, jobject object) { load_env(); - load_class_gr(&_c_StepsRecord, - "androidx/health/connect/client/records/StepsRecord"); + load_class_global_ref(&_c_StepsRecord, + "androidx/health/connect/client/records/StepsRecord"); if (_c_StepsRecord == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_StepsRecord, &_m_StepsRecord__equals1, "equals", "(Ljava/lang/Object;)Z"); if (_m_StepsRecord__equals1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_StepsRecord__equals1, object); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_StepsRecord__hashCode1 = NULL; FFI_PLUGIN_EXPORT JniResult StepsRecord__hashCode1(jobject self_) { load_env(); - load_class_gr(&_c_StepsRecord, - "androidx/health/connect/client/records/StepsRecord"); + load_class_global_ref(&_c_StepsRecord, + "androidx/health/connect/client/records/StepsRecord"); if (_c_StepsRecord == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_StepsRecord, &_m_StepsRecord__hashCode1, "hashCode", "()I"); if (_m_StepsRecord__hashCode1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; int32_t _result = (*jniEnv)->CallIntMethod(jniEnv, self_, _m_StepsRecord__hashCode1); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; + return (JniResult){.value = {.i = _result}, .exception = check_exception()}; } jfieldID _f_StepsRecord__Companion = NULL; FFI_PLUGIN_EXPORT JniResult get_StepsRecord__Companion() { load_env(); - load_class_gr(&_c_StepsRecord, - "androidx/health/connect/client/records/StepsRecord"); + load_class_global_ref(&_c_StepsRecord, + "androidx/health/connect/client/records/StepsRecord"); if (_c_StepsRecord == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_static_field( _c_StepsRecord, &_f_StepsRecord__Companion, "Companion", "Landroidx/health/connect/client/records/StepsRecord$Companion;"); - jobject _result = to_global_ref((*jniEnv)->GetStaticObjectField( - jniEnv, _c_StepsRecord, _f_StepsRecord__Companion)); - return (JniResult){.result = {.l = _result}, .exception = check_exception()}; + jobject _result = (*jniEnv)->GetStaticObjectField(jniEnv, _c_StepsRecord, + _f_StepsRecord__Companion); + return to_global_ref_result(_result); } jfieldID _f_StepsRecord__COUNT_TOTAL = NULL; FFI_PLUGIN_EXPORT JniResult get_StepsRecord__COUNT_TOTAL() { load_env(); - load_class_gr(&_c_StepsRecord, - "androidx/health/connect/client/records/StepsRecord"); + load_class_global_ref(&_c_StepsRecord, + "androidx/health/connect/client/records/StepsRecord"); if (_c_StepsRecord == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_static_field( _c_StepsRecord, &_f_StepsRecord__COUNT_TOTAL, "COUNT_TOTAL", "Landroidx/health/connect/client/aggregate/AggregateMetric;"); - jobject _result = to_global_ref((*jniEnv)->GetStaticObjectField( - jniEnv, _c_StepsRecord, _f_StepsRecord__COUNT_TOTAL)); - return (JniResult){.result = {.l = _result}, .exception = check_exception()}; + jobject _result = (*jniEnv)->GetStaticObjectField( + jniEnv, _c_StepsRecord, _f_StepsRecord__COUNT_TOTAL); + return to_global_ref_result(_result); } // androidx.health.connect.client.time.TimeRangeFilter$Companion @@ -705,21 +939,20 @@ JniResult TimeRangeFilter_Companion__between(jobject self_, jobject instant, jobject instant1) { load_env(); - load_class_gr( + load_class_global_ref( &_c_TimeRangeFilter_Companion, "androidx/health/connect/client/time/TimeRangeFilter$Companion"); if (_c_TimeRangeFilter_Companion == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_TimeRangeFilter_Companion, &_m_TimeRangeFilter_Companion__between, "between", "(Ljava/time/Instant;Ljava/time/Instant;)Landroidx/health/" "connect/client/time/TimeRangeFilter;"); if (_m_TimeRangeFilter_Companion__between == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_TimeRangeFilter_Companion__between, instant, instant1); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_TimeRangeFilter_Companion__between1 = NULL; @@ -728,43 +961,41 @@ JniResult TimeRangeFilter_Companion__between1(jobject self_, jobject localDateTime, jobject localDateTime1) { load_env(); - load_class_gr( + load_class_global_ref( &_c_TimeRangeFilter_Companion, "androidx/health/connect/client/time/TimeRangeFilter$Companion"); if (_c_TimeRangeFilter_Companion == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_TimeRangeFilter_Companion, &_m_TimeRangeFilter_Companion__between1, "between", "(Ljava/time/LocalDateTime;Ljava/time/LocalDateTime;)Landroidx/" "health/connect/client/time/TimeRangeFilter;"); if (_m_TimeRangeFilter_Companion__between1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_TimeRangeFilter_Companion__between1, localDateTime, localDateTime1); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_TimeRangeFilter_Companion__before = NULL; FFI_PLUGIN_EXPORT JniResult TimeRangeFilter_Companion__before(jobject self_, jobject instant) { load_env(); - load_class_gr( + load_class_global_ref( &_c_TimeRangeFilter_Companion, "androidx/health/connect/client/time/TimeRangeFilter$Companion"); if (_c_TimeRangeFilter_Companion == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_TimeRangeFilter_Companion, &_m_TimeRangeFilter_Companion__before, "before", "(Ljava/time/Instant;)Landroidx/health/connect/client/time/" "TimeRangeFilter;"); if (_m_TimeRangeFilter_Companion__before == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_TimeRangeFilter_Companion__before, instant); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_TimeRangeFilter_Companion__before1 = NULL; @@ -772,42 +1003,40 @@ FFI_PLUGIN_EXPORT JniResult TimeRangeFilter_Companion__before1(jobject self_, jobject localDateTime) { load_env(); - load_class_gr( + load_class_global_ref( &_c_TimeRangeFilter_Companion, "androidx/health/connect/client/time/TimeRangeFilter$Companion"); if (_c_TimeRangeFilter_Companion == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_TimeRangeFilter_Companion, &_m_TimeRangeFilter_Companion__before1, "before", "(Ljava/time/LocalDateTime;)Landroidx/health/connect/client/time/" "TimeRangeFilter;"); if (_m_TimeRangeFilter_Companion__before1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_TimeRangeFilter_Companion__before1, localDateTime); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_TimeRangeFilter_Companion__after = NULL; FFI_PLUGIN_EXPORT JniResult TimeRangeFilter_Companion__after(jobject self_, jobject instant) { load_env(); - load_class_gr( + load_class_global_ref( &_c_TimeRangeFilter_Companion, "androidx/health/connect/client/time/TimeRangeFilter$Companion"); if (_c_TimeRangeFilter_Companion == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_TimeRangeFilter_Companion, &_m_TimeRangeFilter_Companion__after, "after", "(Ljava/time/Instant;)Landroidx/health/connect/client/time/" "TimeRangeFilter;"); if (_m_TimeRangeFilter_Companion__after == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_TimeRangeFilter_Companion__after, instant); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_TimeRangeFilter_Companion__after1 = NULL; @@ -815,165 +1044,159 @@ FFI_PLUGIN_EXPORT JniResult TimeRangeFilter_Companion__after1(jobject self_, jobject localDateTime) { load_env(); - load_class_gr( + load_class_global_ref( &_c_TimeRangeFilter_Companion, "androidx/health/connect/client/time/TimeRangeFilter$Companion"); if (_c_TimeRangeFilter_Companion == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_TimeRangeFilter_Companion, &_m_TimeRangeFilter_Companion__after1, "after", "(Ljava/time/LocalDateTime;)Landroidx/health/connect/client/time/" "TimeRangeFilter;"); if (_m_TimeRangeFilter_Companion__after1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_TimeRangeFilter_Companion__after1, localDateTime); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } -jmethodID _m_TimeRangeFilter_Companion__ctor = NULL; +jmethodID _m_TimeRangeFilter_Companion__new0 = NULL; FFI_PLUGIN_EXPORT -JniResult TimeRangeFilter_Companion__ctor(jobject defaultConstructorMarker) { +JniResult TimeRangeFilter_Companion__new0(jobject defaultConstructorMarker) { load_env(); - load_class_gr( + load_class_global_ref( &_c_TimeRangeFilter_Companion, "androidx/health/connect/client/time/TimeRangeFilter$Companion"); if (_c_TimeRangeFilter_Companion == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_TimeRangeFilter_Companion, &_m_TimeRangeFilter_Companion__ctor, + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_TimeRangeFilter_Companion, &_m_TimeRangeFilter_Companion__new0, "", "(Lkotlin/jvm/internal/DefaultConstructorMarker;)V"); - if (_m_TimeRangeFilter_Companion__ctor == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + if (_m_TimeRangeFilter_Companion__new0 == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->NewObject(jniEnv, _c_TimeRangeFilter_Companion, - _m_TimeRangeFilter_Companion__ctor, + _m_TimeRangeFilter_Companion__new0, defaultConstructorMarker); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } // androidx.health.connect.client.time.TimeRangeFilter jclass _c_TimeRangeFilter = NULL; -jmethodID _m_TimeRangeFilter__ctor = NULL; +jmethodID _m_TimeRangeFilter__new0 = NULL; FFI_PLUGIN_EXPORT -JniResult TimeRangeFilter__ctor(jobject instant, +JniResult TimeRangeFilter__new0(jobject instant, jobject instant1, jobject localDateTime, jobject localDateTime1) { load_env(); - load_class_gr(&_c_TimeRangeFilter, - "androidx/health/connect/client/time/TimeRangeFilter"); + load_class_global_ref(&_c_TimeRangeFilter, + "androidx/health/connect/client/time/TimeRangeFilter"); if (_c_TimeRangeFilter == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_TimeRangeFilter, &_m_TimeRangeFilter__ctor, "", + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_TimeRangeFilter, &_m_TimeRangeFilter__new0, "", "(Ljava/time/Instant;Ljava/time/Instant;Ljava/time/" "LocalDateTime;Ljava/time/LocalDateTime;)V"); - if (_m_TimeRangeFilter__ctor == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + if (_m_TimeRangeFilter__new0 == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = - (*jniEnv)->NewObject(jniEnv, _c_TimeRangeFilter, _m_TimeRangeFilter__ctor, + (*jniEnv)->NewObject(jniEnv, _c_TimeRangeFilter, _m_TimeRangeFilter__new0, instant, instant1, localDateTime, localDateTime1); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } -jmethodID _m_TimeRangeFilter__ctor1 = NULL; +jmethodID _m_TimeRangeFilter__new1 = NULL; FFI_PLUGIN_EXPORT -JniResult TimeRangeFilter__ctor1(jobject instant, - jobject instant1, - jobject localDateTime, - jobject localDateTime1, - int32_t i, - jobject defaultConstructorMarker) { +JniResult TimeRangeFilter__new1(jobject instant, + jobject instant1, + jobject localDateTime, + jobject localDateTime1, + int32_t i, + jobject defaultConstructorMarker) { load_env(); - load_class_gr(&_c_TimeRangeFilter, - "androidx/health/connect/client/time/TimeRangeFilter"); + load_class_global_ref(&_c_TimeRangeFilter, + "androidx/health/connect/client/time/TimeRangeFilter"); if (_c_TimeRangeFilter == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( - _c_TimeRangeFilter, &_m_TimeRangeFilter__ctor1, "", + _c_TimeRangeFilter, &_m_TimeRangeFilter__new1, "", "(Ljava/time/Instant;Ljava/time/Instant;Ljava/time/LocalDateTime;Ljava/" "time/LocalDateTime;ILkotlin/jvm/internal/DefaultConstructorMarker;)V"); - if (_m_TimeRangeFilter__ctor1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + if (_m_TimeRangeFilter__new1 == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->NewObject( - jniEnv, _c_TimeRangeFilter, _m_TimeRangeFilter__ctor1, instant, instant1, + jniEnv, _c_TimeRangeFilter, _m_TimeRangeFilter__new1, instant, instant1, localDateTime, localDateTime1, i, defaultConstructorMarker); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_TimeRangeFilter__equals1 = NULL; FFI_PLUGIN_EXPORT JniResult TimeRangeFilter__equals1(jobject self_, jobject object) { load_env(); - load_class_gr(&_c_TimeRangeFilter, - "androidx/health/connect/client/time/TimeRangeFilter"); + load_class_global_ref(&_c_TimeRangeFilter, + "androidx/health/connect/client/time/TimeRangeFilter"); if (_c_TimeRangeFilter == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_TimeRangeFilter, &_m_TimeRangeFilter__equals1, "equals", "(Ljava/lang/Object;)Z"); if (_m_TimeRangeFilter__equals1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_TimeRangeFilter__equals1, object); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_TimeRangeFilter__hashCode1 = NULL; FFI_PLUGIN_EXPORT JniResult TimeRangeFilter__hashCode1(jobject self_) { load_env(); - load_class_gr(&_c_TimeRangeFilter, - "androidx/health/connect/client/time/TimeRangeFilter"); + load_class_global_ref(&_c_TimeRangeFilter, + "androidx/health/connect/client/time/TimeRangeFilter"); if (_c_TimeRangeFilter == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_TimeRangeFilter, &_m_TimeRangeFilter__hashCode1, "hashCode", "()I"); if (_m_TimeRangeFilter__hashCode1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; int32_t _result = (*jniEnv)->CallIntMethod(jniEnv, self_, _m_TimeRangeFilter__hashCode1); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; + return (JniResult){.value = {.i = _result}, .exception = check_exception()}; } -jmethodID _m_TimeRangeFilter__ctor2 = NULL; +jmethodID _m_TimeRangeFilter__new2 = NULL; FFI_PLUGIN_EXPORT -JniResult TimeRangeFilter__ctor2() { +JniResult TimeRangeFilter__new2() { load_env(); - load_class_gr(&_c_TimeRangeFilter, - "androidx/health/connect/client/time/TimeRangeFilter"); + load_class_global_ref(&_c_TimeRangeFilter, + "androidx/health/connect/client/time/TimeRangeFilter"); if (_c_TimeRangeFilter == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_TimeRangeFilter, &_m_TimeRangeFilter__ctor2, "", "()V"); - if (_m_TimeRangeFilter__ctor2 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_TimeRangeFilter, &_m_TimeRangeFilter__new2, "", "()V"); + if (_m_TimeRangeFilter__new2 == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->NewObject(jniEnv, _c_TimeRangeFilter, - _m_TimeRangeFilter__ctor2); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + _m_TimeRangeFilter__new2); + return to_global_ref_result(_result); } jmethodID _m_TimeRangeFilter__between = NULL; FFI_PLUGIN_EXPORT JniResult TimeRangeFilter__between(jobject instant, jobject instant1) { load_env(); - load_class_gr(&_c_TimeRangeFilter, - "androidx/health/connect/client/time/TimeRangeFilter"); + load_class_global_ref(&_c_TimeRangeFilter, + "androidx/health/connect/client/time/TimeRangeFilter"); if (_c_TimeRangeFilter == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_static_method(_c_TimeRangeFilter, &_m_TimeRangeFilter__between, "between", "(Ljava/time/Instant;Ljava/time/Instant;)Landroidx/health/" "connect/client/time/TimeRangeFilter;"); if (_m_TimeRangeFilter__between == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallStaticObjectMethod( jniEnv, _c_TimeRangeFilter, _m_TimeRangeFilter__between, instant, instant1); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_TimeRangeFilter__between1 = NULL; @@ -981,250 +1204,237 @@ FFI_PLUGIN_EXPORT JniResult TimeRangeFilter__between1(jobject localDateTime, jobject localDateTime1) { load_env(); - load_class_gr(&_c_TimeRangeFilter, - "androidx/health/connect/client/time/TimeRangeFilter"); + load_class_global_ref(&_c_TimeRangeFilter, + "androidx/health/connect/client/time/TimeRangeFilter"); if (_c_TimeRangeFilter == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_static_method( _c_TimeRangeFilter, &_m_TimeRangeFilter__between1, "between", "(Ljava/time/LocalDateTime;Ljava/time/LocalDateTime;)Landroidx/health/" "connect/client/time/TimeRangeFilter;"); if (_m_TimeRangeFilter__between1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallStaticObjectMethod( jniEnv, _c_TimeRangeFilter, _m_TimeRangeFilter__between1, localDateTime, localDateTime1); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_TimeRangeFilter__before = NULL; FFI_PLUGIN_EXPORT JniResult TimeRangeFilter__before(jobject instant) { load_env(); - load_class_gr(&_c_TimeRangeFilter, - "androidx/health/connect/client/time/TimeRangeFilter"); + load_class_global_ref(&_c_TimeRangeFilter, + "androidx/health/connect/client/time/TimeRangeFilter"); if (_c_TimeRangeFilter == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_static_method(_c_TimeRangeFilter, &_m_TimeRangeFilter__before, "before", "(Ljava/time/Instant;)Landroidx/health/connect/client/" "time/TimeRangeFilter;"); if (_m_TimeRangeFilter__before == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallStaticObjectMethod( jniEnv, _c_TimeRangeFilter, _m_TimeRangeFilter__before, instant); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_TimeRangeFilter__before1 = NULL; FFI_PLUGIN_EXPORT JniResult TimeRangeFilter__before1(jobject localDateTime) { load_env(); - load_class_gr(&_c_TimeRangeFilter, - "androidx/health/connect/client/time/TimeRangeFilter"); + load_class_global_ref(&_c_TimeRangeFilter, + "androidx/health/connect/client/time/TimeRangeFilter"); if (_c_TimeRangeFilter == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_static_method(_c_TimeRangeFilter, &_m_TimeRangeFilter__before1, "before", "(Ljava/time/LocalDateTime;)Landroidx/health/connect/" "client/time/TimeRangeFilter;"); if (_m_TimeRangeFilter__before1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallStaticObjectMethod( jniEnv, _c_TimeRangeFilter, _m_TimeRangeFilter__before1, localDateTime); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_TimeRangeFilter__after = NULL; FFI_PLUGIN_EXPORT JniResult TimeRangeFilter__after(jobject instant) { load_env(); - load_class_gr(&_c_TimeRangeFilter, - "androidx/health/connect/client/time/TimeRangeFilter"); + load_class_global_ref(&_c_TimeRangeFilter, + "androidx/health/connect/client/time/TimeRangeFilter"); if (_c_TimeRangeFilter == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_static_method(_c_TimeRangeFilter, &_m_TimeRangeFilter__after, "after", "(Ljava/time/Instant;)Landroidx/health/connect/client/" "time/TimeRangeFilter;"); if (_m_TimeRangeFilter__after == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallStaticObjectMethod( jniEnv, _c_TimeRangeFilter, _m_TimeRangeFilter__after, instant); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_TimeRangeFilter__after1 = NULL; FFI_PLUGIN_EXPORT JniResult TimeRangeFilter__after1(jobject localDateTime) { load_env(); - load_class_gr(&_c_TimeRangeFilter, - "androidx/health/connect/client/time/TimeRangeFilter"); + load_class_global_ref(&_c_TimeRangeFilter, + "androidx/health/connect/client/time/TimeRangeFilter"); if (_c_TimeRangeFilter == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_static_method(_c_TimeRangeFilter, &_m_TimeRangeFilter__after1, "after", "(Ljava/time/LocalDateTime;)Landroidx/health/connect/" "client/time/TimeRangeFilter;"); if (_m_TimeRangeFilter__after1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallStaticObjectMethod( jniEnv, _c_TimeRangeFilter, _m_TimeRangeFilter__after1, localDateTime); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jfieldID _f_TimeRangeFilter__Companion = NULL; FFI_PLUGIN_EXPORT JniResult get_TimeRangeFilter__Companion() { load_env(); - load_class_gr(&_c_TimeRangeFilter, - "androidx/health/connect/client/time/TimeRangeFilter"); + load_class_global_ref(&_c_TimeRangeFilter, + "androidx/health/connect/client/time/TimeRangeFilter"); if (_c_TimeRangeFilter == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_static_field( _c_TimeRangeFilter, &_f_TimeRangeFilter__Companion, "Companion", "Landroidx/health/connect/client/time/TimeRangeFilter$Companion;"); - jobject _result = to_global_ref((*jniEnv)->GetStaticObjectField( - jniEnv, _c_TimeRangeFilter, _f_TimeRangeFilter__Companion)); - return (JniResult){.result = {.l = _result}, .exception = check_exception()}; + jobject _result = (*jniEnv)->GetStaticObjectField( + jniEnv, _c_TimeRangeFilter, _f_TimeRangeFilter__Companion); + return to_global_ref_result(_result); } // android.content.Context jclass _c_Context = NULL; -jmethodID _m_Context__ctor = NULL; +jmethodID _m_Context__new0 = NULL; FFI_PLUGIN_EXPORT -JniResult Context__ctor() { +JniResult Context__new0() { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_Context, &_m_Context__ctor, "", "()V"); - if (_m_Context__ctor == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = (*jniEnv)->NewObject(jniEnv, _c_Context, _m_Context__ctor); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_Context, &_m_Context__new0, "", "()V"); + if (_m_Context__new0 == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->NewObject(jniEnv, _c_Context, _m_Context__new0); + return to_global_ref_result(_result); } jmethodID _m_Context__getAssets = NULL; FFI_PLUGIN_EXPORT JniResult Context__getAssets(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getAssets, "getAssets", "()Landroid/content/res/AssetManager;"); if (_m_Context__getAssets == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getAssets); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__getResources = NULL; FFI_PLUGIN_EXPORT JniResult Context__getResources(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getResources, "getResources", "()Landroid/content/res/Resources;"); if (_m_Context__getResources == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getResources); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__getPackageManager = NULL; FFI_PLUGIN_EXPORT JniResult Context__getPackageManager(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getPackageManager, "getPackageManager", "()Landroid/content/pm/PackageManager;"); if (_m_Context__getPackageManager == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getPackageManager); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__getContentResolver = NULL; FFI_PLUGIN_EXPORT JniResult Context__getContentResolver(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getContentResolver, "getContentResolver", "()Landroid/content/ContentResolver;"); if (_m_Context__getContentResolver == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getContentResolver); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__getMainLooper = NULL; FFI_PLUGIN_EXPORT JniResult Context__getMainLooper(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getMainLooper, "getMainLooper", "()Landroid/os/Looper;"); if (_m_Context__getMainLooper == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getMainLooper); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__getMainExecutor = NULL; FFI_PLUGIN_EXPORT JniResult Context__getMainExecutor(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getMainExecutor, "getMainExecutor", "()Ljava/util/concurrent/Executor;"); if (_m_Context__getMainExecutor == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getMainExecutor); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__getApplicationContext = NULL; FFI_PLUGIN_EXPORT JniResult Context__getApplicationContext(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getApplicationContext, "getApplicationContext", "()Landroid/content/Context;"); if (_m_Context__getApplicationContext == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__getApplicationContext); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__registerComponentCallbacks = NULL; @@ -1232,18 +1442,18 @@ FFI_PLUGIN_EXPORT JniResult Context__registerComponentCallbacks(jobject self_, jobject componentCallbacks) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__registerComponentCallbacks, "registerComponentCallbacks", "(Landroid/content/ComponentCallbacks;)V"); if (_m_Context__registerComponentCallbacks == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__registerComponentCallbacks, componentCallbacks); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__unregisterComponentCallbacks = NULL; @@ -1251,166 +1461,159 @@ FFI_PLUGIN_EXPORT JniResult Context__unregisterComponentCallbacks(jobject self_, jobject componentCallbacks) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__unregisterComponentCallbacks, "unregisterComponentCallbacks", "(Landroid/content/ComponentCallbacks;)V"); if (_m_Context__unregisterComponentCallbacks == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__unregisterComponentCallbacks, componentCallbacks); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__getText = NULL; FFI_PLUGIN_EXPORT JniResult Context__getText(jobject self_, int32_t i) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getText, "getText", "(I)Ljava/lang/CharSequence;"); if (_m_Context__getText == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getText, i); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__getString = NULL; FFI_PLUGIN_EXPORT JniResult Context__getString(jobject self_, int32_t i) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getString, "getString", "(I)Ljava/lang/String;"); if (_m_Context__getString == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getString, i); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__getString1 = NULL; FFI_PLUGIN_EXPORT JniResult Context__getString1(jobject self_, int32_t i, jobject objects) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getString1, "getString", "(I[Ljava/lang/Object;)Ljava/lang/String;"); if (_m_Context__getString1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__getString1, i, objects); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__getColor = NULL; FFI_PLUGIN_EXPORT JniResult Context__getColor(jobject self_, int32_t i) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getColor, "getColor", "(I)I"); if (_m_Context__getColor == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; int32_t _result = (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Context__getColor, i); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; + return (JniResult){.value = {.i = _result}, .exception = check_exception()}; } jmethodID _m_Context__getDrawable = NULL; FFI_PLUGIN_EXPORT JniResult Context__getDrawable(jobject self_, int32_t i) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getDrawable, "getDrawable", "(I)Landroid/graphics/drawable/Drawable;"); if (_m_Context__getDrawable == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getDrawable, i); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__getColorStateList = NULL; FFI_PLUGIN_EXPORT JniResult Context__getColorStateList(jobject self_, int32_t i) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getColorStateList, "getColorStateList", "(I)Landroid/content/res/ColorStateList;"); if (_m_Context__getColorStateList == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__getColorStateList, i); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__setTheme = NULL; FFI_PLUGIN_EXPORT JniResult Context__setTheme(jobject self_, int32_t i) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__setTheme, "setTheme", "(I)V"); if (_m_Context__setTheme == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__setTheme, i); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__getTheme = NULL; FFI_PLUGIN_EXPORT JniResult Context__getTheme(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getTheme, "getTheme", "()Landroid/content/res/Resources$Theme;"); if (_m_Context__getTheme == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getTheme); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__obtainStyledAttributes = NULL; FFI_PLUGIN_EXPORT JniResult Context__obtainStyledAttributes(jobject self_, jobject is) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__obtainStyledAttributes, "obtainStyledAttributes", "([I)Landroid/content/res/TypedArray;"); if (_m_Context__obtainStyledAttributes == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__obtainStyledAttributes, is); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__obtainStyledAttributes1 = NULL; @@ -1419,18 +1622,17 @@ JniResult Context__obtainStyledAttributes1(jobject self_, int32_t i, jobject is) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__obtainStyledAttributes1, "obtainStyledAttributes", "(I[I)Landroid/content/res/TypedArray;"); if (_m_Context__obtainStyledAttributes1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__obtainStyledAttributes1, i, is); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__obtainStyledAttributes2 = NULL; @@ -1439,19 +1641,18 @@ JniResult Context__obtainStyledAttributes2(jobject self_, jobject attributeSet, jobject is) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_Context, &_m_Context__obtainStyledAttributes2, "obtainStyledAttributes", "(Landroid/util/AttributeSet;[I)Landroid/content/res/TypedArray;"); if (_m_Context__obtainStyledAttributes2 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__obtainStyledAttributes2, attributeSet, is); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__obtainStyledAttributes3 = NULL; @@ -1462,173 +1663,163 @@ JniResult Context__obtainStyledAttributes3(jobject self_, int32_t i, int32_t i1) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_Context, &_m_Context__obtainStyledAttributes3, "obtainStyledAttributes", "(Landroid/util/AttributeSet;[III)Landroid/content/res/TypedArray;"); if (_m_Context__obtainStyledAttributes3 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__obtainStyledAttributes3, attributeSet, is, i, i1); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__getClassLoader = NULL; FFI_PLUGIN_EXPORT JniResult Context__getClassLoader(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getClassLoader, "getClassLoader", "()Ljava/lang/ClassLoader;"); if (_m_Context__getClassLoader == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getClassLoader); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__getPackageName = NULL; FFI_PLUGIN_EXPORT JniResult Context__getPackageName(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getPackageName, "getPackageName", "()Ljava/lang/String;"); if (_m_Context__getPackageName == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getPackageName); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__getOpPackageName = NULL; FFI_PLUGIN_EXPORT JniResult Context__getOpPackageName(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getOpPackageName, "getOpPackageName", "()Ljava/lang/String;"); if (_m_Context__getOpPackageName == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getOpPackageName); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__getAttributionTag = NULL; FFI_PLUGIN_EXPORT JniResult Context__getAttributionTag(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getAttributionTag, "getAttributionTag", "()Ljava/lang/String;"); if (_m_Context__getAttributionTag == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getAttributionTag); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__getAttributionSource = NULL; FFI_PLUGIN_EXPORT JniResult Context__getAttributionSource(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getAttributionSource, "getAttributionSource", "()Landroid/content/AttributionSource;"); if (_m_Context__getAttributionSource == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__getAttributionSource); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__getParams = NULL; FFI_PLUGIN_EXPORT JniResult Context__getParams(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getParams, "getParams", "()Landroid/content/ContextParams;"); if (_m_Context__getParams == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getParams); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__getApplicationInfo = NULL; FFI_PLUGIN_EXPORT JniResult Context__getApplicationInfo(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getApplicationInfo, "getApplicationInfo", "()Landroid/content/pm/ApplicationInfo;"); if (_m_Context__getApplicationInfo == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getApplicationInfo); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__getPackageResourcePath = NULL; FFI_PLUGIN_EXPORT JniResult Context__getPackageResourcePath(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getPackageResourcePath, "getPackageResourcePath", "()Ljava/lang/String;"); if (_m_Context__getPackageResourcePath == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__getPackageResourcePath); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__getPackageCodePath = NULL; FFI_PLUGIN_EXPORT JniResult Context__getPackageCodePath(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getPackageCodePath, "getPackageCodePath", "()Ljava/lang/String;"); if (_m_Context__getPackageCodePath == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getPackageCodePath); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__getSharedPreferences = NULL; @@ -1637,18 +1828,17 @@ JniResult Context__getSharedPreferences(jobject self_, jobject string, int32_t i) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getSharedPreferences, "getSharedPreferences", "(Ljava/lang/String;I)Landroid/content/SharedPreferences;"); if (_m_Context__getSharedPreferences == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__getSharedPreferences, string, i); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__moveSharedPreferencesFrom = NULL; @@ -1657,338 +1847,321 @@ JniResult Context__moveSharedPreferencesFrom(jobject self_, jobject context, jobject string) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__moveSharedPreferencesFrom, "moveSharedPreferencesFrom", "(Landroid/content/Context;Ljava/lang/String;)Z"); if (_m_Context__moveSharedPreferencesFrom == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Context__moveSharedPreferencesFrom, context, string); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Context__deleteSharedPreferences = NULL; FFI_PLUGIN_EXPORT JniResult Context__deleteSharedPreferences(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__deleteSharedPreferences, "deleteSharedPreferences", "(Ljava/lang/String;)Z"); if (_m_Context__deleteSharedPreferences == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Context__deleteSharedPreferences, string); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Context__openFileInput = NULL; FFI_PLUGIN_EXPORT JniResult Context__openFileInput(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__openFileInput, "openFileInput", "(Ljava/lang/String;)Ljava/io/FileInputStream;"); if (_m_Context__openFileInput == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__openFileInput, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__openFileOutput = NULL; FFI_PLUGIN_EXPORT JniResult Context__openFileOutput(jobject self_, jobject string, int32_t i) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__openFileOutput, "openFileOutput", "(Ljava/lang/String;I)Ljava/io/FileOutputStream;"); if (_m_Context__openFileOutput == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__openFileOutput, string, i); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__deleteFile = NULL; FFI_PLUGIN_EXPORT JniResult Context__deleteFile(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__deleteFile, "deleteFile", "(Ljava/lang/String;)Z"); if (_m_Context__deleteFile == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Context__deleteFile, string); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Context__getFileStreamPath = NULL; FFI_PLUGIN_EXPORT JniResult Context__getFileStreamPath(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getFileStreamPath, "getFileStreamPath", "(Ljava/lang/String;)Ljava/io/File;"); if (_m_Context__getFileStreamPath == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__getFileStreamPath, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__getDataDir = NULL; FFI_PLUGIN_EXPORT JniResult Context__getDataDir(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getDataDir, "getDataDir", "()Ljava/io/File;"); if (_m_Context__getDataDir == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getDataDir); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__getFilesDir = NULL; FFI_PLUGIN_EXPORT JniResult Context__getFilesDir(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getFilesDir, "getFilesDir", "()Ljava/io/File;"); if (_m_Context__getFilesDir == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getFilesDir); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__getNoBackupFilesDir = NULL; FFI_PLUGIN_EXPORT JniResult Context__getNoBackupFilesDir(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getNoBackupFilesDir, "getNoBackupFilesDir", "()Ljava/io/File;"); if (_m_Context__getNoBackupFilesDir == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__getNoBackupFilesDir); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__getExternalFilesDir = NULL; FFI_PLUGIN_EXPORT JniResult Context__getExternalFilesDir(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getExternalFilesDir, "getExternalFilesDir", "(Ljava/lang/String;)Ljava/io/File;"); if (_m_Context__getExternalFilesDir == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__getExternalFilesDir, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__getExternalFilesDirs = NULL; FFI_PLUGIN_EXPORT JniResult Context__getExternalFilesDirs(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getExternalFilesDirs, "getExternalFilesDirs", "(Ljava/lang/String;)[Ljava/io/File;"); if (_m_Context__getExternalFilesDirs == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__getExternalFilesDirs, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__getObbDir = NULL; FFI_PLUGIN_EXPORT JniResult Context__getObbDir(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getObbDir, "getObbDir", "()Ljava/io/File;"); if (_m_Context__getObbDir == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getObbDir); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__getObbDirs = NULL; FFI_PLUGIN_EXPORT JniResult Context__getObbDirs(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getObbDirs, "getObbDirs", "()[Ljava/io/File;"); if (_m_Context__getObbDirs == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getObbDirs); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__getCacheDir = NULL; FFI_PLUGIN_EXPORT JniResult Context__getCacheDir(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getCacheDir, "getCacheDir", "()Ljava/io/File;"); if (_m_Context__getCacheDir == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getCacheDir); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__getCodeCacheDir = NULL; FFI_PLUGIN_EXPORT JniResult Context__getCodeCacheDir(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getCodeCacheDir, "getCodeCacheDir", "()Ljava/io/File;"); if (_m_Context__getCodeCacheDir == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getCodeCacheDir); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__getExternalCacheDir = NULL; FFI_PLUGIN_EXPORT JniResult Context__getExternalCacheDir(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getExternalCacheDir, "getExternalCacheDir", "()Ljava/io/File;"); if (_m_Context__getExternalCacheDir == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__getExternalCacheDir); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__getExternalCacheDirs = NULL; FFI_PLUGIN_EXPORT JniResult Context__getExternalCacheDirs(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getExternalCacheDirs, "getExternalCacheDirs", "()[Ljava/io/File;"); if (_m_Context__getExternalCacheDirs == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__getExternalCacheDirs); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__getExternalMediaDirs = NULL; FFI_PLUGIN_EXPORT JniResult Context__getExternalMediaDirs(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getExternalMediaDirs, "getExternalMediaDirs", "()[Ljava/io/File;"); if (_m_Context__getExternalMediaDirs == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__getExternalMediaDirs); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__fileList = NULL; FFI_PLUGIN_EXPORT JniResult Context__fileList(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__fileList, "fileList", "()[Ljava/lang/String;"); if (_m_Context__fileList == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__fileList); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__getDir = NULL; FFI_PLUGIN_EXPORT JniResult Context__getDir(jobject self_, jobject string, int32_t i) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getDir, "getDir", "(Ljava/lang/String;I)Ljava/io/File;"); if (_m_Context__getDir == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getDir, string, i); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__openOrCreateDatabase = NULL; @@ -1998,20 +2171,19 @@ JniResult Context__openOrCreateDatabase(jobject self_, int32_t i, jobject cursorFactory) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_Context, &_m_Context__openOrCreateDatabase, "openOrCreateDatabase", "(Ljava/lang/String;ILandroid/database/sqlite/" "SQLiteDatabase$CursorFactory;)Landroid/database/sqlite/SQLiteDatabase;"); if (_m_Context__openOrCreateDatabase == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__openOrCreateDatabase, string, i, cursorFactory); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__openOrCreateDatabase1 = NULL; @@ -2022,21 +2194,20 @@ JniResult Context__openOrCreateDatabase1(jobject self_, jobject cursorFactory, jobject databaseErrorHandler) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__openOrCreateDatabase1, "openOrCreateDatabase", "(Ljava/lang/String;ILandroid/database/sqlite/" "SQLiteDatabase$CursorFactory;Landroid/database/" "DatabaseErrorHandler;)Landroid/database/sqlite/SQLiteDatabase;"); if (_m_Context__openOrCreateDatabase1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__openOrCreateDatabase1, string, i, cursorFactory, databaseErrorHandler); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__moveDatabaseFrom = NULL; @@ -2045,192 +2216,188 @@ JniResult Context__moveDatabaseFrom(jobject self_, jobject context, jobject string) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__moveDatabaseFrom, "moveDatabaseFrom", "(Landroid/content/Context;Ljava/lang/String;)Z"); if (_m_Context__moveDatabaseFrom == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Context__moveDatabaseFrom, context, string); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Context__deleteDatabase = NULL; FFI_PLUGIN_EXPORT JniResult Context__deleteDatabase(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__deleteDatabase, "deleteDatabase", "(Ljava/lang/String;)Z"); if (_m_Context__deleteDatabase == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Context__deleteDatabase, string); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Context__getDatabasePath = NULL; FFI_PLUGIN_EXPORT JniResult Context__getDatabasePath(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getDatabasePath, "getDatabasePath", "(Ljava/lang/String;)Ljava/io/File;"); if (_m_Context__getDatabasePath == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__getDatabasePath, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__databaseList = NULL; FFI_PLUGIN_EXPORT JniResult Context__databaseList(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__databaseList, "databaseList", "()[Ljava/lang/String;"); if (_m_Context__databaseList == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__databaseList); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__getWallpaper = NULL; FFI_PLUGIN_EXPORT JniResult Context__getWallpaper(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getWallpaper, "getWallpaper", "()Landroid/graphics/drawable/Drawable;"); if (_m_Context__getWallpaper == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getWallpaper); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__peekWallpaper = NULL; FFI_PLUGIN_EXPORT JniResult Context__peekWallpaper(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__peekWallpaper, "peekWallpaper", "()Landroid/graphics/drawable/Drawable;"); if (_m_Context__peekWallpaper == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__peekWallpaper); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__getWallpaperDesiredMinimumWidth = NULL; FFI_PLUGIN_EXPORT JniResult Context__getWallpaperDesiredMinimumWidth(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getWallpaperDesiredMinimumWidth, "getWallpaperDesiredMinimumWidth", "()I"); if (_m_Context__getWallpaperDesiredMinimumWidth == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; int32_t _result = (*jniEnv)->CallIntMethod( jniEnv, self_, _m_Context__getWallpaperDesiredMinimumWidth); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; + return (JniResult){.value = {.i = _result}, .exception = check_exception()}; } jmethodID _m_Context__getWallpaperDesiredMinimumHeight = NULL; FFI_PLUGIN_EXPORT JniResult Context__getWallpaperDesiredMinimumHeight(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getWallpaperDesiredMinimumHeight, "getWallpaperDesiredMinimumHeight", "()I"); if (_m_Context__getWallpaperDesiredMinimumHeight == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; int32_t _result = (*jniEnv)->CallIntMethod( jniEnv, self_, _m_Context__getWallpaperDesiredMinimumHeight); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; + return (JniResult){.value = {.i = _result}, .exception = check_exception()}; } jmethodID _m_Context__setWallpaper = NULL; FFI_PLUGIN_EXPORT JniResult Context__setWallpaper(jobject self_, jobject bitmap) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__setWallpaper, "setWallpaper", "(Landroid/graphics/Bitmap;)V"); if (_m_Context__setWallpaper == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__setWallpaper, bitmap); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__setWallpaper1 = NULL; FFI_PLUGIN_EXPORT JniResult Context__setWallpaper1(jobject self_, jobject inputStream) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__setWallpaper1, "setWallpaper", "(Ljava/io/InputStream;)V"); if (_m_Context__setWallpaper1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__setWallpaper1, inputStream); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__clearWallpaper = NULL; FFI_PLUGIN_EXPORT JniResult Context__clearWallpaper(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__clearWallpaper, "clearWallpaper", "()V"); if (_m_Context__clearWallpaper == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__clearWallpaper); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__startActivity = NULL; FFI_PLUGIN_EXPORT JniResult Context__startActivity(jobject self_, jobject intent) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__startActivity, "startActivity", "(Landroid/content/Intent;)V"); if (_m_Context__startActivity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__startActivity, intent); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__startActivity1 = NULL; @@ -2239,32 +2406,32 @@ JniResult Context__startActivity1(jobject self_, jobject intent, jobject bundle) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__startActivity1, "startActivity", "(Landroid/content/Intent;Landroid/os/Bundle;)V"); if (_m_Context__startActivity1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__startActivity1, intent, bundle); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__startActivities = NULL; FFI_PLUGIN_EXPORT JniResult Context__startActivities(jobject self_, jobject intents) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__startActivities, "startActivities", "([Landroid/content/Intent;)V"); if (_m_Context__startActivities == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__startActivities, intents); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__startActivities1 = NULL; @@ -2273,16 +2440,16 @@ JniResult Context__startActivities1(jobject self_, jobject intents, jobject bundle) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__startActivities1, "startActivities", "([Landroid/content/Intent;Landroid/os/Bundle;)V"); if (_m_Context__startActivities1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__startActivities1, intents, bundle); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__startIntentSender = NULL; @@ -2294,16 +2461,16 @@ JniResult Context__startIntentSender(jobject self_, int32_t i1, int32_t i2) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__startIntentSender, "startIntentSender", "(Landroid/content/IntentSender;Landroid/content/Intent;III)V"); if (_m_Context__startIntentSender == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__startIntentSender, intentSender, intent, i, i1, i2); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__startIntentSender1 = NULL; @@ -2316,32 +2483,32 @@ JniResult Context__startIntentSender1(jobject self_, int32_t i2, jobject bundle) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__startIntentSender1, "startIntentSender", "(Landroid/content/IntentSender;Landroid/content/" "Intent;IIILandroid/os/Bundle;)V"); if (_m_Context__startIntentSender1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__startIntentSender1, intentSender, intent, i, i1, i2, bundle); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__sendBroadcast = NULL; FFI_PLUGIN_EXPORT JniResult Context__sendBroadcast(jobject self_, jobject intent) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__sendBroadcast, "sendBroadcast", "(Landroid/content/Intent;)V"); if (_m_Context__sendBroadcast == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__sendBroadcast, intent); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__sendBroadcast1 = NULL; @@ -2350,16 +2517,16 @@ JniResult Context__sendBroadcast1(jobject self_, jobject intent, jobject string) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__sendBroadcast1, "sendBroadcast", "(Landroid/content/Intent;Ljava/lang/String;)V"); if (_m_Context__sendBroadcast1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__sendBroadcast1, intent, string); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__sendBroadcastWithMultiplePermissions = NULL; @@ -2368,18 +2535,18 @@ JniResult Context__sendBroadcastWithMultiplePermissions(jobject self_, jobject intent, jobject strings) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__sendBroadcastWithMultiplePermissions, "sendBroadcastWithMultiplePermissions", "(Landroid/content/Intent;[Ljava/lang/String;)V"); if (_m_Context__sendBroadcastWithMultiplePermissions == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__sendBroadcastWithMultiplePermissions, intent, strings); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__sendOrderedBroadcast = NULL; @@ -2388,17 +2555,17 @@ JniResult Context__sendOrderedBroadcast(jobject self_, jobject intent, jobject string) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__sendOrderedBroadcast, "sendOrderedBroadcast", "(Landroid/content/Intent;Ljava/lang/String;)V"); if (_m_Context__sendOrderedBroadcast == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__sendOrderedBroadcast, intent, string); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__sendOrderedBroadcast1 = NULL; @@ -2412,20 +2579,20 @@ JniResult Context__sendOrderedBroadcast1(jobject self_, jobject string1, jobject bundle) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__sendOrderedBroadcast1, "sendOrderedBroadcast", "(Landroid/content/Intent;Ljava/lang/String;Landroid/content/" "BroadcastReceiver;Landroid/os/Handler;ILjava/lang/" "String;Landroid/os/Bundle;)V"); if (_m_Context__sendOrderedBroadcast1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__sendOrderedBroadcast1, intent, string, broadcastReceiver, handler, i, string1, bundle); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__sendBroadcastAsUser = NULL; @@ -2434,17 +2601,17 @@ JniResult Context__sendBroadcastAsUser(jobject self_, jobject intent, jobject userHandle) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__sendBroadcastAsUser, "sendBroadcastAsUser", "(Landroid/content/Intent;Landroid/os/UserHandle;)V"); if (_m_Context__sendBroadcastAsUser == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__sendBroadcastAsUser, intent, userHandle); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__sendBroadcastAsUser1 = NULL; @@ -2454,17 +2621,17 @@ JniResult Context__sendBroadcastAsUser1(jobject self_, jobject userHandle, jobject string) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_Context, &_m_Context__sendBroadcastAsUser1, "sendBroadcastAsUser", "(Landroid/content/Intent;Landroid/os/UserHandle;Ljava/lang/String;)V"); if (_m_Context__sendBroadcastAsUser1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__sendBroadcastAsUser1, intent, userHandle, string); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__sendOrderedBroadcastAsUser = NULL; @@ -2479,20 +2646,20 @@ JniResult Context__sendOrderedBroadcastAsUser(jobject self_, jobject string1, jobject bundle) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__sendOrderedBroadcastAsUser, "sendOrderedBroadcastAsUser", "(Landroid/content/Intent;Landroid/os/UserHandle;Ljava/lang/" "String;Landroid/content/BroadcastReceiver;Landroid/os/" "Handler;ILjava/lang/String;Landroid/os/Bundle;)V"); if (_m_Context__sendOrderedBroadcastAsUser == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod( jniEnv, self_, _m_Context__sendOrderedBroadcastAsUser, intent, userHandle, string, broadcastReceiver, handler, i, string1, bundle); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__sendOrderedBroadcast2 = NULL; @@ -2507,36 +2674,36 @@ JniResult Context__sendOrderedBroadcast2(jobject self_, jobject string2, jobject bundle) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__sendOrderedBroadcast2, "sendOrderedBroadcast", "(Landroid/content/Intent;Ljava/lang/String;Ljava/lang/" "String;Landroid/content/BroadcastReceiver;Landroid/os/" "Handler;ILjava/lang/String;Landroid/os/Bundle;)V"); if (_m_Context__sendOrderedBroadcast2 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__sendOrderedBroadcast2, intent, string, string1, broadcastReceiver, handler, i, string2, bundle); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__sendStickyBroadcast = NULL; FFI_PLUGIN_EXPORT JniResult Context__sendStickyBroadcast(jobject self_, jobject intent) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__sendStickyBroadcast, "sendStickyBroadcast", "(Landroid/content/Intent;)V"); if (_m_Context__sendStickyBroadcast == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__sendStickyBroadcast, intent); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__sendStickyBroadcast1 = NULL; @@ -2545,17 +2712,17 @@ JniResult Context__sendStickyBroadcast1(jobject self_, jobject intent, jobject bundle) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__sendStickyBroadcast1, "sendStickyBroadcast", "(Landroid/content/Intent;Landroid/os/Bundle;)V"); if (_m_Context__sendStickyBroadcast1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__sendStickyBroadcast1, intent, bundle); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__sendStickyOrderedBroadcast = NULL; @@ -2568,36 +2735,36 @@ JniResult Context__sendStickyOrderedBroadcast(jobject self_, jobject string, jobject bundle) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_Context, &_m_Context__sendStickyOrderedBroadcast, "sendStickyOrderedBroadcast", "(Landroid/content/Intent;Landroid/content/BroadcastReceiver;Landroid/os/" "Handler;ILjava/lang/String;Landroid/os/Bundle;)V"); if (_m_Context__sendStickyOrderedBroadcast == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__sendStickyOrderedBroadcast, intent, broadcastReceiver, handler, i, string, bundle); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__removeStickyBroadcast = NULL; FFI_PLUGIN_EXPORT JniResult Context__removeStickyBroadcast(jobject self_, jobject intent) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__removeStickyBroadcast, "removeStickyBroadcast", "(Landroid/content/Intent;)V"); if (_m_Context__removeStickyBroadcast == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__removeStickyBroadcast, intent); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__sendStickyBroadcastAsUser = NULL; @@ -2606,17 +2773,17 @@ JniResult Context__sendStickyBroadcastAsUser(jobject self_, jobject intent, jobject userHandle) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__sendStickyBroadcastAsUser, "sendStickyBroadcastAsUser", "(Landroid/content/Intent;Landroid/os/UserHandle;)V"); if (_m_Context__sendStickyBroadcastAsUser == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod( jniEnv, self_, _m_Context__sendStickyBroadcastAsUser, intent, userHandle); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__sendStickyOrderedBroadcastAsUser = NULL; @@ -2630,20 +2797,20 @@ JniResult Context__sendStickyOrderedBroadcastAsUser(jobject self_, jobject string, jobject bundle) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__sendStickyOrderedBroadcastAsUser, "sendStickyOrderedBroadcastAsUser", "(Landroid/content/Intent;Landroid/os/UserHandle;Landroid/" "content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/" "String;Landroid/os/Bundle;)V"); if (_m_Context__sendStickyOrderedBroadcastAsUser == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod( jniEnv, self_, _m_Context__sendStickyOrderedBroadcastAsUser, intent, userHandle, broadcastReceiver, handler, i, string, bundle); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__removeStickyBroadcastAsUser = NULL; @@ -2652,18 +2819,18 @@ JniResult Context__removeStickyBroadcastAsUser(jobject self_, jobject intent, jobject userHandle) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__removeStickyBroadcastAsUser, "removeStickyBroadcastAsUser", "(Landroid/content/Intent;Landroid/os/UserHandle;)V"); if (_m_Context__removeStickyBroadcastAsUser == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__removeStickyBroadcastAsUser, intent, userHandle); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__registerReceiver = NULL; @@ -2672,19 +2839,18 @@ JniResult Context__registerReceiver(jobject self_, jobject broadcastReceiver, jobject intentFilter) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__registerReceiver, "registerReceiver", "(Landroid/content/BroadcastReceiver;Landroid/content/" "IntentFilter;)Landroid/content/Intent;"); if (_m_Context__registerReceiver == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__registerReceiver, broadcastReceiver, intentFilter); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__registerReceiver1 = NULL; @@ -2694,19 +2860,18 @@ JniResult Context__registerReceiver1(jobject self_, jobject intentFilter, int32_t i) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__registerReceiver1, "registerReceiver", "(Landroid/content/BroadcastReceiver;Landroid/content/" "IntentFilter;I)Landroid/content/Intent;"); if (_m_Context__registerReceiver1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__registerReceiver1, broadcastReceiver, intentFilter, i); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__registerReceiver2 = NULL; @@ -2717,20 +2882,19 @@ JniResult Context__registerReceiver2(jobject self_, jobject string, jobject handler) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_Context, &_m_Context__registerReceiver2, "registerReceiver", "(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;Ljava/" "lang/String;Landroid/os/Handler;)Landroid/content/Intent;"); if (_m_Context__registerReceiver2 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__registerReceiver2, broadcastReceiver, intentFilter, string, handler); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__registerReceiver3 = NULL; @@ -2742,20 +2906,19 @@ JniResult Context__registerReceiver3(jobject self_, jobject handler, int32_t i) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_Context, &_m_Context__registerReceiver3, "registerReceiver", "(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;Ljava/" "lang/String;Landroid/os/Handler;I)Landroid/content/Intent;"); if (_m_Context__registerReceiver3 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__registerReceiver3, broadcastReceiver, intentFilter, string, handler, i); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__unregisterReceiver = NULL; @@ -2763,67 +2926,65 @@ FFI_PLUGIN_EXPORT JniResult Context__unregisterReceiver(jobject self_, jobject broadcastReceiver) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__unregisterReceiver, "unregisterReceiver", "(Landroid/content/BroadcastReceiver;)V"); if (_m_Context__unregisterReceiver == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__unregisterReceiver, broadcastReceiver); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__startService = NULL; FFI_PLUGIN_EXPORT JniResult Context__startService(jobject self_, jobject intent) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__startService, "startService", "(Landroid/content/Intent;)Landroid/content/ComponentName;"); if (_m_Context__startService == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__startService, intent); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__startForegroundService = NULL; FFI_PLUGIN_EXPORT JniResult Context__startForegroundService(jobject self_, jobject intent) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__startForegroundService, "startForegroundService", "(Landroid/content/Intent;)Landroid/content/ComponentName;"); if (_m_Context__startForegroundService == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__startForegroundService, intent); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__stopService = NULL; FFI_PLUGIN_EXPORT JniResult Context__stopService(jobject self_, jobject intent) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__stopService, "stopService", "(Landroid/content/Intent;)Z"); if (_m_Context__stopService == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Context__stopService, intent); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Context__bindService = NULL; @@ -2833,17 +2994,17 @@ JniResult Context__bindService(jobject self_, jobject serviceConnection, int32_t i) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_Context, &_m_Context__bindService, "bindService", "(Landroid/content/Intent;Landroid/content/ServiceConnection;I)Z"); if (_m_Context__bindService == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Context__bindService, intent, serviceConnection, i); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Context__bindService1 = NULL; @@ -2854,18 +3015,18 @@ JniResult Context__bindService1(jobject self_, jobject executor, jobject serviceConnection) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__bindService1, "bindService", "(Landroid/content/Intent;ILjava/util/concurrent/" "Executor;Landroid/content/ServiceConnection;)Z"); if (_m_Context__bindService1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Context__bindService1, intent, i, executor, serviceConnection); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Context__bindIsolatedService = NULL; @@ -2877,19 +3038,19 @@ JniResult Context__bindIsolatedService(jobject self_, jobject executor, jobject serviceConnection) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__bindIsolatedService, "bindIsolatedService", "(Landroid/content/Intent;ILjava/lang/String;Ljava/util/" "concurrent/Executor;Landroid/content/ServiceConnection;)Z"); if (_m_Context__bindIsolatedService == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Context__bindIsolatedService, intent, i, string, executor, serviceConnection); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Context__bindServiceAsUser = NULL; @@ -2900,18 +3061,18 @@ JniResult Context__bindServiceAsUser(jobject self_, int32_t i, jobject userHandle) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__bindServiceAsUser, "bindServiceAsUser", "(Landroid/content/Intent;Landroid/content/" "ServiceConnection;ILandroid/os/UserHandle;)Z"); if (_m_Context__bindServiceAsUser == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Context__bindServiceAsUser, intent, serviceConnection, i, userHandle); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Context__updateServiceGroup = NULL; @@ -2921,32 +3082,32 @@ JniResult Context__updateServiceGroup(jobject self_, int32_t i, int32_t i1) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__updateServiceGroup, "updateServiceGroup", "(Landroid/content/ServiceConnection;II)V"); if (_m_Context__updateServiceGroup == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__updateServiceGroup, serviceConnection, i, i1); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__unbindService = NULL; FFI_PLUGIN_EXPORT JniResult Context__unbindService(jobject self_, jobject serviceConnection) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__unbindService, "unbindService", "(Landroid/content/ServiceConnection;)V"); if (_m_Context__unbindService == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__unbindService, serviceConnection); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__startInstrumentation = NULL; @@ -2956,70 +3117,67 @@ JniResult Context__startInstrumentation(jobject self_, jobject string, jobject bundle) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__startInstrumentation, "startInstrumentation", "(Landroid/content/ComponentName;Ljava/lang/String;Landroid/os/" "Bundle;)Z"); if (_m_Context__startInstrumentation == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Context__startInstrumentation, componentName, string, bundle); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Context__getSystemService = NULL; FFI_PLUGIN_EXPORT JniResult Context__getSystemService(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getSystemService, "getSystemService", "(Ljava/lang/String;)Ljava/lang/Object;"); if (_m_Context__getSystemService == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__getSystemService, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__getSystemService1 = NULL; FFI_PLUGIN_EXPORT JniResult Context__getSystemService1(jobject self_, jobject class) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getSystemService1, "getSystemService", "(Ljava/lang/Class;)Ljava/lang/Object;"); if (_m_Context__getSystemService1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__getSystemService1, class); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__getSystemServiceName = NULL; FFI_PLUGIN_EXPORT JniResult Context__getSystemServiceName(jobject self_, jobject class) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getSystemServiceName, "getSystemServiceName", "(Ljava/lang/Class;)Ljava/lang/String;"); if (_m_Context__getSystemServiceName == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__getSystemServiceName, class); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__checkPermission = NULL; @@ -3029,64 +3187,64 @@ JniResult Context__checkPermission(jobject self_, int32_t i, int32_t i1) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__checkPermission, "checkPermission", "(Ljava/lang/String;II)I"); if (_m_Context__checkPermission == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; int32_t _result = (*jniEnv)->CallIntMethod( jniEnv, self_, _m_Context__checkPermission, string, i, i1); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; + return (JniResult){.value = {.i = _result}, .exception = check_exception()}; } jmethodID _m_Context__checkCallingPermission = NULL; FFI_PLUGIN_EXPORT JniResult Context__checkCallingPermission(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__checkCallingPermission, "checkCallingPermission", "(Ljava/lang/String;)I"); if (_m_Context__checkCallingPermission == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; int32_t _result = (*jniEnv)->CallIntMethod( jniEnv, self_, _m_Context__checkCallingPermission, string); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; + return (JniResult){.value = {.i = _result}, .exception = check_exception()}; } jmethodID _m_Context__checkCallingOrSelfPermission = NULL; FFI_PLUGIN_EXPORT JniResult Context__checkCallingOrSelfPermission(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__checkCallingOrSelfPermission, "checkCallingOrSelfPermission", "(Ljava/lang/String;)I"); if (_m_Context__checkCallingOrSelfPermission == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; int32_t _result = (*jniEnv)->CallIntMethod( jniEnv, self_, _m_Context__checkCallingOrSelfPermission, string); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; + return (JniResult){.value = {.i = _result}, .exception = check_exception()}; } jmethodID _m_Context__checkSelfPermission = NULL; FFI_PLUGIN_EXPORT JniResult Context__checkSelfPermission(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__checkSelfPermission, "checkSelfPermission", "(Ljava/lang/String;)I"); if (_m_Context__checkSelfPermission == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; int32_t _result = (*jniEnv)->CallIntMethod( jniEnv, self_, _m_Context__checkSelfPermission, string); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; + return (JniResult){.value = {.i = _result}, .exception = check_exception()}; } jmethodID _m_Context__enforcePermission = NULL; @@ -3097,16 +3255,16 @@ JniResult Context__enforcePermission(jobject self_, int32_t i1, jobject string1) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__enforcePermission, "enforcePermission", "(Ljava/lang/String;IILjava/lang/String;)V"); if (_m_Context__enforcePermission == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__enforcePermission, string, i, i1, string1); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__enforceCallingPermission = NULL; @@ -3115,17 +3273,17 @@ JniResult Context__enforceCallingPermission(jobject self_, jobject string, jobject string1) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__enforceCallingPermission, "enforceCallingPermission", "(Ljava/lang/String;Ljava/lang/String;)V"); if (_m_Context__enforceCallingPermission == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__enforceCallingPermission, string, string1); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__enforceCallingOrSelfPermission = NULL; @@ -3134,18 +3292,18 @@ JniResult Context__enforceCallingOrSelfPermission(jobject self_, jobject string, jobject string1) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__enforceCallingOrSelfPermission, "enforceCallingOrSelfPermission", "(Ljava/lang/String;Ljava/lang/String;)V"); if (_m_Context__enforceCallingOrSelfPermission == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__enforceCallingOrSelfPermission, string, string1); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__grantUriPermission = NULL; @@ -3155,32 +3313,32 @@ JniResult Context__grantUriPermission(jobject self_, jobject uri, int32_t i) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__grantUriPermission, "grantUriPermission", "(Ljava/lang/String;Landroid/net/Uri;I)V"); if (_m_Context__grantUriPermission == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__grantUriPermission, string, uri, i); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__revokeUriPermission = NULL; FFI_PLUGIN_EXPORT JniResult Context__revokeUriPermission(jobject self_, jobject uri, int32_t i) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__revokeUriPermission, "revokeUriPermission", "(Landroid/net/Uri;I)V"); if (_m_Context__revokeUriPermission == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__revokeUriPermission, uri, i); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__revokeUriPermission1 = NULL; @@ -3190,16 +3348,16 @@ JniResult Context__revokeUriPermission1(jobject self_, jobject uri, int32_t i) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__revokeUriPermission1, "revokeUriPermission", "(Ljava/lang/String;Landroid/net/Uri;I)V"); if (_m_Context__revokeUriPermission1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__revokeUriPermission1, string, uri, i); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__checkUriPermission = NULL; @@ -3210,16 +3368,16 @@ JniResult Context__checkUriPermission(jobject self_, int32_t i1, int32_t i2) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__checkUriPermission, "checkUriPermission", "(Landroid/net/Uri;III)I"); if (_m_Context__checkUriPermission == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; int32_t _result = (*jniEnv)->CallIntMethod( jniEnv, self_, _m_Context__checkUriPermission, uri, i, i1, i2); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; + return (JniResult){.value = {.i = _result}, .exception = check_exception()}; } jmethodID _m_Context__checkUriPermissions = NULL; @@ -3230,17 +3388,16 @@ JniResult Context__checkUriPermissions(jobject self_, int32_t i1, int32_t i2) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__checkUriPermissions, "checkUriPermissions", "(Ljava/util/List;III)[I"); if (_m_Context__checkUriPermissions == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__checkUriPermissions, list, i, i1, i2); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__checkCallingUriPermission = NULL; @@ -3249,16 +3406,16 @@ JniResult Context__checkCallingUriPermission(jobject self_, jobject uri, int32_t i) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__checkCallingUriPermission, "checkCallingUriPermission", "(Landroid/net/Uri;I)I"); if (_m_Context__checkCallingUriPermission == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; int32_t _result = (*jniEnv)->CallIntMethod( jniEnv, self_, _m_Context__checkCallingUriPermission, uri, i); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; + return (JniResult){.value = {.i = _result}, .exception = check_exception()}; } jmethodID _m_Context__checkCallingUriPermissions = NULL; @@ -3267,17 +3424,16 @@ JniResult Context__checkCallingUriPermissions(jobject self_, jobject list, int32_t i) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__checkCallingUriPermissions, "checkCallingUriPermissions", "(Ljava/util/List;I)[I"); if (_m_Context__checkCallingUriPermissions == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__checkCallingUriPermissions, list, i); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__checkCallingOrSelfUriPermission = NULL; @@ -3286,16 +3442,16 @@ JniResult Context__checkCallingOrSelfUriPermission(jobject self_, jobject uri, int32_t i) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__checkCallingOrSelfUriPermission, "checkCallingOrSelfUriPermission", "(Landroid/net/Uri;I)I"); if (_m_Context__checkCallingOrSelfUriPermission == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; int32_t _result = (*jniEnv)->CallIntMethod( jniEnv, self_, _m_Context__checkCallingOrSelfUriPermission, uri, i); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; + return (JniResult){.value = {.i = _result}, .exception = check_exception()}; } jmethodID _m_Context__checkCallingOrSelfUriPermissions = NULL; @@ -3304,17 +3460,16 @@ JniResult Context__checkCallingOrSelfUriPermissions(jobject self_, jobject list, int32_t i) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__checkCallingOrSelfUriPermissions, "checkCallingOrSelfUriPermissions", "(Ljava/util/List;I)[I"); if (_m_Context__checkCallingOrSelfUriPermissions == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__checkCallingOrSelfUriPermissions, list, i); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__checkUriPermission1 = NULL; @@ -3327,18 +3482,18 @@ JniResult Context__checkUriPermission1(jobject self_, int32_t i1, int32_t i2) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__checkUriPermission1, "checkUriPermission", "(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;III)I"); if (_m_Context__checkUriPermission1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; int32_t _result = (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Context__checkUriPermission1, uri, string, string1, i, i1, i2); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; + return (JniResult){.value = {.i = _result}, .exception = check_exception()}; } jmethodID _m_Context__enforceUriPermission = NULL; @@ -3350,17 +3505,17 @@ JniResult Context__enforceUriPermission(jobject self_, int32_t i2, jobject string) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__enforceUriPermission, "enforceUriPermission", "(Landroid/net/Uri;IIILjava/lang/String;)V"); if (_m_Context__enforceUriPermission == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__enforceUriPermission, uri, i, i1, i2, string); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__enforceCallingUriPermission = NULL; @@ -3370,17 +3525,17 @@ JniResult Context__enforceCallingUriPermission(jobject self_, int32_t i, jobject string) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__enforceCallingUriPermission, "enforceCallingUriPermission", "(Landroid/net/Uri;ILjava/lang/String;)V"); if (_m_Context__enforceCallingUriPermission == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod( jniEnv, self_, _m_Context__enforceCallingUriPermission, uri, i, string); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__enforceCallingOrSelfUriPermission = NULL; @@ -3390,18 +3545,18 @@ JniResult Context__enforceCallingOrSelfUriPermission(jobject self_, int32_t i, jobject string) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__enforceCallingOrSelfUriPermission, "enforceCallingOrSelfUriPermission", "(Landroid/net/Uri;ILjava/lang/String;)V"); if (_m_Context__enforceCallingOrSelfUriPermission == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__enforceCallingOrSelfUriPermission, uri, i, string); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__enforceUriPermission1 = NULL; @@ -3415,34 +3570,34 @@ JniResult Context__enforceUriPermission1(jobject self_, int32_t i2, jobject string2) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__enforceUriPermission1, "enforceUriPermission", "(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;IIILjava/" "lang/String;)V"); if (_m_Context__enforceUriPermission1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__enforceUriPermission1, uri, string, string1, i, i1, i2, string2); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__revokeSelfPermissionOnKill = NULL; FFI_PLUGIN_EXPORT JniResult Context__revokeSelfPermissionOnKill(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__revokeSelfPermissionOnKill, "revokeSelfPermissionOnKill", "(Ljava/lang/String;)V"); if (_m_Context__revokeSelfPermissionOnKill == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Context__revokeSelfPermissionOnKill, string); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__revokeSelfPermissionsOnKill = NULL; @@ -3450,16 +3605,16 @@ FFI_PLUGIN_EXPORT JniResult Context__revokeSelfPermissionsOnKill(jobject self_, jobject collection) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__revokeSelfPermissionsOnKill, "revokeSelfPermissionsOnKill", "(Ljava/util/Collection;)V"); if (_m_Context__revokeSelfPermissionsOnKill == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod( jniEnv, self_, _m_Context__revokeSelfPermissionsOnKill, collection); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Context__createPackageContext = NULL; @@ -3468,36 +3623,34 @@ JniResult Context__createPackageContext(jobject self_, jobject string, int32_t i) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__createPackageContext, "createPackageContext", "(Ljava/lang/String;I)Landroid/content/Context;"); if (_m_Context__createPackageContext == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__createPackageContext, string, i); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__createContextForSplit = NULL; FFI_PLUGIN_EXPORT JniResult Context__createContextForSplit(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__createContextForSplit, "createContextForSplit", "(Ljava/lang/String;)Landroid/content/Context;"); if (_m_Context__createContextForSplit == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__createContextForSplit, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__createConfigurationContext = NULL; @@ -3505,36 +3658,34 @@ FFI_PLUGIN_EXPORT JniResult Context__createConfigurationContext(jobject self_, jobject configuration) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__createConfigurationContext, "createConfigurationContext", "(Landroid/content/res/Configuration;)Landroid/content/Context;"); if (_m_Context__createConfigurationContext == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__createConfigurationContext, configuration); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__createDisplayContext = NULL; FFI_PLUGIN_EXPORT JniResult Context__createDisplayContext(jobject self_, jobject display) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__createDisplayContext, "createDisplayContext", "(Landroid/view/Display;)Landroid/content/Context;"); if (_m_Context__createDisplayContext == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__createDisplayContext, display); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__createWindowContext = NULL; @@ -3543,18 +3694,17 @@ JniResult Context__createWindowContext(jobject self_, int32_t i, jobject bundle) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__createWindowContext, "createWindowContext", "(ILandroid/os/Bundle;)Landroid/content/Context;"); if (_m_Context__createWindowContext == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__createWindowContext, i, bundle); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__createWindowContext1 = NULL; @@ -3564,258 +3714,497 @@ JniResult Context__createWindowContext1(jobject self_, int32_t i, jobject bundle) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_Context, &_m_Context__createWindowContext1, "createWindowContext", "(Landroid/view/Display;ILandroid/os/Bundle;)Landroid/content/Context;"); if (_m_Context__createWindowContext1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__createWindowContext1, display, i, bundle); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__createContext = NULL; FFI_PLUGIN_EXPORT JniResult Context__createContext(jobject self_, jobject contextParams) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__createContext, "createContext", "(Landroid/content/ContextParams;)Landroid/content/Context;"); if (_m_Context__createContext == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__createContext, contextParams); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__createAttributionContext = NULL; FFI_PLUGIN_EXPORT JniResult Context__createAttributionContext(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__createAttributionContext, "createAttributionContext", "(Ljava/lang/String;)Landroid/content/Context;"); if (_m_Context__createAttributionContext == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__createAttributionContext, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__createDeviceProtectedStorageContext = NULL; FFI_PLUGIN_EXPORT JniResult Context__createDeviceProtectedStorageContext(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__createDeviceProtectedStorageContext, "createDeviceProtectedStorageContext", "()Landroid/content/Context;"); if (_m_Context__createDeviceProtectedStorageContext == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Context__createDeviceProtectedStorageContext); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__getDisplay = NULL; FFI_PLUGIN_EXPORT JniResult Context__getDisplay(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__getDisplay, "getDisplay", "()Landroid/view/Display;"); if (_m_Context__getDisplay == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Context__getDisplay); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Context__isRestricted = NULL; FFI_PLUGIN_EXPORT JniResult Context__isRestricted(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__isRestricted, "isRestricted", "()Z"); if (_m_Context__isRestricted == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Context__isRestricted); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Context__isDeviceProtectedStorage = NULL; FFI_PLUGIN_EXPORT JniResult Context__isDeviceProtectedStorage(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__isDeviceProtectedStorage, "isDeviceProtectedStorage", "()Z"); if (_m_Context__isDeviceProtectedStorage == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Context__isDeviceProtectedStorage); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Context__isUiContext = NULL; FFI_PLUGIN_EXPORT JniResult Context__isUiContext(jobject self_) { load_env(); - load_class_gr(&_c_Context, "android/content/Context"); + load_class_global_ref(&_c_Context, "android/content/Context"); if (_c_Context == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Context, &_m_Context__isUiContext, "isUiContext", "()Z"); if (_m_Context__isUiContext == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Context__isUiContext); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; +} + +// android.content.Intent$FilterComparison +jclass _c_Intent_FilterComparison = NULL; + +jmethodID _m_Intent_FilterComparison__new0 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent_FilterComparison__new0(jobject intent) { + load_env(); + load_class_global_ref(&_c_Intent_FilterComparison, + "android/content/Intent$FilterComparison"); + if (_c_Intent_FilterComparison == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent_FilterComparison, &_m_Intent_FilterComparison__new0, + "", "(Landroid/content/Intent;)V"); + if (_m_Intent_FilterComparison__new0 == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->NewObject(jniEnv, _c_Intent_FilterComparison, + _m_Intent_FilterComparison__new0, intent); + return to_global_ref_result(_result); +} + +jmethodID _m_Intent_FilterComparison__getIntent = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent_FilterComparison__getIntent(jobject self_) { + load_env(); + load_class_global_ref(&_c_Intent_FilterComparison, + "android/content/Intent$FilterComparison"); + if (_c_Intent_FilterComparison == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent_FilterComparison, + &_m_Intent_FilterComparison__getIntent, "getIntent", + "()Landroid/content/Intent;"); + if (_m_Intent_FilterComparison__getIntent == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent_FilterComparison__getIntent); + return to_global_ref_result(_result); +} + +jmethodID _m_Intent_FilterComparison__equals1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent_FilterComparison__equals1(jobject self_, jobject object) { + load_env(); + load_class_global_ref(&_c_Intent_FilterComparison, + "android/content/Intent$FilterComparison"); + if (_c_Intent_FilterComparison == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent_FilterComparison, &_m_Intent_FilterComparison__equals1, + "equals", "(Ljava/lang/Object;)Z"); + if (_m_Intent_FilterComparison__equals1 == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + uint8_t _result = (*jniEnv)->CallBooleanMethod( + jniEnv, self_, _m_Intent_FilterComparison__equals1, object); + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; +} + +jmethodID _m_Intent_FilterComparison__hashCode1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent_FilterComparison__hashCode1(jobject self_) { + load_env(); + load_class_global_ref(&_c_Intent_FilterComparison, + "android/content/Intent$FilterComparison"); + if (_c_Intent_FilterComparison == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent_FilterComparison, + &_m_Intent_FilterComparison__hashCode1, "hashCode", "()I"); + if (_m_Intent_FilterComparison__hashCode1 == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + int32_t _result = (*jniEnv)->CallIntMethod( + jniEnv, self_, _m_Intent_FilterComparison__hashCode1); + return (JniResult){.value = {.i = _result}, .exception = check_exception()}; +} + +// android.content.Intent$ShortcutIconResource +jclass _c_Intent_ShortcutIconResource = NULL; + +jmethodID _m_Intent_ShortcutIconResource__new0 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent_ShortcutIconResource__new0() { + load_env(); + load_class_global_ref(&_c_Intent_ShortcutIconResource, + "android/content/Intent$ShortcutIconResource"); + if (_c_Intent_ShortcutIconResource == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent_ShortcutIconResource, + &_m_Intent_ShortcutIconResource__new0, "", "()V"); + if (_m_Intent_ShortcutIconResource__new0 == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->NewObject(jniEnv, _c_Intent_ShortcutIconResource, + _m_Intent_ShortcutIconResource__new0); + return to_global_ref_result(_result); +} + +jmethodID _m_Intent_ShortcutIconResource__fromContext = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent_ShortcutIconResource__fromContext(jobject context, int32_t i) { + load_env(); + load_class_global_ref(&_c_Intent_ShortcutIconResource, + "android/content/Intent$ShortcutIconResource"); + if (_c_Intent_ShortcutIconResource == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_Intent_ShortcutIconResource, + &_m_Intent_ShortcutIconResource__fromContext, + "fromContext", + "(Landroid/content/Context;I)Landroid/content/" + "Intent$ShortcutIconResource;"); + if (_m_Intent_ShortcutIconResource__fromContext == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_Intent_ShortcutIconResource, + _m_Intent_ShortcutIconResource__fromContext, context, i); + return to_global_ref_result(_result); +} + +jmethodID _m_Intent_ShortcutIconResource__describeContents = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent_ShortcutIconResource__describeContents(jobject self_) { + load_env(); + load_class_global_ref(&_c_Intent_ShortcutIconResource, + "android/content/Intent$ShortcutIconResource"); + if (_c_Intent_ShortcutIconResource == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent_ShortcutIconResource, + &_m_Intent_ShortcutIconResource__describeContents, + "describeContents", "()I"); + if (_m_Intent_ShortcutIconResource__describeContents == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + int32_t _result = (*jniEnv)->CallIntMethod( + jniEnv, self_, _m_Intent_ShortcutIconResource__describeContents); + return (JniResult){.value = {.i = _result}, .exception = check_exception()}; +} + +jmethodID _m_Intent_ShortcutIconResource__writeToParcel = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent_ShortcutIconResource__writeToParcel(jobject self_, + jobject parcel, + int32_t i) { + load_env(); + load_class_global_ref(&_c_Intent_ShortcutIconResource, + "android/content/Intent$ShortcutIconResource"); + if (_c_Intent_ShortcutIconResource == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent_ShortcutIconResource, + &_m_Intent_ShortcutIconResource__writeToParcel, "writeToParcel", + "(Landroid/os/Parcel;I)V"); + if (_m_Intent_ShortcutIconResource__writeToParcel == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + (*jniEnv)->CallVoidMethod( + jniEnv, self_, _m_Intent_ShortcutIconResource__writeToParcel, parcel, i); + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; +} + +jmethodID _m_Intent_ShortcutIconResource__toString1 = NULL; +FFI_PLUGIN_EXPORT +JniResult Intent_ShortcutIconResource__toString1(jobject self_) { + load_env(); + load_class_global_ref(&_c_Intent_ShortcutIconResource, + "android/content/Intent$ShortcutIconResource"); + if (_c_Intent_ShortcutIconResource == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent_ShortcutIconResource, + &_m_Intent_ShortcutIconResource__toString1, "toString", + "()Ljava/lang/String;"); + if (_m_Intent_ShortcutIconResource__toString1 == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, _m_Intent_ShortcutIconResource__toString1); + return to_global_ref_result(_result); +} + +jfieldID _f_Intent_ShortcutIconResource__CREATOR = NULL; +FFI_PLUGIN_EXPORT +JniResult get_Intent_ShortcutIconResource__CREATOR() { + load_env(); + load_class_global_ref(&_c_Intent_ShortcutIconResource, + "android/content/Intent$ShortcutIconResource"); + if (_c_Intent_ShortcutIconResource == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_static_field(_c_Intent_ShortcutIconResource, + &_f_Intent_ShortcutIconResource__CREATOR, "CREATOR", + "Landroid/os/Parcelable$Creator;"); + jobject _result = + (*jniEnv)->GetStaticObjectField(jniEnv, _c_Intent_ShortcutIconResource, + _f_Intent_ShortcutIconResource__CREATOR); + return to_global_ref_result(_result); +} + +jfieldID _f_Intent_ShortcutIconResource__packageName = NULL; +FFI_PLUGIN_EXPORT +JniResult get_Intent_ShortcutIconResource__packageName(jobject self_) { + load_env(); + load_class_global_ref(&_c_Intent_ShortcutIconResource, + "android/content/Intent$ShortcutIconResource"); + if (_c_Intent_ShortcutIconResource == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_field(_c_Intent_ShortcutIconResource, + &_f_Intent_ShortcutIconResource__packageName, "packageName", + "Ljava/lang/String;"); + jobject _result = (*jniEnv)->GetObjectField( + jniEnv, self_, _f_Intent_ShortcutIconResource__packageName); + return to_global_ref_result(_result); +} + +FFI_PLUGIN_EXPORT +JniResult set_Intent_ShortcutIconResource__packageName(jobject self_, + jobject value) { + load_env(); + load_class_global_ref(&_c_Intent_ShortcutIconResource, + "android/content/Intent$ShortcutIconResource"); + if (_c_Intent_ShortcutIconResource == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_field(_c_Intent_ShortcutIconResource, + &_f_Intent_ShortcutIconResource__packageName, "packageName", + "Ljava/lang/String;"); + (*jniEnv)->SetObjectField(jniEnv, self_, + _f_Intent_ShortcutIconResource__packageName, value); + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; +} + +jfieldID _f_Intent_ShortcutIconResource__resourceName = NULL; +FFI_PLUGIN_EXPORT +JniResult get_Intent_ShortcutIconResource__resourceName(jobject self_) { + load_env(); + load_class_global_ref(&_c_Intent_ShortcutIconResource, + "android/content/Intent$ShortcutIconResource"); + if (_c_Intent_ShortcutIconResource == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_field(_c_Intent_ShortcutIconResource, + &_f_Intent_ShortcutIconResource__resourceName, "resourceName", + "Ljava/lang/String;"); + jobject _result = (*jniEnv)->GetObjectField( + jniEnv, self_, _f_Intent_ShortcutIconResource__resourceName); + return to_global_ref_result(_result); +} + +FFI_PLUGIN_EXPORT +JniResult set_Intent_ShortcutIconResource__resourceName(jobject self_, + jobject value) { + load_env(); + load_class_global_ref(&_c_Intent_ShortcutIconResource, + "android/content/Intent$ShortcutIconResource"); + if (_c_Intent_ShortcutIconResource == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_field(_c_Intent_ShortcutIconResource, + &_f_Intent_ShortcutIconResource__resourceName, "resourceName", + "Ljava/lang/String;"); + (*jniEnv)->SetObjectField( + jniEnv, self_, _f_Intent_ShortcutIconResource__resourceName, value); + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } // android.content.Intent jclass _c_Intent = NULL; -jmethodID _m_Intent__ctor = NULL; +jmethodID _m_Intent__new0 = NULL; FFI_PLUGIN_EXPORT -JniResult Intent__ctor() { +JniResult Intent__new0() { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_Intent, &_m_Intent__ctor, "", "()V"); - if (_m_Intent__ctor == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = (*jniEnv)->NewObject(jniEnv, _c_Intent, _m_Intent__ctor); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__new0, "", "()V"); + if (_m_Intent__new0 == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->NewObject(jniEnv, _c_Intent, _m_Intent__new0); + return to_global_ref_result(_result); } -jmethodID _m_Intent__ctor1 = NULL; +jmethodID _m_Intent__new1 = NULL; FFI_PLUGIN_EXPORT -JniResult Intent__ctor1(jobject intent) { +JniResult Intent__new1(jobject intent) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_Intent, &_m_Intent__ctor1, "", + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__new1, "", "(Landroid/content/Intent;)V"); - if (_m_Intent__ctor1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + if (_m_Intent__new1 == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = - (*jniEnv)->NewObject(jniEnv, _c_Intent, _m_Intent__ctor1, intent); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + (*jniEnv)->NewObject(jniEnv, _c_Intent, _m_Intent__new1, intent); + return to_global_ref_result(_result); } -jmethodID _m_Intent__ctor2 = NULL; +jmethodID _m_Intent__new2 = NULL; FFI_PLUGIN_EXPORT -JniResult Intent__ctor2(jobject string) { +JniResult Intent__new2(jobject string) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_Intent, &_m_Intent__ctor2, "", "(Ljava/lang/String;)V"); - if (_m_Intent__ctor2 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__new2, "", "(Ljava/lang/String;)V"); + if (_m_Intent__new2 == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = - (*jniEnv)->NewObject(jniEnv, _c_Intent, _m_Intent__ctor2, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + (*jniEnv)->NewObject(jniEnv, _c_Intent, _m_Intent__new2, string); + return to_global_ref_result(_result); } -jmethodID _m_Intent__ctor3 = NULL; +jmethodID _m_Intent__new3 = NULL; FFI_PLUGIN_EXPORT -JniResult Intent__ctor3(jobject string, jobject uri) { +JniResult Intent__new3(jobject string, jobject uri) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_Intent, &_m_Intent__ctor3, "", + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__new3, "", "(Ljava/lang/String;Landroid/net/Uri;)V"); - if (_m_Intent__ctor3 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + if (_m_Intent__new3 == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = - (*jniEnv)->NewObject(jniEnv, _c_Intent, _m_Intent__ctor3, string, uri); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + (*jniEnv)->NewObject(jniEnv, _c_Intent, _m_Intent__new3, string, uri); + return to_global_ref_result(_result); } -jmethodID _m_Intent__ctor4 = NULL; +jmethodID _m_Intent__new4 = NULL; FFI_PLUGIN_EXPORT -JniResult Intent__ctor4(jobject context, jobject class) { +JniResult Intent__new4(jobject context, jobject class) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_Intent, &_m_Intent__ctor4, "", + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__new4, "", "(Landroid/content/Context;Ljava/lang/Class;)V"); - if (_m_Intent__ctor4 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + if (_m_Intent__new4 == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = - (*jniEnv)->NewObject(jniEnv, _c_Intent, _m_Intent__ctor4, context, class); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + (*jniEnv)->NewObject(jniEnv, _c_Intent, _m_Intent__new4, context, class); + return to_global_ref_result(_result); } -jmethodID _m_Intent__ctor5 = NULL; +jmethodID _m_Intent__new5 = NULL; FFI_PLUGIN_EXPORT -JniResult Intent__ctor5(jobject string, - jobject uri, - jobject context, - jobject class) { +JniResult Intent__new5(jobject string, + jobject uri, + jobject context, + jobject class) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_Intent, &_m_Intent__ctor5, "", + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_Intent, &_m_Intent__new5, "", "(Ljava/lang/String;Landroid/net/Uri;Landroid/content/" "Context;Ljava/lang/Class;)V"); - if (_m_Intent__ctor5 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = (*jniEnv)->NewObject(jniEnv, _c_Intent, _m_Intent__ctor5, + if (_m_Intent__new5 == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->NewObject(jniEnv, _c_Intent, _m_Intent__new5, string, uri, context, class); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__createChooser = NULL; FFI_PLUGIN_EXPORT JniResult Intent__createChooser(jobject intent, jobject charSequence) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_static_method(_c_Intent, &_m_Intent__createChooser, "createChooser", "(Landroid/content/Intent;Ljava/lang/" "CharSequence;)Landroid/content/Intent;"); if (_m_Intent__createChooser == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallStaticObjectMethod( jniEnv, _c_Intent, _m_Intent__createChooser, intent, charSequence); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__createChooser1 = NULL; @@ -3824,606 +4213,582 @@ JniResult Intent__createChooser1(jobject intent, jobject charSequence, jobject intentSender) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_static_method( _c_Intent, &_m_Intent__createChooser1, "createChooser", "(Landroid/content/Intent;Ljava/lang/CharSequence;Landroid/content/" "IntentSender;)Landroid/content/Intent;"); if (_m_Intent__createChooser1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallStaticObjectMethod( jniEnv, _c_Intent, _m_Intent__createChooser1, intent, charSequence, intentSender); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__clone = NULL; FFI_PLUGIN_EXPORT JniResult Intent__clone(jobject self_) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__clone, "clone", "()Ljava/lang/Object;"); if (_m_Intent__clone == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__clone); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__cloneFilter = NULL; FFI_PLUGIN_EXPORT JniResult Intent__cloneFilter(jobject self_) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__cloneFilter, "cloneFilter", "()Landroid/content/Intent;"); if (_m_Intent__cloneFilter == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__cloneFilter); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__makeMainActivity = NULL; FFI_PLUGIN_EXPORT JniResult Intent__makeMainActivity(jobject componentName) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_static_method( _c_Intent, &_m_Intent__makeMainActivity, "makeMainActivity", "(Landroid/content/ComponentName;)Landroid/content/Intent;"); if (_m_Intent__makeMainActivity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallStaticObjectMethod( jniEnv, _c_Intent, _m_Intent__makeMainActivity, componentName); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__makeMainSelectorActivity = NULL; FFI_PLUGIN_EXPORT JniResult Intent__makeMainSelectorActivity(jobject string, jobject string1) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_static_method( _c_Intent, &_m_Intent__makeMainSelectorActivity, "makeMainSelectorActivity", "(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;"); if (_m_Intent__makeMainSelectorActivity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallStaticObjectMethod( jniEnv, _c_Intent, _m_Intent__makeMainSelectorActivity, string, string1); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__makeRestartActivityTask = NULL; FFI_PLUGIN_EXPORT JniResult Intent__makeRestartActivityTask(jobject componentName) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_static_method( _c_Intent, &_m_Intent__makeRestartActivityTask, "makeRestartActivityTask", "(Landroid/content/ComponentName;)Landroid/content/Intent;"); if (_m_Intent__makeRestartActivityTask == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallStaticObjectMethod( jniEnv, _c_Intent, _m_Intent__makeRestartActivityTask, componentName); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__getIntent = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getIntent(jobject string) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_static_method(_c_Intent, &_m_Intent__getIntent, "getIntent", "(Ljava/lang/String;)Landroid/content/Intent;"); if (_m_Intent__getIntent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallStaticObjectMethod( jniEnv, _c_Intent, _m_Intent__getIntent, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__parseUri = NULL; FFI_PLUGIN_EXPORT JniResult Intent__parseUri(jobject string, int32_t i) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_static_method(_c_Intent, &_m_Intent__parseUri, "parseUri", "(Ljava/lang/String;I)Landroid/content/Intent;"); if (_m_Intent__parseUri == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallStaticObjectMethod( jniEnv, _c_Intent, _m_Intent__parseUri, string, i); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__getIntentOld = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getIntentOld(jobject string) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_static_method(_c_Intent, &_m_Intent__getIntentOld, "getIntentOld", "(Ljava/lang/String;)Landroid/content/Intent;"); if (_m_Intent__getIntentOld == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallStaticObjectMethod( jniEnv, _c_Intent, _m_Intent__getIntentOld, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__getAction = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getAction(jobject self_) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getAction, "getAction", "()Ljava/lang/String;"); if (_m_Intent__getAction == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__getAction); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__getData = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getData(jobject self_) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getData, "getData", "()Landroid/net/Uri;"); if (_m_Intent__getData == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__getData); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__getDataString = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getDataString(jobject self_) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getDataString, "getDataString", "()Ljava/lang/String;"); if (_m_Intent__getDataString == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__getDataString); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__getScheme = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getScheme(jobject self_) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getScheme, "getScheme", "()Ljava/lang/String;"); if (_m_Intent__getScheme == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__getScheme); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__getType = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getType(jobject self_) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getType, "getType", "()Ljava/lang/String;"); if (_m_Intent__getType == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__getType); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__resolveType = NULL; FFI_PLUGIN_EXPORT JniResult Intent__resolveType(jobject self_, jobject context) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__resolveType, "resolveType", "(Landroid/content/Context;)Ljava/lang/String;"); if (_m_Intent__resolveType == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__resolveType, context); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__resolveType1 = NULL; FFI_PLUGIN_EXPORT JniResult Intent__resolveType1(jobject self_, jobject contentResolver) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__resolveType1, "resolveType", "(Landroid/content/ContentResolver;)Ljava/lang/String;"); if (_m_Intent__resolveType1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__resolveType1, contentResolver); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__resolveTypeIfNeeded = NULL; FFI_PLUGIN_EXPORT JniResult Intent__resolveTypeIfNeeded(jobject self_, jobject contentResolver) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__resolveTypeIfNeeded, "resolveTypeIfNeeded", "(Landroid/content/ContentResolver;)Ljava/lang/String;"); if (_m_Intent__resolveTypeIfNeeded == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__resolveTypeIfNeeded, contentResolver); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__getIdentifier = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getIdentifier(jobject self_) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getIdentifier, "getIdentifier", "()Ljava/lang/String;"); if (_m_Intent__getIdentifier == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__getIdentifier); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__hasCategory = NULL; FFI_PLUGIN_EXPORT JniResult Intent__hasCategory(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__hasCategory, "hasCategory", "(Ljava/lang/String;)Z"); if (_m_Intent__hasCategory == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Intent__hasCategory, string); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Intent__getCategories = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getCategories(jobject self_) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getCategories, "getCategories", "()Ljava/util/Set;"); if (_m_Intent__getCategories == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__getCategories); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__getSelector = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getSelector(jobject self_) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getSelector, "getSelector", "()Landroid/content/Intent;"); if (_m_Intent__getSelector == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__getSelector); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__getClipData = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getClipData(jobject self_) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getClipData, "getClipData", "()Landroid/content/ClipData;"); if (_m_Intent__getClipData == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__getClipData); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__setExtrasClassLoader = NULL; FFI_PLUGIN_EXPORT JniResult Intent__setExtrasClassLoader(jobject self_, jobject classLoader) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__setExtrasClassLoader, "setExtrasClassLoader", "(Ljava/lang/ClassLoader;)V"); if (_m_Intent__setExtrasClassLoader == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Intent__setExtrasClassLoader, classLoader); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Intent__hasExtra = NULL; FFI_PLUGIN_EXPORT JniResult Intent__hasExtra(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__hasExtra, "hasExtra", "(Ljava/lang/String;)Z"); if (_m_Intent__hasExtra == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Intent__hasExtra, string); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Intent__hasFileDescriptors = NULL; FFI_PLUGIN_EXPORT JniResult Intent__hasFileDescriptors(jobject self_) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__hasFileDescriptors, "hasFileDescriptors", "()Z"); if (_m_Intent__hasFileDescriptors == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Intent__hasFileDescriptors); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Intent__getBooleanExtra = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getBooleanExtra(jobject self_, jobject string, uint8_t z) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getBooleanExtra, "getBooleanExtra", "(Ljava/lang/String;Z)Z"); if (_m_Intent__getBooleanExtra == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Intent__getBooleanExtra, string, z); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Intent__getByteExtra = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getByteExtra(jobject self_, jobject string, int8_t b) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getByteExtra, "getByteExtra", "(Ljava/lang/String;B)B"); if (_m_Intent__getByteExtra == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; int8_t _result = (*jniEnv)->CallByteMethod( jniEnv, self_, _m_Intent__getByteExtra, string, b); - return (JniResult){.result = {.b = _result}, .exception = check_exception()}; + return (JniResult){.value = {.b = _result}, .exception = check_exception()}; } jmethodID _m_Intent__getShortExtra = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getShortExtra(jobject self_, jobject string, int16_t s) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getShortExtra, "getShortExtra", "(Ljava/lang/String;S)S"); if (_m_Intent__getShortExtra == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; int16_t _result = (*jniEnv)->CallShortMethod( jniEnv, self_, _m_Intent__getShortExtra, string, s); - return (JniResult){.result = {.s = _result}, .exception = check_exception()}; + return (JniResult){.value = {.s = _result}, .exception = check_exception()}; } jmethodID _m_Intent__getCharExtra = NULL; FFI_PLUGIN_EXPORT -JniResult Intent__getCharExtra(jobject self_, jobject string, char c) { +JniResult Intent__getCharExtra(jobject self_, jobject string, uint16_t c) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getCharExtra, "getCharExtra", "(Ljava/lang/String;C)C"); if (_m_Intent__getCharExtra == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - char _result = (*jniEnv)->CallCharMethod(jniEnv, self_, - _m_Intent__getCharExtra, string, c); - return (JniResult){.result = {.c = _result}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + uint16_t _result = (*jniEnv)->CallCharMethod( + jniEnv, self_, _m_Intent__getCharExtra, string, c); + return (JniResult){.value = {.c = _result}, .exception = check_exception()}; } jmethodID _m_Intent__getIntExtra = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getIntExtra(jobject self_, jobject string, int32_t i) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getIntExtra, "getIntExtra", "(Ljava/lang/String;I)I"); if (_m_Intent__getIntExtra == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; int32_t _result = (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Intent__getIntExtra, string, i); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; + return (JniResult){.value = {.i = _result}, .exception = check_exception()}; } jmethodID _m_Intent__getLongExtra = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getLongExtra(jobject self_, jobject string, int64_t j) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getLongExtra, "getLongExtra", "(Ljava/lang/String;J)J"); if (_m_Intent__getLongExtra == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; int64_t _result = (*jniEnv)->CallLongMethod( jniEnv, self_, _m_Intent__getLongExtra, string, j); - return (JniResult){.result = {.j = _result}, .exception = check_exception()}; + return (JniResult){.value = {.j = _result}, .exception = check_exception()}; } jmethodID _m_Intent__getFloatExtra = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getFloatExtra(jobject self_, jobject string, float f) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getFloatExtra, "getFloatExtra", "(Ljava/lang/String;F)F"); if (_m_Intent__getFloatExtra == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; float _result = (*jniEnv)->CallFloatMethod( jniEnv, self_, _m_Intent__getFloatExtra, string, f); - return (JniResult){.result = {.f = _result}, .exception = check_exception()}; + return (JniResult){.value = {.f = _result}, .exception = check_exception()}; } jmethodID _m_Intent__getDoubleExtra = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getDoubleExtra(jobject self_, jobject string, double d) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getDoubleExtra, "getDoubleExtra", "(Ljava/lang/String;D)D"); if (_m_Intent__getDoubleExtra == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; double _result = (*jniEnv)->CallDoubleMethod( jniEnv, self_, _m_Intent__getDoubleExtra, string, d); - return (JniResult){.result = {.d = _result}, .exception = check_exception()}; + return (JniResult){.value = {.d = _result}, .exception = check_exception()}; } jmethodID _m_Intent__getStringExtra = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getStringExtra(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getStringExtra, "getStringExtra", "(Ljava/lang/String;)Ljava/lang/String;"); if (_m_Intent__getStringExtra == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__getStringExtra, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__getCharSequenceExtra = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getCharSequenceExtra(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getCharSequenceExtra, "getCharSequenceExtra", "(Ljava/lang/String;)Ljava/lang/CharSequence;"); if (_m_Intent__getCharSequenceExtra == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__getCharSequenceExtra, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__getParcelableExtra = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getParcelableExtra(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getParcelableExtra, "getParcelableExtra", - "(Ljava/lang/String;)Ljava/lang/Object;"); + "(Ljava/lang/String;)Landroid/os/Parcelable;"); if (_m_Intent__getParcelableExtra == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__getParcelableExtra, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__getParcelableExtra1 = NULL; @@ -4432,35 +4797,33 @@ JniResult Intent__getParcelableExtra1(jobject self_, jobject string, jobject class) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getParcelableExtra1, "getParcelableExtra", "(Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object;"); if (_m_Intent__getParcelableExtra1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__getParcelableExtra1, string, class); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__getParcelableArrayExtra = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getParcelableArrayExtra(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getParcelableArrayExtra, "getParcelableArrayExtra", "(Ljava/lang/String;)[Landroid/os/Parcelable;"); if (_m_Intent__getParcelableArrayExtra == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__getParcelableArrayExtra, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__getParcelableArrayExtra1 = NULL; @@ -4469,36 +4832,34 @@ JniResult Intent__getParcelableArrayExtra1(jobject self_, jobject string, jobject class) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getParcelableArrayExtra1, "getParcelableArrayExtra", "(Ljava/lang/String;Ljava/lang/Class;)[Ljava/lang/Object;"); if (_m_Intent__getParcelableArrayExtra1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__getParcelableArrayExtra1, string, class); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__getParcelableArrayListExtra = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getParcelableArrayListExtra(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getParcelableArrayListExtra, "getParcelableArrayListExtra", "(Ljava/lang/String;)Ljava/util/ArrayList;"); if (_m_Intent__getParcelableArrayListExtra == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__getParcelableArrayListExtra, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__getParcelableArrayListExtra1 = NULL; @@ -4507,36 +4868,34 @@ JniResult Intent__getParcelableArrayListExtra1(jobject self_, jobject string, jobject class) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getParcelableArrayListExtra1, "getParcelableArrayListExtra", "(Ljava/lang/String;Ljava/lang/Class;)Ljava/util/ArrayList;"); if (_m_Intent__getParcelableArrayListExtra1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__getParcelableArrayListExtra1, string, class); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__getSerializableExtra = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getSerializableExtra(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getSerializableExtra, "getSerializableExtra", "(Ljava/lang/String;)Ljava/io/Serializable;"); if (_m_Intent__getSerializableExtra == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__getSerializableExtra, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__getSerializableExtra1 = NULL; @@ -4545,361 +4904,341 @@ JniResult Intent__getSerializableExtra1(jobject self_, jobject string, jobject class) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getSerializableExtra1, "getSerializableExtra", - "(Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object;"); + "(Ljava/lang/String;Ljava/lang/Class;)Ljava/io/Serializable;"); if (_m_Intent__getSerializableExtra1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__getSerializableExtra1, string, class); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__getIntegerArrayListExtra = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getIntegerArrayListExtra(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getIntegerArrayListExtra, "getIntegerArrayListExtra", "(Ljava/lang/String;)Ljava/util/ArrayList;"); if (_m_Intent__getIntegerArrayListExtra == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__getIntegerArrayListExtra, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__getStringArrayListExtra = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getStringArrayListExtra(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getStringArrayListExtra, "getStringArrayListExtra", "(Ljava/lang/String;)Ljava/util/ArrayList;"); if (_m_Intent__getStringArrayListExtra == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__getStringArrayListExtra, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__getCharSequenceArrayListExtra = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getCharSequenceArrayListExtra(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getCharSequenceArrayListExtra, "getCharSequenceArrayListExtra", "(Ljava/lang/String;)Ljava/util/ArrayList;"); if (_m_Intent__getCharSequenceArrayListExtra == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__getCharSequenceArrayListExtra, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__getBooleanArrayExtra = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getBooleanArrayExtra(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getBooleanArrayExtra, "getBooleanArrayExtra", "(Ljava/lang/String;)[Z"); if (_m_Intent__getBooleanArrayExtra == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__getBooleanArrayExtra, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__getByteArrayExtra = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getByteArrayExtra(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getByteArrayExtra, "getByteArrayExtra", "(Ljava/lang/String;)[B"); if (_m_Intent__getByteArrayExtra == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__getByteArrayExtra, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__getShortArrayExtra = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getShortArrayExtra(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getShortArrayExtra, "getShortArrayExtra", "(Ljava/lang/String;)[S"); if (_m_Intent__getShortArrayExtra == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__getShortArrayExtra, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__getCharArrayExtra = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getCharArrayExtra(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getCharArrayExtra, "getCharArrayExtra", "(Ljava/lang/String;)[C"); if (_m_Intent__getCharArrayExtra == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__getCharArrayExtra, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__getIntArrayExtra = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getIntArrayExtra(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getIntArrayExtra, "getIntArrayExtra", "(Ljava/lang/String;)[I"); if (_m_Intent__getIntArrayExtra == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__getIntArrayExtra, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__getLongArrayExtra = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getLongArrayExtra(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getLongArrayExtra, "getLongArrayExtra", "(Ljava/lang/String;)[J"); if (_m_Intent__getLongArrayExtra == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__getLongArrayExtra, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__getFloatArrayExtra = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getFloatArrayExtra(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getFloatArrayExtra, "getFloatArrayExtra", "(Ljava/lang/String;)[F"); if (_m_Intent__getFloatArrayExtra == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__getFloatArrayExtra, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__getDoubleArrayExtra = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getDoubleArrayExtra(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getDoubleArrayExtra, "getDoubleArrayExtra", "(Ljava/lang/String;)[D"); if (_m_Intent__getDoubleArrayExtra == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__getDoubleArrayExtra, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__getStringArrayExtra = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getStringArrayExtra(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getStringArrayExtra, "getStringArrayExtra", "(Ljava/lang/String;)[Ljava/lang/String;"); if (_m_Intent__getStringArrayExtra == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__getStringArrayExtra, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__getCharSequenceArrayExtra = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getCharSequenceArrayExtra(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getCharSequenceArrayExtra, "getCharSequenceArrayExtra", "(Ljava/lang/String;)[Ljava/lang/CharSequence;"); if (_m_Intent__getCharSequenceArrayExtra == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__getCharSequenceArrayExtra, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__getBundleExtra = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getBundleExtra(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getBundleExtra, "getBundleExtra", "(Ljava/lang/String;)Landroid/os/Bundle;"); if (_m_Intent__getBundleExtra == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__getBundleExtra, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__getExtras = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getExtras(jobject self_) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getExtras, "getExtras", "()Landroid/os/Bundle;"); if (_m_Intent__getExtras == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__getExtras); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__getFlags = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getFlags(jobject self_) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getFlags, "getFlags", "()I"); if (_m_Intent__getFlags == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; int32_t _result = (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Intent__getFlags); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; + return (JniResult){.value = {.i = _result}, .exception = check_exception()}; } jmethodID _m_Intent__getPackage = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getPackage(jobject self_) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getPackage, "getPackage", "()Ljava/lang/String;"); if (_m_Intent__getPackage == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__getPackage); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__getComponent = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getComponent(jobject self_) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getComponent, "getComponent", "()Landroid/content/ComponentName;"); if (_m_Intent__getComponent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__getComponent); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__getSourceBounds = NULL; FFI_PLUGIN_EXPORT JniResult Intent__getSourceBounds(jobject self_) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__getSourceBounds, "getSourceBounds", "()Landroid/graphics/Rect;"); if (_m_Intent__getSourceBounds == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__getSourceBounds); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__resolveActivity = NULL; FFI_PLUGIN_EXPORT JniResult Intent__resolveActivity(jobject self_, jobject packageManager) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_Intent, &_m_Intent__resolveActivity, "resolveActivity", "(Landroid/content/pm/PackageManager;)Landroid/content/ComponentName;"); if (_m_Intent__resolveActivity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__resolveActivity, packageManager); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__resolveActivityInfo = NULL; @@ -4908,120 +5247,113 @@ JniResult Intent__resolveActivityInfo(jobject self_, jobject packageManager, int32_t i) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__resolveActivityInfo, "resolveActivityInfo", "(Landroid/content/pm/PackageManager;I)Landroid/content/pm/" "ActivityInfo;"); if (_m_Intent__resolveActivityInfo == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__resolveActivityInfo, packageManager, i); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__setAction = NULL; FFI_PLUGIN_EXPORT JniResult Intent__setAction(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__setAction, "setAction", "(Ljava/lang/String;)Landroid/content/Intent;"); if (_m_Intent__setAction == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__setAction, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__setData = NULL; FFI_PLUGIN_EXPORT JniResult Intent__setData(jobject self_, jobject uri) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__setData, "setData", "(Landroid/net/Uri;)Landroid/content/Intent;"); if (_m_Intent__setData == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__setData, uri); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__setDataAndNormalize = NULL; FFI_PLUGIN_EXPORT JniResult Intent__setDataAndNormalize(jobject self_, jobject uri) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__setDataAndNormalize, "setDataAndNormalize", "(Landroid/net/Uri;)Landroid/content/Intent;"); if (_m_Intent__setDataAndNormalize == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__setDataAndNormalize, uri); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__setType = NULL; FFI_PLUGIN_EXPORT JniResult Intent__setType(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__setType, "setType", "(Ljava/lang/String;)Landroid/content/Intent;"); if (_m_Intent__setType == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__setType, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__setTypeAndNormalize = NULL; FFI_PLUGIN_EXPORT JniResult Intent__setTypeAndNormalize(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__setTypeAndNormalize, "setTypeAndNormalize", "(Ljava/lang/String;)Landroid/content/Intent;"); if (_m_Intent__setTypeAndNormalize == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__setTypeAndNormalize, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__setDataAndType = NULL; FFI_PLUGIN_EXPORT JniResult Intent__setDataAndType(jobject self_, jobject uri, jobject string) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__setDataAndType, "setDataAndType", "(Landroid/net/Uri;Ljava/lang/String;)Landroid/content/Intent;"); if (_m_Intent__setDataAndType == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__setDataAndType, uri, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__setDataAndTypeAndNormalize = NULL; @@ -5030,250 +5362,238 @@ JniResult Intent__setDataAndTypeAndNormalize(jobject self_, jobject uri, jobject string) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__setDataAndTypeAndNormalize, "setDataAndTypeAndNormalize", "(Landroid/net/Uri;Ljava/lang/String;)Landroid/content/Intent;"); if (_m_Intent__setDataAndTypeAndNormalize == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__setDataAndTypeAndNormalize, uri, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__setIdentifier = NULL; FFI_PLUGIN_EXPORT JniResult Intent__setIdentifier(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__setIdentifier, "setIdentifier", "(Ljava/lang/String;)Landroid/content/Intent;"); if (_m_Intent__setIdentifier == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__setIdentifier, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__addCategory = NULL; FFI_PLUGIN_EXPORT JniResult Intent__addCategory(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__addCategory, "addCategory", "(Ljava/lang/String;)Landroid/content/Intent;"); if (_m_Intent__addCategory == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__addCategory, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__removeCategory = NULL; FFI_PLUGIN_EXPORT JniResult Intent__removeCategory(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__removeCategory, "removeCategory", "(Ljava/lang/String;)V"); if (_m_Intent__removeCategory == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Intent__removeCategory, string); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Intent__setSelector = NULL; FFI_PLUGIN_EXPORT JniResult Intent__setSelector(jobject self_, jobject intent) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__setSelector, "setSelector", "(Landroid/content/Intent;)V"); if (_m_Intent__setSelector == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Intent__setSelector, intent); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Intent__setClipData = NULL; FFI_PLUGIN_EXPORT JniResult Intent__setClipData(jobject self_, jobject clipData) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__setClipData, "setClipData", "(Landroid/content/ClipData;)V"); if (_m_Intent__setClipData == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Intent__setClipData, clipData); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Intent__putExtra = NULL; FFI_PLUGIN_EXPORT JniResult Intent__putExtra(jobject self_, jobject string, uint8_t z) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__putExtra, "putExtra", "(Ljava/lang/String;Z)Landroid/content/Intent;"); if (_m_Intent__putExtra == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__putExtra, string, z); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__putExtra1 = NULL; FFI_PLUGIN_EXPORT JniResult Intent__putExtra1(jobject self_, jobject string, int8_t b) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__putExtra1, "putExtra", "(Ljava/lang/String;B)Landroid/content/Intent;"); if (_m_Intent__putExtra1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__putExtra1, string, b); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__putExtra2 = NULL; FFI_PLUGIN_EXPORT -JniResult Intent__putExtra2(jobject self_, jobject string, char c) { +JniResult Intent__putExtra2(jobject self_, jobject string, uint16_t c) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__putExtra2, "putExtra", "(Ljava/lang/String;C)Landroid/content/Intent;"); if (_m_Intent__putExtra2 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__putExtra2, string, c); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__putExtra3 = NULL; FFI_PLUGIN_EXPORT JniResult Intent__putExtra3(jobject self_, jobject string, int16_t s) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__putExtra3, "putExtra", "(Ljava/lang/String;S)Landroid/content/Intent;"); if (_m_Intent__putExtra3 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__putExtra3, string, s); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__putExtra4 = NULL; FFI_PLUGIN_EXPORT JniResult Intent__putExtra4(jobject self_, jobject string, int32_t i) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__putExtra4, "putExtra", "(Ljava/lang/String;I)Landroid/content/Intent;"); if (_m_Intent__putExtra4 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__putExtra4, string, i); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__putExtra5 = NULL; FFI_PLUGIN_EXPORT JniResult Intent__putExtra5(jobject self_, jobject string, int64_t j) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__putExtra5, "putExtra", "(Ljava/lang/String;J)Landroid/content/Intent;"); if (_m_Intent__putExtra5 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__putExtra5, string, j); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__putExtra6 = NULL; FFI_PLUGIN_EXPORT JniResult Intent__putExtra6(jobject self_, jobject string, float f) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__putExtra6, "putExtra", "(Ljava/lang/String;F)Landroid/content/Intent;"); if (_m_Intent__putExtra6 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__putExtra6, string, f); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__putExtra7 = NULL; FFI_PLUGIN_EXPORT JniResult Intent__putExtra7(jobject self_, jobject string, double d) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__putExtra7, "putExtra", "(Ljava/lang/String;D)Landroid/content/Intent;"); if (_m_Intent__putExtra7 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__putExtra7, string, d); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__putExtra8 = NULL; FFI_PLUGIN_EXPORT JniResult Intent__putExtra8(jobject self_, jobject string, jobject string1) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__putExtra8, "putExtra", "(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;"); if (_m_Intent__putExtra8 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__putExtra8, string, string1); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__putExtra9 = NULL; @@ -5282,18 +5602,17 @@ JniResult Intent__putExtra9(jobject self_, jobject string, jobject charSequence) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_Intent, &_m_Intent__putExtra9, "putExtra", "(Ljava/lang/String;Ljava/lang/CharSequence;)Landroid/content/Intent;"); if (_m_Intent__putExtra9 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__putExtra9, string, charSequence); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__putExtra10 = NULL; @@ -5302,18 +5621,17 @@ JniResult Intent__putExtra10(jobject self_, jobject string, jobject parcelable) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_Intent, &_m_Intent__putExtra10, "putExtra", "(Ljava/lang/String;Landroid/os/Parcelable;)Landroid/content/Intent;"); if (_m_Intent__putExtra10 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__putExtra10, string, parcelable); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__putExtra11 = NULL; @@ -5322,18 +5640,17 @@ JniResult Intent__putExtra11(jobject self_, jobject string, jobject parcelables) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_Intent, &_m_Intent__putExtra11, "putExtra", "(Ljava/lang/String;[Landroid/os/Parcelable;)Landroid/content/Intent;"); if (_m_Intent__putExtra11 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__putExtra11, string, parcelables); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__putParcelableArrayListExtra = NULL; @@ -5342,19 +5659,18 @@ JniResult Intent__putParcelableArrayListExtra(jobject self_, jobject string, jobject arrayList) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_Intent, &_m_Intent__putParcelableArrayListExtra, "putParcelableArrayListExtra", "(Ljava/lang/String;Ljava/util/ArrayList;)Landroid/content/Intent;"); if (_m_Intent__putParcelableArrayListExtra == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__putParcelableArrayListExtra, string, arrayList); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__putIntegerArrayListExtra = NULL; @@ -5363,19 +5679,18 @@ JniResult Intent__putIntegerArrayListExtra(jobject self_, jobject string, jobject arrayList) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_Intent, &_m_Intent__putIntegerArrayListExtra, "putIntegerArrayListExtra", "(Ljava/lang/String;Ljava/util/ArrayList;)Landroid/content/Intent;"); if (_m_Intent__putIntegerArrayListExtra == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__putIntegerArrayListExtra, string, arrayList); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__putStringArrayListExtra = NULL; @@ -5384,18 +5699,17 @@ JniResult Intent__putStringArrayListExtra(jobject self_, jobject string, jobject arrayList) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_Intent, &_m_Intent__putStringArrayListExtra, "putStringArrayListExtra", "(Ljava/lang/String;Ljava/util/ArrayList;)Landroid/content/Intent;"); if (_m_Intent__putStringArrayListExtra == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__putStringArrayListExtra, string, arrayList); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__putCharSequenceArrayListExtra = NULL; @@ -5404,20 +5718,19 @@ JniResult Intent__putCharSequenceArrayListExtra(jobject self_, jobject string, jobject arrayList) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_Intent, &_m_Intent__putCharSequenceArrayListExtra, "putCharSequenceArrayListExtra", "(Ljava/lang/String;Ljava/util/ArrayList;)Landroid/content/Intent;"); if (_m_Intent__putCharSequenceArrayListExtra == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__putCharSequenceArrayListExtra, string, arrayList); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__putExtra12 = NULL; @@ -5426,172 +5739,162 @@ JniResult Intent__putExtra12(jobject self_, jobject string, jobject serializable) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_Intent, &_m_Intent__putExtra12, "putExtra", "(Ljava/lang/String;Ljava/io/Serializable;)Landroid/content/Intent;"); if (_m_Intent__putExtra12 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__putExtra12, string, serializable); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__putExtra13 = NULL; FFI_PLUGIN_EXPORT JniResult Intent__putExtra13(jobject self_, jobject string, jobject zs) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__putExtra13, "putExtra", "(Ljava/lang/String;[Z)Landroid/content/Intent;"); if (_m_Intent__putExtra13 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__putExtra13, string, zs); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__putExtra14 = NULL; FFI_PLUGIN_EXPORT JniResult Intent__putExtra14(jobject self_, jobject string, jobject bs) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__putExtra14, "putExtra", "(Ljava/lang/String;[B)Landroid/content/Intent;"); if (_m_Intent__putExtra14 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__putExtra14, string, bs); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__putExtra15 = NULL; FFI_PLUGIN_EXPORT JniResult Intent__putExtra15(jobject self_, jobject string, jobject ss) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__putExtra15, "putExtra", "(Ljava/lang/String;[S)Landroid/content/Intent;"); if (_m_Intent__putExtra15 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__putExtra15, string, ss); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__putExtra16 = NULL; FFI_PLUGIN_EXPORT JniResult Intent__putExtra16(jobject self_, jobject string, jobject cs) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__putExtra16, "putExtra", "(Ljava/lang/String;[C)Landroid/content/Intent;"); if (_m_Intent__putExtra16 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__putExtra16, string, cs); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__putExtra17 = NULL; FFI_PLUGIN_EXPORT JniResult Intent__putExtra17(jobject self_, jobject string, jobject is) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__putExtra17, "putExtra", "(Ljava/lang/String;[I)Landroid/content/Intent;"); if (_m_Intent__putExtra17 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__putExtra17, string, is); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__putExtra18 = NULL; FFI_PLUGIN_EXPORT JniResult Intent__putExtra18(jobject self_, jobject string, jobject js) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__putExtra18, "putExtra", "(Ljava/lang/String;[J)Landroid/content/Intent;"); if (_m_Intent__putExtra18 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__putExtra18, string, js); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__putExtra19 = NULL; FFI_PLUGIN_EXPORT JniResult Intent__putExtra19(jobject self_, jobject string, jobject fs) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__putExtra19, "putExtra", "(Ljava/lang/String;[F)Landroid/content/Intent;"); if (_m_Intent__putExtra19 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__putExtra19, string, fs); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__putExtra20 = NULL; FFI_PLUGIN_EXPORT JniResult Intent__putExtra20(jobject self_, jobject string, jobject ds) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__putExtra20, "putExtra", "(Ljava/lang/String;[D)Landroid/content/Intent;"); if (_m_Intent__putExtra20 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__putExtra20, string, ds); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__putExtra21 = NULL; FFI_PLUGIN_EXPORT JniResult Intent__putExtra21(jobject self_, jobject string, jobject strings) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_Intent, &_m_Intent__putExtra21, "putExtra", "(Ljava/lang/String;[Ljava/lang/String;)Landroid/content/Intent;"); if (_m_Intent__putExtra21 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__putExtra21, string, strings); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__putExtra22 = NULL; @@ -5600,219 +5903,208 @@ JniResult Intent__putExtra22(jobject self_, jobject string, jobject charSequences) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_Intent, &_m_Intent__putExtra22, "putExtra", "(Ljava/lang/String;[Ljava/lang/CharSequence;)Landroid/content/Intent;"); if (_m_Intent__putExtra22 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__putExtra22, string, charSequences); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__putExtra23 = NULL; FFI_PLUGIN_EXPORT JniResult Intent__putExtra23(jobject self_, jobject string, jobject bundle) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_Intent, &_m_Intent__putExtra23, "putExtra", "(Ljava/lang/String;Landroid/os/Bundle;)Landroid/content/Intent;"); if (_m_Intent__putExtra23 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__putExtra23, string, bundle); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__putExtras = NULL; FFI_PLUGIN_EXPORT JniResult Intent__putExtras(jobject self_, jobject intent) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__putExtras, "putExtras", "(Landroid/content/Intent;)Landroid/content/Intent;"); if (_m_Intent__putExtras == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__putExtras, intent); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__putExtras1 = NULL; FFI_PLUGIN_EXPORT JniResult Intent__putExtras1(jobject self_, jobject bundle) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__putExtras1, "putExtras", "(Landroid/os/Bundle;)Landroid/content/Intent;"); if (_m_Intent__putExtras1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__putExtras1, bundle); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__replaceExtras = NULL; FFI_PLUGIN_EXPORT JniResult Intent__replaceExtras(jobject self_, jobject intent) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__replaceExtras, "replaceExtras", "(Landroid/content/Intent;)Landroid/content/Intent;"); if (_m_Intent__replaceExtras == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__replaceExtras, intent); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__replaceExtras1 = NULL; FFI_PLUGIN_EXPORT JniResult Intent__replaceExtras1(jobject self_, jobject bundle) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__replaceExtras1, "replaceExtras", "(Landroid/os/Bundle;)Landroid/content/Intent;"); if (_m_Intent__replaceExtras1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__replaceExtras1, bundle); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__removeExtra = NULL; FFI_PLUGIN_EXPORT JniResult Intent__removeExtra(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__removeExtra, "removeExtra", "(Ljava/lang/String;)V"); if (_m_Intent__removeExtra == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Intent__removeExtra, string); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Intent__setFlags = NULL; FFI_PLUGIN_EXPORT JniResult Intent__setFlags(jobject self_, int32_t i) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__setFlags, "setFlags", "(I)Landroid/content/Intent;"); if (_m_Intent__setFlags == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__setFlags, i); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__addFlags = NULL; FFI_PLUGIN_EXPORT JniResult Intent__addFlags(jobject self_, int32_t i) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__addFlags, "addFlags", "(I)Landroid/content/Intent;"); if (_m_Intent__addFlags == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__addFlags, i); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__removeFlags = NULL; FFI_PLUGIN_EXPORT JniResult Intent__removeFlags(jobject self_, int32_t i) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__removeFlags, "removeFlags", "(I)V"); if (_m_Intent__removeFlags == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Intent__removeFlags, i); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Intent__setPackage = NULL; FFI_PLUGIN_EXPORT JniResult Intent__setPackage(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__setPackage, "setPackage", "(Ljava/lang/String;)Landroid/content/Intent;"); if (_m_Intent__setPackage == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__setPackage, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__setComponent = NULL; FFI_PLUGIN_EXPORT JniResult Intent__setComponent(jobject self_, jobject componentName) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__setComponent, "setComponent", "(Landroid/content/ComponentName;)Landroid/content/Intent;"); if (_m_Intent__setComponent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__setComponent, componentName); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__setClassName = NULL; FFI_PLUGIN_EXPORT JniResult Intent__setClassName(jobject self_, jobject context, jobject string) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_Intent, &_m_Intent__setClassName, "setClassName", "(Landroid/content/Context;Ljava/lang/String;)Landroid/content/Intent;"); if (_m_Intent__setClassName == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__setClassName, context, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__setClassName1 = NULL; @@ -5821,192 +6113,187 @@ JniResult Intent__setClassName1(jobject self_, jobject string, jobject string1) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__setClassName1, "setClassName", "(Ljava/lang/String;Ljava/lang/String;)Landroid/content/Intent;"); if (_m_Intent__setClassName1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__setClassName1, string, string1); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__setClass = NULL; FFI_PLUGIN_EXPORT JniResult Intent__setClass(jobject self_, jobject context, jobject class) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_Intent, &_m_Intent__setClass, "setClass", "(Landroid/content/Context;Ljava/lang/Class;)Landroid/content/Intent;"); if (_m_Intent__setClass == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Intent__setClass, context, class); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__setSourceBounds = NULL; FFI_PLUGIN_EXPORT JniResult Intent__setSourceBounds(jobject self_, jobject rect) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__setSourceBounds, "setSourceBounds", "(Landroid/graphics/Rect;)V"); if (_m_Intent__setSourceBounds == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Intent__setSourceBounds, rect); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Intent__fillIn = NULL; FFI_PLUGIN_EXPORT JniResult Intent__fillIn(jobject self_, jobject intent, int32_t i) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__fillIn, "fillIn", "(Landroid/content/Intent;I)I"); if (_m_Intent__fillIn == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; int32_t _result = (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Intent__fillIn, intent, i); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; + return (JniResult){.value = {.i = _result}, .exception = check_exception()}; } jmethodID _m_Intent__filterEquals = NULL; FFI_PLUGIN_EXPORT JniResult Intent__filterEquals(jobject self_, jobject intent) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__filterEquals, "filterEquals", "(Landroid/content/Intent;)Z"); if (_m_Intent__filterEquals == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Intent__filterEquals, intent); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Intent__filterHashCode = NULL; FFI_PLUGIN_EXPORT JniResult Intent__filterHashCode(jobject self_) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__filterHashCode, "filterHashCode", "()I"); if (_m_Intent__filterHashCode == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; int32_t _result = (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Intent__filterHashCode); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; + return (JniResult){.value = {.i = _result}, .exception = check_exception()}; } jmethodID _m_Intent__toString1 = NULL; FFI_PLUGIN_EXPORT JniResult Intent__toString1(jobject self_) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__toString1, "toString", "()Ljava/lang/String;"); if (_m_Intent__toString1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__toString1); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__toURI = NULL; FFI_PLUGIN_EXPORT JniResult Intent__toURI(jobject self_) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__toURI, "toURI", "()Ljava/lang/String;"); if (_m_Intent__toURI == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__toURI); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__toUri = NULL; FFI_PLUGIN_EXPORT JniResult Intent__toUri(jobject self_, int32_t i) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__toUri, "toUri", "(I)Ljava/lang/String;"); if (_m_Intent__toUri == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Intent__toUri, i); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__describeContents = NULL; FFI_PLUGIN_EXPORT JniResult Intent__describeContents(jobject self_) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__describeContents, "describeContents", "()I"); if (_m_Intent__describeContents == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; int32_t _result = (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Intent__describeContents); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; + return (JniResult){.value = {.i = _result}, .exception = check_exception()}; } jmethodID _m_Intent__writeToParcel = NULL; FFI_PLUGIN_EXPORT JniResult Intent__writeToParcel(jobject self_, jobject parcel, int32_t i) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__writeToParcel, "writeToParcel", "(Landroid/os/Parcel;I)V"); if (_m_Intent__writeToParcel == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Intent__writeToParcel, parcel, i); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Intent__readFromParcel = NULL; FFI_PLUGIN_EXPORT JniResult Intent__readFromParcel(jobject self_, jobject parcel) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Intent, &_m_Intent__readFromParcel, "readFromParcel", "(Landroid/os/Parcel;)V"); if (_m_Intent__readFromParcel == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Intent__readFromParcel, parcel); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Intent__parseIntent = NULL; @@ -6015,103 +6302,99 @@ JniResult Intent__parseIntent(jobject resources, jobject xmlPullParser, jobject attributeSet) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_static_method( _c_Intent, &_m_Intent__parseIntent, "parseIntent", "(Landroid/content/res/Resources;Lorg/xmlpull/v1/XmlPullParser;Landroid/" "util/AttributeSet;)Landroid/content/Intent;"); if (_m_Intent__parseIntent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallStaticObjectMethod( jniEnv, _c_Intent, _m_Intent__parseIntent, resources, xmlPullParser, attributeSet); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Intent__normalizeMimeType = NULL; FFI_PLUGIN_EXPORT JniResult Intent__normalizeMimeType(jobject string) { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_static_method(_c_Intent, &_m_Intent__normalizeMimeType, "normalizeMimeType", "(Ljava/lang/String;)Ljava/lang/String;"); if (_m_Intent__normalizeMimeType == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallStaticObjectMethod( jniEnv, _c_Intent, _m_Intent__normalizeMimeType, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jfieldID _f_Intent__CREATOR = NULL; FFI_PLUGIN_EXPORT JniResult get_Intent__CREATOR() { load_env(); - load_class_gr(&_c_Intent, "android/content/Intent"); + load_class_global_ref(&_c_Intent, "android/content/Intent"); if (_c_Intent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_static_field(_c_Intent, &_f_Intent__CREATOR, "CREATOR", "Landroid/os/Parcelable$Creator;"); - jobject _result = to_global_ref( - (*jniEnv)->GetStaticObjectField(jniEnv, _c_Intent, _f_Intent__CREATOR)); - return (JniResult){.result = {.l = _result}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->GetStaticObjectField(jniEnv, _c_Intent, _f_Intent__CREATOR); + return to_global_ref_result(_result); } // android.app.Activity jclass _c_Activity = NULL; -jmethodID _m_Activity__ctor = NULL; +jmethodID _m_Activity__new0 = NULL; FFI_PLUGIN_EXPORT -JniResult Activity__ctor() { +JniResult Activity__new0() { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_Activity, &_m_Activity__ctor, "", "()V"); - if (_m_Activity__ctor == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_Activity, &_m_Activity__new0, "", "()V"); + if (_m_Activity__new0 == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = - (*jniEnv)->NewObject(jniEnv, _c_Activity, _m_Activity__ctor); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + (*jniEnv)->NewObject(jniEnv, _c_Activity, _m_Activity__new0); + return to_global_ref_result(_result); } jmethodID _m_Activity__getIntent = NULL; FFI_PLUGIN_EXPORT JniResult Activity__getIntent(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__getIntent, "getIntent", "()Landroid/content/Intent;"); if (_m_Activity__getIntent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__getIntent); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__setIntent = NULL; FFI_PLUGIN_EXPORT JniResult Activity__setIntent(jobject self_, jobject intent) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setIntent, "setIntent", "(Landroid/content/Intent;)V"); if (_m_Activity__setIntent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setIntent, intent); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__setLocusContext = NULL; @@ -6120,149 +6403,143 @@ JniResult Activity__setLocusContext(jobject self_, jobject locusId, jobject bundle) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setLocusContext, "setLocusContext", "(Landroid/content/LocusId;Landroid/os/Bundle;)V"); if (_m_Activity__setLocusContext == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setLocusContext, locusId, bundle); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__getApplication = NULL; FFI_PLUGIN_EXPORT JniResult Activity__getApplication(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__getApplication, "getApplication", "()Landroid/app/Application;"); if (_m_Activity__getApplication == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__getApplication); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__isChild = NULL; FFI_PLUGIN_EXPORT JniResult Activity__isChild(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__isChild, "isChild", "()Z"); if (_m_Activity__isChild == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Activity__isChild); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__getParent = NULL; FFI_PLUGIN_EXPORT JniResult Activity__getParent(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__getParent, "getParent", "()Landroid/app/Activity;"); if (_m_Activity__getParent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__getParent); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__getWindowManager = NULL; FFI_PLUGIN_EXPORT JniResult Activity__getWindowManager(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__getWindowManager, "getWindowManager", "()Landroid/view/WindowManager;"); if (_m_Activity__getWindowManager == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__getWindowManager); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__getWindow = NULL; FFI_PLUGIN_EXPORT JniResult Activity__getWindow(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__getWindow, "getWindow", "()Landroid/view/Window;"); if (_m_Activity__getWindow == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__getWindow); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__getLoaderManager = NULL; FFI_PLUGIN_EXPORT JniResult Activity__getLoaderManager(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__getLoaderManager, "getLoaderManager", "()Landroid/app/LoaderManager;"); if (_m_Activity__getLoaderManager == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__getLoaderManager); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__getCurrentFocus = NULL; FFI_PLUGIN_EXPORT JniResult Activity__getCurrentFocus(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__getCurrentFocus, "getCurrentFocus", "()Landroid/view/View;"); if (_m_Activity__getCurrentFocus == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__getCurrentFocus); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__attachBaseContext = NULL; FFI_PLUGIN_EXPORT JniResult Activity__attachBaseContext(jobject self_, jobject context) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__attachBaseContext, "attachBaseContext", "(Landroid/content/Context;)V"); if (_m_Activity__attachBaseContext == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__attachBaseContext, context); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__registerActivityLifecycleCallbacks = NULL; @@ -6271,18 +6548,18 @@ JniResult Activity__registerActivityLifecycleCallbacks( jobject self_, jobject activityLifecycleCallbacks) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__registerActivityLifecycleCallbacks, "registerActivityLifecycleCallbacks", "(Landroid/app/Application$ActivityLifecycleCallbacks;)V"); if (_m_Activity__registerActivityLifecycleCallbacks == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__registerActivityLifecycleCallbacks, activityLifecycleCallbacks); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__unregisterActivityLifecycleCallbacks = NULL; @@ -6291,18 +6568,18 @@ JniResult Activity__unregisterActivityLifecycleCallbacks( jobject self_, jobject activityLifecycleCallbacks) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__unregisterActivityLifecycleCallbacks, "unregisterActivityLifecycleCallbacks", "(Landroid/app/Application$ActivityLifecycleCallbacks;)V"); if (_m_Activity__unregisterActivityLifecycleCallbacks == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__unregisterActivityLifecycleCallbacks, activityLifecycleCallbacks); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__registerComponentCallbacks = NULL; @@ -6310,18 +6587,18 @@ FFI_PLUGIN_EXPORT JniResult Activity__registerComponentCallbacks(jobject self_, jobject componentCallbacks) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__registerComponentCallbacks, "registerComponentCallbacks", "(Landroid/content/ComponentCallbacks;)V"); if (_m_Activity__registerComponentCallbacks == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__registerComponentCallbacks, componentCallbacks); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__unregisterComponentCallbacks = NULL; @@ -6329,50 +6606,49 @@ FFI_PLUGIN_EXPORT JniResult Activity__unregisterComponentCallbacks(jobject self_, jobject componentCallbacks) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__unregisterComponentCallbacks, "unregisterComponentCallbacks", "(Landroid/content/ComponentCallbacks;)V"); if (_m_Activity__unregisterComponentCallbacks == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__unregisterComponentCallbacks, componentCallbacks); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onCreate = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onCreate(jobject self_, jobject bundle) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onCreate, "onCreate", "(Landroid/os/Bundle;)V"); if (_m_Activity__onCreate == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onCreate, bundle); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__getSplashScreen = NULL; FFI_PLUGIN_EXPORT JniResult Activity__getSplashScreen(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__getSplashScreen, "getSplashScreen", "()Landroid/window/SplashScreen;"); if (_m_Activity__getSplashScreen == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__getSplashScreen); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__onCreate1 = NULL; @@ -6381,32 +6657,32 @@ JniResult Activity__onCreate1(jobject self_, jobject bundle, jobject persistableBundle) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onCreate1, "onCreate", "(Landroid/os/Bundle;Landroid/os/PersistableBundle;)V"); if (_m_Activity__onCreate1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onCreate1, bundle, persistableBundle); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onRestoreInstanceState = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onRestoreInstanceState(jobject self_, jobject bundle) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onRestoreInstanceState, "onRestoreInstanceState", "(Landroid/os/Bundle;)V"); if (_m_Activity__onRestoreInstanceState == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onRestoreInstanceState, bundle); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onRestoreInstanceState1 = NULL; @@ -6415,32 +6691,32 @@ JniResult Activity__onRestoreInstanceState1(jobject self_, jobject bundle, jobject persistableBundle) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onRestoreInstanceState1, "onRestoreInstanceState", "(Landroid/os/Bundle;Landroid/os/PersistableBundle;)V"); if (_m_Activity__onRestoreInstanceState1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onRestoreInstanceState1, bundle, persistableBundle); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onPostCreate = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onPostCreate(jobject self_, jobject bundle) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onPostCreate, "onPostCreate", "(Landroid/os/Bundle;)V"); if (_m_Activity__onPostCreate == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onPostCreate, bundle); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onPostCreate1 = NULL; @@ -6449,263 +6725,262 @@ JniResult Activity__onPostCreate1(jobject self_, jobject bundle, jobject persistableBundle) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onPostCreate1, "onPostCreate", "(Landroid/os/Bundle;Landroid/os/PersistableBundle;)V"); if (_m_Activity__onPostCreate1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onPostCreate1, bundle, persistableBundle); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onStart = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onStart(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onStart, "onStart", "()V"); if (_m_Activity__onStart == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onStart); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onRestart = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onRestart(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onRestart, "onRestart", "()V"); if (_m_Activity__onRestart == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onRestart); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onStateNotSaved = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onStateNotSaved(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onStateNotSaved, "onStateNotSaved", "()V"); if (_m_Activity__onStateNotSaved == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onStateNotSaved); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onResume = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onResume(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onResume, "onResume", "()V"); if (_m_Activity__onResume == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onResume); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onPostResume = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onPostResume(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onPostResume, "onPostResume", "()V"); if (_m_Activity__onPostResume == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onPostResume); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onTopResumedActivityChanged = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onTopResumedActivityChanged(jobject self_, uint8_t z) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onTopResumedActivityChanged, "onTopResumedActivityChanged", "(Z)V"); if (_m_Activity__onTopResumedActivityChanged == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onTopResumedActivityChanged, z); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__isVoiceInteraction = NULL; FFI_PLUGIN_EXPORT JniResult Activity__isVoiceInteraction(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__isVoiceInteraction, "isVoiceInteraction", "()Z"); if (_m_Activity__isVoiceInteraction == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__isVoiceInteraction); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__isVoiceInteractionRoot = NULL; FFI_PLUGIN_EXPORT JniResult Activity__isVoiceInteractionRoot(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__isVoiceInteractionRoot, "isVoiceInteractionRoot", "()Z"); if (_m_Activity__isVoiceInteractionRoot == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__isVoiceInteractionRoot); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__getVoiceInteractor = NULL; FFI_PLUGIN_EXPORT JniResult Activity__getVoiceInteractor(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__getVoiceInteractor, "getVoiceInteractor", "()Landroid/app/VoiceInteractor;"); if (_m_Activity__getVoiceInteractor == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Activity__getVoiceInteractor); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__isLocalVoiceInteractionSupported = NULL; FFI_PLUGIN_EXPORT JniResult Activity__isLocalVoiceInteractionSupported(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__isLocalVoiceInteractionSupported, "isLocalVoiceInteractionSupported", "()Z"); if (_m_Activity__isLocalVoiceInteractionSupported == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__isLocalVoiceInteractionSupported); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__startLocalVoiceInteraction = NULL; FFI_PLUGIN_EXPORT JniResult Activity__startLocalVoiceInteraction(jobject self_, jobject bundle) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__startLocalVoiceInteraction, "startLocalVoiceInteraction", "(Landroid/os/Bundle;)V"); if (_m_Activity__startLocalVoiceInteraction == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__startLocalVoiceInteraction, bundle); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onLocalVoiceInteractionStarted = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onLocalVoiceInteractionStarted(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onLocalVoiceInteractionStarted, "onLocalVoiceInteractionStarted", "()V"); if (_m_Activity__onLocalVoiceInteractionStarted == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onLocalVoiceInteractionStarted); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onLocalVoiceInteractionStopped = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onLocalVoiceInteractionStopped(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onLocalVoiceInteractionStopped, "onLocalVoiceInteractionStopped", "()V"); if (_m_Activity__onLocalVoiceInteractionStopped == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onLocalVoiceInteractionStopped); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__stopLocalVoiceInteraction = NULL; FFI_PLUGIN_EXPORT JniResult Activity__stopLocalVoiceInteraction(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__stopLocalVoiceInteraction, "stopLocalVoiceInteraction", "()V"); if (_m_Activity__stopLocalVoiceInteraction == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__stopLocalVoiceInteraction); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onNewIntent = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onNewIntent(jobject self_, jobject intent) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onNewIntent, "onNewIntent", "(Landroid/content/Intent;)V"); if (_m_Activity__onNewIntent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onNewIntent, intent); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onSaveInstanceState = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onSaveInstanceState(jobject self_, jobject bundle) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onSaveInstanceState, "onSaveInstanceState", "(Landroid/os/Bundle;)V"); if (_m_Activity__onSaveInstanceState == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onSaveInstanceState, bundle); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onSaveInstanceState1 = NULL; @@ -6714,46 +6989,46 @@ JniResult Activity__onSaveInstanceState1(jobject self_, jobject bundle, jobject persistableBundle) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onSaveInstanceState1, "onSaveInstanceState", "(Landroid/os/Bundle;Landroid/os/PersistableBundle;)V"); if (_m_Activity__onSaveInstanceState1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onSaveInstanceState1, bundle, persistableBundle); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onPause = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onPause(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onPause, "onPause", "()V"); if (_m_Activity__onPause == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onPause); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onUserLeaveHint = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onUserLeaveHint(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onUserLeaveHint, "onUserLeaveHint", "()V"); if (_m_Activity__onUserLeaveHint == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onUserLeaveHint); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onCreateThumbnail = NULL; @@ -6762,49 +7037,48 @@ JniResult Activity__onCreateThumbnail(jobject self_, jobject bitmap, jobject canvas) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onCreateThumbnail, "onCreateThumbnail", "(Landroid/graphics/Bitmap;Landroid/graphics/Canvas;)Z"); if (_m_Activity__onCreateThumbnail == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__onCreateThumbnail, bitmap, canvas); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__onCreateDescription = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onCreateDescription(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onCreateDescription, "onCreateDescription", "()Ljava/lang/CharSequence;"); if (_m_Activity__onCreateDescription == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Activity__onCreateDescription); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__onProvideAssistData = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onProvideAssistData(jobject self_, jobject bundle) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onProvideAssistData, "onProvideAssistData", "(Landroid/os/Bundle;)V"); if (_m_Activity__onProvideAssistData == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onProvideAssistData, bundle); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onProvideAssistContent = NULL; @@ -6812,17 +7086,17 @@ FFI_PLUGIN_EXPORT JniResult Activity__onProvideAssistContent(jobject self_, jobject assistContent) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onProvideAssistContent, "onProvideAssistContent", "(Landroid/app/assist/AssistContent;)V"); if (_m_Activity__onProvideAssistContent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onProvideAssistContent, assistContent); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onGetDirectActions = NULL; @@ -6831,17 +7105,17 @@ JniResult Activity__onGetDirectActions(jobject self_, jobject cancellationSignal, jobject consumer) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_Activity, &_m_Activity__onGetDirectActions, "onGetDirectActions", "(Landroid/os/CancellationSignal;Ljava/util/function/Consumer;)V"); if (_m_Activity__onGetDirectActions == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onGetDirectActions, cancellationSignal, consumer); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onPerformDirectAction = NULL; @@ -6852,50 +7126,50 @@ JniResult Activity__onPerformDirectAction(jobject self_, jobject cancellationSignal, jobject consumer) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onPerformDirectAction, "onPerformDirectAction", "(Ljava/lang/String;Landroid/os/Bundle;Landroid/os/" "CancellationSignal;Ljava/util/function/Consumer;)V"); if (_m_Activity__onPerformDirectAction == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onPerformDirectAction, string, bundle, cancellationSignal, consumer); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__requestShowKeyboardShortcuts = NULL; FFI_PLUGIN_EXPORT JniResult Activity__requestShowKeyboardShortcuts(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__requestShowKeyboardShortcuts, "requestShowKeyboardShortcuts", "()V"); if (_m_Activity__requestShowKeyboardShortcuts == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__requestShowKeyboardShortcuts); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__dismissKeyboardShortcutsHelper = NULL; FFI_PLUGIN_EXPORT JniResult Activity__dismissKeyboardShortcutsHelper(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__dismissKeyboardShortcutsHelper, "dismissKeyboardShortcutsHelper", "()V"); if (_m_Activity__dismissKeyboardShortcutsHelper == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__dismissKeyboardShortcutsHelper); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onProvideKeyboardShortcuts = NULL; @@ -6905,76 +7179,76 @@ JniResult Activity__onProvideKeyboardShortcuts(jobject self_, jobject menu, int32_t i) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onProvideKeyboardShortcuts, "onProvideKeyboardShortcuts", "(Ljava/util/List;Landroid/view/Menu;I)V"); if (_m_Activity__onProvideKeyboardShortcuts == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod( jniEnv, self_, _m_Activity__onProvideKeyboardShortcuts, list, menu, i); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__showAssist = NULL; FFI_PLUGIN_EXPORT JniResult Activity__showAssist(jobject self_, jobject bundle) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__showAssist, "showAssist", "(Landroid/os/Bundle;)Z"); if (_m_Activity__showAssist == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__showAssist, bundle); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__onStop = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onStop(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onStop, "onStop", "()V"); if (_m_Activity__onStop == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onStop); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onDestroy = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onDestroy(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onDestroy, "onDestroy", "()V"); if (_m_Activity__onDestroy == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onDestroy); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__reportFullyDrawn = NULL; FFI_PLUGIN_EXPORT JniResult Activity__reportFullyDrawn(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__reportFullyDrawn, "reportFullyDrawn", "()V"); if (_m_Activity__reportFullyDrawn == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__reportFullyDrawn); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onMultiWindowModeChanged = NULL; @@ -6983,49 +7257,49 @@ JniResult Activity__onMultiWindowModeChanged(jobject self_, uint8_t z, jobject configuration) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onMultiWindowModeChanged, "onMultiWindowModeChanged", "(ZLandroid/content/res/Configuration;)V"); if (_m_Activity__onMultiWindowModeChanged == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod( jniEnv, self_, _m_Activity__onMultiWindowModeChanged, z, configuration); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onMultiWindowModeChanged1 = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onMultiWindowModeChanged1(jobject self_, uint8_t z) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onMultiWindowModeChanged1, "onMultiWindowModeChanged", "(Z)V"); if (_m_Activity__onMultiWindowModeChanged1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onMultiWindowModeChanged1, z); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__isInMultiWindowMode = NULL; FFI_PLUGIN_EXPORT JniResult Activity__isInMultiWindowMode(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__isInMultiWindowMode, "isInMultiWindowMode", "()Z"); if (_m_Activity__isInMultiWindowMode == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__isInMultiWindowMode); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__onPictureInPictureModeChanged = NULL; @@ -7034,18 +7308,18 @@ JniResult Activity__onPictureInPictureModeChanged(jobject self_, uint8_t z, jobject configuration) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onPictureInPictureModeChanged, "onPictureInPictureModeChanged", "(ZLandroid/content/res/Configuration;)V"); if (_m_Activity__onPictureInPictureModeChanged == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onPictureInPictureModeChanged, z, configuration); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onPictureInPictureUiStateChanged = NULL; @@ -7054,66 +7328,66 @@ JniResult Activity__onPictureInPictureUiStateChanged( jobject self_, jobject pictureInPictureUiState) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onPictureInPictureUiStateChanged, "onPictureInPictureUiStateChanged", "(Landroid/app/PictureInPictureUiState;)V"); if (_m_Activity__onPictureInPictureUiStateChanged == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onPictureInPictureUiStateChanged, pictureInPictureUiState); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onPictureInPictureModeChanged1 = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onPictureInPictureModeChanged1(jobject self_, uint8_t z) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onPictureInPictureModeChanged1, "onPictureInPictureModeChanged", "(Z)V"); if (_m_Activity__onPictureInPictureModeChanged1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onPictureInPictureModeChanged1, z); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__isInPictureInPictureMode = NULL; FFI_PLUGIN_EXPORT JniResult Activity__isInPictureInPictureMode(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__isInPictureInPictureMode, "isInPictureInPictureMode", "()Z"); if (_m_Activity__isInPictureInPictureMode == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__isInPictureInPictureMode); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__enterPictureInPictureMode = NULL; FFI_PLUGIN_EXPORT JniResult Activity__enterPictureInPictureMode(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__enterPictureInPictureMode, "enterPictureInPictureMode", "()V"); if (_m_Activity__enterPictureInPictureMode == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__enterPictureInPictureMode); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__enterPictureInPictureMode1 = NULL; @@ -7121,18 +7395,18 @@ FFI_PLUGIN_EXPORT JniResult Activity__enterPictureInPictureMode1(jobject self_, jobject pictureInPictureParams) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__enterPictureInPictureMode1, "enterPictureInPictureMode", "(Landroid/app/PictureInPictureParams;)Z"); if (_m_Activity__enterPictureInPictureMode1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__enterPictureInPictureMode1, pictureInPictureParams); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__setPictureInPictureParams = NULL; @@ -7140,82 +7414,82 @@ FFI_PLUGIN_EXPORT JniResult Activity__setPictureInPictureParams(jobject self_, jobject pictureInPictureParams) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setPictureInPictureParams, "setPictureInPictureParams", "(Landroid/app/PictureInPictureParams;)V"); if (_m_Activity__setPictureInPictureParams == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setPictureInPictureParams, pictureInPictureParams); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__getMaxNumPictureInPictureActions = NULL; FFI_PLUGIN_EXPORT JniResult Activity__getMaxNumPictureInPictureActions(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__getMaxNumPictureInPictureActions, "getMaxNumPictureInPictureActions", "()I"); if (_m_Activity__getMaxNumPictureInPictureActions == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; int32_t _result = (*jniEnv)->CallIntMethod( jniEnv, self_, _m_Activity__getMaxNumPictureInPictureActions); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; + return (JniResult){.value = {.i = _result}, .exception = check_exception()}; } jmethodID _m_Activity__onPictureInPictureRequested = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onPictureInPictureRequested(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onPictureInPictureRequested, "onPictureInPictureRequested", "()Z"); if (_m_Activity__onPictureInPictureRequested == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__onPictureInPictureRequested); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__setShouldDockBigOverlays = NULL; FFI_PLUGIN_EXPORT JniResult Activity__setShouldDockBigOverlays(jobject self_, uint8_t z) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setShouldDockBigOverlays, "setShouldDockBigOverlays", "(Z)V"); if (_m_Activity__setShouldDockBigOverlays == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setShouldDockBigOverlays, z); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__shouldDockBigOverlays = NULL; FFI_PLUGIN_EXPORT JniResult Activity__shouldDockBigOverlays(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__shouldDockBigOverlays, "shouldDockBigOverlays", "()Z"); if (_m_Activity__shouldDockBigOverlays == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__shouldDockBigOverlays); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__onConfigurationChanged = NULL; @@ -7223,128 +7497,125 @@ FFI_PLUGIN_EXPORT JniResult Activity__onConfigurationChanged(jobject self_, jobject configuration) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onConfigurationChanged, "onConfigurationChanged", "(Landroid/content/res/Configuration;)V"); if (_m_Activity__onConfigurationChanged == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onConfigurationChanged, configuration); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__getChangingConfigurations = NULL; FFI_PLUGIN_EXPORT JniResult Activity__getChangingConfigurations(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__getChangingConfigurations, "getChangingConfigurations", "()I"); if (_m_Activity__getChangingConfigurations == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; int32_t _result = (*jniEnv)->CallIntMethod( jniEnv, self_, _m_Activity__getChangingConfigurations); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; + return (JniResult){.value = {.i = _result}, .exception = check_exception()}; } jmethodID _m_Activity__getLastNonConfigurationInstance = NULL; FFI_PLUGIN_EXPORT JniResult Activity__getLastNonConfigurationInstance(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__getLastNonConfigurationInstance, "getLastNonConfigurationInstance", "()Ljava/lang/Object;"); if (_m_Activity__getLastNonConfigurationInstance == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Activity__getLastNonConfigurationInstance); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__onRetainNonConfigurationInstance = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onRetainNonConfigurationInstance(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onRetainNonConfigurationInstance, "onRetainNonConfigurationInstance", "()Ljava/lang/Object;"); if (_m_Activity__onRetainNonConfigurationInstance == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Activity__onRetainNonConfigurationInstance); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__onLowMemory = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onLowMemory(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onLowMemory, "onLowMemory", "()V"); if (_m_Activity__onLowMemory == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onLowMemory); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onTrimMemory = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onTrimMemory(jobject self_, int32_t i) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onTrimMemory, "onTrimMemory", "(I)V"); if (_m_Activity__onTrimMemory == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onTrimMemory, i); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__getFragmentManager = NULL; FFI_PLUGIN_EXPORT JniResult Activity__getFragmentManager(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__getFragmentManager, "getFragmentManager", "()Landroid/app/FragmentManager;"); if (_m_Activity__getFragmentManager == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Activity__getFragmentManager); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__onAttachFragment = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onAttachFragment(jobject self_, jobject fragment) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onAttachFragment, "onAttachFragment", "(Landroid/app/Fragment;)V"); if (_m_Activity__onAttachFragment == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onAttachFragment, fragment); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__managedQuery = NULL; @@ -7356,147 +7627,143 @@ JniResult Activity__managedQuery(jobject self_, jobject strings1, jobject string1) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__managedQuery, "managedQuery", "(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/" "lang/String;Ljava/lang/String;)Landroid/database/Cursor;"); if (_m_Activity__managedQuery == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__managedQuery, uri, strings, string, strings1, string1); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__startManagingCursor = NULL; FFI_PLUGIN_EXPORT JniResult Activity__startManagingCursor(jobject self_, jobject cursor) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__startManagingCursor, "startManagingCursor", "(Landroid/database/Cursor;)V"); if (_m_Activity__startManagingCursor == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__startManagingCursor, cursor); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__stopManagingCursor = NULL; FFI_PLUGIN_EXPORT JniResult Activity__stopManagingCursor(jobject self_, jobject cursor) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__stopManagingCursor, "stopManagingCursor", "(Landroid/database/Cursor;)V"); if (_m_Activity__stopManagingCursor == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__stopManagingCursor, cursor); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__findViewById = NULL; FFI_PLUGIN_EXPORT JniResult Activity__findViewById(jobject self_, int32_t i) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__findViewById, "findViewById", - "(I)Ljava/lang/Object;"); + "(I)Landroid/view/View;"); if (_m_Activity__findViewById == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__findViewById, i); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__requireViewById = NULL; FFI_PLUGIN_EXPORT JniResult Activity__requireViewById(jobject self_, int32_t i) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__requireViewById, "requireViewById", - "(I)Ljava/lang/Object;"); + "(I)Landroid/view/View;"); if (_m_Activity__requireViewById == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Activity__requireViewById, i); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__getActionBar = NULL; FFI_PLUGIN_EXPORT JniResult Activity__getActionBar(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__getActionBar, "getActionBar", "()Landroid/app/ActionBar;"); if (_m_Activity__getActionBar == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__getActionBar); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__setActionBar = NULL; FFI_PLUGIN_EXPORT JniResult Activity__setActionBar(jobject self_, jobject toolbar) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setActionBar, "setActionBar", "(Landroid/widget/Toolbar;)V"); if (_m_Activity__setActionBar == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setActionBar, toolbar); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__setContentView = NULL; FFI_PLUGIN_EXPORT JniResult Activity__setContentView(jobject self_, int32_t i) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setContentView, "setContentView", "(I)V"); if (_m_Activity__setContentView == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setContentView, i); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__setContentView1 = NULL; FFI_PLUGIN_EXPORT JniResult Activity__setContentView1(jobject self_, jobject view) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setContentView1, "setContentView", "(Landroid/view/View;)V"); if (_m_Activity__setContentView1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setContentView1, view); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__setContentView2 = NULL; @@ -7505,16 +7772,16 @@ JniResult Activity__setContentView2(jobject self_, jobject view, jobject layoutParams) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setContentView2, "setContentView", "(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V"); if (_m_Activity__setContentView2 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setContentView2, view, layoutParams); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__addContentView = NULL; @@ -7523,34 +7790,33 @@ JniResult Activity__addContentView(jobject self_, jobject view, jobject layoutParams) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__addContentView, "addContentView", "(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V"); if (_m_Activity__addContentView == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__addContentView, view, layoutParams); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__getContentTransitionManager = NULL; FFI_PLUGIN_EXPORT JniResult Activity__getContentTransitionManager(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__getContentTransitionManager, "getContentTransitionManager", "()Landroid/transition/TransitionManager;"); if (_m_Activity__getContentTransitionManager == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Activity__getContentTransitionManager); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__setContentTransitionManager = NULL; @@ -7558,114 +7824,113 @@ FFI_PLUGIN_EXPORT JniResult Activity__setContentTransitionManager(jobject self_, jobject transitionManager) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setContentTransitionManager, "setContentTransitionManager", "(Landroid/transition/TransitionManager;)V"); if (_m_Activity__setContentTransitionManager == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setContentTransitionManager, transitionManager); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__getContentScene = NULL; FFI_PLUGIN_EXPORT JniResult Activity__getContentScene(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__getContentScene, "getContentScene", "()Landroid/transition/Scene;"); if (_m_Activity__getContentScene == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__getContentScene); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__setFinishOnTouchOutside = NULL; FFI_PLUGIN_EXPORT JniResult Activity__setFinishOnTouchOutside(jobject self_, uint8_t z) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setFinishOnTouchOutside, "setFinishOnTouchOutside", "(Z)V"); if (_m_Activity__setFinishOnTouchOutside == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setFinishOnTouchOutside, z); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__setDefaultKeyMode = NULL; FFI_PLUGIN_EXPORT JniResult Activity__setDefaultKeyMode(jobject self_, int32_t i) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setDefaultKeyMode, "setDefaultKeyMode", "(I)V"); if (_m_Activity__setDefaultKeyMode == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setDefaultKeyMode, i); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onKeyDown = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onKeyDown(jobject self_, int32_t i, jobject keyEvent) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onKeyDown, "onKeyDown", "(ILandroid/view/KeyEvent;)Z"); if (_m_Activity__onKeyDown == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__onKeyDown, i, keyEvent); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__onKeyLongPress = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onKeyLongPress(jobject self_, int32_t i, jobject keyEvent) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onKeyLongPress, "onKeyLongPress", "(ILandroid/view/KeyEvent;)Z"); if (_m_Activity__onKeyLongPress == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__onKeyLongPress, i, keyEvent); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__onKeyUp = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onKeyUp(jobject self_, int32_t i, jobject keyEvent) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onKeyUp, "onKeyUp", "(ILandroid/view/KeyEvent;)Z"); if (_m_Activity__onKeyUp == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__onKeyUp, i, keyEvent); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__onKeyMultiple = NULL; @@ -7675,109 +7940,109 @@ JniResult Activity__onKeyMultiple(jobject self_, int32_t i1, jobject keyEvent) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onKeyMultiple, "onKeyMultiple", "(IILandroid/view/KeyEvent;)Z"); if (_m_Activity__onKeyMultiple == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__onKeyMultiple, i, i1, keyEvent); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__onBackPressed = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onBackPressed(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onBackPressed, "onBackPressed", "()V"); if (_m_Activity__onBackPressed == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onBackPressed); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onKeyShortcut = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onKeyShortcut(jobject self_, int32_t i, jobject keyEvent) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onKeyShortcut, "onKeyShortcut", "(ILandroid/view/KeyEvent;)Z"); if (_m_Activity__onKeyShortcut == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__onKeyShortcut, i, keyEvent); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__onTouchEvent = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onTouchEvent(jobject self_, jobject motionEvent) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onTouchEvent, "onTouchEvent", "(Landroid/view/MotionEvent;)Z"); if (_m_Activity__onTouchEvent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__onTouchEvent, motionEvent); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__onTrackballEvent = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onTrackballEvent(jobject self_, jobject motionEvent) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onTrackballEvent, "onTrackballEvent", "(Landroid/view/MotionEvent;)Z"); if (_m_Activity__onTrackballEvent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__onTrackballEvent, motionEvent); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__onGenericMotionEvent = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onGenericMotionEvent(jobject self_, jobject motionEvent) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onGenericMotionEvent, "onGenericMotionEvent", "(Landroid/view/MotionEvent;)Z"); if (_m_Activity__onGenericMotionEvent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__onGenericMotionEvent, motionEvent); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__onUserInteraction = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onUserInteraction(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onUserInteraction, "onUserInteraction", "()V"); if (_m_Activity__onUserInteraction == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onUserInteraction); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onWindowAttributesChanged = NULL; @@ -7785,158 +8050,158 @@ FFI_PLUGIN_EXPORT JniResult Activity__onWindowAttributesChanged(jobject self_, jobject layoutParams) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onWindowAttributesChanged, "onWindowAttributesChanged", "(Landroid/view/WindowManager$LayoutParams;)V"); if (_m_Activity__onWindowAttributesChanged == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod( jniEnv, self_, _m_Activity__onWindowAttributesChanged, layoutParams); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onContentChanged = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onContentChanged(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onContentChanged, "onContentChanged", "()V"); if (_m_Activity__onContentChanged == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onContentChanged); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onWindowFocusChanged = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onWindowFocusChanged(jobject self_, uint8_t z) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onWindowFocusChanged, "onWindowFocusChanged", "(Z)V"); if (_m_Activity__onWindowFocusChanged == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onWindowFocusChanged, z); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onAttachedToWindow = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onAttachedToWindow(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onAttachedToWindow, "onAttachedToWindow", "()V"); if (_m_Activity__onAttachedToWindow == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onAttachedToWindow); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onDetachedFromWindow = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onDetachedFromWindow(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onDetachedFromWindow, "onDetachedFromWindow", "()V"); if (_m_Activity__onDetachedFromWindow == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onDetachedFromWindow); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__hasWindowFocus = NULL; FFI_PLUGIN_EXPORT JniResult Activity__hasWindowFocus(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__hasWindowFocus, "hasWindowFocus", "()Z"); if (_m_Activity__hasWindowFocus == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Activity__hasWindowFocus); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__dispatchKeyEvent = NULL; FFI_PLUGIN_EXPORT JniResult Activity__dispatchKeyEvent(jobject self_, jobject keyEvent) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__dispatchKeyEvent, "dispatchKeyEvent", "(Landroid/view/KeyEvent;)Z"); if (_m_Activity__dispatchKeyEvent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__dispatchKeyEvent, keyEvent); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__dispatchKeyShortcutEvent = NULL; FFI_PLUGIN_EXPORT JniResult Activity__dispatchKeyShortcutEvent(jobject self_, jobject keyEvent) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__dispatchKeyShortcutEvent, "dispatchKeyShortcutEvent", "(Landroid/view/KeyEvent;)Z"); if (_m_Activity__dispatchKeyShortcutEvent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__dispatchKeyShortcutEvent, keyEvent); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__dispatchTouchEvent = NULL; FFI_PLUGIN_EXPORT JniResult Activity__dispatchTouchEvent(jobject self_, jobject motionEvent) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__dispatchTouchEvent, "dispatchTouchEvent", "(Landroid/view/MotionEvent;)Z"); if (_m_Activity__dispatchTouchEvent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__dispatchTouchEvent, motionEvent); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__dispatchTrackballEvent = NULL; FFI_PLUGIN_EXPORT JniResult Activity__dispatchTrackballEvent(jobject self_, jobject motionEvent) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__dispatchTrackballEvent, "dispatchTrackballEvent", "(Landroid/view/MotionEvent;)Z"); if (_m_Activity__dispatchTrackballEvent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__dispatchTrackballEvent, motionEvent); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__dispatchGenericMotionEvent = NULL; @@ -7944,16 +8209,16 @@ FFI_PLUGIN_EXPORT JniResult Activity__dispatchGenericMotionEvent(jobject self_, jobject motionEvent) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__dispatchGenericMotionEvent, "dispatchGenericMotionEvent", "(Landroid/view/MotionEvent;)Z"); if (_m_Activity__dispatchGenericMotionEvent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__dispatchGenericMotionEvent, motionEvent); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__dispatchPopulateAccessibilityEvent = NULL; @@ -7962,51 +8227,50 @@ JniResult Activity__dispatchPopulateAccessibilityEvent( jobject self_, jobject accessibilityEvent) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__dispatchPopulateAccessibilityEvent, "dispatchPopulateAccessibilityEvent", "(Landroid/view/accessibility/AccessibilityEvent;)Z"); if (_m_Activity__dispatchPopulateAccessibilityEvent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__dispatchPopulateAccessibilityEvent, accessibilityEvent); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__onCreatePanelView = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onCreatePanelView(jobject self_, int32_t i) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onCreatePanelView, "onCreatePanelView", "(I)Landroid/view/View;"); if (_m_Activity__onCreatePanelView == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Activity__onCreatePanelView, i); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__onCreatePanelMenu = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onCreatePanelMenu(jobject self_, int32_t i, jobject menu) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onCreatePanelMenu, "onCreatePanelMenu", "(ILandroid/view/Menu;)Z"); if (_m_Activity__onCreatePanelMenu == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__onCreatePanelMenu, i, menu); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__onPreparePanel = NULL; @@ -8016,32 +8280,32 @@ JniResult Activity__onPreparePanel(jobject self_, jobject view, jobject menu) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onPreparePanel, "onPreparePanel", "(ILandroid/view/View;Landroid/view/Menu;)Z"); if (_m_Activity__onPreparePanel == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__onPreparePanel, i, view, menu); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__onMenuOpened = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onMenuOpened(jobject self_, int32_t i, jobject menu) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onMenuOpened, "onMenuOpened", "(ILandroid/view/Menu;)Z"); if (_m_Activity__onMenuOpened == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__onMenuOpened, i, menu); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__onMenuItemSelected = NULL; @@ -8050,125 +8314,125 @@ JniResult Activity__onMenuItemSelected(jobject self_, int32_t i, jobject menuItem) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onMenuItemSelected, "onMenuItemSelected", "(ILandroid/view/MenuItem;)Z"); if (_m_Activity__onMenuItemSelected == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__onMenuItemSelected, i, menuItem); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__onPanelClosed = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onPanelClosed(jobject self_, int32_t i, jobject menu) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onPanelClosed, "onPanelClosed", "(ILandroid/view/Menu;)V"); if (_m_Activity__onPanelClosed == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onPanelClosed, i, menu); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__invalidateOptionsMenu = NULL; FFI_PLUGIN_EXPORT JniResult Activity__invalidateOptionsMenu(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__invalidateOptionsMenu, "invalidateOptionsMenu", "()V"); if (_m_Activity__invalidateOptionsMenu == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__invalidateOptionsMenu); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onCreateOptionsMenu = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onCreateOptionsMenu(jobject self_, jobject menu) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onCreateOptionsMenu, "onCreateOptionsMenu", "(Landroid/view/Menu;)Z"); if (_m_Activity__onCreateOptionsMenu == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__onCreateOptionsMenu, menu); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__onPrepareOptionsMenu = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onPrepareOptionsMenu(jobject self_, jobject menu) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onPrepareOptionsMenu, "onPrepareOptionsMenu", "(Landroid/view/Menu;)Z"); if (_m_Activity__onPrepareOptionsMenu == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__onPrepareOptionsMenu, menu); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__onOptionsItemSelected = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onOptionsItemSelected(jobject self_, jobject menuItem) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onOptionsItemSelected, "onOptionsItemSelected", "(Landroid/view/MenuItem;)Z"); if (_m_Activity__onOptionsItemSelected == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__onOptionsItemSelected, menuItem); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__onNavigateUp = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onNavigateUp(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onNavigateUp, "onNavigateUp", "()Z"); if (_m_Activity__onNavigateUp == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Activity__onNavigateUp); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__onNavigateUpFromChild = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onNavigateUpFromChild(jobject self_, jobject activity) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onNavigateUpFromChild, "onNavigateUpFromChild", "(Landroid/app/Activity;)Z"); if (_m_Activity__onNavigateUpFromChild == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__onNavigateUpFromChild, activity); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__onCreateNavigateUpTaskStack = NULL; @@ -8176,18 +8440,18 @@ FFI_PLUGIN_EXPORT JniResult Activity__onCreateNavigateUpTaskStack(jobject self_, jobject taskStackBuilder) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onCreateNavigateUpTaskStack, "onCreateNavigateUpTaskStack", "(Landroid/app/TaskStackBuilder;)V"); if (_m_Activity__onCreateNavigateUpTaskStack == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onCreateNavigateUpTaskStack, taskStackBuilder); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onPrepareNavigateUpTaskStack = NULL; @@ -8195,64 +8459,64 @@ FFI_PLUGIN_EXPORT JniResult Activity__onPrepareNavigateUpTaskStack(jobject self_, jobject taskStackBuilder) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onPrepareNavigateUpTaskStack, "onPrepareNavigateUpTaskStack", "(Landroid/app/TaskStackBuilder;)V"); if (_m_Activity__onPrepareNavigateUpTaskStack == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onPrepareNavigateUpTaskStack, taskStackBuilder); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onOptionsMenuClosed = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onOptionsMenuClosed(jobject self_, jobject menu) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onOptionsMenuClosed, "onOptionsMenuClosed", "(Landroid/view/Menu;)V"); if (_m_Activity__onOptionsMenuClosed == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onOptionsMenuClosed, menu); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__openOptionsMenu = NULL; FFI_PLUGIN_EXPORT JniResult Activity__openOptionsMenu(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__openOptionsMenu, "openOptionsMenu", "()V"); if (_m_Activity__openOptionsMenu == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__openOptionsMenu); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__closeOptionsMenu = NULL; FFI_PLUGIN_EXPORT JniResult Activity__closeOptionsMenu(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__closeOptionsMenu, "closeOptionsMenu", "()V"); if (_m_Activity__closeOptionsMenu == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__closeOptionsMenu); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onCreateContextMenu = NULL; @@ -8262,162 +8526,160 @@ JniResult Activity__onCreateContextMenu(jobject self_, jobject view, jobject contextMenuInfo) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onCreateContextMenu, "onCreateContextMenu", "(Landroid/view/ContextMenu;Landroid/view/View;Landroid/view/" "ContextMenu$ContextMenuInfo;)V"); if (_m_Activity__onCreateContextMenu == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onCreateContextMenu, contextMenu, view, contextMenuInfo); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__registerForContextMenu = NULL; FFI_PLUGIN_EXPORT JniResult Activity__registerForContextMenu(jobject self_, jobject view) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__registerForContextMenu, "registerForContextMenu", "(Landroid/view/View;)V"); if (_m_Activity__registerForContextMenu == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__registerForContextMenu, view); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__unregisterForContextMenu = NULL; FFI_PLUGIN_EXPORT JniResult Activity__unregisterForContextMenu(jobject self_, jobject view) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__unregisterForContextMenu, "unregisterForContextMenu", "(Landroid/view/View;)V"); if (_m_Activity__unregisterForContextMenu == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__unregisterForContextMenu, view); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__openContextMenu = NULL; FFI_PLUGIN_EXPORT JniResult Activity__openContextMenu(jobject self_, jobject view) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__openContextMenu, "openContextMenu", "(Landroid/view/View;)V"); if (_m_Activity__openContextMenu == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__openContextMenu, view); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__closeContextMenu = NULL; FFI_PLUGIN_EXPORT JniResult Activity__closeContextMenu(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__closeContextMenu, "closeContextMenu", "()V"); if (_m_Activity__closeContextMenu == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__closeContextMenu); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onContextItemSelected = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onContextItemSelected(jobject self_, jobject menuItem) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onContextItemSelected, "onContextItemSelected", "(Landroid/view/MenuItem;)Z"); if (_m_Activity__onContextItemSelected == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__onContextItemSelected, menuItem); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__onContextMenuClosed = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onContextMenuClosed(jobject self_, jobject menu) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onContextMenuClosed, "onContextMenuClosed", "(Landroid/view/Menu;)V"); if (_m_Activity__onContextMenuClosed == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onContextMenuClosed, menu); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onCreateDialog = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onCreateDialog(jobject self_, int32_t i) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onCreateDialog, "onCreateDialog", "(I)Landroid/app/Dialog;"); if (_m_Activity__onCreateDialog == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__onCreateDialog, i); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__onCreateDialog1 = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onCreateDialog1(jobject self_, int32_t i, jobject bundle) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onCreateDialog1, "onCreateDialog", "(ILandroid/os/Bundle;)Landroid/app/Dialog;"); if (_m_Activity__onCreateDialog1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Activity__onCreateDialog1, i, bundle); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__onPrepareDialog = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onPrepareDialog(jobject self_, int32_t i, jobject dialog) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onPrepareDialog, "onPrepareDialog", "(ILandroid/app/Dialog;)V"); if (_m_Activity__onPrepareDialog == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onPrepareDialog, i, dialog); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onPrepareDialog1 = NULL; @@ -8427,124 +8689,123 @@ JniResult Activity__onPrepareDialog1(jobject self_, jobject dialog, jobject bundle) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onPrepareDialog1, "onPrepareDialog", "(ILandroid/app/Dialog;Landroid/os/Bundle;)V"); if (_m_Activity__onPrepareDialog1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onPrepareDialog1, i, dialog, bundle); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__showDialog = NULL; FFI_PLUGIN_EXPORT JniResult Activity__showDialog(jobject self_, int32_t i) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__showDialog, "showDialog", "(I)V"); if (_m_Activity__showDialog == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__showDialog, i); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__showDialog1 = NULL; FFI_PLUGIN_EXPORT JniResult Activity__showDialog1(jobject self_, int32_t i, jobject bundle) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__showDialog1, "showDialog", "(ILandroid/os/Bundle;)Z"); if (_m_Activity__showDialog1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__showDialog1, i, bundle); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__dismissDialog = NULL; FFI_PLUGIN_EXPORT JniResult Activity__dismissDialog(jobject self_, int32_t i) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__dismissDialog, "dismissDialog", "(I)V"); if (_m_Activity__dismissDialog == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__dismissDialog, i); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__removeDialog = NULL; FFI_PLUGIN_EXPORT JniResult Activity__removeDialog(jobject self_, int32_t i) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__removeDialog, "removeDialog", "(I)V"); if (_m_Activity__removeDialog == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__removeDialog, i); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onSearchRequested = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onSearchRequested(jobject self_, jobject searchEvent) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onSearchRequested, "onSearchRequested", "(Landroid/view/SearchEvent;)Z"); if (_m_Activity__onSearchRequested == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__onSearchRequested, searchEvent); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__onSearchRequested1 = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onSearchRequested1(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onSearchRequested1, "onSearchRequested", "()Z"); if (_m_Activity__onSearchRequested1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__onSearchRequested1); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__getSearchEvent = NULL; FFI_PLUGIN_EXPORT JniResult Activity__getSearchEvent(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__getSearchEvent, "getSearchEvent", "()Landroid/view/SearchEvent;"); if (_m_Activity__getSearchEvent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__getSearchEvent); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__startSearch = NULL; @@ -8555,16 +8816,16 @@ JniResult Activity__startSearch(jobject self_, jobject bundle, uint8_t z1) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__startSearch, "startSearch", "(Ljava/lang/String;ZLandroid/os/Bundle;Z)V"); if (_m_Activity__startSearch == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__startSearch, string, z, bundle, z1); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__triggerSearch = NULL; @@ -8573,47 +8834,47 @@ JniResult Activity__triggerSearch(jobject self_, jobject string, jobject bundle) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__triggerSearch, "triggerSearch", "(Ljava/lang/String;Landroid/os/Bundle;)V"); if (_m_Activity__triggerSearch == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__triggerSearch, string, bundle); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__takeKeyEvents = NULL; FFI_PLUGIN_EXPORT JniResult Activity__takeKeyEvents(jobject self_, uint8_t z) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__takeKeyEvents, "takeKeyEvents", "(Z)V"); if (_m_Activity__takeKeyEvents == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__takeKeyEvents, z); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__requestWindowFeature = NULL; FFI_PLUGIN_EXPORT JniResult Activity__requestWindowFeature(jobject self_, int32_t i) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__requestWindowFeature, "requestWindowFeature", "(I)Z"); if (_m_Activity__requestWindowFeature == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__requestWindowFeature, i); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__setFeatureDrawableResource = NULL; @@ -8622,16 +8883,16 @@ JniResult Activity__setFeatureDrawableResource(jobject self_, int32_t i, int32_t i1) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setFeatureDrawableResource, "setFeatureDrawableResource", "(II)V"); if (_m_Activity__setFeatureDrawableResource == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setFeatureDrawableResource, i, i1); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__setFeatureDrawableUri = NULL; @@ -8640,16 +8901,16 @@ JniResult Activity__setFeatureDrawableUri(jobject self_, int32_t i, jobject uri) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setFeatureDrawableUri, "setFeatureDrawableUri", "(ILandroid/net/Uri;)V"); if (_m_Activity__setFeatureDrawableUri == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setFeatureDrawableUri, i, uri); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__setFeatureDrawable = NULL; @@ -8658,16 +8919,16 @@ JniResult Activity__setFeatureDrawable(jobject self_, int32_t i, jobject drawable) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setFeatureDrawable, "setFeatureDrawable", "(ILandroid/graphics/drawable/Drawable;)V"); if (_m_Activity__setFeatureDrawable == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setFeatureDrawable, i, drawable); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__setFeatureDrawableAlpha = NULL; @@ -8676,64 +8937,62 @@ JniResult Activity__setFeatureDrawableAlpha(jobject self_, int32_t i, int32_t i1) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setFeatureDrawableAlpha, "setFeatureDrawableAlpha", "(II)V"); if (_m_Activity__setFeatureDrawableAlpha == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setFeatureDrawableAlpha, i, i1); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__getLayoutInflater = NULL; FFI_PLUGIN_EXPORT JniResult Activity__getLayoutInflater(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__getLayoutInflater, "getLayoutInflater", "()Landroid/view/LayoutInflater;"); if (_m_Activity__getLayoutInflater == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__getLayoutInflater); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__getMenuInflater = NULL; FFI_PLUGIN_EXPORT JniResult Activity__getMenuInflater(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__getMenuInflater, "getMenuInflater", "()Landroid/view/MenuInflater;"); if (_m_Activity__getMenuInflater == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__getMenuInflater); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__setTheme = NULL; FFI_PLUGIN_EXPORT JniResult Activity__setTheme(jobject self_, int32_t i) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setTheme, "setTheme", "(I)V"); if (_m_Activity__setTheme == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setTheme, i); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onApplyThemeResource = NULL; @@ -8743,17 +9002,17 @@ JniResult Activity__onApplyThemeResource(jobject self_, int32_t i, uint8_t z) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onApplyThemeResource, "onApplyThemeResource", "(Landroid/content/res/Resources$Theme;IZ)V"); if (_m_Activity__onApplyThemeResource == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onApplyThemeResource, theme, i, z); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__requestPermissions = NULL; @@ -8762,16 +9021,16 @@ JniResult Activity__requestPermissions(jobject self_, jobject strings, int32_t i) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__requestPermissions, "requestPermissions", "([Ljava/lang/String;I)V"); if (_m_Activity__requestPermissions == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__requestPermissions, strings, i); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onRequestPermissionsResult = NULL; @@ -8781,16 +9040,16 @@ JniResult Activity__onRequestPermissionsResult(jobject self_, jobject strings, jobject is) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onRequestPermissionsResult, "onRequestPermissionsResult", "(I[Ljava/lang/String;[I)V"); if (_m_Activity__onRequestPermissionsResult == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod( jniEnv, self_, _m_Activity__onRequestPermissionsResult, i, strings, is); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__shouldShowRequestPermissionRationale = NULL; @@ -8798,16 +9057,16 @@ FFI_PLUGIN_EXPORT JniResult Activity__shouldShowRequestPermissionRationale(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__shouldShowRequestPermissionRationale, "shouldShowRequestPermissionRationale", "(Ljava/lang/String;)Z"); if (_m_Activity__shouldShowRequestPermissionRationale == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__shouldShowRequestPermissionRationale, string); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__startActivityForResult = NULL; @@ -8816,16 +9075,16 @@ JniResult Activity__startActivityForResult(jobject self_, jobject intent, int32_t i) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__startActivityForResult, "startActivityForResult", "(Landroid/content/Intent;I)V"); if (_m_Activity__startActivityForResult == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__startActivityForResult, intent, i); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__startActivityForResult1 = NULL; @@ -8835,33 +9094,33 @@ JniResult Activity__startActivityForResult1(jobject self_, int32_t i, jobject bundle) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__startActivityForResult1, "startActivityForResult", "(Landroid/content/Intent;ILandroid/os/Bundle;)V"); if (_m_Activity__startActivityForResult1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__startActivityForResult1, intent, i, bundle); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__isActivityTransitionRunning = NULL; FFI_PLUGIN_EXPORT JniResult Activity__isActivityTransitionRunning(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__isActivityTransitionRunning, "isActivityTransitionRunning", "()Z"); if (_m_Activity__isActivityTransitionRunning == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__isActivityTransitionRunning); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__startIntentSenderForResult = NULL; @@ -8874,18 +9133,18 @@ JniResult Activity__startIntentSenderForResult(jobject self_, int32_t i2, int32_t i3) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__startIntentSenderForResult, "startIntentSenderForResult", "(Landroid/content/IntentSender;ILandroid/content/Intent;III)V"); if (_m_Activity__startIntentSenderForResult == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__startIntentSenderForResult, intentSender, i, intent, i1, i2, i3); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__startIntentSenderForResult1 = NULL; @@ -8899,34 +9158,34 @@ JniResult Activity__startIntentSenderForResult1(jobject self_, int32_t i3, jobject bundle) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__startIntentSenderForResult1, "startIntentSenderForResult", "(Landroid/content/IntentSender;ILandroid/content/" "Intent;IIILandroid/os/Bundle;)V"); if (_m_Activity__startIntentSenderForResult1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__startIntentSenderForResult1, intentSender, i, intent, i1, i2, i3, bundle); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__startActivity = NULL; FFI_PLUGIN_EXPORT JniResult Activity__startActivity(jobject self_, jobject intent) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__startActivity, "startActivity", "(Landroid/content/Intent;)V"); if (_m_Activity__startActivity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__startActivity, intent); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__startActivity1 = NULL; @@ -8935,32 +9194,32 @@ JniResult Activity__startActivity1(jobject self_, jobject intent, jobject bundle) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__startActivity1, "startActivity", "(Landroid/content/Intent;Landroid/os/Bundle;)V"); if (_m_Activity__startActivity1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__startActivity1, intent, bundle); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__startActivities = NULL; FFI_PLUGIN_EXPORT JniResult Activity__startActivities(jobject self_, jobject intents) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__startActivities, "startActivities", "([Landroid/content/Intent;)V"); if (_m_Activity__startActivities == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__startActivities, intents); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__startActivities1 = NULL; @@ -8969,16 +9228,16 @@ JniResult Activity__startActivities1(jobject self_, jobject intents, jobject bundle) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__startActivities1, "startActivities", "([Landroid/content/Intent;Landroid/os/Bundle;)V"); if (_m_Activity__startActivities1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__startActivities1, intents, bundle); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__startIntentSender = NULL; @@ -8990,16 +9249,16 @@ JniResult Activity__startIntentSender(jobject self_, int32_t i1, int32_t i2) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__startIntentSender, "startIntentSender", "(Landroid/content/IntentSender;Landroid/content/Intent;III)V"); if (_m_Activity__startIntentSender == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__startIntentSender, intentSender, intent, i, i1, i2); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__startIntentSender1 = NULL; @@ -9012,18 +9271,18 @@ JniResult Activity__startIntentSender1(jobject self_, int32_t i2, jobject bundle) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__startIntentSender1, "startIntentSender", "(Landroid/content/IntentSender;Landroid/content/" "Intent;IIILandroid/os/Bundle;)V"); if (_m_Activity__startIntentSender1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__startIntentSender1, intentSender, intent, i, i1, i2, bundle); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__startActivityIfNeeded = NULL; @@ -9032,16 +9291,16 @@ JniResult Activity__startActivityIfNeeded(jobject self_, jobject intent, int32_t i) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__startActivityIfNeeded, "startActivityIfNeeded", "(Landroid/content/Intent;I)Z"); if (_m_Activity__startActivityIfNeeded == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__startActivityIfNeeded, intent, i); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__startActivityIfNeeded1 = NULL; @@ -9051,33 +9310,33 @@ JniResult Activity__startActivityIfNeeded1(jobject self_, int32_t i, jobject bundle) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__startActivityIfNeeded1, "startActivityIfNeeded", "(Landroid/content/Intent;ILandroid/os/Bundle;)Z"); if (_m_Activity__startActivityIfNeeded1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__startActivityIfNeeded1, intent, i, bundle); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__startNextMatchingActivity = NULL; FFI_PLUGIN_EXPORT JniResult Activity__startNextMatchingActivity(jobject self_, jobject intent) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__startNextMatchingActivity, "startNextMatchingActivity", "(Landroid/content/Intent;)Z"); if (_m_Activity__startNextMatchingActivity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__startNextMatchingActivity, intent); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__startNextMatchingActivity1 = NULL; @@ -9086,17 +9345,17 @@ JniResult Activity__startNextMatchingActivity1(jobject self_, jobject intent, jobject bundle) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__startNextMatchingActivity1, "startNextMatchingActivity", "(Landroid/content/Intent;Landroid/os/Bundle;)Z"); if (_m_Activity__startNextMatchingActivity1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__startNextMatchingActivity1, intent, bundle); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__startActivityFromChild = NULL; @@ -9106,17 +9365,17 @@ JniResult Activity__startActivityFromChild(jobject self_, jobject intent, int32_t i) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__startActivityFromChild, "startActivityFromChild", "(Landroid/app/Activity;Landroid/content/Intent;I)V"); if (_m_Activity__startActivityFromChild == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__startActivityFromChild, activity, intent, i); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__startActivityFromChild1 = NULL; @@ -9127,18 +9386,18 @@ JniResult Activity__startActivityFromChild1(jobject self_, int32_t i, jobject bundle) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_Activity, &_m_Activity__startActivityFromChild1, "startActivityFromChild", "(Landroid/app/Activity;Landroid/content/Intent;ILandroid/os/Bundle;)V"); if (_m_Activity__startActivityFromChild1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__startActivityFromChild1, activity, intent, i, bundle); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__startActivityFromFragment = NULL; @@ -9148,18 +9407,18 @@ JniResult Activity__startActivityFromFragment(jobject self_, jobject intent, int32_t i) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__startActivityFromFragment, "startActivityFromFragment", "(Landroid/app/Fragment;Landroid/content/Intent;I)V"); if (_m_Activity__startActivityFromFragment == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__startActivityFromFragment, fragment, intent, i); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__startActivityFromFragment1 = NULL; @@ -9170,19 +9429,19 @@ JniResult Activity__startActivityFromFragment1(jobject self_, int32_t i, jobject bundle) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_Activity, &_m_Activity__startActivityFromFragment1, "startActivityFromFragment", "(Landroid/app/Fragment;Landroid/content/Intent;ILandroid/os/Bundle;)V"); if (_m_Activity__startActivityFromFragment1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__startActivityFromFragment1, fragment, intent, i, bundle); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__startIntentSenderFromChild = NULL; @@ -9196,19 +9455,19 @@ JniResult Activity__startIntentSenderFromChild(jobject self_, int32_t i2, int32_t i3) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__startIntentSenderFromChild, "startIntentSenderFromChild", "(Landroid/app/Activity;Landroid/content/IntentSender;ILandroid/" "content/Intent;III)V"); if (_m_Activity__startIntentSenderFromChild == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__startIntentSenderFromChild, activity, intentSender, i, intent, i1, i2, i3); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__startIntentSenderFromChild1 = NULL; @@ -9223,19 +9482,19 @@ JniResult Activity__startIntentSenderFromChild1(jobject self_, int32_t i3, jobject bundle) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__startIntentSenderFromChild1, "startIntentSenderFromChild", "(Landroid/app/Activity;Landroid/content/IntentSender;ILandroid/" "content/Intent;IIILandroid/os/Bundle;)V"); if (_m_Activity__startIntentSenderFromChild1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__startIntentSenderFromChild1, activity, intentSender, i, intent, i1, i2, i3, bundle); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__overridePendingTransition = NULL; @@ -9244,16 +9503,16 @@ JniResult Activity__overridePendingTransition(jobject self_, int32_t i, int32_t i1) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__overridePendingTransition, "overridePendingTransition", "(II)V"); if (_m_Activity__overridePendingTransition == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__overridePendingTransition, i, i1); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__overridePendingTransition1 = NULL; @@ -9263,262 +9522,258 @@ JniResult Activity__overridePendingTransition1(jobject self_, int32_t i1, int32_t i2) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__overridePendingTransition1, "overridePendingTransition", "(III)V"); if (_m_Activity__overridePendingTransition1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__overridePendingTransition1, i, i1, i2); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__setResult = NULL; FFI_PLUGIN_EXPORT JniResult Activity__setResult(jobject self_, int32_t i) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setResult, "setResult", "(I)V"); if (_m_Activity__setResult == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setResult, i); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__setResult1 = NULL; FFI_PLUGIN_EXPORT JniResult Activity__setResult1(jobject self_, int32_t i, jobject intent) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setResult1, "setResult", "(ILandroid/content/Intent;)V"); if (_m_Activity__setResult1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setResult1, i, intent); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__getReferrer = NULL; FFI_PLUGIN_EXPORT JniResult Activity__getReferrer(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__getReferrer, "getReferrer", "()Landroid/net/Uri;"); if (_m_Activity__getReferrer == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__getReferrer); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__onProvideReferrer = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onProvideReferrer(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onProvideReferrer, "onProvideReferrer", "()Landroid/net/Uri;"); if (_m_Activity__onProvideReferrer == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__onProvideReferrer); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__getCallingPackage = NULL; FFI_PLUGIN_EXPORT JniResult Activity__getCallingPackage(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__getCallingPackage, "getCallingPackage", "()Ljava/lang/String;"); if (_m_Activity__getCallingPackage == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__getCallingPackage); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__getCallingActivity = NULL; FFI_PLUGIN_EXPORT JniResult Activity__getCallingActivity(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__getCallingActivity, "getCallingActivity", "()Landroid/content/ComponentName;"); if (_m_Activity__getCallingActivity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Activity__getCallingActivity); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__setVisible = NULL; FFI_PLUGIN_EXPORT JniResult Activity__setVisible(jobject self_, uint8_t z) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setVisible, "setVisible", "(Z)V"); if (_m_Activity__setVisible == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setVisible, z); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__isFinishing = NULL; FFI_PLUGIN_EXPORT JniResult Activity__isFinishing(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__isFinishing, "isFinishing", "()Z"); if (_m_Activity__isFinishing == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Activity__isFinishing); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__isDestroyed = NULL; FFI_PLUGIN_EXPORT JniResult Activity__isDestroyed(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__isDestroyed, "isDestroyed", "()Z"); if (_m_Activity__isDestroyed == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Activity__isDestroyed); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__isChangingConfigurations = NULL; FFI_PLUGIN_EXPORT JniResult Activity__isChangingConfigurations(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__isChangingConfigurations, "isChangingConfigurations", "()Z"); if (_m_Activity__isChangingConfigurations == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__isChangingConfigurations); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__recreate = NULL; FFI_PLUGIN_EXPORT JniResult Activity__recreate(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__recreate, "recreate", "()V"); if (_m_Activity__recreate == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__recreate); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__finish = NULL; FFI_PLUGIN_EXPORT JniResult Activity__finish(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__finish, "finish", "()V"); if (_m_Activity__finish == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__finish); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__finishAffinity = NULL; FFI_PLUGIN_EXPORT JniResult Activity__finishAffinity(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__finishAffinity, "finishAffinity", "()V"); if (_m_Activity__finishAffinity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__finishAffinity); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__finishFromChild = NULL; FFI_PLUGIN_EXPORT JniResult Activity__finishFromChild(jobject self_, jobject activity) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__finishFromChild, "finishFromChild", "(Landroid/app/Activity;)V"); if (_m_Activity__finishFromChild == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__finishFromChild, activity); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__finishAfterTransition = NULL; FFI_PLUGIN_EXPORT JniResult Activity__finishAfterTransition(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__finishAfterTransition, "finishAfterTransition", "()V"); if (_m_Activity__finishAfterTransition == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__finishAfterTransition); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__finishActivity = NULL; FFI_PLUGIN_EXPORT JniResult Activity__finishActivity(jobject self_, int32_t i) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__finishActivity, "finishActivity", "(I)V"); if (_m_Activity__finishActivity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__finishActivity, i); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__finishActivityFromChild = NULL; @@ -9527,47 +9782,47 @@ JniResult Activity__finishActivityFromChild(jobject self_, jobject activity, int32_t i) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__finishActivityFromChild, "finishActivityFromChild", "(Landroid/app/Activity;I)V"); if (_m_Activity__finishActivityFromChild == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__finishActivityFromChild, activity, i); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__finishAndRemoveTask = NULL; FFI_PLUGIN_EXPORT JniResult Activity__finishAndRemoveTask(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__finishAndRemoveTask, "finishAndRemoveTask", "()V"); if (_m_Activity__finishAndRemoveTask == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__finishAndRemoveTask); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__releaseInstance = NULL; FFI_PLUGIN_EXPORT JniResult Activity__releaseInstance(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__releaseInstance, "releaseInstance", "()Z"); if (_m_Activity__releaseInstance == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Activity__releaseInstance); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__onActivityResult = NULL; @@ -9577,16 +9832,16 @@ JniResult Activity__onActivityResult(jobject self_, int32_t i1, jobject intent) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onActivityResult, "onActivityResult", "(IILandroid/content/Intent;)V"); if (_m_Activity__onActivityResult == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onActivityResult, i, i1, intent); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onActivityReenter = NULL; @@ -9595,16 +9850,16 @@ JniResult Activity__onActivityReenter(jobject self_, int32_t i, jobject intent) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onActivityReenter, "onActivityReenter", "(ILandroid/content/Intent;)V"); if (_m_Activity__onActivityReenter == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onActivityReenter, i, intent); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__createPendingResult = NULL; @@ -9614,256 +9869,250 @@ JniResult Activity__createPendingResult(jobject self_, jobject intent, int32_t i1) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__createPendingResult, "createPendingResult", "(ILandroid/content/Intent;I)Landroid/app/PendingIntent;"); if (_m_Activity__createPendingResult == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Activity__createPendingResult, i, intent, i1); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__setRequestedOrientation = NULL; FFI_PLUGIN_EXPORT JniResult Activity__setRequestedOrientation(jobject self_, int32_t i) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setRequestedOrientation, "setRequestedOrientation", "(I)V"); if (_m_Activity__setRequestedOrientation == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setRequestedOrientation, i); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__getRequestedOrientation = NULL; FFI_PLUGIN_EXPORT JniResult Activity__getRequestedOrientation(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__getRequestedOrientation, "getRequestedOrientation", "()I"); if (_m_Activity__getRequestedOrientation == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; int32_t _result = (*jniEnv)->CallIntMethod( jniEnv, self_, _m_Activity__getRequestedOrientation); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; + return (JniResult){.value = {.i = _result}, .exception = check_exception()}; } jmethodID _m_Activity__getTaskId = NULL; FFI_PLUGIN_EXPORT JniResult Activity__getTaskId(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__getTaskId, "getTaskId", "()I"); if (_m_Activity__getTaskId == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; int32_t _result = (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Activity__getTaskId); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; + return (JniResult){.value = {.i = _result}, .exception = check_exception()}; } jmethodID _m_Activity__isTaskRoot = NULL; FFI_PLUGIN_EXPORT JniResult Activity__isTaskRoot(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__isTaskRoot, "isTaskRoot", "()Z"); if (_m_Activity__isTaskRoot == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Activity__isTaskRoot); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__moveTaskToBack = NULL; FFI_PLUGIN_EXPORT JniResult Activity__moveTaskToBack(jobject self_, uint8_t z) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__moveTaskToBack, "moveTaskToBack", "(Z)Z"); if (_m_Activity__moveTaskToBack == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__moveTaskToBack, z); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__getLocalClassName = NULL; FFI_PLUGIN_EXPORT JniResult Activity__getLocalClassName(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__getLocalClassName, "getLocalClassName", "()Ljava/lang/String;"); if (_m_Activity__getLocalClassName == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__getLocalClassName); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__getComponentName = NULL; FFI_PLUGIN_EXPORT JniResult Activity__getComponentName(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__getComponentName, "getComponentName", "()Landroid/content/ComponentName;"); if (_m_Activity__getComponentName == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__getComponentName); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__getPreferences = NULL; FFI_PLUGIN_EXPORT JniResult Activity__getPreferences(jobject self_, int32_t i) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__getPreferences, "getPreferences", "(I)Landroid/content/SharedPreferences;"); if (_m_Activity__getPreferences == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__getPreferences, i); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__isLaunchedFromBubble = NULL; FFI_PLUGIN_EXPORT JniResult Activity__isLaunchedFromBubble(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__isLaunchedFromBubble, "isLaunchedFromBubble", "()Z"); if (_m_Activity__isLaunchedFromBubble == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__isLaunchedFromBubble); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__getSystemService = NULL; FFI_PLUGIN_EXPORT JniResult Activity__getSystemService(jobject self_, jobject string) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__getSystemService, "getSystemService", "(Ljava/lang/String;)Ljava/lang/Object;"); if (_m_Activity__getSystemService == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Activity__getSystemService, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__setTitle = NULL; FFI_PLUGIN_EXPORT JniResult Activity__setTitle(jobject self_, jobject charSequence) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setTitle, "setTitle", "(Ljava/lang/CharSequence;)V"); if (_m_Activity__setTitle == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setTitle, charSequence); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__setTitle1 = NULL; FFI_PLUGIN_EXPORT JniResult Activity__setTitle1(jobject self_, int32_t i) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setTitle1, "setTitle", "(I)V"); if (_m_Activity__setTitle1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setTitle1, i); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__setTitleColor = NULL; FFI_PLUGIN_EXPORT JniResult Activity__setTitleColor(jobject self_, int32_t i) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setTitleColor, "setTitleColor", "(I)V"); if (_m_Activity__setTitleColor == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setTitleColor, i); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__getTitle = NULL; FFI_PLUGIN_EXPORT JniResult Activity__getTitle(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__getTitle, "getTitle", "()Ljava/lang/CharSequence;"); if (_m_Activity__getTitle == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__getTitle); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__getTitleColor = NULL; FFI_PLUGIN_EXPORT JniResult Activity__getTitleColor(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__getTitleColor, "getTitleColor", "()I"); if (_m_Activity__getTitleColor == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; int32_t _result = (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Activity__getTitleColor); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; + return (JniResult){.value = {.i = _result}, .exception = check_exception()}; } jmethodID _m_Activity__onTitleChanged = NULL; @@ -9872,16 +10121,16 @@ JniResult Activity__onTitleChanged(jobject self_, jobject charSequence, int32_t i) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onTitleChanged, "onTitleChanged", "(Ljava/lang/CharSequence;I)V"); if (_m_Activity__onTitleChanged == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onTitleChanged, charSequence, i); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onChildTitleChanged = NULL; @@ -9890,50 +10139,50 @@ JniResult Activity__onChildTitleChanged(jobject self_, jobject activity, jobject charSequence) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onChildTitleChanged, "onChildTitleChanged", "(Landroid/app/Activity;Ljava/lang/CharSequence;)V"); if (_m_Activity__onChildTitleChanged == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onChildTitleChanged, activity, charSequence); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__setTaskDescription = NULL; FFI_PLUGIN_EXPORT JniResult Activity__setTaskDescription(jobject self_, jobject taskDescription) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setTaskDescription, "setTaskDescription", "(Landroid/app/ActivityManager$TaskDescription;)V"); if (_m_Activity__setTaskDescription == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setTaskDescription, taskDescription); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__setProgressBarVisibility = NULL; FFI_PLUGIN_EXPORT JniResult Activity__setProgressBarVisibility(jobject self_, uint8_t z) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setProgressBarVisibility, "setProgressBarVisibility", "(Z)V"); if (_m_Activity__setProgressBarVisibility == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setProgressBarVisibility, z); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__setProgressBarIndeterminateVisibility = NULL; @@ -9941,145 +10190,144 @@ FFI_PLUGIN_EXPORT JniResult Activity__setProgressBarIndeterminateVisibility(jobject self_, uint8_t z) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setProgressBarIndeterminateVisibility, "setProgressBarIndeterminateVisibility", "(Z)V"); if (_m_Activity__setProgressBarIndeterminateVisibility == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod( jniEnv, self_, _m_Activity__setProgressBarIndeterminateVisibility, z); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__setProgressBarIndeterminate = NULL; FFI_PLUGIN_EXPORT JniResult Activity__setProgressBarIndeterminate(jobject self_, uint8_t z) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setProgressBarIndeterminate, "setProgressBarIndeterminate", "(Z)V"); if (_m_Activity__setProgressBarIndeterminate == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setProgressBarIndeterminate, z); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__setProgress = NULL; FFI_PLUGIN_EXPORT JniResult Activity__setProgress(jobject self_, int32_t i) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setProgress, "setProgress", "(I)V"); if (_m_Activity__setProgress == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setProgress, i); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__setSecondaryProgress = NULL; FFI_PLUGIN_EXPORT JniResult Activity__setSecondaryProgress(jobject self_, int32_t i) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setSecondaryProgress, "setSecondaryProgress", "(I)V"); if (_m_Activity__setSecondaryProgress == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setSecondaryProgress, i); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__setVolumeControlStream = NULL; FFI_PLUGIN_EXPORT JniResult Activity__setVolumeControlStream(jobject self_, int32_t i) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setVolumeControlStream, "setVolumeControlStream", "(I)V"); if (_m_Activity__setVolumeControlStream == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setVolumeControlStream, i); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__getVolumeControlStream = NULL; FFI_PLUGIN_EXPORT JniResult Activity__getVolumeControlStream(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__getVolumeControlStream, "getVolumeControlStream", "()I"); if (_m_Activity__getVolumeControlStream == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; int32_t _result = (*jniEnv)->CallIntMethod( jniEnv, self_, _m_Activity__getVolumeControlStream); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; + return (JniResult){.value = {.i = _result}, .exception = check_exception()}; } jmethodID _m_Activity__setMediaController = NULL; FFI_PLUGIN_EXPORT JniResult Activity__setMediaController(jobject self_, jobject mediaController) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setMediaController, "setMediaController", "(Landroid/media/session/MediaController;)V"); if (_m_Activity__setMediaController == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setMediaController, mediaController); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__getMediaController = NULL; FFI_PLUGIN_EXPORT JniResult Activity__getMediaController(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__getMediaController, "getMediaController", "()Landroid/media/session/MediaController;"); if (_m_Activity__getMediaController == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Activity__getMediaController); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__runOnUiThread = NULL; FFI_PLUGIN_EXPORT JniResult Activity__runOnUiThread(jobject self_, jobject runnable) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__runOnUiThread, "runOnUiThread", "(Ljava/lang/Runnable;)V"); if (_m_Activity__runOnUiThread == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__runOnUiThread, runnable); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onCreateView = NULL; @@ -10089,18 +10337,17 @@ JniResult Activity__onCreateView(jobject self_, jobject context, jobject attributeSet) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onCreateView, "onCreateView", "(Ljava/lang/String;Landroid/content/Context;Landroid/util/" "AttributeSet;)Landroid/view/View;"); if (_m_Activity__onCreateView == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Activity__onCreateView, string, context, attributeSet); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__onCreateView1 = NULL; @@ -10111,19 +10358,18 @@ JniResult Activity__onCreateView1(jobject self_, jobject context, jobject attributeSet) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onCreateView1, "onCreateView", "(Landroid/view/View;Ljava/lang/String;Landroid/content/" "Context;Landroid/util/AttributeSet;)Landroid/view/View;"); if (_m_Activity__onCreateView1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Activity__onCreateView1, view, string, context, attributeSet); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__dump = NULL; @@ -10134,110 +10380,110 @@ JniResult Activity__dump(jobject self_, jobject printWriter, jobject strings) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__dump, "dump", "(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/" "PrintWriter;[Ljava/lang/String;)V"); if (_m_Activity__dump == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__dump, string, fileDescriptor, printWriter, strings); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__isImmersive = NULL; FFI_PLUGIN_EXPORT JniResult Activity__isImmersive(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__isImmersive, "isImmersive", "()Z"); if (_m_Activity__isImmersive == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Activity__isImmersive); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__setTranslucent = NULL; FFI_PLUGIN_EXPORT JniResult Activity__setTranslucent(jobject self_, uint8_t z) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setTranslucent, "setTranslucent", "(Z)Z"); if (_m_Activity__setTranslucent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__setTranslucent, z); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__requestVisibleBehind = NULL; FFI_PLUGIN_EXPORT JniResult Activity__requestVisibleBehind(jobject self_, uint8_t z) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__requestVisibleBehind, "requestVisibleBehind", "(Z)Z"); if (_m_Activity__requestVisibleBehind == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__requestVisibleBehind, z); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__onVisibleBehindCanceled = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onVisibleBehindCanceled(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onVisibleBehindCanceled, "onVisibleBehindCanceled", "()V"); if (_m_Activity__onVisibleBehindCanceled == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onVisibleBehindCanceled); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onEnterAnimationComplete = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onEnterAnimationComplete(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onEnterAnimationComplete, "onEnterAnimationComplete", "()V"); if (_m_Activity__onEnterAnimationComplete == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onEnterAnimationComplete); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__setImmersive = NULL; FFI_PLUGIN_EXPORT JniResult Activity__setImmersive(jobject self_, uint8_t z) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setImmersive, "setImmersive", "(Z)V"); if (_m_Activity__setImmersive == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setImmersive, z); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__setVrModeEnabled = NULL; @@ -10246,33 +10492,32 @@ JniResult Activity__setVrModeEnabled(jobject self_, uint8_t z, jobject componentName) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setVrModeEnabled, "setVrModeEnabled", "(ZLandroid/content/ComponentName;)V"); if (_m_Activity__setVrModeEnabled == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setVrModeEnabled, z, componentName); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__startActionMode = NULL; FFI_PLUGIN_EXPORT JniResult Activity__startActionMode(jobject self_, jobject callback) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__startActionMode, "startActionMode", "(Landroid/view/ActionMode$Callback;)Landroid/view/ActionMode;"); if (_m_Activity__startActionMode == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Activity__startActionMode, callback); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__startActionMode1 = NULL; @@ -10281,17 +10526,16 @@ JniResult Activity__startActionMode1(jobject self_, jobject callback, int32_t i) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__startActionMode1, "startActionMode", "(Landroid/view/ActionMode$Callback;I)Landroid/view/ActionMode;"); if (_m_Activity__startActionMode1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Activity__startActionMode1, callback, i); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__onWindowStartingActionMode = NULL; @@ -10299,18 +10543,17 @@ FFI_PLUGIN_EXPORT JniResult Activity__onWindowStartingActionMode(jobject self_, jobject callback) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onWindowStartingActionMode, "onWindowStartingActionMode", "(Landroid/view/ActionMode$Callback;)Landroid/view/ActionMode;"); if (_m_Activity__onWindowStartingActionMode == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Activity__onWindowStartingActionMode, callback); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__onWindowStartingActionMode1 = NULL; @@ -10319,82 +10562,81 @@ JniResult Activity__onWindowStartingActionMode1(jobject self_, jobject callback, int32_t i) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onWindowStartingActionMode1, "onWindowStartingActionMode", "(Landroid/view/ActionMode$Callback;I)Landroid/view/ActionMode;"); if (_m_Activity__onWindowStartingActionMode1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Activity__onWindowStartingActionMode1, callback, i); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__onActionModeStarted = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onActionModeStarted(jobject self_, jobject actionMode) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onActionModeStarted, "onActionModeStarted", "(Landroid/view/ActionMode;)V"); if (_m_Activity__onActionModeStarted == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onActionModeStarted, actionMode); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__onActionModeFinished = NULL; FFI_PLUGIN_EXPORT JniResult Activity__onActionModeFinished(jobject self_, jobject actionMode) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__onActionModeFinished, "onActionModeFinished", "(Landroid/view/ActionMode;)V"); if (_m_Activity__onActionModeFinished == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__onActionModeFinished, actionMode); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__shouldUpRecreateTask = NULL; FFI_PLUGIN_EXPORT JniResult Activity__shouldUpRecreateTask(jobject self_, jobject intent) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__shouldUpRecreateTask, "shouldUpRecreateTask", "(Landroid/content/Intent;)Z"); if (_m_Activity__shouldUpRecreateTask == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__shouldUpRecreateTask, intent); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__navigateUpTo = NULL; FFI_PLUGIN_EXPORT JniResult Activity__navigateUpTo(jobject self_, jobject intent) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__navigateUpTo, "navigateUpTo", "(Landroid/content/Intent;)Z"); if (_m_Activity__navigateUpTo == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__navigateUpTo, intent); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__navigateUpToFromChild = NULL; @@ -10403,34 +10645,33 @@ JniResult Activity__navigateUpToFromChild(jobject self_, jobject activity, jobject intent) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__navigateUpToFromChild, "navigateUpToFromChild", "(Landroid/app/Activity;Landroid/content/Intent;)Z"); if (_m_Activity__navigateUpToFromChild == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Activity__navigateUpToFromChild, activity, intent); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Activity__getParentActivityIntent = NULL; FFI_PLUGIN_EXPORT JniResult Activity__getParentActivityIntent(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__getParentActivityIntent, "getParentActivityIntent", "()Landroid/content/Intent;"); if (_m_Activity__getParentActivityIntent == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Activity__getParentActivityIntent); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__setEnterSharedElementCallback = NULL; @@ -10439,18 +10680,18 @@ JniResult Activity__setEnterSharedElementCallback( jobject self_, jobject sharedElementCallback) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setEnterSharedElementCallback, "setEnterSharedElementCallback", "(Landroid/app/SharedElementCallback;)V"); if (_m_Activity__setEnterSharedElementCallback == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setEnterSharedElementCallback, sharedElementCallback); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__setExitSharedElementCallback = NULL; @@ -10459,50 +10700,50 @@ JniResult Activity__setExitSharedElementCallback( jobject self_, jobject sharedElementCallback) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setExitSharedElementCallback, "setExitSharedElementCallback", "(Landroid/app/SharedElementCallback;)V"); if (_m_Activity__setExitSharedElementCallback == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setExitSharedElementCallback, sharedElementCallback); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__postponeEnterTransition = NULL; FFI_PLUGIN_EXPORT JniResult Activity__postponeEnterTransition(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__postponeEnterTransition, "postponeEnterTransition", "()V"); if (_m_Activity__postponeEnterTransition == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__postponeEnterTransition); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__startPostponedEnterTransition = NULL; FFI_PLUGIN_EXPORT JniResult Activity__startPostponedEnterTransition(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__startPostponedEnterTransition, "startPostponedEnterTransition", "()V"); if (_m_Activity__startPostponedEnterTransition == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__startPostponedEnterTransition); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__requestDragAndDropPermissions = NULL; @@ -10510,157 +10751,155 @@ FFI_PLUGIN_EXPORT JniResult Activity__requestDragAndDropPermissions(jobject self_, jobject dragEvent) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_Activity, &_m_Activity__requestDragAndDropPermissions, "requestDragAndDropPermissions", "(Landroid/view/DragEvent;)Landroid/view/DragAndDropPermissions;"); if (_m_Activity__requestDragAndDropPermissions == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Activity__requestDragAndDropPermissions, dragEvent); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Activity__startLockTask = NULL; FFI_PLUGIN_EXPORT JniResult Activity__startLockTask(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__startLockTask, "startLockTask", "()V"); if (_m_Activity__startLockTask == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__startLockTask); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__stopLockTask = NULL; FFI_PLUGIN_EXPORT JniResult Activity__stopLockTask(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__stopLockTask, "stopLockTask", "()V"); if (_m_Activity__stopLockTask == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__stopLockTask); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__showLockTaskEscapeMessage = NULL; FFI_PLUGIN_EXPORT JniResult Activity__showLockTaskEscapeMessage(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__showLockTaskEscapeMessage, "showLockTaskEscapeMessage", "()V"); if (_m_Activity__showLockTaskEscapeMessage == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__showLockTaskEscapeMessage); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__setRecentsScreenshotEnabled = NULL; FFI_PLUGIN_EXPORT JniResult Activity__setRecentsScreenshotEnabled(jobject self_, uint8_t z) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setRecentsScreenshotEnabled, "setRecentsScreenshotEnabled", "(Z)V"); if (_m_Activity__setRecentsScreenshotEnabled == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setRecentsScreenshotEnabled, z); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__setShowWhenLocked = NULL; FFI_PLUGIN_EXPORT JniResult Activity__setShowWhenLocked(jobject self_, uint8_t z) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setShowWhenLocked, "setShowWhenLocked", "(Z)V"); if (_m_Activity__setShowWhenLocked == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setShowWhenLocked, z); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__setInheritShowWhenLocked = NULL; FFI_PLUGIN_EXPORT JniResult Activity__setInheritShowWhenLocked(jobject self_, uint8_t z) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setInheritShowWhenLocked, "setInheritShowWhenLocked", "(Z)V"); if (_m_Activity__setInheritShowWhenLocked == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setInheritShowWhenLocked, z); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__setTurnScreenOn = NULL; FFI_PLUGIN_EXPORT JniResult Activity__setTurnScreenOn(jobject self_, uint8_t z) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__setTurnScreenOn, "setTurnScreenOn", "(Z)V"); if (_m_Activity__setTurnScreenOn == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Activity__setTurnScreenOn, z); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; } jmethodID _m_Activity__getOnBackInvokedDispatcher = NULL; FFI_PLUGIN_EXPORT JniResult Activity__getOnBackInvokedDispatcher(jobject self_) { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Activity, &_m_Activity__getOnBackInvokedDispatcher, "getOnBackInvokedDispatcher", "()Landroid/window/OnBackInvokedDispatcher;"); if (_m_Activity__getOnBackInvokedDispatcher == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Activity__getOnBackInvokedDispatcher); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jfieldID _f_Activity__FOCUSED_STATE_SET = NULL; FFI_PLUGIN_EXPORT JniResult get_Activity__FOCUSED_STATE_SET() { load_env(); - load_class_gr(&_c_Activity, "android/app/Activity"); + load_class_global_ref(&_c_Activity, "android/app/Activity"); if (_c_Activity == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_static_field(_c_Activity, &_f_Activity__FOCUSED_STATE_SET, "FOCUSED_STATE_SET", "[I"); - jobject _result = to_global_ref((*jniEnv)->GetStaticObjectField( - jniEnv, _c_Activity, _f_Activity__FOCUSED_STATE_SET)); - return (JniResult){.result = {.l = _result}, .exception = check_exception()}; + jobject _result = (*jniEnv)->GetStaticObjectField( + jniEnv, _c_Activity, _f_Activity__FOCUSED_STATE_SET); + return to_global_ref_result(_result); } // java.time.Instant @@ -10670,487 +10909,464 @@ jmethodID _m_Instant__now = NULL; FFI_PLUGIN_EXPORT JniResult Instant__now() { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_static_method(_c_Instant, &_m_Instant__now, "now", "()Ljava/time/Instant;"); if (_m_Instant__now == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallStaticObjectMethod(jniEnv, _c_Instant, _m_Instant__now); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Instant__now1 = NULL; FFI_PLUGIN_EXPORT JniResult Instant__now1(jobject clock) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_static_method(_c_Instant, &_m_Instant__now1, "now", "(Ljava/time/Clock;)Ljava/time/Instant;"); if (_m_Instant__now1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallStaticObjectMethod(jniEnv, _c_Instant, _m_Instant__now1, clock); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Instant__ofEpochSecond = NULL; FFI_PLUGIN_EXPORT JniResult Instant__ofEpochSecond(int64_t j) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_static_method(_c_Instant, &_m_Instant__ofEpochSecond, "ofEpochSecond", "(J)Ljava/time/Instant;"); if (_m_Instant__ofEpochSecond == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallStaticObjectMethod( jniEnv, _c_Instant, _m_Instant__ofEpochSecond, j); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Instant__ofEpochSecond1 = NULL; FFI_PLUGIN_EXPORT JniResult Instant__ofEpochSecond1(int64_t j, int64_t j1) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_static_method(_c_Instant, &_m_Instant__ofEpochSecond1, "ofEpochSecond", "(JJ)Ljava/time/Instant;"); if (_m_Instant__ofEpochSecond1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallStaticObjectMethod( jniEnv, _c_Instant, _m_Instant__ofEpochSecond1, j, j1); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Instant__ofEpochMilli = NULL; FFI_PLUGIN_EXPORT JniResult Instant__ofEpochMilli(int64_t j) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_static_method(_c_Instant, &_m_Instant__ofEpochMilli, "ofEpochMilli", "(J)Ljava/time/Instant;"); if (_m_Instant__ofEpochMilli == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallStaticObjectMethod( jniEnv, _c_Instant, _m_Instant__ofEpochMilli, j); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Instant__from = NULL; FFI_PLUGIN_EXPORT JniResult Instant__from(jobject temporalAccessor) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_static_method( _c_Instant, &_m_Instant__from, "from", "(Ljava/time/temporal/TemporalAccessor;)Ljava/time/Instant;"); if (_m_Instant__from == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallStaticObjectMethod( jniEnv, _c_Instant, _m_Instant__from, temporalAccessor); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Instant__parse = NULL; FFI_PLUGIN_EXPORT JniResult Instant__parse(jobject charSequence) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_static_method(_c_Instant, &_m_Instant__parse, "parse", "(Ljava/lang/CharSequence;)Ljava/time/Instant;"); if (_m_Instant__parse == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallStaticObjectMethod( jniEnv, _c_Instant, _m_Instant__parse, charSequence); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Instant__isSupported = NULL; FFI_PLUGIN_EXPORT JniResult Instant__isSupported(jobject self_, jobject temporalField) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Instant, &_m_Instant__isSupported, "isSupported", "(Ljava/time/temporal/TemporalField;)Z"); if (_m_Instant__isSupported == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Instant__isSupported, temporalField); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Instant__isSupported1 = NULL; FFI_PLUGIN_EXPORT JniResult Instant__isSupported1(jobject self_, jobject temporalUnit) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Instant, &_m_Instant__isSupported1, "isSupported", "(Ljava/time/temporal/TemporalUnit;)Z"); if (_m_Instant__isSupported1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_Instant__isSupported1, temporalUnit); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Instant__range = NULL; FFI_PLUGIN_EXPORT JniResult Instant__range(jobject self_, jobject temporalField) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_Instant, &_m_Instant__range, "range", "(Ljava/time/temporal/TemporalField;)Ljava/time/temporal/ValueRange;"); if (_m_Instant__range == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Instant__range, temporalField); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Instant__get0 = NULL; FFI_PLUGIN_EXPORT JniResult Instant__get0(jobject self_, jobject temporalField) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Instant, &_m_Instant__get0, "get", "(Ljava/time/temporal/TemporalField;)I"); if (_m_Instant__get0 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; int32_t _result = (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Instant__get0, temporalField); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; + return (JniResult){.value = {.i = _result}, .exception = check_exception()}; } jmethodID _m_Instant__getLong = NULL; FFI_PLUGIN_EXPORT JniResult Instant__getLong(jobject self_, jobject temporalField) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Instant, &_m_Instant__getLong, "getLong", "(Ljava/time/temporal/TemporalField;)J"); if (_m_Instant__getLong == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; int64_t _result = (*jniEnv)->CallLongMethod( jniEnv, self_, _m_Instant__getLong, temporalField); - return (JniResult){.result = {.j = _result}, .exception = check_exception()}; + return (JniResult){.value = {.j = _result}, .exception = check_exception()}; } jmethodID _m_Instant__getEpochSecond = NULL; FFI_PLUGIN_EXPORT JniResult Instant__getEpochSecond(jobject self_) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Instant, &_m_Instant__getEpochSecond, "getEpochSecond", "()J"); if (_m_Instant__getEpochSecond == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; int64_t _result = (*jniEnv)->CallLongMethod(jniEnv, self_, _m_Instant__getEpochSecond); - return (JniResult){.result = {.j = _result}, .exception = check_exception()}; + return (JniResult){.value = {.j = _result}, .exception = check_exception()}; } jmethodID _m_Instant__getNano = NULL; FFI_PLUGIN_EXPORT JniResult Instant__getNano(jobject self_) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Instant, &_m_Instant__getNano, "getNano", "()I"); if (_m_Instant__getNano == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; int32_t _result = (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Instant__getNano); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; + return (JniResult){.value = {.i = _result}, .exception = check_exception()}; } jmethodID _m_Instant__with0 = NULL; FFI_PLUGIN_EXPORT JniResult Instant__with0(jobject self_, jobject temporalAdjuster) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Instant, &_m_Instant__with0, "with", "(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/Instant;"); if (_m_Instant__with0 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Instant__with0, temporalAdjuster); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Instant__with1 = NULL; FFI_PLUGIN_EXPORT JniResult Instant__with1(jobject self_, jobject temporalField, int64_t j) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Instant, &_m_Instant__with1, "with", "(Ljava/time/temporal/TemporalField;J)Ljava/time/Instant;"); if (_m_Instant__with1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Instant__with1, temporalField, j); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Instant__truncatedTo = NULL; FFI_PLUGIN_EXPORT JniResult Instant__truncatedTo(jobject self_, jobject temporalUnit) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Instant, &_m_Instant__truncatedTo, "truncatedTo", "(Ljava/time/temporal/TemporalUnit;)Ljava/time/Instant;"); if (_m_Instant__truncatedTo == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Instant__truncatedTo, temporalUnit); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Instant__plus = NULL; FFI_PLUGIN_EXPORT JniResult Instant__plus(jobject self_, jobject temporalAmount) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Instant, &_m_Instant__plus, "plus", "(Ljava/time/temporal/TemporalAmount;)Ljava/time/Instant;"); if (_m_Instant__plus == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Instant__plus, temporalAmount); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Instant__plus1 = NULL; FFI_PLUGIN_EXPORT JniResult Instant__plus1(jobject self_, int64_t j, jobject temporalUnit) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Instant, &_m_Instant__plus1, "plus", "(JLjava/time/temporal/TemporalUnit;)Ljava/time/Instant;"); if (_m_Instant__plus1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Instant__plus1, j, temporalUnit); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Instant__plusSeconds = NULL; FFI_PLUGIN_EXPORT JniResult Instant__plusSeconds(jobject self_, int64_t j) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Instant, &_m_Instant__plusSeconds, "plusSeconds", "(J)Ljava/time/Instant;"); if (_m_Instant__plusSeconds == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Instant__plusSeconds, j); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Instant__plusMillis = NULL; FFI_PLUGIN_EXPORT JniResult Instant__plusMillis(jobject self_, int64_t j) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Instant, &_m_Instant__plusMillis, "plusMillis", "(J)Ljava/time/Instant;"); if (_m_Instant__plusMillis == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Instant__plusMillis, j); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Instant__plusNanos = NULL; FFI_PLUGIN_EXPORT JniResult Instant__plusNanos(jobject self_, int64_t j) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Instant, &_m_Instant__plusNanos, "plusNanos", "(J)Ljava/time/Instant;"); if (_m_Instant__plusNanos == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Instant__plusNanos, j); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Instant__minus = NULL; FFI_PLUGIN_EXPORT JniResult Instant__minus(jobject self_, jobject temporalAmount) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Instant, &_m_Instant__minus, "minus", "(Ljava/time/temporal/TemporalAmount;)Ljava/time/Instant;"); if (_m_Instant__minus == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Instant__minus, temporalAmount); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Instant__minus1 = NULL; FFI_PLUGIN_EXPORT JniResult Instant__minus1(jobject self_, int64_t j, jobject temporalUnit) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Instant, &_m_Instant__minus1, "minus", "(JLjava/time/temporal/TemporalUnit;)Ljava/time/Instant;"); if (_m_Instant__minus1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Instant__minus1, j, temporalUnit); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Instant__minusSeconds = NULL; FFI_PLUGIN_EXPORT JniResult Instant__minusSeconds(jobject self_, int64_t j) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Instant, &_m_Instant__minusSeconds, "minusSeconds", "(J)Ljava/time/Instant;"); if (_m_Instant__minusSeconds == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Instant__minusSeconds, j); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Instant__minusMillis = NULL; FFI_PLUGIN_EXPORT JniResult Instant__minusMillis(jobject self_, int64_t j) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Instant, &_m_Instant__minusMillis, "minusMillis", "(J)Ljava/time/Instant;"); if (_m_Instant__minusMillis == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Instant__minusMillis, j); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Instant__minusNanos = NULL; FFI_PLUGIN_EXPORT JniResult Instant__minusNanos(jobject self_, int64_t j) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Instant, &_m_Instant__minusNanos, "minusNanos", "(J)Ljava/time/Instant;"); if (_m_Instant__minusNanos == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Instant__minusNanos, j); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Instant__query = NULL; FFI_PLUGIN_EXPORT JniResult Instant__query(jobject self_, jobject temporalQuery) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Instant, &_m_Instant__query, "query", "(Ljava/time/temporal/TemporalQuery;)Ljava/lang/Object;"); if (_m_Instant__query == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Instant__query, temporalQuery); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Instant__adjustInto = NULL; FFI_PLUGIN_EXPORT JniResult Instant__adjustInto(jobject self_, jobject temporal) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Instant, &_m_Instant__adjustInto, "adjustInto", "(Ljava/time/temporal/Temporal;)Ljava/time/temporal/Temporal;"); if (_m_Instant__adjustInto == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Instant__adjustInto, temporal); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Instant__until = NULL; @@ -11159,2141 +11375,986 @@ JniResult Instant__until(jobject self_, jobject temporal, jobject temporalUnit) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_Instant, &_m_Instant__until, "until", "(Ljava/time/temporal/Temporal;Ljava/time/temporal/TemporalUnit;)J"); if (_m_Instant__until == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; int64_t _result = (*jniEnv)->CallLongMethod(jniEnv, self_, _m_Instant__until, temporal, temporalUnit); - return (JniResult){.result = {.j = _result}, .exception = check_exception()}; + return (JniResult){.value = {.j = _result}, .exception = check_exception()}; } jmethodID _m_Instant__atOffset = NULL; FFI_PLUGIN_EXPORT JniResult Instant__atOffset(jobject self_, jobject zoneOffset) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Instant, &_m_Instant__atOffset, "atOffset", "(Ljava/time/ZoneOffset;)Ljava/time/OffsetDateTime;"); if (_m_Instant__atOffset == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Instant__atOffset, zoneOffset); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Instant__atZone = NULL; FFI_PLUGIN_EXPORT JniResult Instant__atZone(jobject self_, jobject zoneId) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Instant, &_m_Instant__atZone, "atZone", "(Ljava/time/ZoneId;)Ljava/time/ZonedDateTime;"); if (_m_Instant__atZone == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Instant__atZone, zoneId); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Instant__toEpochMilli = NULL; FFI_PLUGIN_EXPORT JniResult Instant__toEpochMilli(jobject self_) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Instant, &_m_Instant__toEpochMilli, "toEpochMilli", "()J"); if (_m_Instant__toEpochMilli == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; int64_t _result = (*jniEnv)->CallLongMethod(jniEnv, self_, _m_Instant__toEpochMilli); - return (JniResult){.result = {.j = _result}, .exception = check_exception()}; + return (JniResult){.value = {.j = _result}, .exception = check_exception()}; } jmethodID _m_Instant__compareTo = NULL; FFI_PLUGIN_EXPORT JniResult Instant__compareTo(jobject self_, jobject instant) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Instant, &_m_Instant__compareTo, "compareTo", "(Ljava/time/Instant;)I"); if (_m_Instant__compareTo == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; int32_t _result = (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Instant__compareTo, instant); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; + return (JniResult){.value = {.i = _result}, .exception = check_exception()}; } jmethodID _m_Instant__isAfter = NULL; FFI_PLUGIN_EXPORT JniResult Instant__isAfter(jobject self_, jobject instant) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Instant, &_m_Instant__isAfter, "isAfter", "(Ljava/time/Instant;)Z"); if (_m_Instant__isAfter == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Instant__isAfter, instant); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Instant__isBefore = NULL; FFI_PLUGIN_EXPORT JniResult Instant__isBefore(jobject self_, jobject instant) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Instant, &_m_Instant__isBefore, "isBefore", "(Ljava/time/Instant;)Z"); if (_m_Instant__isBefore == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Instant__isBefore, instant); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Instant__equals1 = NULL; FFI_PLUGIN_EXPORT JniResult Instant__equals1(jobject self_, jobject object) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Instant, &_m_Instant__equals1, "equals", "(Ljava/lang/Object;)Z"); if (_m_Instant__equals1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Instant__equals1, object); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_Instant__hashCode1 = NULL; FFI_PLUGIN_EXPORT JniResult Instant__hashCode1(jobject self_) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Instant, &_m_Instant__hashCode1, "hashCode", "()I"); if (_m_Instant__hashCode1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; int32_t _result = (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Instant__hashCode1); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; + return (JniResult){.value = {.i = _result}, .exception = check_exception()}; } jmethodID _m_Instant__toString1 = NULL; FFI_PLUGIN_EXPORT JniResult Instant__toString1(jobject self_) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Instant, &_m_Instant__toString1, "toString", "()Ljava/lang/String;"); if (_m_Instant__toString1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Instant__toString1); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Instant__minus2 = NULL; FFI_PLUGIN_EXPORT JniResult Instant__minus2(jobject self_, int64_t j, jobject temporalUnit) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_Instant, &_m_Instant__minus2, "minus", "(JLjava/time/temporal/TemporalUnit;)Ljava/time/temporal/Temporal;"); if (_m_Instant__minus2 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Instant__minus2, j, temporalUnit); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Instant__minus3 = NULL; FFI_PLUGIN_EXPORT JniResult Instant__minus3(jobject self_, jobject temporalAmount) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_Instant, &_m_Instant__minus3, "minus", "(Ljava/time/temporal/TemporalAmount;)Ljava/time/temporal/Temporal;"); if (_m_Instant__minus3 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Instant__minus3, temporalAmount); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Instant__plus2 = NULL; FFI_PLUGIN_EXPORT JniResult Instant__plus2(jobject self_, int64_t j, jobject temporalUnit) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_Instant, &_m_Instant__plus2, "plus", "(JLjava/time/temporal/TemporalUnit;)Ljava/time/temporal/Temporal;"); if (_m_Instant__plus2 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Instant__plus2, j, temporalUnit); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Instant__plus3 = NULL; FFI_PLUGIN_EXPORT JniResult Instant__plus3(jobject self_, jobject temporalAmount) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_Instant, &_m_Instant__plus3, "plus", "(Ljava/time/temporal/TemporalAmount;)Ljava/time/temporal/Temporal;"); if (_m_Instant__plus3 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Instant__plus3, temporalAmount); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Instant__with2 = NULL; FFI_PLUGIN_EXPORT JniResult Instant__with2(jobject self_, jobject temporalField, int64_t j) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_Instant, &_m_Instant__with2, "with", "(Ljava/time/temporal/TemporalField;J)Ljava/time/temporal/Temporal;"); if (_m_Instant__with2 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Instant__with2, temporalField, j); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Instant__with3 = NULL; FFI_PLUGIN_EXPORT JniResult Instant__with3(jobject self_, jobject temporalAdjuster) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( _c_Instant, &_m_Instant__with3, "with", "(Ljava/time/temporal/TemporalAdjuster;)Ljava/time/temporal/Temporal;"); if (_m_Instant__with3 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_Instant__with3, temporalAdjuster); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_Instant__compareTo1 = NULL; FFI_PLUGIN_EXPORT JniResult Instant__compareTo1(jobject self_, jobject object) { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_Instant, &_m_Instant__compareTo1, "compareTo", "(Ljava/lang/Object;)I"); if (_m_Instant__compareTo1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; int32_t _result = (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Instant__compareTo1, object); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; + return (JniResult){.value = {.i = _result}, .exception = check_exception()}; } jfieldID _f_Instant__EPOCH = NULL; FFI_PLUGIN_EXPORT JniResult get_Instant__EPOCH() { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_static_field(_c_Instant, &_f_Instant__EPOCH, "EPOCH", "Ljava/time/Instant;"); - jobject _result = to_global_ref( - (*jniEnv)->GetStaticObjectField(jniEnv, _c_Instant, _f_Instant__EPOCH)); - return (JniResult){.result = {.l = _result}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->GetStaticObjectField(jniEnv, _c_Instant, _f_Instant__EPOCH); + return to_global_ref_result(_result); } jfieldID _f_Instant__MAX = NULL; FFI_PLUGIN_EXPORT JniResult get_Instant__MAX() { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_static_field(_c_Instant, &_f_Instant__MAX, "MAX", "Ljava/time/Instant;"); - jobject _result = to_global_ref( - (*jniEnv)->GetStaticObjectField(jniEnv, _c_Instant, _f_Instant__MAX)); - return (JniResult){.result = {.l = _result}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->GetStaticObjectField(jniEnv, _c_Instant, _f_Instant__MAX); + return to_global_ref_result(_result); } jfieldID _f_Instant__MIN = NULL; FFI_PLUGIN_EXPORT JniResult get_Instant__MIN() { load_env(); - load_class_gr(&_c_Instant, "java/time/Instant"); + load_class_global_ref(&_c_Instant, "java/time/Instant"); if (_c_Instant == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_static_field(_c_Instant, &_f_Instant__MIN, "MIN", "Ljava/time/Instant;"); - jobject _result = to_global_ref( - (*jniEnv)->GetStaticObjectField(jniEnv, _c_Instant, _f_Instant__MIN)); - return (JniResult){.result = {.l = _result}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->GetStaticObjectField(jniEnv, _c_Instant, _f_Instant__MIN); + return to_global_ref_result(_result); } -// java.lang.Long -jclass _c_Long = NULL; +// androidx.health.connect.client.request.AggregateGroupByDurationRequest +jclass _c_AggregateGroupByDurationRequest = NULL; -jmethodID _m_Long__ctor = NULL; +jmethodID _m_AggregateGroupByDurationRequest__new0 = NULL; FFI_PLUGIN_EXPORT -JniResult Long__ctor(int64_t j) { +JniResult AggregateGroupByDurationRequest__new0(jobject set, + jobject timeRangeFilter, + jobject duration, + jobject set1) { load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_Long, &_m_Long__ctor, "", "(J)V"); - if (_m_Long__ctor == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = (*jniEnv)->NewObject(jniEnv, _c_Long, _m_Long__ctor, j); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + load_class_global_ref( + &_c_AggregateGroupByDurationRequest, + "androidx/health/connect/client/request/AggregateGroupByDurationRequest"); + if (_c_AggregateGroupByDurationRequest == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_AggregateGroupByDurationRequest, + &_m_AggregateGroupByDurationRequest__new0, "", + "(Ljava/util/Set;Landroidx/health/connect/client/time/" + "TimeRangeFilter;Ljava/time/Duration;Ljava/util/Set;)V"); + if (_m_AggregateGroupByDurationRequest__new0 == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->NewObject(jniEnv, _c_AggregateGroupByDurationRequest, + _m_AggregateGroupByDurationRequest__new0, set, + timeRangeFilter, duration, set1); + return to_global_ref_result(_result); } -jmethodID _m_Long__ctor1 = NULL; +jmethodID _m_AggregateGroupByDurationRequest__new1 = NULL; FFI_PLUGIN_EXPORT -JniResult Long__ctor1(jobject string) { +JniResult AggregateGroupByDurationRequest__new1( + jobject set, + jobject timeRangeFilter, + jobject duration, + jobject set1, + int32_t i, + jobject defaultConstructorMarker) { load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_Long, &_m_Long__ctor1, "", "(Ljava/lang/String;)V"); - if (_m_Long__ctor1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = - (*jniEnv)->NewObject(jniEnv, _c_Long, _m_Long__ctor1, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + load_class_global_ref( + &_c_AggregateGroupByDurationRequest, + "androidx/health/connect/client/request/AggregateGroupByDurationRequest"); + if (_c_AggregateGroupByDurationRequest == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_AggregateGroupByDurationRequest, + &_m_AggregateGroupByDurationRequest__new1, "", + "(Ljava/util/Set;Landroidx/health/connect/client/time/" + "TimeRangeFilter;Ljava/time/Duration;Ljava/util/Set;ILkotlin/jvm/" + "internal/DefaultConstructorMarker;)V"); + if (_m_AggregateGroupByDurationRequest__new1 == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->NewObject( + jniEnv, _c_AggregateGroupByDurationRequest, + _m_AggregateGroupByDurationRequest__new1, set, timeRangeFilter, duration, + set1, i, defaultConstructorMarker); + return to_global_ref_result(_result); } -jmethodID _m_Long__toString1 = NULL; +// androidx.health.connect.client.request.AggregateGroupByPeriodRequest +jclass _c_AggregateGroupByPeriodRequest = NULL; + +jmethodID _m_AggregateGroupByPeriodRequest__new0 = NULL; FFI_PLUGIN_EXPORT -JniResult Long__toString1(int64_t j, int32_t i) { +JniResult AggregateGroupByPeriodRequest__new0(jobject set, + jobject timeRangeFilter, + jobject period, + jobject set1) { load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Long, &_m_Long__toString1, "toString", - "(JI)Ljava/lang/String;"); - if (_m_Long__toString1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = (*jniEnv)->CallStaticObjectMethod(jniEnv, _c_Long, - _m_Long__toString1, j, i); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + load_class_global_ref( + &_c_AggregateGroupByPeriodRequest, + "androidx/health/connect/client/request/AggregateGroupByPeriodRequest"); + if (_c_AggregateGroupByPeriodRequest == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_AggregateGroupByPeriodRequest, + &_m_AggregateGroupByPeriodRequest__new0, "", + "(Ljava/util/Set;Landroidx/health/connect/client/time/" + "TimeRangeFilter;Ljava/time/Period;Ljava/util/Set;)V"); + if (_m_AggregateGroupByPeriodRequest__new0 == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + jobject _result = + (*jniEnv)->NewObject(jniEnv, _c_AggregateGroupByPeriodRequest, + _m_AggregateGroupByPeriodRequest__new0, set, + timeRangeFilter, period, set1); + return to_global_ref_result(_result); } -jmethodID _m_Long__toUnsignedString = NULL; +jmethodID _m_AggregateGroupByPeriodRequest__new1 = NULL; FFI_PLUGIN_EXPORT -JniResult Long__toUnsignedString(int64_t j, int32_t i) { +JniResult AggregateGroupByPeriodRequest__new1( + jobject set, + jobject timeRangeFilter, + jobject period, + jobject set1, + int32_t i, + jobject defaultConstructorMarker) { load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Long, &_m_Long__toUnsignedString, "toUnsignedString", - "(JI)Ljava/lang/String;"); - if (_m_Long__toUnsignedString == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = (*jniEnv)->CallStaticObjectMethod( - jniEnv, _c_Long, _m_Long__toUnsignedString, j, i); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + load_class_global_ref( + &_c_AggregateGroupByPeriodRequest, + "androidx/health/connect/client/request/AggregateGroupByPeriodRequest"); + if (_c_AggregateGroupByPeriodRequest == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_AggregateGroupByPeriodRequest, + &_m_AggregateGroupByPeriodRequest__new1, "", + "(Ljava/util/Set;Landroidx/health/connect/client/time/" + "TimeRangeFilter;Ljava/time/Period;Ljava/util/Set;ILkotlin/jvm/" + "internal/DefaultConstructorMarker;)V"); + if (_m_AggregateGroupByPeriodRequest__new1 == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->NewObject( + jniEnv, _c_AggregateGroupByPeriodRequest, + _m_AggregateGroupByPeriodRequest__new1, set, timeRangeFilter, period, + set1, i, defaultConstructorMarker); + return to_global_ref_result(_result); } -jmethodID _m_Long__toHexString = NULL; +// androidx.health.connect.client.request.AggregateRequest +jclass _c_AggregateRequest = NULL; + +jmethodID _m_AggregateRequest__new0 = NULL; FFI_PLUGIN_EXPORT -JniResult Long__toHexString(int64_t j) { +JniResult AggregateRequest__new0(jobject set, + jobject timeRangeFilter, + jobject set1) { load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Long, &_m_Long__toHexString, "toHexString", - "(J)Ljava/lang/String;"); - if (_m_Long__toHexString == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = (*jniEnv)->CallStaticObjectMethod(jniEnv, _c_Long, - _m_Long__toHexString, j); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + load_class_global_ref( + &_c_AggregateRequest, + "androidx/health/connect/client/request/AggregateRequest"); + if (_c_AggregateRequest == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_AggregateRequest, &_m_AggregateRequest__new0, "", + "(Ljava/util/Set;Landroidx/health/connect/client/time/" + "TimeRangeFilter;Ljava/util/Set;)V"); + if (_m_AggregateRequest__new0 == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->NewObject(jniEnv, _c_AggregateRequest, + _m_AggregateRequest__new0, set, + timeRangeFilter, set1); + return to_global_ref_result(_result); } -jmethodID _m_Long__toOctalString = NULL; +jmethodID _m_AggregateRequest__new1 = NULL; FFI_PLUGIN_EXPORT -JniResult Long__toOctalString(int64_t j) { +JniResult AggregateRequest__new1(jobject set, + jobject timeRangeFilter, + jobject set1, + int32_t i, + jobject defaultConstructorMarker) { load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Long, &_m_Long__toOctalString, "toOctalString", - "(J)Ljava/lang/String;"); - if (_m_Long__toOctalString == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = (*jniEnv)->CallStaticObjectMethod( - jniEnv, _c_Long, _m_Long__toOctalString, j); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + load_class_global_ref( + &_c_AggregateRequest, + "androidx/health/connect/client/request/AggregateRequest"); + if (_c_AggregateRequest == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_AggregateRequest, &_m_AggregateRequest__new1, "", + "(Ljava/util/Set;Landroidx/health/connect/client/time/" + "TimeRangeFilter;Ljava/util/Set;ILkotlin/jvm/internal/" + "DefaultConstructorMarker;)V"); + if (_m_AggregateRequest__new1 == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->NewObject( + jniEnv, _c_AggregateRequest, _m_AggregateRequest__new1, set, + timeRangeFilter, set1, i, defaultConstructorMarker); + return to_global_ref_result(_result); } -jmethodID _m_Long__toBinaryString = NULL; +// androidx.health.connect.client.request.ChangesTokenRequest +jclass _c_ChangesTokenRequest = NULL; + +jmethodID _m_ChangesTokenRequest__new0 = NULL; FFI_PLUGIN_EXPORT -JniResult Long__toBinaryString(int64_t j) { +JniResult ChangesTokenRequest__new0(jobject set, jobject set1) { load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Long, &_m_Long__toBinaryString, "toBinaryString", - "(J)Ljava/lang/String;"); - if (_m_Long__toBinaryString == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = (*jniEnv)->CallStaticObjectMethod( - jniEnv, _c_Long, _m_Long__toBinaryString, j); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + load_class_global_ref( + &_c_ChangesTokenRequest, + "androidx/health/connect/client/request/ChangesTokenRequest"); + if (_c_ChangesTokenRequest == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_ChangesTokenRequest, &_m_ChangesTokenRequest__new0, "", + "(Ljava/util/Set;Ljava/util/Set;)V"); + if (_m_ChangesTokenRequest__new0 == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->NewObject( + jniEnv, _c_ChangesTokenRequest, _m_ChangesTokenRequest__new0, set, set1); + return to_global_ref_result(_result); } -jmethodID _m_Long__toString2 = NULL; +jmethodID _m_ChangesTokenRequest__new1 = NULL; FFI_PLUGIN_EXPORT -JniResult Long__toString2(int64_t j) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Long, &_m_Long__toString2, "toString", - "(J)Ljava/lang/String;"); - if (_m_Long__toString2 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = - (*jniEnv)->CallStaticObjectMethod(jniEnv, _c_Long, _m_Long__toString2, j); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; -} - -jmethodID _m_Long__toUnsignedString1 = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__toUnsignedString1(int64_t j) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Long, &_m_Long__toUnsignedString1, "toUnsignedString", - "(J)Ljava/lang/String;"); - if (_m_Long__toUnsignedString1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = (*jniEnv)->CallStaticObjectMethod( - jniEnv, _c_Long, _m_Long__toUnsignedString1, j); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; -} - -jmethodID _m_Long__parseLong = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__parseLong(jobject string, int32_t i) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Long, &_m_Long__parseLong, "parseLong", - "(Ljava/lang/String;I)J"); - if (_m_Long__parseLong == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - int64_t _result = (*jniEnv)->CallStaticLongMethod( - jniEnv, _c_Long, _m_Long__parseLong, string, i); - return (JniResult){.result = {.j = _result}, .exception = check_exception()}; -} - -jmethodID _m_Long__parseLong1 = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__parseLong1(jobject charSequence, - int32_t i, - int32_t i1, - int32_t i2) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Long, &_m_Long__parseLong1, "parseLong", - "(Ljava/lang/CharSequence;III)J"); - if (_m_Long__parseLong1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - int64_t _result = (*jniEnv)->CallStaticLongMethod( - jniEnv, _c_Long, _m_Long__parseLong1, charSequence, i, i1, i2); - return (JniResult){.result = {.j = _result}, .exception = check_exception()}; -} - -jmethodID _m_Long__parseLong2 = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__parseLong2(jobject string) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Long, &_m_Long__parseLong2, "parseLong", - "(Ljava/lang/String;)J"); - if (_m_Long__parseLong2 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - int64_t _result = (*jniEnv)->CallStaticLongMethod( - jniEnv, _c_Long, _m_Long__parseLong2, string); - return (JniResult){.result = {.j = _result}, .exception = check_exception()}; -} - -jmethodID _m_Long__parseUnsignedLong = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__parseUnsignedLong(jobject string, int32_t i) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Long, &_m_Long__parseUnsignedLong, "parseUnsignedLong", - "(Ljava/lang/String;I)J"); - if (_m_Long__parseUnsignedLong == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - int64_t _result = (*jniEnv)->CallStaticLongMethod( - jniEnv, _c_Long, _m_Long__parseUnsignedLong, string, i); - return (JniResult){.result = {.j = _result}, .exception = check_exception()}; -} - -jmethodID _m_Long__parseUnsignedLong1 = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__parseUnsignedLong1(jobject charSequence, - int32_t i, - int32_t i1, - int32_t i2) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Long, &_m_Long__parseUnsignedLong1, "parseUnsignedLong", - "(Ljava/lang/CharSequence;III)J"); - if (_m_Long__parseUnsignedLong1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - int64_t _result = (*jniEnv)->CallStaticLongMethod( - jniEnv, _c_Long, _m_Long__parseUnsignedLong1, charSequence, i, i1, i2); - return (JniResult){.result = {.j = _result}, .exception = check_exception()}; -} - -jmethodID _m_Long__parseUnsignedLong2 = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__parseUnsignedLong2(jobject string) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Long, &_m_Long__parseUnsignedLong2, "parseUnsignedLong", - "(Ljava/lang/String;)J"); - if (_m_Long__parseUnsignedLong2 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - int64_t _result = (*jniEnv)->CallStaticLongMethod( - jniEnv, _c_Long, _m_Long__parseUnsignedLong2, string); - return (JniResult){.result = {.j = _result}, .exception = check_exception()}; -} - -jmethodID _m_Long__valueOf = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__valueOf(jobject string, int32_t i) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Long, &_m_Long__valueOf, "valueOf", - "(Ljava/lang/String;I)Ljava/lang/Long;"); - if (_m_Long__valueOf == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = (*jniEnv)->CallStaticObjectMethod( - jniEnv, _c_Long, _m_Long__valueOf, string, i); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; -} - -jmethodID _m_Long__valueOf1 = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__valueOf1(jobject string) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Long, &_m_Long__valueOf1, "valueOf", - "(Ljava/lang/String;)Ljava/lang/Long;"); - if (_m_Long__valueOf1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = (*jniEnv)->CallStaticObjectMethod( - jniEnv, _c_Long, _m_Long__valueOf1, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; -} - -jmethodID _m_Long__valueOf2 = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__valueOf2(int64_t j) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Long, &_m_Long__valueOf2, "valueOf", - "(J)Ljava/lang/Long;"); - if (_m_Long__valueOf2 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = - (*jniEnv)->CallStaticObjectMethod(jniEnv, _c_Long, _m_Long__valueOf2, j); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; -} - -jmethodID _m_Long__decode = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__decode(jobject string) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Long, &_m_Long__decode, "decode", - "(Ljava/lang/String;)Ljava/lang/Long;"); - if (_m_Long__decode == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = (*jniEnv)->CallStaticObjectMethod(jniEnv, _c_Long, - _m_Long__decode, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; -} - -jmethodID _m_Long__byteValue = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__byteValue(jobject self_) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_Long, &_m_Long__byteValue, "byteValue", "()B"); - if (_m_Long__byteValue == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - int8_t _result = (*jniEnv)->CallByteMethod(jniEnv, self_, _m_Long__byteValue); - return (JniResult){.result = {.b = _result}, .exception = check_exception()}; -} - -jmethodID _m_Long__shortValue = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__shortValue(jobject self_) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_Long, &_m_Long__shortValue, "shortValue", "()S"); - if (_m_Long__shortValue == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - int16_t _result = - (*jniEnv)->CallShortMethod(jniEnv, self_, _m_Long__shortValue); - return (JniResult){.result = {.s = _result}, .exception = check_exception()}; -} - -jmethodID _m_Long__intValue = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__intValue(jobject self_) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_Long, &_m_Long__intValue, "intValue", "()I"); - if (_m_Long__intValue == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - int32_t _result = (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Long__intValue); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; -} - -jmethodID _m_Long__longValue = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__longValue(jobject self_) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_Long, &_m_Long__longValue, "longValue", "()J"); - if (_m_Long__longValue == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - int64_t _result = - (*jniEnv)->CallLongMethod(jniEnv, self_, _m_Long__longValue); - return (JniResult){.result = {.j = _result}, .exception = check_exception()}; -} - -jmethodID _m_Long__floatValue = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__floatValue(jobject self_) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_Long, &_m_Long__floatValue, "floatValue", "()F"); - if (_m_Long__floatValue == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - float _result = - (*jniEnv)->CallFloatMethod(jniEnv, self_, _m_Long__floatValue); - return (JniResult){.result = {.f = _result}, .exception = check_exception()}; -} - -jmethodID _m_Long__doubleValue = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__doubleValue(jobject self_) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_Long, &_m_Long__doubleValue, "doubleValue", "()D"); - if (_m_Long__doubleValue == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - double _result = - (*jniEnv)->CallDoubleMethod(jniEnv, self_, _m_Long__doubleValue); - return (JniResult){.result = {.d = _result}, .exception = check_exception()}; -} - -jmethodID _m_Long__toString3 = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__toString3(jobject self_) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_Long, &_m_Long__toString3, "toString", "()Ljava/lang/String;"); - if (_m_Long__toString3 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = - (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Long__toString3); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; -} - -jmethodID _m_Long__hashCode1 = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__hashCode1(jobject self_) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_Long, &_m_Long__hashCode1, "hashCode", "()I"); - if (_m_Long__hashCode1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - int32_t _result = (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Long__hashCode1); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; -} - -jmethodID _m_Long__hashCode2 = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__hashCode2(int64_t j) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Long, &_m_Long__hashCode2, "hashCode", "(J)I"); - if (_m_Long__hashCode2 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - int32_t _result = - (*jniEnv)->CallStaticIntMethod(jniEnv, _c_Long, _m_Long__hashCode2, j); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; -} - -jmethodID _m_Long__equals1 = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__equals1(jobject self_, jobject object) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_Long, &_m_Long__equals1, "equals", "(Ljava/lang/Object;)Z"); - if (_m_Long__equals1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - uint8_t _result = - (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Long__equals1, object); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; -} - -jmethodID _m_Long__getLong = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__getLong(jobject string) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Long, &_m_Long__getLong, "getLong", - "(Ljava/lang/String;)Ljava/lang/Long;"); - if (_m_Long__getLong == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = (*jniEnv)->CallStaticObjectMethod(jniEnv, _c_Long, - _m_Long__getLong, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; -} - -jmethodID _m_Long__getLong1 = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__getLong1(jobject string, int64_t j) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Long, &_m_Long__getLong1, "getLong", - "(Ljava/lang/String;J)Ljava/lang/Long;"); - if (_m_Long__getLong1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = (*jniEnv)->CallStaticObjectMethod( - jniEnv, _c_Long, _m_Long__getLong1, string, j); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; -} - -jmethodID _m_Long__getLong2 = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__getLong2(jobject string, jobject long0) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Long, &_m_Long__getLong2, "getLong", - "(Ljava/lang/String;Ljava/lang/Long;)Ljava/lang/Long;"); - if (_m_Long__getLong2 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = (*jniEnv)->CallStaticObjectMethod( - jniEnv, _c_Long, _m_Long__getLong2, string, long0); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; -} - -jmethodID _m_Long__compareTo = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__compareTo(jobject self_, jobject long0) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_Long, &_m_Long__compareTo, "compareTo", "(Ljava/lang/Long;)I"); - if (_m_Long__compareTo == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - int32_t _result = - (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Long__compareTo, long0); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; -} - -jmethodID _m_Long__compare = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__compare(int64_t j, int64_t j1) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Long, &_m_Long__compare, "compare", "(JJ)I"); - if (_m_Long__compare == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - int32_t _result = - (*jniEnv)->CallStaticIntMethod(jniEnv, _c_Long, _m_Long__compare, j, j1); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; -} - -jmethodID _m_Long__compareUnsigned = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__compareUnsigned(int64_t j, int64_t j1) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Long, &_m_Long__compareUnsigned, "compareUnsigned", - "(JJ)I"); - if (_m_Long__compareUnsigned == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - int32_t _result = (*jniEnv)->CallStaticIntMethod( - jniEnv, _c_Long, _m_Long__compareUnsigned, j, j1); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; -} - -jmethodID _m_Long__divideUnsigned = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__divideUnsigned(int64_t j, int64_t j1) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Long, &_m_Long__divideUnsigned, "divideUnsigned", - "(JJ)J"); - if (_m_Long__divideUnsigned == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - int64_t _result = (*jniEnv)->CallStaticLongMethod( - jniEnv, _c_Long, _m_Long__divideUnsigned, j, j1); - return (JniResult){.result = {.j = _result}, .exception = check_exception()}; -} - -jmethodID _m_Long__remainderUnsigned = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__remainderUnsigned(int64_t j, int64_t j1) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Long, &_m_Long__remainderUnsigned, "remainderUnsigned", - "(JJ)J"); - if (_m_Long__remainderUnsigned == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - int64_t _result = (*jniEnv)->CallStaticLongMethod( - jniEnv, _c_Long, _m_Long__remainderUnsigned, j, j1); - return (JniResult){.result = {.j = _result}, .exception = check_exception()}; -} - -jmethodID _m_Long__highestOneBit = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__highestOneBit(int64_t j) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Long, &_m_Long__highestOneBit, "highestOneBit", "(J)J"); - if (_m_Long__highestOneBit == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - int64_t _result = (*jniEnv)->CallStaticLongMethod(jniEnv, _c_Long, - _m_Long__highestOneBit, j); - return (JniResult){.result = {.j = _result}, .exception = check_exception()}; -} - -jmethodID _m_Long__lowestOneBit = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__lowestOneBit(int64_t j) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Long, &_m_Long__lowestOneBit, "lowestOneBit", "(J)J"); - if (_m_Long__lowestOneBit == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - int64_t _result = (*jniEnv)->CallStaticLongMethod(jniEnv, _c_Long, - _m_Long__lowestOneBit, j); - return (JniResult){.result = {.j = _result}, .exception = check_exception()}; -} - -jmethodID _m_Long__numberOfLeadingZeros = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__numberOfLeadingZeros(int64_t j) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Long, &_m_Long__numberOfLeadingZeros, - "numberOfLeadingZeros", "(J)I"); - if (_m_Long__numberOfLeadingZeros == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - int32_t _result = (*jniEnv)->CallStaticIntMethod( - jniEnv, _c_Long, _m_Long__numberOfLeadingZeros, j); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; -} - -jmethodID _m_Long__numberOfTrailingZeros = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__numberOfTrailingZeros(int64_t j) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Long, &_m_Long__numberOfTrailingZeros, - "numberOfTrailingZeros", "(J)I"); - if (_m_Long__numberOfTrailingZeros == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - int32_t _result = (*jniEnv)->CallStaticIntMethod( - jniEnv, _c_Long, _m_Long__numberOfTrailingZeros, j); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; -} - -jmethodID _m_Long__bitCount = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__bitCount(int64_t j) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Long, &_m_Long__bitCount, "bitCount", "(J)I"); - if (_m_Long__bitCount == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - int32_t _result = - (*jniEnv)->CallStaticIntMethod(jniEnv, _c_Long, _m_Long__bitCount, j); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; -} - -jmethodID _m_Long__rotateLeft = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__rotateLeft(int64_t j, int32_t i) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Long, &_m_Long__rotateLeft, "rotateLeft", "(JI)J"); - if (_m_Long__rotateLeft == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - int64_t _result = (*jniEnv)->CallStaticLongMethod(jniEnv, _c_Long, - _m_Long__rotateLeft, j, i); - return (JniResult){.result = {.j = _result}, .exception = check_exception()}; -} - -jmethodID _m_Long__rotateRight = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__rotateRight(int64_t j, int32_t i) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Long, &_m_Long__rotateRight, "rotateRight", "(JI)J"); - if (_m_Long__rotateRight == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - int64_t _result = (*jniEnv)->CallStaticLongMethod(jniEnv, _c_Long, - _m_Long__rotateRight, j, i); - return (JniResult){.result = {.j = _result}, .exception = check_exception()}; -} - -jmethodID _m_Long__reverse = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__reverse(int64_t j) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Long, &_m_Long__reverse, "reverse", "(J)J"); - if (_m_Long__reverse == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - int64_t _result = - (*jniEnv)->CallStaticLongMethod(jniEnv, _c_Long, _m_Long__reverse, j); - return (JniResult){.result = {.j = _result}, .exception = check_exception()}; -} - -jmethodID _m_Long__signum = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__signum(int64_t j) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Long, &_m_Long__signum, "signum", "(J)I"); - if (_m_Long__signum == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - int32_t _result = - (*jniEnv)->CallStaticIntMethod(jniEnv, _c_Long, _m_Long__signum, j); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; -} - -jmethodID _m_Long__reverseBytes = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__reverseBytes(int64_t j) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Long, &_m_Long__reverseBytes, "reverseBytes", "(J)J"); - if (_m_Long__reverseBytes == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - int64_t _result = (*jniEnv)->CallStaticLongMethod(jniEnv, _c_Long, - _m_Long__reverseBytes, j); - return (JniResult){.result = {.j = _result}, .exception = check_exception()}; -} - -jmethodID _m_Long__sum = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__sum(int64_t j, int64_t j1) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Long, &_m_Long__sum, "sum", "(JJ)J"); - if (_m_Long__sum == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - int64_t _result = - (*jniEnv)->CallStaticLongMethod(jniEnv, _c_Long, _m_Long__sum, j, j1); - return (JniResult){.result = {.j = _result}, .exception = check_exception()}; -} - -jmethodID _m_Long__max = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__max(int64_t j, int64_t j1) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Long, &_m_Long__max, "max", "(JJ)J"); - if (_m_Long__max == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - int64_t _result = - (*jniEnv)->CallStaticLongMethod(jniEnv, _c_Long, _m_Long__max, j, j1); - return (JniResult){.result = {.j = _result}, .exception = check_exception()}; -} - -jmethodID _m_Long__min = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__min(int64_t j, int64_t j1) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Long, &_m_Long__min, "min", "(JJ)J"); - if (_m_Long__min == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - int64_t _result = - (*jniEnv)->CallStaticLongMethod(jniEnv, _c_Long, _m_Long__min, j, j1); - return (JniResult){.result = {.j = _result}, .exception = check_exception()}; -} - -jmethodID _m_Long__compareTo1 = NULL; -FFI_PLUGIN_EXPORT -JniResult Long__compareTo1(jobject self_, jobject object) { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_Long, &_m_Long__compareTo1, "compareTo", - "(Ljava/lang/Object;)I"); - if (_m_Long__compareTo1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - int32_t _result = - (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Long__compareTo1, object); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; -} - -jfieldID _f_Long__TYPE = NULL; -FFI_PLUGIN_EXPORT -JniResult get_Long__TYPE() { - load_env(); - load_class_gr(&_c_Long, "java/lang/Long"); - if (_c_Long == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_field(_c_Long, &_f_Long__TYPE, "TYPE", "Ljava/lang/Class;"); - jobject _result = to_global_ref( - (*jniEnv)->GetStaticObjectField(jniEnv, _c_Long, _f_Long__TYPE)); - return (JniResult){.result = {.l = _result}, .exception = check_exception()}; -} - -// java.util.Set -jclass _c_Set = NULL; - -jmethodID _m_Set__size = NULL; -FFI_PLUGIN_EXPORT -JniResult Set__size(jobject self_) { - load_env(); - load_class_gr(&_c_Set, "java/util/Set"); - if (_c_Set == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_Set, &_m_Set__size, "size", "()I"); - if (_m_Set__size == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - int32_t _result = (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Set__size); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; -} - -jmethodID _m_Set__isEmpty = NULL; -FFI_PLUGIN_EXPORT -JniResult Set__isEmpty(jobject self_) { - load_env(); - load_class_gr(&_c_Set, "java/util/Set"); - if (_c_Set == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_Set, &_m_Set__isEmpty, "isEmpty", "()Z"); - if (_m_Set__isEmpty == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - uint8_t _result = - (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Set__isEmpty); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; -} - -jmethodID _m_Set__contains = NULL; -FFI_PLUGIN_EXPORT -JniResult Set__contains(jobject self_, jobject object) { - load_env(); - load_class_gr(&_c_Set, "java/util/Set"); - if (_c_Set == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_Set, &_m_Set__contains, "contains", "(Ljava/lang/Object;)Z"); - if (_m_Set__contains == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - uint8_t _result = - (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Set__contains, object); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; -} - -jmethodID _m_Set__iterator = NULL; -FFI_PLUGIN_EXPORT -JniResult Set__iterator(jobject self_) { - load_env(); - load_class_gr(&_c_Set, "java/util/Set"); - if (_c_Set == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_Set, &_m_Set__iterator, "iterator", "()Ljava/util/Iterator;"); - if (_m_Set__iterator == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = - (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Set__iterator); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; -} - -jmethodID _m_Set__toArray = NULL; -FFI_PLUGIN_EXPORT -JniResult Set__toArray(jobject self_) { - load_env(); - load_class_gr(&_c_Set, "java/util/Set"); - if (_c_Set == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_Set, &_m_Set__toArray, "toArray", "()[Ljava/lang/Object;"); - if (_m_Set__toArray == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Set__toArray); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; -} - -jmethodID _m_Set__toArray1 = NULL; -FFI_PLUGIN_EXPORT -JniResult Set__toArray1(jobject self_, jobject objects) { - load_env(); - load_class_gr(&_c_Set, "java/util/Set"); - if (_c_Set == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_Set, &_m_Set__toArray1, "toArray", - "([Ljava/lang/Object;)[Ljava/lang/Object;"); - if (_m_Set__toArray1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = - (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Set__toArray1, objects); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; -} - -jmethodID _m_Set__add = NULL; -FFI_PLUGIN_EXPORT -JniResult Set__add(jobject self_, jobject object) { - load_env(); - load_class_gr(&_c_Set, "java/util/Set"); - if (_c_Set == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_Set, &_m_Set__add, "add", "(Ljava/lang/Object;)Z"); - if (_m_Set__add == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - uint8_t _result = - (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Set__add, object); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; -} - -jmethodID _m_Set__remove = NULL; -FFI_PLUGIN_EXPORT -JniResult Set__remove(jobject self_, jobject object) { - load_env(); - load_class_gr(&_c_Set, "java/util/Set"); - if (_c_Set == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_Set, &_m_Set__remove, "remove", "(Ljava/lang/Object;)Z"); - if (_m_Set__remove == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - uint8_t _result = - (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Set__remove, object); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; -} - -jmethodID _m_Set__containsAll = NULL; -FFI_PLUGIN_EXPORT -JniResult Set__containsAll(jobject self_, jobject collection) { - load_env(); - load_class_gr(&_c_Set, "java/util/Set"); - if (_c_Set == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_Set, &_m_Set__containsAll, "containsAll", - "(Ljava/util/Collection;)Z"); - if (_m_Set__containsAll == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - uint8_t _result = (*jniEnv)->CallBooleanMethod( - jniEnv, self_, _m_Set__containsAll, collection); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; -} - -jmethodID _m_Set__addAll = NULL; -FFI_PLUGIN_EXPORT -JniResult Set__addAll(jobject self_, jobject collection) { - load_env(); - load_class_gr(&_c_Set, "java/util/Set"); - if (_c_Set == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_Set, &_m_Set__addAll, "addAll", "(Ljava/util/Collection;)Z"); - if (_m_Set__addAll == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - uint8_t _result = - (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Set__addAll, collection); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; -} - -jmethodID _m_Set__retainAll = NULL; -FFI_PLUGIN_EXPORT -JniResult Set__retainAll(jobject self_, jobject collection) { - load_env(); - load_class_gr(&_c_Set, "java/util/Set"); - if (_c_Set == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_Set, &_m_Set__retainAll, "retainAll", - "(Ljava/util/Collection;)Z"); - if (_m_Set__retainAll == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - uint8_t _result = (*jniEnv)->CallBooleanMethod(jniEnv, self_, - _m_Set__retainAll, collection); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; -} - -jmethodID _m_Set__removeAll = NULL; -FFI_PLUGIN_EXPORT -JniResult Set__removeAll(jobject self_, jobject collection) { - load_env(); - load_class_gr(&_c_Set, "java/util/Set"); - if (_c_Set == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_Set, &_m_Set__removeAll, "removeAll", - "(Ljava/util/Collection;)Z"); - if (_m_Set__removeAll == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - uint8_t _result = (*jniEnv)->CallBooleanMethod(jniEnv, self_, - _m_Set__removeAll, collection); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; -} - -jmethodID _m_Set__clear = NULL; -FFI_PLUGIN_EXPORT -JniResult Set__clear(jobject self_) { - load_env(); - load_class_gr(&_c_Set, "java/util/Set"); - if (_c_Set == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_Set, &_m_Set__clear, "clear", "()V"); - if (_m_Set__clear == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - (*jniEnv)->CallVoidMethod(jniEnv, self_, _m_Set__clear); - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; -} - -jmethodID _m_Set__equals1 = NULL; -FFI_PLUGIN_EXPORT -JniResult Set__equals1(jobject self_, jobject object) { - load_env(); - load_class_gr(&_c_Set, "java/util/Set"); - if (_c_Set == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_Set, &_m_Set__equals1, "equals", "(Ljava/lang/Object;)Z"); - if (_m_Set__equals1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - uint8_t _result = - (*jniEnv)->CallBooleanMethod(jniEnv, self_, _m_Set__equals1, object); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; -} - -jmethodID _m_Set__hashCode1 = NULL; -FFI_PLUGIN_EXPORT -JniResult Set__hashCode1(jobject self_) { - load_env(); - load_class_gr(&_c_Set, "java/util/Set"); - if (_c_Set == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_Set, &_m_Set__hashCode1, "hashCode", "()I"); - if (_m_Set__hashCode1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - int32_t _result = (*jniEnv)->CallIntMethod(jniEnv, self_, _m_Set__hashCode1); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; -} - -jmethodID _m_Set__spliterator = NULL; -FFI_PLUGIN_EXPORT -JniResult Set__spliterator(jobject self_) { - load_env(); - load_class_gr(&_c_Set, "java/util/Set"); - if (_c_Set == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_Set, &_m_Set__spliterator, "spliterator", - "()Ljava/util/Spliterator;"); - if (_m_Set__spliterator == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = - (*jniEnv)->CallObjectMethod(jniEnv, self_, _m_Set__spliterator); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; -} - -jmethodID _m_Set__of = NULL; -FFI_PLUGIN_EXPORT -JniResult Set__of() { - load_env(); - load_class_gr(&_c_Set, "java/util/Set"); - if (_c_Set == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Set, &_m_Set__of, "of", "()Ljava/util/Set;"); - if (_m_Set__of == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = - (*jniEnv)->CallStaticObjectMethod(jniEnv, _c_Set, _m_Set__of); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; -} - -jmethodID _m_Set__of1 = NULL; -FFI_PLUGIN_EXPORT -JniResult Set__of1(jobject object) { - load_env(); - load_class_gr(&_c_Set, "java/util/Set"); - if (_c_Set == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Set, &_m_Set__of1, "of", - "(Ljava/lang/Object;)Ljava/util/Set;"); - if (_m_Set__of1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = - (*jniEnv)->CallStaticObjectMethod(jniEnv, _c_Set, _m_Set__of1, object); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; -} - -jmethodID _m_Set__of2 = NULL; -FFI_PLUGIN_EXPORT -JniResult Set__of2(jobject object, jobject object1) { - load_env(); - load_class_gr(&_c_Set, "java/util/Set"); - if (_c_Set == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Set, &_m_Set__of2, "of", - "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Set;"); - if (_m_Set__of2 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = (*jniEnv)->CallStaticObjectMethod( - jniEnv, _c_Set, _m_Set__of2, object, object1); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; -} - -jmethodID _m_Set__of3 = NULL; -FFI_PLUGIN_EXPORT -JniResult Set__of3(jobject object, jobject object1, jobject object2) { - load_env(); - load_class_gr(&_c_Set, "java/util/Set"); - if (_c_Set == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Set, &_m_Set__of3, "of", - "(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/" - "Object;)Ljava/util/Set;"); - if (_m_Set__of3 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = (*jniEnv)->CallStaticObjectMethod( - jniEnv, _c_Set, _m_Set__of3, object, object1, object2); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; -} - -jmethodID _m_Set__of4 = NULL; -FFI_PLUGIN_EXPORT -JniResult Set__of4(jobject object, - jobject object1, - jobject object2, - jobject object3) { - load_env(); - load_class_gr(&_c_Set, "java/util/Set"); - if (_c_Set == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Set, &_m_Set__of4, "of", - "(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/" - "Object;Ljava/lang/Object;)Ljava/util/Set;"); - if (_m_Set__of4 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = (*jniEnv)->CallStaticObjectMethod( - jniEnv, _c_Set, _m_Set__of4, object, object1, object2, object3); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; -} - -jmethodID _m_Set__of5 = NULL; -FFI_PLUGIN_EXPORT -JniResult Set__of5(jobject object, - jobject object1, - jobject object2, - jobject object3, - jobject object4) { - load_env(); - load_class_gr(&_c_Set, "java/util/Set"); - if (_c_Set == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method( - _c_Set, &_m_Set__of5, "of", - "(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/" - "Object;Ljava/lang/Object;)Ljava/util/Set;"); - if (_m_Set__of5 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = (*jniEnv)->CallStaticObjectMethod( - jniEnv, _c_Set, _m_Set__of5, object, object1, object2, object3, object4); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; -} - -jmethodID _m_Set__of6 = NULL; -FFI_PLUGIN_EXPORT -JniResult Set__of6(jobject object, - jobject object1, - jobject object2, - jobject object3, - jobject object4, - jobject object5) { - load_env(); - load_class_gr(&_c_Set, "java/util/Set"); - if (_c_Set == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method( - _c_Set, &_m_Set__of6, "of", - "(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/" - "Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Set;"); - if (_m_Set__of6 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = (*jniEnv)->CallStaticObjectMethod( - jniEnv, _c_Set, _m_Set__of6, object, object1, object2, object3, object4, - object5); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; -} - -jmethodID _m_Set__of7 = NULL; -FFI_PLUGIN_EXPORT -JniResult Set__of7(jobject object, - jobject object1, - jobject object2, - jobject object3, - jobject object4, - jobject object5, - jobject object6) { - load_env(); - load_class_gr(&_c_Set, "java/util/Set"); - if (_c_Set == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Set, &_m_Set__of7, "of", - "(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/" - "Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/" - "Object;Ljava/lang/Object;)Ljava/util/Set;"); - if (_m_Set__of7 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = (*jniEnv)->CallStaticObjectMethod( - jniEnv, _c_Set, _m_Set__of7, object, object1, object2, object3, object4, - object5, object6); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; -} - -jmethodID _m_Set__of8 = NULL; -FFI_PLUGIN_EXPORT -JniResult Set__of8(jobject object, - jobject object1, - jobject object2, - jobject object3, - jobject object4, - jobject object5, - jobject object6, - jobject object7) { - load_env(); - load_class_gr(&_c_Set, "java/util/Set"); - if (_c_Set == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method( - _c_Set, &_m_Set__of8, "of", - "(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/" - "Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/" - "Object;)Ljava/util/Set;"); - if (_m_Set__of8 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = (*jniEnv)->CallStaticObjectMethod( - jniEnv, _c_Set, _m_Set__of8, object, object1, object2, object3, object4, - object5, object6, object7); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; -} - -jmethodID _m_Set__of9 = NULL; -FFI_PLUGIN_EXPORT -JniResult Set__of9(jobject object, - jobject object1, - jobject object2, - jobject object3, - jobject object4, - jobject object5, - jobject object6, - jobject object7, - jobject object8) { - load_env(); - load_class_gr(&_c_Set, "java/util/Set"); - if (_c_Set == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method( - _c_Set, &_m_Set__of9, "of", - "(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/" - "Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/" - "Object;Ljava/lang/Object;)Ljava/util/Set;"); - if (_m_Set__of9 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = (*jniEnv)->CallStaticObjectMethod( - jniEnv, _c_Set, _m_Set__of9, object, object1, object2, object3, object4, - object5, object6, object7, object8); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; -} - -jmethodID _m_Set__of10 = NULL; -FFI_PLUGIN_EXPORT -JniResult Set__of10(jobject object, - jobject object1, - jobject object2, - jobject object3, - jobject object4, - jobject object5, - jobject object6, - jobject object7, - jobject object8, - jobject object9) { - load_env(); - load_class_gr(&_c_Set, "java/util/Set"); - if (_c_Set == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method( - _c_Set, &_m_Set__of10, "of", - "(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/" - "Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/" - "Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/util/Set;"); - if (_m_Set__of10 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = (*jniEnv)->CallStaticObjectMethod( - jniEnv, _c_Set, _m_Set__of10, object, object1, object2, object3, object4, - object5, object6, object7, object8, object9); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; -} - -jmethodID _m_Set__of11 = NULL; -FFI_PLUGIN_EXPORT -JniResult Set__of11(jobject objects) { - load_env(); - load_class_gr(&_c_Set, "java/util/Set"); - if (_c_Set == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Set, &_m_Set__of11, "of", - "([Ljava/lang/Object;)Ljava/util/Set;"); - if (_m_Set__of11 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = - (*jniEnv)->CallStaticObjectMethod(jniEnv, _c_Set, _m_Set__of11, objects); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; -} - -jmethodID _m_Set__copyOf = NULL; -FFI_PLUGIN_EXPORT -JniResult Set__copyOf(jobject collection) { - load_env(); - load_class_gr(&_c_Set, "java/util/Set"); - if (_c_Set == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_static_method(_c_Set, &_m_Set__copyOf, "copyOf", - "(Ljava/util/Collection;)Ljava/util/Set;"); - if (_m_Set__copyOf == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = (*jniEnv)->CallStaticObjectMethod( - jniEnv, _c_Set, _m_Set__copyOf, collection); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; -} - -// androidx.health.connect.client.request.AggregateGroupByDurationRequest -jclass _c_AggregateGroupByDurationRequest = NULL; - -jmethodID _m_AggregateGroupByDurationRequest__ctor = NULL; -FFI_PLUGIN_EXPORT -JniResult AggregateGroupByDurationRequest__ctor(jobject set, - jobject timeRangeFilter, - jobject duration, - jobject set1) { - load_env(); - load_class_gr( - &_c_AggregateGroupByDurationRequest, - "androidx/health/connect/client/request/AggregateGroupByDurationRequest"); - if (_c_AggregateGroupByDurationRequest == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_AggregateGroupByDurationRequest, - &_m_AggregateGroupByDurationRequest__ctor, "", - "(Ljava/util/Set;Landroidx/health/connect/client/time/" - "TimeRangeFilter;Ljava/time/Duration;Ljava/util/Set;)V"); - if (_m_AggregateGroupByDurationRequest__ctor == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = - (*jniEnv)->NewObject(jniEnv, _c_AggregateGroupByDurationRequest, - _m_AggregateGroupByDurationRequest__ctor, set, - timeRangeFilter, duration, set1); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; -} - -jmethodID _m_AggregateGroupByDurationRequest__ctor1 = NULL; -FFI_PLUGIN_EXPORT -JniResult AggregateGroupByDurationRequest__ctor1( - jobject set, - jobject timeRangeFilter, - jobject duration, - jobject set1, - int32_t i, - jobject defaultConstructorMarker) { - load_env(); - load_class_gr( - &_c_AggregateGroupByDurationRequest, - "androidx/health/connect/client/request/AggregateGroupByDurationRequest"); - if (_c_AggregateGroupByDurationRequest == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_AggregateGroupByDurationRequest, - &_m_AggregateGroupByDurationRequest__ctor1, "", - "(Ljava/util/Set;Landroidx/health/connect/client/time/" - "TimeRangeFilter;Ljava/time/Duration;Ljava/util/Set;ILkotlin/jvm/" - "internal/DefaultConstructorMarker;)V"); - if (_m_AggregateGroupByDurationRequest__ctor1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = (*jniEnv)->NewObject( - jniEnv, _c_AggregateGroupByDurationRequest, - _m_AggregateGroupByDurationRequest__ctor1, set, timeRangeFilter, duration, - set1, i, defaultConstructorMarker); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; -} - -// androidx.health.connect.client.request.AggregateGroupByPeriodRequest -jclass _c_AggregateGroupByPeriodRequest = NULL; - -jmethodID _m_AggregateGroupByPeriodRequest__ctor = NULL; -FFI_PLUGIN_EXPORT -JniResult AggregateGroupByPeriodRequest__ctor(jobject set, - jobject timeRangeFilter, - jobject period, - jobject set1) { - load_env(); - load_class_gr( - &_c_AggregateGroupByPeriodRequest, - "androidx/health/connect/client/request/AggregateGroupByPeriodRequest"); - if (_c_AggregateGroupByPeriodRequest == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_AggregateGroupByPeriodRequest, - &_m_AggregateGroupByPeriodRequest__ctor, "", - "(Ljava/util/Set;Landroidx/health/connect/client/time/" - "TimeRangeFilter;Ljava/time/Period;Ljava/util/Set;)V"); - if (_m_AggregateGroupByPeriodRequest__ctor == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = - (*jniEnv)->NewObject(jniEnv, _c_AggregateGroupByPeriodRequest, - _m_AggregateGroupByPeriodRequest__ctor, set, - timeRangeFilter, period, set1); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; -} - -jmethodID _m_AggregateGroupByPeriodRequest__ctor1 = NULL; -FFI_PLUGIN_EXPORT -JniResult AggregateGroupByPeriodRequest__ctor1( - jobject set, - jobject timeRangeFilter, - jobject period, - jobject set1, - int32_t i, - jobject defaultConstructorMarker) { - load_env(); - load_class_gr( - &_c_AggregateGroupByPeriodRequest, - "androidx/health/connect/client/request/AggregateGroupByPeriodRequest"); - if (_c_AggregateGroupByPeriodRequest == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_AggregateGroupByPeriodRequest, - &_m_AggregateGroupByPeriodRequest__ctor1, "", - "(Ljava/util/Set;Landroidx/health/connect/client/time/" - "TimeRangeFilter;Ljava/time/Period;Ljava/util/Set;ILkotlin/jvm/" - "internal/DefaultConstructorMarker;)V"); - if (_m_AggregateGroupByPeriodRequest__ctor1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = (*jniEnv)->NewObject( - jniEnv, _c_AggregateGroupByPeriodRequest, - _m_AggregateGroupByPeriodRequest__ctor1, set, timeRangeFilter, period, - set1, i, defaultConstructorMarker); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; -} - -// androidx.health.connect.client.request.AggregateRequest -jclass _c_AggregateRequest = NULL; - -jmethodID _m_AggregateRequest__ctor = NULL; -FFI_PLUGIN_EXPORT -JniResult AggregateRequest__ctor(jobject set, - jobject timeRangeFilter, - jobject set1) { - load_env(); - load_class_gr(&_c_AggregateRequest, - "androidx/health/connect/client/request/AggregateRequest"); - if (_c_AggregateRequest == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_AggregateRequest, &_m_AggregateRequest__ctor, "", - "(Ljava/util/Set;Landroidx/health/connect/client/time/" - "TimeRangeFilter;Ljava/util/Set;)V"); - if (_m_AggregateRequest__ctor == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = (*jniEnv)->NewObject(jniEnv, _c_AggregateRequest, - _m_AggregateRequest__ctor, set, - timeRangeFilter, set1); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; -} - -jmethodID _m_AggregateRequest__ctor1 = NULL; -FFI_PLUGIN_EXPORT -JniResult AggregateRequest__ctor1(jobject set, - jobject timeRangeFilter, - jobject set1, - int32_t i, - jobject defaultConstructorMarker) { - load_env(); - load_class_gr(&_c_AggregateRequest, - "androidx/health/connect/client/request/AggregateRequest"); - if (_c_AggregateRequest == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_AggregateRequest, &_m_AggregateRequest__ctor1, "", - "(Ljava/util/Set;Landroidx/health/connect/client/time/" - "TimeRangeFilter;Ljava/util/Set;ILkotlin/jvm/internal/" - "DefaultConstructorMarker;)V"); - if (_m_AggregateRequest__ctor1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = (*jniEnv)->NewObject( - jniEnv, _c_AggregateRequest, _m_AggregateRequest__ctor1, set, - timeRangeFilter, set1, i, defaultConstructorMarker); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; -} - -// androidx.health.connect.client.request.ChangesTokenRequest -jclass _c_ChangesTokenRequest = NULL; - -jmethodID _m_ChangesTokenRequest__ctor = NULL; -FFI_PLUGIN_EXPORT -JniResult ChangesTokenRequest__ctor(jobject set, jobject set1) { - load_env(); - load_class_gr(&_c_ChangesTokenRequest, - "androidx/health/connect/client/request/ChangesTokenRequest"); - if (_c_ChangesTokenRequest == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_ChangesTokenRequest, &_m_ChangesTokenRequest__ctor, "", - "(Ljava/util/Set;Ljava/util/Set;)V"); - if (_m_ChangesTokenRequest__ctor == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - jobject _result = (*jniEnv)->NewObject( - jniEnv, _c_ChangesTokenRequest, _m_ChangesTokenRequest__ctor, set, set1); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; -} - -jmethodID _m_ChangesTokenRequest__ctor1 = NULL; -FFI_PLUGIN_EXPORT -JniResult ChangesTokenRequest__ctor1(jobject set, - jobject set1, - int32_t i, - jobject defaultConstructorMarker) { +JniResult ChangesTokenRequest__new1(jobject set, + jobject set1, + int32_t i, + jobject defaultConstructorMarker) { load_env(); - load_class_gr(&_c_ChangesTokenRequest, - "androidx/health/connect/client/request/ChangesTokenRequest"); + load_class_global_ref( + &_c_ChangesTokenRequest, + "androidx/health/connect/client/request/ChangesTokenRequest"); if (_c_ChangesTokenRequest == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_ChangesTokenRequest, &_m_ChangesTokenRequest__ctor1, "", + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_ChangesTokenRequest, &_m_ChangesTokenRequest__new1, "", "(Ljava/util/Set;Ljava/util/Set;ILkotlin/jvm/internal/" "DefaultConstructorMarker;)V"); - if (_m_ChangesTokenRequest__ctor1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + if (_m_ChangesTokenRequest__new1 == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->NewObject(jniEnv, _c_ChangesTokenRequest, - _m_ChangesTokenRequest__ctor1, set, + _m_ChangesTokenRequest__new1, set, set1, i, defaultConstructorMarker); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } // androidx.health.connect.client.request.ReadRecordsRequest jclass _c_ReadRecordsRequest = NULL; -jmethodID _m_ReadRecordsRequest__ctor = NULL; +jmethodID _m_ReadRecordsRequest__new0 = NULL; FFI_PLUGIN_EXPORT -JniResult ReadRecordsRequest__ctor(jobject kClass, +JniResult ReadRecordsRequest__new0(jobject kClass, jobject timeRangeFilter, jobject set, uint8_t z, int32_t i, jobject string) { load_env(); - load_class_gr(&_c_ReadRecordsRequest, - "androidx/health/connect/client/request/ReadRecordsRequest"); + load_class_global_ref( + &_c_ReadRecordsRequest, + "androidx/health/connect/client/request/ReadRecordsRequest"); if (_c_ReadRecordsRequest == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_ReadRecordsRequest, &_m_ReadRecordsRequest__ctor, "", + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_ReadRecordsRequest, &_m_ReadRecordsRequest__new0, "", "(Lkotlin/reflect/KClass;Landroidx/health/connect/client/time/" "TimeRangeFilter;Ljava/util/Set;ZILjava/lang/String;)V"); - if (_m_ReadRecordsRequest__ctor == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + if (_m_ReadRecordsRequest__new0 == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->NewObject(jniEnv, _c_ReadRecordsRequest, - _m_ReadRecordsRequest__ctor, kClass, + _m_ReadRecordsRequest__new0, kClass, timeRangeFilter, set, z, i, string); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } -jmethodID _m_ReadRecordsRequest__ctor1 = NULL; +jmethodID _m_ReadRecordsRequest__new1 = NULL; FFI_PLUGIN_EXPORT -JniResult ReadRecordsRequest__ctor1(jobject kClass, - jobject timeRangeFilter, - jobject set, - uint8_t z, - int32_t i, - jobject string, - int32_t i1, - jobject defaultConstructorMarker) { +JniResult ReadRecordsRequest__new1(jobject kClass, + jobject timeRangeFilter, + jobject set, + uint8_t z, + int32_t i, + jobject string, + int32_t i1, + jobject defaultConstructorMarker) { load_env(); - load_class_gr(&_c_ReadRecordsRequest, - "androidx/health/connect/client/request/ReadRecordsRequest"); + load_class_global_ref( + &_c_ReadRecordsRequest, + "androidx/health/connect/client/request/ReadRecordsRequest"); if (_c_ReadRecordsRequest == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_ReadRecordsRequest, &_m_ReadRecordsRequest__ctor1, "", + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_ReadRecordsRequest, &_m_ReadRecordsRequest__new1, "", "(Lkotlin/reflect/KClass;Landroidx/health/connect/client/time/" "TimeRangeFilter;Ljava/util/Set;ZILjava/lang/String;ILkotlin/jvm/" "internal/DefaultConstructorMarker;)V"); - if (_m_ReadRecordsRequest__ctor1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + if (_m_ReadRecordsRequest__new1 == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->NewObject( - jniEnv, _c_ReadRecordsRequest, _m_ReadRecordsRequest__ctor1, kClass, + jniEnv, _c_ReadRecordsRequest, _m_ReadRecordsRequest__new1, kClass, timeRangeFilter, set, z, i, string, i1, defaultConstructorMarker); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_ReadRecordsRequest__equals1 = NULL; FFI_PLUGIN_EXPORT JniResult ReadRecordsRequest__equals1(jobject self_, jobject object) { load_env(); - load_class_gr(&_c_ReadRecordsRequest, - "androidx/health/connect/client/request/ReadRecordsRequest"); + load_class_global_ref( + &_c_ReadRecordsRequest, + "androidx/health/connect/client/request/ReadRecordsRequest"); if (_c_ReadRecordsRequest == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_ReadRecordsRequest, &_m_ReadRecordsRequest__equals1, "equals", "(Ljava/lang/Object;)Z"); if (_m_ReadRecordsRequest__equals1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_ReadRecordsRequest__equals1, object); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_ReadRecordsRequest__hashCode1 = NULL; FFI_PLUGIN_EXPORT JniResult ReadRecordsRequest__hashCode1(jobject self_) { load_env(); - load_class_gr(&_c_ReadRecordsRequest, - "androidx/health/connect/client/request/ReadRecordsRequest"); + load_class_global_ref( + &_c_ReadRecordsRequest, + "androidx/health/connect/client/request/ReadRecordsRequest"); if (_c_ReadRecordsRequest == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_ReadRecordsRequest, &_m_ReadRecordsRequest__hashCode1, "hashCode", "()I"); if (_m_ReadRecordsRequest__hashCode1 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; int32_t _result = (*jniEnv)->CallIntMethod(jniEnv, self_, _m_ReadRecordsRequest__hashCode1); - return (JniResult){.result = {.i = _result}, .exception = check_exception()}; + return (JniResult){.value = {.i = _result}, .exception = check_exception()}; } // androidx.health.connect.client.aggregate.AggregationResult jclass _c_AggregationResult = NULL; -jmethodID _m_AggregationResult__ctor = NULL; +jmethodID _m_AggregationResult__new0 = NULL; FFI_PLUGIN_EXPORT -JniResult AggregationResult__ctor(jobject map, jobject map1, jobject set) { +JniResult AggregationResult__new0(jobject map, jobject map1, jobject set) { load_env(); - load_class_gr(&_c_AggregationResult, - "androidx/health/connect/client/aggregate/AggregationResult"); + load_class_global_ref( + &_c_AggregationResult, + "androidx/health/connect/client/aggregate/AggregationResult"); if (_c_AggregationResult == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; - load_method(_c_AggregationResult, &_m_AggregationResult__ctor, "", + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_AggregationResult, &_m_AggregationResult__new0, "", "(Ljava/util/Map;Ljava/util/Map;Ljava/util/Set;)V"); - if (_m_AggregationResult__ctor == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + if (_m_AggregationResult__new0 == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->NewObject( - jniEnv, _c_AggregationResult, _m_AggregationResult__ctor, map, map1, set); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + jniEnv, _c_AggregationResult, _m_AggregationResult__new0, map, map1, set); + return to_global_ref_result(_result); } jmethodID _m_AggregationResult__getDataOrigins = NULL; FFI_PLUGIN_EXPORT JniResult AggregationResult__getDataOrigins(jobject self_) { load_env(); - load_class_gr(&_c_AggregationResult, - "androidx/health/connect/client/aggregate/AggregationResult"); + load_class_global_ref( + &_c_AggregationResult, + "androidx/health/connect/client/aggregate/AggregationResult"); if (_c_AggregationResult == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_AggregationResult, &_m_AggregationResult__getDataOrigins, "getDataOrigins", "()Ljava/util/Set;"); if (_m_AggregationResult__getDataOrigins == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_AggregationResult__getDataOrigins); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_AggregationResult__hasMetric = NULL; FFI_PLUGIN_EXPORT JniResult AggregationResult__hasMetric(jobject self_, jobject aggregateMetric) { load_env(); - load_class_gr(&_c_AggregationResult, - "androidx/health/connect/client/aggregate/AggregationResult"); + load_class_global_ref( + &_c_AggregationResult, + "androidx/health/connect/client/aggregate/AggregationResult"); if (_c_AggregationResult == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_AggregationResult, &_m_AggregationResult__hasMetric, "hasMetric", "(Landroidx/health/connect/client/aggregate/AggregateMetric;)Z"); if (_m_AggregationResult__hasMetric == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_AggregationResult__hasMetric, aggregateMetric); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_AggregationResult__contains = NULL; FFI_PLUGIN_EXPORT JniResult AggregationResult__contains(jobject self_, jobject aggregateMetric) { load_env(); - load_class_gr(&_c_AggregationResult, - "androidx/health/connect/client/aggregate/AggregationResult"); + load_class_global_ref( + &_c_AggregationResult, + "androidx/health/connect/client/aggregate/AggregationResult"); if (_c_AggregationResult == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_AggregationResult, &_m_AggregationResult__contains, "contains", "(Landroidx/health/connect/client/aggregate/AggregateMetric;)Z"); if (_m_AggregationResult__contains == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; uint8_t _result = (*jniEnv)->CallBooleanMethod( jniEnv, self_, _m_AggregationResult__contains, aggregateMetric); - return (JniResult){.result = {.z = _result}, .exception = check_exception()}; + return (JniResult){.value = {.z = _result}, .exception = check_exception()}; } jmethodID _m_AggregationResult__getMetric = NULL; FFI_PLUGIN_EXPORT JniResult AggregationResult__getMetric(jobject self_, jobject aggregateMetric) { load_env(); - load_class_gr(&_c_AggregationResult, - "androidx/health/connect/client/aggregate/AggregationResult"); + load_class_global_ref( + &_c_AggregationResult, + "androidx/health/connect/client/aggregate/AggregationResult"); if (_c_AggregationResult == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_AggregationResult, &_m_AggregationResult__getMetric, "getMetric", "(Landroidx/health/connect/client/aggregate/" "AggregateMetric;)Ljava/lang/Object;"); if (_m_AggregationResult__getMetric == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_AggregationResult__getMetric, aggregateMetric); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jmethodID _m_AggregationResult__get0 = NULL; FFI_PLUGIN_EXPORT JniResult AggregationResult__get0(jobject self_, jobject aggregateMetric) { load_env(); - load_class_gr(&_c_AggregationResult, - "androidx/health/connect/client/aggregate/AggregationResult"); + load_class_global_ref( + &_c_AggregationResult, + "androidx/health/connect/client/aggregate/AggregationResult"); if (_c_AggregationResult == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method(_c_AggregationResult, &_m_AggregationResult__get0, "get", "(Landroidx/health/connect/client/aggregate/" "AggregateMetric;)Ljava/lang/Object;"); if (_m_AggregationResult__get0 == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = (*jniEnv)->CallObjectMethod( jniEnv, self_, _m_AggregationResult__get0, aggregateMetric); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); +} + +// androidx.health.connect.client.aggregate.AggregateMetric$AggregationType +jclass _c_AggregateMetric_AggregationType = NULL; + +jmethodID _m_AggregateMetric_AggregationType__getAggregationTypeString = NULL; +FFI_PLUGIN_EXPORT +JniResult AggregateMetric_AggregationType__getAggregationTypeString( + jobject self_) { + load_env(); + load_class_global_ref(&_c_AggregateMetric_AggregationType, + "androidx/health/connect/client/aggregate/" + "AggregateMetric$AggregationType"); + if (_c_AggregateMetric_AggregationType == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_AggregateMetric_AggregationType, + &_m_AggregateMetric_AggregationType__getAggregationTypeString, + "getAggregationTypeString", "()Ljava/lang/String;"); + if (_m_AggregateMetric_AggregationType__getAggregationTypeString == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallObjectMethod( + jniEnv, self_, + _m_AggregateMetric_AggregationType__getAggregationTypeString); + return to_global_ref_result(_result); +} + +jmethodID _m_AggregateMetric_AggregationType__values = NULL; +FFI_PLUGIN_EXPORT +JniResult AggregateMetric_AggregationType__values() { + load_env(); + load_class_global_ref(&_c_AggregateMetric_AggregationType, + "androidx/health/connect/client/aggregate/" + "AggregateMetric$AggregationType"); + if (_c_AggregateMetric_AggregationType == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_AggregateMetric_AggregationType, + &_m_AggregateMetric_AggregationType__values, "values", + "()[Landroidx/health/connect/client/aggregate/" + "AggregateMetric$AggregationType;"); + if (_m_AggregateMetric_AggregationType__values == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_AggregateMetric_AggregationType, + _m_AggregateMetric_AggregationType__values); + return to_global_ref_result(_result); +} + +jmethodID _m_AggregateMetric_AggregationType__valueOf = NULL; +FFI_PLUGIN_EXPORT +JniResult AggregateMetric_AggregationType__valueOf(jobject string) { + load_env(); + load_class_global_ref(&_c_AggregateMetric_AggregationType, + "androidx/health/connect/client/aggregate/" + "AggregateMetric$AggregationType"); + if (_c_AggregateMetric_AggregationType == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_static_method(_c_AggregateMetric_AggregationType, + &_m_AggregateMetric_AggregationType__valueOf, "valueOf", + "(Ljava/lang/String;)Landroidx/health/connect/client/" + "aggregate/AggregateMetric$AggregationType;"); + if (_m_AggregateMetric_AggregationType__valueOf == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->CallStaticObjectMethod( + jniEnv, _c_AggregateMetric_AggregationType, + _m_AggregateMetric_AggregationType__valueOf, string); + return to_global_ref_result(_result); +} + +jfieldID _f_AggregateMetric_AggregationType__DURATION = NULL; +FFI_PLUGIN_EXPORT +JniResult get_AggregateMetric_AggregationType__DURATION() { + load_env(); + load_class_global_ref(&_c_AggregateMetric_AggregationType, + "androidx/health/connect/client/aggregate/" + "AggregateMetric$AggregationType"); + if (_c_AggregateMetric_AggregationType == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_static_field(_c_AggregateMetric_AggregationType, + &_f_AggregateMetric_AggregationType__DURATION, "DURATION", + "Landroidx/health/connect/client/aggregate/" + "AggregateMetric$AggregationType;"); + jobject _result = (*jniEnv)->GetStaticObjectField( + jniEnv, _c_AggregateMetric_AggregationType, + _f_AggregateMetric_AggregationType__DURATION); + return to_global_ref_result(_result); +} + +jfieldID _f_AggregateMetric_AggregationType__AVERAGE = NULL; +FFI_PLUGIN_EXPORT +JniResult get_AggregateMetric_AggregationType__AVERAGE() { + load_env(); + load_class_global_ref(&_c_AggregateMetric_AggregationType, + "androidx/health/connect/client/aggregate/" + "AggregateMetric$AggregationType"); + if (_c_AggregateMetric_AggregationType == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_static_field(_c_AggregateMetric_AggregationType, + &_f_AggregateMetric_AggregationType__AVERAGE, "AVERAGE", + "Landroidx/health/connect/client/aggregate/" + "AggregateMetric$AggregationType;"); + jobject _result = (*jniEnv)->GetStaticObjectField( + jniEnv, _c_AggregateMetric_AggregationType, + _f_AggregateMetric_AggregationType__AVERAGE); + return to_global_ref_result(_result); +} + +jfieldID _f_AggregateMetric_AggregationType__MINIMUM = NULL; +FFI_PLUGIN_EXPORT +JniResult get_AggregateMetric_AggregationType__MINIMUM() { + load_env(); + load_class_global_ref(&_c_AggregateMetric_AggregationType, + "androidx/health/connect/client/aggregate/" + "AggregateMetric$AggregationType"); + if (_c_AggregateMetric_AggregationType == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_static_field(_c_AggregateMetric_AggregationType, + &_f_AggregateMetric_AggregationType__MINIMUM, "MINIMUM", + "Landroidx/health/connect/client/aggregate/" + "AggregateMetric$AggregationType;"); + jobject _result = (*jniEnv)->GetStaticObjectField( + jniEnv, _c_AggregateMetric_AggregationType, + _f_AggregateMetric_AggregationType__MINIMUM); + return to_global_ref_result(_result); +} + +jfieldID _f_AggregateMetric_AggregationType__MAXIMUM = NULL; +FFI_PLUGIN_EXPORT +JniResult get_AggregateMetric_AggregationType__MAXIMUM() { + load_env(); + load_class_global_ref(&_c_AggregateMetric_AggregationType, + "androidx/health/connect/client/aggregate/" + "AggregateMetric$AggregationType"); + if (_c_AggregateMetric_AggregationType == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_static_field(_c_AggregateMetric_AggregationType, + &_f_AggregateMetric_AggregationType__MAXIMUM, "MAXIMUM", + "Landroidx/health/connect/client/aggregate/" + "AggregateMetric$AggregationType;"); + jobject _result = (*jniEnv)->GetStaticObjectField( + jniEnv, _c_AggregateMetric_AggregationType, + _f_AggregateMetric_AggregationType__MAXIMUM); + return to_global_ref_result(_result); +} + +jfieldID _f_AggregateMetric_AggregationType__TOTAL = NULL; +FFI_PLUGIN_EXPORT +JniResult get_AggregateMetric_AggregationType__TOTAL() { + load_env(); + load_class_global_ref(&_c_AggregateMetric_AggregationType, + "androidx/health/connect/client/aggregate/" + "AggregateMetric$AggregationType"); + if (_c_AggregateMetric_AggregationType == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_static_field(_c_AggregateMetric_AggregationType, + &_f_AggregateMetric_AggregationType__TOTAL, "TOTAL", + "Landroidx/health/connect/client/aggregate/" + "AggregateMetric$AggregationType;"); + jobject _result = (*jniEnv)->GetStaticObjectField( + jniEnv, _c_AggregateMetric_AggregationType, + _f_AggregateMetric_AggregationType__TOTAL); + return to_global_ref_result(_result); +} + +jfieldID _f_AggregateMetric_AggregationType__COUNT = NULL; +FFI_PLUGIN_EXPORT +JniResult get_AggregateMetric_AggregationType__COUNT() { + load_env(); + load_class_global_ref(&_c_AggregateMetric_AggregationType, + "androidx/health/connect/client/aggregate/" + "AggregateMetric$AggregationType"); + if (_c_AggregateMetric_AggregationType == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_static_field(_c_AggregateMetric_AggregationType, + &_f_AggregateMetric_AggregationType__COUNT, "COUNT", + "Landroidx/health/connect/client/aggregate/" + "AggregateMetric$AggregationType;"); + jobject _result = (*jniEnv)->GetStaticObjectField( + jniEnv, _c_AggregateMetric_AggregationType, + _f_AggregateMetric_AggregationType__COUNT); + return to_global_ref_result(_result); +} + +// androidx.health.connect.client.aggregate.AggregateMetric$Companion +jclass _c_AggregateMetric_Companion = NULL; + +jmethodID _m_AggregateMetric_Companion__new0 = NULL; +FFI_PLUGIN_EXPORT +JniResult AggregateMetric_Companion__new0(jobject defaultConstructorMarker) { + load_env(); + load_class_global_ref( + &_c_AggregateMetric_Companion, + "androidx/health/connect/client/aggregate/AggregateMetric$Companion"); + if (_c_AggregateMetric_Companion == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + load_method(_c_AggregateMetric_Companion, &_m_AggregateMetric_Companion__new0, + "", "(Lkotlin/jvm/internal/DefaultConstructorMarker;)V"); + if (_m_AggregateMetric_Companion__new0 == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; + jobject _result = (*jniEnv)->NewObject(jniEnv, _c_AggregateMetric_Companion, + _m_AggregateMetric_Companion__new0, + defaultConstructorMarker); + return to_global_ref_result(_result); } +// androidx.health.connect.client.aggregate.AggregateMetric$Converter$FromDouble +jclass _c_AggregateMetric_Converter_FromDouble = NULL; + +// androidx.health.connect.client.aggregate.AggregateMetric$Converter$FromLong +jclass _c_AggregateMetric_Converter_FromLong = NULL; + +// androidx.health.connect.client.aggregate.AggregateMetric$Converter +jclass _c_AggregateMetric_Converter = NULL; + // androidx.health.connect.client.aggregate.AggregateMetric jclass _c_AggregateMetric = NULL; -jmethodID _m_AggregateMetric__ctor = NULL; +jmethodID _m_AggregateMetric__new0 = NULL; FFI_PLUGIN_EXPORT -JniResult AggregateMetric__ctor(jobject converter, +JniResult AggregateMetric__new0(jobject converter, jobject string, jobject aggregationType, jobject string1) { load_env(); - load_class_gr(&_c_AggregateMetric, - "androidx/health/connect/client/aggregate/AggregateMetric"); + load_class_global_ref( + &_c_AggregateMetric, + "androidx/health/connect/client/aggregate/AggregateMetric"); if (_c_AggregateMetric == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_method( - _c_AggregateMetric, &_m_AggregateMetric__ctor, "", + _c_AggregateMetric, &_m_AggregateMetric__new0, "", "(Landroidx/health/connect/client/aggregate/" "AggregateMetric$Converter;Ljava/lang/String;Landroidx/health/connect/" "client/aggregate/AggregateMetric$AggregationType;Ljava/lang/String;)V"); - if (_m_AggregateMetric__ctor == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + if (_m_AggregateMetric__new0 == NULL) + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; jobject _result = - (*jniEnv)->NewObject(jniEnv, _c_AggregateMetric, _m_AggregateMetric__ctor, + (*jniEnv)->NewObject(jniEnv, _c_AggregateMetric, _m_AggregateMetric__new0, converter, string, aggregationType, string1); - return (JniResult){.result = {.l = to_global_ref(_result)}, - .exception = check_exception()}; + return to_global_ref_result(_result); } jfieldID _f_AggregateMetric__Companion = NULL; FFI_PLUGIN_EXPORT JniResult get_AggregateMetric__Companion() { load_env(); - load_class_gr(&_c_AggregateMetric, - "androidx/health/connect/client/aggregate/AggregateMetric"); + load_class_global_ref( + &_c_AggregateMetric, + "androidx/health/connect/client/aggregate/AggregateMetric"); if (_c_AggregateMetric == NULL) - return (JniResult){.result = {.j = 0}, .exception = check_exception()}; + return (JniResult){.value = {.j = 0}, .exception = check_exception()}; load_static_field( _c_AggregateMetric, &_f_AggregateMetric__Companion, "Companion", "Landroidx/health/connect/client/aggregate/AggregateMetric$Companion;"); - jobject _result = to_global_ref((*jniEnv)->GetStaticObjectField( - jniEnv, _c_AggregateMetric, _f_AggregateMetric__Companion)); - return (JniResult){.result = {.l = _result}, .exception = check_exception()}; + jobject _result = (*jniEnv)->GetStaticObjectField( + jniEnv, _c_AggregateMetric, _f_AggregateMetric__Companion); + return to_global_ref_result(_result); } diff --git a/experimental/pedometer/src/health_connect/include/BUILD.gn b/experimental/pedometer/src/health_connect/include/BUILD.gn deleted file mode 100644 index 2b10262f8..000000000 --- a/experimental/pedometer/src/health_connect/include/BUILD.gn +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file -# for details. All rights reserved. Use of this source code is governed by a -# BSD-style license that can be found in the LICENSE file. - -import("../../sdk_args.gni") - -# This rule copies header files to include/ -copy("copy_headers") { - visibility = [ "../../sdk:copy_headers" ] - - sources = [ - "dart_api.h", - "dart_api_dl.c", - "dart_api_dl.h", - "dart_native_api.h", - "dart_tools_api.h", - "dart_version.h", - "internal/dart_api_dl_impl.h", - ] - - outputs = - [ "$root_out_dir/$dart_sdk_output/include/{{source_target_relative}}" ] -} diff --git a/experimental/pedometer/src/health_connect/include/analyze_snapshot_api.h b/experimental/pedometer/src/health_connect/include/analyze_snapshot_api.h deleted file mode 100644 index 0e68d5ccb..000000000 --- a/experimental/pedometer/src/health_connect/include/analyze_snapshot_api.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file - * for details. All rights reserved. Use of this source code is governed by a - * BSD-style license that can be found in the LICENSE file. - */ - -#ifndef RUNTIME_INCLUDE_ANALYZE_SNAPSHOT_API_H_ -#define RUNTIME_INCLUDE_ANALYZE_SNAPSHOT_API_H_ - -#include - -namespace dart { -namespace snapshot_analyzer { -typedef struct { - const uint8_t* vm_snapshot_data; - const uint8_t* vm_snapshot_instructions; - const uint8_t* vm_isolate_data; - const uint8_t* vm_isolate_instructions; -} Dart_SnapshotAnalyzerInformation; - -void Dart_DumpSnapshotInformationAsJson(char** buffer, - intptr_t* buffer_length, - Dart_SnapshotAnalyzerInformation* info); - -void Dart_DumpSnapshotInformationPP(Dart_SnapshotAnalyzerInformation* info); - -} // namespace snapshot_analyzer -} // namespace dart - -#endif // RUNTIME_INCLUDE_ANALYZE_SNAPSHOT_API_H_ diff --git a/experimental/pedometer/src/health_connect/include/bin/dart_io_api.h b/experimental/pedometer/src/health_connect/include/bin/dart_io_api.h deleted file mode 100644 index cc647976c..000000000 --- a/experimental/pedometer/src/health_connect/include/bin/dart_io_api.h +++ /dev/null @@ -1,69 +0,0 @@ -// Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file -// for details. All rights reserved. Use of this source code is governed by a -// BSD-style license that can be found in the LICENSE file. - -#ifndef RUNTIME_INCLUDE_BIN_DART_IO_API_H_ -#define RUNTIME_INCLUDE_BIN_DART_IO_API_H_ - -#include "dart_tools_api.h" - -namespace dart { -namespace bin { - -// Bootstraps 'dart:io'. -void BootstrapDartIo(); - -// Cleans up 'dart:io'. -void CleanupDartIo(); - -// Lets dart:io know where the system temporary directory is located. -// Currently only wired up on Android. -void SetSystemTempDirectory(const char* system_temp); - -// Tells the system whether to capture Stdout events. -void SetCaptureStdout(bool value); - -// Tells the system whether to capture Stderr events. -void SetCaptureStderr(bool value); - -// Should Stdout events be captured? -bool ShouldCaptureStdout(); - -// Should Stderr events be captured? -bool ShouldCaptureStderr(); - -// Set the executable name used by Platform.executable. -void SetExecutableName(const char* executable_name); - -// Set the arguments used by Platform.executableArguments. -void SetExecutableArguments(int script_index, char** argv); - -// Set dart:io implementation specific fields of Dart_EmbedderInformation. -void GetIOEmbedderInformation(Dart_EmbedderInformation* info); - -// Appropriate to assign to Dart_InitializeParams.file_open/read/write/close. -void* OpenFile(const char* name, bool write); -void ReadFile(uint8_t** data, intptr_t* file_len, void* stream); -void WriteFile(const void* buffer, intptr_t num_bytes, void* stream); -void CloseFile(void* stream); - -// Generates 'length' random bytes into 'buffer'. Returns true on success -// and false on failure. This is appropriate to assign to -// Dart_InitializeParams.entropy_source. -bool GetEntropy(uint8_t* buffer, intptr_t length); - -// Performs a lookup of the I/O Dart_NativeFunction with a specified 'name' and -// 'argument_count'. Returns NULL if no I/O native function with a matching -// name and parameter count is found. -Dart_NativeFunction LookupIONative(Dart_Handle name, - int argument_count, - bool* auto_setup_scope); - -// Returns the symbol for I/O native function 'nf'. Returns NULL if 'nf' is not -// a valid I/O native function. -const uint8_t* LookupIONativeSymbol(Dart_NativeFunction nf); - -} // namespace bin -} // namespace dart - -#endif // RUNTIME_INCLUDE_BIN_DART_IO_API_H_ diff --git a/experimental/pedometer/src/health_connect/include/dart_api.h b/experimental/pedometer/src/health_connect/include/dart_api.h deleted file mode 100644 index 741447a06..000000000 --- a/experimental/pedometer/src/health_connect/include/dart_api.h +++ /dev/null @@ -1,4098 +0,0 @@ -/* - * Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file - * for details. All rights reserved. Use of this source code is governed by a - * BSD-style license that can be found in the LICENSE file. - */ - -#ifndef RUNTIME_INCLUDE_DART_API_H_ -#define RUNTIME_INCLUDE_DART_API_H_ - -/** \mainpage Dart Embedding API Reference - * - * This reference describes the Dart Embedding API, which is used to embed the - * Dart Virtual Machine within C/C++ applications. - * - * This reference is generated from the header include/dart_api.h. - */ - -/* __STDC_FORMAT_MACROS has to be defined before including to - * enable platform independent printf format specifiers. */ -#ifndef __STDC_FORMAT_MACROS -#define __STDC_FORMAT_MACROS -#endif - -#include -#include -#include - -#ifdef __cplusplus -#define DART_EXTERN_C extern "C" -#else -#define DART_EXTERN_C extern -#endif - -#if defined(__CYGWIN__) -#error Tool chain and platform not supported. -#elif defined(_WIN32) -#if defined(DART_SHARED_LIB) -#define DART_EXPORT DART_EXTERN_C __declspec(dllexport) -#else -#define DART_EXPORT DART_EXTERN_C -#endif -#else -#if __GNUC__ >= 4 -#if defined(DART_SHARED_LIB) -#define DART_EXPORT \ - DART_EXTERN_C __attribute__((visibility("default"))) __attribute((used)) -#else -#define DART_EXPORT DART_EXTERN_C -#endif -#else -#error Tool chain not supported. -#endif -#endif - -#if __GNUC__ -#define DART_WARN_UNUSED_RESULT __attribute__((warn_unused_result)) -#elif _MSC_VER -#define DART_WARN_UNUSED_RESULT _Check_return_ -#else -#define DART_WARN_UNUSED_RESULT -#endif - -/* - * ======= - * Handles - * ======= - */ - -/** - * An isolate is the unit of concurrency in Dart. Each isolate has - * its own memory and thread of control. No state is shared between - * isolates. Instead, isolates communicate by message passing. - * - * Each thread keeps track of its current isolate, which is the - * isolate which is ready to execute on the current thread. The - * current isolate may be NULL, in which case no isolate is ready to - * execute. Most of the Dart apis require there to be a current - * isolate in order to function without error. The current isolate is - * set by any call to Dart_CreateIsolateGroup or Dart_EnterIsolate. - */ -typedef struct _Dart_Isolate* Dart_Isolate; -typedef struct _Dart_IsolateGroup* Dart_IsolateGroup; - -/** - * An object reference managed by the Dart VM garbage collector. - * - * Because the garbage collector may move objects, it is unsafe to - * refer to objects directly. Instead, we refer to objects through - * handles, which are known to the garbage collector and updated - * automatically when the object is moved. Handles should be passed - * by value (except in cases like out-parameters) and should never be - * allocated on the heap. - * - * Most functions in the Dart Embedding API return a handle. When a - * function completes normally, this will be a valid handle to an - * object in the Dart VM heap. This handle may represent the result of - * the operation or it may be a special valid handle used merely to - * indicate successful completion. Note that a valid handle may in - * some cases refer to the null object. - * - * --- Error handles --- - * - * When a function encounters a problem that prevents it from - * completing normally, it returns an error handle (See Dart_IsError). - * An error handle has an associated error message that gives more - * details about the problem (See Dart_GetError). - * - * There are four kinds of error handles that can be produced, - * depending on what goes wrong: - * - * - Api error handles are produced when an api function is misused. - * This happens when a Dart embedding api function is called with - * invalid arguments or in an invalid context. - * - * - Unhandled exception error handles are produced when, during the - * execution of Dart code, an exception is thrown but not caught. - * Prototypically this would occur during a call to Dart_Invoke, but - * it can occur in any function which triggers the execution of Dart - * code (for example, Dart_ToString). - * - * An unhandled exception error provides access to an exception and - * stacktrace via the functions Dart_ErrorGetException and - * Dart_ErrorGetStackTrace. - * - * - Compilation error handles are produced when, during the execution - * of Dart code, a compile-time error occurs. As above, this can - * occur in any function which triggers the execution of Dart code. - * - * - Fatal error handles are produced when the system wants to shut - * down the current isolate. - * - * --- Propagating errors --- - * - * When an error handle is returned from the top level invocation of - * Dart code in a program, the embedder must handle the error as they - * see fit. Often, the embedder will print the error message produced - * by Dart_Error and exit the program. - * - * When an error is returned while in the body of a native function, - * it can be propagated up the call stack by calling - * Dart_PropagateError, Dart_SetReturnValue, or Dart_ThrowException. - * Errors should be propagated unless there is a specific reason not - * to. If an error is not propagated then it is ignored. For - * example, if an unhandled exception error is ignored, that - * effectively "catches" the unhandled exception. Fatal errors must - * always be propagated. - * - * When an error is propagated, any current scopes created by - * Dart_EnterScope will be exited. - * - * Using Dart_SetReturnValue to propagate an exception is somewhat - * more convenient than using Dart_PropagateError, and should be - * preferred for reasons discussed below. - * - * Dart_PropagateError and Dart_ThrowException do not return. Instead - * they transfer control non-locally using a setjmp-like mechanism. - * This can be inconvenient if you have resources that you need to - * clean up before propagating the error. - * - * When relying on Dart_PropagateError, we often return error handles - * rather than propagating them from helper functions. Consider the - * following contrived example: - * - * 1 Dart_Handle isLongStringHelper(Dart_Handle arg) { - * 2 intptr_t* length = 0; - * 3 result = Dart_StringLength(arg, &length); - * 4 if (Dart_IsError(result)) { - * 5 return result; - * 6 } - * 7 return Dart_NewBoolean(length > 100); - * 8 } - * 9 - * 10 void NativeFunction_isLongString(Dart_NativeArguments args) { - * 11 Dart_EnterScope(); - * 12 AllocateMyResource(); - * 13 Dart_Handle arg = Dart_GetNativeArgument(args, 0); - * 14 Dart_Handle result = isLongStringHelper(arg); - * 15 if (Dart_IsError(result)) { - * 16 FreeMyResource(); - * 17 Dart_PropagateError(result); - * 18 abort(); // will not reach here - * 19 } - * 20 Dart_SetReturnValue(result); - * 21 FreeMyResource(); - * 22 Dart_ExitScope(); - * 23 } - * - * In this example, we have a native function which calls a helper - * function to do its work. On line 5, the helper function could call - * Dart_PropagateError, but that would not give the native function a - * chance to call FreeMyResource(), causing a leak. Instead, the - * helper function returns the error handle to the caller, giving the - * caller a chance to clean up before propagating the error handle. - * - * When an error is propagated by calling Dart_SetReturnValue, the - * native function will be allowed to complete normally and then the - * exception will be propagated only once the native call - * returns. This can be convenient, as it allows the C code to clean - * up normally. - * - * The example can be written more simply using Dart_SetReturnValue to - * propagate the error. - * - * 1 Dart_Handle isLongStringHelper(Dart_Handle arg) { - * 2 intptr_t* length = 0; - * 3 result = Dart_StringLength(arg, &length); - * 4 if (Dart_IsError(result)) { - * 5 return result - * 6 } - * 7 return Dart_NewBoolean(length > 100); - * 8 } - * 9 - * 10 void NativeFunction_isLongString(Dart_NativeArguments args) { - * 11 Dart_EnterScope(); - * 12 AllocateMyResource(); - * 13 Dart_Handle arg = Dart_GetNativeArgument(args, 0); - * 14 Dart_SetReturnValue(isLongStringHelper(arg)); - * 15 FreeMyResource(); - * 16 Dart_ExitScope(); - * 17 } - * - * In this example, the call to Dart_SetReturnValue on line 14 will - * either return the normal return value or the error (potentially - * generated on line 3). The call to FreeMyResource on line 15 will - * execute in either case. - * - * --- Local and persistent handles --- - * - * Local handles are allocated within the current scope (see - * Dart_EnterScope) and go away when the current scope exits. Unless - * otherwise indicated, callers should assume that all functions in - * the Dart embedding api return local handles. - * - * Persistent handles are allocated within the current isolate. They - * can be used to store objects across scopes. Persistent handles have - * the lifetime of the current isolate unless they are explicitly - * deallocated (see Dart_DeletePersistentHandle). - * The type Dart_Handle represents a handle (both local and persistent). - * The type Dart_PersistentHandle is a Dart_Handle and it is used to - * document that a persistent handle is expected as a parameter to a call - * or the return value from a call is a persistent handle. - * - * FinalizableHandles are persistent handles which are auto deleted when - * the object is garbage collected. It is never safe to use these handles - * unless you know the object is still reachable. - * - * WeakPersistentHandles are persistent handles which are automatically set - * to point Dart_Null when the object is garbage collected. They are not auto - * deleted, so it is safe to use them after the object has become unreachable. - */ -typedef struct _Dart_Handle* Dart_Handle; -typedef Dart_Handle Dart_PersistentHandle; -typedef struct _Dart_WeakPersistentHandle* Dart_WeakPersistentHandle; -typedef struct _Dart_FinalizableHandle* Dart_FinalizableHandle; -// These structs are versioned by DART_API_DL_MAJOR_VERSION, bump the -// version when changing this struct. - -typedef void (*Dart_HandleFinalizer)(void* isolate_callback_data, void* peer); - -/** - * Is this an error handle? - * - * Requires there to be a current isolate. - */ -DART_EXPORT bool Dart_IsError(Dart_Handle handle); - -/** - * Is this an api error handle? - * - * Api error handles are produced when an api function is misused. - * This happens when a Dart embedding api function is called with - * invalid arguments or in an invalid context. - * - * Requires there to be a current isolate. - */ -DART_EXPORT bool Dart_IsApiError(Dart_Handle handle); - -/** - * Is this an unhandled exception error handle? - * - * Unhandled exception error handles are produced when, during the - * execution of Dart code, an exception is thrown but not caught. - * This can occur in any function which triggers the execution of Dart - * code. - * - * See Dart_ErrorGetException and Dart_ErrorGetStackTrace. - * - * Requires there to be a current isolate. - */ -DART_EXPORT bool Dart_IsUnhandledExceptionError(Dart_Handle handle); - -/** - * Is this a compilation error handle? - * - * Compilation error handles are produced when, during the execution - * of Dart code, a compile-time error occurs. This can occur in any - * function which triggers the execution of Dart code. - * - * Requires there to be a current isolate. - */ -DART_EXPORT bool Dart_IsCompilationError(Dart_Handle handle); - -/** - * Is this a fatal error handle? - * - * Fatal error handles are produced when the system wants to shut down - * the current isolate. - * - * Requires there to be a current isolate. - */ -DART_EXPORT bool Dart_IsFatalError(Dart_Handle handle); - -/** - * Gets the error message from an error handle. - * - * Requires there to be a current isolate. - * - * \return A C string containing an error message if the handle is - * error. An empty C string ("") if the handle is valid. This C - * String is scope allocated and is only valid until the next call - * to Dart_ExitScope. -*/ -DART_EXPORT const char* Dart_GetError(Dart_Handle handle); - -/** - * Is this an error handle for an unhandled exception? - */ -DART_EXPORT bool Dart_ErrorHasException(Dart_Handle handle); - -/** - * Gets the exception Object from an unhandled exception error handle. - */ -DART_EXPORT Dart_Handle Dart_ErrorGetException(Dart_Handle handle); - -/** - * Gets the stack trace Object from an unhandled exception error handle. - */ -DART_EXPORT Dart_Handle Dart_ErrorGetStackTrace(Dart_Handle handle); - -/** - * Produces an api error handle with the provided error message. - * - * Requires there to be a current isolate. - * - * \param error the error message. - */ -DART_EXPORT Dart_Handle Dart_NewApiError(const char* error); -DART_EXPORT Dart_Handle Dart_NewCompilationError(const char* error); - -/** - * Produces a new unhandled exception error handle. - * - * Requires there to be a current isolate. - * - * \param exception An instance of a Dart object to be thrown or - * an ApiError or CompilationError handle. - * When an ApiError or CompilationError handle is passed in - * a string object of the error message is created and it becomes - * the Dart object to be thrown. - */ -DART_EXPORT Dart_Handle Dart_NewUnhandledExceptionError(Dart_Handle exception); - -/** - * Propagates an error. - * - * If the provided handle is an unhandled exception error, this - * function will cause the unhandled exception to be rethrown. This - * will proceed in the standard way, walking up Dart frames until an - * appropriate 'catch' block is found, executing 'finally' blocks, - * etc. - * - * If the error is not an unhandled exception error, we will unwind - * the stack to the next C frame. Intervening Dart frames will be - * discarded; specifically, 'finally' blocks will not execute. This - * is the standard way that compilation errors (and the like) are - * handled by the Dart runtime. - * - * In either case, when an error is propagated any current scopes - * created by Dart_EnterScope will be exited. - * - * See the additional discussion under "Propagating Errors" at the - * beginning of this file. - * - * \param handle An error handle (See Dart_IsError) - * - * On success, this function does not return. On failure, the - * process is terminated. - */ -DART_EXPORT void Dart_PropagateError(Dart_Handle handle); - -/** - * Converts an object to a string. - * - * May generate an unhandled exception error. - * - * \return The converted string if no error occurs during - * the conversion. If an error does occur, an error handle is - * returned. - */ -DART_EXPORT Dart_Handle Dart_ToString(Dart_Handle object); - -/** - * Checks to see if two handles refer to identically equal objects. - * - * If both handles refer to instances, this is equivalent to using the top-level - * function identical() from dart:core. Otherwise, returns whether the two - * argument handles refer to the same object. - * - * \param obj1 An object to be compared. - * \param obj2 An object to be compared. - * - * \return True if the objects are identically equal. False otherwise. - */ -DART_EXPORT bool Dart_IdentityEquals(Dart_Handle obj1, Dart_Handle obj2); - -/** - * Allocates a handle in the current scope from a persistent handle. - */ -DART_EXPORT Dart_Handle Dart_HandleFromPersistent(Dart_PersistentHandle object); - -/** - * Allocates a handle in the current scope from a weak persistent handle. - * - * This will be a handle to Dart_Null if the object has been garbage collected. - */ -DART_EXPORT Dart_Handle -Dart_HandleFromWeakPersistent(Dart_WeakPersistentHandle object); - -/** - * Allocates a persistent handle for an object. - * - * This handle has the lifetime of the current isolate unless it is - * explicitly deallocated by calling Dart_DeletePersistentHandle. - * - * Requires there to be a current isolate. - */ -DART_EXPORT Dart_PersistentHandle Dart_NewPersistentHandle(Dart_Handle object); - -/** - * Assign value of local handle to a persistent handle. - * - * Requires there to be a current isolate. - * - * \param obj1 A persistent handle whose value needs to be set. - * \param obj2 An object whose value needs to be set to the persistent handle. - */ -DART_EXPORT void Dart_SetPersistentHandle(Dart_PersistentHandle obj1, - Dart_Handle obj2); - -/** - * Deallocates a persistent handle. - * - * Requires there to be a current isolate group. - */ -DART_EXPORT void Dart_DeletePersistentHandle(Dart_PersistentHandle object); - -/** - * Allocates a weak persistent handle for an object. - * - * This handle has the lifetime of the current isolate. The handle can also be - * explicitly deallocated by calling Dart_DeleteWeakPersistentHandle. - * - * If the object becomes unreachable the callback is invoked with the peer as - * argument. The callback can be executed on any thread, will have a current - * isolate group, but will not have a current isolate. The callback can only - * call Dart_DeletePersistentHandle or Dart_DeleteWeakPersistentHandle. This - * gives the embedder the ability to cleanup data associated with the object. - * The handle will point to the Dart_Null object after the finalizer has been - * run. It is illegal to call into the VM with any other Dart_* functions from - * the callback. If the handle is deleted before the object becomes - * unreachable, the callback is never invoked. - * - * Requires there to be a current isolate. - * - * \param object An object with identity. - * \param peer A pointer to a native object or NULL. This value is - * provided to callback when it is invoked. - * \param external_allocation_size The number of externally allocated - * bytes for peer. Used to inform the garbage collector. - * \param callback A function pointer that will be invoked sometime - * after the object is garbage collected, unless the handle has been deleted. - * A valid callback needs to be specified it cannot be NULL. - * - * \return The weak persistent handle or NULL. NULL is returned in case of bad - * parameters. - */ -DART_EXPORT Dart_WeakPersistentHandle -Dart_NewWeakPersistentHandle(Dart_Handle object, - void* peer, - intptr_t external_allocation_size, - Dart_HandleFinalizer callback); - -/** - * Deletes the given weak persistent [object] handle. - * - * Requires there to be a current isolate group. - */ -DART_EXPORT void Dart_DeleteWeakPersistentHandle( - Dart_WeakPersistentHandle object); - -/** - * Updates the external memory size for the given weak persistent handle. - * - * May trigger garbage collection. - */ -DART_EXPORT void Dart_UpdateExternalSize(Dart_WeakPersistentHandle object, - intptr_t external_allocation_size); - -/** - * Allocates a finalizable handle for an object. - * - * This handle has the lifetime of the current isolate group unless the object - * pointed to by the handle is garbage collected, in this case the VM - * automatically deletes the handle after invoking the callback associated - * with the handle. The handle can also be explicitly deallocated by - * calling Dart_DeleteFinalizableHandle. - * - * If the object becomes unreachable the callback is invoked with the - * the peer as argument. The callback can be executed on any thread, will have - * an isolate group, but will not have a current isolate. The callback can only - * call Dart_DeletePersistentHandle or Dart_DeleteWeakPersistentHandle. - * This gives the embedder the ability to cleanup data associated with the - * object and clear out any cached references to the handle. All references to - * this handle after the callback will be invalid. It is illegal to call into - * the VM with any other Dart_* functions from the callback. If the handle is - * deleted before the object becomes unreachable, the callback is never - * invoked. - * - * Requires there to be a current isolate. - * - * \param object An object with identity. - * \param peer A pointer to a native object or NULL. This value is - * provided to callback when it is invoked. - * \param external_allocation_size The number of externally allocated - * bytes for peer. Used to inform the garbage collector. - * \param callback A function pointer that will be invoked sometime - * after the object is garbage collected, unless the handle has been deleted. - * A valid callback needs to be specified it cannot be NULL. - * - * \return The finalizable handle or NULL. NULL is returned in case of bad - * parameters. - */ -DART_EXPORT Dart_FinalizableHandle -Dart_NewFinalizableHandle(Dart_Handle object, - void* peer, - intptr_t external_allocation_size, - Dart_HandleFinalizer callback); - -/** - * Deletes the given finalizable [object] handle. - * - * The caller has to provide the actual Dart object the handle was created from - * to prove the object (and therefore the finalizable handle) is still alive. - * - * Requires there to be a current isolate. - */ -DART_EXPORT void Dart_DeleteFinalizableHandle(Dart_FinalizableHandle object, - Dart_Handle strong_ref_to_object); - -/** - * Updates the external memory size for the given finalizable handle. - * - * The caller has to provide the actual Dart object the handle was created from - * to prove the object (and therefore the finalizable handle) is still alive. - * - * May trigger garbage collection. - */ -DART_EXPORT void Dart_UpdateFinalizableExternalSize( - Dart_FinalizableHandle object, - Dart_Handle strong_ref_to_object, - intptr_t external_allocation_size); - -/* - * ========================== - * Initialization and Globals - * ========================== - */ - -/** - * Gets the version string for the Dart VM. - * - * The version of the Dart VM can be accessed without initializing the VM. - * - * \return The version string for the embedded Dart VM. - */ -DART_EXPORT const char* Dart_VersionString(void); - -/** - * Isolate specific flags are set when creating a new isolate using the - * Dart_IsolateFlags structure. - * - * Current version of flags is encoded in a 32-bit integer with 16 bits used - * for each part. - */ - -#define DART_FLAGS_CURRENT_VERSION (0x0000000c) - -typedef struct { - int32_t version; - bool enable_asserts; - bool use_field_guards; - bool use_osr; - bool obfuscate; - bool load_vmservice_library; - bool copy_parent_code; - bool null_safety; - bool is_system_isolate; - bool snapshot_is_dontneed_safe; - bool branch_coverage; -} Dart_IsolateFlags; - -/** - * Initialize Dart_IsolateFlags with correct version and default values. - */ -DART_EXPORT void Dart_IsolateFlagsInitialize(Dart_IsolateFlags* flags); - -/** - * An isolate creation and initialization callback function. - * - * This callback, provided by the embedder, is called when the VM - * needs to create an isolate. The callback should create an isolate - * by calling Dart_CreateIsolateGroup and load any scripts required for - * execution. - * - * This callback may be called on a different thread than the one - * running the parent isolate. - * - * When the function returns NULL, it is the responsibility of this - * function to ensure that Dart_ShutdownIsolate has been called if - * required (for example, if the isolate was created successfully by - * Dart_CreateIsolateGroup() but the root library fails to load - * successfully, then the function should call Dart_ShutdownIsolate - * before returning). - * - * When the function returns NULL, the function should set *error to - * a malloc-allocated buffer containing a useful error message. The - * caller of this function (the VM) will make sure that the buffer is - * freed. - * - * \param script_uri The uri of the main source file or snapshot to load. - * Either the URI of the parent isolate set in Dart_CreateIsolateGroup for - * Isolate.spawn, or the argument to Isolate.spawnUri canonicalized by the - * library tag handler of the parent isolate. - * The callback is responsible for loading the program by a call to - * Dart_LoadScriptFromKernel. - * \param main The name of the main entry point this isolate will - * eventually run. This is provided for advisory purposes only to - * improve debugging messages. The main function is not invoked by - * this function. - * \param package_root Ignored. - * \param package_config Uri of the package configuration file (either in format - * of .packages or .dart_tool/package_config.json) for this isolate - * to resolve package imports against. If this parameter is not passed the - * package resolution of the parent isolate should be used. - * \param flags Default flags for this isolate being spawned. Either inherited - * from the spawning isolate or passed as parameters when spawning the - * isolate from Dart code. - * \param isolate_data The isolate data which was passed to the - * parent isolate when it was created by calling Dart_CreateIsolateGroup(). - * \param error A structure into which the embedder can place a - * C string containing an error message in the case of failures. - * - * \return The embedder returns NULL if the creation and - * initialization was not successful and the isolate if successful. - */ -typedef Dart_Isolate (*Dart_IsolateGroupCreateCallback)( - const char* script_uri, - const char* main, - const char* package_root, - const char* package_config, - Dart_IsolateFlags* flags, - void* isolate_data, - char** error); - -/** - * An isolate initialization callback function. - * - * This callback, provided by the embedder, is called when the VM has created an - * isolate within an existing isolate group (i.e. from the same source as an - * existing isolate). - * - * The callback should setup native resolvers and might want to set a custom - * message handler via [Dart_SetMessageNotifyCallback] and mark the isolate as - * runnable. - * - * This callback may be called on a different thread than the one - * running the parent isolate. - * - * When the function returns `false`, it is the responsibility of this - * function to ensure that `Dart_ShutdownIsolate` has been called. - * - * When the function returns `false`, the function should set *error to - * a malloc-allocated buffer containing a useful error message. The - * caller of this function (the VM) will make sure that the buffer is - * freed. - * - * \param child_isolate_data The callback data to associate with the new - * child isolate. - * \param error A structure into which the embedder can place a - * C string containing an error message in the case the initialization fails. - * - * \return The embedder returns true if the initialization was successful and - * false otherwise (in which case the VM will terminate the isolate). - */ -typedef bool (*Dart_InitializeIsolateCallback)(void** child_isolate_data, - char** error); - -/** - * An isolate shutdown callback function. - * - * This callback, provided by the embedder, is called before the vm - * shuts down an isolate. The isolate being shutdown will be the current - * isolate. It is safe to run Dart code. - * - * This function should be used to dispose of native resources that - * are allocated to an isolate in order to avoid leaks. - * - * \param isolate_group_data The same callback data which was passed to the - * isolate group when it was created. - * \param isolate_data The same callback data which was passed to the isolate - * when it was created. - */ -typedef void (*Dart_IsolateShutdownCallback)(void* isolate_group_data, - void* isolate_data); - -/** - * An isolate cleanup callback function. - * - * This callback, provided by the embedder, is called after the vm - * shuts down an isolate. There will be no current isolate and it is *not* - * safe to run Dart code. - * - * This function should be used to dispose of native resources that - * are allocated to an isolate in order to avoid leaks. - * - * \param isolate_group_data The same callback data which was passed to the - * isolate group when it was created. - * \param isolate_data The same callback data which was passed to the isolate - * when it was created. - */ -typedef void (*Dart_IsolateCleanupCallback)(void* isolate_group_data, - void* isolate_data); - -/** - * An isolate group cleanup callback function. - * - * This callback, provided by the embedder, is called after the vm - * shuts down an isolate group. - * - * This function should be used to dispose of native resources that - * are allocated to an isolate in order to avoid leaks. - * - * \param isolate_group_data The same callback data which was passed to the - * isolate group when it was created. - * - */ -typedef void (*Dart_IsolateGroupCleanupCallback)(void* isolate_group_data); - -/** - * A thread start callback function. - * This callback, provided by the embedder, is called after a thread in the - * vm thread pool starts. - * This function could be used to adjust thread priority or attach native - * resources to the thread. - */ -typedef void (*Dart_ThreadStartCallback)(void); - -/** - * A thread death callback function. - * This callback, provided by the embedder, is called before a thread in the - * vm thread pool exits. - * This function could be used to dispose of native resources that - * are associated and attached to the thread, in order to avoid leaks. - */ -typedef void (*Dart_ThreadExitCallback)(void); - -/** - * Opens a file for reading or writing. - * - * Callback provided by the embedder for file operations. If the - * embedder does not allow file operations this callback can be - * NULL. - * - * \param name The name of the file to open. - * \param write A boolean variable which indicates if the file is to - * opened for writing. If there is an existing file it needs to truncated. - */ -typedef void* (*Dart_FileOpenCallback)(const char* name, bool write); - -/** - * Read contents of file. - * - * Callback provided by the embedder for file operations. If the - * embedder does not allow file operations this callback can be - * NULL. - * - * \param data Buffer allocated in the callback into which the contents - * of the file are read into. It is the responsibility of the caller to - * free this buffer. - * \param file_length A variable into which the length of the file is returned. - * In the case of an error this value would be -1. - * \param stream Handle to the opened file. - */ -typedef void (*Dart_FileReadCallback)(uint8_t** data, - intptr_t* file_length, - void* stream); - -/** - * Write data into file. - * - * Callback provided by the embedder for file operations. If the - * embedder does not allow file operations this callback can be - * NULL. - * - * \param data Buffer which needs to be written into the file. - * \param length Length of the buffer. - * \param stream Handle to the opened file. - */ -typedef void (*Dart_FileWriteCallback)(const void* data, - intptr_t length, - void* stream); - -/** - * Closes the opened file. - * - * Callback provided by the embedder for file operations. If the - * embedder does not allow file operations this callback can be - * NULL. - * - * \param stream Handle to the opened file. - */ -typedef void (*Dart_FileCloseCallback)(void* stream); - -typedef bool (*Dart_EntropySource)(uint8_t* buffer, intptr_t length); - -/** - * Callback provided by the embedder that is used by the vmservice isolate - * to request the asset archive. The asset archive must be an uncompressed tar - * archive that is stored in a Uint8List. - * - * If the embedder has no vmservice isolate assets, the callback can be NULL. - * - * \return The embedder must return a handle to a Uint8List containing an - * uncompressed tar archive or null. - */ -typedef Dart_Handle (*Dart_GetVMServiceAssetsArchive)(void); - -/** - * The current version of the Dart_InitializeFlags. Should be incremented every - * time Dart_InitializeFlags changes in a binary incompatible way. - */ -#define DART_INITIALIZE_PARAMS_CURRENT_VERSION (0x00000007) - -/** Forward declaration */ -struct Dart_CodeObserver; - -/** - * Callback provided by the embedder that is used by the VM to notify on code - * object creation, *before* it is invoked the first time. - * This is useful for embedders wanting to e.g. keep track of PCs beyond - * the lifetime of the garbage collected code objects. - * Note that an address range may be used by more than one code object over the - * lifecycle of a process. Clients of this function should record timestamps for - * these compilation events and when collecting PCs to disambiguate reused - * address ranges. - */ -typedef void (*Dart_OnNewCodeCallback)(struct Dart_CodeObserver* observer, - const char* name, - uintptr_t base, - uintptr_t size); - -typedef struct Dart_CodeObserver { - void* data; - - Dart_OnNewCodeCallback on_new_code; -} Dart_CodeObserver; - -/** - * Optional callback provided by the embedder that is used by the VM to - * implement registration of kernel blobs for the subsequent Isolate.spawnUri - * If no callback is provided, the registration of kernel blobs will throw - * an error. - * - * \param kernel_buffer A buffer which contains a kernel program. Callback - * should copy the contents of `kernel_buffer` as - * it may be freed immediately after registration. - * \param kernel_buffer_size The size of `kernel_buffer`. - * - * \return A C string representing URI which can be later used - * to spawn a new isolate. This C String should be scope allocated - * or owned by the embedder. - * Returns NULL if embedder runs out of memory. - */ -typedef const char* (*Dart_RegisterKernelBlobCallback)( - const uint8_t* kernel_buffer, - intptr_t kernel_buffer_size); - -/** - * Optional callback provided by the embedder that is used by the VM to - * unregister kernel blobs. - * If no callback is provided, the unregistration of kernel blobs will throw - * an error. - * - * \param kernel_blob_uri URI of the kernel blob to unregister. - */ -typedef void (*Dart_UnregisterKernelBlobCallback)(const char* kernel_blob_uri); - -/** - * Describes how to initialize the VM. Used with Dart_Initialize. - */ -typedef struct { - /** - * Identifies the version of the struct used by the client. - * should be initialized to DART_INITIALIZE_PARAMS_CURRENT_VERSION. - */ - int32_t version; - - /** - * A buffer containing snapshot data, or NULL if no snapshot is provided. - * - * If provided, the buffer must remain valid until Dart_Cleanup returns. - */ - const uint8_t* vm_snapshot_data; - - /** - * A buffer containing a snapshot of precompiled instructions, or NULL if - * no snapshot is provided. - * - * If provided, the buffer must remain valid until Dart_Cleanup returns. - */ - const uint8_t* vm_snapshot_instructions; - - /** - * A function to be called during isolate group creation. - * See Dart_IsolateGroupCreateCallback. - */ - Dart_IsolateGroupCreateCallback create_group; - - /** - * A function to be called during isolate - * initialization inside an existing isolate group. - * See Dart_InitializeIsolateCallback. - */ - Dart_InitializeIsolateCallback initialize_isolate; - - /** - * A function to be called right before an isolate is shutdown. - * See Dart_IsolateShutdownCallback. - */ - Dart_IsolateShutdownCallback shutdown_isolate; - - /** - * A function to be called after an isolate was shutdown. - * See Dart_IsolateCleanupCallback. - */ - Dart_IsolateCleanupCallback cleanup_isolate; - - /** - * A function to be called after an isolate group is - * shutdown. See Dart_IsolateGroupCleanupCallback. - */ - Dart_IsolateGroupCleanupCallback cleanup_group; - - Dart_ThreadStartCallback thread_start; - Dart_ThreadExitCallback thread_exit; - Dart_FileOpenCallback file_open; - Dart_FileReadCallback file_read; - Dart_FileWriteCallback file_write; - Dart_FileCloseCallback file_close; - Dart_EntropySource entropy_source; - - /** - * A function to be called by the service isolate when it requires the - * vmservice assets archive. See Dart_GetVMServiceAssetsArchive. - */ - Dart_GetVMServiceAssetsArchive get_service_assets; - - bool start_kernel_isolate; - - /** - * An external code observer callback function. The observer can be invoked - * as early as during the Dart_Initialize() call. - */ - Dart_CodeObserver* code_observer; - - /** - * Kernel blob registration callback function. See Dart_RegisterKernelBlobCallback. - */ - Dart_RegisterKernelBlobCallback register_kernel_blob; - - /** - * Kernel blob unregistration callback function. See Dart_UnregisterKernelBlobCallback. - */ - Dart_UnregisterKernelBlobCallback unregister_kernel_blob; -} Dart_InitializeParams; - -/** - * Initializes the VM. - * - * \param params A struct containing initialization information. The version - * field of the struct must be DART_INITIALIZE_PARAMS_CURRENT_VERSION. - * - * \return NULL if initialization is successful. Returns an error message - * otherwise. The caller is responsible for freeing the error message. - */ -DART_EXPORT DART_WARN_UNUSED_RESULT char* Dart_Initialize( - Dart_InitializeParams* params); - -/** - * Cleanup state in the VM before process termination. - * - * \return NULL if cleanup is successful. Returns an error message otherwise. - * The caller is responsible for freeing the error message. - * - * NOTE: This function must not be called on a thread that was created by the VM - * itself. - */ -DART_EXPORT DART_WARN_UNUSED_RESULT char* Dart_Cleanup(void); - -/** - * Sets command line flags. Should be called before Dart_Initialize. - * - * \param argc The length of the arguments array. - * \param argv An array of arguments. - * - * \return NULL if successful. Returns an error message otherwise. - * The caller is responsible for freeing the error message. - * - * NOTE: This call does not store references to the passed in c-strings. - */ -DART_EXPORT DART_WARN_UNUSED_RESULT char* Dart_SetVMFlags(int argc, - const char** argv); - -/** - * Returns true if the named VM flag is of boolean type, specified, and set to - * true. - * - * \param flag_name The name of the flag without leading punctuation - * (example: "enable_asserts"). - */ -DART_EXPORT bool Dart_IsVMFlagSet(const char* flag_name); - -/* - * ======== - * Isolates - * ======== - */ - -/** - * Creates a new isolate. The new isolate becomes the current isolate. - * - * A snapshot can be used to restore the VM quickly to a saved state - * and is useful for fast startup. If snapshot data is provided, the - * isolate will be started using that snapshot data. Requires a core snapshot or - * an app snapshot created by Dart_CreateSnapshot or - * Dart_CreatePrecompiledSnapshot* from a VM with the same version. - * - * Requires there to be no current isolate. - * - * \param script_uri The main source file or snapshot this isolate will load. - * The VM will provide this URI to the Dart_IsolateGroupCreateCallback when a - * child isolate is created by Isolate.spawn. The embedder should use a URI - * that allows it to load the same program into such a child isolate. - * \param name A short name for the isolate to improve debugging messages. - * Typically of the format 'foo.dart:main()'. - * \param isolate_snapshot_data Buffer containing the snapshot data of the - * isolate or NULL if no snapshot is provided. If provided, the buffer must - * remain valid until the isolate shuts down. - * \param isolate_snapshot_instructions Buffer containing the snapshot - * instructions of the isolate or NULL if no snapshot is provided. If - * provided, the buffer must remain valid until the isolate shuts down. - * \param flags Pointer to VM specific flags or NULL for default flags. - * \param isolate_group_data Embedder group data. This data can be obtained - * by calling Dart_IsolateGroupData and will be passed to the - * Dart_IsolateShutdownCallback, Dart_IsolateCleanupCallback, and - * Dart_IsolateGroupCleanupCallback. - * \param isolate_data Embedder data. This data will be passed to - * the Dart_IsolateGroupCreateCallback when new isolates are spawned from - * this parent isolate. - * \param error Returns NULL if creation is successful, an error message - * otherwise. The caller is responsible for calling free() on the error - * message. - * - * \return The new isolate on success, or NULL if isolate creation failed. - */ -DART_EXPORT Dart_Isolate -Dart_CreateIsolateGroup(const char* script_uri, - const char* name, - const uint8_t* isolate_snapshot_data, - const uint8_t* isolate_snapshot_instructions, - Dart_IsolateFlags* flags, - void* isolate_group_data, - void* isolate_data, - char** error); -/** - * Creates a new isolate inside the isolate group of [group_member]. - * - * Requires there to be no current isolate. - * - * \param group_member An isolate from the same group into which the newly created - * isolate should be born into. Other threads may not have entered / enter this - * member isolate. - * \param name A short name for the isolate for debugging purposes. - * \param shutdown_callback A callback to be called when the isolate is being - * shutdown (may be NULL). - * \param cleanup_callback A callback to be called when the isolate is being - * cleaned up (may be NULL). - * \param isolate_data The embedder-specific data associated with this isolate. - * \param error Set to NULL if creation is successful, set to an error - * message otherwise. The caller is responsible for calling free() on the - * error message. - * - * \return The newly created isolate on success, or NULL if isolate creation - * failed. - * - * If successful, the newly created isolate will become the current isolate. - */ -DART_EXPORT Dart_Isolate -Dart_CreateIsolateInGroup(Dart_Isolate group_member, - const char* name, - Dart_IsolateShutdownCallback shutdown_callback, - Dart_IsolateCleanupCallback cleanup_callback, - void* child_isolate_data, - char** error); - -/* TODO(turnidge): Document behavior when there is already a current - * isolate. */ - -/** - * Creates a new isolate from a Dart Kernel file. The new isolate - * becomes the current isolate. - * - * Requires there to be no current isolate. - * - * \param script_uri The main source file or snapshot this isolate will load. - * The VM will provide this URI to the Dart_IsolateGroupCreateCallback when a - * child isolate is created by Isolate.spawn. The embedder should use a URI that - * allows it to load the same program into such a child isolate. - * \param name A short name for the isolate to improve debugging messages. - * Typically of the format 'foo.dart:main()'. - * \param kernel_buffer A buffer which contains a kernel/DIL program. Must - * remain valid until isolate shutdown. - * \param kernel_buffer_size The size of `kernel_buffer`. - * \param flags Pointer to VM specific flags or NULL for default flags. - * \param isolate_group_data Embedder group data. This data can be obtained - * by calling Dart_IsolateGroupData and will be passed to the - * Dart_IsolateShutdownCallback, Dart_IsolateCleanupCallback, and - * Dart_IsolateGroupCleanupCallback. - * \param isolate_data Embedder data. This data will be passed to - * the Dart_IsolateGroupCreateCallback when new isolates are spawned from - * this parent isolate. - * \param error Returns NULL if creation is successful, an error message - * otherwise. The caller is responsible for calling free() on the error - * message. - * - * \return The new isolate on success, or NULL if isolate creation failed. - */ -DART_EXPORT Dart_Isolate -Dart_CreateIsolateGroupFromKernel(const char* script_uri, - const char* name, - const uint8_t* kernel_buffer, - intptr_t kernel_buffer_size, - Dart_IsolateFlags* flags, - void* isolate_group_data, - void* isolate_data, - char** error); -/** - * Shuts down the current isolate. After this call, the current isolate is NULL. - * Any current scopes created by Dart_EnterScope will be exited. Invokes the - * shutdown callback and any callbacks of remaining weak persistent handles. - * - * Requires there to be a current isolate. - */ -DART_EXPORT void Dart_ShutdownIsolate(void); -/* TODO(turnidge): Document behavior when there is no current isolate. */ - -/** - * Returns the current isolate. Will return NULL if there is no - * current isolate. - */ -DART_EXPORT Dart_Isolate Dart_CurrentIsolate(void); - -/** - * Returns the callback data associated with the current isolate. This - * data was set when the isolate got created or initialized. - */ -DART_EXPORT void* Dart_CurrentIsolateData(void); - -/** - * Returns the callback data associated with the given isolate. This - * data was set when the isolate got created or initialized. - */ -DART_EXPORT void* Dart_IsolateData(Dart_Isolate isolate); - -/** - * Returns the current isolate group. Will return NULL if there is no - * current isolate group. - */ -DART_EXPORT Dart_IsolateGroup Dart_CurrentIsolateGroup(void); - -/** - * Returns the callback data associated with the current isolate group. This - * data was passed to the isolate group when it was created. - */ -DART_EXPORT void* Dart_CurrentIsolateGroupData(void); - -/** - * Gets an id that uniquely identifies current isolate group. - * - * It is the responsibility of the caller to free the returned ID. - */ -typedef int64_t Dart_IsolateGroupId; -DART_EXPORT Dart_IsolateGroupId Dart_CurrentIsolateGroupId(); - -/** - * Returns the callback data associated with the specified isolate group. This - * data was passed to the isolate when it was created. - * The embedder is responsible for ensuring the consistency of this data - * with respect to the lifecycle of an isolate group. - */ -DART_EXPORT void* Dart_IsolateGroupData(Dart_Isolate isolate); - -/** - * Returns the debugging name for the current isolate. - * - * This name is unique to each isolate and should only be used to make - * debugging messages more comprehensible. - */ -DART_EXPORT Dart_Handle Dart_DebugName(void); - -/** - * Returns the ID for an isolate which is used to query the service protocol. - * - * It is the responsibility of the caller to free the returned ID. - */ -DART_EXPORT const char* Dart_IsolateServiceId(Dart_Isolate isolate); - -/** - * Enters an isolate. After calling this function, - * the current isolate will be set to the provided isolate. - * - * Requires there to be no current isolate. Multiple threads may not be in - * the same isolate at once. - */ -DART_EXPORT void Dart_EnterIsolate(Dart_Isolate isolate); - -/** - * Kills the given isolate. - * - * This function has the same effect as dart:isolate's - * Isolate.kill(priority:immediate). - * It can interrupt ordinary Dart code but not native code. If the isolate is - * in the middle of a long running native function, the isolate will not be - * killed until control returns to Dart. - * - * Does not require a current isolate. It is safe to kill the current isolate if - * there is one. - */ -DART_EXPORT void Dart_KillIsolate(Dart_Isolate isolate); - -/** - * Notifies the VM that the embedder expects to be idle until |deadline|. The VM - * may use this time to perform garbage collection or other tasks to avoid - * delays during execution of Dart code in the future. - * - * |deadline| is measured in microseconds against the system's monotonic time. - * This clock can be accessed via Dart_TimelineGetMicros(). - * - * Requires there to be a current isolate. - */ -DART_EXPORT void Dart_NotifyIdle(int64_t deadline); - -/** - * Notifies the VM that the embedder expects the application's working set has - * recently shrunk significantly and is not expected to rise in the near future. - * The VM may spend O(heap-size) time performing clean up work. - * - * Requires there to be a current isolate. - */ -DART_EXPORT void Dart_NotifyDestroyed(void); - -/** - * Notifies the VM that the system is running low on memory. - * - * Does not require a current isolate. Only valid after calling Dart_Initialize. - */ -DART_EXPORT void Dart_NotifyLowMemory(void); - -typedef enum { - /** - * Balanced - */ - Dart_PerformanceMode_Default, - /** - * Optimize for low latency, at the expense of throughput and memory overhead - * by performing work in smaller batches (requiring more overhead) or by - * delaying work (requiring more memory). An embedder should not remain in - * this mode indefinitely. - */ - Dart_PerformanceMode_Latency, - /** - * Optimize for high throughput, at the expense of latency and memory overhead - * by performing work in larger batches with more intervening growth. - */ - Dart_PerformanceMode_Throughput, - /** - * Optimize for low memory, at the expensive of throughput and latency by more - * frequently performing work. - */ - Dart_PerformanceMode_Memory, -} Dart_PerformanceMode; - -/** - * Set the desired performance trade-off. - * - * Requires a current isolate. - * - * Returns the previous performance mode. - */ -DART_EXPORT Dart_PerformanceMode -Dart_SetPerformanceMode(Dart_PerformanceMode mode); - -/** - * Starts the CPU sampling profiler. - */ -DART_EXPORT void Dart_StartProfiling(void); - -/** - * Stops the CPU sampling profiler. - * - * Note that some profile samples might still be taken after this fucntion - * returns due to the asynchronous nature of the implementation on some - * platforms. - */ -DART_EXPORT void Dart_StopProfiling(void); - -/** - * Notifies the VM that the current thread should not be profiled until a - * matching call to Dart_ThreadEnableProfiling is made. - * - * NOTE: By default, if a thread has entered an isolate it will be profiled. - * This function should be used when an embedder knows a thread is about - * to make a blocking call and wants to avoid unnecessary interrupts by - * the profiler. - */ -DART_EXPORT void Dart_ThreadDisableProfiling(void); - -/** - * Notifies the VM that the current thread should be profiled. - * - * NOTE: It is only legal to call this function *after* calling - * Dart_ThreadDisableProfiling. - * - * NOTE: By default, if a thread has entered an isolate it will be profiled. - */ -DART_EXPORT void Dart_ThreadEnableProfiling(void); - -/** - * Register symbol information for the Dart VM's profiler and crash dumps. - * - * This consumes the output of //topaz/runtime/dart/profiler_symbols, which - * should be treated as opaque. - */ -DART_EXPORT void Dart_AddSymbols(const char* dso_name, - void* buffer, - intptr_t buffer_size); - -/** - * Exits an isolate. After this call, Dart_CurrentIsolate will - * return NULL. - * - * Requires there to be a current isolate. - */ -DART_EXPORT void Dart_ExitIsolate(void); -/* TODO(turnidge): We don't want users of the api to be able to exit a - * "pure" dart isolate. Implement and document. */ - -/** - * Creates a full snapshot of the current isolate heap. - * - * A full snapshot is a compact representation of the dart vm isolate heap - * and dart isolate heap states. These snapshots are used to initialize - * the vm isolate on startup and fast initialization of an isolate. - * A Snapshot of the heap is created before any dart code has executed. - * - * Requires there to be a current isolate. Not available in the precompiled - * runtime (check Dart_IsPrecompiledRuntime). - * - * \param vm_snapshot_data_buffer Returns a pointer to a buffer containing the - * vm snapshot. This buffer is scope allocated and is only valid - * until the next call to Dart_ExitScope. - * \param vm_snapshot_data_size Returns the size of vm_snapshot_data_buffer. - * \param isolate_snapshot_data_buffer Returns a pointer to a buffer containing - * the isolate snapshot. This buffer is scope allocated and is only valid - * until the next call to Dart_ExitScope. - * \param isolate_snapshot_data_size Returns the size of - * isolate_snapshot_data_buffer. - * \param is_core Create a snapshot containing core libraries. - * Such snapshot should be agnostic to null safety mode. - * - * \return A valid handle if no error occurs during the operation. - */ -DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle -Dart_CreateSnapshot(uint8_t** vm_snapshot_data_buffer, - intptr_t* vm_snapshot_data_size, - uint8_t** isolate_snapshot_data_buffer, - intptr_t* isolate_snapshot_data_size, - bool is_core); - -/** - * Returns whether the buffer contains a kernel file. - * - * \param buffer Pointer to a buffer that might contain a kernel binary. - * \param buffer_size Size of the buffer. - * - * \return Whether the buffer contains a kernel binary (full or partial). - */ -DART_EXPORT bool Dart_IsKernel(const uint8_t* buffer, intptr_t buffer_size); - -/** - * Make isolate runnable. - * - * When isolates are spawned, this function is used to indicate that - * the creation and initialization (including script loading) of the - * isolate is complete and the isolate can start. - * This function expects there to be no current isolate. - * - * \param isolate The isolate to be made runnable. - * - * \return NULL if successful. Returns an error message otherwise. The caller - * is responsible for freeing the error message. - */ -DART_EXPORT DART_WARN_UNUSED_RESULT char* Dart_IsolateMakeRunnable( - Dart_Isolate isolate); - -/* - * ================== - * Messages and Ports - * ================== - */ - -/** - * A port is used to send or receive inter-isolate messages - */ -typedef int64_t Dart_Port; - -/** - * ILLEGAL_PORT is a port number guaranteed never to be associated with a valid - * port. - */ -#define ILLEGAL_PORT ((Dart_Port)0) - -/** - * A message notification callback. - * - * This callback allows the embedder to provide a custom wakeup mechanism for - * the delivery of inter-isolate messages. This function is called once per - * message on an arbitrary thread. It is the responsibility of the embedder to - * eventually call Dart_HandleMessage once per callback received with the - * destination isolate set as the current isolate to process the message. - */ -typedef void (*Dart_MessageNotifyCallback)(Dart_Isolate destination_isolate); - -/** - * Allows embedders to provide a custom wakeup mechanism for the delivery of - * inter-isolate messages. This setting only applies to the current isolate. - * - * This mechanism is optional: if not provided, the isolate will be scheduled on - * a VM-managed thread pool. An embedder should provide this callback if it - * wants to run an isolate on a specific thread or to interleave handling of - * inter-isolate messages with other event sources. - * - * Most embedders will only call this function once, before isolate - * execution begins. If this function is called after isolate - * execution begins, the embedder is responsible for threading issues. - */ -DART_EXPORT void Dart_SetMessageNotifyCallback( - Dart_MessageNotifyCallback message_notify_callback); -/* TODO(turnidge): Consider moving this to isolate creation so that it - * is impossible to mess up. */ - -/** - * Query the current message notify callback for the isolate. - * - * \return The current message notify callback for the isolate. - */ -DART_EXPORT Dart_MessageNotifyCallback Dart_GetMessageNotifyCallback(void); - -/** - * The VM's default message handler supports pausing an isolate before it - * processes the first message and right after the it processes the isolate's - * final message. This can be controlled for all isolates by two VM flags: - * - * `--pause-isolates-on-start` - * `--pause-isolates-on-exit` - * - * Additionally, Dart_SetShouldPauseOnStart and Dart_SetShouldPauseOnExit can be - * used to control this behaviour on a per-isolate basis. - * - * When an embedder is using a Dart_MessageNotifyCallback the embedder - * needs to cooperate with the VM so that the service protocol can report - * accurate information about isolates and so that tools such as debuggers - * work reliably. - * - * The following functions can be used to implement pausing on start and exit. - */ - -/** - * If the VM flag `--pause-isolates-on-start` was passed this will be true. - * - * \return A boolean value indicating if pause on start was requested. - */ -DART_EXPORT bool Dart_ShouldPauseOnStart(void); - -/** - * Override the VM flag `--pause-isolates-on-start` for the current isolate. - * - * \param should_pause Should the isolate be paused on start? - * - * NOTE: This must be called before Dart_IsolateMakeRunnable. - */ -DART_EXPORT void Dart_SetShouldPauseOnStart(bool should_pause); - -/** - * Is the current isolate paused on start? - * - * \return A boolean value indicating if the isolate is paused on start. - */ -DART_EXPORT bool Dart_IsPausedOnStart(void); - -/** - * Called when the embedder has paused the current isolate on start and when - * the embedder has resumed the isolate. - * - * \param paused Is the isolate paused on start? - */ -DART_EXPORT void Dart_SetPausedOnStart(bool paused); - -/** - * If the VM flag `--pause-isolates-on-exit` was passed this will be true. - * - * \return A boolean value indicating if pause on exit was requested. - */ -DART_EXPORT bool Dart_ShouldPauseOnExit(void); - -/** - * Override the VM flag `--pause-isolates-on-exit` for the current isolate. - * - * \param should_pause Should the isolate be paused on exit? - * - */ -DART_EXPORT void Dart_SetShouldPauseOnExit(bool should_pause); - -/** - * Is the current isolate paused on exit? - * - * \return A boolean value indicating if the isolate is paused on exit. - */ -DART_EXPORT bool Dart_IsPausedOnExit(void); - -/** - * Called when the embedder has paused the current isolate on exit and when - * the embedder has resumed the isolate. - * - * \param paused Is the isolate paused on exit? - */ -DART_EXPORT void Dart_SetPausedOnExit(bool paused); - -/** - * Called when the embedder has caught a top level unhandled exception error - * in the current isolate. - * - * NOTE: It is illegal to call this twice on the same isolate without first - * clearing the sticky error to null. - * - * \param error The unhandled exception error. - */ -DART_EXPORT void Dart_SetStickyError(Dart_Handle error); - -/** - * Does the current isolate have a sticky error? - */ -DART_EXPORT bool Dart_HasStickyError(void); - -/** - * Gets the sticky error for the current isolate. - * - * \return A handle to the sticky error object or null. - */ -DART_EXPORT Dart_Handle Dart_GetStickyError(void); - -/** - * Handles the next pending message for the current isolate. - * - * May generate an unhandled exception error. - * - * \return A valid handle if no error occurs during the operation. - */ -DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle Dart_HandleMessage(void); - -/** - * Drains the microtask queue, then blocks the calling thread until the current - * isolate receives a message, then handles all messages. - * - * \param timeout_millis When non-zero, the call returns after the indicated - number of milliseconds even if no message was received. - * \return A valid handle if no error occurs, otherwise an error handle. - */ -DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle -Dart_WaitForEvent(int64_t timeout_millis); - -/** - * Handles any pending messages for the vm service for the current - * isolate. - * - * This function may be used by an embedder at a breakpoint to avoid - * pausing the vm service. - * - * This function can indirectly cause the message notify callback to - * be called. - * - * \return true if the vm service requests the program resume - * execution, false otherwise - */ -DART_EXPORT bool Dart_HandleServiceMessages(void); - -/** - * Does the current isolate have pending service messages? - * - * \return true if the isolate has pending service messages, false otherwise. - */ -DART_EXPORT bool Dart_HasServiceMessages(void); - -/** - * Processes any incoming messages for the current isolate. - * - * This function may only be used when the embedder has not provided - * an alternate message delivery mechanism with - * Dart_SetMessageCallbacks. It is provided for convenience. - * - * This function waits for incoming messages for the current - * isolate. As new messages arrive, they are handled using - * Dart_HandleMessage. The routine exits when all ports to the - * current isolate are closed. - * - * \return A valid handle if the run loop exited successfully. If an - * exception or other error occurs while processing messages, an - * error handle is returned. - */ -DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle Dart_RunLoop(void); - -/** - * Lets the VM run message processing for the isolate. - * - * This function expects there to a current isolate and the current isolate - * must not have an active api scope. The VM will take care of making the - * isolate runnable (if not already), handles its message loop and will take - * care of shutting the isolate down once it's done. - * - * \param errors_are_fatal Whether uncaught errors should be fatal. - * \param on_error_port A port to notify on uncaught errors (or ILLEGAL_PORT). - * \param on_exit_port A port to notify on exit (or ILLEGAL_PORT). - * \param error A non-NULL pointer which will hold an error message if the call - * fails. The error has to be free()ed by the caller. - * - * \return If successful the VM takes owernship of the isolate and takes care - * of its message loop. If not successful the caller retains owernship of the - * isolate. - */ -DART_EXPORT DART_WARN_UNUSED_RESULT bool Dart_RunLoopAsync( - bool errors_are_fatal, - Dart_Port on_error_port, - Dart_Port on_exit_port, - char** error); - -/* TODO(turnidge): Should this be removed from the public api? */ - -/** - * Gets the main port id for the current isolate. - */ -DART_EXPORT Dart_Port Dart_GetMainPortId(void); - -/** - * Does the current isolate have live ReceivePorts? - * - * A ReceivePort is live when it has not been closed. - */ -DART_EXPORT bool Dart_HasLivePorts(void); - -/** - * Posts a message for some isolate. The message is a serialized - * object. - * - * Requires there to be a current isolate. - * - * For posting messages outside of an isolate see \ref Dart_PostCObject. - * - * \param port_id The destination port. - * \param object An object from the current isolate. - * - * \return True if the message was posted. - */ -DART_EXPORT bool Dart_Post(Dart_Port port_id, Dart_Handle object); - -/** - * Returns a new SendPort with the provided port id. - * - * \param port_id The destination port. - * - * \return A new SendPort if no errors occurs. Otherwise returns - * an error handle. - */ -DART_EXPORT Dart_Handle Dart_NewSendPort(Dart_Port port_id); - -/** - * Gets the SendPort id for the provided SendPort. - * \param port A SendPort object whose id is desired. - * \param port_id Returns the id of the SendPort. - * \return Success if no error occurs. Otherwise returns - * an error handle. - */ -DART_EXPORT Dart_Handle Dart_SendPortGetId(Dart_Handle port, - Dart_Port* port_id); - -/* - * ====== - * Scopes - * ====== - */ - -/** - * Enters a new scope. - * - * All new local handles will be created in this scope. Additionally, - * some functions may return "scope allocated" memory which is only - * valid within this scope. - * - * Requires there to be a current isolate. - */ -DART_EXPORT void Dart_EnterScope(void); - -/** - * Exits a scope. - * - * The previous scope (if any) becomes the current scope. - * - * Requires there to be a current isolate. - */ -DART_EXPORT void Dart_ExitScope(void); - -/** - * The Dart VM uses "zone allocation" for temporary structures. Zones - * support very fast allocation of small chunks of memory. The chunks - * cannot be deallocated individually, but instead zones support - * deallocating all chunks in one fast operation. - * - * This function makes it possible for the embedder to allocate - * temporary data in the VMs zone allocator. - * - * Zone allocation is possible: - * 1. when inside a scope where local handles can be allocated - * 2. when processing a message from a native port in a native port - * handler - * - * All the memory allocated this way will be reclaimed either on the - * next call to Dart_ExitScope or when the native port handler exits. - * - * \param size Size of the memory to allocate. - * - * \return A pointer to the allocated memory. NULL if allocation - * failed. Failure might due to is no current VM zone. - */ -DART_EXPORT uint8_t* Dart_ScopeAllocate(intptr_t size); - -/* - * ======= - * Objects - * ======= - */ - -/** - * Returns the null object. - * - * \return A handle to the null object. - */ -DART_EXPORT Dart_Handle Dart_Null(void); - -/** - * Is this object null? - */ -DART_EXPORT bool Dart_IsNull(Dart_Handle object); - -/** - * Returns the empty string object. - * - * \return A handle to the empty string object. - */ -DART_EXPORT Dart_Handle Dart_EmptyString(void); - -/** - * Returns types that are not classes, and which therefore cannot be looked up - * as library members by Dart_GetType. - * - * \return A handle to the dynamic, void or Never type. - */ -DART_EXPORT Dart_Handle Dart_TypeDynamic(void); -DART_EXPORT Dart_Handle Dart_TypeVoid(void); -DART_EXPORT Dart_Handle Dart_TypeNever(void); - -/** - * Checks if the two objects are equal. - * - * The result of the comparison is returned through the 'equal' - * parameter. The return value itself is used to indicate success or - * failure, not equality. - * - * May generate an unhandled exception error. - * - * \param obj1 An object to be compared. - * \param obj2 An object to be compared. - * \param equal Returns the result of the equality comparison. - * - * \return A valid handle if no error occurs during the comparison. - */ -DART_EXPORT Dart_Handle Dart_ObjectEquals(Dart_Handle obj1, - Dart_Handle obj2, - bool* equal); - -/** - * Is this object an instance of some type? - * - * The result of the test is returned through the 'instanceof' parameter. - * The return value itself is used to indicate success or failure. - * - * \param object An object. - * \param type A type. - * \param instanceof Return true if 'object' is an instance of type 'type'. - * - * \return A valid handle if no error occurs during the operation. - */ -DART_EXPORT Dart_Handle Dart_ObjectIsType(Dart_Handle object, - Dart_Handle type, - bool* instanceof); - -/** - * Query object type. - * - * \param object Some Object. - * - * \return true if Object is of the specified type. - */ -DART_EXPORT bool Dart_IsInstance(Dart_Handle object); -DART_EXPORT bool Dart_IsNumber(Dart_Handle object); -DART_EXPORT bool Dart_IsInteger(Dart_Handle object); -DART_EXPORT bool Dart_IsDouble(Dart_Handle object); -DART_EXPORT bool Dart_IsBoolean(Dart_Handle object); -DART_EXPORT bool Dart_IsString(Dart_Handle object); -DART_EXPORT bool Dart_IsStringLatin1(Dart_Handle object); /* (ISO-8859-1) */ -DART_EXPORT bool Dart_IsExternalString(Dart_Handle object); -DART_EXPORT bool Dart_IsList(Dart_Handle object); -DART_EXPORT bool Dart_IsMap(Dart_Handle object); -DART_EXPORT bool Dart_IsLibrary(Dart_Handle object); -DART_EXPORT bool Dart_IsType(Dart_Handle handle); -DART_EXPORT bool Dart_IsFunction(Dart_Handle handle); -DART_EXPORT bool Dart_IsVariable(Dart_Handle handle); -DART_EXPORT bool Dart_IsTypeVariable(Dart_Handle handle); -DART_EXPORT bool Dart_IsClosure(Dart_Handle object); -DART_EXPORT bool Dart_IsTypedData(Dart_Handle object); -DART_EXPORT bool Dart_IsByteBuffer(Dart_Handle object); -DART_EXPORT bool Dart_IsFuture(Dart_Handle object); - -/* - * ========= - * Instances - * ========= - */ - -/* - * For the purposes of the embedding api, not all objects returned are - * Dart language objects. Within the api, we use the term 'Instance' - * to indicate handles which refer to true Dart language objects. - * - * TODO(turnidge): Reorganize the "Object" section above, pulling down - * any functions that more properly belong here. */ - -/** - * Gets the type of a Dart language object. - * - * \param instance Some Dart object. - * - * \return If no error occurs, the type is returned. Otherwise an - * error handle is returned. - */ -DART_EXPORT Dart_Handle Dart_InstanceGetType(Dart_Handle instance); - -/** - * Returns the name for the provided class type. - * - * \return A valid string handle if no error occurs during the - * operation. - */ -DART_EXPORT Dart_Handle Dart_ClassName(Dart_Handle cls_type); - -/** - * Returns the name for the provided function or method. - * - * \return A valid string handle if no error occurs during the - * operation. - */ -DART_EXPORT Dart_Handle Dart_FunctionName(Dart_Handle function); - -/** - * Returns a handle to the owner of a function. - * - * The owner of an instance method or a static method is its defining - * class. The owner of a top-level function is its defining - * library. The owner of the function of a non-implicit closure is the - * function of the method or closure that defines the non-implicit - * closure. - * - * \return A valid handle to the owner of the function, or an error - * handle if the argument is not a valid handle to a function. - */ -DART_EXPORT Dart_Handle Dart_FunctionOwner(Dart_Handle function); - -/** - * Determines whether a function handle referes to a static function - * of method. - * - * For the purposes of the embedding API, a top-level function is - * implicitly declared static. - * - * \param function A handle to a function or method declaration. - * \param is_static Returns whether the function or method is declared static. - * - * \return A valid handle if no error occurs during the operation. - */ -DART_EXPORT Dart_Handle Dart_FunctionIsStatic(Dart_Handle function, - bool* is_static); - -/** - * Is this object a closure resulting from a tear-off (closurized method)? - * - * Returns true for closures produced when an ordinary method is accessed - * through a getter call. Returns false otherwise, in particular for closures - * produced from local function declarations. - * - * \param object Some Object. - * - * \return true if Object is a tear-off. - */ -DART_EXPORT bool Dart_IsTearOff(Dart_Handle object); - -/** - * Retrieves the function of a closure. - * - * \return A handle to the function of the closure, or an error handle if the - * argument is not a closure. - */ -DART_EXPORT Dart_Handle Dart_ClosureFunction(Dart_Handle closure); - -/** - * Returns a handle to the library which contains class. - * - * \return A valid handle to the library with owns class, null if the class - * has no library or an error handle if the argument is not a valid handle - * to a class type. - */ -DART_EXPORT Dart_Handle Dart_ClassLibrary(Dart_Handle cls_type); - -/* - * ============================= - * Numbers, Integers and Doubles - * ============================= - */ - -/** - * Does this Integer fit into a 64-bit signed integer? - * - * \param integer An integer. - * \param fits Returns true if the integer fits into a 64-bit signed integer. - * - * \return A valid handle if no error occurs during the operation. - */ -DART_EXPORT Dart_Handle Dart_IntegerFitsIntoInt64(Dart_Handle integer, - bool* fits); - -/** - * Does this Integer fit into a 64-bit unsigned integer? - * - * \param integer An integer. - * \param fits Returns true if the integer fits into a 64-bit unsigned integer. - * - * \return A valid handle if no error occurs during the operation. - */ -DART_EXPORT Dart_Handle Dart_IntegerFitsIntoUint64(Dart_Handle integer, - bool* fits); - -/** - * Returns an Integer with the provided value. - * - * \param value The value of the integer. - * - * \return The Integer object if no error occurs. Otherwise returns - * an error handle. - */ -DART_EXPORT Dart_Handle Dart_NewInteger(int64_t value); - -/** - * Returns an Integer with the provided value. - * - * \param value The unsigned value of the integer. - * - * \return The Integer object if no error occurs. Otherwise returns - * an error handle. - */ -DART_EXPORT Dart_Handle Dart_NewIntegerFromUint64(uint64_t value); - -/** - * Returns an Integer with the provided value. - * - * \param value The value of the integer represented as a C string - * containing a hexadecimal number. - * - * \return The Integer object if no error occurs. Otherwise returns - * an error handle. - */ -DART_EXPORT Dart_Handle Dart_NewIntegerFromHexCString(const char* value); - -/** - * Gets the value of an Integer. - * - * The integer must fit into a 64-bit signed integer, otherwise an error occurs. - * - * \param integer An Integer. - * \param value Returns the value of the Integer. - * - * \return A valid handle if no error occurs during the operation. - */ -DART_EXPORT Dart_Handle Dart_IntegerToInt64(Dart_Handle integer, - int64_t* value); - -/** - * Gets the value of an Integer. - * - * The integer must fit into a 64-bit unsigned integer, otherwise an - * error occurs. - * - * \param integer An Integer. - * \param value Returns the value of the Integer. - * - * \return A valid handle if no error occurs during the operation. - */ -DART_EXPORT Dart_Handle Dart_IntegerToUint64(Dart_Handle integer, - uint64_t* value); - -/** - * Gets the value of an integer as a hexadecimal C string. - * - * \param integer An Integer. - * \param value Returns the value of the Integer as a hexadecimal C - * string. This C string is scope allocated and is only valid until - * the next call to Dart_ExitScope. - * - * \return A valid handle if no error occurs during the operation. - */ -DART_EXPORT Dart_Handle Dart_IntegerToHexCString(Dart_Handle integer, - const char** value); - -/** - * Returns a Double with the provided value. - * - * \param value A double. - * - * \return The Double object if no error occurs. Otherwise returns - * an error handle. - */ -DART_EXPORT Dart_Handle Dart_NewDouble(double value); - -/** - * Gets the value of a Double - * - * \param double_obj A Double - * \param value Returns the value of the Double. - * - * \return A valid handle if no error occurs during the operation. - */ -DART_EXPORT Dart_Handle Dart_DoubleValue(Dart_Handle double_obj, double* value); - -/** - * Returns a closure of static function 'function_name' in the class 'class_name' - * in the exported namespace of specified 'library'. - * - * \param library Library object - * \param cls_type Type object representing a Class - * \param function_name Name of the static function in the class - * - * \return A valid Dart instance if no error occurs during the operation. - */ -DART_EXPORT Dart_Handle Dart_GetStaticMethodClosure(Dart_Handle library, - Dart_Handle cls_type, - Dart_Handle function_name); - -/* - * ======== - * Booleans - * ======== - */ - -/** - * Returns the True object. - * - * Requires there to be a current isolate. - * - * \return A handle to the True object. - */ -DART_EXPORT Dart_Handle Dart_True(void); - -/** - * Returns the False object. - * - * Requires there to be a current isolate. - * - * \return A handle to the False object. - */ -DART_EXPORT Dart_Handle Dart_False(void); - -/** - * Returns a Boolean with the provided value. - * - * \param value true or false. - * - * \return The Boolean object if no error occurs. Otherwise returns - * an error handle. - */ -DART_EXPORT Dart_Handle Dart_NewBoolean(bool value); - -/** - * Gets the value of a Boolean - * - * \param boolean_obj A Boolean - * \param value Returns the value of the Boolean. - * - * \return A valid handle if no error occurs during the operation. - */ -DART_EXPORT Dart_Handle Dart_BooleanValue(Dart_Handle boolean_obj, bool* value); - -/* - * ======= - * Strings - * ======= - */ - -/** - * Gets the length of a String. - * - * \param str A String. - * \param length Returns the length of the String. - * - * \return A valid handle if no error occurs during the operation. - */ -DART_EXPORT Dart_Handle Dart_StringLength(Dart_Handle str, intptr_t* length); - -/** - * Returns a String built from the provided C string - * (There is an implicit assumption that the C string passed in contains - * UTF-8 encoded characters and '\0' is considered as a termination - * character). - * - * \param str A C String - * - * \return The String object if no error occurs. Otherwise returns - * an error handle. - */ -DART_EXPORT Dart_Handle Dart_NewStringFromCString(const char* str); -/* TODO(turnidge): Document what happens when we run out of memory - * during this call. */ - -/** - * Returns a String built from an array of UTF-8 encoded characters. - * - * \param utf8_array An array of UTF-8 encoded characters. - * \param length The length of the codepoints array. - * - * \return The String object if no error occurs. Otherwise returns - * an error handle. - */ -DART_EXPORT Dart_Handle Dart_NewStringFromUTF8(const uint8_t* utf8_array, - intptr_t length); - -/** - * Returns a String built from an array of UTF-16 encoded characters. - * - * \param utf16_array An array of UTF-16 encoded characters. - * \param length The length of the codepoints array. - * - * \return The String object if no error occurs. Otherwise returns - * an error handle. - */ -DART_EXPORT Dart_Handle Dart_NewStringFromUTF16(const uint16_t* utf16_array, - intptr_t length); - -/** - * Returns a String built from an array of UTF-32 encoded characters. - * - * \param utf32_array An array of UTF-32 encoded characters. - * \param length The length of the codepoints array. - * - * \return The String object if no error occurs. Otherwise returns - * an error handle. - */ -DART_EXPORT Dart_Handle Dart_NewStringFromUTF32(const int32_t* utf32_array, - intptr_t length); - -/** - * Returns a String which references an external array of - * Latin-1 (ISO-8859-1) encoded characters. - * - * \param latin1_array Array of Latin-1 encoded characters. This must not move. - * \param length The length of the characters array. - * \param peer An external pointer to associate with this string. - * \param external_allocation_size The number of externally allocated - * bytes for peer. Used to inform the garbage collector. - * \param callback A callback to be called when this string is finalized. - * - * \return The String object if no error occurs. Otherwise returns - * an error handle. - */ -DART_EXPORT Dart_Handle -Dart_NewExternalLatin1String(const uint8_t* latin1_array, - intptr_t length, - void* peer, - intptr_t external_allocation_size, - Dart_HandleFinalizer callback); - -/** - * Returns a String which references an external array of UTF-16 encoded - * characters. - * - * \param utf16_array An array of UTF-16 encoded characters. This must not move. - * \param length The length of the characters array. - * \param peer An external pointer to associate with this string. - * \param external_allocation_size The number of externally allocated - * bytes for peer. Used to inform the garbage collector. - * \param callback A callback to be called when this string is finalized. - * - * \return The String object if no error occurs. Otherwise returns - * an error handle. - */ -DART_EXPORT Dart_Handle -Dart_NewExternalUTF16String(const uint16_t* utf16_array, - intptr_t length, - void* peer, - intptr_t external_allocation_size, - Dart_HandleFinalizer callback); - -/** - * Gets the C string representation of a String. - * (It is a sequence of UTF-8 encoded values with a '\0' termination.) - * - * \param str A string. - * \param cstr Returns the String represented as a C string. - * This C string is scope allocated and is only valid until - * the next call to Dart_ExitScope. - * - * \return A valid handle if no error occurs during the operation. - */ -DART_EXPORT Dart_Handle Dart_StringToCString(Dart_Handle str, - const char** cstr); - -/** - * Gets a UTF-8 encoded representation of a String. - * - * Any unpaired surrogate code points in the string will be converted as - * replacement characters (U+FFFD, 0xEF 0xBF 0xBD in UTF-8). If you need - * to preserve unpaired surrogates, use the Dart_StringToUTF16 function. - * - * \param str A string. - * \param utf8_array Returns the String represented as UTF-8 code - * units. This UTF-8 array is scope allocated and is only valid - * until the next call to Dart_ExitScope. - * \param length Used to return the length of the array which was - * actually used. - * - * \return A valid handle if no error occurs during the operation. - */ -DART_EXPORT Dart_Handle Dart_StringToUTF8(Dart_Handle str, - uint8_t** utf8_array, - intptr_t* length); - -/** - * Gets the data corresponding to the string object. This function returns - * the data only for Latin-1 (ISO-8859-1) string objects. For all other - * string objects it returns an error. - * - * \param str A string. - * \param latin1_array An array allocated by the caller, used to return - * the string data. - * \param length Used to pass in the length of the provided array. - * Used to return the length of the array which was actually used. - * - * \return A valid handle if no error occurs during the operation. - */ -DART_EXPORT Dart_Handle Dart_StringToLatin1(Dart_Handle str, - uint8_t* latin1_array, - intptr_t* length); - -/** - * Gets the UTF-16 encoded representation of a string. - * - * \param str A string. - * \param utf16_array An array allocated by the caller, used to return - * the array of UTF-16 encoded characters. - * \param length Used to pass in the length of the provided array. - * Used to return the length of the array which was actually used. - * - * \return A valid handle if no error occurs during the operation. - */ -DART_EXPORT Dart_Handle Dart_StringToUTF16(Dart_Handle str, - uint16_t* utf16_array, - intptr_t* length); - -/** - * Gets the storage size in bytes of a String. - * - * \param str A String. - * \param size Returns the storage size in bytes of the String. - * This is the size in bytes needed to store the String. - * - * \return A valid handle if no error occurs during the operation. - */ -DART_EXPORT Dart_Handle Dart_StringStorageSize(Dart_Handle str, intptr_t* size); - -/** - * Retrieves some properties associated with a String. - * Properties retrieved are: - * - character size of the string (one or two byte) - * - length of the string - * - peer pointer of string if it is an external string. - * \param str A String. - * \param char_size Returns the character size of the String. - * \param str_len Returns the length of the String. - * \param peer Returns the peer pointer associated with the String or 0 if - * there is no peer pointer for it. - * \return Success if no error occurs. Otherwise returns - * an error handle. - */ -DART_EXPORT Dart_Handle Dart_StringGetProperties(Dart_Handle str, - intptr_t* char_size, - intptr_t* str_len, - void** peer); - -/* - * ===== - * Lists - * ===== - */ - -/** - * Returns a List of the desired length. - * - * \param length The length of the list. - * - * \return The List object if no error occurs. Otherwise returns - * an error handle. - */ -DART_EXPORT Dart_Handle Dart_NewList(intptr_t length); - -typedef enum { - Dart_CoreType_Dynamic, - Dart_CoreType_Int, - Dart_CoreType_String, -} Dart_CoreType_Id; - -// TODO(bkonyi): convert this to use nullable types once NNBD is enabled. -/** - * Returns a List of the desired length with the desired legacy element type. - * - * \param element_type_id The type of elements of the list. - * \param length The length of the list. - * - * \return The List object if no error occurs. Otherwise returns an error - * handle. - */ -DART_EXPORT Dart_Handle Dart_NewListOf(Dart_CoreType_Id element_type_id, - intptr_t length); - -/** - * Returns a List of the desired length with the desired element type. - * - * \param element_type Handle to a nullable type object. E.g., from - * Dart_GetType or Dart_GetNullableType. - * - * \param length The length of the list. - * - * \return The List object if no error occurs. Otherwise returns - * an error handle. - */ -DART_EXPORT Dart_Handle Dart_NewListOfType(Dart_Handle element_type, - intptr_t length); - -/** - * Returns a List of the desired length with the desired element type, filled - * with the provided object. - * - * \param element_type Handle to a type object. E.g., from Dart_GetType. - * - * \param fill_object Handle to an object of type 'element_type' that will be - * used to populate the list. This parameter can only be Dart_Null() if the - * length of the list is 0 or 'element_type' is a nullable type. - * - * \param length The length of the list. - * - * \return The List object if no error occurs. Otherwise returns - * an error handle. - */ -DART_EXPORT Dart_Handle Dart_NewListOfTypeFilled(Dart_Handle element_type, - Dart_Handle fill_object, - intptr_t length); - -/** - * Gets the length of a List. - * - * May generate an unhandled exception error. - * - * \param list A List. - * \param length Returns the length of the List. - * - * \return A valid handle if no error occurs during the operation. - */ -DART_EXPORT Dart_Handle Dart_ListLength(Dart_Handle list, intptr_t* length); - -/** - * Gets the Object at some index of a List. - * - * If the index is out of bounds, an error occurs. - * - * May generate an unhandled exception error. - * - * \param list A List. - * \param index A valid index into the List. - * - * \return The Object in the List at the specified index if no error - * occurs. Otherwise returns an error handle. - */ -DART_EXPORT Dart_Handle Dart_ListGetAt(Dart_Handle list, intptr_t index); - -/** -* Gets a range of Objects from a List. -* -* If any of the requested index values are out of bounds, an error occurs. -* -* May generate an unhandled exception error. -* -* \param list A List. -* \param offset The offset of the first item to get. -* \param length The number of items to get. -* \param result A pointer to fill with the objects. -* -* \return Success if no error occurs during the operation. -*/ -DART_EXPORT Dart_Handle Dart_ListGetRange(Dart_Handle list, - intptr_t offset, - intptr_t length, - Dart_Handle* result); - -/** - * Sets the Object at some index of a List. - * - * If the index is out of bounds, an error occurs. - * - * May generate an unhandled exception error. - * - * \param list A List. - * \param index A valid index into the List. - * \param value The Object to put in the List. - * - * \return A valid handle if no error occurs during the operation. - */ -DART_EXPORT Dart_Handle Dart_ListSetAt(Dart_Handle list, - intptr_t index, - Dart_Handle value); - -/** - * May generate an unhandled exception error. - */ -DART_EXPORT Dart_Handle Dart_ListGetAsBytes(Dart_Handle list, - intptr_t offset, - uint8_t* native_array, - intptr_t length); - -/** - * May generate an unhandled exception error. - */ -DART_EXPORT Dart_Handle Dart_ListSetAsBytes(Dart_Handle list, - intptr_t offset, - const uint8_t* native_array, - intptr_t length); - -/* - * ==== - * Maps - * ==== - */ - -/** - * Gets the Object at some key of a Map. - * - * May generate an unhandled exception error. - * - * \param map A Map. - * \param key An Object. - * - * \return The value in the map at the specified key, null if the map does not - * contain the key, or an error handle. - */ -DART_EXPORT Dart_Handle Dart_MapGetAt(Dart_Handle map, Dart_Handle key); - -/** - * Returns whether the Map contains a given key. - * - * May generate an unhandled exception error. - * - * \param map A Map. - * - * \return A handle on a boolean indicating whether map contains the key. - * Otherwise returns an error handle. - */ -DART_EXPORT Dart_Handle Dart_MapContainsKey(Dart_Handle map, Dart_Handle key); - -/** - * Gets the list of keys of a Map. - * - * May generate an unhandled exception error. - * - * \param map A Map. - * - * \return The list of key Objects if no error occurs. Otherwise returns an - * error handle. - */ -DART_EXPORT Dart_Handle Dart_MapKeys(Dart_Handle map); - -/* - * ========== - * Typed Data - * ========== - */ - -typedef enum { - Dart_TypedData_kByteData = 0, - Dart_TypedData_kInt8, - Dart_TypedData_kUint8, - Dart_TypedData_kUint8Clamped, - Dart_TypedData_kInt16, - Dart_TypedData_kUint16, - Dart_TypedData_kInt32, - Dart_TypedData_kUint32, - Dart_TypedData_kInt64, - Dart_TypedData_kUint64, - Dart_TypedData_kFloat32, - Dart_TypedData_kFloat64, - Dart_TypedData_kInt32x4, - Dart_TypedData_kFloat32x4, - Dart_TypedData_kFloat64x2, - Dart_TypedData_kInvalid -} Dart_TypedData_Type; - -/** - * Return type if this object is a TypedData object. - * - * \return kInvalid if the object is not a TypedData object or the appropriate - * Dart_TypedData_Type. - */ -DART_EXPORT Dart_TypedData_Type Dart_GetTypeOfTypedData(Dart_Handle object); - -/** - * Return type if this object is an external TypedData object. - * - * \return kInvalid if the object is not an external TypedData object or - * the appropriate Dart_TypedData_Type. - */ -DART_EXPORT Dart_TypedData_Type -Dart_GetTypeOfExternalTypedData(Dart_Handle object); - -/** - * Returns a TypedData object of the desired length and type. - * - * \param type The type of the TypedData object. - * \param length The length of the TypedData object (length in type units). - * - * \return The TypedData object if no error occurs. Otherwise returns - * an error handle. - */ -DART_EXPORT Dart_Handle Dart_NewTypedData(Dart_TypedData_Type type, - intptr_t length); - -/** - * Returns a TypedData object which references an external data array. - * - * \param type The type of the data array. - * \param data A data array. This array must not move. - * \param length The length of the data array (length in type units). - * - * \return The TypedData object if no error occurs. Otherwise returns - * an error handle. - */ -DART_EXPORT Dart_Handle Dart_NewExternalTypedData(Dart_TypedData_Type type, - void* data, - intptr_t length); - -/** - * Returns a TypedData object which references an external data array. - * - * \param type The type of the data array. - * \param data A data array. This array must not move. - * \param length The length of the data array (length in type units). - * \param peer A pointer to a native object or NULL. This value is - * provided to callback when it is invoked. - * \param external_allocation_size The number of externally allocated - * bytes for peer. Used to inform the garbage collector. - * \param callback A function pointer that will be invoked sometime - * after the object is garbage collected, unless the handle has been deleted. - * A valid callback needs to be specified it cannot be NULL. - * - * \return The TypedData object if no error occurs. Otherwise returns - * an error handle. - */ -DART_EXPORT Dart_Handle -Dart_NewExternalTypedDataWithFinalizer(Dart_TypedData_Type type, - void* data, - intptr_t length, - void* peer, - intptr_t external_allocation_size, - Dart_HandleFinalizer callback); -DART_EXPORT Dart_Handle Dart_NewUnmodifiableExternalTypedDataWithFinalizer( - Dart_TypedData_Type type, - const void* data, - intptr_t length, - void* peer, - intptr_t external_allocation_size, - Dart_HandleFinalizer callback); - -/** - * Returns a ByteBuffer object for the typed data. - * - * \param typed_data The TypedData object. - * - * \return The ByteBuffer object if no error occurs. Otherwise returns - * an error handle. - */ -DART_EXPORT Dart_Handle Dart_NewByteBuffer(Dart_Handle typed_data); - -/** - * Acquires access to the internal data address of a TypedData object. - * - * \param object The typed data object whose internal data address is to - * be accessed. - * \param type The type of the object is returned here. - * \param data The internal data address is returned here. - * \param len Size of the typed array is returned here. - * - * Notes: - * When the internal address of the object is acquired any calls to a - * Dart API function that could potentially allocate an object or run - * any Dart code will return an error. - * - * Any Dart API functions for accessing the data should not be called - * before the corresponding release. In particular, the object should - * not be acquired again before its release. This leads to undefined - * behavior. - * - * \return Success if the internal data address is acquired successfully. - * Otherwise, returns an error handle. - */ -DART_EXPORT Dart_Handle Dart_TypedDataAcquireData(Dart_Handle object, - Dart_TypedData_Type* type, - void** data, - intptr_t* len); - -/** - * Releases access to the internal data address that was acquired earlier using - * Dart_TypedDataAcquireData. - * - * \param object The typed data object whose internal data address is to be - * released. - * - * \return Success if the internal data address is released successfully. - * Otherwise, returns an error handle. - */ -DART_EXPORT Dart_Handle Dart_TypedDataReleaseData(Dart_Handle object); - -/** - * Returns the TypedData object associated with the ByteBuffer object. - * - * \param byte_buffer The ByteBuffer object. - * - * \return The TypedData object if no error occurs. Otherwise returns - * an error handle. - */ -DART_EXPORT Dart_Handle Dart_GetDataFromByteBuffer(Dart_Handle byte_buffer); - -/* - * ============================================================ - * Invoking Constructors, Methods, Closures and Field accessors - * ============================================================ - */ - -/** - * Invokes a constructor, creating a new object. - * - * This function allows hidden constructors (constructors with leading - * underscores) to be called. - * - * \param type Type of object to be constructed. - * \param constructor_name The name of the constructor to invoke. Use - * Dart_Null() or Dart_EmptyString() to invoke the unnamed constructor. - * This name should not include the name of the class. - * \param number_of_arguments Size of the arguments array. - * \param arguments An array of arguments to the constructor. - * - * \return If the constructor is called and completes successfully, - * then the new object. If an error occurs during execution, then an - * error handle is returned. - */ -DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle -Dart_New(Dart_Handle type, - Dart_Handle constructor_name, - int number_of_arguments, - Dart_Handle* arguments); - -/** - * Allocate a new object without invoking a constructor. - * - * \param type The type of an object to be allocated. - * - * \return The new object. If an error occurs during execution, then an - * error handle is returned. - */ -DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle Dart_Allocate(Dart_Handle type); - -/** - * Allocate a new object without invoking a constructor, and sets specified - * native fields. - * - * \param type The type of an object to be allocated. - * \param num_native_fields The number of native fields to set. - * \param native_fields An array containing the value of native fields. - * - * \return The new object. If an error occurs during execution, then an - * error handle is returned. - */ -DART_EXPORT Dart_Handle -Dart_AllocateWithNativeFields(Dart_Handle type, - intptr_t num_native_fields, - const intptr_t* native_fields); - -/** - * Invokes a method or function. - * - * The 'target' parameter may be an object, type, or library. If - * 'target' is an object, then this function will invoke an instance - * method. If 'target' is a type, then this function will invoke a - * static method. If 'target' is a library, then this function will - * invoke a top-level function from that library. - * NOTE: This API call cannot be used to invoke methods of a type object. - * - * This function ignores visibility (leading underscores in names). - * - * May generate an unhandled exception error. - * - * \param target An object, type, or library. - * \param name The name of the function or method to invoke. - * \param number_of_arguments Size of the arguments array. - * \param arguments An array of arguments to the function. - * - * \return If the function or method is called and completes - * successfully, then the return value is returned. If an error - * occurs during execution, then an error handle is returned. - */ -DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle -Dart_Invoke(Dart_Handle target, - Dart_Handle name, - int number_of_arguments, - Dart_Handle* arguments); -/* TODO(turnidge): Document how to invoke operators. */ - -/** - * Invokes a Closure with the given arguments. - * - * May generate an unhandled exception error. - * - * \return If no error occurs during execution, then the result of - * invoking the closure is returned. If an error occurs during - * execution, then an error handle is returned. - */ -DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle -Dart_InvokeClosure(Dart_Handle closure, - int number_of_arguments, - Dart_Handle* arguments); - -/** - * Invokes a Generative Constructor on an object that was previously - * allocated using Dart_Allocate/Dart_AllocateWithNativeFields. - * - * The 'object' parameter must be an object. - * - * This function ignores visibility (leading underscores in names). - * - * May generate an unhandled exception error. - * - * \param object An object. - * \param name The name of the constructor to invoke. - * Use Dart_Null() or Dart_EmptyString() to invoke the unnamed constructor. - * \param number_of_arguments Size of the arguments array. - * \param arguments An array of arguments to the function. - * - * \return If the constructor is called and completes - * successfully, then the object is returned. If an error - * occurs during execution, then an error handle is returned. - */ -DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle -Dart_InvokeConstructor(Dart_Handle object, - Dart_Handle name, - int number_of_arguments, - Dart_Handle* arguments); - -/** - * Gets the value of a field. - * - * The 'container' parameter may be an object, type, or library. If - * 'container' is an object, then this function will access an - * instance field. If 'container' is a type, then this function will - * access a static field. If 'container' is a library, then this - * function will access a top-level variable. - * NOTE: This API call cannot be used to access fields of a type object. - * - * This function ignores field visibility (leading underscores in names). - * - * May generate an unhandled exception error. - * - * \param container An object, type, or library. - * \param name A field name. - * - * \return If no error occurs, then the value of the field is - * returned. Otherwise an error handle is returned. - */ -DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle -Dart_GetField(Dart_Handle container, Dart_Handle name); - -/** - * Sets the value of a field. - * - * The 'container' parameter may actually be an object, type, or - * library. If 'container' is an object, then this function will - * access an instance field. If 'container' is a type, then this - * function will access a static field. If 'container' is a library, - * then this function will access a top-level variable. - * NOTE: This API call cannot be used to access fields of a type object. - * - * This function ignores field visibility (leading underscores in names). - * - * May generate an unhandled exception error. - * - * \param container An object, type, or library. - * \param name A field name. - * \param value The new field value. - * - * \return A valid handle if no error occurs. - */ -DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle -Dart_SetField(Dart_Handle container, Dart_Handle name, Dart_Handle value); - -/* - * ========== - * Exceptions - * ========== - */ - -/* - * TODO(turnidge): Remove these functions from the api and replace all - * uses with Dart_NewUnhandledExceptionError. */ - -/** - * Throws an exception. - * - * This function causes a Dart language exception to be thrown. This - * will proceed in the standard way, walking up Dart frames until an - * appropriate 'catch' block is found, executing 'finally' blocks, - * etc. - * - * If an error handle is passed into this function, the error is - * propagated immediately. See Dart_PropagateError for a discussion - * of error propagation. - * - * If successful, this function does not return. Note that this means - * that the destructors of any stack-allocated C++ objects will not be - * called. If there are no Dart frames on the stack, an error occurs. - * - * \return An error handle if the exception was not thrown. - * Otherwise the function does not return. - */ -DART_EXPORT Dart_Handle Dart_ThrowException(Dart_Handle exception); - -/** - * Rethrows an exception. - * - * Rethrows an exception, unwinding all dart frames on the stack. If - * successful, this function does not return. Note that this means - * that the destructors of any stack-allocated C++ objects will not be - * called. If there are no Dart frames on the stack, an error occurs. - * - * \return An error handle if the exception was not thrown. - * Otherwise the function does not return. - */ -DART_EXPORT Dart_Handle Dart_ReThrowException(Dart_Handle exception, - Dart_Handle stacktrace); - -/* - * =========================== - * Native fields and functions - * =========================== - */ - -/** - * Gets the number of native instance fields in an object. - */ -DART_EXPORT Dart_Handle Dart_GetNativeInstanceFieldCount(Dart_Handle obj, - int* count); - -/** - * Gets the value of a native field. - * - * TODO(turnidge): Document. - */ -DART_EXPORT Dart_Handle Dart_GetNativeInstanceField(Dart_Handle obj, - int index, - intptr_t* value); - -/** - * Sets the value of a native field. - * - * TODO(turnidge): Document. - */ -DART_EXPORT Dart_Handle Dart_SetNativeInstanceField(Dart_Handle obj, - int index, - intptr_t value); - -/** - * The arguments to a native function. - * - * This object is passed to a native function to represent its - * arguments and return value. It allows access to the arguments to a - * native function by index. It also allows the return value of a - * native function to be set. - */ -typedef struct _Dart_NativeArguments* Dart_NativeArguments; - -/** - * Extracts current isolate group data from the native arguments structure. - */ -DART_EXPORT void* Dart_GetNativeIsolateGroupData(Dart_NativeArguments args); - -typedef enum { - Dart_NativeArgument_kBool = 0, - Dart_NativeArgument_kInt32, - Dart_NativeArgument_kUint32, - Dart_NativeArgument_kInt64, - Dart_NativeArgument_kUint64, - Dart_NativeArgument_kDouble, - Dart_NativeArgument_kString, - Dart_NativeArgument_kInstance, - Dart_NativeArgument_kNativeFields, -} Dart_NativeArgument_Type; - -typedef struct _Dart_NativeArgument_Descriptor { - uint8_t type; - uint8_t index; -} Dart_NativeArgument_Descriptor; - -typedef union _Dart_NativeArgument_Value { - bool as_bool; - int32_t as_int32; - uint32_t as_uint32; - int64_t as_int64; - uint64_t as_uint64; - double as_double; - struct { - Dart_Handle dart_str; - void* peer; - } as_string; - struct { - intptr_t num_fields; - intptr_t* values; - } as_native_fields; - Dart_Handle as_instance; -} Dart_NativeArgument_Value; - -enum { - kNativeArgNumberPos = 0, - kNativeArgNumberSize = 8, - kNativeArgTypePos = kNativeArgNumberPos + kNativeArgNumberSize, - kNativeArgTypeSize = 8, -}; - -#define BITMASK(size) ((1 << size) - 1) -#define DART_NATIVE_ARG_DESCRIPTOR(type, position) \ - (((type & BITMASK(kNativeArgTypeSize)) << kNativeArgTypePos) | \ - (position & BITMASK(kNativeArgNumberSize))) - -/** - * Gets the native arguments based on the types passed in and populates - * the passed arguments buffer with appropriate native values. - * - * \param args the Native arguments block passed into the native call. - * \param num_arguments length of argument descriptor array and argument - * values array passed in. - * \param arg_descriptors an array that describes the arguments that - * need to be retrieved. For each argument to be retrieved the descriptor - * contains the argument number (0, 1 etc.) and the argument type - * described using Dart_NativeArgument_Type, e.g: - * DART_NATIVE_ARG_DESCRIPTOR(Dart_NativeArgument_kBool, 1) indicates - * that the first argument is to be retrieved and it should be a boolean. - * \param arg_values array into which the native arguments need to be - * extracted into, the array is allocated by the caller (it could be - * stack allocated to avoid the malloc/free performance overhead). - * - * \return Success if all the arguments could be extracted correctly, - * returns an error handle if there were any errors while extracting the - * arguments (mismatched number of arguments, incorrect types, etc.). - */ -DART_EXPORT Dart_Handle -Dart_GetNativeArguments(Dart_NativeArguments args, - int num_arguments, - const Dart_NativeArgument_Descriptor* arg_descriptors, - Dart_NativeArgument_Value* arg_values); - -/** - * Gets the native argument at some index. - */ -DART_EXPORT Dart_Handle Dart_GetNativeArgument(Dart_NativeArguments args, - int index); -/* TODO(turnidge): Specify the behavior of an out-of-bounds access. */ - -/** - * Gets the number of native arguments. - */ -DART_EXPORT int Dart_GetNativeArgumentCount(Dart_NativeArguments args); - -/** - * Gets all the native fields of the native argument at some index. - * \param args Native arguments structure. - * \param arg_index Index of the desired argument in the structure above. - * \param num_fields size of the intptr_t array 'field_values' passed in. - * \param field_values intptr_t array in which native field values are returned. - * \return Success if the native fields where copied in successfully. Otherwise - * returns an error handle. On success the native field values are copied - * into the 'field_values' array, if the argument at 'arg_index' is a - * null object then 0 is copied as the native field values into the - * 'field_values' array. - */ -DART_EXPORT Dart_Handle -Dart_GetNativeFieldsOfArgument(Dart_NativeArguments args, - int arg_index, - int num_fields, - intptr_t* field_values); - -/** - * Gets the native field of the receiver. - */ -DART_EXPORT Dart_Handle Dart_GetNativeReceiver(Dart_NativeArguments args, - intptr_t* value); - -/** - * Gets a string native argument at some index. - * \param args Native arguments structure. - * \param arg_index Index of the desired argument in the structure above. - * \param peer Returns the peer pointer if the string argument has one. - * \return Success if the string argument has a peer, if it does not - * have a peer then the String object is returned. Otherwise returns - * an error handle (argument is not a String object). - */ -DART_EXPORT Dart_Handle Dart_GetNativeStringArgument(Dart_NativeArguments args, - int arg_index, - void** peer); - -/** - * Gets an integer native argument at some index. - * \param args Native arguments structure. - * \param index Index of the desired argument in the structure above. - * \param value Returns the integer value if the argument is an Integer. - * \return Success if no error occurs. Otherwise returns an error handle. - */ -DART_EXPORT Dart_Handle Dart_GetNativeIntegerArgument(Dart_NativeArguments args, - int index, - int64_t* value); - -/** - * Gets a boolean native argument at some index. - * \param args Native arguments structure. - * \param index Index of the desired argument in the structure above. - * \param value Returns the boolean value if the argument is a Boolean. - * \return Success if no error occurs. Otherwise returns an error handle. - */ -DART_EXPORT Dart_Handle Dart_GetNativeBooleanArgument(Dart_NativeArguments args, - int index, - bool* value); - -/** - * Gets a double native argument at some index. - * \param args Native arguments structure. - * \param index Index of the desired argument in the structure above. - * \param value Returns the double value if the argument is a double. - * \return Success if no error occurs. Otherwise returns an error handle. - */ -DART_EXPORT Dart_Handle Dart_GetNativeDoubleArgument(Dart_NativeArguments args, - int index, - double* value); - -/** - * Sets the return value for a native function. - * - * If retval is an Error handle, then error will be propagated once - * the native functions exits. See Dart_PropagateError for a - * discussion of how different types of errors are propagated. - */ -DART_EXPORT void Dart_SetReturnValue(Dart_NativeArguments args, - Dart_Handle retval); - -DART_EXPORT void Dart_SetWeakHandleReturnValue(Dart_NativeArguments args, - Dart_WeakPersistentHandle rval); - -DART_EXPORT void Dart_SetBooleanReturnValue(Dart_NativeArguments args, - bool retval); - -DART_EXPORT void Dart_SetIntegerReturnValue(Dart_NativeArguments args, - int64_t retval); - -DART_EXPORT void Dart_SetDoubleReturnValue(Dart_NativeArguments args, - double retval); - -/** - * A native function. - */ -typedef void (*Dart_NativeFunction)(Dart_NativeArguments arguments); - -/** - * Native entry resolution callback. - * - * For libraries and scripts which have native functions, the embedder - * can provide a native entry resolver. This callback is used to map a - * name/arity to a Dart_NativeFunction. If no function is found, the - * callback should return NULL. - * - * The parameters to the native resolver function are: - * \param name a Dart string which is the name of the native function. - * \param num_of_arguments is the number of arguments expected by the - * native function. - * \param auto_setup_scope is a boolean flag that can be set by the resolver - * to indicate if this function needs a Dart API scope (see Dart_EnterScope/ - * Dart_ExitScope) to be setup automatically by the VM before calling into - * the native function. By default most native functions would require this - * to be true but some light weight native functions which do not call back - * into the VM through the Dart API may not require a Dart scope to be - * setup automatically. - * - * \return A valid Dart_NativeFunction which resolves to a native entry point - * for the native function. - * - * See Dart_SetNativeResolver. - */ -typedef Dart_NativeFunction (*Dart_NativeEntryResolver)(Dart_Handle name, - int num_of_arguments, - bool* auto_setup_scope); -/* TODO(turnidge): Consider renaming to NativeFunctionResolver or - * NativeResolver. */ - -/** - * Native entry symbol lookup callback. - * - * For libraries and scripts which have native functions, the embedder - * can provide a callback for mapping a native entry to a symbol. This callback - * maps a native function entry PC to the native function name. If no native - * entry symbol can be found, the callback should return NULL. - * - * The parameters to the native reverse resolver function are: - * \param nf A Dart_NativeFunction. - * - * \return A const UTF-8 string containing the symbol name or NULL. - * - * See Dart_SetNativeResolver. - */ -typedef const uint8_t* (*Dart_NativeEntrySymbol)(Dart_NativeFunction nf); - -/** - * FFI Native C function pointer resolver callback. - * - * See Dart_SetFfiNativeResolver. - */ -typedef void* (*Dart_FfiNativeResolver)(const char* name, uintptr_t args_n); - -/* - * =========== - * Environment - * =========== - */ - -/** - * An environment lookup callback function. - * - * \param name The name of the value to lookup in the environment. - * - * \return A valid handle to a string if the name exists in the - * current environment or Dart_Null() if not. - */ -typedef Dart_Handle (*Dart_EnvironmentCallback)(Dart_Handle name); - -/** - * Sets the environment callback for the current isolate. This - * callback is used to lookup environment values by name in the - * current environment. This enables the embedder to supply values for - * the const constructors bool.fromEnvironment, int.fromEnvironment - * and String.fromEnvironment. - */ -DART_EXPORT Dart_Handle -Dart_SetEnvironmentCallback(Dart_EnvironmentCallback callback); - -/** - * Sets the callback used to resolve native functions for a library. - * - * \param library A library. - * \param resolver A native entry resolver. - * - * \return A valid handle if the native resolver was set successfully. - */ -DART_EXPORT Dart_Handle -Dart_SetNativeResolver(Dart_Handle library, - Dart_NativeEntryResolver resolver, - Dart_NativeEntrySymbol symbol); -/* TODO(turnidge): Rename to Dart_LibrarySetNativeResolver? */ - -/** - * Returns the callback used to resolve native functions for a library. - * - * \param library A library. - * \param resolver a pointer to a Dart_NativeEntryResolver - * - * \return A valid handle if the library was found. - */ -DART_EXPORT Dart_Handle -Dart_GetNativeResolver(Dart_Handle library, Dart_NativeEntryResolver* resolver); - -/** - * Returns the callback used to resolve native function symbols for a library. - * - * \param library A library. - * \param resolver a pointer to a Dart_NativeEntrySymbol. - * - * \return A valid handle if the library was found. - */ -DART_EXPORT Dart_Handle Dart_GetNativeSymbol(Dart_Handle library, - Dart_NativeEntrySymbol* resolver); - -/** - * Sets the callback used to resolve FFI native functions for a library. - * The resolved functions are expected to be a C function pointer of the - * correct signature (as specified in the `@FfiNative()` function - * annotation in Dart code). - * - * NOTE: This is an experimental feature and might change in the future. - * - * \param library A library. - * \param resolver A native function resolver. - * - * \return A valid handle if the native resolver was set successfully. - */ -DART_EXPORT Dart_Handle -Dart_SetFfiNativeResolver(Dart_Handle library, Dart_FfiNativeResolver resolver); - -/* - * ===================== - * Scripts and Libraries - * ===================== - */ - -typedef enum { - Dart_kCanonicalizeUrl = 0, - Dart_kImportTag, - Dart_kKernelTag, -} Dart_LibraryTag; - -/** - * The library tag handler is a multi-purpose callback provided by the - * embedder to the Dart VM. The embedder implements the tag handler to - * provide the ability to load Dart scripts and imports. - * - * -- TAGS -- - * - * Dart_kCanonicalizeUrl - * - * This tag indicates that the embedder should canonicalize 'url' with - * respect to 'library'. For most embedders, the - * Dart_DefaultCanonicalizeUrl function is a sufficient implementation - * of this tag. The return value should be a string holding the - * canonicalized url. - * - * Dart_kImportTag - * - * This tag is used to load a library from IsolateMirror.loadUri. The embedder - * should call Dart_LoadLibraryFromKernel to provide the library to the VM. The - * return value should be an error or library (the result from - * Dart_LoadLibraryFromKernel). - * - * Dart_kKernelTag - * - * This tag is used to load the intermediate file (kernel) generated by - * the Dart front end. This tag is typically used when a 'hot-reload' - * of an application is needed and the VM is 'use dart front end' mode. - * The dart front end typically compiles all the scripts, imports and part - * files into one intermediate file hence we don't use the source/import or - * script tags. The return value should be an error or a TypedData containing - * the kernel bytes. - * - */ -typedef Dart_Handle (*Dart_LibraryTagHandler)( - Dart_LibraryTag tag, - Dart_Handle library_or_package_map_url, - Dart_Handle url); - -/** - * Sets library tag handler for the current isolate. This handler is - * used to handle the various tags encountered while loading libraries - * or scripts in the isolate. - * - * \param handler Handler code to be used for handling the various tags - * encountered while loading libraries or scripts in the isolate. - * - * \return If no error occurs, the handler is set for the isolate. - * Otherwise an error handle is returned. - * - * TODO(turnidge): Document. - */ -DART_EXPORT Dart_Handle -Dart_SetLibraryTagHandler(Dart_LibraryTagHandler handler); - -/** - * Handles deferred loading requests. When this handler is invoked, it should - * eventually load the deferred loading unit with the given id and call - * Dart_DeferredLoadComplete or Dart_DeferredLoadCompleteError. It is - * recommended that the loading occur asynchronously, but it is permitted to - * call Dart_DeferredLoadComplete or Dart_DeferredLoadCompleteError before the - * handler returns. - * - * If an error is returned, it will be propagated through - * `prefix.loadLibrary()`. This is useful for synchronous - * implementations, which must propagate any unwind errors from - * Dart_DeferredLoadComplete or Dart_DeferredLoadComplete. Otherwise the handler - * should return a non-error such as `Dart_Null()`. - */ -typedef Dart_Handle (*Dart_DeferredLoadHandler)(intptr_t loading_unit_id); - -/** - * Sets the deferred load handler for the current isolate. This handler is - * used to handle loading deferred imports in an AppJIT or AppAOT program. - */ -DART_EXPORT Dart_Handle -Dart_SetDeferredLoadHandler(Dart_DeferredLoadHandler handler); - -/** - * Notifies the VM that a deferred load completed successfully. This function - * will eventually cause the corresponding `prefix.loadLibrary()` futures to - * complete. - * - * Requires the current isolate to be the same current isolate during the - * invocation of the Dart_DeferredLoadHandler. - */ -DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle -Dart_DeferredLoadComplete(intptr_t loading_unit_id, - const uint8_t* snapshot_data, - const uint8_t* snapshot_instructions); - -/** - * Notifies the VM that a deferred load failed. This function - * will eventually cause the corresponding `prefix.loadLibrary()` futures to - * complete with an error. - * - * If `transient` is true, future invocations of `prefix.loadLibrary()` will - * trigger new load requests. If false, futures invocation will complete with - * the same error. - * - * Requires the current isolate to be the same current isolate during the - * invocation of the Dart_DeferredLoadHandler. - */ -DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle -Dart_DeferredLoadCompleteError(intptr_t loading_unit_id, - const char* error_message, - bool transient); - -/** - * Canonicalizes a url with respect to some library. - * - * The url is resolved with respect to the library's url and some url - * normalizations are performed. - * - * This canonicalization function should be sufficient for most - * embedders to implement the Dart_kCanonicalizeUrl tag. - * - * \param base_url The base url relative to which the url is - * being resolved. - * \param url The url being resolved and canonicalized. This - * parameter is a string handle. - * - * \return If no error occurs, a String object is returned. Otherwise - * an error handle is returned. - */ -DART_EXPORT Dart_Handle Dart_DefaultCanonicalizeUrl(Dart_Handle base_url, - Dart_Handle url); - -/** - * Loads the root library for the current isolate. - * - * Requires there to be no current root library. - * - * \param kernel_buffer A buffer which contains a kernel binary (see - * pkg/kernel/binary.md). Must remain valid until isolate group shutdown. - * \param kernel_size Length of the passed in buffer. - * - * \return A handle to the root library, or an error. - */ -DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle -Dart_LoadScriptFromKernel(const uint8_t* kernel_buffer, intptr_t kernel_size); - -/** - * Gets the library for the root script for the current isolate. - * - * If the root script has not yet been set for the current isolate, - * this function returns Dart_Null(). This function never returns an - * error handle. - * - * \return Returns the root Library for the current isolate or Dart_Null(). - */ -DART_EXPORT Dart_Handle Dart_RootLibrary(void); - -/** - * Sets the root library for the current isolate. - * - * \return Returns an error handle if `library` is not a library handle. - */ -DART_EXPORT Dart_Handle Dart_SetRootLibrary(Dart_Handle library); - -/** - * Lookup or instantiate a legacy type by name and type arguments from a - * Library. - * - * \param library The library containing the class or interface. - * \param class_name The class name for the type. - * \param number_of_type_arguments Number of type arguments. - * For non parametric types the number of type arguments would be 0. - * \param type_arguments Pointer to an array of type arguments. - * For non parameteric types a NULL would be passed in for this argument. - * - * \return If no error occurs, the type is returned. - * Otherwise an error handle is returned. - */ -DART_EXPORT Dart_Handle Dart_GetType(Dart_Handle library, - Dart_Handle class_name, - intptr_t number_of_type_arguments, - Dart_Handle* type_arguments); - -/** - * Lookup or instantiate a nullable type by name and type arguments from - * Library. - * - * \param library The library containing the class or interface. - * \param class_name The class name for the type. - * \param number_of_type_arguments Number of type arguments. - * For non parametric types the number of type arguments would be 0. - * \param type_arguments Pointer to an array of type arguments. - * For non parameteric types a NULL would be passed in for this argument. - * - * \return If no error occurs, the type is returned. - * Otherwise an error handle is returned. - */ -DART_EXPORT Dart_Handle Dart_GetNullableType(Dart_Handle library, - Dart_Handle class_name, - intptr_t number_of_type_arguments, - Dart_Handle* type_arguments); - -/** - * Lookup or instantiate a non-nullable type by name and type arguments from - * Library. - * - * \param library The library containing the class or interface. - * \param class_name The class name for the type. - * \param number_of_type_arguments Number of type arguments. - * For non parametric types the number of type arguments would be 0. - * \param type_arguments Pointer to an array of type arguments. - * For non parameteric types a NULL would be passed in for this argument. - * - * \return If no error occurs, the type is returned. - * Otherwise an error handle is returned. - */ -DART_EXPORT Dart_Handle -Dart_GetNonNullableType(Dart_Handle library, - Dart_Handle class_name, - intptr_t number_of_type_arguments, - Dart_Handle* type_arguments); - -/** - * Creates a nullable version of the provided type. - * - * \param type The type to be converted to a nullable type. - * - * \return If no error occurs, a nullable type is returned. - * Otherwise an error handle is returned. - */ -DART_EXPORT Dart_Handle Dart_TypeToNullableType(Dart_Handle type); - -/** - * Creates a non-nullable version of the provided type. - * - * \param type The type to be converted to a non-nullable type. - * - * \return If no error occurs, a non-nullable type is returned. - * Otherwise an error handle is returned. - */ -DART_EXPORT Dart_Handle Dart_TypeToNonNullableType(Dart_Handle type); - -/** - * A type's nullability. - * - * \param type A Dart type. - * \param result An out parameter containing the result of the check. True if - * the type is of the specified nullability, false otherwise. - * - * \return Returns an error handle if type is not of type Type. - */ -DART_EXPORT Dart_Handle Dart_IsNullableType(Dart_Handle type, bool* result); -DART_EXPORT Dart_Handle Dart_IsNonNullableType(Dart_Handle type, bool* result); -DART_EXPORT Dart_Handle Dart_IsLegacyType(Dart_Handle type, bool* result); - -/** - * Lookup a class or interface by name from a Library. - * - * \param library The library containing the class or interface. - * \param class_name The name of the class or interface. - * - * \return If no error occurs, the class or interface is - * returned. Otherwise an error handle is returned. - */ -DART_EXPORT Dart_Handle Dart_GetClass(Dart_Handle library, - Dart_Handle class_name); -/* TODO(asiva): The above method needs to be removed once all uses - * of it are removed from the embedder code. */ - -/** - * Returns an import path to a Library, such as "file:///test.dart" or - * "dart:core". - */ -DART_EXPORT Dart_Handle Dart_LibraryUrl(Dart_Handle library); - -/** - * Returns a URL from which a Library was loaded. - */ -DART_EXPORT Dart_Handle Dart_LibraryResolvedUrl(Dart_Handle library); - -/** - * \return An array of libraries. - */ -DART_EXPORT Dart_Handle Dart_GetLoadedLibraries(void); - -DART_EXPORT Dart_Handle Dart_LookupLibrary(Dart_Handle url); -/* TODO(turnidge): Consider returning Dart_Null() when the library is - * not found to distinguish that from a true error case. */ - -/** - * Report an loading error for the library. - * - * \param library The library that failed to load. - * \param error The Dart error instance containing the load error. - * - * \return If the VM handles the error, the return value is - * a null handle. If it doesn't handle the error, the error - * object is returned. - */ -DART_EXPORT Dart_Handle Dart_LibraryHandleError(Dart_Handle library, - Dart_Handle error); - -/** - * Called by the embedder to load a partial program. Does not set the root - * library. - * - * \param kernel_buffer A buffer which contains a kernel binary (see - * pkg/kernel/binary.md). Must remain valid until isolate shutdown. - * \param kernel_buffer_size Length of the passed in buffer. - * - * \return A handle to the main library of the compilation unit, or an error. - */ -DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle -Dart_LoadLibraryFromKernel(const uint8_t* kernel_buffer, - intptr_t kernel_buffer_size); - -/** - * Indicates that all outstanding load requests have been satisfied. - * This finalizes all the new classes loaded and optionally completes - * deferred library futures. - * - * Requires there to be a current isolate. - * - * \param complete_futures Specify true if all deferred library - * futures should be completed, false otherwise. - * - * \return Success if all classes have been finalized and deferred library - * futures are completed. Otherwise, returns an error. - */ -DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle -Dart_FinalizeLoading(bool complete_futures); - -/* - * ===== - * Peers - * ===== - */ - -/** - * The peer field is a lazily allocated field intended for storage of - * an uncommonly used values. Most instances types can have a peer - * field allocated. The exceptions are subtypes of Null, num, and - * bool. - */ - -/** - * Returns the value of peer field of 'object' in 'peer'. - * - * \param object An object. - * \param peer An out parameter that returns the value of the peer - * field. - * - * \return Returns an error if 'object' is a subtype of Null, num, or - * bool. - */ -DART_EXPORT Dart_Handle Dart_GetPeer(Dart_Handle object, void** peer); - -/** - * Sets the value of the peer field of 'object' to the value of - * 'peer'. - * - * \param object An object. - * \param peer A value to store in the peer field. - * - * \return Returns an error if 'object' is a subtype of Null, num, or - * bool. - */ -DART_EXPORT Dart_Handle Dart_SetPeer(Dart_Handle object, void* peer); - -/* - * ====== - * Kernel - * ====== - */ - -/** - * Experimental support for Dart to Kernel parser isolate. - * - * TODO(hausner): Document finalized interface. - * - */ - -// TODO(33433): Remove kernel service from the embedding API. - -typedef enum { - Dart_KernelCompilationStatus_Unknown = -1, - Dart_KernelCompilationStatus_Ok = 0, - Dart_KernelCompilationStatus_Error = 1, - Dart_KernelCompilationStatus_Crash = 2, - Dart_KernelCompilationStatus_MsgFailed = 3, -} Dart_KernelCompilationStatus; - -typedef struct { - Dart_KernelCompilationStatus status; - bool null_safety; - char* error; - uint8_t* kernel; - intptr_t kernel_size; -} Dart_KernelCompilationResult; - -typedef enum { - Dart_KernelCompilationVerbosityLevel_Error = 0, - Dart_KernelCompilationVerbosityLevel_Warning, - Dart_KernelCompilationVerbosityLevel_Info, - Dart_KernelCompilationVerbosityLevel_All, -} Dart_KernelCompilationVerbosityLevel; - -DART_EXPORT bool Dart_IsKernelIsolate(Dart_Isolate isolate); -DART_EXPORT bool Dart_KernelIsolateIsRunning(void); -DART_EXPORT Dart_Port Dart_KernelPort(void); - -/** - * Compiles the given `script_uri` to a kernel file. - * - * \param platform_kernel A buffer containing the kernel of the platform (e.g. - * `vm_platform_strong.dill`). The VM does not take ownership of this memory. - * - * \param platform_kernel_size The length of the platform_kernel buffer. - * - * \param snapshot_compile Set to `true` when the compilation is for a snapshot. - * This is used by the frontend to determine if compilation related information - * should be printed to console (e.g., null safety mode). - * - * \param verbosity Specifies the logging behavior of the kernel compilation - * service. - * - * \return Returns the result of the compilation. - * - * On a successful compilation the returned [Dart_KernelCompilationResult] has - * a status of [Dart_KernelCompilationStatus_Ok] and the `kernel`/`kernel_size` - * fields are set. The caller takes ownership of the malloc()ed buffer. - * - * On a failed compilation the `error` might be set describing the reason for - * the failed compilation. The caller takes ownership of the malloc()ed - * error. - * - * Requires there to be a current isolate. - */ -DART_EXPORT Dart_KernelCompilationResult -Dart_CompileToKernel(const char* script_uri, - const uint8_t* platform_kernel, - const intptr_t platform_kernel_size, - bool incremental_compile, - bool snapshot_compile, - const char* package_config, - Dart_KernelCompilationVerbosityLevel verbosity); - -/** - * Compiles the given `script_uri` to a kernel file. - * - * \param platform_kernel A buffer containing the kernel of the platform (e.g. - * `vm_platform_strong.dill`). The VM does not take ownership of this memory. - * - * \param platform_kernel_size The length of the platform_kernel buffer. - * - * \param snapshot_compile Set to `true` when the compilation is for a snapshot. - * This is used by the frontend to determine if compilation related information - * should be printed to console (e.g., null safety mode). - * - * \param null_safety Provides null-safety mode setting for the compiler. - * - * \param verbosity Specifies the logging behavior of the kernel compilation - * service. - * - * \return Returns the result of the compilation. - * - * On a successful compilation the returned [Dart_KernelCompilationResult] has - * a status of [Dart_KernelCompilationStatus_Ok] and the `kernel`/`kernel_size` - * fields are set. The caller takes ownership of the malloc()ed buffer. - * - * On a failed compilation the `error` might be set describing the reason for - * the failed compilation. The caller takes ownership of the malloc()ed - * error. - */ -DART_EXPORT Dart_KernelCompilationResult -Dart_CompileToKernelWithGivenNullsafety( - const char* script_uri, - const uint8_t* platform_kernel, - const intptr_t platform_kernel_size, - bool snapshot_compile, - const char* package_config, - const bool null_safety, - Dart_KernelCompilationVerbosityLevel verbosity); - -typedef struct { - const char* uri; - const char* source; -} Dart_SourceFile; - -DART_EXPORT Dart_KernelCompilationResult Dart_KernelListDependencies(void); - -/** - * Sets the kernel buffer which will be used to load Dart SDK sources - * dynamically at runtime. - * - * \param platform_kernel A buffer containing kernel which has sources for the - * Dart SDK populated. Note: The VM does not take ownership of this memory. - * - * \param platform_kernel_size The length of the platform_kernel buffer. - */ -DART_EXPORT void Dart_SetDartLibrarySourcesKernel( - const uint8_t* platform_kernel, - const intptr_t platform_kernel_size); - -/** - * Detect the null safety opt-in status. - * - * When running from source, it is based on the opt-in status of `script_uri`. - * When running from a kernel buffer, it is based on the mode used when - * generating `kernel_buffer`. - * When running from an appJIT or AOT snapshot, it is based on the mode used - * when generating `snapshot_data`. - * - * \param script_uri Uri of the script that contains the source code - * - * \param package_config Uri of the package configuration file (either in format - * of .packages or .dart_tool/package_config.json) for the null safety - * detection to resolve package imports against. If this parameter is not - * passed the package resolution of the parent isolate should be used. - * - * \param original_working_directory current working directory when the VM - * process was launched, this is used to correctly resolve the path specified - * for package_config. - * - * \param snapshot_data Buffer containing the snapshot data of the - * isolate or NULL if no snapshot is provided. If provided, the buffers must - * remain valid until the isolate shuts down. - * - * \param snapshot_instructions Buffer containing the snapshot instructions of - * the isolate or NULL if no snapshot is provided. If provided, the buffers - * must remain valid until the isolate shuts down. - * - * \param kernel_buffer A buffer which contains a kernel/DIL program. Must - * remain valid until isolate shutdown. - * - * \param kernel_buffer_size The size of `kernel_buffer`. - * - * \return Returns true if the null safety is opted in by the input being - * run `script_uri`, `snapshot_data` or `kernel_buffer`. - * - */ -DART_EXPORT bool Dart_DetectNullSafety(const char* script_uri, - const char* package_config, - const char* original_working_directory, - const uint8_t* snapshot_data, - const uint8_t* snapshot_instructions, - const uint8_t* kernel_buffer, - intptr_t kernel_buffer_size); - -#define DART_KERNEL_ISOLATE_NAME "kernel-service" - -/* - * ======= - * Service - * ======= - */ - -#define DART_VM_SERVICE_ISOLATE_NAME "vm-service" - -/** - * Returns true if isolate is the service isolate. - * - * \param isolate An isolate - * - * \return Returns true if 'isolate' is the service isolate. - */ -DART_EXPORT bool Dart_IsServiceIsolate(Dart_Isolate isolate); - -/** - * Writes the CPU profile to the timeline as a series of 'instant' events. - * - * Note that this is an expensive operation. - * - * \param main_port The main port of the Isolate whose profile samples to write. - * \param error An optional error, must be free()ed by caller. - * - * \return Returns true if the profile is successfully written and false - * otherwise. - */ -DART_EXPORT bool Dart_WriteProfileToTimeline(Dart_Port main_port, char** error); - -/* - * ============== - * Precompilation - * ============== - */ - -/** - * Compiles all functions reachable from entry points and marks - * the isolate to disallow future compilation. - * - * Entry points should be specified using `@pragma("vm:entry-point")` - * annotation. - * - * \return An error handle if a compilation error or runtime error running const - * constructors was encountered. - */ -DART_EXPORT Dart_Handle Dart_Precompile(void); - -typedef void (*Dart_CreateLoadingUnitCallback)( - void* callback_data, - intptr_t loading_unit_id, - void** write_callback_data, - void** write_debug_callback_data); -typedef void (*Dart_StreamingWriteCallback)(void* callback_data, - const uint8_t* buffer, - intptr_t size); -typedef void (*Dart_StreamingCloseCallback)(void* callback_data); - -DART_EXPORT Dart_Handle Dart_LoadingUnitLibraryUris(intptr_t loading_unit_id); - -// On Darwin systems, 'dlsym' adds an '_' to the beginning of the symbol name. -// Use the '...CSymbol' definitions for resolving through 'dlsym'. The actual -// symbol names in the objects are given by the '...AsmSymbol' definitions. -#if defined(__APPLE__) -#define kSnapshotBuildIdCSymbol "kDartSnapshotBuildId" -#define kVmSnapshotDataCSymbol "kDartVmSnapshotData" -#define kVmSnapshotInstructionsCSymbol "kDartVmSnapshotInstructions" -#define kVmSnapshotBssCSymbol "kDartVmSnapshotBss" -#define kIsolateSnapshotDataCSymbol "kDartIsolateSnapshotData" -#define kIsolateSnapshotInstructionsCSymbol "kDartIsolateSnapshotInstructions" -#define kIsolateSnapshotBssCSymbol "kDartIsolateSnapshotBss" -#else -#define kSnapshotBuildIdCSymbol "_kDartSnapshotBuildId" -#define kVmSnapshotDataCSymbol "_kDartVmSnapshotData" -#define kVmSnapshotInstructionsCSymbol "_kDartVmSnapshotInstructions" -#define kVmSnapshotBssCSymbol "_kDartVmSnapshotBss" -#define kIsolateSnapshotDataCSymbol "_kDartIsolateSnapshotData" -#define kIsolateSnapshotInstructionsCSymbol "_kDartIsolateSnapshotInstructions" -#define kIsolateSnapshotBssCSymbol "_kDartIsolateSnapshotBss" -#endif - -#define kSnapshotBuildIdAsmSymbol "_kDartSnapshotBuildId" -#define kVmSnapshotDataAsmSymbol "_kDartVmSnapshotData" -#define kVmSnapshotInstructionsAsmSymbol "_kDartVmSnapshotInstructions" -#define kVmSnapshotBssAsmSymbol "_kDartVmSnapshotBss" -#define kIsolateSnapshotDataAsmSymbol "_kDartIsolateSnapshotData" -#define kIsolateSnapshotInstructionsAsmSymbol \ - "_kDartIsolateSnapshotInstructions" -#define kIsolateSnapshotBssAsmSymbol "_kDartIsolateSnapshotBss" - -/** - * Creates a precompiled snapshot. - * - A root library must have been loaded. - * - Dart_Precompile must have been called. - * - * Outputs an assembly file defining the symbols listed in the definitions - * above. - * - * The assembly should be compiled as a static or shared library and linked or - * loaded by the embedder. Running this snapshot requires a VM compiled with - * DART_PRECOMPILED_SNAPSHOT. The kDartVmSnapshotData and - * kDartVmSnapshotInstructions should be passed to Dart_Initialize. The - * kDartIsolateSnapshotData and kDartIsolateSnapshotInstructions should be - * passed to Dart_CreateIsolateGroup. - * - * The callback will be invoked one or more times to provide the assembly code. - * - * If stripped is true, then the assembly code will not include DWARF - * debugging sections. - * - * If debug_callback_data is provided, debug_callback_data will be used with - * the callback to provide separate debugging information. - * - * \return A valid handle if no error occurs during the operation. - */ -DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle -Dart_CreateAppAOTSnapshotAsAssembly(Dart_StreamingWriteCallback callback, - void* callback_data, - bool stripped, - void* debug_callback_data); -DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle -Dart_CreateAppAOTSnapshotAsAssemblies( - Dart_CreateLoadingUnitCallback next_callback, - void* next_callback_data, - bool stripped, - Dart_StreamingWriteCallback write_callback, - Dart_StreamingCloseCallback close_callback); - -/** - * Creates a precompiled snapshot. - * - A root library must have been loaded. - * - Dart_Precompile must have been called. - * - * Outputs an ELF shared library defining the symbols - * - _kDartVmSnapshotData - * - _kDartVmSnapshotInstructions - * - _kDartIsolateSnapshotData - * - _kDartIsolateSnapshotInstructions - * - * The shared library should be dynamically loaded by the embedder. - * Running this snapshot requires a VM compiled with DART_PRECOMPILED_SNAPSHOT. - * The kDartVmSnapshotData and kDartVmSnapshotInstructions should be passed to - * Dart_Initialize. The kDartIsolateSnapshotData and - * kDartIsolateSnapshotInstructions should be passed to Dart_CreateIsolate. - * - * The callback will be invoked one or more times to provide the binary output. - * - * If stripped is true, then the binary output will not include DWARF - * debugging sections. - * - * If debug_callback_data is provided, debug_callback_data will be used with - * the callback to provide separate debugging information. - * - * \return A valid handle if no error occurs during the operation. - */ -DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle -Dart_CreateAppAOTSnapshotAsElf(Dart_StreamingWriteCallback callback, - void* callback_data, - bool stripped, - void* debug_callback_data); -DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle -Dart_CreateAppAOTSnapshotAsElfs(Dart_CreateLoadingUnitCallback next_callback, - void* next_callback_data, - bool stripped, - Dart_StreamingWriteCallback write_callback, - Dart_StreamingCloseCallback close_callback); - -/** - * Like Dart_CreateAppAOTSnapshotAsAssembly, but only includes - * kDartVmSnapshotData and kDartVmSnapshotInstructions. It also does - * not strip DWARF information from the generated assembly or allow for - * separate debug information. - */ -DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle -Dart_CreateVMAOTSnapshotAsAssembly(Dart_StreamingWriteCallback callback, - void* callback_data); - -/** - * Sorts the class-ids in depth first traversal order of the inheritance - * tree. This is a costly operation, but it can make method dispatch - * more efficient and is done before writing snapshots. - * - * \return A valid handle if no error occurs during the operation. - */ -DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle Dart_SortClasses(void); - -/** - * Creates a snapshot that caches compiled code and type feedback for faster - * startup and quicker warmup in a subsequent process. - * - * Outputs a snapshot in two pieces. The pieces should be passed to - * Dart_CreateIsolateGroup in a VM using the same VM snapshot pieces used in the - * current VM. The instructions piece must be loaded with read and execute - * permissions; the data piece may be loaded as read-only. - * - * - Requires the VM to have not been started with --precompilation. - * - Not supported when targeting IA32. - * - The VM writing the snapshot and the VM reading the snapshot must be the - * same version, must be built in the same DEBUG/RELEASE/PRODUCT mode, must - * be targeting the same architecture, and must both be in checked mode or - * both in unchecked mode. - * - * The buffers are scope allocated and are only valid until the next call to - * Dart_ExitScope. - * - * \return A valid handle if no error occurs during the operation. - */ -DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle -Dart_CreateAppJITSnapshotAsBlobs(uint8_t** isolate_snapshot_data_buffer, - intptr_t* isolate_snapshot_data_size, - uint8_t** isolate_snapshot_instructions_buffer, - intptr_t* isolate_snapshot_instructions_size); - -/** - * Like Dart_CreateAppJITSnapshotAsBlobs, but also creates a new VM snapshot. - */ -DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle -Dart_CreateCoreJITSnapshotAsBlobs( - uint8_t** vm_snapshot_data_buffer, - intptr_t* vm_snapshot_data_size, - uint8_t** vm_snapshot_instructions_buffer, - intptr_t* vm_snapshot_instructions_size, - uint8_t** isolate_snapshot_data_buffer, - intptr_t* isolate_snapshot_data_size, - uint8_t** isolate_snapshot_instructions_buffer, - intptr_t* isolate_snapshot_instructions_size); - -/** - * Get obfuscation map for precompiled code. - * - * Obfuscation map is encoded as a JSON array of pairs (original name, - * obfuscated name). - * - * \return Returns an error handler if the VM was built in a mode that does not - * support obfuscation. - */ -DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle -Dart_GetObfuscationMap(uint8_t** buffer, intptr_t* buffer_length); - -/** - * Returns whether the VM only supports running from precompiled snapshots and - * not from any other kind of snapshot or from source (that is, the VM was - * compiled with DART_PRECOMPILED_RUNTIME). - */ -DART_EXPORT bool Dart_IsPrecompiledRuntime(void); - -/** - * Print a native stack trace. Used for crash handling. - * - * If context is NULL, prints the current stack trace. Otherwise, context - * should be a CONTEXT* (Windows) or ucontext_t* (POSIX) from a signal handler - * running on the current thread. - */ -DART_EXPORT void Dart_DumpNativeStackTrace(void* context); - -/** - * Indicate that the process is about to abort, and the Dart VM should not - * attempt to cleanup resources. - */ -DART_EXPORT void Dart_PrepareToAbort(void); - -#endif /* INCLUDE_DART_API_H_ */ /* NOLINT */ diff --git a/experimental/pedometer/src/health_connect/include/dart_api_dl.c b/experimental/pedometer/src/health_connect/include/dart_api_dl.c deleted file mode 100644 index c4a68f444..000000000 --- a/experimental/pedometer/src/health_connect/include/dart_api_dl.c +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file - * for details. All rights reserved. Use of this source code is governed by a - * BSD-style license that can be found in the LICENSE file. - */ - -#include "dart_api_dl.h" /* NOLINT */ -#include "dart_version.h" /* NOLINT */ -#include "internal/dart_api_dl_impl.h" /* NOLINT */ - -#include - -#define DART_API_DL_DEFINITIONS(name, R, A) name##_Type name##_DL = NULL; - -DART_API_ALL_DL_SYMBOLS(DART_API_DL_DEFINITIONS) - -#undef DART_API_DL_DEFINITIONS - -typedef void* DartApiEntry_function; - -DartApiEntry_function FindFunctionPointer(const DartApiEntry* entries, - const char* name) { - while (entries->name != NULL) { - if (strcmp(entries->name, name) == 0) return entries->function; - entries++; - } - return NULL; -} - -intptr_t Dart_InitializeApiDL(void* data) { - DartApi* dart_api_data = (DartApi*)data; - - if (dart_api_data->major != DART_API_DL_MAJOR_VERSION) { - // If the DartVM we're running on does not have the same version as this - // file was compiled against, refuse to initialize. The symbols are not - // compatible. - return -1; - } - // Minor versions are allowed to be different. - // If the DartVM has a higher minor version, it will provide more symbols - // than we initialize here. - // If the DartVM has a lower minor version, it will not provide all symbols. - // In that case, we leave the missing symbols un-initialized. Those symbols - // should not be used by the Dart and native code. The client is responsible - // for checking the minor version number himself based on which symbols it - // is using. - // (If we would error out on this case, recompiling native code against a - // newer SDK would break all uses on older SDKs, which is too strict.) - - const DartApiEntry* dart_api_function_pointers = dart_api_data->functions; - -#define DART_API_DL_INIT(name, R, A) \ - name##_DL = \ - (name##_Type)(FindFunctionPointer(dart_api_function_pointers, #name)); - DART_API_ALL_DL_SYMBOLS(DART_API_DL_INIT) -#undef DART_API_DL_INIT - - return 0; -} diff --git a/experimental/pedometer/src/health_connect/include/dart_api_dl.h b/experimental/pedometer/src/health_connect/include/dart_api_dl.h deleted file mode 100644 index 804b2811c..000000000 --- a/experimental/pedometer/src/health_connect/include/dart_api_dl.h +++ /dev/null @@ -1,150 +0,0 @@ -/* - * Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file - * for details. All rights reserved. Use of this source code is governed by a - * BSD-style license that can be found in the LICENSE file. - */ - -#ifndef RUNTIME_INCLUDE_DART_API_DL_H_ -#define RUNTIME_INCLUDE_DART_API_DL_H_ - -#include "dart_api.h" /* NOLINT */ -#include "dart_native_api.h" /* NOLINT */ - -/** \mainpage Dynamically Linked Dart API - * - * This exposes a subset of symbols from dart_api.h and dart_native_api.h - * available in every Dart embedder through dynamic linking. - * - * All symbols are postfixed with _DL to indicate that they are dynamically - * linked and to prevent conflicts with the original symbol. - * - * Link `dart_api_dl.c` file into your library and invoke - * `Dart_InitializeApiDL` with `NativeApi.initializeApiDLData`. - */ - -DART_EXPORT intptr_t Dart_InitializeApiDL(void* data); - -// ============================================================================ -// IMPORTANT! Never update these signatures without properly updating -// DART_API_DL_MAJOR_VERSION and DART_API_DL_MINOR_VERSION. -// -// Verbatim copy of `dart_native_api.h` and `dart_api.h` symbol names and types -// to trigger compile-time errors if the sybols in those files are updated -// without updating these. -// -// Function return and argument types, and typedefs are carbon copied. Structs -// are typechecked nominally in C/C++, so they are not copied, instead a -// comment is added to their definition. -typedef int64_t Dart_Port_DL; - -typedef void (*Dart_NativeMessageHandler_DL)(Dart_Port_DL dest_port_id, - Dart_CObject* message); - -// dart_native_api.h symbols can be called on any thread. -#define DART_NATIVE_API_DL_SYMBOLS(F) \ - /***** dart_native_api.h *****/ \ - /* Dart_Port */ \ - F(Dart_PostCObject, bool, (Dart_Port_DL port_id, Dart_CObject * message)) \ - F(Dart_PostInteger, bool, (Dart_Port_DL port_id, int64_t message)) \ - F(Dart_NewNativePort, Dart_Port_DL, \ - (const char* name, Dart_NativeMessageHandler_DL handler, \ - bool handle_concurrently)) \ - F(Dart_CloseNativePort, bool, (Dart_Port_DL native_port_id)) - -// dart_api.h symbols can only be called on Dart threads. -#define DART_API_DL_SYMBOLS(F) \ - /***** dart_api.h *****/ \ - /* Errors */ \ - F(Dart_IsError, bool, (Dart_Handle handle)) \ - F(Dart_IsApiError, bool, (Dart_Handle handle)) \ - F(Dart_IsUnhandledExceptionError, bool, (Dart_Handle handle)) \ - F(Dart_IsCompilationError, bool, (Dart_Handle handle)) \ - F(Dart_IsFatalError, bool, (Dart_Handle handle)) \ - F(Dart_GetError, const char*, (Dart_Handle handle)) \ - F(Dart_ErrorHasException, bool, (Dart_Handle handle)) \ - F(Dart_ErrorGetException, Dart_Handle, (Dart_Handle handle)) \ - F(Dart_ErrorGetStackTrace, Dart_Handle, (Dart_Handle handle)) \ - F(Dart_NewApiError, Dart_Handle, (const char* error)) \ - F(Dart_NewCompilationError, Dart_Handle, (const char* error)) \ - F(Dart_NewUnhandledExceptionError, Dart_Handle, (Dart_Handle exception)) \ - F(Dart_PropagateError, void, (Dart_Handle handle)) \ - /* Dart_Handle, Dart_PersistentHandle, Dart_WeakPersistentHandle */ \ - F(Dart_HandleFromPersistent, Dart_Handle, (Dart_PersistentHandle object)) \ - F(Dart_HandleFromWeakPersistent, Dart_Handle, \ - (Dart_WeakPersistentHandle object)) \ - F(Dart_NewPersistentHandle, Dart_PersistentHandle, (Dart_Handle object)) \ - F(Dart_SetPersistentHandle, void, \ - (Dart_PersistentHandle obj1, Dart_Handle obj2)) \ - F(Dart_DeletePersistentHandle, void, (Dart_PersistentHandle object)) \ - F(Dart_NewWeakPersistentHandle, Dart_WeakPersistentHandle, \ - (Dart_Handle object, void* peer, intptr_t external_allocation_size, \ - Dart_HandleFinalizer callback)) \ - F(Dart_DeleteWeakPersistentHandle, void, (Dart_WeakPersistentHandle object)) \ - F(Dart_UpdateExternalSize, void, \ - (Dart_WeakPersistentHandle object, intptr_t external_allocation_size)) \ - F(Dart_NewFinalizableHandle, Dart_FinalizableHandle, \ - (Dart_Handle object, void* peer, intptr_t external_allocation_size, \ - Dart_HandleFinalizer callback)) \ - F(Dart_DeleteFinalizableHandle, void, \ - (Dart_FinalizableHandle object, Dart_Handle strong_ref_to_object)) \ - F(Dart_UpdateFinalizableExternalSize, void, \ - (Dart_FinalizableHandle object, Dart_Handle strong_ref_to_object, \ - intptr_t external_allocation_size)) \ - /* Dart_Port */ \ - F(Dart_Post, bool, (Dart_Port_DL port_id, Dart_Handle object)) \ - F(Dart_NewSendPort, Dart_Handle, (Dart_Port_DL port_id)) \ - F(Dart_SendPortGetId, Dart_Handle, \ - (Dart_Handle port, Dart_Port_DL * port_id)) \ - /* Scopes */ \ - F(Dart_EnterScope, void, (void)) \ - F(Dart_ExitScope, void, (void)) - -#define DART_API_ALL_DL_SYMBOLS(F) \ - DART_NATIVE_API_DL_SYMBOLS(F) \ - DART_API_DL_SYMBOLS(F) -// IMPORTANT! Never update these signatures without properly updating -// DART_API_DL_MAJOR_VERSION and DART_API_DL_MINOR_VERSION. -// -// End of verbatim copy. -// ============================================================================ - -// Copy of definition of DART_EXPORT without 'used' attribute. -// -// The 'used' attribute cannot be used with DART_API_ALL_DL_SYMBOLS because -// they are not function declarations, but variable declarations with a -// function pointer type. -// -// The function pointer variables are initialized with the addresses of the -// functions in the VM. If we were to use function declarations instead, we -// would need to forward the call to the VM adding indirection. -#if defined(__CYGWIN__) -#error Tool chain and platform not supported. -#elif defined(_WIN32) -#if defined(DART_SHARED_LIB) -#define DART_EXPORT_DL DART_EXTERN_C __declspec(dllexport) -#else -#define DART_EXPORT_DL DART_EXTERN_C -#endif -#else -#if __GNUC__ >= 4 -#if defined(DART_SHARED_LIB) -#define DART_EXPORT_DL DART_EXTERN_C __attribute__((visibility("default"))) -#else -#define DART_EXPORT_DL DART_EXTERN_C -#endif -#else -#error Tool chain not supported. -#endif -#endif - -#define DART_API_DL_DECLARATIONS(name, R, A) \ - typedef R(*name##_Type) A; \ - DART_EXPORT_DL name##_Type name##_DL; - -DART_API_ALL_DL_SYMBOLS(DART_API_DL_DECLARATIONS) - -#undef DART_API_DL_DECLARATIONS - -#undef DART_EXPORT_DL - -#endif /* RUNTIME_INCLUDE_DART_API_DL_H_ */ /* NOLINT */ diff --git a/experimental/pedometer/src/health_connect/include/dart_embedder_api.h b/experimental/pedometer/src/health_connect/include/dart_embedder_api.h deleted file mode 100644 index e565ebf6e..000000000 --- a/experimental/pedometer/src/health_connect/include/dart_embedder_api.h +++ /dev/null @@ -1,108 +0,0 @@ -// Copyright (c) 2018, the Dart project authors. Please see the AUTHORS file -// for details. All rights reserved. Use of this source code is governed by a -// BSD-style license that can be found in the LICENSE file. - -#ifndef RUNTIME_INCLUDE_DART_EMBEDDER_API_H_ -#define RUNTIME_INCLUDE_DART_EMBEDDER_API_H_ - -#include "include/dart_api.h" -#include "include/dart_tools_api.h" - -namespace dart { -namespace embedder { - -// Initialize all subsystems of the embedder. -// -// Must be called before the `Dart_Initialize()` call to initialize the -// Dart VM. -// -// Returns true on success and false otherwise, in which case error would -// contain error message. -DART_WARN_UNUSED_RESULT bool InitOnce(char** error); - -// Cleans up all subsystems of the embedder. -// -// Must be called after the `Dart_Cleanup()` call to initialize the -// Dart VM. -void Cleanup(); - -// Common arguments that are passed to isolate creation callback and to -// API methods that create isolates. -struct IsolateCreationData { - // URI for the main script that will be running in the isolate. - const char* script_uri; - - // Advisory name of the main method that will be run by isolate. - // Only used for error messages. - const char* main; - - // Isolate creation flags. Might be absent. - Dart_IsolateFlags* flags; - - // Isolate group callback data. - void* isolate_group_data; - - // Isolate callback data. - void* isolate_data; -}; - -// Create and initialize kernel-service isolate. This method should be used -// when VM invokes isolate creation callback with DART_KERNEL_ISOLATE_NAME as -// script_uri. -// The isolate is created from the given snapshot (might be kernel data or -// app-jit snapshot). -DART_WARN_UNUSED_RESULT Dart_Isolate -CreateKernelServiceIsolate(const IsolateCreationData& data, - const uint8_t* buffer, - intptr_t buffer_size, - char** error); - -// Service isolate configuration. -struct VmServiceConfiguration { - enum { - kBindHttpServerToAFreePort = 0, - kDoNotAutoStartHttpServer = -1 - }; - - // Address to which HTTP server will be bound. - const char* ip; - - // Default port. See enum above for special values. - int port; - - // If non-null, connection information for the VM service will be output to a - // file in JSON format at the location specified. - const char* write_service_info_filename; - - // TODO(vegorov) document these ones. - bool dev_mode; - bool deterministic; - bool disable_auth_codes; -}; - -// Create and initialize vm-service isolate from the given AOT snapshot, which -// is expected to contain all necessary 'vm-service' libraries. -// This method should be used when VM invokes isolate creation callback with -// DART_VM_SERVICE_ISOLATE_NAME as script_uri. -DART_WARN_UNUSED_RESULT Dart_Isolate -CreateVmServiceIsolate(const IsolateCreationData& data, - const VmServiceConfiguration& config, - const uint8_t* isolate_data, - const uint8_t* isolate_instr, - char** error); - -// Create and initialize vm-service isolate from the given kernel binary, which -// is expected to contain all necessary 'vm-service' libraries. -// This method should be used when VM invokes isolate creation callback with -// DART_VM_SERVICE_ISOLATE_NAME as script_uri. -DART_WARN_UNUSED_RESULT Dart_Isolate -CreateVmServiceIsolateFromKernel(const IsolateCreationData& data, - const VmServiceConfiguration& config, - const uint8_t* kernel_buffer, - intptr_t kernel_buffer_size, - char** error); - -} // namespace embedder -} // namespace dart - -#endif // RUNTIME_INCLUDE_DART_EMBEDDER_API_H_ diff --git a/experimental/pedometer/src/health_connect/include/dart_native_api.h b/experimental/pedometer/src/health_connect/include/dart_native_api.h deleted file mode 100644 index 318a4b735..000000000 --- a/experimental/pedometer/src/health_connect/include/dart_native_api.h +++ /dev/null @@ -1,205 +0,0 @@ -/* - * Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file - * for details. All rights reserved. Use of this source code is governed by a - * BSD-style license that can be found in the LICENSE file. - */ - -#ifndef RUNTIME_INCLUDE_DART_NATIVE_API_H_ -#define RUNTIME_INCLUDE_DART_NATIVE_API_H_ - -#include "dart_api.h" /* NOLINT */ - -/* - * ========================================== - * Message sending/receiving from native code - * ========================================== - */ - -/** - * A Dart_CObject is used for representing Dart objects as native C - * data outside the Dart heap. These objects are totally detached from - * the Dart heap. Only a subset of the Dart objects have a - * representation as a Dart_CObject. - * - * The string encoding in the 'value.as_string' is UTF-8. - * - * All the different types from dart:typed_data are exposed as type - * kTypedData. The specific type from dart:typed_data is in the type - * field of the as_typed_data structure. The length in the - * as_typed_data structure is always in bytes. - * - * The data for kTypedData is copied on message send and ownership remains with - * the caller. The ownership of data for kExternalTyped is passed to the VM on - * message send and returned when the VM invokes the - * Dart_HandleFinalizer callback; a non-NULL callback must be provided. - * - * Note that Dart_CObject_kNativePointer is intended for internal use by - * dart:io implementation and has no connection to dart:ffi Pointer class. - * It represents a pointer to a native resource of a known type. - * The receiving side will only see this pointer as an integer and will not - * see the specified finalizer. - * The specified finalizer will only be invoked if the message is not delivered. - */ -typedef enum { - Dart_CObject_kNull = 0, - Dart_CObject_kBool, - Dart_CObject_kInt32, - Dart_CObject_kInt64, - Dart_CObject_kDouble, - Dart_CObject_kString, - Dart_CObject_kArray, - Dart_CObject_kTypedData, - Dart_CObject_kExternalTypedData, - Dart_CObject_kUnmodifiableExternalTypedData, - Dart_CObject_kSendPort, - Dart_CObject_kCapability, - Dart_CObject_kNativePointer, - Dart_CObject_kUnsupported, - Dart_CObject_kNumberOfTypes -} Dart_CObject_Type; - -typedef struct _Dart_CObject { - Dart_CObject_Type type; - union { - bool as_bool; - int32_t as_int32; - int64_t as_int64; - double as_double; - char* as_string; - struct { - Dart_Port id; - Dart_Port origin_id; - } as_send_port; - struct { - int64_t id; - } as_capability; - struct { - intptr_t length; - struct _Dart_CObject** values; - } as_array; - struct { - Dart_TypedData_Type type; - intptr_t length; /* in elements, not bytes */ - const uint8_t* values; - } as_typed_data; - struct { - Dart_TypedData_Type type; - intptr_t length; /* in elements, not bytes */ - uint8_t* data; - void* peer; - Dart_HandleFinalizer callback; - } as_external_typed_data; - struct { - intptr_t ptr; - intptr_t size; - Dart_HandleFinalizer callback; - } as_native_pointer; - } value; -} Dart_CObject; -// This struct is versioned by DART_API_DL_MAJOR_VERSION, bump the version when -// changing this struct. - -/** - * Posts a message on some port. The message will contain the Dart_CObject - * object graph rooted in 'message'. - * - * While the message is being sent the state of the graph of Dart_CObject - * structures rooted in 'message' should not be accessed, as the message - * generation will make temporary modifications to the data. When the message - * has been sent the graph will be fully restored. - * - * If true is returned, the message was enqueued, and finalizers for external - * typed data will eventually run, even if the receiving isolate shuts down - * before processing the message. If false is returned, the message was not - * enqueued and ownership of external typed data in the message remains with the - * caller. - * - * This function may be called on any thread when the VM is running (that is, - * after Dart_Initialize has returned and before Dart_Cleanup has been called). - * - * \param port_id The destination port. - * \param message The message to send. - * - * \return True if the message was posted. - */ -DART_EXPORT bool Dart_PostCObject(Dart_Port port_id, Dart_CObject* message); - -/** - * Posts a message on some port. The message will contain the integer 'message'. - * - * \param port_id The destination port. - * \param message The message to send. - * - * \return True if the message was posted. - */ -DART_EXPORT bool Dart_PostInteger(Dart_Port port_id, int64_t message); - -/** - * A native message handler. - * - * This handler is associated with a native port by calling - * Dart_NewNativePort. - * - * The message received is decoded into the message structure. The - * lifetime of the message data is controlled by the caller. All the - * data references from the message are allocated by the caller and - * will be reclaimed when returning to it. - */ -typedef void (*Dart_NativeMessageHandler)(Dart_Port dest_port_id, - Dart_CObject* message); - -/** - * Creates a new native port. When messages are received on this - * native port, then they will be dispatched to the provided native - * message handler. - * - * \param name The name of this port in debugging messages. - * \param handler The C handler to run when messages arrive on the port. - * \param handle_concurrently Is it okay to process requests on this - * native port concurrently? - * - * \return If successful, returns the port id for the native port. In - * case of error, returns ILLEGAL_PORT. - */ -DART_EXPORT Dart_Port Dart_NewNativePort(const char* name, - Dart_NativeMessageHandler handler, - bool handle_concurrently); -/* TODO(turnidge): Currently handle_concurrently is ignored. */ - -/** - * Closes the native port with the given id. - * - * The port must have been allocated by a call to Dart_NewNativePort. - * - * \param native_port_id The id of the native port to close. - * - * \return Returns true if the port was closed successfully. - */ -DART_EXPORT bool Dart_CloseNativePort(Dart_Port native_port_id); - -/* - * ================== - * Verification Tools - * ================== - */ - -/** - * Forces all loaded classes and functions to be compiled eagerly in - * the current isolate.. - * - * TODO(turnidge): Document. - */ -DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle Dart_CompileAll(void); - -/** - * Finalizes all classes. - */ -DART_EXPORT DART_WARN_UNUSED_RESULT Dart_Handle Dart_FinalizeAllClasses(void); - -/* This function is intentionally undocumented. - * - * It should not be used outside internal tests. - */ -DART_EXPORT void* Dart_ExecuteInternalCommand(const char* command, void* arg); - -#endif /* INCLUDE_DART_NATIVE_API_H_ */ /* NOLINT */ diff --git a/experimental/pedometer/src/health_connect/include/dart_tools_api.h b/experimental/pedometer/src/health_connect/include/dart_tools_api.h deleted file mode 100644 index 90687f601..000000000 --- a/experimental/pedometer/src/health_connect/include/dart_tools_api.h +++ /dev/null @@ -1,620 +0,0 @@ -// Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file -// for details. All rights reserved. Use of this source code is governed by a -// BSD-style license that can be found in the LICENSE file. - -#ifndef RUNTIME_INCLUDE_DART_TOOLS_API_H_ -#define RUNTIME_INCLUDE_DART_TOOLS_API_H_ - -#include "dart_api.h" /* NOLINT */ - -/** \mainpage Dart Tools Embedding API Reference - * - * This reference describes the Dart embedding API for tools. Tools include - * a debugger, service protocol, and timeline. - * - * NOTE: The APIs described in this file are unstable and subject to change. - * - * This reference is generated from the header include/dart_tools_api.h. - */ - -/* - * ======== - * Debugger - * ======== - */ - -/** - * ILLEGAL_ISOLATE_ID is a number guaranteed never to be associated with a - * valid isolate. - */ -#define ILLEGAL_ISOLATE_ID ILLEGAL_PORT - -/** - * ILLEGAL_ISOLATE_GROUP_ID is a number guaranteed never to be associated with a - * valid isolate group. - */ -#define ILLEGAL_ISOLATE_GROUP_ID 0 - -/* - * ======= - * Service - * ======= - */ - -/** - * A service request callback function. - * - * These callbacks, registered by the embedder, are called when the VM receives - * a service request it can't handle and the service request command name - * matches one of the embedder registered handlers. - * - * The return value of the callback indicates whether the response - * should be used as a regular result or an error result. - * Specifically, if the callback returns true, a regular JSON-RPC - * response is built in the following way: - * - * { - * "jsonrpc": "2.0", - * "result": , - * "id": , - * } - * - * If the callback returns false, a JSON-RPC error is built like this: - * - * { - * "jsonrpc": "2.0", - * "error": , - * "id": , - * } - * - * \param method The rpc method name. - * \param param_keys Service requests can have key-value pair parameters. The - * keys and values are flattened and stored in arrays. - * \param param_values The values associated with the keys. - * \param num_params The length of the param_keys and param_values arrays. - * \param user_data The user_data pointer registered with this handler. - * \param result A C string containing a valid JSON object. The returned - * pointer will be freed by the VM by calling free. - * - * \return True if the result is a regular JSON-RPC response, false if the - * result is a JSON-RPC error. - */ -typedef bool (*Dart_ServiceRequestCallback)(const char* method, - const char** param_keys, - const char** param_values, - intptr_t num_params, - void* user_data, - const char** json_object); - -/** - * Register a Dart_ServiceRequestCallback to be called to handle - * requests for the named rpc on a specific isolate. The callback will - * be invoked with the current isolate set to the request target. - * - * \param method The name of the method that this callback is responsible for. - * \param callback The callback to invoke. - * \param user_data The user data passed to the callback. - * - * NOTE: If multiple callbacks with the same name are registered, only - * the last callback registered will be remembered. - */ -DART_EXPORT void Dart_RegisterIsolateServiceRequestCallback( - const char* method, - Dart_ServiceRequestCallback callback, - void* user_data); - -/** - * Register a Dart_ServiceRequestCallback to be called to handle - * requests for the named rpc. The callback will be invoked without a - * current isolate. - * - * \param method The name of the command that this callback is responsible for. - * \param callback The callback to invoke. - * \param user_data The user data passed to the callback. - * - * NOTE: If multiple callbacks with the same name are registered, only - * the last callback registered will be remembered. - */ -DART_EXPORT void Dart_RegisterRootServiceRequestCallback( - const char* method, - Dart_ServiceRequestCallback callback, - void* user_data); - -/** - * Embedder information which can be requested by the VM for internal or - * reporting purposes. - * - * The pointers in this structure are not going to be cached or freed by the VM. - */ - - #define DART_EMBEDDER_INFORMATION_CURRENT_VERSION (0x00000001) - -typedef struct { - int32_t version; - const char* name; // [optional] The name of the embedder - int64_t current_rss; // [optional] the current RSS of the embedder - int64_t max_rss; // [optional] the maximum RSS of the embedder -} Dart_EmbedderInformation; - -/** - * Callback provided by the embedder that is used by the VM to request - * information. - * - * \return Returns a pointer to a Dart_EmbedderInformation structure. - * The embedder keeps the ownership of the structure and any field in it. - * The embedder must ensure that the structure will remain valid until the - * next invokation of the callback. - */ -typedef void (*Dart_EmbedderInformationCallback)( - Dart_EmbedderInformation* info); - -/** - * Register a Dart_ServiceRequestCallback to be called to handle - * requests for the named rpc. The callback will be invoked without a - * current isolate. - * - * \param method The name of the command that this callback is responsible for. - * \param callback The callback to invoke. - * \param user_data The user data passed to the callback. - * - * NOTE: If multiple callbacks are registered, only the last callback registered - * will be remembered. - */ -DART_EXPORT void Dart_SetEmbedderInformationCallback( - Dart_EmbedderInformationCallback callback); - -/** - * Invoke a vm-service method and wait for its result. - * - * \param request_json The utf8-encoded json-rpc request. - * \param request_json_length The length of the json-rpc request. - * - * \param response_json The returned utf8-encoded json response, must be - * free()ed by caller. - * \param response_json_length The length of the returned json response. - * \param error An optional error, must be free()ed by caller. - * - * \return Whether the call was successfully performed. - * - * NOTE: This method does not need a current isolate and must not have the - * vm-isolate being the current isolate. It must be called after - * Dart_Initialize() and before Dart_Cleanup(). - */ -DART_EXPORT bool Dart_InvokeVMServiceMethod(uint8_t* request_json, - intptr_t request_json_length, - uint8_t** response_json, - intptr_t* response_json_length, - char** error); - -/* - * ======== - * Event Streams - * ======== - */ - -/** - * A callback invoked when the VM service gets a request to listen to - * some stream. - * - * \return Returns true iff the embedder supports the named stream id. - */ -typedef bool (*Dart_ServiceStreamListenCallback)(const char* stream_id); - -/** - * A callback invoked when the VM service gets a request to cancel - * some stream. - */ -typedef void (*Dart_ServiceStreamCancelCallback)(const char* stream_id); - -/** - * Adds VM service stream callbacks. - * - * \param listen_callback A function pointer to a listen callback function. - * A listen callback function should not be already set when this function - * is called. A NULL value removes the existing listen callback function - * if any. - * - * \param cancel_callback A function pointer to a cancel callback function. - * A cancel callback function should not be already set when this function - * is called. A NULL value removes the existing cancel callback function - * if any. - * - * \return Success if the callbacks were added. Otherwise, returns an - * error handle. - */ -DART_EXPORT char* Dart_SetServiceStreamCallbacks( - Dart_ServiceStreamListenCallback listen_callback, - Dart_ServiceStreamCancelCallback cancel_callback); - -/** - * Sends a data event to clients of the VM Service. - * - * A data event is used to pass an array of bytes to subscribed VM - * Service clients. For example, in the standalone embedder, this is - * function used to provide WriteEvents on the Stdout and Stderr - * streams. - * - * If the embedder passes in a stream id for which no client is - * subscribed, then the event is ignored. - * - * \param stream_id The id of the stream on which to post the event. - * - * \param event_kind A string identifying what kind of event this is. - * For example, 'WriteEvent'. - * - * \param bytes A pointer to an array of bytes. - * - * \param bytes_length The length of the byte array. - * - * \return NULL if the arguments are well formed. Otherwise, returns an - * error string. The caller is responsible for freeing the error message. - */ -DART_EXPORT char* Dart_ServiceSendDataEvent(const char* stream_id, - const char* event_kind, - const uint8_t* bytes, - intptr_t bytes_length); - -/** - * Usage statistics for a space/generation at a particular moment in time. - * - * \param used Amount of memory used, in bytes. - * - * \param capacity Memory capacity, in bytes. - * - * \param external External memory, in bytes. - * - * \param collections How many times the garbage collector has run in this - * space. - * - * \param time Cumulative time spent collecting garbage in this space, in - * seconds. - * - * \param avg_collection_period Average time between garbage collector running - * in this space, in milliseconds. - */ -typedef struct { - intptr_t used; - intptr_t capacity; - intptr_t external; - intptr_t collections; - double time; - double avg_collection_period; -} Dart_GCStats; - -/** - * A Garbage Collection event with memory usage statistics. - * - * \param type The event type. Static lifetime. - * - * \param reason The reason for the GC event. Static lifetime. - * - * \param new_space Data for New Space. - * - * \param old_space Data for Old Space. - */ -typedef struct { - const char* type; - const char* reason; - - Dart_IsolateGroupId isolate_group_id; - - Dart_GCStats new_space; - Dart_GCStats old_space; -} Dart_GCEvent; - -/** - * A callback invoked when the VM emits a GC event. - * - * \param event The GC event data. Pointer only valid for the duration of the - * callback. - */ -typedef void (*Dart_GCEventCallback)(Dart_GCEvent* event); - -/** - * Sets the native GC event callback. - * - * \param callback A function pointer to an event handler callback function. - * A NULL value removes the existing listen callback function if any. - */ -DART_EXPORT void Dart_SetGCEventCallback(Dart_GCEventCallback callback); - -/* - * ======== - * Reload support - * ======== - * - * These functions are used to implement reloading in the Dart VM. - * This is an experimental feature, so embedders should be prepared - * for these functions to change. - */ - -/** - * A callback which determines whether the file at some url has been - * modified since some time. If the file cannot be found, true should - * be returned. - */ -typedef bool (*Dart_FileModifiedCallback)(const char* url, int64_t since); - -DART_EXPORT char* Dart_SetFileModifiedCallback( - Dart_FileModifiedCallback file_modified_callback); - -/** - * Returns true if isolate is currently reloading. - */ -DART_EXPORT bool Dart_IsReloading(); - -/* - * ======== - * Timeline - * ======== - */ - -/** - * Enable tracking of specified timeline category. This is operational - * only when systrace timeline functionality is turned on. - * - * \param categories A comma separated list of categories that need to - * be enabled, the categories are - * "all" : All categories - * "API" - Execution of Dart C API functions - * "Compiler" - Execution of Dart JIT compiler - * "CompilerVerbose" - More detailed Execution of Dart JIT compiler - * "Dart" - Execution of Dart code - * "Debugger" - Execution of Dart debugger - * "Embedder" - Execution of Dart embedder code - * "GC" - Execution of Dart Garbage Collector - * "Isolate" - Dart Isolate lifecycle execution - * "VM" - Excution in Dart VM runtime code - * "" - None - * - * When "all" is specified all the categories are enabled. - * When a comma separated list of categories is specified, the categories - * that are specified will be enabled and the rest will be disabled. - * When "" is specified all the categories are disabled. - * The category names are case sensitive. - * eg: Dart_EnableTimelineCategory("all"); - * Dart_EnableTimelineCategory("GC,API,Isolate"); - * Dart_EnableTimelineCategory("GC,Debugger,Dart"); - * - * \return True if the categories were successfully enabled, False otherwise. - */ -DART_EXPORT bool Dart_SetEnabledTimelineCategory(const char* categories); - -/** - * Returns a timestamp in microseconds. This timestamp is suitable for - * passing into the timeline system, and uses the same monotonic clock - * as dart:developer's Timeline.now. - * - * \return A timestamp that can be passed to the timeline system. - */ -DART_EXPORT int64_t Dart_TimelineGetMicros(); - -/** - * Returns a raw timestamp in from the monotonic clock. - * - * \return A raw timestamp from the monotonic clock. - */ -DART_EXPORT int64_t Dart_TimelineGetTicks(); - -/** - * Returns the frequency of the monotonic clock. - * - * \return The frequency of the monotonic clock. - */ -DART_EXPORT int64_t Dart_TimelineGetTicksFrequency(); - -typedef enum { - Dart_Timeline_Event_Begin, // Phase = 'B'. - Dart_Timeline_Event_End, // Phase = 'E'. - Dart_Timeline_Event_Instant, // Phase = 'i'. - Dart_Timeline_Event_Duration, // Phase = 'X'. - Dart_Timeline_Event_Async_Begin, // Phase = 'b'. - Dart_Timeline_Event_Async_End, // Phase = 'e'. - Dart_Timeline_Event_Async_Instant, // Phase = 'n'. - Dart_Timeline_Event_Counter, // Phase = 'C'. - Dart_Timeline_Event_Flow_Begin, // Phase = 's'. - Dart_Timeline_Event_Flow_Step, // Phase = 't'. - Dart_Timeline_Event_Flow_End, // Phase = 'f'. -} Dart_Timeline_Event_Type; - -/** - * Add a timeline event to the embedder stream. - * - * \param label The name of the event. Its lifetime must extend at least until - * Dart_Cleanup. - * \param timestamp0 The first timestamp of the event. - * \param timestamp1_or_async_id The second timestamp of the event or - * the async id. - * \param argument_count The number of argument names and values. - * \param argument_names An array of names of the arguments. The lifetime of the - * names must extend at least until Dart_Cleanup. The array may be reclaimed - * when this call returns. - * \param argument_values An array of values of the arguments. The values and - * the array may be reclaimed when this call returns. - */ -DART_EXPORT void Dart_TimelineEvent(const char* label, - int64_t timestamp0, - int64_t timestamp1_or_async_id, - Dart_Timeline_Event_Type type, - intptr_t argument_count, - const char** argument_names, - const char** argument_values); - -/** - * Associates a name with the current thread. This name will be used to name - * threads in the timeline. Can only be called after a call to Dart_Initialize. - * - * \param name The name of the thread. - */ -DART_EXPORT void Dart_SetThreadName(const char* name); - -typedef struct { - const char* name; - const char* value; -} Dart_TimelineRecorderEvent_Argument; - -#define DART_TIMELINE_RECORDER_CURRENT_VERSION (0x00000001) - -typedef struct { - /* Set to DART_TIMELINE_RECORDER_CURRENT_VERSION */ - int32_t version; - - /* The event's type / phase. */ - Dart_Timeline_Event_Type type; - - /* The event's timestamp according to the same clock as - * Dart_TimelineGetMicros. For a duration event, this is the beginning time. - */ - int64_t timestamp0; - - /* For a duration event, this is the end time. For an async event, this is the - * async id. */ - int64_t timestamp1_or_async_id; - - /* The current isolate of the event, as if by Dart_GetMainPortId, or - * ILLEGAL_PORT if the event had no current isolate. */ - Dart_Port isolate; - - /* The current isolate group of the event, as if by - * Dart_CurrentIsolateGroupId, or ILLEGAL_PORT if the event had no current - * isolate group. */ - Dart_IsolateGroupId isolate_group; - - /* The name / label of the event. */ - const char* label; - - /* The stream / category of the event. */ - const char* stream; - - intptr_t argument_count; - Dart_TimelineRecorderEvent_Argument* arguments; -} Dart_TimelineRecorderEvent; - -/** - * Callback provided by the embedder to handle the completion of timeline - * events. - * - * \param event A timeline event that has just been completed. The VM keeps - * ownership of the event and any field in it (i.e., the embedder should copy - * any values it needs after the callback returns). - */ -typedef void (*Dart_TimelineRecorderCallback)( - Dart_TimelineRecorderEvent* event); - -/** - * Register a `Dart_TimelineRecorderCallback` to be called as timeline events - * are completed. - * - * The callback will be invoked without a current isolate. - * - * The callback will be invoked on the thread completing the event. Because - * `Dart_TimelineEvent` may be called by any thread, the callback may be called - * on any thread. - * - * The callback may be invoked at any time after `Dart_Initialize` is called and - * before `Dart_Cleanup` returns. - * - * If multiple callbacks are registered, only the last callback registered - * will be remembered. Providing a NULL callback will clear the registration - * (i.e., a NULL callback produced a no-op instead of a crash). - * - * Setting a callback is insuffient to receive events through the callback. The - * VM flag `timeline_recorder` must also be set to `callback`. - */ -DART_EXPORT void Dart_SetTimelineRecorderCallback( - Dart_TimelineRecorderCallback callback); - -/* - * ======= - * Metrics - * ======= - */ - -/** - * Return metrics gathered for the VM and individual isolates. - * - * NOTE: Non-heap metrics are not available in PRODUCT builds of Dart. - * Calling the non-heap metric functions on a PRODUCT build might return invalid metrics. - */ -DART_EXPORT int64_t Dart_VMIsolateCountMetric(); // Counter -DART_EXPORT int64_t Dart_VMCurrentRSSMetric(); // Byte -DART_EXPORT int64_t Dart_VMPeakRSSMetric(); // Byte -DART_EXPORT int64_t -Dart_IsolateGroupHeapOldUsedMetric(Dart_IsolateGroup group); // Byte -DART_EXPORT int64_t -Dart_IsolateGroupHeapOldUsedMaxMetric(Dart_IsolateGroup group); // Byte -DART_EXPORT int64_t -Dart_IsolateGroupHeapOldCapacityMetric(Dart_IsolateGroup group); // Byte -DART_EXPORT int64_t -Dart_IsolateGroupHeapOldCapacityMaxMetric(Dart_IsolateGroup group); // Byte -DART_EXPORT int64_t -Dart_IsolateGroupHeapOldExternalMetric(Dart_IsolateGroup group); // Byte -DART_EXPORT int64_t -Dart_IsolateGroupHeapNewUsedMetric(Dart_IsolateGroup group); // Byte -DART_EXPORT int64_t -Dart_IsolateGroupHeapNewUsedMaxMetric(Dart_IsolateGroup group); // Byte -DART_EXPORT int64_t -Dart_IsolateGroupHeapNewCapacityMetric(Dart_IsolateGroup group); // Byte -DART_EXPORT int64_t -Dart_IsolateGroupHeapNewCapacityMaxMetric(Dart_IsolateGroup group); // Byte -DART_EXPORT int64_t -Dart_IsolateGroupHeapNewExternalMetric(Dart_IsolateGroup group); // Byte -DART_EXPORT int64_t -Dart_IsolateGroupHeapGlobalUsedMetric(Dart_IsolateGroup group); // Byte -DART_EXPORT int64_t -Dart_IsolateGroupHeapGlobalUsedMaxMetric(Dart_IsolateGroup group); // Byte -DART_EXPORT int64_t -Dart_IsolateRunnableLatencyMetric(Dart_Isolate isolate); // Microsecond -DART_EXPORT int64_t -Dart_IsolateRunnableHeapSizeMetric(Dart_Isolate isolate); // Byte - -/* - * ======== - * UserTags - * ======== - */ - -/* - * Gets the current isolate's currently set UserTag instance. - * - * \return The currently set UserTag instance. - */ -DART_EXPORT Dart_Handle Dart_GetCurrentUserTag(); - -/* - * Gets the current isolate's default UserTag instance. - * - * \return The default UserTag with label 'Default' - */ -DART_EXPORT Dart_Handle Dart_GetDefaultUserTag(); - -/* - * Creates a new UserTag instance. - * - * \param label The name of the new UserTag. - * - * \return The newly created UserTag instance or an error handle. - */ -DART_EXPORT Dart_Handle Dart_NewUserTag(const char* label); - -/* - * Updates the current isolate's UserTag to a new value. - * - * \param user_tag The UserTag to be set as the current UserTag. - * - * \return The previously set UserTag instance or an error handle. - */ -DART_EXPORT Dart_Handle Dart_SetCurrentUserTag(Dart_Handle user_tag); - -/* - * Returns the label of a given UserTag instance. - * - * \param user_tag The UserTag from which the label will be retrieved. - * - * \return The UserTag's label. NULL if the user_tag is invalid. The caller is - * responsible for freeing the returned label. - */ -DART_EXPORT DART_WARN_UNUSED_RESULT char* Dart_GetUserTagLabel( - Dart_Handle user_tag); - -#endif // RUNTIME_INCLUDE_DART_TOOLS_API_H_ diff --git a/experimental/pedometer/src/health_connect/include/dart_version.h b/experimental/pedometer/src/health_connect/include/dart_version.h deleted file mode 100644 index b3b492439..000000000 --- a/experimental/pedometer/src/health_connect/include/dart_version.h +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file - * for details. All rights reserved. Use of this source code is governed by a - * BSD-style license that can be found in the LICENSE file. - */ - -#ifndef RUNTIME_INCLUDE_DART_VERSION_H_ -#define RUNTIME_INCLUDE_DART_VERSION_H_ - -// On breaking changes the major version is increased. -// On backwards compatible changes the minor version is increased. -// The versioning covers the symbols exposed in dart_api_dl.h -#define DART_API_DL_MAJOR_VERSION 2 -#define DART_API_DL_MINOR_VERSION 0 - -#endif /* RUNTIME_INCLUDE_DART_VERSION_H_ */ /* NOLINT */ diff --git a/experimental/pedometer/src/health_connect/include/internal/dart_api_dl_impl.h b/experimental/pedometer/src/health_connect/include/internal/dart_api_dl_impl.h deleted file mode 100644 index e4a568931..000000000 --- a/experimental/pedometer/src/health_connect/include/internal/dart_api_dl_impl.h +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file - * for details. All rights reserved. Use of this source code is governed by a - * BSD-style license that can be found in the LICENSE file. - */ - -#ifndef RUNTIME_INCLUDE_INTERNAL_DART_API_DL_IMPL_H_ -#define RUNTIME_INCLUDE_INTERNAL_DART_API_DL_IMPL_H_ - -typedef struct { - const char* name; - void (*function)(void); -} DartApiEntry; - -typedef struct { - const int major; - const int minor; - const DartApiEntry* const functions; -} DartApi; - -#endif /* RUNTIME_INCLUDE_INTERNAL_DART_API_DL_IMPL_H_ */ /* NOLINT */ diff --git a/experimental/varfont_shader_puzzle/.metadata b/experimental/varfont_shader_puzzle/.metadata index 0372c0d84..32f0967d3 100644 --- a/experimental/varfont_shader_puzzle/.metadata +++ b/experimental/varfont_shader_puzzle/.metadata @@ -1,11 +1,11 @@ # This file tracks properties of this Flutter project. # Used by Flutter tool to assess capabilities and perform upgrades etc. # -# This file should be version controlled. +# This file should be version controlled and should not be manually edited. version: - revision: b938dc13df32cd510844863a66856dd240dc3302 - channel: master + revision: "ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a" + channel: "stable" project_type: app @@ -13,26 +13,23 @@ project_type: app migration: platforms: - platform: root - create_revision: b938dc13df32cd510844863a66856dd240dc3302 - base_revision: b938dc13df32cd510844863a66856dd240dc3302 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a - platform: android - create_revision: b938dc13df32cd510844863a66856dd240dc3302 - base_revision: b938dc13df32cd510844863a66856dd240dc3302 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a - platform: ios - create_revision: b938dc13df32cd510844863a66856dd240dc3302 - base_revision: b938dc13df32cd510844863a66856dd240dc3302 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a - platform: linux - create_revision: b938dc13df32cd510844863a66856dd240dc3302 - base_revision: b938dc13df32cd510844863a66856dd240dc3302 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a - platform: macos - create_revision: b938dc13df32cd510844863a66856dd240dc3302 - base_revision: b938dc13df32cd510844863a66856dd240dc3302 - - platform: web - create_revision: b938dc13df32cd510844863a66856dd240dc3302 - base_revision: b938dc13df32cd510844863a66856dd240dc3302 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a - platform: windows - create_revision: b938dc13df32cd510844863a66856dd240dc3302 - base_revision: b938dc13df32cd510844863a66856dd240dc3302 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a # User provided section diff --git a/experimental/varfont_shader_puzzle/analysis_options.yaml b/experimental/varfont_shader_puzzle/analysis_options.yaml index f04c6cf0f..13d6fe105 100644 --- a/experimental/varfont_shader_puzzle/analysis_options.yaml +++ b/experimental/varfont_shader_puzzle/analysis_options.yaml @@ -1 +1 @@ -include: ../../analysis_options.yaml +include: package:analysis_defaults/flutter.yaml diff --git a/experimental/varfont_shader_puzzle/android/app/build.gradle b/experimental/varfont_shader_puzzle/android/app/build.gradle index 54e8cae96..665ab6722 100644 --- a/experimental/varfont_shader_puzzle/android/app/build.gradle +++ b/experimental/varfont_shader_puzzle/android/app/build.gradle @@ -1,3 +1,9 @@ +plugins { + id "com.android.application" + id "kotlin-android" + id "dev.flutter.flutter-gradle-plugin" +} + def localProperties = new Properties() def localPropertiesFile = rootProject.file('local.properties') if (localPropertiesFile.exists()) { @@ -6,11 +12,6 @@ if (localPropertiesFile.exists()) { } } -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - def flutterVersionCode = localProperties.getProperty('flutter.versionCode') if (flutterVersionCode == null) { flutterVersionCode = '1' @@ -21,11 +22,8 @@ if (flutterVersionName == null) { flutterVersionName = '1.0' } -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - android { + namespace "com.example.varfont_shader_puzzle" compileSdkVersion flutter.compileSdkVersion ndkVersion flutter.ndkVersion @@ -44,7 +42,7 @@ android { defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "com.example.type_jam_github" + applicationId "com.example.varfont_shader_puzzle" // You can update the following values to match your application needs. // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. minSdkVersion flutter.minSdkVersion @@ -66,6 +64,4 @@ flutter { source '../..' } -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" -} +dependencies {} diff --git a/experimental/varfont_shader_puzzle/android/app/src/debug/AndroidManifest.xml b/experimental/varfont_shader_puzzle/android/app/src/debug/AndroidManifest.xml index 4873ef591..399f6981d 100644 --- a/experimental/varfont_shader_puzzle/android/app/src/debug/AndroidManifest.xml +++ b/experimental/varfont_shader_puzzle/android/app/src/debug/AndroidManifest.xml @@ -1,5 +1,4 @@ - + diff --git a/form_app/windows/CMakeLists.txt b/form_app/windows/CMakeLists.txt index ef286de59..2279a24a7 100644 --- a/form_app/windows/CMakeLists.txt +++ b/form_app/windows/CMakeLists.txt @@ -8,7 +8,7 @@ set(BINARY_NAME "form_app") # Explicitly opt in to modern CMake behaviors to avoid warnings with recent # versions of CMake. -cmake_policy(SET CMP0063 NEW) +cmake_policy(VERSION 3.14...3.25) # Define build configuration option. get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) @@ -52,6 +52,7 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) # Application build; see runner/CMakeLists.txt. add_subdirectory("runner") + # Generated plugin build rules, which manage building the plugins and adding # them to the application. include(flutter/generated_plugins.cmake) diff --git a/form_app/windows/runner/flutter_window.cpp b/form_app/windows/runner/flutter_window.cpp index b25e363ef..955ee3038 100644 --- a/form_app/windows/runner/flutter_window.cpp +++ b/form_app/windows/runner/flutter_window.cpp @@ -31,6 +31,11 @@ bool FlutterWindow::OnCreate() { this->Show(); }); + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + return true; } diff --git a/form_app/windows/runner/utils.cpp b/form_app/windows/runner/utils.cpp index f5bf9fa0f..b2b08734d 100644 --- a/form_app/windows/runner/utils.cpp +++ b/form_app/windows/runner/utils.cpp @@ -47,16 +47,17 @@ std::string Utf8FromUtf16(const wchar_t* utf16_string) { } int target_length = ::WideCharToMultiByte( CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, nullptr, 0, nullptr, nullptr); + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); std::string utf8_string; - if (target_length == 0 || target_length > utf8_string.max_size()) { + if (target_length <= 0 || target_length > utf8_string.max_size()) { return utf8_string; } utf8_string.resize(target_length); int converted_length = ::WideCharToMultiByte( CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, utf8_string.data(), - target_length, nullptr, nullptr); + input_length, utf8_string.data(), target_length, nullptr, nullptr); if (converted_length == 0) { return std::string(); } diff --git a/form_app/windows/runner/win32_window.cpp b/form_app/windows/runner/win32_window.cpp index 041a38554..60608d0fe 100644 --- a/form_app/windows/runner/win32_window.cpp +++ b/form_app/windows/runner/win32_window.cpp @@ -60,7 +60,7 @@ class WindowClassRegistrar { public: ~WindowClassRegistrar() = default; - // Returns the singleton registar instance. + // Returns the singleton registrar instance. static WindowClassRegistrar* GetInstance() { if (!instance_) { instance_ = new WindowClassRegistrar(); diff --git a/form_app/windows/runner/win32_window.h b/form_app/windows/runner/win32_window.h index c86632d8a..e901dde68 100644 --- a/form_app/windows/runner/win32_window.h +++ b/form_app/windows/runner/win32_window.h @@ -77,7 +77,7 @@ class Win32Window { // OS callback called by message pump. Handles the WM_NCCREATE message which // is passed when the non-client area is being created and enables automatic // non-client DPI scaling so that the non-client area automatically - // responsponds to changes in DPI. All other messages are handled by + // responds to changes in DPI. All other messages are handled by // MessageHandler. static LRESULT CALLBACK WndProc(HWND const window, UINT const message, diff --git a/game_template/.metadata b/game_template/.metadata index 31b763f97..a7cbe7932 100644 --- a/game_template/.metadata +++ b/game_template/.metadata @@ -4,8 +4,8 @@ # This file should be version controlled. version: - revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - channel: stable + revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + channel: beta project_type: app @@ -13,26 +13,26 @@ project_type: app migration: platforms: - platform: root - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f - platform: android - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f - platform: ios - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f - platform: linux - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f - platform: macos - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f - platform: web - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f - platform: windows - create_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 - base_revision: ffccd96b62ee8cec7740dab303538c5fc26ac543 + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f # User provided section diff --git a/game_template/README.md b/game_template/README.md index ad89acec9..d29a17f25 100644 --- a/game_template/README.md +++ b/game_template/README.md @@ -49,7 +49,6 @@ lib │   ├── ads │   ├── app_lifecycle │   ├── audio -│   ├── crashlytics │   ├── game_internals │   ├── games_services │   ├── in_app_purchase @@ -240,12 +239,9 @@ with their mouth. ## Crashlytics -Crashlytics integration is disabled by default. But even if you don't -enable it, you might find code in `lib/src/crashlytics` helpful. -It gathers all log messages and errors, so that you can, at the very least, -print them to the console. +Crashlytics integration is disabled by default. -When enabled, this integration is a lot more powerful: +When enabled, this integration is quite powerful: - Any crashes of your app are sent to the Firebase Crashlytics console. - Any uncaught exception thrown anywhere in your code is captured @@ -256,14 +252,6 @@ When enabled, this integration is a lot more powerful: - Device model, orientation, RAM free, disk free - Operating system version - App version -- In addition, log messages generated anywhere in your app - (and from packages you use) are recorded in memory, - and are sent alongside the reports. This means that you can - learn what happened before the crash or exception - occurred. -- Also, any generated log message with `Level.severe` or above - is also sent to Crashlytics. -- You can customize these behaviors in `lib/src/crashlytics`. To enable Firebase Crashlytics, do the following: @@ -273,7 +261,7 @@ To enable Firebase Crashlytics, do the following: You don't need to enable Analytics in the project if you don't want to. 2. [Install `firebase-tools`](https://firebase.google.com/docs/cli?authuser=0#setup_update_cli) on your machine. -3. [Install `flutterfire` CLI](https://firebase.flutter.dev/docs/cli#installation) +3. [Install `flutterfire` CLI](https://firebase.google.com/docs/flutter/setup) on your machine. 4. In the root of this project (the directory containing `pubspec.yaml`), run the following: @@ -286,8 +274,7 @@ To enable Firebase Crashlytics, do the following: the correct code. 5. Go to `lib/main.dart` and uncomment the lines that relate to Crashlytics. -You should now be able to see crashes, errors, and -severe log messages in +You should now be able to see crashes and errors in [console.firebase.google.com](https://console.firebase.google.com/). To test, add a button to your project, and throw whatever exception you like when the player presses it. @@ -547,6 +534,25 @@ building the iOS or macOS app. A good first thing to try is to delete the `ios/P file (or `macos/Podfile.lock`, respectively), then trying to build again. (You can achieve a more thorough cleanup by running `flutter clean` instead.) +If this doesn't help, here are some more methods: + +- See if everything is still okay with your Flutter and CocoaPods installation + by running `flutter doctor`. Revisit the macOS + [Flutter installation guide](https://docs.flutter.dev/get-started/install/macos) + if needed. +- Update CocoaPods specs directory: + + ```sh + cd ios + pod repo update + cd .. + ``` + + (Substitute `ios` for `macos` when appropriate.) +- Open the project in Xcode, + [increase the build target](https://stackoverflow.com/a/38602597/1416886), + then select _Product_ > _Clean Build Folder_. + ## Warnings in console When running the game for the first time, you might see warnings like the following: diff --git a/game_template/analysis_options.yaml b/game_template/analysis_options.yaml index 379ca2294..12b7a31d2 100644 --- a/game_template/analysis_options.yaml +++ b/game_template/analysis_options.yaml @@ -1,4 +1,4 @@ -include: ../analysis_options.yaml +include: package:flutter_lints/flutter.yaml linter: rules: diff --git a/game_template/android/app/build.gradle b/game_template/android/app/build.gradle index 00b2176d7..055791a00 100644 --- a/game_template/android/app/build.gradle +++ b/game_template/android/app/build.gradle @@ -46,8 +46,9 @@ android { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "com.example.game_template" // You can update the following values to match your application needs. - // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. - minSdkVersion 21 + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. + // google_mobile_ads requires a minimum SDK version of 19 + minSdkVersion 19 targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() versionName flutterVersionName diff --git a/game_template/android/app/src/main/AndroidManifest.xml b/game_template/android/app/src/main/AndroidManifest.xml index 088728e42..d98623e8b 100644 --- a/game_template/android/app/src/main/AndroidManifest.xml +++ b/game_template/android/app/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ - diff --git a/game_template/android/build.gradle b/game_template/android/build.gradle index 83ae22004..e50c3a02b 100644 --- a/game_template/android/build.gradle +++ b/game_template/android/build.gradle @@ -1,12 +1,12 @@ buildscript { - ext.kotlin_version = '1.6.10' + ext.kotlin_version = '1.7.10' repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.1.2' + classpath 'com.android.tools.build:gradle:7.3.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/game_template/android/gradle/wrapper/gradle-wrapper.properties b/game_template/android/gradle/wrapper/gradle-wrapper.properties index cb24abda1..3c472b99c 100644 --- a/game_template/android/gradle/wrapper/gradle-wrapper.properties +++ b/game_template/android/gradle/wrapper/gradle-wrapper.properties @@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip diff --git a/game_template/ios/Podfile b/game_template/ios/Podfile index 88359b225..cc206f67f 100644 --- a/game_template/ios/Podfile +++ b/game_template/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '11.0' +# platform :ios, '12.4' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' @@ -32,6 +32,9 @@ target 'Runner' do use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end end post_install do |installer| diff --git a/game_template/ios/Runner.xcodeproj/project.pbxproj b/game_template/ios/Runner.xcodeproj/project.pbxproj index b9e2dd25c..7d364f8aa 100644 --- a/game_template/ios/Runner.xcodeproj/project.pbxproj +++ b/game_template/ios/Runner.xcodeproj/project.pbxproj @@ -3,19 +3,31 @@ archiveVersion = 1; classes = { }; - objectVersion = 50; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 304B06AAA9BFD155FA189F3E /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 130A35A3D0518D0A298BE365 /* Pods_Runner.framework */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + BF4F065BCD2046779B7CBBEC /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3FB7CE8AFFF044F5B7E24F97 /* Pods_Runner.framework */; }; + FB67E93D138164E43D439F6B /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4DC52A1129D5809D47C76C20 /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXCopyFilesBuildPhase section */ 9705A1C41CF9048500538489 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; @@ -30,23 +42,29 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 130A35A3D0518D0A298BE365 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 13EAF13629F55206D67E24E2 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; - 1EBCE061A120B438A3A35BE4 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 3FB7CE8AFFF044F5B7E24F97 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 4DC52A1129D5809D47C76C20 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 69663EB58BEBCC6469C182AC /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 966CF85E70A13AE6C70408B6 /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 9749F32098F1FC7199474357 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - C0132AD63A822689B901DDC9 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + ACBB5942A9C066CB5E3993AA /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + C765E2D8C963A30F186CE762 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + D0F6485034133B62BF10EC1D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -54,32 +72,52 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 304B06AAA9BFD155FA189F3E /* Pods_Runner.framework in Frameworks */, + BF4F065BCD2046779B7CBBEC /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9A6D7C2E0BAF8FE2C52A7C7F /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + FB67E93D138164E43D439F6B /* Pods_RunnerTests.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 519FF61839E91C7C2F6F29AE /* Frameworks */ = { + 331C8082294A63A400263BE5 /* RunnerTests */ = { isa = PBXGroup; children = ( - 130A35A3D0518D0A298BE365 /* Pods_Runner.framework */, + 331C807B294A618700263BE5 /* RunnerTests.swift */, ); - name = Frameworks; + path = RunnerTests; sourceTree = ""; }; - 79E4DCA749900A183B328E04 /* Pods */ = { + 68D78838620A53043724F4CE /* Pods */ = { isa = PBXGroup; children = ( - C0132AD63A822689B901DDC9 /* Pods-Runner.debug.xcconfig */, - 13EAF13629F55206D67E24E2 /* Pods-Runner.release.xcconfig */, - 1EBCE061A120B438A3A35BE4 /* Pods-Runner.profile.xcconfig */, + 69663EB58BEBCC6469C182AC /* Pods-Runner.debug.xcconfig */, + C765E2D8C963A30F186CE762 /* Pods-Runner.release.xcconfig */, + D0F6485034133B62BF10EC1D /* Pods-Runner.profile.xcconfig */, + 966CF85E70A13AE6C70408B6 /* Pods-RunnerTests.debug.xcconfig */, + ACBB5942A9C066CB5E3993AA /* Pods-RunnerTests.release.xcconfig */, + 9749F32098F1FC7199474357 /* Pods-RunnerTests.profile.xcconfig */, ); name = Pods; path = Pods; sourceTree = ""; }; + 6CCD449A6D84D860B684B1EF /* Frameworks */ = { + isa = PBXGroup; + children = ( + 3FB7CE8AFFF044F5B7E24F97 /* Pods_Runner.framework */, + 4DC52A1129D5809D47C76C20 /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -97,8 +135,9 @@ 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, - 79E4DCA749900A183B328E04 /* Pods */, - 519FF61839E91C7C2F6F29AE /* Frameworks */, + 331C8082294A63A400263BE5 /* RunnerTests */, + 68D78838620A53043724F4CE /* Pods */, + 6CCD449A6D84D860B684B1EF /* Frameworks */, ); sourceTree = ""; }; @@ -106,6 +145,7 @@ isa = PBXGroup; children = ( 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, ); name = Products; sourceTree = ""; @@ -128,18 +168,38 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 2F245E534C0E2169083C3C6E /* [CP] Check Pods Manifest.lock */, + 331C807D294A63A400263BE5 /* Sources */, + 331C807F294A63A400263BE5 /* Resources */, + 9A6D7C2E0BAF8FE2C52A7C7F /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; 97C146ED1CF9000F007C117D /* Runner */ = { isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9961C4751A163B29B9C92B39 /* [CP] Check Pods Manifest.lock */, + 59BD4BBCB3D397EFDC958228 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - EE81CDDE5C5FFB214DDA0B2F /* [CP] Embed Pods Frameworks */, + F4D8BB436A4EDE10AA4A8D19 /* [CP] Embed Pods Frameworks */, + 1089A8BA078C8E5CC025A079 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -159,6 +219,10 @@ LastUpgradeCheck = 1300; ORGANIZATIONNAME = ""; TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; 97C146ED1CF9000F007C117D = { CreatedOnToolsVersion = 7.3.1; LastSwiftMigration = 1100; @@ -179,11 +243,19 @@ projectRoot = ""; targets = ( 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EC1CF9000F007C117D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -198,35 +270,62 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + 1089A8BA078C8E5CC025A079 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + 2F245E534C0E2169083C3C6E /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); + inputFileListPaths = ( + ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( ); - name = "Thin Binary"; outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 9740EEB61CF901F6004384FC /* Run Script */ = { + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); - name = "Run Script"; + name = "Thin Binary"; outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; }; - 9961C4751A163B29B9C92B39 /* [CP] Check Pods Manifest.lock */ = { + 59BD4BBCB3D397EFDC958228 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -248,7 +347,22 @@ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; - EE81CDDE5C5FFB214DDA0B2F /* [CP] Embed Pods Frameworks */ = { + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; + F4D8BB436A4EDE10AA4A8D19 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -268,6 +382,14 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EA1CF9000F007C117D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -279,6 +401,14 @@ }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin PBXVariantGroup section */ 97C146FA1CF9000F007C117D /* Main.storyboard */ = { isa = PBXVariantGroup; @@ -356,10 +486,9 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = 3QUFHCJT7P; + DEVELOPMENT_TEAM = TC87DMJLQP; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -372,6 +501,56 @@ }; name = Profile; }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 966CF85E70A13AE6C70408B6 /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.gameTemplate.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = ACBB5942A9C066CB5E3993AA /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.gameTemplate.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9749F32098F1FC7199474357 /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.gameTemplate.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; 97C147031CF9000F007C117D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -486,10 +665,9 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = 3QUFHCJT7P; + DEVELOPMENT_TEAM = TC87DMJLQP; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -510,10 +688,9 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = 3QUFHCJT7P; + DEVELOPMENT_TEAM = TC87DMJLQP; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; - IPHONEOS_DEPLOYMENT_TARGET = 11.0; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -529,6 +706,16 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/game_template/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/game_template/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index c87d15a33..e42adcb34 100644 --- a/game_template/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/game_template/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -37,6 +37,17 @@ + + + + main() async { - // To enable Firebase Crashlytics, uncomment the following lines and - // the import statements at the top of this file. + // Subscribe to log messages. + Logger.root.onRecord.listen((record) { + dev.log( + record.message, + time: record.time, + level: record.level.value, + name: record.loggerName, + zone: record.zone, + error: record.error, + stackTrace: record.stackTrace, + ); + }); + + WidgetsFlutterBinding.ensureInitialized(); + + // TODO: To enable Firebase Crashlytics, uncomment the following line. // See the 'Crashlytics' section of the main README.md file for details. - FirebaseCrashlytics? crashlytics; // if (!kIsWeb && (Platform.isIOS || Platform.isAndroid)) { // try { - // WidgetsFlutterBinding.ensureInitialized(); // await Firebase.initializeApp( // options: DefaultFirebaseOptions.currentPlatform, // ); - // crashlytics = FirebaseCrashlytics.instance; + // + // FlutterError.onError = (errorDetails) { + // FirebaseCrashlytics.instance.recordFlutterFatalError(errorDetails); + // }; + // + // // Pass all uncaught asynchronous errors + // // that aren't handled by the Flutter framework to Crashlytics. + // PlatformDispatcher.instance.onError = (error, stack) { + // FirebaseCrashlytics.instance.recordError(error, stack, fatal: true); + // return true; + // }; // } catch (e) { // debugPrint("Firebase couldn't be initialized: $e"); // } // } - await guardWithCrashlytics( - guardedMain, - crashlytics: crashlytics, - ); -} - -/// Without logging and crash reporting, this would be `void main()`. -void guardedMain() { - if (kReleaseMode) { - // Don't log anything below warnings in production. - Logger.root.level = Level.WARNING; - } - Logger.root.onRecord.listen((record) { - debugPrint('${record.level.name}: ${record.time}: ' - '${record.loggerName}: ' - '${record.message}'); - }); - - WidgetsFlutterBinding.ensureInitialized(); - _log.info('Going full screen'); SystemChrome.setEnabledSystemUIMode( SystemUiMode.edgeToEdge, @@ -134,18 +137,22 @@ class MyApp extends StatelessWidget { GoRoute( path: 'play', pageBuilder: (context, state) => buildMyTransition( + key: ValueKey('play'), child: const LevelSelectionScreen( - key: Key('level selection')), + key: Key('level selection'), + ), color: context.watch().backgroundLevelSelection, ), routes: [ GoRoute( path: 'session/:level', pageBuilder: (context, state) { - final levelNumber = int.parse(state.params['level']!); + final levelNumber = + int.parse(state.pathParameters['level']!); final level = gameLevels .singleWhere((e) => e.number == levelNumber); return buildMyTransition( + key: ValueKey('level'), child: PlaySessionScreen( level, key: const Key('play session'), @@ -156,11 +163,22 @@ class MyApp extends StatelessWidget { ), GoRoute( path: 'won', + redirect: (context, state) { + if (state.extra == null) { + // Trying to navigate to a win screen without any data. + // Possibly by using the browser's back button. + return '/'; + } + + // Otherwise, do not redirect. + return null; + }, pageBuilder: (context, state) { final map = state.extra! as Map; final score = map['score'] as Score; return buildMyTransition( + key: ValueKey('won'), child: WinGameScreen( score: score, key: const Key('win game'), diff --git a/game_template/lib/src/audio/audio_controller.dart b/game_template/lib/src/audio/audio_controller.dart index df8e52d17..6a02c0dbe 100644 --- a/game_template/lib/src/audio/audio_controller.dart +++ b/game_template/lib/src/audio/audio_controller.dart @@ -155,13 +155,12 @@ class AudioController { switch (_lifecycleNotifier!.value) { case AppLifecycleState.paused: case AppLifecycleState.detached: + case AppLifecycleState.hidden: _stopAllSound(); - break; case AppLifecycleState.resumed: if (!_settings!.muted.value && _settings!.musicOn.value) { _resumeMusic(); } - break; case AppLifecycleState.inactive: // No need to react to this state change. break; @@ -209,23 +208,21 @@ class AudioController { _log.severe(e); await _playFirstSongInPlaylist(); } - break; case PlayerState.stopped: _log.info("resumeMusic() called when music is stopped. " "This probably means we haven't yet started the music. " "For example, the game was started with sound off."); await _playFirstSongInPlaylist(); - break; case PlayerState.playing: _log.warning('resumeMusic() called when music is playing. ' 'Nothing to do.'); - break; case PlayerState.completed: _log.warning('resumeMusic() called when music is completed. ' "Music should never be 'completed' as it's either not playing " "or looping forever."); await _playFirstSongInPlaylist(); - break; + default: + _log.warning('Unhandled PlayerState: ${_musicPlayer.state}'); } } diff --git a/game_template/lib/src/crashlytics/crashlytics.dart b/game_template/lib/src/crashlytics/crashlytics.dart deleted file mode 100644 index fd2d5d7d5..000000000 --- a/game_template/lib/src/crashlytics/crashlytics.dart +++ /dev/null @@ -1,103 +0,0 @@ -// Copyright 2022, the Flutter project authors. Please see the AUTHORS file -// for details. All rights reserved. Use of this source code is governed by a -// BSD-style license that can be found in the LICENSE file. - -import 'dart:async'; -import 'dart:isolate'; - -import 'package:firebase_crashlytics/firebase_crashlytics.dart'; -import 'package:flutter/foundation.dart'; -import 'package:flutter/widgets.dart'; -import 'package:logging/logging.dart'; - -/// Runs [mainFunction] in a guarded [Zone]. -/// -/// If a non-null [FirebaseCrashlytics] instance is provided through -/// [crashlytics], then all errors will be reported through it. -/// -/// These errors will also include latest logs from anywhere in the app -/// that use `package:logging`. -Future guardWithCrashlytics( - void Function() mainFunction, { - required FirebaseCrashlytics? crashlytics, -}) async { - // Running the initialization code and [mainFunction] inside a guarded - // zone, so that all errors (even those occurring in callbacks) are - // caught and can be sent to Crashlytics. - await runZonedGuarded>(() async { - if (kDebugMode) { - // Log more when in debug mode. - Logger.root.level = Level.FINE; - } - // Subscribe to log messages. - Logger.root.onRecord.listen((record) { - final message = '${record.level.name}: ${record.time}: ' - '${record.loggerName}: ' - '${record.message}'; - - debugPrint(message); - // Add the message to the rotating Crashlytics log. - crashlytics?.log(message); - - if (record.level >= Level.SEVERE) { - crashlytics?.recordError(message, filterStackTrace(StackTrace.current), - fatal: true); - } - }); - - // Pass all uncaught errors from the framework to Crashlytics. - if (crashlytics != null) { - WidgetsFlutterBinding.ensureInitialized(); - FlutterError.onError = crashlytics.recordFlutterFatalError; - } - - if (!kIsWeb) { - // To catch errors outside of the Flutter context, we attach an error - // listener to the current isolate. - Isolate.current.addErrorListener(RawReceivePort((dynamic pair) async { - final errorAndStacktrace = pair as List; - await crashlytics?.recordError( - errorAndStacktrace.first, errorAndStacktrace.last as StackTrace?, - fatal: true); - }).sendPort); - } - - // Run the actual code. - mainFunction(); - }, (error, stack) { - // This sees all errors that occur in the runZonedGuarded zone. - debugPrint('ERROR: $error\n\n' - 'STACK:$stack'); - crashlytics?.recordError(error, stack, fatal: true); - }); -} - -/// Takes a [stackTrace] and creates a new one, but without the lines that -/// have to do with this file and logging. This way, Crashlytics won't group -/// all messages that come from this file into one big heap just because -/// the head of the StackTrace is identical. -/// -/// See this: -/// https://stackoverflow.com/questions/47654410/how-to-effectively-group-non-fatal-exceptions-in-crashlytics-fabrics. -@visibleForTesting -StackTrace filterStackTrace(StackTrace stackTrace) { - try { - final lines = stackTrace.toString().split('\n'); - final buf = StringBuffer(); - for (final line in lines) { - if (line.contains('crashlytics.dart') || - line.contains('_BroadcastStreamController.java') || - line.contains('logger.dart')) { - continue; - } - buf.writeln(line); - } - return StackTrace.fromString(buf.toString()); - } catch (e) { - debugPrint('Problem while filtering stack trace: $e'); - } - - // If there was an error while filtering, - // return the original, unfiltered stack track. - return stackTrace; -} diff --git a/game_template/lib/src/in_app_purchase/in_app_purchase.dart b/game_template/lib/src/in_app_purchase/in_app_purchase.dart index b2c86fcb4..4e3b3cfae 100644 --- a/game_template/lib/src/in_app_purchase/in_app_purchase.dart +++ b/game_template/lib/src/in_app_purchase/in_app_purchase.dart @@ -139,7 +139,6 @@ class InAppPurchaseController extends ChangeNotifier { case PurchaseStatus.pending: _adRemoval = const AdRemovalPurchase.pending(); notifyListeners(); - break; case PurchaseStatus.purchased: case PurchaseStatus.restored: bool valid = await _verifyPurchase(purchaseDetails); @@ -155,16 +154,13 @@ class InAppPurchaseController extends ChangeNotifier { StateError('Purchase could not be verified')); notifyListeners(); } - break; case PurchaseStatus.error: _log.severe('Error with purchase: ${purchaseDetails.error}'); _adRemoval = AdRemovalPurchase.error(purchaseDetails.error!); notifyListeners(); - break; case PurchaseStatus.canceled: _adRemoval = const AdRemovalPurchase.notStarted(); notifyListeners(); - break; } if (purchaseDetails.pendingCompletePurchase) { diff --git a/game_template/lib/src/style/my_transition.dart b/game_template/lib/src/style/my_transition.dart index af452ebc5..69dace6fc 100644 --- a/game_template/lib/src/style/my_transition.dart +++ b/game_template/lib/src/style/my_transition.dart @@ -110,14 +110,12 @@ class _MyRevealState extends State<_MyReveal> { setState(() { _finished = true; }); - break; case AnimationStatus.forward: case AnimationStatus.dismissed: case AnimationStatus.reverse: setState(() { _finished = false; }); - break; } } } diff --git a/game_template/linux/.gitignore b/game_template/linux/.gitignore new file mode 100644 index 000000000..d3896c984 --- /dev/null +++ b/game_template/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/game_template/linux/CMakeLists.txt b/game_template/linux/CMakeLists.txt new file mode 100644 index 000000000..3e86652cb --- /dev/null +++ b/game_template/linux/CMakeLists.txt @@ -0,0 +1,139 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.10) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "game_template") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.example.game_template") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/game_template/linux/flutter/CMakeLists.txt b/game_template/linux/flutter/CMakeLists.txt new file mode 100644 index 000000000..d5bd01648 --- /dev/null +++ b/game_template/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/game_template/linux/flutter/generated_plugin_registrant.cc b/game_template/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 000000000..1830e5c73 --- /dev/null +++ b/game_template/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + +#include + +void fl_register_plugins(FlPluginRegistry* registry) { + g_autoptr(FlPluginRegistrar) audioplayers_linux_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "AudioplayersLinuxPlugin"); + audioplayers_linux_plugin_register_with_registrar(audioplayers_linux_registrar); +} diff --git a/game_template/linux/flutter/generated_plugin_registrant.h b/game_template/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 000000000..e0f0a47bc --- /dev/null +++ b/game_template/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/game_template/linux/flutter/generated_plugins.cmake b/game_template/linux/flutter/generated_plugins.cmake new file mode 100644 index 000000000..e9abb9128 --- /dev/null +++ b/game_template/linux/flutter/generated_plugins.cmake @@ -0,0 +1,24 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST + audioplayers_linux +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/game_template/linux/main.cc b/game_template/linux/main.cc new file mode 100644 index 000000000..e7c5c5437 --- /dev/null +++ b/game_template/linux/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/game_template/linux/my_application.cc b/game_template/linux/my_application.cc new file mode 100644 index 000000000..06f327f99 --- /dev/null +++ b/game_template/linux/my_application.cc @@ -0,0 +1,104 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "game_template"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "game_template"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/game_template/linux/my_application.h b/game_template/linux/my_application.h new file mode 100644 index 000000000..72271d5e4 --- /dev/null +++ b/game_template/linux/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/game_template/macos/Podfile b/game_template/macos/Podfile index f9ebb8dcb..cb890b698 100644 --- a/game_template/macos/Podfile +++ b/game_template/macos/Podfile @@ -1,4 +1,5 @@ -platform :osx, '11.0' +# Uncomment this line to define a global platform for your project +# platform :ios, '12.4' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' @@ -31,6 +32,9 @@ target 'Runner' do use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end end post_install do |installer| diff --git a/game_template/macos/Runner.xcodeproj/project.pbxproj b/game_template/macos/Runner.xcodeproj/project.pbxproj index a104d486a..2d218cbbd 100644 --- a/game_template/macos/Runner.xcodeproj/project.pbxproj +++ b/game_template/macos/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 51; + objectVersion = 54; objects = { /* Begin PBXAggregateTarget section */ @@ -21,15 +21,24 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ - 0010BAD058CFD3CB27143AEB /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0C1596E6A958361500042259 /* Pods_Runner.framework */; }; + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; + 642DDA158EEA9BDE0164F390 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = E917E33988888553BDC5DA56 /* Pods_Runner.framework */; }; + 8D33482AFB34D102C4A99B61 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 71CF8D198F1DF3685CC0E61C /* Pods_RunnerTests.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 33CC10E52044A3C60003C045 /* Project object */; @@ -53,7 +62,9 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 0C1596E6A958361500042259 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 3024BC98CA4FACA7613D448B /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* game_template.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = game_template.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -68,25 +79,45 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 4907D01C8C00C17E7F9A6418 /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - 5DD7387AE3A82F1244BF956B /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 3DD2934351881E21B60902E0 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + 71CF8D198F1DF3685CC0E61C /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; - 917C6A8B3E0150E64515B941 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; + 992637321C74271812EBA202 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + C26463A473965D4B03E08A6A /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + C3DB09C139B3E7336490C90A /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + E917E33988888553BDC5DA56 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + FDCF235B60DCD70385512CDD /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + 8D33482AFB34D102C4A99B61 /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 33CC10EA2044A3C60003C045 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 0010BAD058CFD3CB27143AEB /* Pods_Runner.framework in Frameworks */, + 642DDA158EEA9BDE0164F390 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; 33BA886A226E78AF003329D5 /* Configs */ = { isa = PBXGroup; children = ( @@ -103,9 +134,10 @@ children = ( 33FAB671232836740065AC1E /* Runner */, 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - 5044742982F67541FECB2D36 /* Pods */, + ABF37421CC5F71E24246C112 /* Pods */, ); sourceTree = ""; }; @@ -113,6 +145,7 @@ isa = PBXGroup; children = ( 33CC10ED2044A3C60003C045 /* game_template.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, ); name = Products; sourceTree = ""; @@ -152,21 +185,24 @@ path = Runner; sourceTree = ""; }; - 5044742982F67541FECB2D36 /* Pods */ = { + ABF37421CC5F71E24246C112 /* Pods */ = { isa = PBXGroup; children = ( - 5DD7387AE3A82F1244BF956B /* Pods-Runner.debug.xcconfig */, - 4907D01C8C00C17E7F9A6418 /* Pods-Runner.release.xcconfig */, - 917C6A8B3E0150E64515B941 /* Pods-Runner.profile.xcconfig */, + C3DB09C139B3E7336490C90A /* Pods-Runner.debug.xcconfig */, + 3024BC98CA4FACA7613D448B /* Pods-Runner.release.xcconfig */, + 992637321C74271812EBA202 /* Pods-Runner.profile.xcconfig */, + FDCF235B60DCD70385512CDD /* Pods-RunnerTests.debug.xcconfig */, + 3DD2934351881E21B60902E0 /* Pods-RunnerTests.release.xcconfig */, + C26463A473965D4B03E08A6A /* Pods-RunnerTests.profile.xcconfig */, ); - name = Pods; path = Pods; sourceTree = ""; }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 0C1596E6A958361500042259 /* Pods_Runner.framework */, + E917E33988888553BDC5DA56 /* Pods_Runner.framework */, + 71CF8D198F1DF3685CC0E61C /* Pods_RunnerTests.framework */, ); name = Frameworks; sourceTree = ""; @@ -174,17 +210,36 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 64E1667150D1D31FFB4EAAF7 /* [CP] Check Pods Manifest.lock */, + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; 33CC10EC2044A3C60003C045 /* Runner */ = { isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9AEE1488823740A42DFA89BC /* [CP] Check Pods Manifest.lock */, + D689CBDADA114E71B47ECFFE /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - 1A255BBEA46820F967223DAA /* [CP] Embed Pods Frameworks */, + 81A431AECA4DC7CD22A0E9BD /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -206,6 +261,10 @@ LastUpgradeCheck = 1300; ORGANIZATIONNAME = ""; TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; 33CC10EC2044A3C60003C045 = { CreatedOnToolsVersion = 9.2; LastSwiftMigration = 1100; @@ -236,12 +295,20 @@ projectRoot = ""; targets = ( 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, 33CC111A2044C6BA0003C045 /* Flutter Assemble */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 33CC10EB2044A3C60003C045 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -254,61 +321,84 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 1A255BBEA46820F967223DAA /* [CP] Embed Pods Frameworks */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", ); - name = "[CP] Embed Pods Frameworks"; + inputPaths = ( + ); outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( + Flutter/ephemeral/tripwire, ); outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 64E1667150D1D31FFB4EAAF7 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 9AEE1488823740A42DFA89BC /* [CP] Check Pods Manifest.lock */ = { + 81A431AECA4DC7CD22A0E9BD /* [CP] Embed Pods Frameworks */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Embed Pods Frameworks"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; + showEnvVarsInLog = 0; + }; + D689CBDADA114E71B47ECFFE /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -333,6 +423,14 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 33CC10E92044A3C60003C045 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -346,6 +444,11 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; @@ -366,6 +469,51 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = FDCF235B60DCD70385512CDD /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.gameTemplate.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/game_template.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/game_template"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 3DD2934351881E21B60902E0 /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.gameTemplate.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/game_template.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/game_template"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = C26463A473965D4B03E08A6A /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.gameTemplate.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/game_template.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/game_template"; + }; + name = Profile; + }; 338D0CE9231458BD00FA5F75 /* Profile */ = { isa = XCBuildConfiguration; baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; @@ -404,7 +552,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; @@ -426,7 +574,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12.4; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; }; @@ -484,7 +632,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; @@ -531,7 +679,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; @@ -553,7 +701,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12.4; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; @@ -574,7 +722,7 @@ "$(inherited)", "@executable_path/../Frameworks", ); - MACOSX_DEPLOYMENT_TARGET = 11.0; + MACOSX_DEPLOYMENT_TARGET = 12.4; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; }; @@ -599,6 +747,16 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/game_template/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/game_template/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 5acc3402d..189592fa5 100644 --- a/game_template/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/game_template/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -37,6 +37,17 @@ + + + + =2.18.0 <3.0.0" + sdk: ^3.1.0 dependencies: flutter: sdk: flutter - audioplayers: ^3.0.0 + audioplayers: ^5.1.0 cupertino_icons: ^1.0.2 - go_router: ^6.0.1 + go_router: ^12.0.0 logging: ^1.1.0 provider: ^6.0.2 shared_preferences: ^2.0.13 @@ -24,17 +24,16 @@ dependencies: # delete the relevant line below, and get rid of any Dart code # that references the dependency. firebase_core: ^2.1.1 # Needed for Crashlytics below - firebase_crashlytics: ^3.0.3 # Error reporting + firebase_crashlytics: ^3.3.5 # Error reporting games_services: ^3.0.0 # Achievements and leaderboards - google_mobile_ads: ^2.0.1 # Ads + google_mobile_ads: ^3.0.0 # Ads in_app_purchase: ^3.0.1 # In-app purchases dev_dependencies: + flutter_lints: ^3.0.0 flutter_test: sdk: flutter - - flutter_launcher_icons: ^0.11.0 - flutter_lints: ^2.0.1 + flutter_launcher_icons: ^0.13.0 test: ^1.19.0 flutter: diff --git a/game_template/test/crashlytics_test.dart b/game_template/test/crashlytics_test.dart deleted file mode 100644 index 9a08dcd44..000000000 --- a/game_template/test/crashlytics_test.dart +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright 2022, the Flutter project authors. Please see the AUTHORS file -// for details. All rights reserved. Use of this source code is governed by a -// BSD-style license that can be found in the LICENSE file. - -import 'package:game_template/src/crashlytics/crashlytics.dart'; -import 'package:test/test.dart'; - -void main() { - group('filterStackTrace', () { - test('keeps current stacktrace intact', () { - final original = StackTrace.current; - final filtered = filterStackTrace(original).toString().trim(); - - expect(filtered, equals(original.toString().trim())); - }); - - test('parses an empty stacktrace', () { - const original = StackTrace.empty; - final filtered = filterStackTrace(original).toString().trim(); - - expect(filtered, equals(original.toString().trim())); - }); - - test('removes the head of an example stacktrace', () { - final original = StackTrace.fromString( - ''' at guardWithCrashlytics..(crashlytics.dart:32) - at _BroadcastStreamController.add(_BroadcastStreamController.java) - at Logger._publish(logger.dart:276) - at Logger.log(logger.dart:200) - at Logger.severe(logger.dart:258) - at GamesServicesController.initialize(games_services.dart:23)'''); - final filtered = filterStackTrace(original).toString().trim(); - - expect(filtered, isNot(original.toString().trim())); - expect(filtered, isNot(contains('at guardWithCrashlytics'))); - expect(filtered, contains('at GamesServicesController')); - }); - }); -} diff --git a/game_template/web/index.html b/game_template/web/index.html index 3a441e1e9..985bcde1f 100644 --- a/game_template/web/index.html +++ b/game_template/web/index.html @@ -31,74 +31,29 @@ game_template + + + + - diff --git a/game_template/windows/CMakeLists.txt b/game_template/windows/CMakeLists.txt index 5a3641da1..79f7522c3 100644 --- a/game_template/windows/CMakeLists.txt +++ b/game_template/windows/CMakeLists.txt @@ -1,13 +1,16 @@ +# Project-level configuration. cmake_minimum_required(VERSION 3.14) project(game_template LANGUAGES CXX) +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. set(BINARY_NAME "game_template") +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. cmake_policy(SET CMP0063 NEW) -set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") - -# Configure build options. +# Define build configuration option. get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) if(IS_MULTICONFIG) set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" @@ -20,7 +23,7 @@ else() "Debug" "Profile" "Release") endif() endif() - +# Define settings for the Profile build mode. set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") @@ -30,6 +33,10 @@ set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") add_definitions(-DUNICODE -D_UNICODE) # Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. function(APPLY_STANDARD_SETTINGS TARGET) target_compile_features(${TARGET} PUBLIC cxx_std_17) target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") @@ -38,14 +45,14 @@ function(APPLY_STANDARD_SETTINGS TARGET) target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") endfunction() -set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") - # Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") add_subdirectory(${FLUTTER_MANAGED_DIR}) -# Application build +# Application build; see runner/CMakeLists.txt. add_subdirectory("runner") + # Generated plugin build rules, which manage building the plugins and adding # them to the application. include(flutter/generated_plugins.cmake) diff --git a/game_template/windows/flutter/CMakeLists.txt b/game_template/windows/flutter/CMakeLists.txt index b2e4bd8d6..930d2071a 100644 --- a/game_template/windows/flutter/CMakeLists.txt +++ b/game_template/windows/flutter/CMakeLists.txt @@ -1,3 +1,4 @@ +# This file controls Flutter-level build steps. It should not be edited. cmake_minimum_required(VERSION 3.14) set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") diff --git a/game_template/windows/flutter/generated_plugin_registrant.cc b/game_template/windows/flutter/generated_plugin_registrant.cc index 09e8e2c34..67f479f28 100644 --- a/game_template/windows/flutter/generated_plugin_registrant.cc +++ b/game_template/windows/flutter/generated_plugin_registrant.cc @@ -7,8 +7,11 @@ #include "generated_plugin_registrant.h" #include +#include void RegisterPlugins(flutter::PluginRegistry* registry) { AudioplayersWindowsPluginRegisterWithRegistrar( registry->GetRegistrarForPlugin("AudioplayersWindowsPlugin")); + FirebaseCorePluginCApiRegisterWithRegistrar( + registry->GetRegistrarForPlugin("FirebaseCorePluginCApi")); } diff --git a/game_template/windows/flutter/generated_plugins.cmake b/game_template/windows/flutter/generated_plugins.cmake index 375535c98..c81f747aa 100644 --- a/game_template/windows/flutter/generated_plugins.cmake +++ b/game_template/windows/flutter/generated_plugins.cmake @@ -4,6 +4,7 @@ list(APPEND FLUTTER_PLUGIN_LIST audioplayers_windows + firebase_core ) list(APPEND FLUTTER_FFI_PLUGIN_LIST diff --git a/game_template/windows/runner/CMakeLists.txt b/game_template/windows/runner/CMakeLists.txt index de2d8916b..394917c05 100644 --- a/game_template/windows/runner/CMakeLists.txt +++ b/game_template/windows/runner/CMakeLists.txt @@ -1,6 +1,11 @@ cmake_minimum_required(VERSION 3.14) project(runner LANGUAGES CXX) +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. add_executable(${BINARY_NAME} WIN32 "flutter_window.cpp" "main.cpp" @@ -10,8 +15,26 @@ add_executable(${BINARY_NAME} WIN32 "Runner.rc" "runner.exe.manifest" ) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/game_template/windows/runner/Runner.rc b/game_template/windows/runner/Runner.rc index 56bcef7a5..ca278a4ac 100644 --- a/game_template/windows/runner/Runner.rc +++ b/game_template/windows/runner/Runner.rc @@ -60,14 +60,14 @@ IDI_APP_ICON ICON "resources\\app_icon.ico" // Version // -#ifdef FLUTTER_BUILD_NUMBER -#define VERSION_AS_NUMBER FLUTTER_BUILD_NUMBER +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD #else -#define VERSION_AS_NUMBER 1,0,0 +#define VERSION_AS_NUMBER 1,0,0,0 #endif -#ifdef FLUTTER_BUILD_NAME -#define VERSION_AS_STRING #FLUTTER_BUILD_NAME +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION #else #define VERSION_AS_STRING "1.0.0" #endif @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "game_template" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "game_template" "\0" - VALUE "LegalCopyright", "Copyright (C) 2022 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2023 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "game_template.exe" "\0" VALUE "ProductName", "game_template" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/game_template/windows/runner/flutter_window.cpp b/game_template/windows/runner/flutter_window.cpp index b43b9095e..b25e363ef 100644 --- a/game_template/windows/runner/flutter_window.cpp +++ b/game_template/windows/runner/flutter_window.cpp @@ -26,6 +26,11 @@ bool FlutterWindow::OnCreate() { } RegisterPlugins(flutter_controller_->engine()); SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + return true; } diff --git a/game_template/windows/runner/main.cpp b/game_template/windows/runner/main.cpp index 409924e9a..ff75cab78 100644 --- a/game_template/windows/runner/main.cpp +++ b/game_template/windows/runner/main.cpp @@ -27,7 +27,7 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, FlutterWindow window(project); Win32Window::Point origin(10, 10); Win32Window::Size size(1280, 720); - if (!window.CreateAndShow(L"game_template", origin, size)) { + if (!window.Create(L"game_template", origin, size)) { return EXIT_FAILURE; } window.SetQuitOnClose(true); diff --git a/game_template/windows/runner/runner.exe.manifest b/game_template/windows/runner/runner.exe.manifest index c977c4a42..a42ea7687 100644 --- a/game_template/windows/runner/runner.exe.manifest +++ b/game_template/windows/runner/runner.exe.manifest @@ -7,7 +7,7 @@ - + diff --git a/game_template/windows/runner/utils.cpp b/game_template/windows/runner/utils.cpp index d19bdbbcc..b2b08734d 100644 --- a/game_template/windows/runner/utils.cpp +++ b/game_template/windows/runner/utils.cpp @@ -47,16 +47,17 @@ std::string Utf8FromUtf16(const wchar_t* utf16_string) { } int target_length = ::WideCharToMultiByte( CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, nullptr, 0, nullptr, nullptr); - if (target_length == 0) { - return std::string(); - } + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); std::string utf8_string; + if (target_length <= 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } utf8_string.resize(target_length); int converted_length = ::WideCharToMultiByte( CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, utf8_string.data(), - target_length, nullptr, nullptr); + input_length, utf8_string.data(), target_length, nullptr, nullptr); if (converted_length == 0) { return std::string(); } diff --git a/game_template/windows/runner/win32_window.cpp b/game_template/windows/runner/win32_window.cpp index c10f08dc7..60608d0fe 100644 --- a/game_template/windows/runner/win32_window.cpp +++ b/game_template/windows/runner/win32_window.cpp @@ -1,13 +1,31 @@ #include "win32_window.h" +#include #include #include "resource.h" namespace { +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + // The number of Win32Window objects that currently exist. static int g_active_window_count = 0; @@ -31,8 +49,8 @@ void EnableFullDpiSupportIfAvailable(HWND hwnd) { GetProcAddress(user32_module, "EnableNonClientDpiScaling")); if (enable_non_client_dpi_scaling != nullptr) { enable_non_client_dpi_scaling(hwnd); - FreeLibrary(user32_module); } + FreeLibrary(user32_module); } } // namespace @@ -42,7 +60,7 @@ class WindowClassRegistrar { public: ~WindowClassRegistrar() = default; - // Returns the singleton registar instance. + // Returns the singleton registrar instance. static WindowClassRegistrar* GetInstance() { if (!instance_) { instance_ = new WindowClassRegistrar(); @@ -102,9 +120,9 @@ Win32Window::~Win32Window() { Destroy(); } -bool Win32Window::CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size) { +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { Destroy(); const wchar_t* window_class = @@ -117,7 +135,7 @@ bool Win32Window::CreateAndShow(const std::wstring& title, double scale_factor = dpi / 96.0; HWND window = CreateWindow( - window_class, title.c_str(), WS_OVERLAPPEDWINDOW | WS_VISIBLE, + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), Scale(size.width, scale_factor), Scale(size.height, scale_factor), nullptr, nullptr, GetModuleHandle(nullptr), this); @@ -126,9 +144,15 @@ bool Win32Window::CreateAndShow(const std::wstring& title, return false; } + UpdateTheme(window); + return OnCreate(); } +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + // static LRESULT CALLBACK Win32Window::WndProc(HWND const window, UINT const message, @@ -188,6 +212,10 @@ Win32Window::MessageHandler(HWND hwnd, SetFocus(child_content_); } return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; } return DefWindowProc(window_handle_, message, wparam, lparam); @@ -243,3 +271,18 @@ bool Win32Window::OnCreate() { void Win32Window::OnDestroy() { // No-op; provided for subclasses. } + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/game_template/windows/runner/win32_window.h b/game_template/windows/runner/win32_window.h index 17ba43112..e901dde68 100644 --- a/game_template/windows/runner/win32_window.h +++ b/game_template/windows/runner/win32_window.h @@ -28,15 +28,16 @@ class Win32Window { Win32Window(); virtual ~Win32Window(); - // Creates and shows a win32 window with |title| and position and size using + // Creates a win32 window with |title| that is positioned and sized using // |origin| and |size|. New windows are created on the default monitor. Window // sizes are specified to the OS in physical pixels, hence to ensure a - // consistent size to will treat the width height passed in to this function - // as logical pixels and scale to appropriate for the default monitor. Returns - // true if the window was created successfully. - bool CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size); + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); // Release OS resources associated with window. void Destroy(); @@ -76,7 +77,7 @@ class Win32Window { // OS callback called by message pump. Handles the WM_NCCREATE message which // is passed when the non-client area is being created and enables automatic // non-client DPI scaling so that the non-client area automatically - // responsponds to changes in DPI. All other messages are handled by + // responds to changes in DPI. All other messages are handled by // MessageHandler. static LRESULT CALLBACK WndProc(HWND const window, UINT const message, @@ -86,6 +87,9 @@ class Win32Window { // Retrieves a class instance pointer for |window| static Win32Window* GetThisFromHandle(HWND const window) noexcept; + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + bool quit_on_close_ = false; // window handle for top level window. diff --git a/google_maps/.gitignore b/google_maps/.gitignore new file mode 100644 index 000000000..24476c5d1 --- /dev/null +++ b/google_maps/.gitignore @@ -0,0 +1,44 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/google_maps/.metadata b/google_maps/.metadata new file mode 100644 index 000000000..bd1207f92 --- /dev/null +++ b/google_maps/.metadata @@ -0,0 +1,30 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled. + +version: + revision: f468f3366c26a5092eb964a230ce7892fda8f2f8 + channel: stable + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: f468f3366c26a5092eb964a230ce7892fda8f2f8 + base_revision: f468f3366c26a5092eb964a230ce7892fda8f2f8 + - platform: web + create_revision: f468f3366c26a5092eb964a230ce7892fda8f2f8 + base_revision: f468f3366c26a5092eb964a230ce7892fda8f2f8 + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/google_maps/README.md b/google_maps/README.md new file mode 100644 index 000000000..ae658c30a --- /dev/null +++ b/google_maps/README.md @@ -0,0 +1,9 @@ +# Google Maps Demo + +This sample Flutter app showcases the [Google Maps for Flutter plugin](https://developers.google.com/maps/flutter-plugin/overview). + +## Getting Started + +1. See the overview at https://developers.google.com/maps/flutter-plugin/overview. +1. Follow the setup guide at https://developers.google.com/maps/flutter-plugin/config to learn where to insert your API keys. This demo will not run without API keys added. +1. Use the sample code in this folder for the tutorial at https://developers.google.com/maps/flutter-plugin/map-with-marker. \ No newline at end of file diff --git a/google_maps/analysis_options.yaml b/google_maps/analysis_options.yaml new file mode 100644 index 000000000..eb3cb890b --- /dev/null +++ b/google_maps/analysis_options.yaml @@ -0,0 +1,5 @@ +include: package:analysis_defaults/flutter.yaml + +analyzer: + exclude: + - lib/src/*.g.dart diff --git a/google_maps/android/.gitignore b/google_maps/android/.gitignore new file mode 100644 index 000000000..6f568019d --- /dev/null +++ b/google_maps/android/.gitignore @@ -0,0 +1,13 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app +key.properties +**/*.keystore +**/*.jks diff --git a/google_maps/android/app/build.gradle b/google_maps/android/app/build.gradle new file mode 100644 index 000000000..bfc1e6d9a --- /dev/null +++ b/google_maps/android/app/build.gradle @@ -0,0 +1,71 @@ +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + +def flutterRoot = localProperties.getProperty('flutter.sdk') +if (flutterRoot == null) { + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") +} + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" + +android { + compileSdkVersion flutter.compileSdkVersion + ndkVersion flutter.ndkVersion + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = '1.8' + } + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "com.example.google_maps_in_flutter" + // You can update the following values to match your application needs. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. + minSdkVersion 21 + targetSdkVersion flutter.targetSdkVersion + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig signingConfigs.debug + } + } +} + +flutter { + source '../..' +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" +} diff --git a/google_maps/android/app/src/debug/AndroidManifest.xml b/google_maps/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 000000000..9ae2de283 --- /dev/null +++ b/google_maps/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + diff --git a/google_maps/android/app/src/main/AndroidManifest.xml b/google_maps/android/app/src/main/AndroidManifest.xml new file mode 100644 index 000000000..2bc113269 --- /dev/null +++ b/google_maps/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + diff --git a/google_maps/android/app/src/main/kotlin/com/example/google_maps_in_flutter/MainActivity.kt b/google_maps/android/app/src/main/kotlin/com/example/google_maps_in_flutter/MainActivity.kt new file mode 100644 index 000000000..883dae8a4 --- /dev/null +++ b/google_maps/android/app/src/main/kotlin/com/example/google_maps_in_flutter/MainActivity.kt @@ -0,0 +1,6 @@ +package com.example.google_maps_in_flutter + +import io.flutter.embedding.android.FlutterActivity + +class MainActivity: FlutterActivity() { +} diff --git a/google_maps/android/app/src/main/res/drawable-v21/launch_background.xml b/google_maps/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 000000000..f74085f3f --- /dev/null +++ b/google_maps/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/google_maps/android/app/src/main/res/drawable/launch_background.xml b/google_maps/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 000000000..304732f88 --- /dev/null +++ b/google_maps/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/google_maps/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/google_maps/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 000000000..db77bb4b7 Binary files /dev/null and b/google_maps/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/google_maps/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/google_maps/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 000000000..17987b79b Binary files /dev/null and b/google_maps/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/google_maps/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/google_maps/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 000000000..09d439148 Binary files /dev/null and b/google_maps/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/google_maps/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/google_maps/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 000000000..d5f1c8d34 Binary files /dev/null and b/google_maps/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/google_maps/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/google_maps/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 000000000..4d6372eeb Binary files /dev/null and b/google_maps/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/google_maps/android/app/src/main/res/values-night/styles.xml b/google_maps/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 000000000..06952be74 --- /dev/null +++ b/google_maps/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/google_maps/android/app/src/main/res/values/styles.xml b/google_maps/android/app/src/main/res/values/styles.xml new file mode 100644 index 000000000..cb1ef8805 --- /dev/null +++ b/google_maps/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/google_maps/android/app/src/profile/AndroidManifest.xml b/google_maps/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 000000000..9ae2de283 --- /dev/null +++ b/google_maps/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + diff --git a/google_maps/android/build.gradle b/google_maps/android/build.gradle new file mode 100644 index 000000000..f7eb7f63c --- /dev/null +++ b/google_maps/android/build.gradle @@ -0,0 +1,31 @@ +buildscript { + ext.kotlin_version = '1.7.10' + repositories { + google() + mavenCentral() + } + + dependencies { + classpath 'com.android.tools.build:gradle:7.3.0' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +allprojects { + repositories { + google() + mavenCentral() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +tasks.register("clean", Delete) { + delete rootProject.buildDir +} diff --git a/google_maps/android/gradle.properties b/google_maps/android/gradle.properties new file mode 100644 index 000000000..94adc3a3f --- /dev/null +++ b/google_maps/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx1536M +android.useAndroidX=true +android.enableJetifier=true diff --git a/google_maps/android/gradle/wrapper/gradle-wrapper.properties b/google_maps/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..3c472b99c --- /dev/null +++ b/google_maps/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip diff --git a/google_maps/android/settings.gradle b/google_maps/android/settings.gradle new file mode 100644 index 000000000..44e62bcf0 --- /dev/null +++ b/google_maps/android/settings.gradle @@ -0,0 +1,11 @@ +include ':app' + +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() + +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } + +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/google_maps/assets/locations.json b/google_maps/assets/locations.json new file mode 100644 index 000000000..83aae6435 --- /dev/null +++ b/google_maps/assets/locations.json @@ -0,0 +1,901 @@ +{ + "offices": [ + { + "address": "Aabogade 15\n8200 Aarhus\nDenmark", + "id": "aarhus", + "image": "https://lh3.googleusercontent.com/tpBMFN5os8K-qXIHiAX5SZEmN5fCzIGrj9FdJtbZPUkC91ookSoY520NYn7fK5yqmh1L1m3F2SJA58v6Qps3JusdrxoFSwk6Ajv2K88", + "lat": 56.172249, + "lng": 10.187372, + "name": "Aarhus", + "phone": "", + "region": "europe" + }, + { + "address": "Claude Debussylaan 34\n1082 MD, Amsterdam\nNetherlands", + "id": "amsterdam", + "image": "https://lh3.googleusercontent.com/gG1zKXcSmRyYWHwUn2Z0MITpdqwb52RAEp3uthG2J5Xl-4_Wz7_WmoM6T_TBg6Ut3L1eF-8XENO10sxVIFdQHilj8iRG29wROpSoug", + "lat": 52.337801, + "lng": 4.872066, + "name": "Amsterdam", + "phone": "", + "region": "europe" + }, + { + "address": "2300 Traverwood Dr.\nAnn Arbor, MI 48105\nUnited States", + "id": "ann-arbor", + "image": "https://lh3.googleusercontent.com/Iim0OVcAgg9vmXc5ADn9KvOQFplrMZ8hBTg2biiTtuWPy_r56cy4Byx1ROk6coGt7knQdmx_jO45VX1kiCJZ0QzEtS97AP_BYG4F2w", + "lat": 42.3063848, + "lng": -83.7140833, + "name": "Ann Arbor", + "phone": "+1 734-332-6500", + "region": "north-america" + }, + { + "address": "Fragkokklisias 7\nAthens 151 25\nGreece", + "id": "athens", + "image": "https://lh3.googleusercontent.com/XroZnqewSrO6KuvXM5hDHtjUJzUcRQLZYfCKs4jP44dKezRvNx58uxaqUKS4fQ2eXzG2TpJNJ1X2xtfBe7Prl5hSG_xjPEF1xLtFodM", + "lat": 38.03902, + "lng": 23.804595, + "name": "Athens", + "phone": "", + "region": "europe" + }, + { + "address": "10 10th Street NE\nAtlanta, GA 30309\nUnited States", + "id": "atlanta", + "image": "https://lh3.googleusercontent.com/py7Qvqqoec1MB0dMKnGWn7ju9wET_dIneTb24U-ri8XAsECJnOaBoNmvfa51PIaC0rlsyQvQXvAK8RdLqpkhpkRSzmhNKqb-tY2_", + "lat": 33.781827, + "lng": -84.387301, + "name": "Atlanta", + "phone": "+1 404-487-9000", + "region": "north-america" + }, + { + "address": "500 W 2nd St\nSuite 2900\nAustin, TX 78701\nUnited States", + "id": "austin", + "image": "https://lh3.googleusercontent.com/WFaJgWPdd7xPL7CQHizlqEzLDjT_GUAiWHIWUM0PiVSsv8q3Rjt9QgbyQazuQwYfN5qLORajv8eKSHlKwZo-M89T2Y12zFSxSIme08c", + "lat": 30.266035, + "lng": -97.749237, + "name": "Austin", + "phone": "+1 512-343-5283", + "region": "north-america" + }, + { + "address": "No. 3, RMZ Infinity \u2013 Tower E\nOld Madras Road\n4th and 5th Floors\nBangalore, 560 016, India", + "id": "bangalore", + "image": "https://lh3.googleusercontent.com/YDyQevoY-D0eZQ9sYHp8dQjpFF5JpLfLK-0OM-uJK1oNK3_LRnGJAM0uXi9qb9UigKnVIIXlIgidxhRlnaB_FPtUOqPzrsCSiFZyoQ", + "lat": 12.99332, + "lng": 77.660176, + "name": "Bangalore", + "phone": "+91-80-67218000", + "region": "asia-pacific" + }, + { + "address": "57 Park Ventures Ecoplex\n14th Floor, Wireless Road\nBangkok, 10330, Thailand", + "id": "bangkok", + "image": "https://lh3.googleusercontent.com/nh9uOUPj6iWjKZSHIrnkfGhIWGBb8thguRM5_ehCOkyF-qfwzYciDJFVRSvQ6QxlSA6eZUMkzgdW9zR0Gab2ZZPg8NlB7V_V3wB5", + "lat": 13.742866, + "lng": 100.547983, + "name": "Bangkok", + "phone": "", + "region": "asia-pacific" + }, + { + "address": "6th Floor, Tower B, Raycom InfoTech Park\nNo. 2 Kexueyuan South Road\nZhongguancun Beijing 100190", + "id": "beijing", + "image": "https://lh3.googleusercontent.com/v_tD3VvC8-dnhqSF9xhj5Hx7F_bb3-wieM19i-Ho2C3by6mt7-JpPc7KsYVHUZFqQl5ON3adVEV1N4OlzSvHLrr3sr4GtXErDbGC", + "lat": 39.9848878, + "lng": 116.3265708, + "name": "Beijing", + "phone": "+86-10-62503000", + "region": "asia-pacific" + }, + { + "address": "Boulevard Corporate Tower\nAv. dos Andradas, 3000 - Andares 14-17\nSanta Efig\u00eania\nBelo Horizonte\n30260-070, Brazil", + "id": "belo-horizonte", + "image": "https://lh3.googleusercontent.com/f7F8gTi9GSgAZR3lv24I1yb-D0wRlDy0lQTcxCB4yJGtSgxrWdKoB3dX3J8SMrjYLwOSXquO3LuGFUE82QUjzVK9buHGNIRUPGpqM3E", + "lat": -19.920225, + "lng": -43.920845, + "name": "Belo Horizonte", + "phone": "+55-31-2128-6800", + "region": "latin-america" + }, + { + "address": "Tucholskystra\u00dfe 2\n10117 Berlin\nGermany", + "id": "berlin", + "image": "https://lh3.googleusercontent.com/XcPyEMiSlLdZJq7nh3orGy3UqjtUHdhxXiwn52ZY47wfEChfZNDO78zDy9H0tBeegogZBZpIE0Q9mdVBGN4aQ0M5vfgz8ZWMEe43Mg", + "lat": 52.5231079, + "lng": 13.39203120000002, + "name": "Berlin", + "phone": "+49 30 303986300", + "region": "europe" + }, + { + "address": "Carrera 11A 94 - 45\nCentro Empresarial Oxo Centre\nBogota, Colombia", + "id": "bogota", + "image": "https://lh3.googleusercontent.com/_APoV1zAR0g5_pXVDlT2ovgNQfr3zvjOuj4HFHViiy2ahyjapJMXlYRE48qYMyFTWXJybbK4psz-fQ82QhMhO0keYJ27I8tNTHe_ww", + "lat": 4.678267, + "lng": -74.046901, + "name": "Bogota", + "phone": "+57 (1) 5939400", + "region": "latin-america" + }, + { + "address": "2600 Pearl Street\nBoulder, CO 80302\nUnited States", + "id": "boulder", + "image": "https://lh3.googleusercontent.com/lF9KBhOolmb958FFmMdLwFcedQAn1wEsVleBRrJQmyfhvD3u4lwCneR09ADJ9sG4tMBP5LDSLkn9bkbavzyqqql_0X7hj39dzl-n1w", + "lat": 40.021693, + "lng": -105.260139, + "name": "Boulder", + "phone": "+1 303-245-0086", + "region": "north-america" + }, + { + "address": "2930 Pearl St\nBoulder, CO 80301\nUnited States", + "id": "boulder-pearl", + "image": "https://lh3.googleusercontent.com/_JvBccdhLZSIxenZEubM2Qu8Eky6udmnwekH7BhjI1EUo8mCDXDHa0Z7mfNzvZtlmiXI6b6w8U-PY47oUQhPtvYazGS4mG8S61Rr", + "lat": 40.021948, + "lng": -105.253978, + "name": "Boulder \u2013 Pearl Place", + "phone": "+1 303-245-0086", + "region": "north-america" + }, + { + "address": "3333 Walnut St\nBoulder CO, 80301\nUnited States", + "id": "boulder-walnut", + "image": "https://lh3.googleusercontent.com/nGvIFmh9d2J68l-U7gYdQAqLZkLNNS_pqhNMtGopMujEpZEneMSH75NFr1WmXJC0GafDLyTVSpnqbuj5Tfjjjk889Zk23dIggqNN", + "lat": 40.01993, + "lng": -105.24936, + "name": "Boulder \u2013 Walnut", + "phone": "+1 303-245-0086", + "region": "north-america" + }, + { + "address": "Chaussee d'Etterbeek 180\n1040 Brussels\nBelgium", + "id": "brussels", + "image": "https://lh3.googleusercontent.com/Vdcj2ozYBIOyJLAhRyQic7xjw-OfQ_F5b8M9Kaom_56M2zp8UW65Lm1bYJLLEc4_U4tXfAp-CA81U2O2tdHcXPdsCEUO0hyK_SFKF-Y", + "lat": 50.839315, + "lng": 4.380984, + "name": "Brussels", + "phone": "", + "region": "europe" + }, + { + "address": "Alicia M. De Justo 350, 2nd Floor\nBuenos Aires, C1107AAH\nArgentina", + "id": "buenos-aires", + "image": "https://lh3.googleusercontent.com/08n-ZBH23cWYWAbRo7_uZ6VObzDOLdfvxiAy4vZvX2I_FBn4vlUl_qiwALWBMUp7gQ4LEkj7aW6gB_jdJWNmnsmYEKbWzNsh0EaYpw", + "lat": -34.602734, + "lng": -58.366992, + "name": "Buenos Aires", + "phone": "+54-11-5530-3000", + "region": "latin-america" + }, + { + "address": "355 Main Street\nCambridge, MA 02142\nUnited States", + "id": "cambridge", + "image": "https://lh3.googleusercontent.com/OLL4nJ-esDQ3JFh2XpWSpX8WnO69yzFpYPWIy9yL_2WFapf74z_ZYvfqb4XkF0_hT2rCi3pzN2Y-yglQ-jWMw3u89YKwn4GfdT7FfQ", + "lat": 42.362757, + "lng": -71.087109, + "name": "Cambridge", + "phone": "+1 617-575-1300", + "region": "north-america" + }, + { + "address": "200 West Franklin Street\nChapel Hill, NC 27516\nUnited States", + "id": "chapel-hill", + "image": "https://lh3.googleusercontent.com/AHShjZrvscMoWixuAd0zIXqER2wKMXtoqX4edIzur3FRLJ3DBDIAQqD6PZqB4it_ApAVyitFkjsRPER38oX6XHYOl9mxKbLCXrAQKA", + "lat": 35.912445, + "lng": -79.058488, + "name": "Chapel Hill", + "phone": "", + "region": "north-america" + }, + { + "address": "210 Carpenter Ave\nChicago, IL 60607\nUnited States", + "id": "chicago-carpenter", + "image": "https://lh3.googleusercontent.com/pgZ_JGnbpqS4P8H29c6hOCQcLXiG1EZEw5W92FKddWuUTW8618AwIho27aAFPmniDUpH_jS3mCpAx3nY6WkT46oetsFMC__SrPCUmw", + "lat": 41.88609, + "lng": -87.65333, + "name": "Chicago \u2013 Carpenter", + "phone": "", + "region": "north-america" + }, + { + "address": "320 N. Morgan, Suite 600\nChicago, IL 60607\nUnited States", + "id": "chicago-fulton", + "image": "https://lh3.googleusercontent.com/ulGqMc02YGomqRC2EN0JP7jOL-6qaIvhCq225DwyeP7b8l-H7ZTWkYDwVKHc0Z4nXEq_TBRCqqPfcc3N8WHm54XpOh16Yx73F4ng", + "lat": 41.8873457, + "lng": -87.6526874, + "name": "Chicago \u2013 Fulton Market", + "phone": "+1 312-840-4100", + "region": "north-america" + }, + { + "address": "Skt. Petri Passage 5\n1165 Copenhagen\nDenmark", + "id": "copenhagen", + "image": "https://lh3.googleusercontent.com/SNSbrYGI_ZBuCl_S8aRh63IIta895tqIUUX3ZT0FWmK7ykhJRy_HNtzoud7XrohnjnSAkuXg9YykkFZqbvkRiZQC7osXrZzGerWdmG8", + "lat": 55.680452, + "lng": 12.570071, + "name": "Copenhagen", + "phone": "+45 3370 2600", + "region": "europe" + }, + { + "address": "52 Henry St.\n3rd Floor\nDetroit, MI 48201\nUnited States", + "id": "detroit", + "image": "https://lh3.googleusercontent.com/WEP2INGXZc9vRv1ii6KDZGoRFPyumV466B3RzUwyzf8W81a7du2KGXlDEqS5g0nbOHsYTAvagFGVJskSonpt6wJWN2mVq8ti7JYPtvs", + "lat": 42.340458, + "lng": -83.054494, + "name": "Detroit", + "phone": "+1 248-593-4003", + "region": "north-america" + }, + { + "address": "TECOM Zone, Dubai Internet City\nDubai, United Arab Emirates", + "id": "dubai", + "image": "https://lh3.googleusercontent.com/xw0iylnw3b3-qxwoNzLSLJlAAPtkF1KONnIoBTDHtURr04fzH9DeO08GYvEsKYQtE9GCdOMTk_s08H6-btSquKo3moeILfc3Kpu4MA", + "lat": 25.0929, + "lng": 55.1591, + "name": "Dubai", + "phone": "+971 4 4509500", + "region": "africa-middle-east" + }, + { + "address": "Gordon House\nBarrow St\nDublin 4\nIreland", + "id": "dublin", + "image": "https://lh3.googleusercontent.com/1z3Fhr6nKlCDeTwc1KoFAMSrnywR0lb8nNdwTI1YgoKSXKIDjQeVB_I3Q8oDZuqqHtlXiUbPmfoUYyAXMObjvMxDcMeTqSY21YvP_A", + "lat": 53.3399526, + "lng": -6.2360967, + "name": "Dublin", + "phone": "", + "region": "europe" + }, + { + "address": "Taikoo Hui Tower 1, No.383 Tianhe Road\nGuangzhou, 510620\nChina", + "id": "guangzhou", + "image": "https://lh3.googleusercontent.com/BjYQfVMor1QT5hAkc7DcN6_MJdwaySHY6VJ6IY7mQGJRdXjFZhiP-t4MV_QUbp0tBeuYvuMw3nUetTiI-vFl6-BcialJhhurhFrDVeY", + "lat": 23.1339728, + "lng": 113.3332488, + "name": "Guangzhou", + "phone": "", + "region": "asia-pacific" + }, + { + "address": "Sector 15, Part II Village Silokhera\nGurgaon 122001\nIndia", + "id": "gurgaon", + "image": "https://lh3.googleusercontent.com/8plKBiWKmwllCXePad0JJ22u1GG7Qe1hveXlx_xJ87XoiQpclQubwxyGxcDU6tkatpb3oi9MYXjm2XszFi5kGn1flfTtjv6MycBWrQ", + "lat": 28.460581, + "lng": 77.048194, + "name": "Gurgaon", + "phone": "+91-12-44512900", + "region": "asia-pacific" + }, + { + "address": "Building 30\nMATAM, Advanced Technology Centre\nHaifa, 3190500\nIsrael ", + "id": "haifa", + "image": "https://lh3.googleusercontent.com/syKfT9cVMzLi0d4_DSiJztWGwcmWct6IEbpAApEFk_G8ym0xyLLxMBT484zROIOZHMSe9N1o-QQrCAqVWfKRSY6EOeJY9Qa1ftwb", + "lat": 32.78897, + "lng": 34.958432, + "name": "Haifa", + "phone": "+972-74-746-6245", + "region": "africa-middle-east" + }, + { + "address": "ABC-Strasse 19\n20354 Hamburg\nGermany", + "id": "hamburg", + "image": "https://lh3.googleusercontent.com/66R0svr2--6zNOnrqf6JbeZ-bF39bRfHpExjcTlE_AIlPEPk8jO1LjF39FUbDnJB1gh_FiRFX6aCRg4ACjYRbDqb5lf9PdV6qY4S", + "lat": 53.553752, + "lng": 9.986229, + "name": "Hamburg", + "phone": "49 40-80-81-79-000", + "region": "europe" + }, + { + "address": "1 Matheson Street\nCauseway Bay, Hong Kong", + "id": "hong-kong", + "image": "https://lh3.googleusercontent.com/-Ult8_R6TfQAk16CfjSfl6PLypQBYohUjNjE6xeeektZsrP8XwTv7PnVVE-5Ueh3I-2hPnAdRGg6XrMn9IwI7W1h5LJKtlMVe93Wfw", + "lat": 22.278203, + "lng": 114.18176, + "name": "Hong Kong", + "phone": "+852-3923-5400", + "region": "asia-pacific" + }, + { + "address": "Survey No. 13, DivyaSree Omega\nKondapur Village\nHyderabad, Telangana 500084\nIndia", + "id": "hyderabad", + "image": "https://lh3.googleusercontent.com/LAEnc0tzA-JSb5XM5oct5paX98QK9zh_aqa_qKcjAoXo2MChgOjdj_EZpgIZsVAvEY-I0bmMmhCBb5gkoVN4ebqCG9ZfjCbo_stJaw", + "lat": 17.458461, + "lng": 78.372452, + "name": "Hyderabad", + "phone": "+91-40-6619-3000", + "region": "asia-pacific" + }, + { + "address": "19510 Jamboree Road\nIrvine, CA 92612\nUnited States", + "id": "irvine", + "image": "https://lh3.googleusercontent.com/LWGkhXkRRzWnMlNy_Ps74-VTxB2ISXK0Kkick1SujTLYvNAUqo9_HR7SILSZZsiaiGWsXtx7dR5Hz9Q5psu1MWP9BHtDuGYc_hz_eg", + "lat": 33.658792, + "lng": -117.859322, + "name": "Irvine", + "phone": "+1 949-794-1600", + "region": "north-america" + }, + { + "address": "Eski Buyukdere Caddesi No: 209\n34394\nIstanbul, Turkey", + "id": "istanbul", + "image": "https://lh3.googleusercontent.com/_mdN7z1Q-9fKgpHTb1rQJosllxqn7glRJ_G2enX4WPmImuJjLHKw-JBZ8z5B9vMSo12SexGBOD1i2NHXqEy4OaOJekn0g3Fp3bDk_Q", + "lat": 41.081697, + "lng": 29.00859, + "name": "Istanbul", + "phone": "", + "region": "africa-middle-east" + }, + { + "address": "Pacific Century Place Tower Level 45 SCBD Lot 10,\nJl. Jend. Sudirman No.53,\nRT.5/RW.3, Senayan, Kby. Baru,\nKota Jakarta Selatan,\nDaerah Khusus Ibukota Jakarta 12190, \nIndonesia", + "id": "jakarta", + "image": "https://lh3.googleusercontent.com/JEaMUfOUq6bxN7jeIN1z2me5-JvlLRkrFJgf_A0GvqtOquU6Tfjg0ecKeR_Ck27L0S1zC2t_4I6nVP6pBdBtSKst7tkJEoC7LyYq", + "lat": -6.227664, + "lng": 106.808471, + "name": "Jakarta", + "phone": "", + "region": "asia-pacific" + }, + { + "address": "35 Ballyclare Drive, Building E\nJohannesburg\n2191, South Africa", + "id": "johannesburg", + "image": "https://lh3.googleusercontent.com/EDxefwSgeKyh8zN9VUUGhu3hiBqH7Z3UEOXfZeij7YnUhZLqLElu8dhi4FziOepRun-fjfwIWdf5W8CTG5ZSYMu4k8z9QZjTgjQRuQ", + "lat": -26.0734457, + "lng": 28.032035, + "name": "Johannesburg", + "phone": "", + "region": "africa-middle-east" + }, + { + "address": "777 6th Street South\nKirkland, WA\nUnited States", + "id": "kirkland", + "image": "https://lh3.googleusercontent.com/Vgmu21GQbS0pga_tJaG0_35AYOzM64Uxp-zNYyMVnd3oXFHmHeMJpx8UjcsMYdnxbdlFZ4KGFowOtpHxsNlUw8qS21sYBy9jPbqkuA", + "lat": 47.669568, + "lng": -122.196912, + "name": "Kirkland", + "phone": "+1 425-739-5600", + "region": "north-america" + }, + { + "address": "51 Breithaupt Street\nKitchener, ON N2H 5G5\nCanada", + "id": "kitchener", + "image": "https://lh3.googleusercontent.com/jUCZzQYnJXCUZ3ZxAEB14qukCV6aGxfh84hExpcpye314DhOWB4jtpUoNDrCtA2laV7qDHBAYGtIuZan9Ir5Hp6_U0B2zTGgPqsb", + "lat": 43.4541137, + "lng": -80.4992423, + "name": "Kitchener", + "phone": "+1-519-880-2300", + "region": "north-america" + }, + { + "address": "Axiata Tower\nNo. 9, Jalan Stesen Sentral 5\n50470 Kuala Lumpur\nMalaysia", + "id": "kuala-lumpur", + "image": "https://lh3.googleusercontent.com/c5kAdRoyejY1Z5i9A3hYKfIG55GrKdAc0iJjH-gYo-tWd3JUksvsfZx7LU5yzay4HJmxCQEir2cejbZ2LurYfKL_emC9e9PCDVxd", + "lat": 3.133445, + "lng": 101.684609, + "name": "Kuala Lumpur", + "phone": "", + "region": "asia-pacific" + }, + { + "address": "Avenida da Liberdade, 110\nLisbon, 1269-046, Portugal", + "id": "lisbon", + "image": "https://lh3.googleusercontent.com/py3HZVLLpxjMhRL6fgUKmHqGODp6ZH-5abQBHGqyKrCyuoW0t-q0ypNVN_jOfD3ZEO08Y9Q0m-E4ZyuNrMgl-mlaECkCAEyc7Af1", + "lat": 38.718887, + "lng": -9.143781, + "name": "Lisbon", + "phone": "+351 21 122 1803", + "region": "europe" + }, + { + "address": "6 Pancras Square\nLondon N1C 4AG\nUnited Kingdom", + "id": "london-6ps", + "image": "https://lh3.googleusercontent.com/WTxWzt3AOcEMwoT2OonLTlc63pa4V-GsYbZg5Hu7rfe9ZioMaRurkxaQ5tOcuC9nZkCyh2IjQb-xMy4Tq8ISrHjfDHmzZXnExTjP", + "lat": 51.533311, + "lng": -0.126026, + "name": "London \u2013 6PS", + "phone": "+44-20-7031-3000", + "region": "europe" + }, + { + "address": "Belgrave House\n76 Buckingham Palace Road\nLondon SW1W 9TQ\nUnited Kingdom", + "id": "london-bel", + "image": "https://lh3.googleusercontent.com/bLxZNCaDE2Fdj7woV_9JUJEUfUvTrhI57jHNEeW-OenTspzM21miwz1gGydzZ2Ke_vfRdkqdo4dyN2mJCntC2p4qvRUyipPWppAC9g", + "lat": 51.494961, + "lng": -0.146652, + "name": "London \u2013 BEL", + "phone": "+44-20-7031-3001", + "region": "europe" + }, + { + "address": "1\u201313 St Giles High St\nLondon WC2H 8AG\nUnited Kingdom", + "id": "london-csg", + "image": "https://lh3.googleusercontent.com/32nlExbSrV5rJR9Qsqfkbckn6_yd-4QRaoSDmp9JLyaZxojfl9aH1LZSrSvcsT128AUzHqkEfMhTE2miDuOu7gj-7x3Ginqr4rgowg", + "lat": 51.516027, + "lng": -0.12755, + "name": "London \u2013 CSG", + "phone": "+44 (0)20-7031-3000", + "region": "europe" + }, + { + "address": "340 Main Street\nLos Angeles, CA 90291\nUnited States", + "id": "los-angeles", + "image": "https://lh3.googleusercontent.com/MWGnaY3t_1-j7YylPpq35rvBU9gIBJIsnrtW95THrBw9N0PWrAVtbHKUBH8OdxyWI9gYdymndmSgwS8tl23GylytyefNC74i4-pniQ", + "lat": 33.995939, + "lng": -118.4766773, + "name": "Los Angeles, US", + "phone": "+1 310-310-6000", + "region": "north-america" + }, + { + "address": "811 E Washington Ave\nSuite 700\nMadison, WI 53703\nUnited States", + "id": "madison", + "image": "https://lh3.googleusercontent.com/sQDFJpbQl4EVGfdpHsw_24mxsnUNAnDs6f-00QCj0g_Z38CEqjG4PuLPoS_T6eTOPV3QXX907Kap_TkaE3cEG4fhJWIoWsZELIGyvw", + "lat": 43.081091, + "lng": -89.374619, + "name": "Madison", + "phone": "+1 608-669-9841", + "region": "north-america" + }, + { + "address": "Plaza Pablo Ruiz Picasso, I\nMadrid 28020\nSpain", + "id": "madrid", + "image": "https://lh3.googleusercontent.com/x36CdPxkwxxctp0wvDYfTjgTzNgMiZV0xoKeLMwHzdccpJGYUA6a61fSeX1_Rt-lfofMjfUwAhFxd7DbjsE8_393plkTly-T5YkpCA", + "lat": 40.4505331, + "lng": -3.6931161, + "name": "Madrid", + "phone": "+34 91-748-6400", + "region": "europe" + }, + { + "address": "161 Collins Street,\nMelbourne VIC 3000,\nAustralia", + "id": "melbourne", + "image": "https://lh3.googleusercontent.com/U_5KiB8x7T-Rrdp90ygnO1kbZxiWJz4G6CbD6_51CjH5zaMP23upWELryFOe99k_AqlPZschCY7Nx--wYufcIV54HnjGcP3lf28X1A", + "lat": -37.815328, + "lng": 144.968737, + "name": "Melbourne", + "phone": "", + "region": "asia-pacific" + }, + { + "address": "Google Mexico, S. de R.L. de C.V.\nMontes Urales 445\nLomas de Chapultepec\nMexico City 11000, Mexico", + "id": "mexico-city", + "image": "https://lh3.googleusercontent.com/P_U5ECZJ--t8khoKFxoeeJwa7PZy-3TriZbit5sRJDUdupf3NZRJegsnB4ucLqdLEV3De41fmByckDDC6uHMI82cXIFp4C1WwI1a1g", + "lat": 19.4283793, + "lng": -99.2065518, + "name": "Mexico City", + "phone": "+52 55-5342-8400", + "region": "latin-america" + }, + { + "address": "1450 Brickell Ave Ste 900 \nMiami FL 33131\nUnited States", + "id": "miami", + "image": "https://lh3.googleusercontent.com/DTk99d9bCqiCN8sFj3FBr8BdGPYC97PCYbiLbdq6GZ-_Er268DSlvfRM_g8hwA5tOmw_6c3PBjpKpuRQTuXS8H8_hpIlCQKyobyYjQ", + "lat": 25.758473, + "lng": -80.1932144, + "name": "Miami", + "phone": "+1 305-985-7900", + "region": "north-america" + }, + { + "address": "Porta Nuova Isola, Building C, Via Federico Confalonieri 4\n20124 Milan\nItaly", + "id": "milan", + "image": "https://lh3.googleusercontent.com/nZ_KE1LqNmW5qb6i-czLlm_yqRJtLmvEmyLRI0BYjqMlOiC_5VmbEI3DeHQyPOHp6PzoN2gKJ0j73BALkddFmDFXOIe9Wwctmt73cqI", + "lat": 45.486147, + "lng": 9.189546, + "name": "Milan", + "phone": "", + "region": "europe" + }, + { + "address": "1253 McGill College Avenue\nMontreal, QC H3B 2Y5\nCanada", + "id": "montreal", + "image": "https://lh3.googleusercontent.com/S310Um4pKym8bvHQcQmJLc4ohURWEq3AQHjJ-b5aMY-TpA9P4LCKcxGEg4fik-zSL6MrtiEi8Qt3JbAZl8x-GiI31wfm_myGfb3manQ", + "lat": 45.50191, + "lng": -73.570365, + "name": "Montreal", + "phone": "514-670-8700", + "region": "north-america" + }, + { + "address": "7 Balchug St\nMoscow 115035\nRussia", + "id": "moscow", + "image": "https://lh3.googleusercontent.com/i6cwRxcix3LUdviTVKoLG2Ep6q9pjfPIX_nrge-YkgjIvTgCH5QQpSI6wCpKvg0HiH56lHu6K8eAkCrPZUCzspS6Y9K19U47xr4hww", + "lat": 55.746747, + "lng": 37.626435, + "name": "Moscow", + "phone": "+7-495-644-1400", + "region": "europe" + }, + { + "address": "1600 Amphitheatre Parkway\nMountain View, CA 94043\nUnited States", + "id": "mountain-view", + "image": "https://lh3.googleusercontent.com/Mh8P8gvVwO7NOXfg8anxwPXRy5oKZJ6Cz_LbFfOVdeIsdDfogmMcMsiW7HD7HD2NOINzAPH_v8dALWSuDiiTjCjRnenI7B3l6Pg4yw", + "lat": 37.421512, + "lng": -122.084101, + "name": "Mountain View", + "phone": "", + "region": "north-america" + }, + { + "address": "3 North Avenue\nMaker Maxity, Bandra Kurla Complex\nBandra East\nMumbai, Maharashtra 400051\nIndia", + "id": "mumbai", + "image": "https://lh3.googleusercontent.com/twldrlVORn84fYsOLwNLabfRPQYX-dJAzJtpam-Ea4D7QIY1pvMa9FCMbpjUFA8uniBg6XAh8pMijf9qnjmEm4d17UFkwRGToiv5Ug", + "lat": 19.054364, + "lng": 72.850591, + "name": "Mumbai", + "phone": "+91-22-6611-7150", + "region": "asia-pacific" + }, + { + "address": "Erika-Mann-Str. 33\n80636 Munich\nGermany", + "id": "munich", + "image": "https://lh3.googleusercontent.com/sVZqxencTTD84raIgMWd5SbmXZTvQmwUzxj6IakbIGuAua5JDu-Q64uJE-cm3TYeSjKVQo7VSwIODVpwswjtrpwBUvXTa5MDFXoNAw", + "lat": 48.14305556, + "lng": 11.54083333, + "name": "Munich", + "phone": "", + "region": "europe" + }, + { + "address": "111 8th Avenue\nNew York, NY 10011\nUnited States", + "id": "new-york", + "image": "https://lh3.googleusercontent.com/BWdXxSOqBpjGFzAJVVr02QQs5XSe33dEeNDG6lXhd-nuv32ruMjD01yBJX3Rk4_xP6glB1ycMvwypEPr6YO665grfWqEEI2LPYUaMg", + "lat": 40.741445, + "lng": -74.003102, + "name": "New York", + "phone": "+1 212-565-0000", + "region": "north-america" + }, + { + "address": "Aker Brygge\nBryggegata 6\n0250 Oslo\nNorway", + "id": "oslo", + "image": "https://lh3.googleusercontent.com/lc9jPxaz4CzdC3sD4wFlzml1Y221PvtsisYGenint536WNbyIMY2cp2qnQOmnT0IWPoOCjarwMgK6zddvTcOu6YcAuaVLfQAdqZ2UQg", + "lat": 59.90987, + "lng": 10.72598, + "name": "Oslo", + "phone": "", + "region": "europe" + }, + { + "address": "8 Rue de Londres\n75009 Paris\nFrance", + "id": "paris", + "image": "https://lh3.googleusercontent.com/GHZlAB7t3toRGww1NJ6ZC2IpvR0jkgqFkQ0ZvM02dmQWt6fiHIKJZ7Eova959UD0PAapPE2r2TYMe3-dE3jGDgEoqHch0qyjAKvPENc", + "lat": 48.8771, + "lng": 2.33, + "name": "Paris", + "phone": "", + "region": "europe" + }, + { + "address": "6425 Penn Avenue\nPittsburgh, PA 15206\nUnited States", + "id": "pittsburgh", + "image": "https://lh3.googleusercontent.com/47kJwc4CR6oGOI2l_su5CJHnEWkrUZlz7LZRGXHgF71xa-0gJc8qCBhnsNoigcNEGFfBpb3y5AxVXJP_TxvHtgUgTrU8zmBm3Two7w", + "lat": 40.45716, + "lng": -79.916596, + "name": "Pittsburgh", + "phone": "+1 412-345-6700", + "region": "north-america" + }, + { + "address": "12422 W. Bluff Creek Drive\nPlaya Vista, CA 90094\nUnited States", + "id": "playa-vista", + "image": "https://lh3.googleusercontent.com/xnHVNI6bCcQxJyLV6sG3op8PlJcT9XgMAGmHrXtj5axhCZPH7Tbc9Ppjb2gTCtGbKmilT17B0dKzczOJh9JANh8Wwz0SXH0pEqCOkQ", + "lat": 33.97684, + "lng": -118.407244, + "name": "Playa Vista", + "phone": "", + "region": "north-america" + }, + { + "address": "Wells Fargo Building, 309 SW 6th Ave\nPortland, OR 97204\nUnited States", + "id": "portland", + "image": "https://lh3.googleusercontent.com/FMeFmwWFZJD02kj0H73t5v8NPrVOecVxuCl9cA-vLiXgaXErYQxmMXJKvvROgwSNvgPdmRZ4-GQuub74p0dDwJgY37vBNN2vgx7Utw", + "lat": 45.521622, + "lng": -122.677458, + "name": "Portland", + "phone": "", + "region": "north-america" + }, + { + "address": "Stroupeznickeho str. 3191/17\nPrague, Czech Republic\n150 00", + "id": "prague", + "image": "https://lh3.googleusercontent.com/jVNKH2mzDQ4Zu1-1G80-nDvLHYE9dmeetv43WG3zo7-dQWJoX1ghtXvviZHDLRG-ScqA804I2guuExY-8pkzIdkYlU28QGOB8Jkkiw", + "lat": 50.070259, + "lng": 14.402642, + "name": "Prague", + "phone": "", + "region": "europe" + }, + { + "address": "1600 Seaport Boulevard\nRedwood City, CA 94063\nUnited States", + "id": "redwood-city", + "image": "https://lh3.googleusercontent.com/a7GCRT1go5jQzEQj--A-kq98pURYsO4cTCJPj6azEev7za4Y__Kd3E_khFyn5uxRtPC0Co_ZxzQtqrlXeOSNey8fOSV4pK0ffzSW5A", + "lat": 37.512171, + "lng": -122.201178, + "name": "Redwood City", + "phone": "", + "region": "north-america" + }, + { + "address": "1875 Explorer Street \n10th Floor\nReston, VA 20190\nUnited States", + "id": "reston", + "image": "https://lh3.googleusercontent.com/4WuJCZlLflcQjsyhsGX3VSGDEVmC0Ljq291ECgVk3nN89ppnhSbdQIRI1I1-qh5YEf0Yicdc6amuqKz7oAdgLvQoNBrM9Zh3BcUwSw", + "lat": 38.958309, + "lng": -77.359795, + "name": "Reston", + "phone": "+1 202-370-5600", + "region": "north-america" + }, + { + "address": "901 Cherry Avenue\nSan Bruno, CA 94066\nUnited States", + "id": "san-bruno", + "image": "https://lh3.googleusercontent.com/zcy-Un_QDZfx7nTlImk-jCocxSUjQAQ4SS0eVdBuNRZz3Nyb5WK_2oGwYpnBEdqjIcv_b-umq_akpWBEylaEp-wXk3pj9-gu6Ko9Igs", + "lat": 37.62816, + "lng": -122.426491, + "name": "San Bruno", + "phone": "", + "region": "north-america" + }, + { + "address": "6420 Sequence Dr \nSuite 400\nSan Diego, CA 92121\nUnited States", + "id": "san-diego", + "image": "https://lh3.googleusercontent.com/RgGUUE3ra1j-mQIH8vp6an37hlwduD8uVnaCv8ivo5mX6ekdnZYd0-hlQ1hpQzV0ZgPk7y8h60oWy5MK5VF48ozZMYRXnh1ddJjuVGo", + "lat": 32.90961, + "lng": -117.181899, + "name": "San Diego", + "phone": "+1 858-239-4000", + "region": "north-america" + }, + { + "address": "345 Spear Street\nSan Francisco, CA 94105\nUnited States", + "id": "san-francisco", + "image": "https://lh3.googleusercontent.com/OC_0_XdXLar-ytOETAv3uwRGfnLABSRu66hqLQpLrwIhqInPD6ccdZSEu_d5S8wmjc1knb9OM7yNh2K7hoGznvKZOgFlvrxJesd7mQ", + "lat": 37.789972, + "lng": -122.390013, + "name": "San Francisco", + "phone": "+1 415-736-0000", + "region": "north-america" + }, + { + "address": "Costanera Sur Rio 2730 \nLas Condes, Santiago\nChile", + "id": "santiago", + "image": "https://lh3.googleusercontent.com/KrMbZzxFsAcNmYg8BQL_qBAekN1bNNJGo1aar8nkFhYXYDYOBmwJc2x1XElkDdIqLdedU5V7QKTGxXne8-f-qAW_bOy1FUqmJ8JM", + "lat": -33.413383, + "lng": -70.605665, + "name": "Santiago", + "phone": "", + "region": "latin-america" + }, + { + "address": "Av. Brigadeiro Faria Lima, 3477 \nS\u00e3o Paulo\n04538-133, Brazil", + "id": "sao-paulo", + "image": "https://lh3.googleusercontent.com/MwcGyEZBKkmoycVLcpl_U3gdIJBoWDU8u2kUNq57DmZVkWDyraoaZyQC0HOiFQvNHjVugEiVTWsy-poAsNfDLoSkJ5RoTBi1Hpd4GcI", + "lat": -23.586479, + "lng": -46.682078, + "name": "Sao Paulo", + "phone": "", + "region": "latin-america" + }, + { + "address": "601 N. 34th Street\nSeattle, WA 98103\nUnited States", + "id": "seattle", + "image": "https://lh3.googleusercontent.com/pNaRyPV3SkqsVvmdmN0sC-viBupr-41tZM3_cpSNH_3Zdy826gIhM0zHfoowA6SCkcsOkUxDvJ8wG5CodorohisOgR9q_QE7wH1ua-M", + "lat": 47.649316, + "lng": -122.350629, + "name": "Seattle", + "phone": "+1 206-876-1800", + "region": "north-america" + }, + { + "address": "Google Korea LLC.\n22nd Floor, Gangnam Finance Centre\n152 Teheran-ro, Gangnam-gu\nSeoul 06236\nSouth Korea", + "id": "seoul", + "image": "https://lh3.googleusercontent.com/i8rfvJIUNpLBkmWWSoetUzFGHUd_RaulLh8F3EHme3FMTUtDs8EVWsrFLuaemh1Zd60p5ndCcKq8-ZQN8eibbua-YNzlzQ8AKtHFzrQ", + "lat": 37.500295, + "lng": 127.036843, + "name": "Seoul", + "phone": "+82-2-531-9000", + "region": "asia-pacific" + }, + { + "address": "100 Century Avenue, Pudong\nShanghai 200120\nChina", + "id": "shanghai", + "image": "https://lh3.googleusercontent.com/wFCKLAJvrAoE_GiXqRNa0w4Rsr0iY_SyMGbO2jnIhLXGanYs1c5_BPE8TxQJw-e14uaLDHjY772V-Vv-Kf3GmrIRSlHjoV9yD339wRQ", + "lat": 31.23464, + "lng": 121.507662, + "name": "Shanghai", + "phone": "+86-21-6133-7666", + "region": "asia-pacific" + }, + { + "address": "70 Pasir Panjang Road, #03-71, \nMapletree Business City \nSingapore 117371", + "id": "singapore", + "image": "https://lh3.googleusercontent.com/--5H57B8aG4-DX9s79Spo3ygrsI9NMFnZo1uTZzs5s5AeeOvmiy81k__tu9r7JbRTTLzryK-oUy0UREclmD_qfV81VvaT4K9jJa8gg", + "lat": 1.276466, + "lng": 103.798965, + "name": "Singapore", + "phone": "+65 6521-8000", + "region": "asia-pacific" + }, + { + "address": "Kungsbron 2 \n111 22 Stockholm\nSweden", + "id": "stockholm", + "image": "https://lh3.googleusercontent.com/Q2016qdodQKowCyzfN14RLYERc2IplyM2FzJvj0kzbW4eLXnIxoFF1eZMc_CwtodxbpyfhfebUrawHtIgFb2kh9-EQnhcaHXpV0Fnw", + "lat": 59.333432, + "lng": 18.054619, + "name": "Stockholm", + "phone": "", + "region": "europe" + }, + { + "address": "803 11th Avenue\nSunnyvale, CA 94089\nUnited States", + "id": "sunnyvale", + "image": "https://lh3.googleusercontent.com/xd1Z3wr4cee9gtKQSnrOd-NWjc6UTwpwngElt4pkqukzOf-l0hrgQuRRBzvSjqmF4w1ZAHR1I12grFa5Zhqd9-7dKUitPtpMg51Zrf8", + "lat": 37.403694, + "lng": -122.031583, + "name": "Sunnyvale", + "phone": "", + "region": "north-america" + }, + { + "address": "48 Pirrama Road\nSydney, NSW 2009\nAustralia ", + "id": "sydney", + "image": "https://lh3.googleusercontent.com/03Hp4ZwQHs_rWLEWQtrOc62hEHzffD_uoZFCbo56eoeLyZ3L89-Fy5Dd8WcmrGFGK31QC_hZqzuU7f9QhxqjckE7BSLo_arwWjCH1w", + "lat": -33.866638, + "lng": 151.195672, + "name": "Sydney", + "phone": "+61 2 9374 4000", + "region": "asia-pacific" + }, + { + "address": "No. 7 XinYi Road Section 5, Taipei\nTaiwan", + "id": "taipei", + "image": "https://lh3.googleusercontent.com/h19TQz36F4jY_ZfQxuP5F-THZbl4nAIGz473uFfLqzD_6kpw-r3b6M_Wbna5QvvymqZ-wdnhkLCRt63Pypnc9GyawNqMlQwM1_BYbg", + "lat": 25.033447, + "lng": 121.564901, + "name": "Taipei", + "phone": "+886 2 8729 6000", + "region": "asia-pacific" + }, + { + "address": "Yigal Alon 98\nTel Aviv, 6789141\nIsrael ", + "id": "tel-aviv", + "image": "https://lh3.googleusercontent.com/BZxU1dJCWFmtVeBqVYFC8SmSzX4CCzO5eedosW1s7sv2b2HoKwEno15vICfeQdsc_BGIaysKb8VyF64IB9hbFzMZ_MlQDJhP7kfF", + "lat": 32.070043, + "lng": 34.794087, + "name": "Tel Aviv", + "phone": "+972-74-746-6453", + "region": "africa-middle-east" + }, + { + "address": "Roppongi Hills Mori Tower\n6-10-1 Roppongi\nMinato-ku, Tokyo 106-6126\nJapan", + "id": "tokyo-rpg", + "image": "https://lh3.googleusercontent.com/i7PqriAmbeqB7KQ4h_8K0T60DD-oAoz7bvvjlB4vx2267l9QHfKBHb7WUMSutYd88Xu4TRwWqIquL05bYcpTyU_58gWp8Ja2Xo2zOfM", + "lat": 35.66047, + "lng": 139.729231, + "name": "Tokyo \u2013 RPG", + "phone": "+81-3-6384-9000", + "region": "asia-pacific" + }, + { + "address": "Shibuya Stream\n3-21-3 Shibuya\nShibuya-ku, Tokyo 150-0002\nJapan", + "id": "tokyo-strm", + "image": "https://lh3.googleusercontent.com/GzaUJcEqlixelFX8dg1qcLPwAb4RpEXr3JMxyxpgSTWL17Gso_aq3NeMtQPES7f_JdIrGr9YTBSt08XgNAeoLSkxr3Ue_J0cW3VMCw", + "lat": 35.6572564, + "lng": 139.7028246, + "name": "Tokyo \u2013 STRM", + "phone": "+81-3-6384-9000", + "region": "asia-pacific" + }, + { + "address": "111 Richmond Street West\nToronto, ON M5H 2G4\nCanada", + "id": "toronto", + "image": "https://lh3.googleusercontent.com/vZUQcWL3r_bsHBRP-Z0XfhMxjlSAAe9sZLlw5rbBzqsM6w-WVjnTZGaw3w-PkqkhHPy0x-2Xzg_gishFkVjn5r3epKifwhmRc741", + "lat": 43.650477, + "lng": -79.383858, + "name": "Toronto", + "phone": "416-915-8200", + "region": "north-america" + }, + { + "address": "Graben 19\n1010 Wien\nAustria", + "id": "vienna", + "image": "https://lh3.googleusercontent.com/roYQN_TnYd_fP0FCdZxA6lMLbp-h7PyPlDBKwVdfVWKkOCxmLjFHqm-n7hrcakcXHS1FzjXW5XWF_MApzuGIrvy2cewCYd7Z9q5MUw", + "lat": 48.209351, + "lng": 16.368419, + "name": "Vienna", + "phone": "", + "region": "europe" + }, + { + "address": "Emilii Plater 53\n00-113 Warsaw\nPoland ", + "id": "warsaw", + "image": "https://lh3.googleusercontent.com/jTf0m2s5A2qS25ArE3x6Tl1KXtpv3JmHIfcBuw7f-JHsTR0tMiyUVeHO1wBeJ2eEGcAWUbTe3b9B8iP8wyL-TROS5zxmMofMHsnf", + "lat": 52.233448, + "lng": 21.001668, + "name": "Warsaw", + "phone": "+48 22 207 19 00", + "region": "europe" + }, + { + "address": "25 Massachusetts Avenue\nWashington DC, 20001\nUnited States", + "id": "washington-dc", + "image": "https://lh3.googleusercontent.com/6rKu8CCH6nMVKjwpnxDlgf_Sdlc7jk83QBVhoLikzEyibYTZkvNPn-QPCJTv3AkjUYf2dHcE15UvPsrg18xNd4R8_eg3b-yn01yXgQ", + "lat": 38.898337, + "lng": -77.010286, + "name": "Washington DC", + "phone": " (202) 346-1100", + "region": "north-america" + }, + { + "address": "Gen. Jozefa Bema nr 2\n50-265 Wroclaw\nPoland", + "id": "wroclaw", + "image": "https://lh3.googleusercontent.com/Or6dY4MCUCbMnDv4kG8J7u-QTsWhvbqbAbMN9Vp38aJAS7ec7A39gYddcEGbrwd_veFeZo2phypqc1ABk20PZ9jCVxZfuNGYS7j3LDc", + "lat": 51.117687, + "lng": 17.041737, + "name": "Wroclaw", + "phone": "+48 (71) 73 41 000", + "region": "europe" + }, + { + "address": "Brandschenkestrasse 110\n8002 Z\u00fcrich\nSwitzerland", + "id": "zurich", + "image": "https://lh3.googleusercontent.com/kmEsDEYzbMlluwDPYkeEEBpAvL9MJbXZR3hD3uettOqE8T7lbXvV508j4d4QngB7iwYZa8YYlXiVnGWfZ4ZvTJbputGXsfxrLGhD3tI", + "lat": 47.365063, + "lng": 8.524425, + "name": "Zurich", + "phone": "+41 44 668 18 00", + "region": "europe" + } + ], + "regions": [ + { + "coords": { + "lat": 2.9660291, + "lng": 1.3271339 + }, + "id": "africa-middle-east", + "name": "Africa & Middle East", + "zoom": 3.0 + }, + { + "coords": { + "lat": 0.0524811, + "lng": 127.6560787 + }, + "id": "asia-pacific", + "name": "Asia Pacific", + "zoom": 3.0 + }, + { + "coords": { + "lat": 46.1352815, + "lng": 7.4033438 + }, + "id": "europe", + "name": "Europe", + "zoom": 4.0 + }, + { + "coords": { + "lat": -17.5554497, + "lng": -99.2316195 + }, + "id": "latin-america", + "name": "Latin America", + "zoom": 3.0 + }, + { + "coords": { + "lat": 45.7128252, + "lng": -97.1547448 + }, + "id": "north-america", + "name": "North America", + "zoom": 4.0 + } + ] +} diff --git a/google_maps/ios/.gitignore b/google_maps/ios/.gitignore new file mode 100644 index 000000000..7a7f9873a --- /dev/null +++ b/google_maps/ios/.gitignore @@ -0,0 +1,34 @@ +**/dgph +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/ephemeral/ +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 diff --git a/google_maps/ios/Flutter/AppFrameworkInfo.plist b/google_maps/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 000000000..9625e105d --- /dev/null +++ b/google_maps/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 11.0 + + diff --git a/google_maps/ios/Flutter/Debug.xcconfig b/google_maps/ios/Flutter/Debug.xcconfig new file mode 100644 index 000000000..ec97fc6f3 --- /dev/null +++ b/google_maps/ios/Flutter/Debug.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig" +#include "Generated.xcconfig" diff --git a/google_maps/ios/Flutter/Release.xcconfig b/google_maps/ios/Flutter/Release.xcconfig new file mode 100644 index 000000000..c4855bfe2 --- /dev/null +++ b/google_maps/ios/Flutter/Release.xcconfig @@ -0,0 +1,2 @@ +#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig" +#include "Generated.xcconfig" diff --git a/google_maps/ios/Podfile b/google_maps/ios/Podfile new file mode 100644 index 000000000..54d087f94 --- /dev/null +++ b/google_maps/ios/Podfile @@ -0,0 +1,44 @@ +# Google Maps SDK requires platform version 14 +platform :ios, '14.0' + +# CocoaPods analytics sends network stats synchronously affecting flutter build latency. +ENV['COCOAPODS_DISABLE_STATS'] = 'true' + +project 'Runner', { + 'Debug' => :debug, + 'Profile' => :release, + 'Release' => :release, +} + +def flutter_root + generated_xcode_build_settings_path = File.expand_path(File.join('..', 'Flutter', 'Generated.xcconfig'), __FILE__) + unless File.exist?(generated_xcode_build_settings_path) + raise "#{generated_xcode_build_settings_path} must exist. If you're running pod install manually, make sure flutter pub get is executed first" + end + + File.foreach(generated_xcode_build_settings_path) do |line| + matches = line.match(/FLUTTER_ROOT\=(.*)/) + return matches[1].strip if matches + end + raise "FLUTTER_ROOT not found in #{generated_xcode_build_settings_path}. Try deleting Generated.xcconfig, then run flutter pub get" +end + +require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root) + +flutter_ios_podfile_setup + +target 'Runner' do + use_frameworks! + use_modular_headers! + + flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end +end + +post_install do |installer| + installer.pods_project.targets.each do |target| + flutter_additional_ios_build_settings(target) + end +end diff --git a/google_maps/ios/Runner.xcodeproj/project.pbxproj b/google_maps/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 000000000..fbbe3e496 --- /dev/null +++ b/google_maps/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,724 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + AF1E4B6CBD38B01355478777 /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 08C4812F6709F560C59F3FCD /* Pods_RunnerTests.framework */; }; + DD9B56340B35B0842E89B2F6 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 55E455A50CB23D09F40A1D97 /* Pods_Runner.framework */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 08C4812F6709F560C59F3FCD /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 55E455A50CB23D09F40A1D97 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 64610D225D90DA8A981B927A /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 7DA65C1178AD96F28D7E762D /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + D1388638FBFCC5F8A102D8FD /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + E3AE1957338395D6D0AD3932 /* Pods-RunnerTests.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.profile.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.profile.xcconfig"; sourceTree = ""; }; + FC7723BB480EA33966A34168 /* Pods-RunnerTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.release.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.release.xcconfig"; sourceTree = ""; }; + FF6B98AB1191B051A095CDAE /* Pods-RunnerTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-RunnerTests.debug.xcconfig"; path = "Target Support Files/Pods-RunnerTests/Pods-RunnerTests.debug.xcconfig"; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + DD9B56340B35B0842E89B2F6 /* Pods_Runner.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 9BBD5AE1C4A93B1427B2EC99 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + AF1E4B6CBD38B01355478777 /* Pods_RunnerTests.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 226331665C060508B487D264 /* Pods */ = { + isa = PBXGroup; + children = ( + D1388638FBFCC5F8A102D8FD /* Pods-Runner.debug.xcconfig */, + 64610D225D90DA8A981B927A /* Pods-Runner.release.xcconfig */, + 7DA65C1178AD96F28D7E762D /* Pods-Runner.profile.xcconfig */, + FF6B98AB1191B051A095CDAE /* Pods-RunnerTests.debug.xcconfig */, + FC7723BB480EA33966A34168 /* Pods-RunnerTests.release.xcconfig */, + E3AE1957338395D6D0AD3932 /* Pods-RunnerTests.profile.xcconfig */, + ); + name = Pods; + path = Pods; + sourceTree = ""; + }; + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, + 226331665C060508B487D264 /* Pods */, + DDFD2DC1CFC42662DAF0FAFC /* Frameworks */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; + DDFD2DC1CFC42662DAF0FAFC /* Frameworks */ = { + isa = PBXGroup; + children = ( + 55E455A50CB23D09F40A1D97 /* Pods_Runner.framework */, + 08C4812F6709F560C59F3FCD /* Pods_RunnerTests.framework */, + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + FDA6296839960C452DD4A64C /* [CP] Check Pods Manifest.lock */, + 331C807D294A63A400263BE5 /* Sources */, + 331C807F294A63A400263BE5 /* Resources */, + 9BBD5AE1C4A93B1427B2EC99 /* Frameworks */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 857F6A9BAF9DA553BFDE4EB5 /* [CP] Check Pods Manifest.lock */, + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + 17B6E68B22F32C899B6DAF59 /* [CP] Copy Pods Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1430; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 17B6E68B22F32C899B6DAF59 /* [CP] Copy Pods Resources */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist", + ); + name = "[CP] Copy Pods Resources"; + outputFileListPaths = ( + "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n"; + showEnvVarsInLog = 0; + }; + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 857F6A9BAF9DA553BFDE4EB5 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; + FDA6296839960C452DD4A64C /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-RunnerTests-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = TC87DMJLQP; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.googleMapsInFlutter; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = FF6B98AB1191B051A095CDAE /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.googleMapsInFlutter.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = FC7723BB480EA33966A34168 /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.googleMapsInFlutter.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E3AE1957338395D6D0AD3932 /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.googleMapsInFlutter.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = TC87DMJLQP; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.googleMapsInFlutter; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = TC87DMJLQP; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.googleMapsInFlutter; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/google_maps/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/google_maps/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..919434a62 --- /dev/null +++ b/google_maps/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/google_maps/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/google_maps/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/google_maps/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/google_maps/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/google_maps/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 000000000..f9b0d7c5e --- /dev/null +++ b/google_maps/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/google_maps/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/google_maps/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 000000000..87131a09b --- /dev/null +++ b/google_maps/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/google_maps/ios/Runner.xcworkspace/contents.xcworkspacedata b/google_maps/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..21a3cc14c --- /dev/null +++ b/google_maps/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,10 @@ + + + + + + + diff --git a/google_maps/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/google_maps/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/google_maps/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/google_maps/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/google_maps/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 000000000..f9b0d7c5e --- /dev/null +++ b/google_maps/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/google_maps/ios/Runner/AppDelegate.swift b/google_maps/ios/Runner/AppDelegate.swift new file mode 100644 index 000000000..6861f5a96 --- /dev/null +++ b/google_maps/ios/Runner/AppDelegate.swift @@ -0,0 +1,18 @@ +import UIKit +import Flutter +import GoogleMaps + +@UIApplicationMain +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + + // TODO: Add your Google Maps API key + GMSServices.provideAPIKey("YOUR-API-KEY") + + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000..d36b1fab2 --- /dev/null +++ b/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 000000000..dc9ada472 Binary files /dev/null and b/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ diff --git a/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png new file mode 100644 index 000000000..7353c41ec Binary files /dev/null and b/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 000000000..797d452e4 Binary files /dev/null and b/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 000000000..6ed2d933e Binary files /dev/null and b/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 000000000..4cd7b0099 Binary files /dev/null and b/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 000000000..fe730945a Binary files /dev/null and b/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png new file mode 100644 index 000000000..321773cd8 Binary files /dev/null and b/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png new file mode 100644 index 000000000..797d452e4 Binary files /dev/null and b/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 000000000..502f463a9 Binary files /dev/null and b/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 000000000..0ec303439 Binary files /dev/null and b/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 000000000..0ec303439 Binary files /dev/null and b/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 000000000..e9f5fea27 Binary files /dev/null and b/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 000000000..84ac32ae7 Binary files /dev/null and b/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png new file mode 100644 index 000000000..8953cba09 Binary files /dev/null and b/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 000000000..0467bf12a Binary files /dev/null and b/google_maps/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/google_maps/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/google_maps/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 000000000..0bedcf2fd --- /dev/null +++ b/google_maps/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/google_maps/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/google_maps/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100644 index 000000000..9da19eaca Binary files /dev/null and b/google_maps/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png differ diff --git a/google_maps/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/google_maps/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 000000000..9da19eaca Binary files /dev/null and b/google_maps/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png differ diff --git a/google_maps/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/google_maps/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 000000000..9da19eaca Binary files /dev/null and b/google_maps/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png differ diff --git a/google_maps/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/google_maps/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 000000000..89c2725b7 --- /dev/null +++ b/google_maps/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/google_maps/ios/Runner/Base.lproj/LaunchScreen.storyboard b/google_maps/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 000000000..f2e259c7c --- /dev/null +++ b/google_maps/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/google_maps/ios/Runner/Base.lproj/Main.storyboard b/google_maps/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 000000000..f3c28516f --- /dev/null +++ b/google_maps/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/google_maps/ios/Runner/Info.plist b/google_maps/ios/Runner/Info.plist new file mode 100644 index 000000000..3d7ffa12c --- /dev/null +++ b/google_maps/ios/Runner/Info.plist @@ -0,0 +1,51 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Google Maps In Flutter + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + google_maps_in_flutter + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + + + diff --git a/google_maps/ios/Runner/Runner-Bridging-Header.h b/google_maps/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 000000000..308a2a560 --- /dev/null +++ b/google_maps/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/google_maps/ios/RunnerTests/RunnerTests.swift b/google_maps/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 000000000..86a7c3b1b --- /dev/null +++ b/google_maps/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/google_maps/lib/main.dart b/google_maps/lib/main.dart new file mode 100644 index 000000000..07330a64f --- /dev/null +++ b/google_maps/lib/main.dart @@ -0,0 +1,69 @@ +/* + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import 'package:flutter/material.dart'; +import 'package:google_maps_flutter/google_maps_flutter.dart'; + +void main() => runApp(const MyApp()); + +class MyApp extends StatefulWidget { + const MyApp({super.key}); + + @override + State createState() => _MyAppState(); +} + +class _MyAppState extends State { + late GoogleMapController mapController; + + final LatLng _center = const LatLng(-33.86, 151.20); + + void _onMapCreated(GoogleMapController controller) { + mapController = controller; + } + + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Flutter Demo', + theme: ThemeData( + primarySwatch: Colors.green, + useMaterial3: true, + ), + home: Scaffold( + appBar: AppBar( + title: const Text('Sydney'), backgroundColor: Colors.green[700]), + body: GoogleMap( + onMapCreated: _onMapCreated, + initialCameraPosition: CameraPosition( + target: _center, + zoom: 11.0, + ), + markers: { + const Marker( + markerId: MarkerId('Sydney'), + position: LatLng(-33.86, 151.20), + infoWindow: InfoWindow( + title: "Sydney", + snippet: "Capital of New South Wales", + ), + ) + }, + ), + ), + ); + } +} diff --git a/google_maps/lib/src/locations.dart b/google_maps/lib/src/locations.dart new file mode 100644 index 000000000..8b36f9344 --- /dev/null +++ b/google_maps/lib/src/locations.dart @@ -0,0 +1,121 @@ +/* + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import 'dart:convert'; + +import 'package:flutter/foundation.dart'; +import 'package:flutter/services.dart' show rootBundle; +import 'package:http/http.dart' as http; +import 'package:json_annotation/json_annotation.dart'; + +part 'locations.g.dart'; + +@JsonSerializable() +class LatLng { + LatLng({ + required this.lat, + required this.lng, + }); + + factory LatLng.fromJson(Map json) => _$LatLngFromJson(json); + Map toJson() => _$LatLngToJson(this); + + final double lat; + final double lng; +} + +@JsonSerializable() +class Region { + Region({ + required this.coords, + required this.id, + required this.name, + required this.zoom, + }); + + factory Region.fromJson(Map json) => _$RegionFromJson(json); + Map toJson() => _$RegionToJson(this); + + final LatLng coords; + final String id; + final String name; + final double zoom; +} + +@JsonSerializable() +class Office { + Office({ + required this.address, + required this.id, + required this.image, + required this.lat, + required this.lng, + required this.name, + required this.phone, + required this.region, + }); + + factory Office.fromJson(Map json) => _$OfficeFromJson(json); + Map toJson() => _$OfficeToJson(this); + + final String address; + final String id; + final String image; + final double lat; + final double lng; + final String name; + final String phone; + final String region; +} + +@JsonSerializable() +class Locations { + Locations({ + required this.offices, + required this.regions, + }); + + factory Locations.fromJson(Map json) => + _$LocationsFromJson(json); + Map toJson() => _$LocationsToJson(this); + + final List offices; + final List regions; +} + +Future getGoogleOffices() async { + const googleLocationsURL = 'https://about.google/static/data/locations.json'; + + // Retrieve the locations of Google offices + try { + final response = await http.get(Uri.parse(googleLocationsURL)); + if (response.statusCode == 200) { + return Locations.fromJson( + json.decode(response.body) as Map); + } + } catch (e) { + if (kDebugMode) { + print(e); + } + } + + // Fallback for when the above HTTP request fails. + return Locations.fromJson( + json.decode( + await rootBundle.loadString('assets/locations.json'), + ) as Map, + ); +} diff --git a/google_maps/lib/src/locations.g.dart b/google_maps/lib/src/locations.g.dart new file mode 100644 index 000000000..64cd86d81 --- /dev/null +++ b/google_maps/lib/src/locations.g.dart @@ -0,0 +1,83 @@ +/* + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +// GENERATED CODE - DO NOT MODIFY BY HAND + +part of 'locations.dart'; + +// ************************************************************************** +// JsonSerializableGenerator +// ************************************************************************** + +LatLng _$LatLngFromJson(Map json) => LatLng( + lat: (json['lat'] as num).toDouble(), + lng: (json['lng'] as num).toDouble(), + ); + +Map _$LatLngToJson(LatLng instance) => { + 'lat': instance.lat, + 'lng': instance.lng, + }; + +Region _$RegionFromJson(Map json) => Region( + coords: LatLng.fromJson(json['coords'] as Map), + id: json['id'] as String, + name: json['name'] as String, + zoom: (json['zoom'] as num).toDouble(), + ); + +Map _$RegionToJson(Region instance) => { + 'coords': instance.coords, + 'id': instance.id, + 'name': instance.name, + 'zoom': instance.zoom, + }; + +Office _$OfficeFromJson(Map json) => Office( + address: json['address'] as String, + id: json['id'] as String, + image: json['image'] as String, + lat: (json['lat'] as num).toDouble(), + lng: (json['lng'] as num).toDouble(), + name: json['name'] as String, + phone: json['phone'] as String, + region: json['region'] as String, + ); + +Map _$OfficeToJson(Office instance) => { + 'address': instance.address, + 'id': instance.id, + 'image': instance.image, + 'lat': instance.lat, + 'lng': instance.lng, + 'name': instance.name, + 'phone': instance.phone, + 'region': instance.region, + }; + +Locations _$LocationsFromJson(Map json) => Locations( + offices: (json['offices'] as List) + .map((e) => Office.fromJson(e as Map)) + .toList(), + regions: (json['regions'] as List) + .map((e) => Region.fromJson(e as Map)) + .toList(), + ); + +Map _$LocationsToJson(Locations instance) => { + 'offices': instance.offices, + 'regions': instance.regions, + }; diff --git a/google_maps/pubspec.yaml b/google_maps/pubspec.yaml new file mode 100644 index 000000000..af43831fd --- /dev/null +++ b/google_maps/pubspec.yaml @@ -0,0 +1,28 @@ +name: google_maps_in_flutter +description: A new Flutter project. +publish_to: 'none' +version: 1.0.0+1 + +environment: + sdk: ^3.1.0 + +dependencies: + flutter: + sdk: flutter + cupertino_icons: ^1.0.2 + google_maps_flutter: ^2.4.0 + http: ^1.0.0 + json_annotation: ^4.7.0 + json_serializable: ^6.5.4 + +dev_dependencies: + analysis_defaults: + path: ../analysis_defaults + flutter_test: + sdk: flutter + build_runner: ^2.3.2 + +flutter: + uses-material-design: true + assets: + - assets/locations.json diff --git a/google_maps/test/widget_test.dart b/google_maps/test/widget_test.dart new file mode 100644 index 000000000..f70631097 --- /dev/null +++ b/google_maps/test/widget_test.dart @@ -0,0 +1,26 @@ +/* + * Copyright 2019 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import 'package:flutter_test/flutter_test.dart'; + +import 'package:google_maps_in_flutter/main.dart'; + +void main() { + testWidgets('Do nothing test', (tester) async { + // Build our app and trigger a frame. + await tester.pumpWidget(const MyApp()); + }); +} diff --git a/google_maps/web/favicon.png b/google_maps/web/favicon.png new file mode 100644 index 000000000..8aaa46ac1 Binary files /dev/null and b/google_maps/web/favicon.png differ diff --git a/google_maps/web/icons/Icon-192.png b/google_maps/web/icons/Icon-192.png new file mode 100644 index 000000000..b749bfef0 Binary files /dev/null and b/google_maps/web/icons/Icon-192.png differ diff --git a/google_maps/web/icons/Icon-512.png b/google_maps/web/icons/Icon-512.png new file mode 100644 index 000000000..88cfd48df Binary files /dev/null and b/google_maps/web/icons/Icon-512.png differ diff --git a/google_maps/web/icons/Icon-maskable-192.png b/google_maps/web/icons/Icon-maskable-192.png new file mode 100644 index 000000000..eb9b4d76e Binary files /dev/null and b/google_maps/web/icons/Icon-maskable-192.png differ diff --git a/google_maps/web/icons/Icon-maskable-512.png b/google_maps/web/icons/Icon-maskable-512.png new file mode 100644 index 000000000..d69c56691 Binary files /dev/null and b/google_maps/web/icons/Icon-maskable-512.png differ diff --git a/google_maps/web/index.html b/google_maps/web/index.html new file mode 100644 index 000000000..c088850eb --- /dev/null +++ b/google_maps/web/index.html @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + google_maps_in_flutter + + + + + + + + + + diff --git a/google_maps/web/manifest.json b/google_maps/web/manifest.json new file mode 100644 index 000000000..44ae8337f --- /dev/null +++ b/google_maps/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "google_maps_in_flutter", + "short_name": "google_maps_in_flutter", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/infinite_list/.metadata b/infinite_list/.metadata index d680382e1..620e877d2 100644 --- a/infinite_list/.metadata +++ b/infinite_list/.metadata @@ -1,11 +1,11 @@ # This file tracks properties of this Flutter project. # Used by Flutter tool to assess capabilities and perform upgrades etc. # -# This file should be version controlled. +# This file should be version controlled and should not be manually edited. version: - revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - channel: beta + revision: "ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a" + channel: "stable" project_type: app @@ -13,26 +13,26 @@ project_type: app migration: platforms: - platform: root - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a - platform: android - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a - platform: ios - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a - platform: linux - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a - platform: macos - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a - platform: web - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a - platform: windows - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a # User provided section diff --git a/infinite_list/analysis_options.yaml b/infinite_list/analysis_options.yaml index 5e2133eb6..13d6fe105 100644 --- a/infinite_list/analysis_options.yaml +++ b/infinite_list/analysis_options.yaml @@ -1 +1 @@ -include: ../analysis_options.yaml +include: package:analysis_defaults/flutter.yaml diff --git a/infinite_list/android/app/build.gradle b/infinite_list/android/app/build.gradle index 248a1330b..2bc213d1e 100644 --- a/infinite_list/android/app/build.gradle +++ b/infinite_list/android/app/build.gradle @@ -1,3 +1,9 @@ +plugins { + id "com.android.application" + id "kotlin-android" + id "dev.flutter.flutter-gradle-plugin" +} + def localProperties = new Properties() def localPropertiesFile = rootProject.file('local.properties') if (localPropertiesFile.exists()) { @@ -6,11 +12,6 @@ if (localPropertiesFile.exists()) { } } -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - def flutterVersionCode = localProperties.getProperty('flutter.versionCode') if (flutterVersionCode == null) { flutterVersionCode = '1' @@ -21,11 +22,8 @@ if (flutterVersionName == null) { flutterVersionName = '1.0' } -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - android { + namespace "dev.flutter.infinite_list" compileSdkVersion flutter.compileSdkVersion ndkVersion flutter.ndkVersion @@ -66,6 +64,4 @@ flutter { source '../..' } -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" -} +dependencies {} diff --git a/infinite_list/android/app/src/debug/AndroidManifest.xml b/infinite_list/android/app/src/debug/AndroidManifest.xml index 04dcd0cf7..399f6981d 100644 --- a/infinite_list/android/app/src/debug/AndroidManifest.xml +++ b/infinite_list/android/app/src/debug/AndroidManifest.xml @@ -1,5 +1,4 @@ - + diff --git a/infinite_list/windows/CMakeLists.txt b/infinite_list/windows/CMakeLists.txt index e976a2942..8334e0312 100644 --- a/infinite_list/windows/CMakeLists.txt +++ b/infinite_list/windows/CMakeLists.txt @@ -8,7 +8,7 @@ set(BINARY_NAME "infinite_list") # Explicitly opt in to modern CMake behaviors to avoid warnings with recent # versions of CMake. -cmake_policy(SET CMP0063 NEW) +cmake_policy(VERSION 3.14...3.25) # Define build configuration option. get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) @@ -52,6 +52,7 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) # Application build; see runner/CMakeLists.txt. add_subdirectory("runner") + # Generated plugin build rules, which manage building the plugins and adding # them to the application. include(flutter/generated_plugins.cmake) diff --git a/infinite_list/windows/runner/flutter_window.cpp b/infinite_list/windows/runner/flutter_window.cpp index b25e363ef..955ee3038 100644 --- a/infinite_list/windows/runner/flutter_window.cpp +++ b/infinite_list/windows/runner/flutter_window.cpp @@ -31,6 +31,11 @@ bool FlutterWindow::OnCreate() { this->Show(); }); + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + return true; } diff --git a/infinite_list/windows/runner/utils.cpp b/infinite_list/windows/runner/utils.cpp index f5bf9fa0f..b2b08734d 100644 --- a/infinite_list/windows/runner/utils.cpp +++ b/infinite_list/windows/runner/utils.cpp @@ -47,16 +47,17 @@ std::string Utf8FromUtf16(const wchar_t* utf16_string) { } int target_length = ::WideCharToMultiByte( CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, nullptr, 0, nullptr, nullptr); + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); std::string utf8_string; - if (target_length == 0 || target_length > utf8_string.max_size()) { + if (target_length <= 0 || target_length > utf8_string.max_size()) { return utf8_string; } utf8_string.resize(target_length); int converted_length = ::WideCharToMultiByte( CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, utf8_string.data(), - target_length, nullptr, nullptr); + input_length, utf8_string.data(), target_length, nullptr, nullptr); if (converted_length == 0) { return std::string(); } diff --git a/infinite_list/windows/runner/win32_window.cpp b/infinite_list/windows/runner/win32_window.cpp index 041a38554..60608d0fe 100644 --- a/infinite_list/windows/runner/win32_window.cpp +++ b/infinite_list/windows/runner/win32_window.cpp @@ -60,7 +60,7 @@ class WindowClassRegistrar { public: ~WindowClassRegistrar() = default; - // Returns the singleton registar instance. + // Returns the singleton registrar instance. static WindowClassRegistrar* GetInstance() { if (!instance_) { instance_ = new WindowClassRegistrar(); diff --git a/infinite_list/windows/runner/win32_window.h b/infinite_list/windows/runner/win32_window.h index c86632d8a..e901dde68 100644 --- a/infinite_list/windows/runner/win32_window.h +++ b/infinite_list/windows/runner/win32_window.h @@ -77,7 +77,7 @@ class Win32Window { // OS callback called by message pump. Handles the WM_NCCREATE message which // is passed when the non-client area is being created and enables automatic // non-client DPI scaling so that the non-client area automatically - // responsponds to changes in DPI. All other messages are handled by + // responds to changes in DPI. All other messages are handled by // MessageHandler. static LRESULT CALLBACK WndProc(HWND const window, UINT const message, diff --git a/ios_app_clip/analysis_options.yaml b/ios_app_clip/analysis_options.yaml index 5e2133eb6..13d6fe105 100644 --- a/ios_app_clip/analysis_options.yaml +++ b/ios_app_clip/analysis_options.yaml @@ -1 +1 @@ -include: ../analysis_options.yaml +include: package:analysis_defaults/flutter.yaml diff --git a/ios_app_clip/pubspec.yaml b/ios_app_clip/pubspec.yaml index dad1dd0de..e8dc223cb 100644 --- a/ios_app_clip/pubspec.yaml +++ b/ios_app_clip/pubspec.yaml @@ -6,7 +6,7 @@ publish_to: "none" # Remove this line if you wish to publish to pub.dev version: 1.0.0+1 environment: - sdk: ">=2.17.0-0 <3.0.0" + sdk: ^3.1.0 dependencies: flutter: @@ -16,8 +16,9 @@ dependencies: device_info: ^2.0.3 dev_dependencies: + analysis_defaults: + path: ../analysis_defaults flutter_test: sdk: flutter - flutter_lints: ^2.0.1 flutter: diff --git a/isolate_example/.metadata b/isolate_example/.metadata index 2ea1bd367..32f0967d3 100644 --- a/isolate_example/.metadata +++ b/isolate_example/.metadata @@ -1,11 +1,11 @@ # This file tracks properties of this Flutter project. # Used by Flutter tool to assess capabilities and perform upgrades etc. # -# This file should be version controlled. +# This file should be version controlled and should not be manually edited. version: - revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - channel: beta + revision: "ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a" + channel: "stable" project_type: app @@ -13,23 +13,23 @@ project_type: app migration: platforms: - platform: root - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a - platform: android - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a - platform: ios - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a - platform: linux - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a - platform: macos - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a - platform: windows - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a # User provided section diff --git a/isolate_example/analysis_options.yaml b/isolate_example/analysis_options.yaml index 5e2133eb6..13d6fe105 100644 --- a/isolate_example/analysis_options.yaml +++ b/isolate_example/analysis_options.yaml @@ -1 +1 @@ -include: ../analysis_options.yaml +include: package:analysis_defaults/flutter.yaml diff --git a/isolate_example/android/app/build.gradle b/isolate_example/android/app/build.gradle index 7189d2b9d..4c17dedd0 100644 --- a/isolate_example/android/app/build.gradle +++ b/isolate_example/android/app/build.gradle @@ -1,3 +1,9 @@ +plugins { + id "com.android.application" + id "kotlin-android" + id "dev.flutter.flutter-gradle-plugin" +} + def localProperties = new Properties() def localPropertiesFile = rootProject.file('local.properties') if (localPropertiesFile.exists()) { @@ -6,11 +12,6 @@ if (localPropertiesFile.exists()) { } } -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - def flutterVersionCode = localProperties.getProperty('flutter.versionCode') if (flutterVersionCode == null) { flutterVersionCode = '1' @@ -21,11 +22,8 @@ if (flutterVersionName == null) { flutterVersionName = '1.0' } -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - android { + namespace "dev.flutter.isolate_example" compileSdkVersion flutter.compileSdkVersion ndkVersion flutter.ndkVersion @@ -66,6 +64,4 @@ flutter { source '../..' } -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" -} +dependencies {} diff --git a/isolate_example/android/app/src/debug/AndroidManifest.xml b/isolate_example/android/app/src/debug/AndroidManifest.xml index 0d6a1d9d1..399f6981d 100644 --- a/isolate_example/android/app/src/debug/AndroidManifest.xml +++ b/isolate_example/android/app/src/debug/AndroidManifest.xml @@ -1,5 +1,4 @@ - + diff --git a/jsonexample/windows/CMakeLists.txt b/jsonexample/windows/CMakeLists.txt index bd0ac7e4b..418182ee9 100644 --- a/jsonexample/windows/CMakeLists.txt +++ b/jsonexample/windows/CMakeLists.txt @@ -8,7 +8,7 @@ set(BINARY_NAME "jsonexample") # Explicitly opt in to modern CMake behaviors to avoid warnings with recent # versions of CMake. -cmake_policy(SET CMP0063 NEW) +cmake_policy(VERSION 3.14...3.25) # Define build configuration option. get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) @@ -52,6 +52,7 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) # Application build; see runner/CMakeLists.txt. add_subdirectory("runner") + # Generated plugin build rules, which manage building the plugins and adding # them to the application. include(flutter/generated_plugins.cmake) diff --git a/jsonexample/windows/runner/flutter_window.cpp b/jsonexample/windows/runner/flutter_window.cpp index b25e363ef..955ee3038 100644 --- a/jsonexample/windows/runner/flutter_window.cpp +++ b/jsonexample/windows/runner/flutter_window.cpp @@ -31,6 +31,11 @@ bool FlutterWindow::OnCreate() { this->Show(); }); + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + return true; } diff --git a/jsonexample/windows/runner/utils.cpp b/jsonexample/windows/runner/utils.cpp index f5bf9fa0f..b2b08734d 100644 --- a/jsonexample/windows/runner/utils.cpp +++ b/jsonexample/windows/runner/utils.cpp @@ -47,16 +47,17 @@ std::string Utf8FromUtf16(const wchar_t* utf16_string) { } int target_length = ::WideCharToMultiByte( CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, nullptr, 0, nullptr, nullptr); + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); std::string utf8_string; - if (target_length == 0 || target_length > utf8_string.max_size()) { + if (target_length <= 0 || target_length > utf8_string.max_size()) { return utf8_string; } utf8_string.resize(target_length); int converted_length = ::WideCharToMultiByte( CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, utf8_string.data(), - target_length, nullptr, nullptr); + input_length, utf8_string.data(), target_length, nullptr, nullptr); if (converted_length == 0) { return std::string(); } diff --git a/jsonexample/windows/runner/win32_window.cpp b/jsonexample/windows/runner/win32_window.cpp index 041a38554..60608d0fe 100644 --- a/jsonexample/windows/runner/win32_window.cpp +++ b/jsonexample/windows/runner/win32_window.cpp @@ -60,7 +60,7 @@ class WindowClassRegistrar { public: ~WindowClassRegistrar() = default; - // Returns the singleton registar instance. + // Returns the singleton registrar instance. static WindowClassRegistrar* GetInstance() { if (!instance_) { instance_ = new WindowClassRegistrar(); diff --git a/jsonexample/windows/runner/win32_window.h b/jsonexample/windows/runner/win32_window.h index c86632d8a..e901dde68 100644 --- a/jsonexample/windows/runner/win32_window.h +++ b/jsonexample/windows/runner/win32_window.h @@ -77,7 +77,7 @@ class Win32Window { // OS callback called by message pump. Handles the WM_NCCREATE message which // is passed when the non-client area is being created and enables automatic // non-client DPI scaling so that the non-client area automatically - // responsponds to changes in DPI. All other messages are handled by + // responds to changes in DPI. All other messages are handled by // MessageHandler. static LRESULT CALLBACK WndProc(HWND const window, UINT const message, diff --git a/material_3_demo/.metadata b/material_3_demo/.metadata index df1c01bcc..a7cbe7932 100644 --- a/material_3_demo/.metadata +++ b/material_3_demo/.metadata @@ -4,8 +4,8 @@ # This file should be version controlled. version: - revision: 7e2d09f29b2f416b63fd6c4544a40d3aaa1ec423 - channel: master + revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + channel: beta project_type: app @@ -13,23 +13,26 @@ project_type: app migration: platforms: - platform: root - create_revision: 7e2d09f29b2f416b63fd6c4544a40d3aaa1ec423 - base_revision: 7e2d09f29b2f416b63fd6c4544a40d3aaa1ec423 + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f - platform: android - create_revision: 7e2d09f29b2f416b63fd6c4544a40d3aaa1ec423 - base_revision: 7e2d09f29b2f416b63fd6c4544a40d3aaa1ec423 + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f - platform: ios - create_revision: 7e2d09f29b2f416b63fd6c4544a40d3aaa1ec423 - base_revision: 7e2d09f29b2f416b63fd6c4544a40d3aaa1ec423 + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + - platform: linux + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f - platform: macos - create_revision: 7e2d09f29b2f416b63fd6c4544a40d3aaa1ec423 - base_revision: 7e2d09f29b2f416b63fd6c4544a40d3aaa1ec423 + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f - platform: web - create_revision: 7e2d09f29b2f416b63fd6c4544a40d3aaa1ec423 - base_revision: 7e2d09f29b2f416b63fd6c4544a40d3aaa1ec423 + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f - platform: windows - create_revision: 7e2d09f29b2f416b63fd6c4544a40d3aaa1ec423 - base_revision: 7e2d09f29b2f416b63fd6c4544a40d3aaa1ec423 + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f # User provided section diff --git a/material_3_demo/analysis_options.yaml b/material_3_demo/analysis_options.yaml index 5e2133eb6..13d6fe105 100644 --- a/material_3_demo/analysis_options.yaml +++ b/material_3_demo/analysis_options.yaml @@ -1 +1 @@ -include: ../analysis_options.yaml +include: package:analysis_defaults/flutter.yaml diff --git a/material_3_demo/android/app/build.gradle b/material_3_demo/android/app/build.gradle index b91fc8f0d..70c38f517 100644 --- a/material_3_demo/android/app/build.gradle +++ b/material_3_demo/android/app/build.gradle @@ -46,7 +46,7 @@ android { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "com.example.material_3_demo" // You can update the following values to match your application needs. - // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. minSdkVersion flutter.minSdkVersion targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() diff --git a/material_3_demo/android/app/src/main/AndroidManifest.xml b/material_3_demo/android/app/src/main/AndroidManifest.xml index 563cffa9e..a863694d1 100644 --- a/material_3_demo/android/app/src/main/AndroidManifest.xml +++ b/material_3_demo/android/app/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ - diff --git a/material_3_demo/android/build.gradle b/material_3_demo/android/build.gradle index 4256f9173..e50c3a02b 100644 --- a/material_3_demo/android/build.gradle +++ b/material_3_demo/android/build.gradle @@ -1,12 +1,12 @@ buildscript { - ext.kotlin_version = '1.6.10' + ext.kotlin_version = '1.7.10' repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:4.1.0' + classpath 'com.android.tools.build:gradle:7.3.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/material_3_demo/android/gradle/wrapper/gradle-wrapper.properties b/material_3_demo/android/gradle/wrapper/gradle-wrapper.properties index bc6a58afd..3c472b99c 100644 --- a/material_3_demo/android/gradle/wrapper/gradle-wrapper.properties +++ b/material_3_demo/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Fri Jun 23 08:50:38 CEST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip diff --git a/material_3_demo/integration_test/integration_test.dart b/material_3_demo/integration_test/integration_test.dart new file mode 100644 index 000000000..a8d59c4e6 --- /dev/null +++ b/material_3_demo/integration_test/integration_test.dart @@ -0,0 +1,15 @@ +// Copyright 2021 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter_test/flutter_test.dart'; +import 'package:integration_test/integration_test.dart'; +import 'package:material_3_demo/main.dart' as app; + +void main() { + IntegrationTestWidgetsFlutterBinding.ensureInitialized(); + + testWidgets('verify app can run', (tester) async { + app.main(); + }); +} diff --git a/material_3_demo/ios/Runner.xcodeproj/project.pbxproj b/material_3_demo/ios/Runner.xcodeproj/project.pbxproj index e5e32fd39..85f86f725 100644 --- a/material_3_demo/ios/Runner.xcodeproj/project.pbxproj +++ b/material_3_demo/ios/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 50; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -13,8 +13,19 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXCopyFilesBuildPhase section */ 9705A1C41CF9048500538489 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; @@ -42,6 +53,8 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -66,12 +79,21 @@ name = Flutter; sourceTree = ""; }; + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; 97C146E51CF9000F007C117D = { isa = PBXGroup; children = ( 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, ); sourceTree = ""; }; @@ -79,6 +101,7 @@ isa = PBXGroup; children = ( 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, ); name = Products; sourceTree = ""; @@ -101,6 +124,24 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C807D294A63A400263BE5 /* Sources */, + 331C807E294A63A400263BE5 /* Frameworks */, + 331C807F294A63A400263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; 97C146ED1CF9000F007C117D /* Runner */ = { isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; @@ -130,6 +171,10 @@ LastUpgradeCheck = 1300; ORGANIZATIONNAME = ""; TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; 97C146ED1CF9000F007C117D = { CreatedOnToolsVersion = 7.3.1; LastSwiftMigration = 1100; @@ -150,11 +195,19 @@ projectRoot = ""; targets = ( 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EC1CF9000F007C117D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -171,10 +224,12 @@ /* Begin PBXShellScriptBuildPhase section */ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); name = "Thin Binary"; outputPaths = ( @@ -185,6 +240,7 @@ }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -200,6 +256,14 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EA1CF9000F007C117D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -211,6 +275,14 @@ }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin PBXVariantGroup section */ 97C146FA1CF9000F007C117D /* Main.storyboard */ = { isa = PBXVariantGroup; @@ -288,6 +360,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = TC87DMJLQP; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -302,6 +375,56 @@ }; name = Profile; }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AE0B7B92F70575B8D7E0D07E /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.material3Demo.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 89B67EB44CE7B6631473024E /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.material3Demo.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 640959BDD8F10B91D80A66BE /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.material3Demo.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; 97C147031CF9000F007C117D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -416,6 +539,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = TC87DMJLQP; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -438,6 +562,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = TC87DMJLQP; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -455,6 +580,16 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/material_3_demo/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/material_3_demo/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index c87d15a33..e42adcb34 100644 --- a/material_3_demo/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/material_3_demo/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -37,6 +37,17 @@ + + + + CADisableMinimumFrameDurationOnPhone + UIApplicationSupportsIndirectInputEvents + diff --git a/material_3_demo/ios/RunnerTests/RunnerTests.swift b/material_3_demo/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 000000000..86a7c3b1b --- /dev/null +++ b/material_3_demo/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/material_3_demo/lib/component_screen.dart b/material_3_demo/lib/component_screen.dart index ff3c8bd01..f3456df8d 100644 --- a/material_3_demo/lib/component_screen.dart +++ b/material_3_demo/lib/component_screen.dart @@ -3,6 +3,7 @@ // found in the LICENSE file. import 'package:flutter/material.dart'; +import 'package:flutter/rendering.dart'; import 'package:flutter/services.dart'; const rowDivider = SizedBox(width: 20); @@ -26,25 +27,46 @@ class FirstComponentList extends StatelessWidget { @override Widget build(BuildContext context) { - return ListView( - padding: showSecondList - ? const EdgeInsetsDirectional.only(end: smallSpacing) - : EdgeInsets.zero, - children: [ - const Actions(), + List children = [ + const Actions(), + colDivider, + const Communication(), + colDivider, + const Containment(), + if (!showSecondList) ...[ colDivider, - const Communication(), + Navigation(scaffoldKey: scaffoldKey), colDivider, - const Containment(), - if (!showSecondList) ...[ - colDivider, - Navigation(scaffoldKey: scaffoldKey), - colDivider, - const Selection(), - colDivider, - const TextInputs() - ], + const Selection(), + colDivider, + const TextInputs() ], + ]; + List heights = List.filled(children.length, null); + + // Fully traverse this list before moving on. + return FocusTraversalGroup( + child: CustomScrollView( + slivers: [ + SliverPadding( + padding: showSecondList + ? const EdgeInsetsDirectional.only(end: smallSpacing) + : EdgeInsets.zero, + sliver: SliverList( + delegate: BuildSlivers( + heights: heights, + builder: (context, index) { + return _CacheHeight( + heights: heights, + index: index, + child: children[index], + ); + }, + ), + ), + ), + ], + ), ); } } @@ -59,19 +81,128 @@ class SecondComponentList extends StatelessWidget { @override Widget build(BuildContext context) { - return ListView( - padding: const EdgeInsetsDirectional.only(end: smallSpacing), - children: [ - Navigation(scaffoldKey: scaffoldKey), - colDivider, - const Selection(), - colDivider, - const TextInputs(), - ], + List children = [ + Navigation(scaffoldKey: scaffoldKey), + colDivider, + const Selection(), + colDivider, + const TextInputs(), + ]; + List heights = List.filled(children.length, null); + + // Fully traverse this list before moving on. + return FocusTraversalGroup( + child: CustomScrollView( + slivers: [ + SliverPadding( + padding: const EdgeInsetsDirectional.only(end: smallSpacing), + sliver: SliverList( + delegate: BuildSlivers( + heights: heights, + builder: (context, index) { + return _CacheHeight( + heights: heights, + index: index, + child: children[index], + ); + }, + ), + ), + ), + ], + ), ); } } +// If the content of a CustomScrollView does not change, then it's +// safe to cache the heights of each item as they are laid out. The +// sum of the cached heights are returned by an override of +// `SliverChildDelegate.estimateMaxScrollOffset`. The default version +// of this method bases its estimate on the average height of the +// visible items. The override ensures that the scrollbar thumb's +// size, which depends on the max scroll offset, will shrink smoothly +// as the contents of the list are exposed for the first time, and +// then remain fixed. +class _CacheHeight extends SingleChildRenderObjectWidget { + const _CacheHeight({ + super.child, + required this.heights, + required this.index, + }); + + final List heights; + final int index; + + @override + RenderObject createRenderObject(BuildContext context) { + return _RenderCacheHeight( + heights: heights, + index: index, + ); + } + + @override + void updateRenderObject( + BuildContext context, _RenderCacheHeight renderObject) { + renderObject + ..heights = heights + ..index = index; + } +} + +class _RenderCacheHeight extends RenderProxyBox { + _RenderCacheHeight({ + required List heights, + required int index, + }) : _heights = heights, + _index = index, + super(); + + List _heights; + List get heights => _heights; + set heights(List value) { + if (value == _heights) { + return; + } + _heights = value; + markNeedsLayout(); + } + + int _index; + int get index => _index; + set index(int value) { + if (value == index) { + return; + } + _index = value; + markNeedsLayout(); + } + + @override + void performLayout() { + super.performLayout(); + heights[index] = size.height; + } +} + +// The heights information is used to override the `estimateMaxScrollOffset` and +// provide a more accurate estimation for the max scroll offset. +class BuildSlivers extends SliverChildBuilderDelegate { + BuildSlivers({ + required NullableIndexedWidgetBuilder builder, + required this.heights, + }) : super(builder, childCount: heights.length); + + final List heights; + + @override + double? estimateMaxScrollOffset(int firstIndex, int lastIndex, + double leadingScrollOffset, double trailingScrollOffset) { + return heights.reduce((sum, height) => (sum ?? 0) + (height ?? 0))!; + } +} + class Actions extends StatelessWidget { const Actions({super.key}); @@ -134,8 +265,8 @@ class Navigation extends StatelessWidget { ), NavigationDrawers(scaffoldKey: scaffoldKey), const NavigationRails(), - // TODO: Add Search https://github.com/flutter/flutter/issues/117483 const Tabs(), + const SearchAnchors(), const TopAppBars(), ]); } @@ -149,12 +280,12 @@ class Selection extends StatelessWidget { return const ComponentGroupDecoration(label: 'Selection', children: [ Checkboxes(), Chips(), - // TODO: Add Date pickers https://github.com/flutter/flutter/issues/101481 + DatePickers(), Menus(), Radios(), Sliders(), Switches(), - // TODO: Add Time pickers https://github.com/flutter/flutter/issues/101480 + TimePickers(), ]); } } @@ -181,7 +312,7 @@ class Buttons extends StatefulWidget { class _ButtonsState extends State { @override Widget build(BuildContext context) { - return ComponentDecoration( + return const ComponentDecoration( label: 'Common buttons', tooltipMessage: 'Use ElevatedButton, FilledButton, FilledButton.tonal, OutlinedButton, or TextButton', @@ -189,7 +320,7 @@ class _ButtonsState extends State { scrollDirection: Axis.horizontal, child: Row( mainAxisAlignment: MainAxisAlignment.spaceAround, - children: const [ + children: [ ButtonsWithoutIcon(isDisabled: false), ButtonsWithIcon(), ButtonsWithoutIcon(isDisabled: true), @@ -602,11 +733,11 @@ class _DialogsState extends State { 'A dialog is a type of modal window that appears in front of app content to provide critical information, or prompt for a decision to be made.'), actions: [ TextButton( - child: const Text('Okay'), + child: const Text('Dismiss'), onPressed: () => Navigator.of(context).pop(), ), FilledButton( - child: const Text('Dismiss'), + child: const Text('Okay'), onPressed: () => Navigator.of(context).pop(), ), ], @@ -675,11 +806,11 @@ class Dividers extends StatelessWidget { @override Widget build(BuildContext context) { - return ComponentDecoration( + return const ComponentDecoration( label: 'Dividers', tooltipMessage: 'Use Divider or VerticalDivider', child: Column( - children: const [ + children: [ Divider(key: Key('divider')), ], ), @@ -692,11 +823,11 @@ class Switches extends StatelessWidget { @override Widget build(BuildContext context) { - return ComponentDecoration( + return const ComponentDecoration( label: 'Switches', tooltipMessage: 'Use SwitchListTile or Switch', child: Column( - children: const [ + children: [ SwitchRow(isEnabled: true), SwitchRow(isEnabled: false), ], @@ -1011,13 +1142,13 @@ class NavigationBars extends StatefulWidget { this.onSelectItem, required this.selectedIndex, required this.isExampleBar, - this.isBadgeExample, + this.isBadgeExample = false, }); final void Function(int)? onSelectItem; final int selectedIndex; final bool isExampleBar; - final bool? isBadgeExample; + final bool isBadgeExample; @override State createState() => _NavigationBarsState(); @@ -1042,23 +1173,26 @@ class _NavigationBarsState extends State { @override Widget build(BuildContext context) { - bool isBadgeExample = widget.isBadgeExample ?? false; - Widget navigationBar = NavigationBar( - selectedIndex: selectedIndex, - onDestinationSelected: (index) { - setState(() { - selectedIndex = index; - }); - if (!widget.isExampleBar) widget.onSelectItem!(index); - }, - destinations: widget.isExampleBar && isBadgeExample - ? barWithBadgeDestinations - : widget.isExampleBar - ? exampleBarDestinations - : appBarDestinations, + // App NavigationBar should get first focus. + Widget navigationBar = Focus( + autofocus: !(widget.isExampleBar || widget.isBadgeExample), + child: NavigationBar( + selectedIndex: selectedIndex, + onDestinationSelected: (index) { + setState(() { + selectedIndex = index; + }); + if (!widget.isExampleBar) widget.onSelectItem!(index); + }, + destinations: widget.isExampleBar && widget.isBadgeExample + ? barWithBadgeDestinations + : widget.isExampleBar + ? exampleBarDestinations + : appBarDestinations, + ), ); - if (widget.isExampleBar && isBadgeExample) { + if (widget.isExampleBar && widget.isBadgeExample) { navigationBar = ComponentDecoration( label: 'Badges', tooltipMessage: 'Use Badge or Badge.count', @@ -1082,73 +1216,105 @@ class IconToggleButtons extends StatefulWidget { } class _IconToggleButtonsState extends State { + bool standardSelected = false; + bool filledSelected = false; + bool tonalSelected = false; + bool outlinedSelected = false; + @override Widget build(BuildContext context) { return ComponentDecoration( label: 'Icon buttons', - tooltipMessage: 'Use IconButton', + tooltipMessage: + 'Use IconButton, IconButton.filled, IconButton.filledTonal, and IconButton.outlined', child: Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ Column( // Standard IconButton - children: const [ - IconToggleButton( - isEnabled: true, - tooltip: 'Standard', + children: [ + IconButton( + isSelected: standardSelected, + icon: const Icon(Icons.settings_outlined), + selectedIcon: const Icon(Icons.settings), + onPressed: () { + setState(() { + standardSelected = !standardSelected; + }); + }, ), colDivider, - IconToggleButton( - isEnabled: false, - tooltip: 'Standard (disabled)', + IconButton( + isSelected: standardSelected, + icon: const Icon(Icons.settings_outlined), + selectedIcon: const Icon(Icons.settings), + onPressed: null, ), ], ), Column( - children: const [ + children: [ // Filled IconButton - IconToggleButton( - isEnabled: true, - tooltip: 'Filled', - getDefaultStyle: enabledFilledButtonStyle, + IconButton.filled( + isSelected: filledSelected, + icon: const Icon(Icons.settings_outlined), + selectedIcon: const Icon(Icons.settings), + onPressed: () { + setState(() { + filledSelected = !filledSelected; + }); + }, ), colDivider, - IconToggleButton( - isEnabled: false, - tooltip: 'Filled (disabled)', - getDefaultStyle: disabledFilledButtonStyle, + IconButton.filled( + isSelected: filledSelected, + icon: const Icon(Icons.settings_outlined), + selectedIcon: const Icon(Icons.settings), + onPressed: null, ), ], ), Column( - children: const [ + children: [ // Filled Tonal IconButton - IconToggleButton( - isEnabled: true, - tooltip: 'Filled tonal', - getDefaultStyle: enabledFilledTonalButtonStyle, + IconButton.filledTonal( + isSelected: tonalSelected, + icon: const Icon(Icons.settings_outlined), + selectedIcon: const Icon(Icons.settings), + onPressed: () { + setState(() { + tonalSelected = !tonalSelected; + }); + }, ), colDivider, - IconToggleButton( - isEnabled: false, - tooltip: 'Filled tonal (disabled)', - getDefaultStyle: disabledFilledTonalButtonStyle, + IconButton.filledTonal( + isSelected: tonalSelected, + icon: const Icon(Icons.settings_outlined), + selectedIcon: const Icon(Icons.settings), + onPressed: null, ), ], ), Column( - children: const [ + children: [ // Outlined IconButton - IconToggleButton( - isEnabled: true, - tooltip: 'Outlined', - getDefaultStyle: enabledOutlinedButtonStyle, + IconButton.outlined( + isSelected: outlinedSelected, + icon: const Icon(Icons.settings_outlined), + selectedIcon: const Icon(Icons.settings), + onPressed: () { + setState(() { + outlinedSelected = !outlinedSelected; + }); + }, ), colDivider, - IconToggleButton( - isEnabled: false, - tooltip: 'Outlined (disabled)', - getDefaultStyle: disabledOutlinedButtonStyle, + IconButton.outlined( + isSelected: outlinedSelected, + icon: const Icon(Icons.settings_outlined), + selectedIcon: const Icon(Icons.settings), + onPressed: null, ), ], ), @@ -1158,134 +1324,6 @@ class _IconToggleButtonsState extends State { } } -class IconToggleButton extends StatefulWidget { - const IconToggleButton({ - required this.isEnabled, - required this.tooltip, - this.getDefaultStyle, - super.key, - }); - - final bool isEnabled; - final String tooltip; - final ButtonStyle? Function(bool, ColorScheme)? getDefaultStyle; - - @override - State createState() => _IconToggleButtonState(); -} - -class _IconToggleButtonState extends State { - bool selected = false; - - @override - Widget build(BuildContext context) { - final ColorScheme colors = Theme.of(context).colorScheme; - final VoidCallback? onPressed = widget.isEnabled - ? () { - setState(() { - selected = !selected; - }); - } - : null; - ButtonStyle? style = widget.getDefaultStyle?.call(selected, colors); - - return IconButton( - visualDensity: VisualDensity.standard, - isSelected: selected, - tooltip: widget.tooltip, - icon: const Icon(Icons.settings_outlined), - selectedIcon: const Icon(Icons.settings), - onPressed: onPressed, - style: style, - ); - } -} - -ButtonStyle enabledFilledButtonStyle(bool selected, ColorScheme colors) { - return IconButton.styleFrom( - foregroundColor: selected ? colors.onPrimary : colors.primary, - backgroundColor: selected ? colors.primary : colors.surfaceVariant, - disabledForegroundColor: colors.onSurface.withOpacity(0.38), - disabledBackgroundColor: colors.onSurface.withOpacity(0.12), - hoverColor: selected - ? colors.onPrimary.withOpacity(0.08) - : colors.primary.withOpacity(0.08), - focusColor: selected - ? colors.onPrimary.withOpacity(0.12) - : colors.primary.withOpacity(0.12), - highlightColor: selected - ? colors.onPrimary.withOpacity(0.12) - : colors.primary.withOpacity(0.12), - ); -} - -ButtonStyle disabledFilledButtonStyle(bool selected, ColorScheme colors) { - return IconButton.styleFrom( - disabledForegroundColor: colors.onSurface.withOpacity(0.38), - disabledBackgroundColor: colors.onSurface.withOpacity(0.12), - ); -} - -ButtonStyle enabledFilledTonalButtonStyle(bool selected, ColorScheme colors) { - return IconButton.styleFrom( - foregroundColor: - selected ? colors.onSecondaryContainer : colors.onSurfaceVariant, - backgroundColor: - selected ? colors.secondaryContainer : colors.surfaceVariant, - hoverColor: selected - ? colors.onSecondaryContainer.withOpacity(0.08) - : colors.onSurfaceVariant.withOpacity(0.08), - focusColor: selected - ? colors.onSecondaryContainer.withOpacity(0.12) - : colors.onSurfaceVariant.withOpacity(0.12), - highlightColor: selected - ? colors.onSecondaryContainer.withOpacity(0.12) - : colors.onSurfaceVariant.withOpacity(0.12), - ); -} - -ButtonStyle disabledFilledTonalButtonStyle(bool selected, ColorScheme colors) { - return IconButton.styleFrom( - disabledForegroundColor: colors.onSurface.withOpacity(0.38), - disabledBackgroundColor: colors.onSurface.withOpacity(0.12), - ); -} - -ButtonStyle enabledOutlinedButtonStyle(bool selected, ColorScheme colors) { - return IconButton.styleFrom( - backgroundColor: selected ? colors.inverseSurface : null, - hoverColor: selected - ? colors.onInverseSurface.withOpacity(0.08) - : colors.onSurfaceVariant.withOpacity(0.08), - focusColor: selected - ? colors.onInverseSurface.withOpacity(0.12) - : colors.onSurfaceVariant.withOpacity(0.12), - highlightColor: selected - ? colors.onInverseSurface.withOpacity(0.12) - : colors.onSurface.withOpacity(0.12), - side: BorderSide(color: colors.outline), - ).copyWith( - foregroundColor: MaterialStateProperty.resolveWith((states) { - if (states.contains(MaterialState.selected)) { - return colors.onInverseSurface; - } - if (states.contains(MaterialState.pressed)) { - return colors.onSurface; - } - return null; - }), - ); -} - -ButtonStyle disabledOutlinedButtonStyle(bool selected, ColorScheme colors) { - return IconButton.styleFrom( - disabledForegroundColor: colors.onSurface.withOpacity(0.38), - disabledBackgroundColor: - selected ? colors.onSurface.withOpacity(0.12) : null, - side: selected ? null : BorderSide(color: colors.outline.withOpacity(0.12)), - ); -} - class Chips extends StatefulWidget { const Chips({super.key}); @@ -1362,16 +1400,108 @@ class _ChipsState extends State { } } +class DatePickers extends StatefulWidget { + const DatePickers({super.key}); + + @override + State createState() => _DatePickersState(); +} + +class _DatePickersState extends State { + DateTime? selectedDate; + final DateTime _firstDate = DateTime(DateTime.now().year - 2); + final DateTime _lastDate = DateTime(DateTime.now().year + 1); + + @override + Widget build(BuildContext context) { + return ComponentDecoration( + label: 'Date picker', + tooltipMessage: 'Use showDatePicker', + child: TextButton( + onPressed: () async { + DateTime? date = await showDatePicker( + context: context, + initialDate: selectedDate ?? DateTime.now(), + firstDate: _firstDate, + lastDate: _lastDate, + ); + setState(() { + selectedDate = date; + if (selectedDate != null) { + ScaffoldMessenger.of(context).showSnackBar(SnackBar( + content: Text( + 'Selected Date: ${selectedDate!.day}/${selectedDate!.month}/${selectedDate!.year}'), + )); + } + }); + }, + child: const Text( + 'Show date picker', + style: TextStyle(fontWeight: FontWeight.bold), + ), + ), + ); + } +} + +class TimePickers extends StatefulWidget { + const TimePickers({super.key}); + + @override + State createState() => _TimePickersState(); +} + +class _TimePickersState extends State { + TimeOfDay? selectedTime; + + @override + Widget build(BuildContext context) { + return ComponentDecoration( + label: 'Time picker', + tooltipMessage: 'Use showTimePicker', + child: TextButton( + onPressed: () async { + final TimeOfDay? time = await showTimePicker( + context: context, + initialTime: selectedTime ?? TimeOfDay.now(), + builder: (context, child) { + return MediaQuery( + data: MediaQuery.of(context).copyWith( + alwaysUse24HourFormat: true, + ), + child: child!, + ); + }, + ); + setState(() { + selectedTime = time; + if (selectedTime != null) { + ScaffoldMessenger.of(context).showSnackBar(SnackBar( + content: + Text('Selected time: ${selectedTime!.format(context)}'), + )); + } + }); + }, + child: const Text( + 'Show time picker', + style: TextStyle(fontWeight: FontWeight.bold), + ), + ), + ); + } +} + class SegmentedButtons extends StatelessWidget { const SegmentedButtons({super.key}); @override Widget build(BuildContext context) { - return ComponentDecoration( + return const ComponentDecoration( label: 'Segmented buttons', tooltipMessage: 'Use SegmentedButton', child: Column( - children: const [ + children: [ SingleChoice(), colDivider, MultipleChoice(), @@ -1552,6 +1682,7 @@ class _BottomSheetSectionState extends State { ), onPressed: () { showModalBottomSheet( + showDragHandle: true, context: context, // TODO: Remove when this is in the framework https://github.com/flutter/flutter/issues/118619 constraints: const BoxConstraints(maxWidth: 640), @@ -2066,9 +2197,9 @@ class _MenusState extends State { tooltipMessage: 'Use MenuAnchor or DropdownMenu', child: Column( children: [ - Row( + const Row( mainAxisAlignment: MainAxisAlignment.center, - children: const [ + children: [ ButtonAnchorExample(), rowDivider, IconButtonAnchorExample(), @@ -2188,7 +2319,102 @@ class _SlidersState extends State { } } -class ComponentDecoration extends StatelessWidget { +class SearchAnchors extends StatefulWidget { + const SearchAnchors({super.key}); + + @override + State createState() => _SearchAnchorsState(); +} + +class _SearchAnchorsState extends State { + String? selectedColor; + List searchHistory = []; + + Iterable getHistoryList(SearchController controller) { + return searchHistory.map((color) => ListTile( + leading: const Icon(Icons.history), + title: Text(color.label), + trailing: IconButton( + icon: const Icon(Icons.call_missed), + onPressed: () { + controller.text = color.label; + controller.selection = + TextSelection.collapsed(offset: controller.text.length); + }), + onTap: () { + controller.closeView(color.label); + handleSelection(color); + }, + )); + } + + Iterable getSuggestions(SearchController controller) { + final String input = controller.value.text; + return ColorItem.values + .where((color) => color.label.contains(input)) + .map((filteredColor) => ListTile( + leading: CircleAvatar(backgroundColor: filteredColor.color), + title: Text(filteredColor.label), + trailing: IconButton( + icon: const Icon(Icons.call_missed), + onPressed: () { + controller.text = filteredColor.label; + controller.selection = + TextSelection.collapsed(offset: controller.text.length); + }), + onTap: () { + controller.closeView(filteredColor.label); + handleSelection(filteredColor); + }, + )); + } + + void handleSelection(ColorItem color) { + setState(() { + selectedColor = color.label; + if (searchHistory.length >= 5) { + searchHistory.removeLast(); + } + searchHistory.insert(0, color); + }); + } + + @override + Widget build(BuildContext context) { + return ComponentDecoration( + label: 'Search', + tooltipMessage: 'Use SearchAnchor or SearchAnchor.bar', + child: Column( + children: [ + SearchAnchor.bar( + barHintText: 'Search colors', + suggestionsBuilder: (context, controller) { + if (controller.text.isEmpty) { + if (searchHistory.isNotEmpty) { + return getHistoryList(controller); + } + return [ + const Center( + child: Text('No search history.', + style: TextStyle(color: Colors.grey)), + ) + ]; + } + return getSuggestions(controller); + }, + ), + const SizedBox(height: 20), + if (selectedColor == null) + const Text('Select a color') + else + Text('Last selected color is $selectedColor') + ], + ), + ); + } +} + +class ComponentDecoration extends StatefulWidget { const ComponentDecoration({ super.key, required this.label, @@ -2200,6 +2426,13 @@ class ComponentDecoration extends StatelessWidget { final Widget child; final String? tooltipMessage; + @override + State createState() => _ComponentDecorationState(); +} + +class _ComponentDecorationState extends State { + final focusNode = FocusNode(); + @override Widget build(BuildContext context) { return RepaintBoundary( @@ -2210,9 +2443,10 @@ class ComponentDecoration extends StatelessWidget { Row( mainAxisAlignment: MainAxisAlignment.center, children: [ - Text(label, style: Theme.of(context).textTheme.titleSmall), + Text(widget.label, + style: Theme.of(context).textTheme.titleSmall), Tooltip( - message: tooltipMessage, + message: widget.tooltipMessage, child: const Padding( padding: EdgeInsets.symmetric(horizontal: 5.0), child: Icon(Icons.info_outline, size: 16)), @@ -2222,18 +2456,32 @@ class ComponentDecoration extends StatelessWidget { ConstrainedBox( constraints: const BoxConstraints.tightFor(width: widthConstraint), - child: Card( - elevation: 0, - shape: RoundedRectangleBorder( - side: BorderSide( - color: Theme.of(context).colorScheme.outlineVariant, + // Tapping within the a component card should request focus + // for that component's children. + child: Focus( + focusNode: focusNode, + canRequestFocus: true, + child: GestureDetector( + onTapDown: (_) { + focusNode.requestFocus(); + }, + behavior: HitTestBehavior.opaque, + child: Card( + elevation: 0, + shape: RoundedRectangleBorder( + side: BorderSide( + color: Theme.of(context).colorScheme.outlineVariant, + ), + borderRadius: const BorderRadius.all(Radius.circular(12)), + ), + child: Padding( + padding: const EdgeInsets.symmetric( + horizontal: 5.0, vertical: 20.0), + child: Center( + child: widget.child, + ), + ), ), - borderRadius: const BorderRadius.all(Radius.circular(12)), - ), - child: Padding( - padding: const EdgeInsets.symmetric( - horizontal: 5.0, vertical: 20.0), - child: Center(child: child), ), ), ), @@ -2253,22 +2501,48 @@ class ComponentGroupDecoration extends StatelessWidget { @override Widget build(BuildContext context) { - return Card( - margin: EdgeInsets.zero, - elevation: 0, - color: Theme.of(context).colorScheme.surfaceVariant.withOpacity(0.3), - child: Padding( - padding: const EdgeInsets.symmetric(vertical: 20.0), - child: Center( - child: Column( - children: [ - Text(label, style: Theme.of(context).textTheme.titleLarge), - colDivider, - ...children - ], + // Fully traverse this component group before moving on + return FocusTraversalGroup( + child: Card( + margin: EdgeInsets.zero, + elevation: 0, + color: Theme.of(context).colorScheme.surfaceVariant.withOpacity(0.3), + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 20.0), + child: Center( + child: Column( + children: [ + Text(label, style: Theme.of(context).textTheme.titleLarge), + colDivider, + ...children + ], + ), ), ), ), ); } } + +enum ColorItem { + red('red', Colors.red), + orange('orange', Colors.orange), + yellow('yellow', Colors.yellow), + green('green', Colors.green), + blue('blue', Colors.blue), + indigo('indigo', Colors.indigo), + violet('violet', Color(0xFF8F00FF)), + purple('purple', Colors.purple), + pink('pink', Colors.pink), + silver('silver', Color(0xFF808080)), + gold('gold', Color(0xFFFFD700)), + beige('beige', Color(0xFFF5F5DC)), + brown('brown', Colors.brown), + grey('grey', Colors.grey), + black('black', Colors.black), + white('white', Colors.white); + + const ColorItem(this.label, this.color); + final String label; + final Color color; +} diff --git a/material_3_demo/lib/constants.dart b/material_3_demo/lib/constants.dart new file mode 100644 index 000000000..41b97ebd2 --- /dev/null +++ b/material_3_demo/lib/constants.dart @@ -0,0 +1,66 @@ +// Copyright 2021 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter/material.dart'; + +// NavigationRail shows if the screen width is greater or equal to +// narrowScreenWidthThreshold; otherwise, NavigationBar is used for navigation. +const double narrowScreenWidthThreshold = 450; + +const double mediumWidthBreakpoint = 1000; +const double largeWidthBreakpoint = 1500; + +const double transitionLength = 500; + +// Whether the user has chosen a theme color via a direct [ColorSeed] selection, +// or an image [ColorImageProvider]. +enum ColorSelectionMethod { + colorSeed, + image, +} + +enum ColorSeed { + baseColor('M3 Baseline', Color(0xff6750a4)), + indigo('Indigo', Colors.indigo), + blue('Blue', Colors.blue), + teal('Teal', Colors.teal), + green('Green', Colors.green), + yellow('Yellow', Colors.yellow), + orange('Orange', Colors.orange), + deepOrange('Deep Orange', Colors.deepOrange), + pink('Pink', Colors.pink); + + const ColorSeed(this.label, this.color); + final String label; + final Color color; +} + +enum ColorImageProvider { + leaves('Leaves', + 'https://flutter.github.io/assets-for-api-docs/assets/material/content_based_color_scheme_1.png'), + peonies('Peonies', + 'https://flutter.github.io/assets-for-api-docs/assets/material/content_based_color_scheme_2.png'), + bubbles('Bubbles', + 'https://flutter.github.io/assets-for-api-docs/assets/material/content_based_color_scheme_3.png'), + seaweed('Seaweed', + 'https://flutter.github.io/assets-for-api-docs/assets/material/content_based_color_scheme_4.png'), + seagrapes('Sea Grapes', + 'https://flutter.github.io/assets-for-api-docs/assets/material/content_based_color_scheme_5.png'), + petals('Petals', + 'https://flutter.github.io/assets-for-api-docs/assets/material/content_based_color_scheme_6.png'); + + const ColorImageProvider(this.label, this.url); + final String label; + final String url; +} + +enum ScreenSelected { + component(0), + color(1), + typography(2), + elevation(3); + + const ScreenSelected(this.value); + final int value; +} diff --git a/material_3_demo/lib/elevation_screen.dart b/material_3_demo/lib/elevation_screen.dart index 0f3d6299e..6522e9b8e 100644 --- a/material_3_demo/lib/elevation_screen.dart +++ b/material_3_demo/lib/elevation_screen.dart @@ -23,7 +23,10 @@ class ElevationScreen extends StatelessWidget { ), ), ), - ElevationGrid(surfaceTintColor: surfaceTint), + ElevationGrid( + surfaceTintColor: surfaceTint, + shadowColor: Colors.transparent, + ), SliverList( delegate: SliverChildListDelegate([ const SizedBox(height: 10), @@ -146,7 +149,7 @@ class _ElevationCardState extends State { style: Theme.of(context).textTheme.labelMedium, ), Text( - '${widget.info.level.toInt()} dp', + '${widget.info.elevation.toInt()} dp', style: Theme.of(context).textTheme.labelMedium, ), if (widget.surfaceTint != null) diff --git a/material_3_demo/lib/home.dart b/material_3_demo/lib/home.dart new file mode 100644 index 000000000..4bb4621b8 --- /dev/null +++ b/material_3_demo/lib/home.dart @@ -0,0 +1,874 @@ +// Copyright 2021 The Flutter team. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +import 'package:flutter/material.dart'; + +import 'color_palettes_screen.dart'; +import 'component_screen.dart'; +import 'constants.dart'; +import 'elevation_screen.dart'; +import 'typography_screen.dart'; + +class Home extends StatefulWidget { + const Home({ + super.key, + required this.useLightMode, + required this.useMaterial3, + required this.colorSelected, + required this.handleBrightnessChange, + required this.handleMaterialVersionChange, + required this.handleColorSelect, + required this.handleImageSelect, + required this.colorSelectionMethod, + required this.imageSelected, + }); + + final bool useLightMode; + final bool useMaterial3; + final ColorSeed colorSelected; + final ColorImageProvider imageSelected; + final ColorSelectionMethod colorSelectionMethod; + + final void Function(bool useLightMode) handleBrightnessChange; + final void Function() handleMaterialVersionChange; + final void Function(int value) handleColorSelect; + final void Function(int value) handleImageSelect; + + @override + State createState() => _HomeState(); +} + +class _HomeState extends State with SingleTickerProviderStateMixin { + final GlobalKey scaffoldKey = GlobalKey(); + late final AnimationController controller; + late final CurvedAnimation railAnimation; + bool controllerInitialized = false; + bool showMediumSizeLayout = false; + bool showLargeSizeLayout = false; + + int screenIndex = ScreenSelected.component.value; + + @override + initState() { + super.initState(); + controller = AnimationController( + duration: Duration(milliseconds: transitionLength.toInt() * 2), + value: 0, + vsync: this, + ); + railAnimation = CurvedAnimation( + parent: controller, + curve: const Interval(0.5, 1.0), + ); + } + + @override + void dispose() { + controller.dispose(); + super.dispose(); + } + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + + final double width = MediaQuery.of(context).size.width; + final AnimationStatus status = controller.status; + if (width > mediumWidthBreakpoint) { + if (width > largeWidthBreakpoint) { + showMediumSizeLayout = false; + showLargeSizeLayout = true; + } else { + showMediumSizeLayout = true; + showLargeSizeLayout = false; + } + if (status != AnimationStatus.forward && + status != AnimationStatus.completed) { + controller.forward(); + } + } else { + showMediumSizeLayout = false; + showLargeSizeLayout = false; + if (status != AnimationStatus.reverse && + status != AnimationStatus.dismissed) { + controller.reverse(); + } + } + if (!controllerInitialized) { + controllerInitialized = true; + controller.value = width > mediumWidthBreakpoint ? 1 : 0; + } + } + + void handleScreenChanged(int screenSelected) { + setState(() { + screenIndex = screenSelected; + }); + } + + Widget createScreenFor( + ScreenSelected screenSelected, bool showNavBarExample) { + switch (screenSelected) { + case ScreenSelected.component: + return Expanded( + child: OneTwoTransition( + animation: railAnimation, + one: FirstComponentList( + showNavBottomBar: showNavBarExample, + scaffoldKey: scaffoldKey, + showSecondList: showMediumSizeLayout || showLargeSizeLayout), + two: SecondComponentList( + scaffoldKey: scaffoldKey, + ), + ), + ); + case ScreenSelected.color: + return const ColorPalettesScreen(); + case ScreenSelected.typography: + return const TypographyScreen(); + case ScreenSelected.elevation: + return const ElevationScreen(); + } + } + + PreferredSizeWidget createAppBar() { + return AppBar( + title: widget.useMaterial3 + ? const Text('Material 3') + : const Text('Material 2'), + actions: !showMediumSizeLayout && !showLargeSizeLayout + ? [ + _BrightnessButton( + handleBrightnessChange: widget.handleBrightnessChange, + ), + _Material3Button( + handleMaterialVersionChange: widget.handleMaterialVersionChange, + ), + _ColorSeedButton( + handleColorSelect: widget.handleColorSelect, + colorSelected: widget.colorSelected, + colorSelectionMethod: widget.colorSelectionMethod, + ), + _ColorImageButton( + handleImageSelect: widget.handleImageSelect, + imageSelected: widget.imageSelected, + colorSelectionMethod: widget.colorSelectionMethod, + ) + ] + : [Container()], + ); + } + + Widget _trailingActions() => Column( + mainAxisAlignment: MainAxisAlignment.end, + children: [ + Flexible( + child: _BrightnessButton( + handleBrightnessChange: widget.handleBrightnessChange, + showTooltipBelow: false, + ), + ), + Flexible( + child: _Material3Button( + handleMaterialVersionChange: widget.handleMaterialVersionChange, + showTooltipBelow: false, + ), + ), + Flexible( + child: _ColorSeedButton( + handleColorSelect: widget.handleColorSelect, + colorSelected: widget.colorSelected, + colorSelectionMethod: widget.colorSelectionMethod, + ), + ), + Flexible( + child: _ColorImageButton( + handleImageSelect: widget.handleImageSelect, + imageSelected: widget.imageSelected, + colorSelectionMethod: widget.colorSelectionMethod, + ), + ), + ], + ); + + @override + Widget build(BuildContext context) { + return AnimatedBuilder( + animation: controller, + builder: (context, child) { + return NavigationTransition( + scaffoldKey: scaffoldKey, + animationController: controller, + railAnimation: railAnimation, + appBar: createAppBar(), + body: createScreenFor( + ScreenSelected.values[screenIndex], controller.value == 1), + navigationRail: NavigationRail( + extended: showLargeSizeLayout, + destinations: navRailDestinations, + selectedIndex: screenIndex, + onDestinationSelected: (index) { + setState(() { + screenIndex = index; + handleScreenChanged(screenIndex); + }); + }, + trailing: Expanded( + child: Padding( + padding: const EdgeInsets.only(bottom: 20), + child: showLargeSizeLayout + ? _ExpandedTrailingActions( + useLightMode: widget.useLightMode, + handleBrightnessChange: widget.handleBrightnessChange, + useMaterial3: widget.useMaterial3, + handleMaterialVersionChange: + widget.handleMaterialVersionChange, + handleImageSelect: widget.handleImageSelect, + handleColorSelect: widget.handleColorSelect, + colorSelectionMethod: widget.colorSelectionMethod, + imageSelected: widget.imageSelected, + colorSelected: widget.colorSelected, + ) + : _trailingActions(), + ), + ), + ), + navigationBar: NavigationBars( + onSelectItem: (index) { + setState(() { + screenIndex = index; + handleScreenChanged(screenIndex); + }); + }, + selectedIndex: screenIndex, + isExampleBar: false, + ), + ); + }, + ); + } +} + +class _BrightnessButton extends StatelessWidget { + const _BrightnessButton({ + required this.handleBrightnessChange, + this.showTooltipBelow = true, + }); + + final Function handleBrightnessChange; + final bool showTooltipBelow; + + @override + Widget build(BuildContext context) { + final isBright = Theme.of(context).brightness == Brightness.light; + return Tooltip( + preferBelow: showTooltipBelow, + message: 'Toggle brightness', + child: IconButton( + icon: isBright + ? const Icon(Icons.dark_mode_outlined) + : const Icon(Icons.light_mode_outlined), + onPressed: () => handleBrightnessChange(!isBright), + ), + ); + } +} + +class _Material3Button extends StatelessWidget { + const _Material3Button({ + required this.handleMaterialVersionChange, + this.showTooltipBelow = true, + }); + + final void Function() handleMaterialVersionChange; + final bool showTooltipBelow; + + @override + Widget build(BuildContext context) { + final useMaterial3 = Theme.of(context).useMaterial3; + return Tooltip( + preferBelow: showTooltipBelow, + message: 'Switch to Material ${useMaterial3 ? 2 : 3}', + child: IconButton( + icon: useMaterial3 + ? const Icon(Icons.filter_2) + : const Icon(Icons.filter_3), + onPressed: handleMaterialVersionChange, + ), + ); + } +} + +class _ColorSeedButton extends StatelessWidget { + const _ColorSeedButton({ + required this.handleColorSelect, + required this.colorSelected, + required this.colorSelectionMethod, + }); + + final void Function(int) handleColorSelect; + final ColorSeed colorSelected; + final ColorSelectionMethod colorSelectionMethod; + + @override + Widget build(BuildContext context) { + return PopupMenuButton( + icon: Icon( + Icons.palette_outlined, + color: Theme.of(context).colorScheme.onSurfaceVariant, + ), + tooltip: 'Select a seed color', + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), + itemBuilder: (context) { + return List.generate(ColorSeed.values.length, (index) { + ColorSeed currentColor = ColorSeed.values[index]; + + return PopupMenuItem( + value: index, + enabled: currentColor != colorSelected || + colorSelectionMethod != ColorSelectionMethod.colorSeed, + child: Wrap( + children: [ + Padding( + padding: const EdgeInsets.only(left: 10), + child: Icon( + currentColor == colorSelected && + colorSelectionMethod != ColorSelectionMethod.image + ? Icons.color_lens + : Icons.color_lens_outlined, + color: currentColor.color, + ), + ), + Padding( + padding: const EdgeInsets.only(left: 20), + child: Text(currentColor.label), + ), + ], + ), + ); + }); + }, + onSelected: handleColorSelect, + ); + } +} + +class _ColorImageButton extends StatelessWidget { + const _ColorImageButton({ + required this.handleImageSelect, + required this.imageSelected, + required this.colorSelectionMethod, + }); + + final void Function(int) handleImageSelect; + final ColorImageProvider imageSelected; + final ColorSelectionMethod colorSelectionMethod; + + @override + Widget build(BuildContext context) { + return PopupMenuButton( + icon: Icon( + Icons.image_outlined, + color: Theme.of(context).colorScheme.onSurfaceVariant, + ), + tooltip: 'Select a color extraction image', + shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), + itemBuilder: (context) { + return List.generate(ColorImageProvider.values.length, (index) { + ColorImageProvider currentImageProvider = + ColorImageProvider.values[index]; + + return PopupMenuItem( + value: index, + enabled: currentImageProvider != imageSelected || + colorSelectionMethod != ColorSelectionMethod.image, + child: Wrap( + crossAxisAlignment: WrapCrossAlignment.center, + children: [ + Padding( + padding: const EdgeInsets.only(left: 10), + child: ConstrainedBox( + constraints: const BoxConstraints(maxWidth: 48), + child: Padding( + padding: const EdgeInsets.all(4.0), + child: ClipRRect( + borderRadius: BorderRadius.circular(8.0), + child: Image( + image: NetworkImage( + ColorImageProvider.values[index].url), + ), + ), + ), + ), + ), + Padding( + padding: const EdgeInsets.only(left: 20), + child: Text(currentImageProvider.label), + ), + ], + ), + ); + }); + }, + onSelected: handleImageSelect, + ); + } +} + +class _ExpandedTrailingActions extends StatelessWidget { + const _ExpandedTrailingActions({ + required this.useLightMode, + required this.handleBrightnessChange, + required this.useMaterial3, + required this.handleMaterialVersionChange, + required this.handleColorSelect, + required this.handleImageSelect, + required this.imageSelected, + required this.colorSelected, + required this.colorSelectionMethod, + }); + + final void Function(bool) handleBrightnessChange; + final void Function() handleMaterialVersionChange; + final void Function(int) handleImageSelect; + final void Function(int) handleColorSelect; + + final bool useLightMode; + final bool useMaterial3; + + final ColorImageProvider imageSelected; + final ColorSeed colorSelected; + final ColorSelectionMethod colorSelectionMethod; + + @override + Widget build(BuildContext context) { + final screenHeight = MediaQuery.of(context).size.height; + final trailingActionsBody = Container( + constraints: const BoxConstraints.tightFor(width: 250), + padding: const EdgeInsets.symmetric(horizontal: 30), + child: Column( + mainAxisAlignment: MainAxisAlignment.end, + crossAxisAlignment: CrossAxisAlignment.stretch, + children: [ + Row( + children: [ + const Text('Brightness'), + Expanded(child: Container()), + Switch( + value: useLightMode, + onChanged: (value) { + handleBrightnessChange(value); + }) + ], + ), + Row( + children: [ + useMaterial3 + ? const Text('Material 3') + : const Text('Material 2'), + Expanded(child: Container()), + Switch( + value: useMaterial3, + onChanged: (_) { + handleMaterialVersionChange(); + }) + ], + ), + const Divider(), + _ExpandedColorSeedAction( + handleColorSelect: handleColorSelect, + colorSelected: colorSelected, + colorSelectionMethod: colorSelectionMethod, + ), + const Divider(), + _ExpandedImageColorAction( + handleImageSelect: handleImageSelect, + imageSelected: imageSelected, + colorSelectionMethod: colorSelectionMethod, + ), + ], + ), + ); + return screenHeight > 740 + ? trailingActionsBody + : SingleChildScrollView(child: trailingActionsBody); + } +} + +class _ExpandedColorSeedAction extends StatelessWidget { + const _ExpandedColorSeedAction({ + required this.handleColorSelect, + required this.colorSelected, + required this.colorSelectionMethod, + }); + + final void Function(int) handleColorSelect; + final ColorSeed colorSelected; + final ColorSelectionMethod colorSelectionMethod; + + @override + Widget build(BuildContext context) { + return ConstrainedBox( + constraints: const BoxConstraints(maxHeight: 200.0), + child: GridView.count( + crossAxisCount: 3, + children: List.generate( + ColorSeed.values.length, + (i) => IconButton( + icon: const Icon(Icons.radio_button_unchecked), + color: ColorSeed.values[i].color, + isSelected: colorSelected.color == ColorSeed.values[i].color && + colorSelectionMethod == ColorSelectionMethod.colorSeed, + selectedIcon: const Icon(Icons.circle), + onPressed: () { + handleColorSelect(i); + }, + tooltip: ColorSeed.values[i].label, + ), + ), + ), + ); + } +} + +class _ExpandedImageColorAction extends StatelessWidget { + const _ExpandedImageColorAction({ + required this.handleImageSelect, + required this.imageSelected, + required this.colorSelectionMethod, + }); + + final void Function(int) handleImageSelect; + final ColorImageProvider imageSelected; + final ColorSelectionMethod colorSelectionMethod; + + @override + Widget build(BuildContext context) { + return ConstrainedBox( + constraints: const BoxConstraints(maxHeight: 150.0), + child: Padding( + padding: const EdgeInsets.symmetric(vertical: 8.0), + child: GridView.count( + crossAxisCount: 3, + children: List.generate( + ColorImageProvider.values.length, + (i) => Tooltip( + message: ColorImageProvider.values[i].name, + child: InkWell( + borderRadius: BorderRadius.circular(4.0), + onTap: () => handleImageSelect(i), + child: Padding( + padding: const EdgeInsets.all(8.0), + child: Material( + borderRadius: BorderRadius.circular(4.0), + elevation: imageSelected == ColorImageProvider.values[i] && + colorSelectionMethod == ColorSelectionMethod.image + ? 3 + : 0, + child: Padding( + padding: const EdgeInsets.all(4.0), + child: ClipRRect( + borderRadius: BorderRadius.circular(4.0), + child: Image( + image: NetworkImage(ColorImageProvider.values[i].url), + ), + ), + ), + ), + ), + ), + ), + ), + ), + ), + ); + } +} + +class NavigationTransition extends StatefulWidget { + const NavigationTransition( + {super.key, + required this.scaffoldKey, + required this.animationController, + required this.railAnimation, + required this.navigationRail, + required this.navigationBar, + required this.appBar, + required this.body}); + + final GlobalKey scaffoldKey; + final AnimationController animationController; + final CurvedAnimation railAnimation; + final Widget navigationRail; + final Widget navigationBar; + final PreferredSizeWidget appBar; + final Widget body; + + @override + State createState() => _NavigationTransitionState(); +} + +class _NavigationTransitionState extends State { + late final AnimationController controller; + late final CurvedAnimation railAnimation; + late final ReverseAnimation barAnimation; + bool controllerInitialized = false; + bool showDivider = false; + + @override + void initState() { + super.initState(); + + controller = widget.animationController; + railAnimation = widget.railAnimation; + + barAnimation = ReverseAnimation( + CurvedAnimation( + parent: controller, + curve: const Interval(0.0, 0.5), + ), + ); + } + + @override + Widget build(BuildContext context) { + final ColorScheme colorScheme = Theme.of(context).colorScheme; + + return Scaffold( + key: widget.scaffoldKey, + appBar: widget.appBar, + body: Row( + children: [ + RailTransition( + animation: railAnimation, + backgroundColor: colorScheme.surface, + child: widget.navigationRail, + ), + widget.body, + ], + ), + bottomNavigationBar: BarTransition( + animation: barAnimation, + backgroundColor: colorScheme.surface, + child: widget.navigationBar, + ), + endDrawer: const NavigationDrawerSection(), + ); + } +} + +final List navRailDestinations = appBarDestinations + .map( + (destination) => NavigationRailDestination( + icon: Tooltip( + message: destination.label, + child: destination.icon, + ), + selectedIcon: Tooltip( + message: destination.label, + child: destination.selectedIcon, + ), + label: Text(destination.label), + ), + ) + .toList(); + +class SizeAnimation extends CurvedAnimation { + SizeAnimation(Animation parent) + : super( + parent: parent, + curve: const Interval( + 0.2, + 0.8, + curve: Curves.easeInOutCubicEmphasized, + ), + reverseCurve: Interval( + 0, + 0.2, + curve: Curves.easeInOutCubicEmphasized.flipped, + ), + ); +} + +class OffsetAnimation extends CurvedAnimation { + OffsetAnimation(Animation parent) + : super( + parent: parent, + curve: const Interval( + 0.4, + 1.0, + curve: Curves.easeInOutCubicEmphasized, + ), + reverseCurve: Interval( + 0, + 0.2, + curve: Curves.easeInOutCubicEmphasized.flipped, + ), + ); +} + +class RailTransition extends StatefulWidget { + const RailTransition( + {super.key, + required this.animation, + required this.backgroundColor, + required this.child}); + + final Animation animation; + final Widget child; + final Color backgroundColor; + + @override + State createState() => _RailTransition(); +} + +class _RailTransition extends State { + late Animation offsetAnimation; + late Animation widthAnimation; + + @override + void didChangeDependencies() { + super.didChangeDependencies(); + + // The animations are only rebuilt by this method when the text + // direction changes because this widget only depends on Directionality. + final bool ltr = Directionality.of(context) == TextDirection.ltr; + + widthAnimation = Tween( + begin: 0, + end: 1, + ).animate(SizeAnimation(widget.animation)); + + offsetAnimation = Tween( + begin: ltr ? const Offset(-1, 0) : const Offset(1, 0), + end: Offset.zero, + ).animate(OffsetAnimation(widget.animation)); + } + + @override + Widget build(BuildContext context) { + return ClipRect( + child: DecoratedBox( + decoration: BoxDecoration(color: widget.backgroundColor), + child: Align( + alignment: Alignment.topLeft, + widthFactor: widthAnimation.value, + child: FractionalTranslation( + translation: offsetAnimation.value, + child: widget.child, + ), + ), + ), + ); + } +} + +class BarTransition extends StatefulWidget { + const BarTransition( + {super.key, + required this.animation, + required this.backgroundColor, + required this.child}); + + final Animation animation; + final Color backgroundColor; + final Widget child; + + @override + State createState() => _BarTransition(); +} + +class _BarTransition extends State { + late final Animation offsetAnimation; + late final Animation heightAnimation; + + @override + void initState() { + super.initState(); + + offsetAnimation = Tween( + begin: const Offset(0, 1), + end: Offset.zero, + ).animate(OffsetAnimation(widget.animation)); + + heightAnimation = Tween( + begin: 0, + end: 1, + ).animate(SizeAnimation(widget.animation)); + } + + @override + Widget build(BuildContext context) { + return ClipRect( + child: DecoratedBox( + decoration: BoxDecoration(color: widget.backgroundColor), + child: Align( + alignment: Alignment.topLeft, + heightFactor: heightAnimation.value, + child: FractionalTranslation( + translation: offsetAnimation.value, + child: widget.child, + ), + ), + ), + ); + } +} + +class OneTwoTransition extends StatefulWidget { + const OneTwoTransition({ + super.key, + required this.animation, + required this.one, + required this.two, + }); + + final Animation animation; + final Widget one; + final Widget two; + + @override + State createState() => _OneTwoTransitionState(); +} + +class _OneTwoTransitionState extends State { + late final Animation offsetAnimation; + late final Animation widthAnimation; + + @override + void initState() { + super.initState(); + + offsetAnimation = Tween( + begin: const Offset(1, 0), + end: Offset.zero, + ).animate(OffsetAnimation(widget.animation)); + + widthAnimation = Tween( + begin: 0, + end: mediumWidthBreakpoint, + ).animate(SizeAnimation(widget.animation)); + } + + @override + Widget build(BuildContext context) { + return Row( + children: [ + Flexible( + flex: mediumWidthBreakpoint.toInt(), + child: widget.one, + ), + if (widthAnimation.value.toInt() > 0) ...[ + Flexible( + flex: widthAnimation.value.toInt(), + child: FractionalTranslation( + translation: offsetAnimation.value, + child: widget.two, + ), + ) + ], + ], + ); + } +} diff --git a/material_3_demo/lib/main.dart b/material_3_demo/lib/main.dart index b36fd8f10..5a0ec563b 100644 --- a/material_3_demo/lib/main.dart +++ b/material_3_demo/lib/main.dart @@ -3,75 +3,35 @@ // found in the LICENSE file. import 'package:flutter/material.dart'; -import 'package:flutter/scheduler.dart'; -import 'color_palettes_screen.dart'; -import 'component_screen.dart'; -import 'elevation_screen.dart'; -import 'typography_screen.dart'; +import 'constants.dart'; +import 'home.dart'; void main() { runApp( - const MaterialApp( - debugShowCheckedModeBanner: false, - home: Material3Demo(), - ), + const App(), ); } -class Material3Demo extends StatefulWidget { - const Material3Demo({super.key}); +class App extends StatefulWidget { + const App({super.key}); @override - State createState() => _Material3DemoState(); -} - -// NavigationRail shows if the screen width is greater or equal to -// screenWidthThreshold; otherwise, NavigationBar is used for navigation. -const double narrowScreenWidthThreshold = 450; - -const double transitionLength = 500; - -enum ColorSeed { - baseColor('M3 Baseline', Color(0xff6750a4)), - indigo('Indigo', Colors.indigo), - blue('Blue', Colors.blue), - teal('Teal', Colors.teal), - green('Green', Colors.green), - yellow('Yellow', Colors.yellow), - orange('Orange', Colors.orange), - deepOrange('Deep Orange', Colors.deepOrange), - pink('Pink', Colors.pink); - - const ColorSeed(this.label, this.color); - final String label; - final Color color; + State createState() => _AppState(); } -enum ScreenSelected { - component(0), - color(1), - typography(2), - elevation(3); - - const ScreenSelected(this.value); - final int value; -} - -class _Material3DemoState extends State - with SingleTickerProviderStateMixin { - final GlobalKey scaffoldKey = GlobalKey(); - late final AnimationController controller; - late final CurvedAnimation railAnimation; - bool controllerInitialized = false; - bool showMediumSizeLayout = false; - bool showLargeSizeLayout = false; +class _AppState extends State { bool useMaterial3 = true; ThemeMode themeMode = ThemeMode.system; + ColorSeed colorSelected = ColorSeed.baseColor; + ColorImageProvider imageSelected = ColorImageProvider.leaves; + ColorScheme? imageColorScheme = const ColorScheme.light(); + ColorSelectionMethod colorSelectionMethod = ColorSelectionMethod.colorSeed; + bool get useLightMode { switch (themeMode) { case ThemeMode.system: - return SchedulerBinding.instance.window.platformBrightness == + return View.of(context).platformDispatcher.platformBrightness == Brightness.light; case ThemeMode.light: return true; @@ -80,67 +40,6 @@ class _Material3DemoState extends State } } - ColorSeed colorSelected = ColorSeed.baseColor; - int screenIndex = ScreenSelected.component.value; - - @override - initState() { - super.initState(); - controller = AnimationController( - duration: Duration(milliseconds: transitionLength.toInt() * 2), - value: 0, - vsync: this, - ); - railAnimation = CurvedAnimation( - parent: controller, - curve: const Interval(0.5, 1.0), - ); - } - - @override - void dispose() { - controller.dispose(); - super.dispose(); - } - - @override - void didChangeDependencies() { - super.didChangeDependencies(); - - final double width = MediaQuery.of(context).size.width; - final AnimationStatus status = controller.status; - if (width > 1000) { - if (width > 1500) { - showMediumSizeLayout = false; - showLargeSizeLayout = true; - } else { - showMediumSizeLayout = true; - showLargeSizeLayout = false; - } - if (status != AnimationStatus.forward && - status != AnimationStatus.completed) { - controller.forward(); - } - } else { - showMediumSizeLayout = false; - showLargeSizeLayout = false; - if (status != AnimationStatus.reverse && - status != AnimationStatus.dismissed) { - controller.reverse(); - } - } - if (!controllerInitialized) { - controllerInitialized = true; - controller.value = width > 1000 ? 1 : 0; - } - } - - void handleScreenChanged(int screenSelected) { - setState(() { - screenIndex = screenSelected; - }); - } - void handleBrightnessChange(bool useLightMode) { setState(() { themeMode = useLightMode ? ThemeMode.light : ThemeMode.dark; @@ -155,138 +54,23 @@ class _Material3DemoState extends State void handleColorSelect(int value) { setState(() { + colorSelectionMethod = ColorSelectionMethod.colorSeed; colorSelected = ColorSeed.values[value]; }); } - Widget createScreenFor( - ScreenSelected screenSelected, bool showNavBarExample) { - switch (screenSelected) { - case ScreenSelected.component: - return Expanded( - child: OneTwoTransition( - animation: railAnimation, - one: FirstComponentList( - showNavBottomBar: showNavBarExample, - scaffoldKey: scaffoldKey, - showSecondList: showMediumSizeLayout || showLargeSizeLayout), - two: SecondComponentList( - scaffoldKey: scaffoldKey, - ), - ), - ); - case ScreenSelected.color: - return const ColorPalettesScreen(); - case ScreenSelected.typography: - return const TypographyScreen(); - case ScreenSelected.elevation: - return const ElevationScreen(); - default: - return FirstComponentList( - showNavBottomBar: showNavBarExample, - scaffoldKey: scaffoldKey, - showSecondList: showMediumSizeLayout || showLargeSizeLayout); - } - } - - PreferredSizeWidget createAppBar() { - return AppBar( - title: useMaterial3 ? const Text('Material 3') : const Text('Material 2'), - actions: !showMediumSizeLayout && !showLargeSizeLayout - ? [ - _BrightnessButton( - handleBrightnessChange: handleBrightnessChange, - ), - _Material3Button( - handleMaterialVersionChange: handleMaterialVersionChange, - ), - _ColorSeedButton( - handleColorSelect: handleColorSelect, - colorSelected: colorSelected, - ), - ] - : [Container()], - ); + void handleImageSelect(int value) { + final String url = ColorImageProvider.values[value].url; + ColorScheme.fromImageProvider(provider: NetworkImage(url)) + .then((newScheme) { + setState(() { + colorSelectionMethod = ColorSelectionMethod.image; + imageSelected = ColorImageProvider.values[value]; + imageColorScheme = newScheme; + }); + }); } - Widget _expandedTrailingActions() => Container( - constraints: const BoxConstraints.tightFor(width: 250), - padding: const EdgeInsets.symmetric(horizontal: 30), - child: Column( - mainAxisAlignment: MainAxisAlignment.end, - crossAxisAlignment: CrossAxisAlignment.stretch, - children: [ - Row( - children: [ - const Text('Brightness'), - Expanded(child: Container()), - Switch( - value: useLightMode, - onChanged: (value) { - handleBrightnessChange(value); - }) - ], - ), - Row( - children: [ - useMaterial3 - ? const Text('Material 3') - : const Text('Material 2'), - Expanded(child: Container()), - Switch( - value: useMaterial3, - onChanged: (_) { - handleMaterialVersionChange(); - }) - ], - ), - const Divider(), - ConstrainedBox( - constraints: const BoxConstraints(maxHeight: 200.0), - child: GridView.count( - crossAxisCount: 3, - children: List.generate( - ColorSeed.values.length, - (i) => IconButton( - icon: const Icon(Icons.radio_button_unchecked), - color: ColorSeed.values[i].color, - isSelected: - colorSelected.color == ColorSeed.values[i].color, - selectedIcon: const Icon(Icons.circle), - onPressed: () { - handleColorSelect(i); - }, - )), - ), - ), - ], - ), - ); - - Widget _trailingActions() => Column( - mainAxisAlignment: MainAxisAlignment.end, - children: [ - Flexible( - child: _BrightnessButton( - handleBrightnessChange: handleBrightnessChange, - showTooltipBelow: false, - ), - ), - Flexible( - child: _Material3Button( - handleMaterialVersionChange: handleMaterialVersionChange, - showTooltipBelow: false, - ), - ), - Flexible( - child: _ColorSeedButton( - handleColorSelect: handleColorSelect, - colorSelected: colorSelected, - ), - ), - ], - ); - @override Widget build(BuildContext context) { return MaterialApp( @@ -294,444 +78,33 @@ class _Material3DemoState extends State title: 'Material 3', themeMode: themeMode, theme: ThemeData( - colorSchemeSeed: colorSelected.color, + colorSchemeSeed: colorSelectionMethod == ColorSelectionMethod.colorSeed + ? colorSelected.color + : null, + colorScheme: colorSelectionMethod == ColorSelectionMethod.image + ? imageColorScheme + : null, useMaterial3: useMaterial3, brightness: Brightness.light, ), darkTheme: ThemeData( - colorSchemeSeed: colorSelected.color, + colorSchemeSeed: colorSelectionMethod == ColorSelectionMethod.colorSeed + ? colorSelected.color + : imageColorScheme!.primary, useMaterial3: useMaterial3, brightness: Brightness.dark, ), - home: AnimatedBuilder( - animation: controller, - builder: (context, child) { - return NavigationTransition( - scaffoldKey: scaffoldKey, - animationController: controller, - railAnimation: railAnimation, - appBar: createAppBar(), - body: createScreenFor( - ScreenSelected.values[screenIndex], controller.value == 1), - navigationRail: NavigationRail( - extended: showLargeSizeLayout, - destinations: navRailDestinations, - selectedIndex: screenIndex, - onDestinationSelected: (index) { - setState(() { - screenIndex = index; - handleScreenChanged(screenIndex); - }); - }, - trailing: Expanded( - child: Padding( - padding: const EdgeInsets.only(bottom: 20), - child: showLargeSizeLayout - ? _expandedTrailingActions() - : _trailingActions(), - ), - ), - ), - navigationBar: NavigationBars( - onSelectItem: (index) { - setState(() { - screenIndex = index; - handleScreenChanged(screenIndex); - }); - }, - selectedIndex: screenIndex, - isExampleBar: false, - ), - ); - }, - ), - ); - } -} - -class _BrightnessButton extends StatelessWidget { - const _BrightnessButton({ - required this.handleBrightnessChange, - this.showTooltipBelow = true, - }); - - final Function handleBrightnessChange; - final bool showTooltipBelow; - - @override - Widget build(BuildContext context) { - final isBright = Theme.of(context).brightness == Brightness.light; - return Tooltip( - preferBelow: showTooltipBelow, - message: 'Toggle brightness', - child: IconButton( - icon: isBright - ? const Icon(Icons.dark_mode_outlined) - : const Icon(Icons.light_mode_outlined), - onPressed: () => handleBrightnessChange(!isBright), - ), - ); - } -} - -class _Material3Button extends StatelessWidget { - const _Material3Button({ - required this.handleMaterialVersionChange, - this.showTooltipBelow = true, - }); - - final void Function() handleMaterialVersionChange; - final bool showTooltipBelow; - - @override - Widget build(BuildContext context) { - final useMaterial3 = Theme.of(context).useMaterial3; - return Tooltip( - preferBelow: showTooltipBelow, - message: 'Switch to Material ${useMaterial3 ? 2 : 3}', - child: IconButton( - icon: useMaterial3 - ? const Icon(Icons.filter_2) - : const Icon(Icons.filter_3), - onPressed: handleMaterialVersionChange, - ), - ); - } -} - -class _ColorSeedButton extends StatelessWidget { - const _ColorSeedButton({ - required this.handleColorSelect, - required this.colorSelected, - }); - - final void Function(int) handleColorSelect; - final ColorSeed colorSelected; - - @override - Widget build(BuildContext context) { - return PopupMenuButton( - icon: Icon( - Icons.palette_outlined, - color: Theme.of(context).colorScheme.onSurfaceVariant, - ), - tooltip: 'Select a seed color', - shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), - itemBuilder: (context) { - return List.generate(ColorSeed.values.length, (index) { - ColorSeed currentColor = ColorSeed.values[index]; - - return PopupMenuItem( - value: index, - enabled: currentColor != colorSelected, - child: Wrap( - children: [ - Padding( - padding: const EdgeInsets.only(left: 10), - child: Icon( - currentColor == colorSelected - ? Icons.color_lens - : Icons.color_lens_outlined, - color: currentColor.color, - ), - ), - Padding( - padding: const EdgeInsets.only(left: 20), - child: Text(currentColor.label), - ), - ], - ), - ); - }); - }, - onSelected: handleColorSelect, - ); - } -} - -class NavigationTransition extends StatefulWidget { - const NavigationTransition( - {super.key, - required this.scaffoldKey, - required this.animationController, - required this.railAnimation, - required this.navigationRail, - required this.navigationBar, - required this.appBar, - required this.body}); - - final GlobalKey scaffoldKey; - final AnimationController animationController; - final CurvedAnimation railAnimation; - final Widget navigationRail; - final Widget navigationBar; - final PreferredSizeWidget appBar; - final Widget body; - - @override - State createState() => _NavigationTransitionState(); -} - -class _NavigationTransitionState extends State { - late final AnimationController controller; - late final CurvedAnimation railAnimation; - late final ReverseAnimation barAnimation; - bool controllerInitialized = false; - bool showDivider = false; - - @override - void initState() { - super.initState(); - - controller = widget.animationController; - railAnimation = widget.railAnimation; - - barAnimation = ReverseAnimation( - CurvedAnimation( - parent: controller, - curve: const Interval(0.0, 0.5), - ), - ); - } - - @override - Widget build(BuildContext context) { - final ColorScheme colorScheme = Theme.of(context).colorScheme; - - return Scaffold( - key: widget.scaffoldKey, - appBar: widget.appBar, - body: Row( - children: [ - RailTransition( - animation: railAnimation, - backgroundColor: colorScheme.surface, - child: widget.navigationRail, - ), - widget.body, - ], - ), - bottomNavigationBar: BarTransition( - animation: barAnimation, - backgroundColor: colorScheme.surface, - child: widget.navigationBar, - ), - endDrawer: const NavigationDrawerSection(), - ); - } -} - -final List navRailDestinations = appBarDestinations - .map( - (destination) => NavigationRailDestination( - icon: Tooltip( - message: destination.label, - child: destination.icon, - ), - selectedIcon: Tooltip( - message: destination.label, - child: destination.selectedIcon, - ), - label: Text(destination.label), - ), - ) - .toList(); - -class SizeAnimation extends CurvedAnimation { - SizeAnimation(Animation parent) - : super( - parent: parent, - curve: const Interval( - 0.2, - 0.8, - curve: Curves.easeInOutCubicEmphasized, - ), - reverseCurve: Interval( - 0, - 0.2, - curve: Curves.easeInOutCubicEmphasized.flipped, - ), - ); -} - -class OffsetAnimation extends CurvedAnimation { - OffsetAnimation(Animation parent) - : super( - parent: parent, - curve: const Interval( - 0.4, - 1.0, - curve: Curves.easeInOutCubicEmphasized, - ), - reverseCurve: Interval( - 0, - 0.2, - curve: Curves.easeInOutCubicEmphasized.flipped, - ), - ); -} - -class RailTransition extends StatefulWidget { - const RailTransition( - {super.key, - required this.animation, - required this.backgroundColor, - required this.child}); - - final Animation animation; - final Widget child; - final Color backgroundColor; - - @override - State createState() => _RailTransition(); -} - -class _RailTransition extends State { - late Animation offsetAnimation; - late Animation widthAnimation; - - @override - void didChangeDependencies() { - super.didChangeDependencies(); - - // The animations are only rebuilt by this method when the text - // direction changes because this widget only depends on Directionality. - final bool ltr = Directionality.of(context) == TextDirection.ltr; - - widthAnimation = Tween( - begin: 0, - end: 1, - ).animate(SizeAnimation(widget.animation)); - - offsetAnimation = Tween( - begin: ltr ? const Offset(-1, 0) : const Offset(1, 0), - end: Offset.zero, - ).animate(OffsetAnimation(widget.animation)); - } - - @override - Widget build(BuildContext context) { - return ClipRect( - child: DecoratedBox( - decoration: BoxDecoration(color: widget.backgroundColor), - child: Align( - alignment: Alignment.topLeft, - widthFactor: widthAnimation.value, - child: FractionalTranslation( - translation: offsetAnimation.value, - child: widget.child, - ), - ), - ), - ); - } -} - -class BarTransition extends StatefulWidget { - const BarTransition( - {super.key, - required this.animation, - required this.backgroundColor, - required this.child}); - - final Animation animation; - final Color backgroundColor; - final Widget child; - - @override - State createState() => _BarTransition(); -} - -class _BarTransition extends State { - late final Animation offsetAnimation; - late final Animation heightAnimation; - - @override - void initState() { - super.initState(); - - offsetAnimation = Tween( - begin: const Offset(0, 1), - end: Offset.zero, - ).animate(OffsetAnimation(widget.animation)); - - heightAnimation = Tween( - begin: 0, - end: 1, - ).animate(SizeAnimation(widget.animation)); - } - - @override - Widget build(BuildContext context) { - return ClipRect( - child: DecoratedBox( - decoration: BoxDecoration(color: widget.backgroundColor), - child: Align( - alignment: Alignment.topLeft, - heightFactor: heightAnimation.value, - child: FractionalTranslation( - translation: offsetAnimation.value, - child: widget.child, - ), - ), + home: Home( + useLightMode: useLightMode, + useMaterial3: useMaterial3, + colorSelected: colorSelected, + imageSelected: imageSelected, + handleBrightnessChange: handleBrightnessChange, + handleMaterialVersionChange: handleMaterialVersionChange, + handleColorSelect: handleColorSelect, + handleImageSelect: handleImageSelect, + colorSelectionMethod: colorSelectionMethod, ), ); } } - -class OneTwoTransition extends StatefulWidget { - const OneTwoTransition({ - super.key, - required this.animation, - required this.one, - required this.two, - }); - - final Animation animation; - final Widget one; - final Widget two; - - @override - State createState() => _OneTwoTransitionState(); -} - -class _OneTwoTransitionState extends State { - late final Animation offsetAnimation; - late final Animation widthAnimation; - - @override - void initState() { - super.initState(); - - offsetAnimation = Tween( - begin: const Offset(1, 0), - end: Offset.zero, - ).animate(OffsetAnimation(widget.animation)); - - widthAnimation = Tween( - begin: 0, - end: 1000, - ).animate(SizeAnimation(widget.animation)); - } - - @override - Widget build(BuildContext context) { - return Row( - children: [ - Flexible( - flex: 1000, - child: widget.one, - ), - if (widthAnimation.value.toInt() > 0) ...[ - Flexible( - flex: widthAnimation.value.toInt(), - child: FractionalTranslation( - translation: offsetAnimation.value, - child: widget.two, - ), - ) - ], - ], - ); - } -} diff --git a/material_3_demo/linux/.gitignore b/material_3_demo/linux/.gitignore new file mode 100644 index 000000000..d3896c984 --- /dev/null +++ b/material_3_demo/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/material_3_demo/linux/CMakeLists.txt b/material_3_demo/linux/CMakeLists.txt new file mode 100644 index 000000000..4d8398481 --- /dev/null +++ b/material_3_demo/linux/CMakeLists.txt @@ -0,0 +1,139 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.10) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "material_3_demo") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.example.material_3_demo") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/material_3_demo/linux/flutter/CMakeLists.txt b/material_3_demo/linux/flutter/CMakeLists.txt new file mode 100644 index 000000000..d5bd01648 --- /dev/null +++ b/material_3_demo/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/material_3_demo/linux/flutter/generated_plugin_registrant.cc b/material_3_demo/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 000000000..f6f23bfe9 --- /dev/null +++ b/material_3_demo/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + +#include + +void fl_register_plugins(FlPluginRegistry* registry) { + g_autoptr(FlPluginRegistrar) url_launcher_linux_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "UrlLauncherPlugin"); + url_launcher_plugin_register_with_registrar(url_launcher_linux_registrar); +} diff --git a/material_3_demo/linux/flutter/generated_plugin_registrant.h b/material_3_demo/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 000000000..e0f0a47bc --- /dev/null +++ b/material_3_demo/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/material_3_demo/linux/flutter/generated_plugins.cmake b/material_3_demo/linux/flutter/generated_plugins.cmake new file mode 100644 index 000000000..f16b4c342 --- /dev/null +++ b/material_3_demo/linux/flutter/generated_plugins.cmake @@ -0,0 +1,24 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST + url_launcher_linux +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/material_3_demo/linux/main.cc b/material_3_demo/linux/main.cc new file mode 100644 index 000000000..e7c5c5437 --- /dev/null +++ b/material_3_demo/linux/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/material_3_demo/linux/my_application.cc b/material_3_demo/linux/my_application.cc new file mode 100644 index 000000000..0eb2ec9a5 --- /dev/null +++ b/material_3_demo/linux/my_application.cc @@ -0,0 +1,104 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "material_3_demo"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "material_3_demo"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/material_3_demo/linux/my_application.h b/material_3_demo/linux/my_application.h new file mode 100644 index 000000000..72271d5e4 --- /dev/null +++ b/material_3_demo/linux/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/material_3_demo/macos/Runner.xcodeproj/project.pbxproj b/material_3_demo/macos/Runner.xcodeproj/project.pbxproj index 34b8722c1..ddd81a110 100644 --- a/material_3_demo/macos/Runner.xcodeproj/project.pbxproj +++ b/material_3_demo/macos/Runner.xcodeproj/project.pbxproj @@ -21,6 +21,7 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; @@ -29,6 +30,13 @@ /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 33CC10E52044A3C60003C045 /* Project object */; @@ -52,6 +60,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* material_3_demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "material_3_demo.app"; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -71,6 +81,13 @@ /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 33CC10EA2044A3C60003C045 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -81,6 +98,14 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; 33BA886A226E78AF003329D5 /* Configs */ = { isa = PBXGroup; children = ( @@ -97,6 +122,7 @@ children = ( 33FAB671232836740065AC1E /* Runner */, 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, ); @@ -106,6 +132,7 @@ isa = PBXGroup; children = ( 33CC10ED2044A3C60003C045 /* material_3_demo.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, ); name = Products; sourceTree = ""; @@ -155,6 +182,24 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; 33CC10EC2044A3C60003C045 /* Runner */ = { isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; @@ -185,6 +230,10 @@ LastUpgradeCheck = 1300; ORGANIZATIONNAME = ""; TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; 33CC10EC2044A3C60003C045 = { CreatedOnToolsVersion = 9.2; LastSwiftMigration = 1100; @@ -215,12 +264,20 @@ projectRoot = ""; targets = ( 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, 33CC111A2044C6BA0003C045 /* Flutter Assemble */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 33CC10EB2044A3C60003C045 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -274,6 +331,14 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 33CC10E92044A3C60003C045 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -287,6 +352,11 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; @@ -307,6 +377,48 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.material3Demo.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/material_3_demo.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/material_3_demo"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.material3Demo.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/material_3_demo.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/material_3_demo"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.material3Demo.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/material_3_demo.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/material_3_demo"; + }; + name = Profile; + }; 338D0CE9231458BD00FA5F75 /* Profile */ = { isa = XCBuildConfiguration; baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; @@ -537,6 +649,16 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/material_3_demo/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/material_3_demo/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 2e347306a..7bf63357a 100644 --- a/material_3_demo/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/material_3_demo/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -37,6 +37,17 @@ + + + + com.apple.security.network.server + com.apple.security.network.client + diff --git a/material_3_demo/macos/Runner/Release.entitlements b/material_3_demo/macos/Runner/Release.entitlements index 852fa1a47..ee95ab7e5 100644 --- a/material_3_demo/macos/Runner/Release.entitlements +++ b/material_3_demo/macos/Runner/Release.entitlements @@ -4,5 +4,7 @@ com.apple.security.app-sandbox + com.apple.security.network.client + diff --git a/material_3_demo/macos/RunnerTests/RunnerTests.swift b/material_3_demo/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 000000000..5418c9f53 --- /dev/null +++ b/material_3_demo/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import FlutterMacOS +import Cocoa +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/material_3_demo/pubspec.yaml b/material_3_demo/pubspec.yaml index 09c335396..a5eb08a22 100644 --- a/material_3_demo/pubspec.yaml +++ b/material_3_demo/pubspec.yaml @@ -8,7 +8,7 @@ publish_to: "none" version: 1.0.0+1 environment: - sdk: ">=2.18.0-0 <3.0.0" + sdk: ^3.1.0 dependencies: flutter: @@ -18,10 +18,12 @@ dependencies: url_launcher: ^6.1.8 dev_dependencies: + analysis_defaults: + path: ../analysis_defaults flutter_test: sdk: flutter - - flutter_lints: ^2.0.1 + integration_test: + sdk: flutter flutter: uses-material-design: true diff --git a/material_3_demo/test/color_screen_test.dart b/material_3_demo/test/color_screen_test.dart index a29b089f7..3f82ce741 100644 --- a/material_3_demo/test/color_screen_test.dart +++ b/material_3_demo/test/color_screen_test.dart @@ -15,8 +15,8 @@ void main() { 'Color palettes screen shows correctly when color icon is clicked ' 'on NavigationBar', (tester) async { widgetSetup(tester, 449); - addTearDown(tester.binding.window.clearPhysicalSizeTestValue); - await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + addTearDown(tester.view.resetPhysicalSize); + await tester.pumpWidget(const App()); expect(find.text('Light ColorScheme'), findsNothing); expect(find.text('Dark ColorScheme'), findsNothing); @@ -44,8 +44,8 @@ void main() { 'on NavigationRail', (tester) async { widgetSetup( tester, 1200); // NavigationRail shows only when width is > 1000. - addTearDown(tester.binding.window.clearPhysicalSizeTestValue); - await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + addTearDown(tester.view.resetPhysicalSize); + await tester.pumpWidget(const App()); await tester.pumpAndSettle(); expect(find.text('Light ColorScheme'), findsNothing); expect(find.text('Dark ColorScheme'), findsNothing); @@ -65,8 +65,8 @@ void main() { }); testWidgets('Color screen shows correct content', (tester) async { - await tester.pumpWidget(MaterialApp( - home: Scaffold(body: Row(children: const [ColorPalettesScreen()])), + await tester.pumpWidget(const MaterialApp( + home: Scaffold(body: Row(children: [ColorPalettesScreen()])), )); expect(find.text('Light ColorScheme'), findsOneWidget); expect(find.text('Dark ColorScheme'), findsOneWidget); diff --git a/material_3_demo/test/component_screen_test.dart b/material_3_demo/test/component_screen_test.dart index e5f820995..b76721d5f 100644 --- a/material_3_demo/test/component_screen_test.dart +++ b/material_3_demo/test/component_screen_test.dart @@ -11,7 +11,7 @@ import 'package:material_3_demo/main.dart'; void main() { testWidgets('Default main page shows all M3 components', (tester) async { widgetSetup(tester, 800, windowHeight: 7000); - await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + await tester.pumpWidget(const App()); // Elements on the app bar expect(find.text('Material 3'), findsOneWidget); @@ -37,7 +37,8 @@ void main() { expect(find.widgetWithText(FloatingActionButton, 'Create'), findsOneWidget); // Icon buttons - expect(find.byType(IconToggleButton), findsNWidgets(8)); + expect(find.widgetWithIcon(IconButton, Icons.settings_outlined), + findsNWidgets(8)); // Segmented buttons expect(find.byType(SegmentedButton), findsOneWidget); @@ -93,6 +94,9 @@ void main() { // Tabs expect(find.byType(TabBar), findsOneWidget); + // Search + expect(find.byType(SearchBar), findsOneWidget); + // Top app bars expect(find.byType(AppBar), findsNWidgets(6)); @@ -106,6 +110,9 @@ void main() { expect(find.byType(FilterChip), findsNWidgets(2)); expect(find.byType(InputChip), findsNWidgets(2)); + // Date pickers + expect(find.widgetWithText(TextButton, 'Show date picker'), findsOneWidget); + // Menus expect(find.byType(MenuAnchor), findsNWidgets(5)); expect(find.byType(DropdownMenu), findsOneWidget); @@ -121,6 +128,9 @@ void main() { // Switches expect(find.byType(Switch), findsNWidgets(4)); + // Time pickers + expect(find.widgetWithText(TextButton, 'Show time picker'), findsOneWidget); + // TextFields expect(find.widgetWithText(TextField, 'Disabled'), findsNWidgets(2)); expect(find.widgetWithText(TextField, 'Filled'), findsNWidgets(2)); @@ -131,7 +141,7 @@ void main() { 'NavigationRail doesn\'t show when width value is small than 1000 ' '(in Portrait mode or narrow screen)', (tester) async { widgetSetup(tester, 999, windowHeight: 7000); - await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + await tester.pumpWidget(const App()); await tester.pumpAndSettle(); // When screen width is less than 1000, NavigationBar will show. At the same @@ -152,7 +162,7 @@ void main() { 'NavigationRail shows when width value is greater than or equal ' 'to 1000 (in Landscape mode or wider screen)', (tester) async { widgetSetup(tester, 1001, windowHeight: 3000); - await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + await tester.pumpWidget(const App()); await tester.pumpAndSettle(); // When screen width is greater than or equal to 1000, NavigationRail will show. @@ -178,7 +188,7 @@ void main() { 'Material version switches between Material3 and Material2 when' 'the version icon is clicked', (tester) async { widgetSetup(tester, 450, windowHeight: 7000); - await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + await tester.pumpWidget(const App()); BuildContext defaultElevatedButton = tester.firstElement(find.byType(ElevatedButton)); BuildContext defaultIconButton = @@ -244,7 +254,7 @@ void main() { testWidgets( 'Other screens become Material2 mode after changing mode from ' 'main screen', (tester) async { - await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + await tester.pumpWidget(const App()); Finder appbarM2Icon = find.descendant( of: find.byType(AppBar), matching: find.widgetWithIcon(IconButton, Icons.filter_2)); @@ -279,7 +289,7 @@ void main() { testWidgets( 'Brightness mode switches between dark and light when' 'the brightness icon is clicked', (tester) async { - await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + await tester.pumpWidget(const App()); Finder lightIcon = find.descendant( of: find.byType(AppBar), matching: find.widgetWithIcon(IconButton, Icons.light_mode_outlined)); @@ -314,7 +324,7 @@ void main() { (tester) async { Color m3BaseColor = const Color(0xff6750a4); await tester.pumpWidget(Container()); - await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + await tester.pumpWidget(const App()); await tester.pump(); Finder menuIcon = find.descendant( of: find.byType(AppBar), @@ -341,8 +351,7 @@ void main() { void widgetSetup(WidgetTester tester, double windowWidth, {double? windowHeight}) { final height = windowHeight ?? 846; - tester.binding.window.devicePixelRatioTestValue = (2); - final dpi = tester.binding.window.devicePixelRatio; - tester.binding.window.physicalSizeTestValue = - Size(windowWidth * dpi, height * dpi); + tester.view.devicePixelRatio = 2; + final dpi = tester.view.devicePixelRatio; + tester.view.physicalSize = Size(windowWidth * dpi, height * dpi); } diff --git a/material_3_demo/test/elevation_screen_test.dart b/material_3_demo/test/elevation_screen_test.dart index 737a355a6..77014efca 100644 --- a/material_3_demo/test/elevation_screen_test.dart +++ b/material_3_demo/test/elevation_screen_test.dart @@ -15,8 +15,8 @@ void main() { 'Surface Tones screen shows correctly when the corresponding icon is ' 'selected on NavigationBar', (tester) async { widgetSetup(tester, 449); - addTearDown(tester.binding.window.clearPhysicalSizeTestValue); - await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + addTearDown(tester.view.resetPhysicalSize); + await tester.pumpWidget(const App()); expect(find.text('Surface Tint Color Only'), findsNothing); expect(find.byType(NavigationBar), findsOneWidget); @@ -40,8 +40,8 @@ void main() { 'selected on NavigationRail', (tester) async { widgetSetup( tester, 1200); // NavigationRail shows only when width is > 1000. - addTearDown(tester.binding.window.clearPhysicalSizeTestValue); - await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + addTearDown(tester.view.resetPhysicalSize); + await tester.pumpWidget(const App()); expect(find.text('Surface Tint Color Only'), findsNothing); Finder tintIconOnRail = find.descendant( of: find.byType(NavigationRail), @@ -57,8 +57,8 @@ void main() { }); testWidgets('Surface Tones screen shows correct content', (tester) async { - await tester.pumpWidget(MaterialApp( - home: Scaffold(body: Row(children: const [ElevationScreen()])), + await tester.pumpWidget(const MaterialApp( + home: Scaffold(body: Row(children: [ElevationScreen()])), )); expect(find.text('Surface Tint Color Only'), findsOneWidget); expect(find.text('Surface Tint Color and Shadow Color'), findsOneWidget); diff --git a/material_3_demo/test/typography_screen_test.dart b/material_3_demo/test/typography_screen_test.dart index 234c14b3d..42c10cd2f 100644 --- a/material_3_demo/test/typography_screen_test.dart +++ b/material_3_demo/test/typography_screen_test.dart @@ -15,8 +15,8 @@ void main() { 'Typography screen shows correctly when the corresponding icon is ' 'selected on NavigationBar', (tester) async { widgetSetup(tester, 449); - addTearDown(tester.binding.window.clearPhysicalSizeTestValue); - await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + addTearDown(tester.view.resetPhysicalSize); + await tester.pumpWidget(const App()); expect(find.text('Display Large'), findsNothing); expect(find.byType(NavigationBar), findsOneWidget); @@ -39,8 +39,8 @@ void main() { 'selected on NavigationRail', (tester) async { widgetSetup( tester, 1200); // NavigationRail shows only when width is > 1000. - addTearDown(tester.binding.window.clearPhysicalSizeTestValue); - await tester.pumpWidget(const MaterialApp(home: Material3Demo())); + addTearDown(tester.view.resetPhysicalSize); + await tester.pumpWidget(const App()); expect(find.text('Display Large'), findsNothing); Finder textIconOnRail = find.descendant( of: find.byType(NavigationRail), @@ -57,8 +57,8 @@ void main() { }); testWidgets('Typography screen shows correct content', (tester) async { - await tester.pumpWidget(MaterialApp( - home: Scaffold(body: Row(children: const [TypographyScreen()])), + await tester.pumpWidget(const MaterialApp( + home: Scaffold(body: Row(children: [TypographyScreen()])), )); expect(find.text('Display Large'), findsOneWidget); expect(find.text('Display Medium'), findsOneWidget); diff --git a/material_3_demo/web/index.html b/material_3_demo/web/index.html index 772a4875a..2168a65da 100644 --- a/material_3_demo/web/index.html +++ b/material_3_demo/web/index.html @@ -31,74 +31,29 @@ material_3_demo + + + + - diff --git a/material_3_demo/windows/CMakeLists.txt b/material_3_demo/windows/CMakeLists.txt index 327c4c996..dec9d0b6f 100644 --- a/material_3_demo/windows/CMakeLists.txt +++ b/material_3_demo/windows/CMakeLists.txt @@ -52,6 +52,7 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) # Application build; see runner/CMakeLists.txt. add_subdirectory("runner") + # Generated plugin build rules, which manage building the plugins and adding # them to the application. include(flutter/generated_plugins.cmake) diff --git a/material_3_demo/windows/runner/CMakeLists.txt b/material_3_demo/windows/runner/CMakeLists.txt index b9e550fba..394917c05 100644 --- a/material_3_demo/windows/runner/CMakeLists.txt +++ b/material_3_demo/windows/runner/CMakeLists.txt @@ -20,12 +20,20 @@ add_executable(${BINARY_NAME} WIN32 # that need different build settings. apply_standard_settings(${BINARY_NAME}) +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + # Disable Windows macros that collide with C++ standard library functions. target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") # Add dependency libraries and include directories. Add any application-specific # dependencies here. target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") # Run the Flutter tool portions of the build. This must not be removed. diff --git a/material_3_demo/windows/runner/Runner.rc b/material_3_demo/windows/runner/Runner.rc index 1b2c26782..0a24f5fd6 100644 --- a/material_3_demo/windows/runner/Runner.rc +++ b/material_3_demo/windows/runner/Runner.rc @@ -60,14 +60,14 @@ IDI_APP_ICON ICON "resources\\app_icon.ico" // Version // -#ifdef FLUTTER_BUILD_NUMBER -#define VERSION_AS_NUMBER FLUTTER_BUILD_NUMBER +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD #else -#define VERSION_AS_NUMBER 1,0,0 +#define VERSION_AS_NUMBER 1,0,0,0 #endif -#ifdef FLUTTER_BUILD_NAME -#define VERSION_AS_STRING #FLUTTER_BUILD_NAME +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION #else #define VERSION_AS_STRING "1.0.0" #endif @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "material_3_demo" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "material_3_demo" "\0" - VALUE "LegalCopyright", "Copyright (C) 2022 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2023 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "material_3_demo.exe" "\0" VALUE "ProductName", "material_3_demo" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/material_3_demo/windows/runner/flutter_window.cpp b/material_3_demo/windows/runner/flutter_window.cpp index b43b9095e..b25e363ef 100644 --- a/material_3_demo/windows/runner/flutter_window.cpp +++ b/material_3_demo/windows/runner/flutter_window.cpp @@ -26,6 +26,11 @@ bool FlutterWindow::OnCreate() { } RegisterPlugins(flutter_controller_->engine()); SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + return true; } diff --git a/material_3_demo/windows/runner/main.cpp b/material_3_demo/windows/runner/main.cpp index 9e45ce43d..8585dc232 100644 --- a/material_3_demo/windows/runner/main.cpp +++ b/material_3_demo/windows/runner/main.cpp @@ -27,7 +27,7 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, FlutterWindow window(project); Win32Window::Point origin(10, 10); Win32Window::Size size(1280, 720); - if (!window.CreateAndShow(L"material_3_demo", origin, size)) { + if (!window.Create(L"material_3_demo", origin, size)) { return EXIT_FAILURE; } window.SetQuitOnClose(true); diff --git a/material_3_demo/windows/runner/runner.exe.manifest b/material_3_demo/windows/runner/runner.exe.manifest index c977c4a42..a42ea7687 100644 --- a/material_3_demo/windows/runner/runner.exe.manifest +++ b/material_3_demo/windows/runner/runner.exe.manifest @@ -7,7 +7,7 @@ - + diff --git a/material_3_demo/windows/runner/utils.cpp b/material_3_demo/windows/runner/utils.cpp index f5bf9fa0f..b2b08734d 100644 --- a/material_3_demo/windows/runner/utils.cpp +++ b/material_3_demo/windows/runner/utils.cpp @@ -47,16 +47,17 @@ std::string Utf8FromUtf16(const wchar_t* utf16_string) { } int target_length = ::WideCharToMultiByte( CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, nullptr, 0, nullptr, nullptr); + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); std::string utf8_string; - if (target_length == 0 || target_length > utf8_string.max_size()) { + if (target_length <= 0 || target_length > utf8_string.max_size()) { return utf8_string; } utf8_string.resize(target_length); int converted_length = ::WideCharToMultiByte( CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, utf8_string.data(), - target_length, nullptr, nullptr); + input_length, utf8_string.data(), target_length, nullptr, nullptr); if (converted_length == 0) { return std::string(); } diff --git a/material_3_demo/windows/runner/win32_window.cpp b/material_3_demo/windows/runner/win32_window.cpp index c10f08dc7..60608d0fe 100644 --- a/material_3_demo/windows/runner/win32_window.cpp +++ b/material_3_demo/windows/runner/win32_window.cpp @@ -1,13 +1,31 @@ #include "win32_window.h" +#include #include #include "resource.h" namespace { +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + // The number of Win32Window objects that currently exist. static int g_active_window_count = 0; @@ -31,8 +49,8 @@ void EnableFullDpiSupportIfAvailable(HWND hwnd) { GetProcAddress(user32_module, "EnableNonClientDpiScaling")); if (enable_non_client_dpi_scaling != nullptr) { enable_non_client_dpi_scaling(hwnd); - FreeLibrary(user32_module); } + FreeLibrary(user32_module); } } // namespace @@ -42,7 +60,7 @@ class WindowClassRegistrar { public: ~WindowClassRegistrar() = default; - // Returns the singleton registar instance. + // Returns the singleton registrar instance. static WindowClassRegistrar* GetInstance() { if (!instance_) { instance_ = new WindowClassRegistrar(); @@ -102,9 +120,9 @@ Win32Window::~Win32Window() { Destroy(); } -bool Win32Window::CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size) { +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { Destroy(); const wchar_t* window_class = @@ -117,7 +135,7 @@ bool Win32Window::CreateAndShow(const std::wstring& title, double scale_factor = dpi / 96.0; HWND window = CreateWindow( - window_class, title.c_str(), WS_OVERLAPPEDWINDOW | WS_VISIBLE, + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), Scale(size.width, scale_factor), Scale(size.height, scale_factor), nullptr, nullptr, GetModuleHandle(nullptr), this); @@ -126,9 +144,15 @@ bool Win32Window::CreateAndShow(const std::wstring& title, return false; } + UpdateTheme(window); + return OnCreate(); } +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + // static LRESULT CALLBACK Win32Window::WndProc(HWND const window, UINT const message, @@ -188,6 +212,10 @@ Win32Window::MessageHandler(HWND hwnd, SetFocus(child_content_); } return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; } return DefWindowProc(window_handle_, message, wparam, lparam); @@ -243,3 +271,18 @@ bool Win32Window::OnCreate() { void Win32Window::OnDestroy() { // No-op; provided for subclasses. } + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/material_3_demo/windows/runner/win32_window.h b/material_3_demo/windows/runner/win32_window.h index 17ba43112..e901dde68 100644 --- a/material_3_demo/windows/runner/win32_window.h +++ b/material_3_demo/windows/runner/win32_window.h @@ -28,15 +28,16 @@ class Win32Window { Win32Window(); virtual ~Win32Window(); - // Creates and shows a win32 window with |title| and position and size using + // Creates a win32 window with |title| that is positioned and sized using // |origin| and |size|. New windows are created on the default monitor. Window // sizes are specified to the OS in physical pixels, hence to ensure a - // consistent size to will treat the width height passed in to this function - // as logical pixels and scale to appropriate for the default monitor. Returns - // true if the window was created successfully. - bool CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size); + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); // Release OS resources associated with window. void Destroy(); @@ -76,7 +77,7 @@ class Win32Window { // OS callback called by message pump. Handles the WM_NCCREATE message which // is passed when the non-client area is being created and enables automatic // non-client DPI scaling so that the non-client area automatically - // responsponds to changes in DPI. All other messages are handled by + // responds to changes in DPI. All other messages are handled by // MessageHandler. static LRESULT CALLBACK WndProc(HWND const window, UINT const message, @@ -86,6 +87,9 @@ class Win32Window { // Retrieves a class instance pointer for |window| static Win32Window* GetThisFromHandle(HWND const window) noexcept; + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + bool quit_on_close_ = false; // window handle for top level window. diff --git a/navigation_and_routing/.metadata b/navigation_and_routing/.metadata index d680382e1..620e877d2 100644 --- a/navigation_and_routing/.metadata +++ b/navigation_and_routing/.metadata @@ -1,11 +1,11 @@ # This file tracks properties of this Flutter project. # Used by Flutter tool to assess capabilities and perform upgrades etc. # -# This file should be version controlled. +# This file should be version controlled and should not be manually edited. version: - revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - channel: beta + revision: "ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a" + channel: "stable" project_type: app @@ -13,26 +13,26 @@ project_type: app migration: platforms: - platform: root - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a - platform: android - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a - platform: ios - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a - platform: linux - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a - platform: macos - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a - platform: web - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a - platform: windows - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a # User provided section diff --git a/navigation_and_routing/analysis_options.yaml b/navigation_and_routing/analysis_options.yaml index 5e2133eb6..13d6fe105 100644 --- a/navigation_and_routing/analysis_options.yaml +++ b/navigation_and_routing/analysis_options.yaml @@ -1 +1 @@ -include: ../analysis_options.yaml +include: package:analysis_defaults/flutter.yaml diff --git a/navigation_and_routing/android/app/build.gradle b/navigation_and_routing/android/app/build.gradle index 04490c218..ad0c90590 100644 --- a/navigation_and_routing/android/app/build.gradle +++ b/navigation_and_routing/android/app/build.gradle @@ -1,3 +1,9 @@ +plugins { + id "com.android.application" + id "kotlin-android" + id "dev.flutter.flutter-gradle-plugin" +} + def localProperties = new Properties() def localPropertiesFile = rootProject.file('local.properties') if (localPropertiesFile.exists()) { @@ -6,11 +12,6 @@ if (localPropertiesFile.exists()) { } } -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - def flutterVersionCode = localProperties.getProperty('flutter.versionCode') if (flutterVersionCode == null) { flutterVersionCode = '1' @@ -21,11 +22,8 @@ if (flutterVersionName == null) { flutterVersionName = '1.0' } -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - android { + namespace "dev.flutter.navigation_and_routing" compileSdkVersion flutter.compileSdkVersion ndkVersion flutter.ndkVersion @@ -66,6 +64,4 @@ flutter { source '../..' } -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" -} +dependencies {} diff --git a/navigation_and_routing/android/app/src/debug/AndroidManifest.xml b/navigation_and_routing/android/app/src/debug/AndroidManifest.xml index 02691a92b..399f6981d 100644 --- a/navigation_and_routing/android/app/src/debug/AndroidManifest.xml +++ b/navigation_and_routing/android/app/src/debug/AndroidManifest.xml @@ -1,5 +1,4 @@ - + diff --git a/navigation_and_routing/windows/CMakeLists.txt b/navigation_and_routing/windows/CMakeLists.txt index e2777f86f..b17291fad 100644 --- a/navigation_and_routing/windows/CMakeLists.txt +++ b/navigation_and_routing/windows/CMakeLists.txt @@ -8,7 +8,7 @@ set(BINARY_NAME "navigation_and_routing") # Explicitly opt in to modern CMake behaviors to avoid warnings with recent # versions of CMake. -cmake_policy(SET CMP0063 NEW) +cmake_policy(VERSION 3.14...3.25) # Define build configuration option. get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) @@ -52,6 +52,7 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) # Application build; see runner/CMakeLists.txt. add_subdirectory("runner") + # Generated plugin build rules, which manage building the plugins and adding # them to the application. include(flutter/generated_plugins.cmake) diff --git a/navigation_and_routing/windows/runner/flutter_window.cpp b/navigation_and_routing/windows/runner/flutter_window.cpp index b25e363ef..955ee3038 100644 --- a/navigation_and_routing/windows/runner/flutter_window.cpp +++ b/navigation_and_routing/windows/runner/flutter_window.cpp @@ -31,6 +31,11 @@ bool FlutterWindow::OnCreate() { this->Show(); }); + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + return true; } diff --git a/navigation_and_routing/windows/runner/utils.cpp b/navigation_and_routing/windows/runner/utils.cpp index f5bf9fa0f..b2b08734d 100644 --- a/navigation_and_routing/windows/runner/utils.cpp +++ b/navigation_and_routing/windows/runner/utils.cpp @@ -47,16 +47,17 @@ std::string Utf8FromUtf16(const wchar_t* utf16_string) { } int target_length = ::WideCharToMultiByte( CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, nullptr, 0, nullptr, nullptr); + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); std::string utf8_string; - if (target_length == 0 || target_length > utf8_string.max_size()) { + if (target_length <= 0 || target_length > utf8_string.max_size()) { return utf8_string; } utf8_string.resize(target_length); int converted_length = ::WideCharToMultiByte( CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, utf8_string.data(), - target_length, nullptr, nullptr); + input_length, utf8_string.data(), target_length, nullptr, nullptr); if (converted_length == 0) { return std::string(); } diff --git a/navigation_and_routing/windows/runner/win32_window.cpp b/navigation_and_routing/windows/runner/win32_window.cpp index 041a38554..60608d0fe 100644 --- a/navigation_and_routing/windows/runner/win32_window.cpp +++ b/navigation_and_routing/windows/runner/win32_window.cpp @@ -60,7 +60,7 @@ class WindowClassRegistrar { public: ~WindowClassRegistrar() = default; - // Returns the singleton registar instance. + // Returns the singleton registrar instance. static WindowClassRegistrar* GetInstance() { if (!instance_) { instance_ = new WindowClassRegistrar(); diff --git a/navigation_and_routing/windows/runner/win32_window.h b/navigation_and_routing/windows/runner/win32_window.h index c86632d8a..e901dde68 100644 --- a/navigation_and_routing/windows/runner/win32_window.h +++ b/navigation_and_routing/windows/runner/win32_window.h @@ -77,7 +77,7 @@ class Win32Window { // OS callback called by message pump. Handles the WM_NCCREATE message which // is passed when the non-client area is being created and enables automatic // non-client DPI scaling so that the non-client area automatically - // responsponds to changes in DPI. All other messages are handled by + // responds to changes in DPI. All other messages are handled by // MessageHandler. static LRESULT CALLBACK WndProc(HWND const window, UINT const message, diff --git a/place_tracker/.metadata b/place_tracker/.metadata index 56886885a..4955516d1 100644 --- a/place_tracker/.metadata +++ b/place_tracker/.metadata @@ -1,11 +1,11 @@ # This file tracks properties of this Flutter project. # Used by Flutter tool to assess capabilities and perform upgrades etc. # -# This file should be version controlled. +# This file should be version controlled and should not be manually edited. version: - revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - channel: beta + revision: "ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a" + channel: "stable" project_type: app @@ -13,17 +13,17 @@ project_type: app migration: platforms: - platform: root - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a - platform: android - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a - platform: ios - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a - platform: web - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a # User provided section diff --git a/place_tracker/analysis_options.yaml b/place_tracker/analysis_options.yaml index 5e2133eb6..13d6fe105 100644 --- a/place_tracker/analysis_options.yaml +++ b/place_tracker/analysis_options.yaml @@ -1 +1 @@ -include: ../analysis_options.yaml +include: package:analysis_defaults/flutter.yaml diff --git a/place_tracker/android/app/build.gradle b/place_tracker/android/app/build.gradle index b5ab0a2a4..6249885b2 100644 --- a/place_tracker/android/app/build.gradle +++ b/place_tracker/android/app/build.gradle @@ -1,3 +1,9 @@ +plugins { + id "com.android.application" + id "kotlin-android" + id "dev.flutter.flutter-gradle-plugin" +} + def localProperties = new Properties() def localPropertiesFile = rootProject.file('local.properties') if (localPropertiesFile.exists()) { @@ -6,11 +12,6 @@ if (localPropertiesFile.exists()) { } } -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - def flutterVersionCode = localProperties.getProperty('flutter.versionCode') if (flutterVersionCode == null) { flutterVersionCode = '1' @@ -21,11 +22,8 @@ if (flutterVersionName == null) { flutterVersionName = '1.0' } -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - android { + namespace "dev.flutter.place_tracker" compileSdkVersion flutter.compileSdkVersion ndkVersion flutter.ndkVersion @@ -45,9 +43,8 @@ android { defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "dev.flutter.place_tracker" - // You can update the following values to match your application needs. - // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. - minSdkVersion flutter.minSdkVersion + // Google Maps requires a minimum SDK version of 20 + minSdkVersion 20 targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() versionName flutterVersionName @@ -66,6 +63,4 @@ flutter { source '../..' } -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" -} +dependencies {} diff --git a/place_tracker/android/app/src/debug/AndroidManifest.xml b/place_tracker/android/app/src/debug/AndroidManifest.xml index fecbe0f5f..399f6981d 100644 --- a/place_tracker/android/app/src/debug/AndroidManifest.xml +++ b/place_tracker/android/app/src/debug/AndroidManifest.xml @@ -1,5 +1,4 @@ - + + + + + + + diff --git a/platform_channels/.metadata b/platform_channels/.metadata index 8da4f9720..b7aa9344c 100644 --- a/platform_channels/.metadata +++ b/platform_channels/.metadata @@ -1,11 +1,11 @@ # This file tracks properties of this Flutter project. # Used by Flutter tool to assess capabilities and perform upgrades etc. # -# This file should be version controlled. +# This file should be version controlled and should not be manually edited. version: - revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - channel: beta + revision: "2524052335ec76bb03e04ede244b071f1b86d190" + channel: "stable" project_type: app @@ -13,14 +13,14 @@ project_type: app migration: platforms: - platform: root - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: 2524052335ec76bb03e04ede244b071f1b86d190 + base_revision: 2524052335ec76bb03e04ede244b071f1b86d190 - platform: android - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: 2524052335ec76bb03e04ede244b071f1b86d190 + base_revision: 2524052335ec76bb03e04ede244b071f1b86d190 - platform: ios - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: 2524052335ec76bb03e04ede244b071f1b86d190 + base_revision: 2524052335ec76bb03e04ede244b071f1b86d190 # User provided section diff --git a/platform_channels/analysis_options.yaml b/platform_channels/analysis_options.yaml index 5e2133eb6..13d6fe105 100644 --- a/platform_channels/analysis_options.yaml +++ b/platform_channels/analysis_options.yaml @@ -1 +1 @@ -include: ../analysis_options.yaml +include: package:analysis_defaults/flutter.yaml diff --git a/platform_channels/android/app/build.gradle b/platform_channels/android/app/build.gradle index 13205644d..bebc96d32 100644 --- a/platform_channels/android/app/build.gradle +++ b/platform_channels/android/app/build.gradle @@ -1,3 +1,9 @@ +plugins { + id "com.android.application" + id "kotlin-android" + id "dev.flutter.flutter-gradle-plugin" +} + def localProperties = new Properties() def localPropertiesFile = rootProject.file('local.properties') if (localPropertiesFile.exists()) { @@ -6,11 +12,6 @@ if (localPropertiesFile.exists()) { } } -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - def flutterVersionCode = localProperties.getProperty('flutter.versionCode') if (flutterVersionCode == null) { flutterVersionCode = '1' @@ -21,11 +22,8 @@ if (flutterVersionName == null) { flutterVersionName = '1.0' } -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - android { + namespace "dev.flutter.platform_channels" compileSdkVersion flutter.compileSdkVersion ndkVersion flutter.ndkVersion @@ -67,6 +65,5 @@ flutter { } dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" implementation 'com.google.code.gson:gson:2.8.6' } diff --git a/platform_channels/android/app/src/debug/AndroidManifest.xml b/platform_channels/android/app/src/debug/AndroidManifest.xml index 9a192138a..399f6981d 100644 --- a/platform_channels/android/app/src/debug/AndroidManifest.xml +++ b/platform_channels/android/app/src/debug/AndroidManifest.xml @@ -1,5 +1,4 @@ - + diff --git a/platform_view_swift/analysis_options.yaml b/platform_view_swift/analysis_options.yaml index 5e2133eb6..13d6fe105 100644 --- a/platform_view_swift/analysis_options.yaml +++ b/platform_view_swift/analysis_options.yaml @@ -1 +1 @@ -include: ../analysis_options.yaml +include: package:analysis_defaults/flutter.yaml diff --git a/platform_view_swift/lib/main.dart b/platform_view_swift/lib/main.dart index 74a5f154c..89191c6eb 100644 --- a/platform_view_swift/lib/main.dart +++ b/platform_view_swift/lib/main.dart @@ -20,6 +20,7 @@ class PlatformView extends StatelessWidget { title: 'Platform View', theme: ThemeData( primarySwatch: Colors.grey, + useMaterial3: true, ), home: const HomePage(), ); diff --git a/platform_view_swift/pubspec.yaml b/platform_view_swift/pubspec.yaml index abc8128ae..7d0e5e561 100644 --- a/platform_view_swift/pubspec.yaml +++ b/platform_view_swift/pubspec.yaml @@ -4,7 +4,7 @@ description: A new Flutter project. version: 1.0.0+1 environment: - sdk: ">=2.17.0-0 <3.0.0" + sdk: ^3.1.0 dependencies: flutter: @@ -13,9 +13,10 @@ dependencies: cupertino_icons: ^1.0.4 dev_dependencies: + analysis_defaults: + path: ../analysis_defaults flutter_test: sdk: flutter - flutter_lints: ^2.0.1 flutter: uses-material-design: true diff --git a/provider_counter/.metadata b/provider_counter/.metadata index 51ddb8ff3..a7cbe7932 100644 --- a/provider_counter/.metadata +++ b/provider_counter/.metadata @@ -1,10 +1,45 @@ # This file tracks properties of this Flutter project. # Used by Flutter tool to assess capabilities and perform upgrades etc. # -# This file should be version controlled and should not be manually edited. +# This file should be version controlled. version: - revision: 7a4c33425ddd78c54aba07d86f3f9a4a0051769b + revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f channel: beta project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + - platform: android + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + - platform: ios + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + - platform: linux + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + - platform: macos + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + - platform: web + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + - platform: windows + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/provider_counter/analysis_options.yaml b/provider_counter/analysis_options.yaml index 5e2133eb6..13d6fe105 100644 --- a/provider_counter/analysis_options.yaml +++ b/provider_counter/analysis_options.yaml @@ -1 +1 @@ -include: ../analysis_options.yaml +include: package:analysis_defaults/flutter.yaml diff --git a/provider_counter/android/app/build.gradle b/provider_counter/android/app/build.gradle index 79212eac7..2acc34180 100644 --- a/provider_counter/android/app/build.gradle +++ b/provider_counter/android/app/build.gradle @@ -27,6 +27,7 @@ apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { compileSdkVersion flutter.compileSdkVersion + ndkVersion flutter.ndkVersion compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 @@ -43,7 +44,9 @@ android { defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). - applicationId "dev.flutter.provider_counter" + applicationId "com.example.provider_counter" + // You can update the following values to match your application needs. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. minSdkVersion flutter.minSdkVersion targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() diff --git a/provider_counter/android/app/src/debug/AndroidManifest.xml b/provider_counter/android/app/src/debug/AndroidManifest.xml index 2f59b9d75..b3f60a937 100644 --- a/provider_counter/android/app/src/debug/AndroidManifest.xml +++ b/provider_counter/android/app/src/debug/AndroidManifest.xml @@ -1,6 +1,7 @@ - diff --git a/provider_counter/android/app/src/main/AndroidManifest.xml b/provider_counter/android/app/src/main/AndroidManifest.xml index 16765bee3..3b36dabca 100644 --- a/provider_counter/android/app/src/main/AndroidManifest.xml +++ b/provider_counter/android/app/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ - + diff --git a/provider_counter/android/app/src/main/kotlin/dev/flutter/provider_counter/MainActivity.kt b/provider_counter/android/app/src/main/kotlin/com/example/provider_counter/MainActivity.kt similarity index 72% rename from provider_counter/android/app/src/main/kotlin/dev/flutter/provider_counter/MainActivity.kt rename to provider_counter/android/app/src/main/kotlin/com/example/provider_counter/MainActivity.kt index 905be3687..2e4fab4e0 100644 --- a/provider_counter/android/app/src/main/kotlin/dev/flutter/provider_counter/MainActivity.kt +++ b/provider_counter/android/app/src/main/kotlin/com/example/provider_counter/MainActivity.kt @@ -1,4 +1,4 @@ -package dev.flutter.provider_counter +package com.example.provider_counter import io.flutter.embedding.android.FlutterActivity diff --git a/provider_counter/android/app/src/main/res/values-night/styles.xml b/provider_counter/android/app/src/main/res/values-night/styles.xml index 3db14bb53..06952be74 100644 --- a/provider_counter/android/app/src/main/res/values-night/styles.xml +++ b/provider_counter/android/app/src/main/res/values-night/styles.xml @@ -3,7 +3,7 @@ diff --git a/provider_counter/android/build.gradle b/provider_counter/android/build.gradle index 4256f9173..e50c3a02b 100644 --- a/provider_counter/android/build.gradle +++ b/provider_counter/android/build.gradle @@ -1,12 +1,12 @@ buildscript { - ext.kotlin_version = '1.6.10' + ext.kotlin_version = '1.7.10' repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:4.1.0' + classpath 'com.android.tools.build:gradle:7.3.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/provider_counter/android/gradle/wrapper/gradle-wrapper.properties b/provider_counter/android/gradle/wrapper/gradle-wrapper.properties index bc6a58afd..3c472b99c 100644 --- a/provider_counter/android/gradle/wrapper/gradle-wrapper.properties +++ b/provider_counter/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Fri Jun 23 08:50:38 CEST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip diff --git a/provider_counter/ios/.gitignore b/provider_counter/ios/.gitignore index e96ef602b..7a7f9873a 100644 --- a/provider_counter/ios/.gitignore +++ b/provider_counter/ios/.gitignore @@ -1,3 +1,4 @@ +**/dgph *.mode1v3 *.mode2v3 *.moved-aside @@ -18,6 +19,7 @@ Flutter/App.framework Flutter/Flutter.framework Flutter/Flutter.podspec Flutter/Generated.xcconfig +Flutter/ephemeral/ Flutter/app.flx Flutter/app.zip Flutter/flutter_assets/ diff --git a/provider_counter/ios/Flutter/AppFrameworkInfo.plist b/provider_counter/ios/Flutter/AppFrameworkInfo.plist index 6b4c0f78a..9625e105d 100644 --- a/provider_counter/ios/Flutter/AppFrameworkInfo.plist +++ b/provider_counter/ios/Flutter/AppFrameworkInfo.plist @@ -3,7 +3,7 @@ CFBundleDevelopmentRegion - $(DEVELOPMENT_LANGUAGE) + en CFBundleExecutable App CFBundleIdentifier @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 8.0 + 11.0 diff --git a/provider_counter/ios/Podfile b/provider_counter/ios/Podfile index 1e8c3c90a..fdcc671eb 100644 --- a/provider_counter/ios/Podfile +++ b/provider_counter/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '9.0' +# platform :ios, '11.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' @@ -32,6 +32,9 @@ target 'Runner' do use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end end post_install do |installer| diff --git a/provider_counter/ios/Runner.xcodeproj/project.pbxproj b/provider_counter/ios/Runner.xcodeproj/project.pbxproj index 669f0f641..d3d9943ce 100644 --- a/provider_counter/ios/Runner.xcodeproj/project.pbxproj +++ b/provider_counter/ios/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -13,8 +13,19 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXCopyFilesBuildPhase section */ 9705A1C41CF9048500538489 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; @@ -42,6 +53,8 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -66,12 +79,21 @@ name = Flutter; sourceTree = ""; }; + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; 97C146E51CF9000F007C117D = { isa = PBXGroup; children = ( 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, ); sourceTree = ""; }; @@ -79,6 +101,7 @@ isa = PBXGroup; children = ( 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, ); name = Products; sourceTree = ""; @@ -90,7 +113,6 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */, 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, 97C147021CF9000F007C117D /* Info.plist */, - 97C146F11CF9000F007C117D /* Supporting Files */, 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, @@ -99,16 +121,27 @@ path = Runner; sourceTree = ""; }; - 97C146F11CF9000F007C117D /* Supporting Files */ = { - isa = PBXGroup; - children = ( - ); - name = "Supporting Files"; - sourceTree = ""; - }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C807D294A63A400263BE5 /* Sources */, + 331C807E294A63A400263BE5 /* Frameworks */, + 331C807F294A63A400263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; 97C146ED1CF9000F007C117D /* Runner */ = { isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; @@ -135,9 +168,13 @@ 97C146E61CF9000F007C117D /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1020; + LastUpgradeCheck = 1300; ORGANIZATIONNAME = ""; TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; 97C146ED1CF9000F007C117D = { CreatedOnToolsVersion = 7.3.1; LastSwiftMigration = 1100; @@ -145,7 +182,7 @@ }; }; buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 3.2"; + compatibilityVersion = "Xcode 9.3"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( @@ -158,11 +195,19 @@ projectRoot = ""; targets = ( 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EC1CF9000F007C117D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -179,10 +224,12 @@ /* Begin PBXShellScriptBuildPhase section */ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); name = "Thin Binary"; outputPaths = ( @@ -193,6 +240,7 @@ }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -208,6 +256,14 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EA1CF9000F007C117D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -219,6 +275,14 @@ }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin PBXVariantGroup section */ 97C146FA1CF9000F007C117D /* Main.storyboard */ = { isa = PBXVariantGroup; @@ -280,7 +344,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -296,18 +360,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = TC87DMJLQP; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Flutter", + "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.providerCounter; + PRODUCT_BUNDLE_IDENTIFIER = com.example.providerCounter; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -315,6 +375,56 @@ }; name = Profile; }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AE0B7B92F70575B8D7E0D07E /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.providerCounter.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 89B67EB44CE7B6631473024E /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.providerCounter.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 640959BDD8F10B91D80A66BE /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.providerCounter.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; 97C147031CF9000F007C117D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -362,7 +472,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -411,11 +521,12 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 8.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; TARGETED_DEVICE_FAMILY = "1,2"; VALIDATE_PRODUCT = YES; }; @@ -428,18 +539,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = TC87DMJLQP; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Flutter", + "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.providerCounter; + PRODUCT_BUNDLE_IDENTIFIER = com.example.providerCounter; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -455,18 +562,14 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = TC87DMJLQP; ENABLE_BITCODE = NO; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter", - ); INFOPLIST_FILE = Runner/Info.plist; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; - LIBRARY_SEARCH_PATHS = ( + LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", - "$(PROJECT_DIR)/Flutter", + "@executable_path/Frameworks", ); - PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.providerCounter; + PRODUCT_BUNDLE_IDENTIFIER = com.example.providerCounter; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; SWIFT_VERSION = 5.0; @@ -477,6 +580,16 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/provider_counter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/provider_counter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/provider_counter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/provider_counter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/provider_counter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 000000000..f9b0d7c5e --- /dev/null +++ b/provider_counter/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/provider_counter/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/provider_counter/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index a28140cfd..e42adcb34 100644 --- a/provider_counter/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/provider_counter/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ - - - - + + + + + + - - + + + + IDEDidComputeMac32BitWarning + + + diff --git a/provider_counter/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/provider_counter/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 000000000..f9b0d7c5e --- /dev/null +++ b/provider_counter/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png index 28c6bf030..7353c41ec 100644 Binary files a/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and b/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png index 2ccbfd967..797d452e4 100644 Binary files a/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and b/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png index f091b6b0b..6ed2d933e 100644 Binary files a/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and b/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png index 4cde12118..4cd7b0099 100644 Binary files a/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and b/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png index d0ef06e7e..fe730945a 100644 Binary files a/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and b/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png index dcdc2306c..321773cd8 100644 Binary files a/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and b/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png index 2ccbfd967..797d452e4 100644 Binary files a/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and b/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png index c8f9ed8f5..502f463a9 100644 Binary files a/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and b/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png index a6d6b8609..0ec303439 100644 Binary files a/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and b/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index a6d6b8609..0ec303439 100644 Binary files a/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and b/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index 75b2d164a..e9f5fea27 100644 Binary files a/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and b/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index c4df70d39..84ac32ae7 100644 Binary files a/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and b/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png index 6a84f41e1..8953cba09 100644 Binary files a/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and b/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png index d0e1f5853..0467bf12a 100644 Binary files a/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and b/provider_counter/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/provider_counter/ios/Runner/Info.plist b/provider_counter/ios/Runner/Info.plist index a1c8bf732..c577d10a1 100644 --- a/provider_counter/ios/Runner/Info.plist +++ b/provider_counter/ios/Runner/Info.plist @@ -4,6 +4,8 @@ CFBundleDevelopmentRegion $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Provider Counter CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIdentifier @@ -41,5 +43,9 @@ UIViewControllerBasedStatusBarAppearance + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + diff --git a/provider_counter/ios/RunnerTests/RunnerTests.swift b/provider_counter/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 000000000..86a7c3b1b --- /dev/null +++ b/provider_counter/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/provider_counter/lib/main.dart b/provider_counter/lib/main.dart index 77d3414be..d60faebbd 100644 --- a/provider_counter/lib/main.dart +++ b/provider_counter/lib/main.dart @@ -2,9 +2,9 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:io'; +import 'dart:io' show Platform; -import 'package:flutter/foundation.dart'; +import 'package:flutter/foundation.dart' show kIsWeb; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:window_size/window_size.dart'; @@ -69,6 +69,7 @@ class MyApp extends StatelessWidget { title: 'Flutter Demo', theme: ThemeData( primarySwatch: Colors.blue, + useMaterial3: true, ), home: const MyHomePage(), ); diff --git a/provider_counter/linux/.gitignore b/provider_counter/linux/.gitignore new file mode 100644 index 000000000..d3896c984 --- /dev/null +++ b/provider_counter/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/provider_counter/linux/CMakeLists.txt b/provider_counter/linux/CMakeLists.txt new file mode 100644 index 000000000..849b9d8bf --- /dev/null +++ b/provider_counter/linux/CMakeLists.txt @@ -0,0 +1,139 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.10) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "provider_counter") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.example.provider_counter") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/provider_counter/linux/flutter/CMakeLists.txt b/provider_counter/linux/flutter/CMakeLists.txt new file mode 100644 index 000000000..d5bd01648 --- /dev/null +++ b/provider_counter/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/provider_counter/linux/flutter/generated_plugin_registrant.cc b/provider_counter/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 000000000..9f8c70320 --- /dev/null +++ b/provider_counter/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + +#include + +void fl_register_plugins(FlPluginRegistry* registry) { + g_autoptr(FlPluginRegistrar) window_size_registrar = + fl_plugin_registry_get_registrar_for_plugin(registry, "WindowSizePlugin"); + window_size_plugin_register_with_registrar(window_size_registrar); +} diff --git a/provider_counter/linux/flutter/generated_plugin_registrant.h b/provider_counter/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 000000000..e0f0a47bc --- /dev/null +++ b/provider_counter/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/provider_counter/linux/flutter/generated_plugins.cmake b/provider_counter/linux/flutter/generated_plugins.cmake new file mode 100644 index 000000000..12c7443ed --- /dev/null +++ b/provider_counter/linux/flutter/generated_plugins.cmake @@ -0,0 +1,24 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST + window_size +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/provider_counter/linux/main.cc b/provider_counter/linux/main.cc new file mode 100644 index 000000000..e7c5c5437 --- /dev/null +++ b/provider_counter/linux/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/provider_counter/linux/my_application.cc b/provider_counter/linux/my_application.cc new file mode 100644 index 000000000..5c3ba5c34 --- /dev/null +++ b/provider_counter/linux/my_application.cc @@ -0,0 +1,104 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "provider_counter"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "provider_counter"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/provider_counter/linux/my_application.h b/provider_counter/linux/my_application.h new file mode 100644 index 000000000..72271d5e4 --- /dev/null +++ b/provider_counter/linux/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/provider_counter/macos/.gitignore b/provider_counter/macos/.gitignore index d2fd37723..746adbb6b 100644 --- a/provider_counter/macos/.gitignore +++ b/provider_counter/macos/.gitignore @@ -3,4 +3,5 @@ **/Pods/ # Xcode-related +**/dgph **/xcuserdata/ diff --git a/provider_counter/macos/Podfile b/provider_counter/macos/Podfile index dade8dfad..c795730db 100644 --- a/provider_counter/macos/Podfile +++ b/provider_counter/macos/Podfile @@ -1,4 +1,4 @@ -platform :osx, '10.11' +platform :osx, '10.14' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' @@ -31,6 +31,9 @@ target 'Runner' do use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end end post_install do |installer| diff --git a/provider_counter/macos/Runner.xcodeproj/project.pbxproj b/provider_counter/macos/Runner.xcodeproj/project.pbxproj index 66116d6a8..650d3462b 100644 --- a/provider_counter/macos/Runner.xcodeproj/project.pbxproj +++ b/provider_counter/macos/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 51; + objectVersion = 54; objects = { /* Begin PBXAggregateTarget section */ @@ -21,18 +21,22 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 33D1A10422148B71006C7A3E /* FlutterMacOS.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 33D1A10322148B71006C7A3E /* FlutterMacOS.framework */; }; - 33D1A10522148B93006C7A3E /* FlutterMacOS.framework in Bundle Framework */ = {isa = PBXBuildFile; fileRef = 33D1A10322148B71006C7A3E /* FlutterMacOS.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; - D73912F022F37F9E000D13A0 /* App.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = D73912EF22F37F9E000D13A0 /* App.framework */; }; - D73912F222F3801D000D13A0 /* App.framework in Bundle Framework */ = {isa = PBXBuildFile; fileRef = D73912EF22F37F9E000D13A0 /* App.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 33CC10E52044A3C60003C045 /* Project object */; @@ -49,8 +53,6 @@ dstPath = ""; dstSubfolderSpec = 10; files = ( - D73912F222F3801D000D13A0 /* App.framework in Bundle Framework */, - 33D1A10522148B93006C7A3E /* FlutterMacOS.framework in Bundle Framework */, ); name = "Bundle Framework"; runOnlyForDeploymentPostprocessing = 0; @@ -58,6 +60,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* provider_counter.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "provider_counter.app"; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -69,28 +73,39 @@ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; - 33D1A10322148B71006C7A3E /* FlutterMacOS.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = FlutterMacOS.framework; path = Flutter/ephemeral/FlutterMacOS.framework; sourceTree = SOURCE_ROOT; }; 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - D73912EF22F37F9E000D13A0 /* App.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = App.framework; path = Flutter/ephemeral/App.framework; sourceTree = SOURCE_ROOT; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 33CC10EA2044A3C60003C045 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - D73912F022F37F9E000D13A0 /* App.framework in Frameworks */, - 33D1A10422148B71006C7A3E /* FlutterMacOS.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; 33BA886A226E78AF003329D5 /* Configs */ = { isa = PBXGroup; children = ( @@ -107,6 +122,7 @@ children = ( 33FAB671232836740065AC1E /* Runner */, 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, ); @@ -116,6 +132,7 @@ isa = PBXGroup; children = ( 33CC10ED2044A3C60003C045 /* provider_counter.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, ); name = Products; sourceTree = ""; @@ -138,8 +155,6 @@ 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, - D73912EF22F37F9E000D13A0 /* App.framework */, - 33D1A10322148B71006C7A3E /* FlutterMacOS.framework */, ); path = Flutter; sourceTree = ""; @@ -167,6 +182,24 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; 33CC10EC2044A3C60003C045 /* Runner */ = { isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; @@ -194,9 +227,13 @@ isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0920; - LastUpgradeCheck = 0930; - ORGANIZATIONNAME = "The Flutter Authors"; + LastUpgradeCheck = 1300; + ORGANIZATIONNAME = ""; TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; 33CC10EC2044A3C60003C045 = { CreatedOnToolsVersion = 9.2; LastSwiftMigration = 1100; @@ -214,7 +251,7 @@ }; }; buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; - compatibilityVersion = "Xcode 8.0"; + compatibilityVersion = "Xcode 9.3"; developmentRegion = en; hasScannedForEncodings = 0; knownRegions = ( @@ -227,12 +264,20 @@ projectRoot = ""; targets = ( 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, 33CC111A2044C6BA0003C045 /* Flutter Assemble */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 33CC10EB2044A3C60003C045 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -247,6 +292,7 @@ /* Begin PBXShellScriptBuildPhase section */ 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -260,7 +306,7 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename\n"; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; @@ -280,11 +326,19 @@ ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh\ntouch Flutter/ephemeral/tripwire\n"; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 33CC10E92044A3C60003C045 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -298,6 +352,11 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; @@ -318,6 +377,48 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.providerCounter.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/provider_counter.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/provider_counter"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.providerCounter.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/provider_counter.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/provider_counter"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.providerCounter.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/provider_counter.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/provider_counter"; + }; + name = Profile; + }; 338D0CE9231458BD00FA5F75 /* Profile */ = { isa = XCBuildConfiguration; baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; @@ -356,7 +457,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; @@ -373,10 +474,6 @@ CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter/ephemeral", - ); INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -439,7 +536,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; @@ -486,7 +583,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; @@ -503,10 +600,6 @@ CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter/ephemeral", - ); INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -527,10 +620,6 @@ CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; CODE_SIGN_STYLE = Automatic; COMBINE_HIDPI_IMAGES = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(inherited)", - "$(PROJECT_DIR)/Flutter/ephemeral", - ); INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", @@ -560,6 +649,16 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/provider_counter/macos/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/provider_counter/macos/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 764c74b8d..000000000 --- a/provider_counter/macos/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/provider_counter/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/provider_counter/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 5d5205fd2..5043589fa 100644 --- a/provider_counter/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/provider_counter/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -1,6 +1,6 @@ - - - - - - - - + + + + + + - - + + + + diff --git a/provider_counter/macos/Runner/Configs/AppInfo.xcconfig b/provider_counter/macos/Runner/Configs/AppInfo.xcconfig index 8a7c92518..7a95e75e0 100644 --- a/provider_counter/macos/Runner/Configs/AppInfo.xcconfig +++ b/provider_counter/macos/Runner/Configs/AppInfo.xcconfig @@ -8,7 +8,7 @@ PRODUCT_NAME = provider_counter // The application's bundle identifier -PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.providerCounter +PRODUCT_BUNDLE_IDENTIFIER = com.example.providerCounter // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2020 dev.flutter. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2023 com.example. All rights reserved. diff --git a/provider_counter/macos/RunnerTests/RunnerTests.swift b/provider_counter/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 000000000..5418c9f53 --- /dev/null +++ b/provider_counter/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import FlutterMacOS +import Cocoa +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/provider_counter/pubspec.yaml b/provider_counter/pubspec.yaml index f8de43d83..483d38ed3 100644 --- a/provider_counter/pubspec.yaml +++ b/provider_counter/pubspec.yaml @@ -5,7 +5,7 @@ publish_to: none version: 1.0.0 environment: - sdk: ">=2.17.0-0 <3.0.0" + sdk: ^3.1.0 dependencies: flutter: @@ -19,9 +19,10 @@ dependencies: path: plugins/window_size dev_dependencies: + analysis_defaults: + path: ../analysis_defaults flutter_test: sdk: flutter - flutter_lints: ^2.0.1 flutter: uses-material-design: true diff --git a/provider_counter/web/favicon.png b/provider_counter/web/favicon.png new file mode 100644 index 000000000..8aaa46ac1 Binary files /dev/null and b/provider_counter/web/favicon.png differ diff --git a/provider_counter/web/icons/Icon-maskable-192.png b/provider_counter/web/icons/Icon-maskable-192.png new file mode 100644 index 000000000..eb9b4d76e Binary files /dev/null and b/provider_counter/web/icons/Icon-maskable-192.png differ diff --git a/provider_counter/web/icons/Icon-maskable-512.png b/provider_counter/web/icons/Icon-maskable-512.png new file mode 100644 index 000000000..d69c56691 Binary files /dev/null and b/provider_counter/web/icons/Icon-maskable-512.png differ diff --git a/provider_counter/web/index.html b/provider_counter/web/index.html index c6e71846f..2a62ad9cf 100644 --- a/provider_counter/web/index.html +++ b/provider_counter/web/index.html @@ -1,20 +1,59 @@ + + + - + - + + + + provider_counter - + + + + + - + diff --git a/provider_counter/web/manifest.json b/provider_counter/web/manifest.json index 5e5ed9975..8d60b8a16 100644 --- a/provider_counter/web/manifest.json +++ b/provider_counter/web/manifest.json @@ -2,10 +2,10 @@ "name": "provider_counter", "short_name": "provider_counter", "start_url": ".", - "display": "minimal-ui", + "display": "standalone", "background_color": "#0175C2", "theme_color": "#0175C2", - "description": "The starter Flutter application, but using Provider to manage state.", + "description": "A new Flutter project.", "orientation": "portrait-primary", "prefer_related_applications": false, "icons": [ @@ -18,6 +18,18 @@ "src": "icons/Icon-512.png", "sizes": "512x512", "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" } ] } diff --git a/provider_counter/windows/.gitignore b/provider_counter/windows/.gitignore new file mode 100644 index 000000000..d492d0d98 --- /dev/null +++ b/provider_counter/windows/.gitignore @@ -0,0 +1,17 @@ +flutter/ephemeral/ + +# Visual Studio user-specific files. +*.suo +*.user +*.userosscache +*.sln.docstates + +# Visual Studio build-related files. +x64/ +x86/ + +# Visual Studio cache files +# files ending in .cache can be ignored +*.[Cc]ache +# but keep track of directories ending in .cache +!*.[Cc]ache/ diff --git a/provider_counter/windows/CMakeLists.txt b/provider_counter/windows/CMakeLists.txt new file mode 100644 index 000000000..097e00861 --- /dev/null +++ b/provider_counter/windows/CMakeLists.txt @@ -0,0 +1,102 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.14) +project(provider_counter LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "provider_counter") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Define build configuration option. +get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(IS_MULTICONFIG) + set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" + CACHE STRING "" FORCE) +else() + if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") + endif() +endif() +# Define settings for the Profile build mode. +set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") +set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") +set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") +set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") + +# Use Unicode for all projects. +add_definitions(-DUNICODE -D_UNICODE) + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_17) + target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") + target_compile_options(${TARGET} PRIVATE /EHsc) + target_compile_definitions(${TARGET} PRIVATE "_HAS_EXCEPTIONS=0") + target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# Application build; see runner/CMakeLists.txt. +add_subdirectory("runner") + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# Support files are copied into place next to the executable, so that it can +# run in place. This is done instead of making a separate bundle (as on Linux) +# so that building and running from within Visual Studio will work. +set(BUILD_BUNDLE_DIR "$") +# Make the "install" step default, as it's required to run. +set(CMAKE_VS_INCLUDE_INSTALL_TO_DEFAULT_BUILD 1) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +if(PLUGIN_BUNDLED_LIBRARIES) + install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + CONFIGURATIONS Profile;Release + COMPONENT Runtime) diff --git a/provider_counter/windows/flutter/CMakeLists.txt b/provider_counter/windows/flutter/CMakeLists.txt new file mode 100644 index 000000000..930d2071a --- /dev/null +++ b/provider_counter/windows/flutter/CMakeLists.txt @@ -0,0 +1,104 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.14) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. +set(WRAPPER_ROOT "${EPHEMERAL_DIR}/cpp_client_wrapper") + +# === Flutter Library === +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/flutter_windows.dll") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/windows/app.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "flutter_export.h" + "flutter_windows.h" + "flutter_messenger.h" + "flutter_plugin_registrar.h" + "flutter_texture_registrar.h" +) +list(TRANSFORM FLUTTER_LIBRARY_HEADERS PREPEND "${EPHEMERAL_DIR}/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}.lib") +add_dependencies(flutter flutter_assemble) + +# === Wrapper === +list(APPEND CPP_WRAPPER_SOURCES_CORE + "core_implementations.cc" + "standard_codec.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_CORE PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_PLUGIN + "plugin_registrar.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_PLUGIN PREPEND "${WRAPPER_ROOT}/") +list(APPEND CPP_WRAPPER_SOURCES_APP + "flutter_engine.cc" + "flutter_view_controller.cc" +) +list(TRANSFORM CPP_WRAPPER_SOURCES_APP PREPEND "${WRAPPER_ROOT}/") + +# Wrapper sources needed for a plugin. +add_library(flutter_wrapper_plugin STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} +) +apply_standard_settings(flutter_wrapper_plugin) +set_target_properties(flutter_wrapper_plugin PROPERTIES + POSITION_INDEPENDENT_CODE ON) +set_target_properties(flutter_wrapper_plugin PROPERTIES + CXX_VISIBILITY_PRESET hidden) +target_link_libraries(flutter_wrapper_plugin PUBLIC flutter) +target_include_directories(flutter_wrapper_plugin PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_plugin flutter_assemble) + +# Wrapper sources needed for the runner. +add_library(flutter_wrapper_app STATIC + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_APP} +) +apply_standard_settings(flutter_wrapper_app) +target_link_libraries(flutter_wrapper_app PUBLIC flutter) +target_include_directories(flutter_wrapper_app PUBLIC + "${WRAPPER_ROOT}/include" +) +add_dependencies(flutter_wrapper_app flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +set(PHONY_OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/_phony_") +set_source_files_properties("${PHONY_OUTPUT}" PROPERTIES SYMBOLIC TRUE) +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} + ${PHONY_OUTPUT} + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.bat" + windows-x64 $ + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} + ${CPP_WRAPPER_SOURCES_CORE} + ${CPP_WRAPPER_SOURCES_PLUGIN} + ${CPP_WRAPPER_SOURCES_APP} +) diff --git a/provider_counter/windows/flutter/generated_plugin_registrant.cc b/provider_counter/windows/flutter/generated_plugin_registrant.cc new file mode 100644 index 000000000..9372fc507 --- /dev/null +++ b/provider_counter/windows/flutter/generated_plugin_registrant.cc @@ -0,0 +1,14 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + +#include + +void RegisterPlugins(flutter::PluginRegistry* registry) { + WindowSizePluginRegisterWithRegistrar( + registry->GetRegistrarForPlugin("WindowSizePlugin")); +} diff --git a/provider_counter/windows/flutter/generated_plugin_registrant.h b/provider_counter/windows/flutter/generated_plugin_registrant.h new file mode 100644 index 000000000..dc139d85a --- /dev/null +++ b/provider_counter/windows/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void RegisterPlugins(flutter::PluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/provider_counter/windows/flutter/generated_plugins.cmake b/provider_counter/windows/flutter/generated_plugins.cmake new file mode 100644 index 000000000..ff2147b2c --- /dev/null +++ b/provider_counter/windows/flutter/generated_plugins.cmake @@ -0,0 +1,24 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST + window_size +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/windows plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/windows plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/provider_counter/windows/runner/CMakeLists.txt b/provider_counter/windows/runner/CMakeLists.txt new file mode 100644 index 000000000..394917c05 --- /dev/null +++ b/provider_counter/windows/runner/CMakeLists.txt @@ -0,0 +1,40 @@ +cmake_minimum_required(VERSION 3.14) +project(runner LANGUAGES CXX) + +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} WIN32 + "flutter_window.cpp" + "main.cpp" + "utils.cpp" + "win32_window.cpp" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" + "Runner.rc" + "runner.exe.manifest" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. +target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") +target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/provider_counter/windows/runner/Runner.rc b/provider_counter/windows/runner/Runner.rc new file mode 100644 index 000000000..8bb3f54a9 --- /dev/null +++ b/provider_counter/windows/runner/Runner.rc @@ -0,0 +1,121 @@ +// Microsoft Visual C++ generated resource script. +// +#pragma code_page(65001) +#include "resource.h" + +#define APSTUDIO_READONLY_SYMBOLS +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 2 resource. +// +#include "winres.h" + +///////////////////////////////////////////////////////////////////////////// +#undef APSTUDIO_READONLY_SYMBOLS + +///////////////////////////////////////////////////////////////////////////// +// English (United States) resources + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +1 TEXTINCLUDE +BEGIN + "resource.h\0" +END + +2 TEXTINCLUDE +BEGIN + "#include ""winres.h""\r\n" + "\0" +END + +3 TEXTINCLUDE +BEGIN + "\r\n" + "\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Icon +// + +// Icon with lowest ID value placed first to ensure application icon +// remains consistent on all systems. +IDI_APP_ICON ICON "resources\\app_icon.ico" + + +///////////////////////////////////////////////////////////////////////////// +// +// Version +// + +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD +#else +#define VERSION_AS_NUMBER 1,0,0,0 +#endif + +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION +#else +#define VERSION_AS_STRING "1.0.0" +#endif + +VS_VERSION_INFO VERSIONINFO + FILEVERSION VERSION_AS_NUMBER + PRODUCTVERSION VERSION_AS_NUMBER + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK +#ifdef _DEBUG + FILEFLAGS VS_FF_DEBUG +#else + FILEFLAGS 0x0L +#endif + FILEOS VOS__WINDOWS32 + FILETYPE VFT_APP + FILESUBTYPE 0x0L +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904e4" + BEGIN + VALUE "CompanyName", "com.example" "\0" + VALUE "FileDescription", "provider_counter" "\0" + VALUE "FileVersion", VERSION_AS_STRING "\0" + VALUE "InternalName", "provider_counter" "\0" + VALUE "LegalCopyright", "Copyright (C) 2023 com.example. All rights reserved." "\0" + VALUE "OriginalFilename", "provider_counter.exe" "\0" + VALUE "ProductName", "provider_counter" "\0" + VALUE "ProductVersion", VERSION_AS_STRING "\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x409, 1252 + END +END + +#endif // English (United States) resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED diff --git a/provider_counter/windows/runner/flutter_window.cpp b/provider_counter/windows/runner/flutter_window.cpp new file mode 100644 index 000000000..b25e363ef --- /dev/null +++ b/provider_counter/windows/runner/flutter_window.cpp @@ -0,0 +1,66 @@ +#include "flutter_window.h" + +#include + +#include "flutter/generated_plugin_registrant.h" + +FlutterWindow::FlutterWindow(const flutter::DartProject& project) + : project_(project) {} + +FlutterWindow::~FlutterWindow() {} + +bool FlutterWindow::OnCreate() { + if (!Win32Window::OnCreate()) { + return false; + } + + RECT frame = GetClientArea(); + + // The size here must match the window dimensions to avoid unnecessary surface + // creation / destruction in the startup path. + flutter_controller_ = std::make_unique( + frame.right - frame.left, frame.bottom - frame.top, project_); + // Ensure that basic setup of the controller was successful. + if (!flutter_controller_->engine() || !flutter_controller_->view()) { + return false; + } + RegisterPlugins(flutter_controller_->engine()); + SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + + return true; +} + +void FlutterWindow::OnDestroy() { + if (flutter_controller_) { + flutter_controller_ = nullptr; + } + + Win32Window::OnDestroy(); +} + +LRESULT +FlutterWindow::MessageHandler(HWND hwnd, UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + // Give Flutter, including plugins, an opportunity to handle window messages. + if (flutter_controller_) { + std::optional result = + flutter_controller_->HandleTopLevelWindowProc(hwnd, message, wparam, + lparam); + if (result) { + return *result; + } + } + + switch (message) { + case WM_FONTCHANGE: + flutter_controller_->engine()->ReloadSystemFonts(); + break; + } + + return Win32Window::MessageHandler(hwnd, message, wparam, lparam); +} diff --git a/provider_counter/windows/runner/flutter_window.h b/provider_counter/windows/runner/flutter_window.h new file mode 100644 index 000000000..6da0652f0 --- /dev/null +++ b/provider_counter/windows/runner/flutter_window.h @@ -0,0 +1,33 @@ +#ifndef RUNNER_FLUTTER_WINDOW_H_ +#define RUNNER_FLUTTER_WINDOW_H_ + +#include +#include + +#include + +#include "win32_window.h" + +// A window that does nothing but host a Flutter view. +class FlutterWindow : public Win32Window { + public: + // Creates a new FlutterWindow hosting a Flutter view running |project|. + explicit FlutterWindow(const flutter::DartProject& project); + virtual ~FlutterWindow(); + + protected: + // Win32Window: + bool OnCreate() override; + void OnDestroy() override; + LRESULT MessageHandler(HWND window, UINT const message, WPARAM const wparam, + LPARAM const lparam) noexcept override; + + private: + // The project to run. + flutter::DartProject project_; + + // The Flutter instance hosted by this window. + std::unique_ptr flutter_controller_; +}; + +#endif // RUNNER_FLUTTER_WINDOW_H_ diff --git a/provider_counter/windows/runner/main.cpp b/provider_counter/windows/runner/main.cpp new file mode 100644 index 000000000..ca390e251 --- /dev/null +++ b/provider_counter/windows/runner/main.cpp @@ -0,0 +1,43 @@ +#include +#include +#include + +#include "flutter_window.h" +#include "utils.h" + +int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, + _In_ wchar_t *command_line, _In_ int show_command) { + // Attach to console when present (e.g., 'flutter run') or create a + // new console when running with a debugger. + if (!::AttachConsole(ATTACH_PARENT_PROCESS) && ::IsDebuggerPresent()) { + CreateAndAttachConsole(); + } + + // Initialize COM, so that it is available for use in the library and/or + // plugins. + ::CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED); + + flutter::DartProject project(L"data"); + + std::vector command_line_arguments = + GetCommandLineArguments(); + + project.set_dart_entrypoint_arguments(std::move(command_line_arguments)); + + FlutterWindow window(project); + Win32Window::Point origin(10, 10); + Win32Window::Size size(1280, 720); + if (!window.Create(L"provider_counter", origin, size)) { + return EXIT_FAILURE; + } + window.SetQuitOnClose(true); + + ::MSG msg; + while (::GetMessage(&msg, nullptr, 0, 0)) { + ::TranslateMessage(&msg); + ::DispatchMessage(&msg); + } + + ::CoUninitialize(); + return EXIT_SUCCESS; +} diff --git a/provider_counter/windows/runner/resource.h b/provider_counter/windows/runner/resource.h new file mode 100644 index 000000000..66a65d1e4 --- /dev/null +++ b/provider_counter/windows/runner/resource.h @@ -0,0 +1,16 @@ +//{{NO_DEPENDENCIES}} +// Microsoft Visual C++ generated include file. +// Used by Runner.rc +// +#define IDI_APP_ICON 101 + +// Next default values for new objects +// +#ifdef APSTUDIO_INVOKED +#ifndef APSTUDIO_READONLY_SYMBOLS +#define _APS_NEXT_RESOURCE_VALUE 102 +#define _APS_NEXT_COMMAND_VALUE 40001 +#define _APS_NEXT_CONTROL_VALUE 1001 +#define _APS_NEXT_SYMED_VALUE 101 +#endif +#endif diff --git a/provider_counter/windows/runner/resources/app_icon.ico b/provider_counter/windows/runner/resources/app_icon.ico new file mode 100644 index 000000000..c04e20caf Binary files /dev/null and b/provider_counter/windows/runner/resources/app_icon.ico differ diff --git a/provider_counter/windows/runner/runner.exe.manifest b/provider_counter/windows/runner/runner.exe.manifest new file mode 100644 index 000000000..a42ea7687 --- /dev/null +++ b/provider_counter/windows/runner/runner.exe.manifest @@ -0,0 +1,20 @@ + + + + + PerMonitorV2 + + + + + + + + + + + + + + + diff --git a/provider_counter/windows/runner/utils.cpp b/provider_counter/windows/runner/utils.cpp new file mode 100644 index 000000000..b2b08734d --- /dev/null +++ b/provider_counter/windows/runner/utils.cpp @@ -0,0 +1,65 @@ +#include "utils.h" + +#include +#include +#include +#include + +#include + +void CreateAndAttachConsole() { + if (::AllocConsole()) { + FILE *unused; + if (freopen_s(&unused, "CONOUT$", "w", stdout)) { + _dup2(_fileno(stdout), 1); + } + if (freopen_s(&unused, "CONOUT$", "w", stderr)) { + _dup2(_fileno(stdout), 2); + } + std::ios::sync_with_stdio(); + FlutterDesktopResyncOutputStreams(); + } +} + +std::vector GetCommandLineArguments() { + // Convert the UTF-16 command line arguments to UTF-8 for the Engine to use. + int argc; + wchar_t** argv = ::CommandLineToArgvW(::GetCommandLineW(), &argc); + if (argv == nullptr) { + return std::vector(); + } + + std::vector command_line_arguments; + + // Skip the first argument as it's the binary name. + for (int i = 1; i < argc; i++) { + command_line_arguments.push_back(Utf8FromUtf16(argv[i])); + } + + ::LocalFree(argv); + + return command_line_arguments; +} + +std::string Utf8FromUtf16(const wchar_t* utf16_string) { + if (utf16_string == nullptr) { + return std::string(); + } + int target_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); + std::string utf8_string; + if (target_length <= 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } + utf8_string.resize(target_length); + int converted_length = ::WideCharToMultiByte( + CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, + input_length, utf8_string.data(), target_length, nullptr, nullptr); + if (converted_length == 0) { + return std::string(); + } + return utf8_string; +} diff --git a/provider_counter/windows/runner/utils.h b/provider_counter/windows/runner/utils.h new file mode 100644 index 000000000..3879d5475 --- /dev/null +++ b/provider_counter/windows/runner/utils.h @@ -0,0 +1,19 @@ +#ifndef RUNNER_UTILS_H_ +#define RUNNER_UTILS_H_ + +#include +#include + +// Creates a console for the process, and redirects stdout and stderr to +// it for both the runner and the Flutter library. +void CreateAndAttachConsole(); + +// Takes a null-terminated wchar_t* encoded in UTF-16 and returns a std::string +// encoded in UTF-8. Returns an empty std::string on failure. +std::string Utf8FromUtf16(const wchar_t* utf16_string); + +// Gets the command line arguments passed in as a std::vector, +// encoded in UTF-8. Returns an empty std::vector on failure. +std::vector GetCommandLineArguments(); + +#endif // RUNNER_UTILS_H_ diff --git a/provider_counter/windows/runner/win32_window.cpp b/provider_counter/windows/runner/win32_window.cpp new file mode 100644 index 000000000..60608d0fe --- /dev/null +++ b/provider_counter/windows/runner/win32_window.cpp @@ -0,0 +1,288 @@ +#include "win32_window.h" + +#include +#include + +#include "resource.h" + +namespace { + +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + +constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; + +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + +// The number of Win32Window objects that currently exist. +static int g_active_window_count = 0; + +using EnableNonClientDpiScaling = BOOL __stdcall(HWND hwnd); + +// Scale helper to convert logical scaler values to physical using passed in +// scale factor +int Scale(int source, double scale_factor) { + return static_cast(source * scale_factor); +} + +// Dynamically loads the |EnableNonClientDpiScaling| from the User32 module. +// This API is only needed for PerMonitor V1 awareness mode. +void EnableFullDpiSupportIfAvailable(HWND hwnd) { + HMODULE user32_module = LoadLibraryA("User32.dll"); + if (!user32_module) { + return; + } + auto enable_non_client_dpi_scaling = + reinterpret_cast( + GetProcAddress(user32_module, "EnableNonClientDpiScaling")); + if (enable_non_client_dpi_scaling != nullptr) { + enable_non_client_dpi_scaling(hwnd); + } + FreeLibrary(user32_module); +} + +} // namespace + +// Manages the Win32Window's window class registration. +class WindowClassRegistrar { + public: + ~WindowClassRegistrar() = default; + + // Returns the singleton registrar instance. + static WindowClassRegistrar* GetInstance() { + if (!instance_) { + instance_ = new WindowClassRegistrar(); + } + return instance_; + } + + // Returns the name of the window class, registering the class if it hasn't + // previously been registered. + const wchar_t* GetWindowClass(); + + // Unregisters the window class. Should only be called if there are no + // instances of the window. + void UnregisterWindowClass(); + + private: + WindowClassRegistrar() = default; + + static WindowClassRegistrar* instance_; + + bool class_registered_ = false; +}; + +WindowClassRegistrar* WindowClassRegistrar::instance_ = nullptr; + +const wchar_t* WindowClassRegistrar::GetWindowClass() { + if (!class_registered_) { + WNDCLASS window_class{}; + window_class.hCursor = LoadCursor(nullptr, IDC_ARROW); + window_class.lpszClassName = kWindowClassName; + window_class.style = CS_HREDRAW | CS_VREDRAW; + window_class.cbClsExtra = 0; + window_class.cbWndExtra = 0; + window_class.hInstance = GetModuleHandle(nullptr); + window_class.hIcon = + LoadIcon(window_class.hInstance, MAKEINTRESOURCE(IDI_APP_ICON)); + window_class.hbrBackground = 0; + window_class.lpszMenuName = nullptr; + window_class.lpfnWndProc = Win32Window::WndProc; + RegisterClass(&window_class); + class_registered_ = true; + } + return kWindowClassName; +} + +void WindowClassRegistrar::UnregisterWindowClass() { + UnregisterClass(kWindowClassName, nullptr); + class_registered_ = false; +} + +Win32Window::Win32Window() { + ++g_active_window_count; +} + +Win32Window::~Win32Window() { + --g_active_window_count; + Destroy(); +} + +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { + Destroy(); + + const wchar_t* window_class = + WindowClassRegistrar::GetInstance()->GetWindowClass(); + + const POINT target_point = {static_cast(origin.x), + static_cast(origin.y)}; + HMONITOR monitor = MonitorFromPoint(target_point, MONITOR_DEFAULTTONEAREST); + UINT dpi = FlutterDesktopGetDpiForMonitor(monitor); + double scale_factor = dpi / 96.0; + + HWND window = CreateWindow( + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, + Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), + Scale(size.width, scale_factor), Scale(size.height, scale_factor), + nullptr, nullptr, GetModuleHandle(nullptr), this); + + if (!window) { + return false; + } + + UpdateTheme(window); + + return OnCreate(); +} + +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + +// static +LRESULT CALLBACK Win32Window::WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + if (message == WM_NCCREATE) { + auto window_struct = reinterpret_cast(lparam); + SetWindowLongPtr(window, GWLP_USERDATA, + reinterpret_cast(window_struct->lpCreateParams)); + + auto that = static_cast(window_struct->lpCreateParams); + EnableFullDpiSupportIfAvailable(window); + that->window_handle_ = window; + } else if (Win32Window* that = GetThisFromHandle(window)) { + return that->MessageHandler(window, message, wparam, lparam); + } + + return DefWindowProc(window, message, wparam, lparam); +} + +LRESULT +Win32Window::MessageHandler(HWND hwnd, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept { + switch (message) { + case WM_DESTROY: + window_handle_ = nullptr; + Destroy(); + if (quit_on_close_) { + PostQuitMessage(0); + } + return 0; + + case WM_DPICHANGED: { + auto newRectSize = reinterpret_cast(lparam); + LONG newWidth = newRectSize->right - newRectSize->left; + LONG newHeight = newRectSize->bottom - newRectSize->top; + + SetWindowPos(hwnd, nullptr, newRectSize->left, newRectSize->top, newWidth, + newHeight, SWP_NOZORDER | SWP_NOACTIVATE); + + return 0; + } + case WM_SIZE: { + RECT rect = GetClientArea(); + if (child_content_ != nullptr) { + // Size and position the child window. + MoveWindow(child_content_, rect.left, rect.top, rect.right - rect.left, + rect.bottom - rect.top, TRUE); + } + return 0; + } + + case WM_ACTIVATE: + if (child_content_ != nullptr) { + SetFocus(child_content_); + } + return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; + } + + return DefWindowProc(window_handle_, message, wparam, lparam); +} + +void Win32Window::Destroy() { + OnDestroy(); + + if (window_handle_) { + DestroyWindow(window_handle_); + window_handle_ = nullptr; + } + if (g_active_window_count == 0) { + WindowClassRegistrar::GetInstance()->UnregisterWindowClass(); + } +} + +Win32Window* Win32Window::GetThisFromHandle(HWND const window) noexcept { + return reinterpret_cast( + GetWindowLongPtr(window, GWLP_USERDATA)); +} + +void Win32Window::SetChildContent(HWND content) { + child_content_ = content; + SetParent(content, window_handle_); + RECT frame = GetClientArea(); + + MoveWindow(content, frame.left, frame.top, frame.right - frame.left, + frame.bottom - frame.top, true); + + SetFocus(child_content_); +} + +RECT Win32Window::GetClientArea() { + RECT frame; + GetClientRect(window_handle_, &frame); + return frame; +} + +HWND Win32Window::GetHandle() { + return window_handle_; +} + +void Win32Window::SetQuitOnClose(bool quit_on_close) { + quit_on_close_ = quit_on_close; +} + +bool Win32Window::OnCreate() { + // No-op; provided for subclasses. + return true; +} + +void Win32Window::OnDestroy() { + // No-op; provided for subclasses. +} + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/provider_counter/windows/runner/win32_window.h b/provider_counter/windows/runner/win32_window.h new file mode 100644 index 000000000..e901dde68 --- /dev/null +++ b/provider_counter/windows/runner/win32_window.h @@ -0,0 +1,102 @@ +#ifndef RUNNER_WIN32_WINDOW_H_ +#define RUNNER_WIN32_WINDOW_H_ + +#include + +#include +#include +#include + +// A class abstraction for a high DPI-aware Win32 Window. Intended to be +// inherited from by classes that wish to specialize with custom +// rendering and input handling +class Win32Window { + public: + struct Point { + unsigned int x; + unsigned int y; + Point(unsigned int x, unsigned int y) : x(x), y(y) {} + }; + + struct Size { + unsigned int width; + unsigned int height; + Size(unsigned int width, unsigned int height) + : width(width), height(height) {} + }; + + Win32Window(); + virtual ~Win32Window(); + + // Creates a win32 window with |title| that is positioned and sized using + // |origin| and |size|. New windows are created on the default monitor. Window + // sizes are specified to the OS in physical pixels, hence to ensure a + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); + + // Release OS resources associated with window. + void Destroy(); + + // Inserts |content| into the window tree. + void SetChildContent(HWND content); + + // Returns the backing Window handle to enable clients to set icon and other + // window properties. Returns nullptr if the window has been destroyed. + HWND GetHandle(); + + // If true, closing this window will quit the application. + void SetQuitOnClose(bool quit_on_close); + + // Return a RECT representing the bounds of the current client area. + RECT GetClientArea(); + + protected: + // Processes and route salient window messages for mouse handling, + // size change and DPI. Delegates handling of these to member overloads that + // inheriting classes can handle. + virtual LRESULT MessageHandler(HWND window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Called when CreateAndShow is called, allowing subclass window-related + // setup. Subclasses should return false if setup fails. + virtual bool OnCreate(); + + // Called when Destroy is called. + virtual void OnDestroy(); + + private: + friend class WindowClassRegistrar; + + // OS callback called by message pump. Handles the WM_NCCREATE message which + // is passed when the non-client area is being created and enables automatic + // non-client DPI scaling so that the non-client area automatically + // responds to changes in DPI. All other messages are handled by + // MessageHandler. + static LRESULT CALLBACK WndProc(HWND const window, + UINT const message, + WPARAM const wparam, + LPARAM const lparam) noexcept; + + // Retrieves a class instance pointer for |window| + static Win32Window* GetThisFromHandle(HWND const window) noexcept; + + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + + bool quit_on_close_ = false; + + // window handle for top level window. + HWND window_handle_ = nullptr; + + // window handle for hosted content. + HWND child_content_ = nullptr; +}; + +#endif // RUNNER_WIN32_WINDOW_H_ diff --git a/provider_shopper/.metadata b/provider_shopper/.metadata index d680382e1..620e877d2 100644 --- a/provider_shopper/.metadata +++ b/provider_shopper/.metadata @@ -1,11 +1,11 @@ # This file tracks properties of this Flutter project. # Used by Flutter tool to assess capabilities and perform upgrades etc. # -# This file should be version controlled. +# This file should be version controlled and should not be manually edited. version: - revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - channel: beta + revision: "ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a" + channel: "stable" project_type: app @@ -13,26 +13,26 @@ project_type: app migration: platforms: - platform: root - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a - platform: android - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a - platform: ios - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a - platform: linux - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a - platform: macos - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a - platform: web - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a - platform: windows - create_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 - base_revision: 686fe913dc963954b99e62048569cb9ac8e551c8 + create_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a + base_revision: ff5b5b5fa6f35b717667719ddfdb1521d8bdd05a # User provided section diff --git a/provider_shopper/README.md b/provider_shopper/README.md index d19099bd8..d0fa4aa1c 100644 --- a/provider_shopper/README.md +++ b/provider_shopper/README.md @@ -4,8 +4,6 @@ A Flutter sample app that shows a state management approach using the [Provider] This is the app discussed in the [Simple app state management][simple] section of [flutter.dev][]. -![An animated gif of the app in action](https://camo.githubusercontent.com/cf301d68c65279a074aa3334ef7fff548f87c0e2/68747470733a2f2f666c75747465722e6465762f6173736574732f646576656c6f706d656e742f646174612d616e642d6261636b656e642f73746174652d6d676d742f6d6f64656c2d73686f707065722d73637265656e636173742d653061646130653833636438653766646361643834313637623866376666643765623565663835623063623839353766303363366630356264313662316365612e676966) - [Provider]: https://pub.dev/packages/provider [simple]: https://flutter.dev/docs/development/data-and-backend/state-mgmt/simple [flutter.dev]: https://flutter.dev/ diff --git a/provider_shopper/analysis_options.yaml b/provider_shopper/analysis_options.yaml index 5e2133eb6..13d6fe105 100644 --- a/provider_shopper/analysis_options.yaml +++ b/provider_shopper/analysis_options.yaml @@ -1 +1 @@ -include: ../analysis_options.yaml +include: package:analysis_defaults/flutter.yaml diff --git a/provider_shopper/android/app/build.gradle b/provider_shopper/android/app/build.gradle index f14c998e6..dcaf37fd8 100644 --- a/provider_shopper/android/app/build.gradle +++ b/provider_shopper/android/app/build.gradle @@ -1,3 +1,9 @@ +plugins { + id "com.android.application" + id "kotlin-android" + id "dev.flutter.flutter-gradle-plugin" +} + def localProperties = new Properties() def localPropertiesFile = rootProject.file('local.properties') if (localPropertiesFile.exists()) { @@ -6,11 +12,6 @@ if (localPropertiesFile.exists()) { } } -def flutterRoot = localProperties.getProperty('flutter.sdk') -if (flutterRoot == null) { - throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") -} - def flutterVersionCode = localProperties.getProperty('flutter.versionCode') if (flutterVersionCode == null) { flutterVersionCode = '1' @@ -21,11 +22,8 @@ if (flutterVersionName == null) { flutterVersionName = '1.0' } -apply plugin: 'com.android.application' -apply plugin: 'kotlin-android' -apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" - android { + namespace "dev.flutter.provider_shopper" compileSdkVersion flutter.compileSdkVersion ndkVersion flutter.ndkVersion @@ -66,6 +64,4 @@ flutter { source '../..' } -dependencies { - implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" -} +dependencies {} diff --git a/provider_shopper/android/app/src/debug/AndroidManifest.xml b/provider_shopper/android/app/src/debug/AndroidManifest.xml index b7299eab0..399f6981d 100644 --- a/provider_shopper/android/app/src/debug/AndroidManifest.xml +++ b/provider_shopper/android/app/src/debug/AndroidManifest.xml @@ -1,5 +1,4 @@ - + diff --git a/provider_shopper/windows/CMakeLists.txt b/provider_shopper/windows/CMakeLists.txt index 3f532acda..48727c5bd 100644 --- a/provider_shopper/windows/CMakeLists.txt +++ b/provider_shopper/windows/CMakeLists.txt @@ -8,7 +8,7 @@ set(BINARY_NAME "provider_shopper") # Explicitly opt in to modern CMake behaviors to avoid warnings with recent # versions of CMake. -cmake_policy(SET CMP0063 NEW) +cmake_policy(VERSION 3.14...3.25) # Define build configuration option. get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) @@ -52,6 +52,7 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) # Application build; see runner/CMakeLists.txt. add_subdirectory("runner") + # Generated plugin build rules, which manage building the plugins and adding # them to the application. include(flutter/generated_plugins.cmake) diff --git a/provider_shopper/windows/runner/flutter_window.cpp b/provider_shopper/windows/runner/flutter_window.cpp index b25e363ef..955ee3038 100644 --- a/provider_shopper/windows/runner/flutter_window.cpp +++ b/provider_shopper/windows/runner/flutter_window.cpp @@ -31,6 +31,11 @@ bool FlutterWindow::OnCreate() { this->Show(); }); + // Flutter can complete the first frame before the "show window" callback is + // registered. The following call ensures a frame is pending to ensure the + // window is shown. It is a no-op if the first frame hasn't completed yet. + flutter_controller_->ForceRedraw(); + return true; } diff --git a/provider_shopper/windows/runner/utils.cpp b/provider_shopper/windows/runner/utils.cpp index f5bf9fa0f..b2b08734d 100644 --- a/provider_shopper/windows/runner/utils.cpp +++ b/provider_shopper/windows/runner/utils.cpp @@ -47,16 +47,17 @@ std::string Utf8FromUtf16(const wchar_t* utf16_string) { } int target_length = ::WideCharToMultiByte( CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, nullptr, 0, nullptr, nullptr); + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); std::string utf8_string; - if (target_length == 0 || target_length > utf8_string.max_size()) { + if (target_length <= 0 || target_length > utf8_string.max_size()) { return utf8_string; } utf8_string.resize(target_length); int converted_length = ::WideCharToMultiByte( CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, utf8_string.data(), - target_length, nullptr, nullptr); + input_length, utf8_string.data(), target_length, nullptr, nullptr); if (converted_length == 0) { return std::string(); } diff --git a/provider_shopper/windows/runner/win32_window.cpp b/provider_shopper/windows/runner/win32_window.cpp index 041a38554..60608d0fe 100644 --- a/provider_shopper/windows/runner/win32_window.cpp +++ b/provider_shopper/windows/runner/win32_window.cpp @@ -60,7 +60,7 @@ class WindowClassRegistrar { public: ~WindowClassRegistrar() = default; - // Returns the singleton registar instance. + // Returns the singleton registrar instance. static WindowClassRegistrar* GetInstance() { if (!instance_) { instance_ = new WindowClassRegistrar(); diff --git a/provider_shopper/windows/runner/win32_window.h b/provider_shopper/windows/runner/win32_window.h index c86632d8a..e901dde68 100644 --- a/provider_shopper/windows/runner/win32_window.h +++ b/provider_shopper/windows/runner/win32_window.h @@ -77,7 +77,7 @@ class Win32Window { // OS callback called by message pump. Handles the WM_NCCREATE message which // is passed when the non-client area is being created and enables automatic // non-client DPI scaling so that the non-client area automatically - // responsponds to changes in DPI. All other messages are handled by + // responds to changes in DPI. All other messages are handled by // MessageHandler. static LRESULT CALLBACK WndProc(HWND const window, UINT const message, diff --git a/simple_shader/.gitignore b/simple_shader/.gitignore new file mode 100644 index 000000000..24476c5d1 --- /dev/null +++ b/simple_shader/.gitignore @@ -0,0 +1,44 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/simple_shader/.metadata b/simple_shader/.metadata new file mode 100644 index 000000000..a7cbe7932 --- /dev/null +++ b/simple_shader/.metadata @@ -0,0 +1,45 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled. + +version: + revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + channel: beta + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + - platform: android + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + - platform: ios + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + - platform: linux + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + - platform: macos + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + - platform: web + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + - platform: windows + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/simple_shader/README.md b/simple_shader/README.md new file mode 100644 index 000000000..bf957b20e --- /dev/null +++ b/simple_shader/README.md @@ -0,0 +1,7 @@ +# `simple_shader` + +A simple [Flutter fragment shaders][] sample project. + + [Flutter fragment shaders]: https://docs.flutter.dev/development/ui/advanced/shaders + +![Screenshot of the `simple_shader` app](screenshot.png) diff --git a/simple_shader/analysis_options.yaml b/simple_shader/analysis_options.yaml new file mode 100644 index 000000000..13d6fe105 --- /dev/null +++ b/simple_shader/analysis_options.yaml @@ -0,0 +1 @@ +include: package:analysis_defaults/flutter.yaml diff --git a/simple_shader/android/.gitignore b/simple_shader/android/.gitignore new file mode 100644 index 000000000..6f568019d --- /dev/null +++ b/simple_shader/android/.gitignore @@ -0,0 +1,13 @@ +gradle-wrapper.jar +/.gradle +/captures/ +/gradlew +/gradlew.bat +/local.properties +GeneratedPluginRegistrant.java + +# Remember to never publicly share your keystore. +# See https://flutter.dev/docs/deployment/android#reference-the-keystore-from-the-app +key.properties +**/*.keystore +**/*.jks diff --git a/simple_shader/android/app/build.gradle b/simple_shader/android/app/build.gradle new file mode 100644 index 000000000..c63a3a8b9 --- /dev/null +++ b/simple_shader/android/app/build.gradle @@ -0,0 +1,71 @@ +def localProperties = new Properties() +def localPropertiesFile = rootProject.file('local.properties') +if (localPropertiesFile.exists()) { + localPropertiesFile.withReader('UTF-8') { reader -> + localProperties.load(reader) + } +} + +def flutterRoot = localProperties.getProperty('flutter.sdk') +if (flutterRoot == null) { + throw new GradleException("Flutter SDK not found. Define location with flutter.sdk in the local.properties file.") +} + +def flutterVersionCode = localProperties.getProperty('flutter.versionCode') +if (flutterVersionCode == null) { + flutterVersionCode = '1' +} + +def flutterVersionName = localProperties.getProperty('flutter.versionName') +if (flutterVersionName == null) { + flutterVersionName = '1.0' +} + +apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" + +android { + compileSdkVersion flutter.compileSdkVersion + ndkVersion flutter.ndkVersion + + compileOptions { + sourceCompatibility JavaVersion.VERSION_1_8 + targetCompatibility JavaVersion.VERSION_1_8 + } + + kotlinOptions { + jvmTarget = '1.8' + } + + sourceSets { + main.java.srcDirs += 'src/main/kotlin' + } + + defaultConfig { + // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). + applicationId "com.example.simple_shader" + // You can update the following values to match your application needs. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. + minSdkVersion flutter.minSdkVersion + targetSdkVersion flutter.targetSdkVersion + versionCode flutterVersionCode.toInteger() + versionName flutterVersionName + } + + buildTypes { + release { + // TODO: Add your own signing config for the release build. + // Signing with the debug keys for now, so `flutter run --release` works. + signingConfig signingConfigs.debug + } + } +} + +flutter { + source '../..' +} + +dependencies { + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" +} diff --git a/simple_shader/android/app/src/debug/AndroidManifest.xml b/simple_shader/android/app/src/debug/AndroidManifest.xml new file mode 100644 index 000000000..3bb7d4d17 --- /dev/null +++ b/simple_shader/android/app/src/debug/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + diff --git a/simple_shader/android/app/src/main/AndroidManifest.xml b/simple_shader/android/app/src/main/AndroidManifest.xml new file mode 100644 index 000000000..79b9a1996 --- /dev/null +++ b/simple_shader/android/app/src/main/AndroidManifest.xml @@ -0,0 +1,34 @@ + + + + + + + + + + + + + + diff --git a/experimental/varfont_shader_puzzle/android/app/src/main/kotlin/com/example/type_jam_github/MainActivity.kt b/simple_shader/android/app/src/main/kotlin/com/example/simple_shader/MainActivity.kt similarity index 72% rename from experimental/varfont_shader_puzzle/android/app/src/main/kotlin/com/example/type_jam_github/MainActivity.kt rename to simple_shader/android/app/src/main/kotlin/com/example/simple_shader/MainActivity.kt index f79ea136e..74f99a8d5 100644 --- a/experimental/varfont_shader_puzzle/android/app/src/main/kotlin/com/example/type_jam_github/MainActivity.kt +++ b/simple_shader/android/app/src/main/kotlin/com/example/simple_shader/MainActivity.kt @@ -1,4 +1,4 @@ -package com.example.type_jam_github +package com.example.simple_shader import io.flutter.embedding.android.FlutterActivity diff --git a/simple_shader/android/app/src/main/res/drawable-v21/launch_background.xml b/simple_shader/android/app/src/main/res/drawable-v21/launch_background.xml new file mode 100644 index 000000000..f74085f3f --- /dev/null +++ b/simple_shader/android/app/src/main/res/drawable-v21/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/simple_shader/android/app/src/main/res/drawable/launch_background.xml b/simple_shader/android/app/src/main/res/drawable/launch_background.xml new file mode 100644 index 000000000..304732f88 --- /dev/null +++ b/simple_shader/android/app/src/main/res/drawable/launch_background.xml @@ -0,0 +1,12 @@ + + + + + + + + diff --git a/simple_shader/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/simple_shader/android/app/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 000000000..db77bb4b7 Binary files /dev/null and b/simple_shader/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/simple_shader/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/simple_shader/android/app/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 000000000..17987b79b Binary files /dev/null and b/simple_shader/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/simple_shader/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/simple_shader/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 000000000..09d439148 Binary files /dev/null and b/simple_shader/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/simple_shader/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/simple_shader/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 000000000..d5f1c8d34 Binary files /dev/null and b/simple_shader/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/simple_shader/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/simple_shader/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 000000000..4d6372eeb Binary files /dev/null and b/simple_shader/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/simple_shader/android/app/src/main/res/values-night/styles.xml b/simple_shader/android/app/src/main/res/values-night/styles.xml new file mode 100644 index 000000000..06952be74 --- /dev/null +++ b/simple_shader/android/app/src/main/res/values-night/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/simple_shader/android/app/src/main/res/values/styles.xml b/simple_shader/android/app/src/main/res/values/styles.xml new file mode 100644 index 000000000..cb1ef8805 --- /dev/null +++ b/simple_shader/android/app/src/main/res/values/styles.xml @@ -0,0 +1,18 @@ + + + + + + + diff --git a/simple_shader/android/app/src/profile/AndroidManifest.xml b/simple_shader/android/app/src/profile/AndroidManifest.xml new file mode 100644 index 000000000..3bb7d4d17 --- /dev/null +++ b/simple_shader/android/app/src/profile/AndroidManifest.xml @@ -0,0 +1,8 @@ + + + + diff --git a/simple_shader/android/build.gradle b/simple_shader/android/build.gradle new file mode 100644 index 000000000..e50c3a02b --- /dev/null +++ b/simple_shader/android/build.gradle @@ -0,0 +1,31 @@ +buildscript { + ext.kotlin_version = '1.7.10' + repositories { + google() + mavenCentral() + } + + dependencies { + classpath 'com.android.tools.build:gradle:7.3.0' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + } +} + +allprojects { + repositories { + google() + mavenCentral() + } +} + +rootProject.buildDir = '../build' +subprojects { + project.buildDir = "${rootProject.buildDir}/${project.name}" +} +subprojects { + project.evaluationDependsOn(':app') +} + +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/simple_shader/android/gradle.properties b/simple_shader/android/gradle.properties new file mode 100644 index 000000000..94adc3a3f --- /dev/null +++ b/simple_shader/android/gradle.properties @@ -0,0 +1,3 @@ +org.gradle.jvmargs=-Xmx1536M +android.useAndroidX=true +android.enableJetifier=true diff --git a/simple_shader/android/gradle/wrapper/gradle-wrapper.properties b/simple_shader/android/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..3c472b99c --- /dev/null +++ b/simple_shader/android/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip diff --git a/simple_shader/android/settings.gradle b/simple_shader/android/settings.gradle new file mode 100644 index 000000000..44e62bcf0 --- /dev/null +++ b/simple_shader/android/settings.gradle @@ -0,0 +1,11 @@ +include ':app' + +def localPropertiesFile = new File(rootProject.projectDir, "local.properties") +def properties = new Properties() + +assert localPropertiesFile.exists() +localPropertiesFile.withReader("UTF-8") { reader -> properties.load(reader) } + +def flutterSdkPath = properties.getProperty("flutter.sdk") +assert flutterSdkPath != null, "flutter.sdk not set in local.properties" +apply from: "$flutterSdkPath/packages/flutter_tools/gradle/app_plugin_loader.gradle" diff --git a/simple_shader/ios/.gitignore b/simple_shader/ios/.gitignore new file mode 100644 index 000000000..7a7f9873a --- /dev/null +++ b/simple_shader/ios/.gitignore @@ -0,0 +1,34 @@ +**/dgph +*.mode1v3 +*.mode2v3 +*.moved-aside +*.pbxuser +*.perspectivev3 +**/*sync/ +.sconsign.dblite +.tags* +**/.vagrant/ +**/DerivedData/ +Icon? +**/Pods/ +**/.symlinks/ +profile +xcuserdata +**/.generated/ +Flutter/App.framework +Flutter/Flutter.framework +Flutter/Flutter.podspec +Flutter/Generated.xcconfig +Flutter/ephemeral/ +Flutter/app.flx +Flutter/app.zip +Flutter/flutter_assets/ +Flutter/flutter_export_environment.sh +ServiceDefinitions.json +Runner/GeneratedPluginRegistrant.* + +# Exceptions to above rules. +!default.mode1v3 +!default.mode2v3 +!default.pbxuser +!default.perspectivev3 diff --git a/simple_shader/ios/Flutter/AppFrameworkInfo.plist b/simple_shader/ios/Flutter/AppFrameworkInfo.plist new file mode 100644 index 000000000..9625e105d --- /dev/null +++ b/simple_shader/ios/Flutter/AppFrameworkInfo.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + App + CFBundleIdentifier + io.flutter.flutter.app + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + App + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1.0 + MinimumOSVersion + 11.0 + + diff --git a/simple_shader/ios/Flutter/Debug.xcconfig b/simple_shader/ios/Flutter/Debug.xcconfig new file mode 100644 index 000000000..592ceee85 --- /dev/null +++ b/simple_shader/ios/Flutter/Debug.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/simple_shader/ios/Flutter/Release.xcconfig b/simple_shader/ios/Flutter/Release.xcconfig new file mode 100644 index 000000000..592ceee85 --- /dev/null +++ b/simple_shader/ios/Flutter/Release.xcconfig @@ -0,0 +1 @@ +#include "Generated.xcconfig" diff --git a/simple_shader/ios/Runner.xcodeproj/project.pbxproj b/simple_shader/ios/Runner.xcodeproj/project.pbxproj new file mode 100644 index 000000000..544fe7bce --- /dev/null +++ b/simple_shader/ios/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,616 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXBuildFile section */ + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 9705A1C41CF9048500538489 /* Embed Frameworks */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Embed Frameworks"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; + 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; + 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 97C146FB1CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; + 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; + 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; + 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 97C146EB1CF9000F007C117D /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 9740EEB11CF90186004384FC /* Flutter */ = { + isa = PBXGroup; + children = ( + 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 9740EEB31CF90195004384FC /* Generated.xcconfig */, + ); + name = Flutter; + sourceTree = ""; + }; + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 97C146E51CF9000F007C117D = { + isa = PBXGroup; + children = ( + 9740EEB11CF90186004384FC /* Flutter */, + 97C146F01CF9000F007C117D /* Runner */, + 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, + ); + sourceTree = ""; + }; + 97C146EF1CF9000F007C117D /* Products */ = { + isa = PBXGroup; + children = ( + 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 97C146F01CF9000F007C117D /* Runner */ = { + isa = PBXGroup; + children = ( + 97C146FA1CF9000F007C117D /* Main.storyboard */, + 97C146FD1CF9000F007C117D /* Assets.xcassets */, + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */, + 97C147021CF9000F007C117D /* Info.plist */, + 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */, + 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */, + 74858FAE1ED2DC5600515810 /* AppDelegate.swift */, + 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */, + ); + path = Runner; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C807D294A63A400263BE5 /* Sources */, + 331C807E294A63A400263BE5 /* Frameworks */, + 331C807F294A63A400263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 97C146ED1CF9000F007C117D /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 9740EEB61CF901F6004384FC /* Run Script */, + 97C146EA1CF9000F007C117D /* Sources */, + 97C146EB1CF9000F007C117D /* Frameworks */, + 97C146EC1CF9000F007C117D /* Resources */, + 9705A1C41CF9048500538489 /* Embed Frameworks */, + 3B06AD1E1E4923F5004D2608 /* Thin Binary */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Runner; + productName = Runner; + productReference = 97C146EE1CF9000F007C117D /* Runner.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 97C146E61CF9000F007C117D /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 1300; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; + 97C146ED1CF9000F007C117D = { + CreatedOnToolsVersion = 7.3.1; + LastSwiftMigration = 1100; + }; + }; + }; + buildConfigurationList = 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 97C146E51CF9000F007C117D; + productRefGroup = 97C146EF1CF9000F007C117D /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EC1CF9000F007C117D /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */, + 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */, + 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */, + 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", + ); + name = "Thin Binary"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" embed_and_thin"; + }; + 9740EEB61CF901F6004384FC /* Run Script */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + name = "Run Script"; + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 97C146EA1CF9000F007C117D /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */, + 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 97C146FA1CF9000F007C117D /* Main.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C146FB1CF9000F007C117D /* Base */, + ); + name = Main.storyboard; + sourceTree = ""; + }; + 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */ = { + isa = PBXVariantGroup; + children = ( + 97C147001CF9000F007C117D /* Base */, + ); + name = LaunchScreen.storyboard; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 249021D3217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Profile; + }; + 249021D4217E4FDB00AE95B9 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = TC87DMJLQP; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.simpleShader; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Profile; + }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AE0B7B92F70575B8D7E0D07E /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.simpleShader.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 89B67EB44CE7B6631473024E /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.simpleShader.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 640959BDD8F10B91D80A66BE /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.simpleShader.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; + 97C147031CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = iphoneos; + TARGETED_DEVICE_FAMILY = "1,2"; + }; + name = Debug; + }; + 97C147041CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_COMMA = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_STRICT_PROTOTYPES = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CLANG_WARN_UNREACHABLE_CODE = YES; + CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; + "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNDECLARED_SELECTOR = YES; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = iphoneos; + SUPPORTED_PLATFORMS = iphoneos; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + TARGETED_DEVICE_FAMILY = "1,2"; + VALIDATE_PRODUCT = YES; + }; + name = Release; + }; + 97C147061CF9000F007C117D /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = TC87DMJLQP; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.simpleShader; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Debug; + }; + 97C147071CF9000F007C117D /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; + DEVELOPMENT_TEAM = TC87DMJLQP; + ENABLE_BITCODE = NO; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); + PRODUCT_BUNDLE_IDENTIFIER = com.example.simpleShader; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_OBJC_BRIDGING_HEADER = "Runner/Runner-Bridging-Header.h"; + SWIFT_VERSION = 5.0; + VERSIONING_SYSTEM = "apple-generic"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147031CF9000F007C117D /* Debug */, + 97C147041CF9000F007C117D /* Release */, + 249021D3217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 97C147061CF9000F007C117D /* Debug */, + 97C147071CF9000F007C117D /* Release */, + 249021D4217E4FDB00AE95B9 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 97C146E61CF9000F007C117D /* Project object */; +} diff --git a/simple_shader/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/simple_shader/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..919434a62 --- /dev/null +++ b/simple_shader/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/simple_shader/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/simple_shader/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/simple_shader/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/simple_shader/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/simple_shader/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 000000000..f9b0d7c5e --- /dev/null +++ b/simple_shader/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/simple_shader/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/simple_shader/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 000000000..e42adcb34 --- /dev/null +++ b/simple_shader/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/simple_shader/ios/Runner.xcworkspace/contents.xcworkspacedata b/simple_shader/ios/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..1d526a16e --- /dev/null +++ b/simple_shader/ios/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/simple_shader/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/simple_shader/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/simple_shader/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/simple_shader/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/simple_shader/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings new file mode 100644 index 000000000..f9b0d7c5e --- /dev/null +++ b/simple_shader/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings @@ -0,0 +1,8 @@ + + + + + PreviewsEnabled + + + diff --git a/simple_shader/ios/Runner/AppDelegate.swift b/simple_shader/ios/Runner/AppDelegate.swift new file mode 100644 index 000000000..70693e4a8 --- /dev/null +++ b/simple_shader/ios/Runner/AppDelegate.swift @@ -0,0 +1,13 @@ +import UIKit +import Flutter + +@UIApplicationMain +@objc class AppDelegate: FlutterAppDelegate { + override func application( + _ application: UIApplication, + didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? + ) -> Bool { + GeneratedPluginRegistrant.register(with: self) + return super.application(application, didFinishLaunchingWithOptions: launchOptions) + } +} diff --git a/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000..d36b1fab2 --- /dev/null +++ b/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,122 @@ +{ + "images" : [ + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "20x20", + "idiom" : "iphone", + "filename" : "Icon-App-20x20@3x.png", + "scale" : "3x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "iphone", + "filename" : "Icon-App-29x29@3x.png", + "scale" : "3x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "iphone", + "filename" : "Icon-App-40x40@3x.png", + "scale" : "3x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@2x.png", + "scale" : "2x" + }, + { + "size" : "60x60", + "idiom" : "iphone", + "filename" : "Icon-App-60x60@3x.png", + "scale" : "3x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@1x.png", + "scale" : "1x" + }, + { + "size" : "20x20", + "idiom" : "ipad", + "filename" : "Icon-App-20x20@2x.png", + "scale" : "2x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@1x.png", + "scale" : "1x" + }, + { + "size" : "29x29", + "idiom" : "ipad", + "filename" : "Icon-App-29x29@2x.png", + "scale" : "2x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@1x.png", + "scale" : "1x" + }, + { + "size" : "40x40", + "idiom" : "ipad", + "filename" : "Icon-App-40x40@2x.png", + "scale" : "2x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@1x.png", + "scale" : "1x" + }, + { + "size" : "76x76", + "idiom" : "ipad", + "filename" : "Icon-App-76x76@2x.png", + "scale" : "2x" + }, + { + "size" : "83.5x83.5", + "idiom" : "ipad", + "filename" : "Icon-App-83.5x83.5@2x.png", + "scale" : "2x" + }, + { + "size" : "1024x1024", + "idiom" : "ios-marketing", + "filename" : "Icon-App-1024x1024@1x.png", + "scale" : "1x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png new file mode 100644 index 000000000..dc9ada472 Binary files /dev/null and b/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ diff --git a/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png new file mode 100644 index 000000000..7353c41ec Binary files /dev/null and b/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png new file mode 100644 index 000000000..797d452e4 Binary files /dev/null and b/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png new file mode 100644 index 000000000..6ed2d933e Binary files /dev/null and b/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png new file mode 100644 index 000000000..4cd7b0099 Binary files /dev/null and b/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png new file mode 100644 index 000000000..fe730945a Binary files /dev/null and b/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png new file mode 100644 index 000000000..321773cd8 Binary files /dev/null and b/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png new file mode 100644 index 000000000..797d452e4 Binary files /dev/null and b/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png new file mode 100644 index 000000000..502f463a9 Binary files /dev/null and b/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png new file mode 100644 index 000000000..0ec303439 Binary files /dev/null and b/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png new file mode 100644 index 000000000..0ec303439 Binary files /dev/null and b/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png new file mode 100644 index 000000000..e9f5fea27 Binary files /dev/null and b/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png new file mode 100644 index 000000000..84ac32ae7 Binary files /dev/null and b/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png new file mode 100644 index 000000000..8953cba09 Binary files /dev/null and b/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png new file mode 100644 index 000000000..0467bf12a Binary files /dev/null and b/simple_shader/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/simple_shader/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/simple_shader/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json new file mode 100644 index 000000000..0bedcf2fd --- /dev/null +++ b/simple_shader/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "idiom" : "universal", + "filename" : "LaunchImage.png", + "scale" : "1x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@2x.png", + "scale" : "2x" + }, + { + "idiom" : "universal", + "filename" : "LaunchImage@3x.png", + "scale" : "3x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/simple_shader/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/simple_shader/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png new file mode 100644 index 000000000..9da19eaca Binary files /dev/null and b/simple_shader/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png differ diff --git a/simple_shader/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/simple_shader/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png new file mode 100644 index 000000000..9da19eaca Binary files /dev/null and b/simple_shader/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png differ diff --git a/simple_shader/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/simple_shader/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png new file mode 100644 index 000000000..9da19eaca Binary files /dev/null and b/simple_shader/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png differ diff --git a/simple_shader/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/simple_shader/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md new file mode 100644 index 000000000..89c2725b7 --- /dev/null +++ b/simple_shader/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md @@ -0,0 +1,5 @@ +# Launch Screen Assets + +You can customize the launch screen with your own desired assets by replacing the image files in this directory. + +You can also do it by opening your Flutter project's Xcode project with `open ios/Runner.xcworkspace`, selecting `Runner/Assets.xcassets` in the Project Navigator and dropping in the desired images. \ No newline at end of file diff --git a/simple_shader/ios/Runner/Base.lproj/LaunchScreen.storyboard b/simple_shader/ios/Runner/Base.lproj/LaunchScreen.storyboard new file mode 100644 index 000000000..f2e259c7c --- /dev/null +++ b/simple_shader/ios/Runner/Base.lproj/LaunchScreen.storyboard @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/simple_shader/ios/Runner/Base.lproj/Main.storyboard b/simple_shader/ios/Runner/Base.lproj/Main.storyboard new file mode 100644 index 000000000..f3c28516f --- /dev/null +++ b/simple_shader/ios/Runner/Base.lproj/Main.storyboard @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/simple_shader/ios/Runner/Info.plist b/simple_shader/ios/Runner/Info.plist new file mode 100644 index 000000000..29cfd74e1 --- /dev/null +++ b/simple_shader/ios/Runner/Info.plist @@ -0,0 +1,51 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleDisplayName + Simple Shader + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + simple_shader + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleSignature + ???? + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSRequiresIPhoneOS + + UILaunchStoryboardName + LaunchScreen + UIMainStoryboardFile + Main + UISupportedInterfaceOrientations + + UIInterfaceOrientationPortrait + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UISupportedInterfaceOrientations~ipad + + UIInterfaceOrientationPortrait + UIInterfaceOrientationPortraitUpsideDown + UIInterfaceOrientationLandscapeLeft + UIInterfaceOrientationLandscapeRight + + UIViewControllerBasedStatusBarAppearance + + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents + + + diff --git a/simple_shader/ios/Runner/Runner-Bridging-Header.h b/simple_shader/ios/Runner/Runner-Bridging-Header.h new file mode 100644 index 000000000..308a2a560 --- /dev/null +++ b/simple_shader/ios/Runner/Runner-Bridging-Header.h @@ -0,0 +1 @@ +#import "GeneratedPluginRegistrant.h" diff --git a/simple_shader/ios/RunnerTests/RunnerTests.swift b/simple_shader/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 000000000..86a7c3b1b --- /dev/null +++ b/simple_shader/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/simple_shader/lib/main.dart b/simple_shader/lib/main.dart new file mode 100644 index 000000000..2ed46620e --- /dev/null +++ b/simple_shader/lib/main.dart @@ -0,0 +1,71 @@ +import 'dart:ui' as ui; + +import 'package:flutter/material.dart'; +import 'package:flutter_shaders/flutter_shaders.dart'; + +void main() { + runApp(const MyApp()); +} + +class MyApp extends StatelessWidget { + const MyApp({super.key}); + + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Simple Shader Demo', + theme: ThemeData( + colorSchemeSeed: Colors.blue, + useMaterial3: true, + ), + home: const MyHomePage(), + ); + } +} + +class MyHomePage extends StatelessWidget { + const MyHomePage({super.key}); + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + title: const Text('Simple Shader Demo'), + ), + body: ShaderBuilder( + assetKey: 'shaders/simple.frag', + (context, shader, child) => CustomPaint( + size: MediaQuery.of(context).size, + painter: ShaderPainter( + shader: shader, + ), + ), + child: const Center( + child: CircularProgressIndicator(), + ), + ), + ); + } +} + +class ShaderPainter extends CustomPainter { + ShaderPainter({required this.shader}); + ui.FragmentShader shader; + + @override + void paint(Canvas canvas, Size size) { + shader.setFloat(0, size.width); + shader.setFloat(1, size.height); + + final paint = Paint()..shader = shader; + canvas.drawRect( + Rect.fromLTWH(0, 0, size.width, size.height), + paint, + ); + } + + @override + bool shouldRepaint(covariant CustomPainter oldDelegate) { + return false; + } +} diff --git a/simple_shader/linux/.gitignore b/simple_shader/linux/.gitignore new file mode 100644 index 000000000..d3896c984 --- /dev/null +++ b/simple_shader/linux/.gitignore @@ -0,0 +1 @@ +flutter/ephemeral diff --git a/simple_shader/linux/CMakeLists.txt b/simple_shader/linux/CMakeLists.txt new file mode 100644 index 000000000..85002926d --- /dev/null +++ b/simple_shader/linux/CMakeLists.txt @@ -0,0 +1,139 @@ +# Project-level configuration. +cmake_minimum_required(VERSION 3.10) +project(runner LANGUAGES CXX) + +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. +set(BINARY_NAME "simple_shader") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID +set(APPLICATION_ID "com.example.simple_shader") + +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. +cmake_policy(SET CMP0063 NEW) + +# Load bundled libraries from the lib/ directory relative to the binary. +set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") + +# Root filesystem for cross-building. +if(FLUTTER_TARGET_PLATFORM_SYSROOT) + set(CMAKE_SYSROOT ${FLUTTER_TARGET_PLATFORM_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH ${CMAKE_SYSROOT}) + set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) + set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) + set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) +endif() + +# Define build configuration options. +if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) + set(CMAKE_BUILD_TYPE "Debug" CACHE + STRING "Flutter build mode" FORCE) + set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS + "Debug" "Profile" "Release") +endif() + +# Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. +function(APPLY_STANDARD_SETTINGS TARGET) + target_compile_features(${TARGET} PUBLIC cxx_std_14) + target_compile_options(${TARGET} PRIVATE -Wall -Werror) + target_compile_options(${TARGET} PRIVATE "$<$>:-O3>") + target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") +endfunction() + +# Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") +add_subdirectory(${FLUTTER_MANAGED_DIR}) + +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) + +add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") + +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. +add_executable(${BINARY_NAME} + "main.cc" + "my_application.cc" + "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" +) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. +apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. +target_link_libraries(${BINARY_NAME} PRIVATE flutter) +target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +# Run the Flutter tool portions of the build. This must not be removed. +add_dependencies(${BINARY_NAME} flutter_assemble) + +# Only the install-generated bundle's copy of the executable will launch +# correctly, since the resources must in the right relative locations. To avoid +# people trying to run the unbundled copy, put it in a subdirectory instead of +# the default top-level location. +set_target_properties(${BINARY_NAME} + PROPERTIES + RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" +) + + +# Generated plugin build rules, which manage building the plugins and adding +# them to the application. +include(flutter/generated_plugins.cmake) + + +# === Installation === +# By default, "installing" just makes a relocatable bundle in the build +# directory. +set(BUILD_BUNDLE_DIR "${PROJECT_BINARY_DIR}/bundle") +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + set(CMAKE_INSTALL_PREFIX "${BUILD_BUNDLE_DIR}" CACHE PATH "..." FORCE) +endif() + +# Start with a clean build bundle directory every time. +install(CODE " + file(REMOVE_RECURSE \"${BUILD_BUNDLE_DIR}/\") + " COMPONENT Runtime) + +set(INSTALL_BUNDLE_DATA_DIR "${CMAKE_INSTALL_PREFIX}/data") +set(INSTALL_BUNDLE_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib") + +install(TARGETS ${BINARY_NAME} RUNTIME DESTINATION "${CMAKE_INSTALL_PREFIX}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" + COMPONENT Runtime) + +install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) + +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" + DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endforeach(bundled_library) + +# Fully re-copy the assets directory on each build to avoid having stale files +# from a previous install. +set(FLUTTER_ASSET_DIR_NAME "flutter_assets") +install(CODE " + file(REMOVE_RECURSE \"${INSTALL_BUNDLE_DATA_DIR}/${FLUTTER_ASSET_DIR_NAME}\") + " COMPONENT Runtime) +install(DIRECTORY "${PROJECT_BUILD_DIR}/${FLUTTER_ASSET_DIR_NAME}" + DESTINATION "${INSTALL_BUNDLE_DATA_DIR}" COMPONENT Runtime) + +# Install the AOT library on non-Debug builds only. +if(NOT CMAKE_BUILD_TYPE MATCHES "Debug") + install(FILES "${AOT_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" + COMPONENT Runtime) +endif() diff --git a/simple_shader/linux/flutter/CMakeLists.txt b/simple_shader/linux/flutter/CMakeLists.txt new file mode 100644 index 000000000..d5bd01648 --- /dev/null +++ b/simple_shader/linux/flutter/CMakeLists.txt @@ -0,0 +1,88 @@ +# This file controls Flutter-level build steps. It should not be edited. +cmake_minimum_required(VERSION 3.10) + +set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") + +# Configuration provided via flutter tool. +include(${EPHEMERAL_DIR}/generated_config.cmake) + +# TODO: Move the rest of this into files in ephemeral. See +# https://github.com/flutter/flutter/issues/57146. + +# Serves the same purpose as list(TRANSFORM ... PREPEND ...), +# which isn't available in 3.10. +function(list_prepend LIST_NAME PREFIX) + set(NEW_LIST "") + foreach(element ${${LIST_NAME}}) + list(APPEND NEW_LIST "${PREFIX}${element}") + endforeach(element) + set(${LIST_NAME} "${NEW_LIST}" PARENT_SCOPE) +endfunction() + +# === Flutter Library === +# System-level dependencies. +find_package(PkgConfig REQUIRED) +pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) +pkg_check_modules(GLIB REQUIRED IMPORTED_TARGET glib-2.0) +pkg_check_modules(GIO REQUIRED IMPORTED_TARGET gio-2.0) + +set(FLUTTER_LIBRARY "${EPHEMERAL_DIR}/libflutter_linux_gtk.so") + +# Published to parent scope for install step. +set(FLUTTER_LIBRARY ${FLUTTER_LIBRARY} PARENT_SCOPE) +set(FLUTTER_ICU_DATA_FILE "${EPHEMERAL_DIR}/icudtl.dat" PARENT_SCOPE) +set(PROJECT_BUILD_DIR "${PROJECT_DIR}/build/" PARENT_SCOPE) +set(AOT_LIBRARY "${PROJECT_DIR}/build/lib/libapp.so" PARENT_SCOPE) + +list(APPEND FLUTTER_LIBRARY_HEADERS + "fl_basic_message_channel.h" + "fl_binary_codec.h" + "fl_binary_messenger.h" + "fl_dart_project.h" + "fl_engine.h" + "fl_json_message_codec.h" + "fl_json_method_codec.h" + "fl_message_codec.h" + "fl_method_call.h" + "fl_method_channel.h" + "fl_method_codec.h" + "fl_method_response.h" + "fl_plugin_registrar.h" + "fl_plugin_registry.h" + "fl_standard_message_codec.h" + "fl_standard_method_codec.h" + "fl_string_codec.h" + "fl_value.h" + "fl_view.h" + "flutter_linux.h" +) +list_prepend(FLUTTER_LIBRARY_HEADERS "${EPHEMERAL_DIR}/flutter_linux/") +add_library(flutter INTERFACE) +target_include_directories(flutter INTERFACE + "${EPHEMERAL_DIR}" +) +target_link_libraries(flutter INTERFACE "${FLUTTER_LIBRARY}") +target_link_libraries(flutter INTERFACE + PkgConfig::GTK + PkgConfig::GLIB + PkgConfig::GIO +) +add_dependencies(flutter flutter_assemble) + +# === Flutter tool backend === +# _phony_ is a non-existent file to force this command to run every time, +# since currently there's no way to get a full input/output list from the +# flutter tool. +add_custom_command( + OUTPUT ${FLUTTER_LIBRARY} ${FLUTTER_LIBRARY_HEADERS} + ${CMAKE_CURRENT_BINARY_DIR}/_phony_ + COMMAND ${CMAKE_COMMAND} -E env + ${FLUTTER_TOOL_ENVIRONMENT} + "${FLUTTER_ROOT}/packages/flutter_tools/bin/tool_backend.sh" + ${FLUTTER_TARGET_PLATFORM} ${CMAKE_BUILD_TYPE} + VERBATIM +) +add_custom_target(flutter_assemble DEPENDS + "${FLUTTER_LIBRARY}" + ${FLUTTER_LIBRARY_HEADERS} +) diff --git a/simple_shader/linux/flutter/generated_plugin_registrant.cc b/simple_shader/linux/flutter/generated_plugin_registrant.cc new file mode 100644 index 000000000..e71a16d23 --- /dev/null +++ b/simple_shader/linux/flutter/generated_plugin_registrant.cc @@ -0,0 +1,11 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#include "generated_plugin_registrant.h" + + +void fl_register_plugins(FlPluginRegistry* registry) { +} diff --git a/simple_shader/linux/flutter/generated_plugin_registrant.h b/simple_shader/linux/flutter/generated_plugin_registrant.h new file mode 100644 index 000000000..e0f0a47bc --- /dev/null +++ b/simple_shader/linux/flutter/generated_plugin_registrant.h @@ -0,0 +1,15 @@ +// +// Generated file. Do not edit. +// + +// clang-format off + +#ifndef GENERATED_PLUGIN_REGISTRANT_ +#define GENERATED_PLUGIN_REGISTRANT_ + +#include + +// Registers Flutter plugins. +void fl_register_plugins(FlPluginRegistry* registry); + +#endif // GENERATED_PLUGIN_REGISTRANT_ diff --git a/simple_shader/linux/flutter/generated_plugins.cmake b/simple_shader/linux/flutter/generated_plugins.cmake new file mode 100644 index 000000000..2e1de87a7 --- /dev/null +++ b/simple_shader/linux/flutter/generated_plugins.cmake @@ -0,0 +1,23 @@ +# +# Generated file, do not edit. +# + +list(APPEND FLUTTER_PLUGIN_LIST +) + +list(APPEND FLUTTER_FFI_PLUGIN_LIST +) + +set(PLUGIN_BUNDLED_LIBRARIES) + +foreach(plugin ${FLUTTER_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${plugin}/linux plugins/${plugin}) + target_link_libraries(${BINARY_NAME} PRIVATE ${plugin}_plugin) + list(APPEND PLUGIN_BUNDLED_LIBRARIES $) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${plugin}_bundled_libraries}) +endforeach(plugin) + +foreach(ffi_plugin ${FLUTTER_FFI_PLUGIN_LIST}) + add_subdirectory(flutter/ephemeral/.plugin_symlinks/${ffi_plugin}/linux plugins/${ffi_plugin}) + list(APPEND PLUGIN_BUNDLED_LIBRARIES ${${ffi_plugin}_bundled_libraries}) +endforeach(ffi_plugin) diff --git a/simple_shader/linux/main.cc b/simple_shader/linux/main.cc new file mode 100644 index 000000000..e7c5c5437 --- /dev/null +++ b/simple_shader/linux/main.cc @@ -0,0 +1,6 @@ +#include "my_application.h" + +int main(int argc, char** argv) { + g_autoptr(MyApplication) app = my_application_new(); + return g_application_run(G_APPLICATION(app), argc, argv); +} diff --git a/simple_shader/linux/my_application.cc b/simple_shader/linux/my_application.cc new file mode 100644 index 000000000..4086d6e80 --- /dev/null +++ b/simple_shader/linux/my_application.cc @@ -0,0 +1,104 @@ +#include "my_application.h" + +#include +#ifdef GDK_WINDOWING_X11 +#include +#endif + +#include "flutter/generated_plugin_registrant.h" + +struct _MyApplication { + GtkApplication parent_instance; + char** dart_entrypoint_arguments; +}; + +G_DEFINE_TYPE(MyApplication, my_application, GTK_TYPE_APPLICATION) + +// Implements GApplication::activate. +static void my_application_activate(GApplication* application) { + MyApplication* self = MY_APPLICATION(application); + GtkWindow* window = + GTK_WINDOW(gtk_application_window_new(GTK_APPLICATION(application))); + + // Use a header bar when running in GNOME as this is the common style used + // by applications and is the setup most users will be using (e.g. Ubuntu + // desktop). + // If running on X and not using GNOME then just use a traditional title bar + // in case the window manager does more exotic layout, e.g. tiling. + // If running on Wayland assume the header bar will work (may need changing + // if future cases occur). + gboolean use_header_bar = TRUE; +#ifdef GDK_WINDOWING_X11 + GdkScreen* screen = gtk_window_get_screen(window); + if (GDK_IS_X11_SCREEN(screen)) { + const gchar* wm_name = gdk_x11_screen_get_window_manager_name(screen); + if (g_strcmp0(wm_name, "GNOME Shell") != 0) { + use_header_bar = FALSE; + } + } +#endif + if (use_header_bar) { + GtkHeaderBar* header_bar = GTK_HEADER_BAR(gtk_header_bar_new()); + gtk_widget_show(GTK_WIDGET(header_bar)); + gtk_header_bar_set_title(header_bar, "simple_shader"); + gtk_header_bar_set_show_close_button(header_bar, TRUE); + gtk_window_set_titlebar(window, GTK_WIDGET(header_bar)); + } else { + gtk_window_set_title(window, "simple_shader"); + } + + gtk_window_set_default_size(window, 1280, 720); + gtk_widget_show(GTK_WIDGET(window)); + + g_autoptr(FlDartProject) project = fl_dart_project_new(); + fl_dart_project_set_dart_entrypoint_arguments(project, self->dart_entrypoint_arguments); + + FlView* view = fl_view_new(project); + gtk_widget_show(GTK_WIDGET(view)); + gtk_container_add(GTK_CONTAINER(window), GTK_WIDGET(view)); + + fl_register_plugins(FL_PLUGIN_REGISTRY(view)); + + gtk_widget_grab_focus(GTK_WIDGET(view)); +} + +// Implements GApplication::local_command_line. +static gboolean my_application_local_command_line(GApplication* application, gchar*** arguments, int* exit_status) { + MyApplication* self = MY_APPLICATION(application); + // Strip out the first argument as it is the binary name. + self->dart_entrypoint_arguments = g_strdupv(*arguments + 1); + + g_autoptr(GError) error = nullptr; + if (!g_application_register(application, nullptr, &error)) { + g_warning("Failed to register: %s", error->message); + *exit_status = 1; + return TRUE; + } + + g_application_activate(application); + *exit_status = 0; + + return TRUE; +} + +// Implements GObject::dispose. +static void my_application_dispose(GObject* object) { + MyApplication* self = MY_APPLICATION(object); + g_clear_pointer(&self->dart_entrypoint_arguments, g_strfreev); + G_OBJECT_CLASS(my_application_parent_class)->dispose(object); +} + +static void my_application_class_init(MyApplicationClass* klass) { + G_APPLICATION_CLASS(klass)->activate = my_application_activate; + G_APPLICATION_CLASS(klass)->local_command_line = my_application_local_command_line; + G_OBJECT_CLASS(klass)->dispose = my_application_dispose; +} + +static void my_application_init(MyApplication* self) {} + +MyApplication* my_application_new() { + return MY_APPLICATION(g_object_new(my_application_get_type(), + "application-id", APPLICATION_ID, + "flags", G_APPLICATION_NON_UNIQUE, + nullptr)); +} diff --git a/simple_shader/linux/my_application.h b/simple_shader/linux/my_application.h new file mode 100644 index 000000000..72271d5e4 --- /dev/null +++ b/simple_shader/linux/my_application.h @@ -0,0 +1,18 @@ +#ifndef FLUTTER_MY_APPLICATION_H_ +#define FLUTTER_MY_APPLICATION_H_ + +#include + +G_DECLARE_FINAL_TYPE(MyApplication, my_application, MY, APPLICATION, + GtkApplication) + +/** + * my_application_new: + * + * Creates a new Flutter-based application. + * + * Returns: a new #MyApplication. + */ +MyApplication* my_application_new(); + +#endif // FLUTTER_MY_APPLICATION_H_ diff --git a/simple_shader/macos/.gitignore b/simple_shader/macos/.gitignore new file mode 100644 index 000000000..746adbb6b --- /dev/null +++ b/simple_shader/macos/.gitignore @@ -0,0 +1,7 @@ +# Flutter-related +**/Flutter/ephemeral/ +**/Pods/ + +# Xcode-related +**/dgph +**/xcuserdata/ diff --git a/simple_shader/macos/Flutter/Flutter-Debug.xcconfig b/simple_shader/macos/Flutter/Flutter-Debug.xcconfig new file mode 100644 index 000000000..c2efd0b60 --- /dev/null +++ b/simple_shader/macos/Flutter/Flutter-Debug.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/simple_shader/macos/Flutter/Flutter-Release.xcconfig b/simple_shader/macos/Flutter/Flutter-Release.xcconfig new file mode 100644 index 000000000..c2efd0b60 --- /dev/null +++ b/simple_shader/macos/Flutter/Flutter-Release.xcconfig @@ -0,0 +1 @@ +#include "ephemeral/Flutter-Generated.xcconfig" diff --git a/simple_shader/macos/Flutter/GeneratedPluginRegistrant.swift b/simple_shader/macos/Flutter/GeneratedPluginRegistrant.swift new file mode 100644 index 000000000..cccf817a5 --- /dev/null +++ b/simple_shader/macos/Flutter/GeneratedPluginRegistrant.swift @@ -0,0 +1,10 @@ +// +// Generated file. Do not edit. +// + +import FlutterMacOS +import Foundation + + +func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { +} diff --git a/simple_shader/macos/Runner.xcodeproj/project.pbxproj b/simple_shader/macos/Runner.xcodeproj/project.pbxproj new file mode 100644 index 000000000..e9e25a272 --- /dev/null +++ b/simple_shader/macos/Runner.xcodeproj/project.pbxproj @@ -0,0 +1,695 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 54; + objects = { + +/* Begin PBXAggregateTarget section */ + 33CC111A2044C6BA0003C045 /* Flutter Assemble */ = { + isa = PBXAggregateTarget; + buildConfigurationList = 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */; + buildPhases = ( + 33CC111E2044C6BF0003C045 /* ShellScript */, + ); + dependencies = ( + ); + name = "Flutter Assemble"; + productName = FLX; + }; +/* End PBXAggregateTarget section */ + +/* Begin PBXBuildFile section */ + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; + 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC111A2044C6BA0003C045; + remoteInfo = FLX; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + 33CC110E2044A8840003C045 /* Bundle Framework */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + name = "Bundle Framework"; + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; + 33CC10ED2044A3C60003C045 /* simple_shader.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "simple_shader.app"; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; + 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; + 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; + 33CC10F72044A3C60003C045 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; name = Info.plist; path = Runner/Info.plist; sourceTree = ""; }; + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MainFlutterWindow.swift; sourceTree = ""; }; + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Debug.xcconfig"; sourceTree = ""; }; + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = "Flutter-Release.xcconfig"; sourceTree = ""; }; + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = "Flutter-Generated.xcconfig"; path = "ephemeral/Flutter-Generated.xcconfig"; sourceTree = ""; }; + 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; + 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; + 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; + 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EA2044A3C60003C045 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; + 33BA886A226E78AF003329D5 /* Configs */ = { + isa = PBXGroup; + children = ( + 33E5194F232828860026EE4D /* AppInfo.xcconfig */, + 9740EEB21CF90195004384FC /* Debug.xcconfig */, + 7AFA3C8E1D35360C0083082E /* Release.xcconfig */, + 333000ED22D3DE5D00554162 /* Warnings.xcconfig */, + ); + path = Configs; + sourceTree = ""; + }; + 33CC10E42044A3C60003C045 = { + isa = PBXGroup; + children = ( + 33FAB671232836740065AC1E /* Runner */, + 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, + 33CC10EE2044A3C60003C045 /* Products */, + D73912EC22F37F3D000D13A0 /* Frameworks */, + ); + sourceTree = ""; + }; + 33CC10EE2044A3C60003C045 /* Products */ = { + isa = PBXGroup; + children = ( + 33CC10ED2044A3C60003C045 /* simple_shader.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, + ); + name = Products; + sourceTree = ""; + }; + 33CC11242044D66E0003C045 /* Resources */ = { + isa = PBXGroup; + children = ( + 33CC10F22044A3C60003C045 /* Assets.xcassets */, + 33CC10F42044A3C60003C045 /* MainMenu.xib */, + 33CC10F72044A3C60003C045 /* Info.plist */, + ); + name = Resources; + path = ..; + sourceTree = ""; + }; + 33CEB47122A05771004F2AC0 /* Flutter */ = { + isa = PBXGroup; + children = ( + 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */, + 33CEB47222A05771004F2AC0 /* Flutter-Debug.xcconfig */, + 33CEB47422A05771004F2AC0 /* Flutter-Release.xcconfig */, + 33CEB47722A0578A004F2AC0 /* Flutter-Generated.xcconfig */, + ); + path = Flutter; + sourceTree = ""; + }; + 33FAB671232836740065AC1E /* Runner */ = { + isa = PBXGroup; + children = ( + 33CC10F02044A3C60003C045 /* AppDelegate.swift */, + 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */, + 33E51913231747F40026EE4D /* DebugProfile.entitlements */, + 33E51914231749380026EE4D /* Release.entitlements */, + 33CC11242044D66E0003C045 /* Resources */, + 33BA886A226E78AF003329D5 /* Configs */, + ); + path = Runner; + sourceTree = ""; + }; + D73912EC22F37F3D000D13A0 /* Frameworks */ = { + isa = PBXGroup; + children = ( + ); + name = Frameworks; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; + 33CC10EC2044A3C60003C045 /* Runner */ = { + isa = PBXNativeTarget; + buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; + buildPhases = ( + 33CC10E92044A3C60003C045 /* Sources */, + 33CC10EA2044A3C60003C045 /* Frameworks */, + 33CC10EB2044A3C60003C045 /* Resources */, + 33CC110E2044A8840003C045 /* Bundle Framework */, + 3399D490228B24CF009A79C7 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + 33CC11202044C79F0003C045 /* PBXTargetDependency */, + ); + name = Runner; + productName = Runner; + productReference = 33CC10ED2044A3C60003C045 /* simple_shader.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + 33CC10E52044A3C60003C045 /* Project object */ = { + isa = PBXProject; + attributes = { + LastSwiftUpdateCheck = 0920; + LastUpgradeCheck = 1300; + ORGANIZATIONNAME = ""; + TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; + 33CC10EC2044A3C60003C045 = { + CreatedOnToolsVersion = 9.2; + LastSwiftMigration = 1100; + ProvisioningStyle = Automatic; + SystemCapabilities = { + com.apple.Sandbox = { + enabled = 1; + }; + }; + }; + 33CC111A2044C6BA0003C045 = { + CreatedOnToolsVersion = 9.2; + ProvisioningStyle = Manual; + }; + }; + }; + buildConfigurationList = 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */; + compatibilityVersion = "Xcode 9.3"; + developmentRegion = en; + hasScannedForEncodings = 0; + knownRegions = ( + en, + Base, + ); + mainGroup = 33CC10E42044A3C60003C045; + productRefGroup = 33CC10EE2044A3C60003C045 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, + 33CC111A2044C6BA0003C045 /* Flutter Assemble */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10EB2044A3C60003C045 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */, + 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + 3399D490228B24CF009A79C7 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + }; + 33CC111E2044C6BF0003C045 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, + ); + inputPaths = ( + Flutter/ephemeral/tripwire, + ); + outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + 33CC10E92044A3C60003C045 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */, + 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */, + 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; + 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; + targetProxy = 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + 33CC10F42044A3C60003C045 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + 33CC10F52044A3C60003C045 /* Base */, + ); + name = MainMenu.xib; + path = Runner; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.simpleShader.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/simple_shader.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/simple_shader"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.simpleShader.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/simple_shader.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/simple_shader"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.simpleShader.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/simple_shader.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/simple_shader"; + }; + name = Profile; + }; + 338D0CE9231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Profile; + }; + 338D0CEA231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Profile; + }; + 338D0CEB231458BD00FA5F75 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Profile; + }; + 33CC10F92044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = Debug; + }; + 33CC10FA2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.14; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = Release; + }; + 33CC10FC2044A3C60003C045 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = Debug; + }; + 33CC10FD2044A3C60003C045 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/Release.entitlements; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = Release; + }; + 33CC111C2044C6BA0003C045 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Debug; + }; + 33CC111D2044C6BA0003C045 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10F92044A3C60003C045 /* Debug */, + 33CC10FA2044A3C60003C045 /* Release */, + 338D0CE9231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC10FC2044A3C60003C045 /* Debug */, + 33CC10FD2044A3C60003C045 /* Release */, + 338D0CEA231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + 33CC111B2044C6BA0003C045 /* Build configuration list for PBXAggregateTarget "Flutter Assemble" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 33CC111C2044C6BA0003C045 /* Debug */, + 33CC111D2044C6BA0003C045 /* Release */, + 338D0CEB231458BD00FA5F75 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = 33CC10E52044A3C60003C045 /* Project object */; +} diff --git a/simple_shader/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/simple_shader/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/simple_shader/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/simple_shader/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/simple_shader/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme new file mode 100644 index 000000000..192c91fc4 --- /dev/null +++ b/simple_shader/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/simple_shader/macos/Runner.xcworkspace/contents.xcworkspacedata b/simple_shader/macos/Runner.xcworkspace/contents.xcworkspacedata new file mode 100644 index 000000000..1d526a16e --- /dev/null +++ b/simple_shader/macos/Runner.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ + + + + + diff --git a/simple_shader/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/simple_shader/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist new file mode 100644 index 000000000..18d981003 --- /dev/null +++ b/simple_shader/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist @@ -0,0 +1,8 @@ + + + + + IDEDidComputeMac32BitWarning + + + diff --git a/simple_shader/macos/Runner/AppDelegate.swift b/simple_shader/macos/Runner/AppDelegate.swift new file mode 100644 index 000000000..d53ef6437 --- /dev/null +++ b/simple_shader/macos/Runner/AppDelegate.swift @@ -0,0 +1,9 @@ +import Cocoa +import FlutterMacOS + +@NSApplicationMain +class AppDelegate: FlutterAppDelegate { + override func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool { + return true + } +} diff --git a/simple_shader/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/simple_shader/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json new file mode 100644 index 000000000..a2ec33f19 --- /dev/null +++ b/simple_shader/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json @@ -0,0 +1,68 @@ +{ + "images" : [ + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_16.png", + "scale" : "1x" + }, + { + "size" : "16x16", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "2x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_32.png", + "scale" : "1x" + }, + { + "size" : "32x32", + "idiom" : "mac", + "filename" : "app_icon_64.png", + "scale" : "2x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_128.png", + "scale" : "1x" + }, + { + "size" : "128x128", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "2x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_256.png", + "scale" : "1x" + }, + { + "size" : "256x256", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "2x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_512.png", + "scale" : "1x" + }, + { + "size" : "512x512", + "idiom" : "mac", + "filename" : "app_icon_1024.png", + "scale" : "2x" + } + ], + "info" : { + "version" : 1, + "author" : "xcode" + } +} diff --git a/simple_shader/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/simple_shader/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png new file mode 100644 index 000000000..82b6f9d9a Binary files /dev/null and b/simple_shader/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png differ diff --git a/simple_shader/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/simple_shader/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png new file mode 100644 index 000000000..13b35eba5 Binary files /dev/null and b/simple_shader/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png differ diff --git a/simple_shader/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/simple_shader/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png new file mode 100644 index 000000000..0a3f5fa40 Binary files /dev/null and b/simple_shader/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png differ diff --git a/simple_shader/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/simple_shader/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png new file mode 100644 index 000000000..bdb57226d Binary files /dev/null and b/simple_shader/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png differ diff --git a/simple_shader/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png b/simple_shader/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png new file mode 100644 index 000000000..f083318e0 Binary files /dev/null and b/simple_shader/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png differ diff --git a/simple_shader/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/simple_shader/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png new file mode 100644 index 000000000..326c0e72c Binary files /dev/null and b/simple_shader/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png differ diff --git a/simple_shader/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/simple_shader/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png new file mode 100644 index 000000000..2f1632cfd Binary files /dev/null and b/simple_shader/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png differ diff --git a/simple_shader/macos/Runner/Base.lproj/MainMenu.xib b/simple_shader/macos/Runner/Base.lproj/MainMenu.xib new file mode 100644 index 000000000..80e867a4e --- /dev/null +++ b/simple_shader/macos/Runner/Base.lproj/MainMenu.xib @@ -0,0 +1,343 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/simple_shader/macos/Runner/Configs/AppInfo.xcconfig b/simple_shader/macos/Runner/Configs/AppInfo.xcconfig new file mode 100644 index 000000000..aac423593 --- /dev/null +++ b/simple_shader/macos/Runner/Configs/AppInfo.xcconfig @@ -0,0 +1,14 @@ +// Application-level settings for the Runner target. +// +// This may be replaced with something auto-generated from metadata (e.g., pubspec.yaml) in the +// future. If not, the values below would default to using the project name when this becomes a +// 'flutter create' template. + +// The application's name. By default this is also the title of the Flutter window. +PRODUCT_NAME = simple_shader + +// The application's bundle identifier +PRODUCT_BUNDLE_IDENTIFIER = com.example.simpleShader + +// The copyright displayed in application information +PRODUCT_COPYRIGHT = Copyright © 2023 com.example. All rights reserved. diff --git a/simple_shader/macos/Runner/Configs/Debug.xcconfig b/simple_shader/macos/Runner/Configs/Debug.xcconfig new file mode 100644 index 000000000..36b0fd946 --- /dev/null +++ b/simple_shader/macos/Runner/Configs/Debug.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Debug.xcconfig" +#include "Warnings.xcconfig" diff --git a/simple_shader/macos/Runner/Configs/Release.xcconfig b/simple_shader/macos/Runner/Configs/Release.xcconfig new file mode 100644 index 000000000..dff4f4956 --- /dev/null +++ b/simple_shader/macos/Runner/Configs/Release.xcconfig @@ -0,0 +1,2 @@ +#include "../../Flutter/Flutter-Release.xcconfig" +#include "Warnings.xcconfig" diff --git a/simple_shader/macos/Runner/Configs/Warnings.xcconfig b/simple_shader/macos/Runner/Configs/Warnings.xcconfig new file mode 100644 index 000000000..42bcbf478 --- /dev/null +++ b/simple_shader/macos/Runner/Configs/Warnings.xcconfig @@ -0,0 +1,13 @@ +WARNING_CFLAGS = -Wall -Wconditional-uninitialized -Wnullable-to-nonnull-conversion -Wmissing-method-return-type -Woverlength-strings +GCC_WARN_UNDECLARED_SELECTOR = YES +CLANG_UNDEFINED_BEHAVIOR_SANITIZER_NULLABILITY = YES +CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE +CLANG_WARN__DUPLICATE_METHOD_MATCH = YES +CLANG_WARN_PRAGMA_PACK = YES +CLANG_WARN_STRICT_PROTOTYPES = YES +CLANG_WARN_COMMA = YES +GCC_WARN_STRICT_SELECTOR_MATCH = YES +CLANG_WARN_OBJC_REPEATED_USE_OF_WEAK = YES +CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES +GCC_WARN_SHADOW = YES +CLANG_WARN_UNREACHABLE_CODE = YES diff --git a/simple_shader/macos/Runner/DebugProfile.entitlements b/simple_shader/macos/Runner/DebugProfile.entitlements new file mode 100644 index 000000000..dddb8a30c --- /dev/null +++ b/simple_shader/macos/Runner/DebugProfile.entitlements @@ -0,0 +1,12 @@ + + + + + com.apple.security.app-sandbox + + com.apple.security.cs.allow-jit + + com.apple.security.network.server + + + diff --git a/simple_shader/macos/Runner/Info.plist b/simple_shader/macos/Runner/Info.plist new file mode 100644 index 000000000..4789daa6a --- /dev/null +++ b/simple_shader/macos/Runner/Info.plist @@ -0,0 +1,32 @@ + + + + + CFBundleDevelopmentRegion + $(DEVELOPMENT_LANGUAGE) + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIconFile + + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + APPL + CFBundleShortVersionString + $(FLUTTER_BUILD_NAME) + CFBundleVersion + $(FLUTTER_BUILD_NUMBER) + LSMinimumSystemVersion + $(MACOSX_DEPLOYMENT_TARGET) + NSHumanReadableCopyright + $(PRODUCT_COPYRIGHT) + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + + diff --git a/simple_shader/macos/Runner/MainFlutterWindow.swift b/simple_shader/macos/Runner/MainFlutterWindow.swift new file mode 100644 index 000000000..2722837ec --- /dev/null +++ b/simple_shader/macos/Runner/MainFlutterWindow.swift @@ -0,0 +1,15 @@ +import Cocoa +import FlutterMacOS + +class MainFlutterWindow: NSWindow { + override func awakeFromNib() { + let flutterViewController = FlutterViewController.init() + let windowFrame = self.frame + self.contentViewController = flutterViewController + self.setFrame(windowFrame, display: true) + + RegisterGeneratedPlugins(registry: flutterViewController) + + super.awakeFromNib() + } +} diff --git a/simple_shader/macos/Runner/Release.entitlements b/simple_shader/macos/Runner/Release.entitlements new file mode 100644 index 000000000..852fa1a47 --- /dev/null +++ b/simple_shader/macos/Runner/Release.entitlements @@ -0,0 +1,8 @@ + + + + + com.apple.security.app-sandbox + + + diff --git a/simple_shader/macos/RunnerTests/RunnerTests.swift b/simple_shader/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 000000000..5418c9f53 --- /dev/null +++ b/simple_shader/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import FlutterMacOS +import Cocoa +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/simple_shader/pubspec.yaml b/simple_shader/pubspec.yaml new file mode 100644 index 000000000..260d7b29b --- /dev/null +++ b/simple_shader/pubspec.yaml @@ -0,0 +1,23 @@ +name: simple_shader +description: Using a shader, simply. +publish_to: 'none' +version: 1.0.0+1 + +environment: + sdk: ^3.1.0 + +dependencies: + flutter: + sdk: flutter + flutter_shaders: ^0.1.0 + +dev_dependencies: + analysis_defaults: + path: ../analysis_defaults + flutter_test: + sdk: flutter + +flutter: + uses-material-design: true + shaders: + - shaders/simple.frag diff --git a/simple_shader/screenshot.png b/simple_shader/screenshot.png new file mode 100644 index 000000000..2e8df52e4 Binary files /dev/null and b/simple_shader/screenshot.png differ diff --git a/simple_shader/shaders/simple.frag b/simple_shader/shaders/simple.frag new file mode 100644 index 000000000..20075c9ee --- /dev/null +++ b/simple_shader/shaders/simple.frag @@ -0,0 +1,25 @@ +#version 460 core + +#include + +precision mediump float; + +uniform vec2 resolution; +out vec4 fragColor; + +vec3 flutterBlue = vec3(5, 83, 177) / 255; +vec3 flutterNavy = vec3(4, 43, 89) / 255; +vec3 flutterSky = vec3(2, 125, 253) / 255; + +void main() { + vec2 st = FlutterFragCoord().xy / resolution.xy; + + vec3 color = vec3(0.0); + vec3 percent = vec3((st.x + st.y) / 2); + + color = + mix(mix(flutterSky, flutterBlue, percent * 2), + mix(flutterBlue, flutterNavy, percent * 2 - 1), step(0.5, percent)); + + fragColor = vec4(color, 1); +} diff --git a/simple_shader/test/widget_test.dart b/simple_shader/test/widget_test.dart new file mode 100644 index 000000000..97c66d107 --- /dev/null +++ b/simple_shader/test/widget_test.dart @@ -0,0 +1,9 @@ +import 'package:flutter_test/flutter_test.dart'; +import 'package:simple_shader/main.dart'; + +void main() { + testWidgets('Smoke test', (tester) async { + // Build our app and trigger a frame. + await tester.pumpWidget(const MyApp()); + }); +} diff --git a/simple_shader/web/favicon.png b/simple_shader/web/favicon.png new file mode 100644 index 000000000..8aaa46ac1 Binary files /dev/null and b/simple_shader/web/favicon.png differ diff --git a/simple_shader/web/icons/Icon-192.png b/simple_shader/web/icons/Icon-192.png new file mode 100644 index 000000000..b749bfef0 Binary files /dev/null and b/simple_shader/web/icons/Icon-192.png differ diff --git a/simple_shader/web/icons/Icon-512.png b/simple_shader/web/icons/Icon-512.png new file mode 100644 index 000000000..88cfd48df Binary files /dev/null and b/simple_shader/web/icons/Icon-512.png differ diff --git a/simple_shader/web/icons/Icon-maskable-192.png b/simple_shader/web/icons/Icon-maskable-192.png new file mode 100644 index 000000000..eb9b4d76e Binary files /dev/null and b/simple_shader/web/icons/Icon-maskable-192.png differ diff --git a/simple_shader/web/icons/Icon-maskable-512.png b/simple_shader/web/icons/Icon-maskable-512.png new file mode 100644 index 000000000..d69c56691 Binary files /dev/null and b/simple_shader/web/icons/Icon-maskable-512.png differ diff --git a/experimental/varfont_shader_puzzle/web/index.html b/simple_shader/web/index.html similarity index 94% rename from experimental/varfont_shader_puzzle/web/index.html rename to simple_shader/web/index.html index dd57675e5..7e930218f 100644 --- a/experimental/varfont_shader_puzzle/web/index.html +++ b/simple_shader/web/index.html @@ -23,13 +23,13 @@ - + - type_jam_github + simple_shader diff --git a/simplistic_calculator/windows/CMakeLists.txt b/simplistic_calculator/windows/CMakeLists.txt index fb54a2d9f..3d5d031bf 100644 --- a/simplistic_calculator/windows/CMakeLists.txt +++ b/simplistic_calculator/windows/CMakeLists.txt @@ -52,6 +52,7 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) # Application build; see runner/CMakeLists.txt. add_subdirectory("runner") + # Generated plugin build rules, which manage building the plugins and adding # them to the application. include(flutter/generated_plugins.cmake) diff --git a/simplistic_calculator/windows/runner/CMakeLists.txt b/simplistic_calculator/windows/runner/CMakeLists.txt index 17411a8ab..394917c05 100644 --- a/simplistic_calculator/windows/runner/CMakeLists.txt +++ b/simplistic_calculator/windows/runner/CMakeLists.txt @@ -33,6 +33,7 @@ target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") # Add dependency libraries and include directories. Add any application-specific # dependencies here. target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") # Run the Flutter tool portions of the build. This must not be removed. diff --git a/simplistic_calculator/windows/runner/Runner.rc b/simplistic_calculator/windows/runner/Runner.rc index 835e11ab9..cc869c519 100644 --- a/simplistic_calculator/windows/runner/Runner.rc +++ b/simplistic_calculator/windows/runner/Runner.rc @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "simplistic_calculator" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "simplistic_calculator" "\0" - VALUE "LegalCopyright", "Copyright (C) 2022 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2023 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "simplistic_calculator.exe" "\0" VALUE "ProductName", "simplistic_calculator" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/simplistic_calculator/windows/runner/flutter_window.cpp b/simplistic_calculator/windows/runner/flutter_window.cpp index b43b9095e..b25e363ef 100644 --- a/simplistic_calculator/windows/runner/flutter_window.cpp +++ b/simplistic_calculator/windows/runner/flutter_window.cpp @@ -26,6 +26,11 @@ bool FlutterWindow::OnCreate() { } RegisterPlugins(flutter_controller_->engine()); SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + return true; } diff --git a/simplistic_calculator/windows/runner/main.cpp b/simplistic_calculator/windows/runner/main.cpp index cd50b90c8..3b813fe23 100644 --- a/simplistic_calculator/windows/runner/main.cpp +++ b/simplistic_calculator/windows/runner/main.cpp @@ -27,7 +27,7 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, FlutterWindow window(project); Win32Window::Point origin(10, 10); Win32Window::Size size(1280, 720); - if (!window.CreateAndShow(L"simplistic_calculator", origin, size)) { + if (!window.Create(L"simplistic_calculator", origin, size)) { return EXIT_FAILURE; } window.SetQuitOnClose(true); diff --git a/simplistic_calculator/windows/runner/utils.cpp b/simplistic_calculator/windows/runner/utils.cpp index f5bf9fa0f..b2b08734d 100644 --- a/simplistic_calculator/windows/runner/utils.cpp +++ b/simplistic_calculator/windows/runner/utils.cpp @@ -47,16 +47,17 @@ std::string Utf8FromUtf16(const wchar_t* utf16_string) { } int target_length = ::WideCharToMultiByte( CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, nullptr, 0, nullptr, nullptr); + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); std::string utf8_string; - if (target_length == 0 || target_length > utf8_string.max_size()) { + if (target_length <= 0 || target_length > utf8_string.max_size()) { return utf8_string; } utf8_string.resize(target_length); int converted_length = ::WideCharToMultiByte( CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, utf8_string.data(), - target_length, nullptr, nullptr); + input_length, utf8_string.data(), target_length, nullptr, nullptr); if (converted_length == 0) { return std::string(); } diff --git a/simplistic_calculator/windows/runner/win32_window.cpp b/simplistic_calculator/windows/runner/win32_window.cpp index c10f08dc7..60608d0fe 100644 --- a/simplistic_calculator/windows/runner/win32_window.cpp +++ b/simplistic_calculator/windows/runner/win32_window.cpp @@ -1,13 +1,31 @@ #include "win32_window.h" +#include #include #include "resource.h" namespace { +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + // The number of Win32Window objects that currently exist. static int g_active_window_count = 0; @@ -31,8 +49,8 @@ void EnableFullDpiSupportIfAvailable(HWND hwnd) { GetProcAddress(user32_module, "EnableNonClientDpiScaling")); if (enable_non_client_dpi_scaling != nullptr) { enable_non_client_dpi_scaling(hwnd); - FreeLibrary(user32_module); } + FreeLibrary(user32_module); } } // namespace @@ -42,7 +60,7 @@ class WindowClassRegistrar { public: ~WindowClassRegistrar() = default; - // Returns the singleton registar instance. + // Returns the singleton registrar instance. static WindowClassRegistrar* GetInstance() { if (!instance_) { instance_ = new WindowClassRegistrar(); @@ -102,9 +120,9 @@ Win32Window::~Win32Window() { Destroy(); } -bool Win32Window::CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size) { +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { Destroy(); const wchar_t* window_class = @@ -117,7 +135,7 @@ bool Win32Window::CreateAndShow(const std::wstring& title, double scale_factor = dpi / 96.0; HWND window = CreateWindow( - window_class, title.c_str(), WS_OVERLAPPEDWINDOW | WS_VISIBLE, + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), Scale(size.width, scale_factor), Scale(size.height, scale_factor), nullptr, nullptr, GetModuleHandle(nullptr), this); @@ -126,9 +144,15 @@ bool Win32Window::CreateAndShow(const std::wstring& title, return false; } + UpdateTheme(window); + return OnCreate(); } +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + // static LRESULT CALLBACK Win32Window::WndProc(HWND const window, UINT const message, @@ -188,6 +212,10 @@ Win32Window::MessageHandler(HWND hwnd, SetFocus(child_content_); } return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; } return DefWindowProc(window_handle_, message, wparam, lparam); @@ -243,3 +271,18 @@ bool Win32Window::OnCreate() { void Win32Window::OnDestroy() { // No-op; provided for subclasses. } + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/simplistic_calculator/windows/runner/win32_window.h b/simplistic_calculator/windows/runner/win32_window.h index 17ba43112..e901dde68 100644 --- a/simplistic_calculator/windows/runner/win32_window.h +++ b/simplistic_calculator/windows/runner/win32_window.h @@ -28,15 +28,16 @@ class Win32Window { Win32Window(); virtual ~Win32Window(); - // Creates and shows a win32 window with |title| and position and size using + // Creates a win32 window with |title| that is positioned and sized using // |origin| and |size|. New windows are created on the default monitor. Window // sizes are specified to the OS in physical pixels, hence to ensure a - // consistent size to will treat the width height passed in to this function - // as logical pixels and scale to appropriate for the default monitor. Returns - // true if the window was created successfully. - bool CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size); + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); // Release OS resources associated with window. void Destroy(); @@ -76,7 +77,7 @@ class Win32Window { // OS callback called by message pump. Handles the WM_NCCREATE message which // is passed when the non-client area is being created and enables automatic // non-client DPI scaling so that the non-client area automatically - // responsponds to changes in DPI. All other messages are handled by + // responds to changes in DPI. All other messages are handled by // MessageHandler. static LRESULT CALLBACK WndProc(HWND const window, UINT const message, @@ -86,6 +87,9 @@ class Win32Window { // Retrieves a class instance pointer for |window| static Win32Window* GetThisFromHandle(HWND const window) noexcept; + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + bool quit_on_close_ = false; // window handle for top level window. diff --git a/simplistic_editor/.metadata b/simplistic_editor/.metadata index d90406e39..a7cbe7932 100644 --- a/simplistic_editor/.metadata +++ b/simplistic_editor/.metadata @@ -4,8 +4,8 @@ # This file should be version controlled. version: - revision: 14a9b4a7512c9bc40d0417672a87276bd48df2ad - channel: master + revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + channel: beta project_type: app @@ -13,17 +13,26 @@ project_type: app migration: platforms: - platform: root - create_revision: 14a9b4a7512c9bc40d0417672a87276bd48df2ad - base_revision: 14a9b4a7512c9bc40d0417672a87276bd48df2ad + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + - platform: android + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + - platform: ios + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f - platform: linux - create_revision: 14a9b4a7512c9bc40d0417672a87276bd48df2ad - base_revision: 14a9b4a7512c9bc40d0417672a87276bd48df2ad + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f - platform: macos - create_revision: 14a9b4a7512c9bc40d0417672a87276bd48df2ad - base_revision: 14a9b4a7512c9bc40d0417672a87276bd48df2ad + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + - platform: web + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f - platform: windows - create_revision: 14a9b4a7512c9bc40d0417672a87276bd48df2ad - base_revision: 14a9b4a7512c9bc40d0417672a87276bd48df2ad + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f # User provided section diff --git a/simplistic_editor/analysis_options.yaml b/simplistic_editor/analysis_options.yaml index 5e2133eb6..13d6fe105 100644 --- a/simplistic_editor/analysis_options.yaml +++ b/simplistic_editor/analysis_options.yaml @@ -1 +1 @@ -include: ../analysis_options.yaml +include: package:analysis_defaults/flutter.yaml diff --git a/simplistic_editor/android/app/build.gradle b/simplistic_editor/android/app/build.gradle index 4420a33cd..29f94e723 100644 --- a/simplistic_editor/android/app/build.gradle +++ b/simplistic_editor/android/app/build.gradle @@ -46,7 +46,7 @@ android { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "com.example.simplistic_editor" // You can update the following values to match your application needs. - // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-build-configuration. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. minSdkVersion flutter.minSdkVersion targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() diff --git a/simplistic_editor/android/app/src/main/AndroidManifest.xml b/simplistic_editor/android/app/src/main/AndroidManifest.xml index 931d4ed34..affc848cf 100644 --- a/simplistic_editor/android/app/src/main/AndroidManifest.xml +++ b/simplistic_editor/android/app/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ - diff --git a/simplistic_editor/android/build.gradle b/simplistic_editor/android/build.gradle index 83ae22004..e50c3a02b 100644 --- a/simplistic_editor/android/build.gradle +++ b/simplistic_editor/android/build.gradle @@ -1,12 +1,12 @@ buildscript { - ext.kotlin_version = '1.6.10' + ext.kotlin_version = '1.7.10' repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.1.2' + classpath 'com.android.tools.build:gradle:7.3.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/simplistic_editor/android/gradle/wrapper/gradle-wrapper.properties b/simplistic_editor/android/gradle/wrapper/gradle-wrapper.properties index cc5527d78..3c472b99c 100644 --- a/simplistic_editor/android/gradle/wrapper/gradle-wrapper.properties +++ b/simplistic_editor/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Fri Jun 23 08:50:38 CEST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip diff --git a/simplistic_editor/ios/Runner.xcodeproj/project.pbxproj b/simplistic_editor/ios/Runner.xcodeproj/project.pbxproj index 27a743915..4bd7e14da 100644 --- a/simplistic_editor/ios/Runner.xcodeproj/project.pbxproj +++ b/simplistic_editor/ios/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 50; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -13,8 +13,19 @@ 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXCopyFilesBuildPhase section */ 9705A1C41CF9048500538489 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; @@ -42,6 +53,8 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -66,12 +79,21 @@ name = Flutter; sourceTree = ""; }; + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; 97C146E51CF9000F007C117D = { isa = PBXGroup; children = ( 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, + 331C8082294A63A400263BE5 /* RunnerTests */, ); sourceTree = ""; }; @@ -79,6 +101,7 @@ isa = PBXGroup; children = ( 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, ); name = Products; sourceTree = ""; @@ -101,6 +124,24 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C807D294A63A400263BE5 /* Sources */, + 331C807E294A63A400263BE5 /* Frameworks */, + 331C807F294A63A400263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; 97C146ED1CF9000F007C117D /* Runner */ = { isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; @@ -130,6 +171,10 @@ LastUpgradeCheck = 1300; ORGANIZATIONNAME = ""; TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; 97C146ED1CF9000F007C117D = { CreatedOnToolsVersion = 7.3.1; LastSwiftMigration = 1100; @@ -150,11 +195,19 @@ projectRoot = ""; targets = ( 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EC1CF9000F007C117D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -171,10 +224,12 @@ /* Begin PBXShellScriptBuildPhase section */ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); name = "Thin Binary"; outputPaths = ( @@ -185,6 +240,7 @@ }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -200,6 +256,14 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EA1CF9000F007C117D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -211,6 +275,14 @@ }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin PBXVariantGroup section */ 97C146FA1CF9000F007C117D /* Main.storyboard */ = { isa = PBXVariantGroup; @@ -288,7 +360,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = 4DZ44AM6DD; + DEVELOPMENT_TEAM = TC87DMJLQP; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -303,6 +375,56 @@ }; name = Profile; }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AE0B7B92F70575B8D7E0D07E /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.simplisticEditor.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 89B67EB44CE7B6631473024E /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.simplisticEditor.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 640959BDD8F10B91D80A66BE /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.simplisticEditor.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; 97C147031CF9000F007C117D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -417,7 +539,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = 4DZ44AM6DD; + DEVELOPMENT_TEAM = TC87DMJLQP; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -440,7 +562,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ENABLE_MODULES = YES; CURRENT_PROJECT_VERSION = "$(FLUTTER_BUILD_NUMBER)"; - DEVELOPMENT_TEAM = 4DZ44AM6DD; + DEVELOPMENT_TEAM = TC87DMJLQP; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; LD_RUNPATH_SEARCH_PATHS = ( @@ -458,6 +580,16 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/simplistic_editor/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/simplistic_editor/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index c87d15a33..e42adcb34 100644 --- a/simplistic_editor/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/simplistic_editor/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -37,6 +37,17 @@ + + + + createState() => _BasicTextFieldState(); @@ -86,22 +109,27 @@ class _BasicTextFieldState extends State { @override Widget build(BuildContext context) { switch (Theme.of(this.context).platform) { + // ignore: todo + // TODO(Renzo-Olivares): Remove use of deprecated members once + // TextSelectionControls.buildToolbar has been deleted. + // See https://github.com/flutter/flutter/pull/124611 and + // https://github.com/flutter/flutter/pull/124262 for more details. case TargetPlatform.iOS: - _textSelectionControls = cupertinoTextSelectionControls; - break; + // ignore: deprecated_member_use + _textSelectionControls = cupertinoTextSelectionHandleControls; case TargetPlatform.macOS: - _textSelectionControls = cupertinoDesktopTextSelectionControls; - break; + // ignore: deprecated_member_use + _textSelectionControls = cupertinoDesktopTextSelectionHandleControls; case TargetPlatform.android: case TargetPlatform.fuchsia: - _textSelectionControls = materialTextSelectionControls; - break; + // ignore: deprecated_member_use + _textSelectionControls = materialTextSelectionHandleControls; case TargetPlatform.linux: - _textSelectionControls = desktopTextSelectionControls; - break; + // ignore: deprecated_member_use + _textSelectionControls = desktopTextSelectionHandleControls; case TargetPlatform.windows: - _textSelectionControls = desktopTextSelectionControls; - break; + // ignore: deprecated_member_use + _textSelectionControls = desktopTextSelectionHandleControls; } return TextFieldTapRegion( @@ -109,8 +137,17 @@ class _BasicTextFieldState extends State { behavior: HitTestBehavior.translucent, onPanStart: (dragStartDetails) => _onDragStart(dragStartDetails), onPanUpdate: (dragUpdateDetails) => _onDragUpdate(dragUpdateDetails), + onSecondaryTapDown: (secondaryTapDownDetails) { + _renderEditable.selectWordsInRange( + from: secondaryTapDownDetails.globalPosition, + cause: SelectionChangedCause.tap); + _renderEditable.handleSecondaryTapDown(secondaryTapDownDetails); + _textInputClient!.hideToolbar(); + _textInputClient!.showToolbar(); + }, onTap: () { _textInputClient!.requestKeyboard(); + _textInputClient!.hideToolbar(); }, onTapDown: (tapDownDetails) { _renderEditable.handleTapDown(tapDownDetails); @@ -124,7 +161,6 @@ class _BasicTextFieldState extends State { from: longPressMoveUpdateDetails.globalPosition, cause: SelectionChangedCause.longPress, ); - break; case TargetPlatform.android: case TargetPlatform.fuchsia: case TargetPlatform.linux: @@ -135,7 +171,6 @@ class _BasicTextFieldState extends State { to: longPressMoveUpdateDetails.globalPosition, cause: SelectionChangedCause.longPress, ); - break; } }, onLongPressEnd: (longPressEndDetails) => @@ -160,6 +195,7 @@ class _BasicTextFieldState extends State { selectionControls: _textSelectionControls, onSelectionChanged: _handleSelectionChanged, showSelectionHandles: _showSelectionHandles, + contextMenuBuilder: widget.contextMenuBuilder, ), ), ), diff --git a/simplistic_editor/lib/basic_text_input_client.dart b/simplistic_editor/lib/basic_text_input_client.dart index 4e24c86d2..c671a4dac 100644 --- a/simplistic_editor/lib/basic_text_input_client.dart +++ b/simplistic_editor/lib/basic_text_input_client.dart @@ -4,6 +4,7 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/gestures.dart'; import 'package:flutter/material.dart'; import 'package:flutter/rendering.dart'; +import 'package:flutter/scheduler.dart'; import 'package:flutter/services.dart'; import 'app_state.dart'; @@ -14,6 +15,19 @@ import 'replacements.dart'; typedef SelectionChangedCallback = void Function( TextSelection selection, SelectionChangedCause? cause); +/// Signature for a widget builder that builds a context menu for the given +/// editable field. +typedef BasicTextFieldContextMenuBuilder = Widget Function( + BuildContext context, + ClipboardStatus clipboardStatus, + VoidCallback? onCopy, + VoidCallback? onCut, + VoidCallback? onPaste, + VoidCallback? onSelectAll, + VoidCallback? onLiveTextInput, + TextSelectionToolbarAnchors anchors, +); + /// A basic text input client. An implementation of [DeltaTextInputClient] meant to /// send/receive information from the framework to the platform's text input plugin /// and vice-versa. @@ -24,6 +38,7 @@ class BasicTextInputClient extends StatefulWidget { required this.style, required this.focusNode, this.selectionControls, + this.contextMenuBuilder, required this.onSelectionChanged, required this.showSelectionHandles, }); @@ -34,6 +49,7 @@ class BasicTextInputClient extends StatefulWidget { final TextSelectionControls? selectionControls; final bool showSelectionHandles; final SelectionChangedCallback onSelectionChanged; + final BasicTextFieldContextMenuBuilder? contextMenuBuilder; @override State createState() => BasicTextInputClientState(); @@ -49,6 +65,8 @@ class BasicTextInputClientState extends State @override void initState() { super.initState(); + _clipboardStatus?.addListener(_onChangedClipboardStatus); + _liveTextInputStatus?.addListener(_onChangedLiveTextInputStatus); widget.focusNode.addListener(_handleFocusChanged); widget.controller.addListener(_didChangeTextEditingValue); } @@ -62,18 +80,14 @@ class BasicTextInputClientState extends State @override void dispose() { widget.controller.removeListener(_didChangeTextEditingValue); + widget.focusNode.removeListener(_handleFocusChanged); + _liveTextInputStatus?.removeListener(_onChangedLiveTextInputStatus); + _liveTextInputStatus?.dispose(); + _clipboardStatus?.removeListener(_onChangedClipboardStatus); + _clipboardStatus?.dispose(); super.dispose(); } - @override - void didChangeInputControl( - TextInputControl? oldControl, TextInputControl? newControl) { - if (_hasFocus && _hasInputConnection) { - oldControl?.hide(); - newControl?.show(); - } - } - /// [DeltaTextInputClient] method implementations. @override void connectionClosed() { @@ -93,6 +107,15 @@ class BasicTextInputClientState extends State @override TextEditingValue? get currentTextEditingValue => _value; + @override + void didChangeInputControl( + TextInputControl? oldControl, TextInputControl? newControl) { + if (_hasFocus && _hasInputConnection) { + oldControl?.hide(); + newControl?.show(); + } + } + @override void insertTextPlaceholder(Size size) { // Will not implement. This method is used for Scribble support. @@ -110,7 +133,14 @@ class BasicTextInputClientState extends State @override void performSelector(String selectorName) { - // Will not implement. + final Intent? intent = intentForMacOSSelector(selectorName); + + if (intent != null) { + final BuildContext? primaryContext = primaryFocus?.context; + if (primaryContext != null) { + Actions.invoke(primaryContext, intent); + } + } } @override @@ -132,6 +162,7 @@ class BasicTextInputClientState extends State return false; } + _liveTextInputStatus?.update(); _selectionOverlay!.showToolbar(); return true; @@ -210,6 +241,10 @@ class BasicTextInputClientState extends State ), ); final TextStyle style = widget.style; + + _updateSizeAndTransform(); + _schedulePeriodicPostFrameCallbacks(); + _textInputConnection! ..setStyle( fontFamily: style.fontFamily, @@ -284,27 +319,45 @@ class BasicTextInputClientState extends State ); } - void _userUpdateTextEditingValueWithDelta( - TextEditingDelta textEditingDelta, SelectionChangedCause cause) { - TextEditingValue value = _value; - - value = textEditingDelta.apply(value); - - if (widget.controller is ReplacementTextEditingController) { - (widget.controller as ReplacementTextEditingController) - .syncReplacementRanges(textEditingDelta); - } - - if (value != _value) { - manager.updateTextEditingDeltaHistory([textEditingDelta]); - } - - userUpdateTextEditingValue(value, cause); + void _onChangedClipboardStatus() { + setState(() { + // Inform the widget that the value of clipboardStatus has changed. + }); } + // These actions have yet to be implemented for this sample. + static final Map> _unsupportedActions = + >{ + DeleteToNextWordBoundaryIntent: DoNothingAction(consumesKey: false), + DeleteToLineBreakIntent: DoNothingAction(consumesKey: false), + ExtendSelectionToNextWordBoundaryIntent: + DoNothingAction(consumesKey: false), + ExtendSelectionToNextParagraphBoundaryOrCaretLocationIntent: + DoNothingAction(consumesKey: false), + ExtendSelectionToLineBreakIntent: DoNothingAction(consumesKey: false), + ExtendSelectionVerticallyToAdjacentLineIntent: + DoNothingAction(consumesKey: false), + ExtendSelectionVerticallyToAdjacentPageIntent: + DoNothingAction(consumesKey: false), + ExtendSelectionToNextParagraphBoundaryIntent: + DoNothingAction(consumesKey: false), + ExtendSelectionToDocumentBoundaryIntent: + DoNothingAction(consumesKey: false), + ExtendSelectionByPageIntent: DoNothingAction(consumesKey: false), + ExpandSelectionToDocumentBoundaryIntent: + DoNothingAction(consumesKey: false), + ExpandSelectionToLineBreakIntent: DoNothingAction(consumesKey: false), + ScrollToDocumentBoundaryIntent: DoNothingAction(consumesKey: false), + RedoTextIntent: DoNothingAction(consumesKey: false), + ReplaceTextIntent: DoNothingAction(consumesKey: false), + UndoTextIntent: DoNothingAction(consumesKey: false), + UpdateSelectionIntent: DoNothingAction(consumesKey: false), + TransposeCharactersIntent: DoNothingAction(consumesKey: false), + }; + /// Keyboard text editing actions. // The Handling of the default text editing shortcuts with deltas - // needs to be in the framework somehow. This should go through some kind of + // needs to be in the framework somehow. This should go through some kind of // generic "replace" method like in EditableText. // EditableText converts intents like DeleteCharacterIntent to a generic // ReplaceTextIntent. I wonder if that could be done at a higher level, so @@ -331,6 +384,7 @@ class BasicTextInputClientState extends State DoNothingAndStopPropagationTextIntent: DoNothingAction( consumesKey: false, ), + ..._unsupportedActions, }; void _delete(bool forward) { @@ -436,6 +490,24 @@ class BasicTextInputClientState extends State ); } + void _userUpdateTextEditingValueWithDelta( + TextEditingDelta textEditingDelta, SelectionChangedCause cause) { + TextEditingValue value = _value; + + value = textEditingDelta.apply(value); + + if (widget.controller is ReplacementTextEditingController) { + (widget.controller as ReplacementTextEditingController) + .syncReplacementRanges(textEditingDelta); + } + + if (value != _value) { + manager.updateTextEditingDeltaHistory([textEditingDelta]); + } + + userUpdateTextEditingValue(value, cause); + } + /// For updates to text editing value. void _didChangeTextEditingValue() { _updateRemoteTextEditingValueIfNeeded(); @@ -443,28 +515,6 @@ class BasicTextInputClientState extends State setState(() {}); } - void _toggleToolbar() { - assert(_selectionOverlay != null); - if (_selectionOverlay!.toolbarIsVisible) { - hideToolbar(false); - } else { - showToolbar(); - } - } - - // When the framework's text editing value changes we should update the text editing - // value contained within the selection overlay or we might observe unexpected behavior. - void _updateOrDisposeOfSelectionOverlayIfNeeded() { - if (_selectionOverlay != null) { - if (_hasFocus) { - _selectionOverlay!.update(_value); - } else { - _selectionOverlay!.dispose(); - _selectionOverlay = null; - } - } - } - // Only update the platform's text input plugin's text editing value when it has changed // to avoid sending duplicate update messages to the engine. void _updateRemoteTextEditingValueIfNeeded() { @@ -476,12 +526,75 @@ class BasicTextInputClientState extends State } } + /// For correctly positioning the candidate menu on macOS. + // Sends the current composing rect to the iOS text input plugin via the text + // input channel. We need to keep sending the information even if no text is + // currently marked, as the information usually lags behind. The text input + // plugin needs to estimate the composing rect based on the latest caret rect, + // when the composing rect info didn't arrive in time. + void _updateComposingRectIfNeeded() { + final TextRange composingRange = _value.composing; + assert(mounted); + Rect? composingRect = + renderEditable.getRectForComposingRange(composingRange); + // Send the caret location instead if there's no marked text yet. + if (composingRect == null) { + assert(!composingRange.isValid || composingRange.isCollapsed); + final int offset = composingRange.isValid ? composingRange.start : 0; + composingRect = + renderEditable.getLocalRectForCaret(TextPosition(offset: offset)); + } + _textInputConnection!.setComposingRect(composingRect); + } + + void _updateCaretRectIfNeeded() { + final TextSelection? selection = renderEditable.selection; + if (selection == null || !selection.isValid || !selection.isCollapsed) { + return; + } + final TextPosition currentTextPosition = + TextPosition(offset: selection.baseOffset); + final Rect caretRect = + renderEditable.getLocalRectForCaret(currentTextPosition); + _textInputConnection!.setCaretRect(caretRect); + } + + void _updateSizeAndTransform() { + final Size size = renderEditable.size; + final Matrix4 transform = renderEditable.getTransformTo(null); + _textInputConnection!.setEditableSizeAndTransform(size, transform); + } + + void _schedulePeriodicPostFrameCallbacks([Duration? duration]) { + if (!_hasInputConnection) { + return; + } + _updateComposingRectIfNeeded(); + _updateCaretRectIfNeeded(); + SchedulerBinding.instance + .addPostFrameCallback(_schedulePeriodicPostFrameCallbacks); + } + /// [TextSelectionDelegate] method implementations. @override void bringIntoView(TextPosition position) { // Not implemented. } + @override + bool get cutEnabled => !textEditingValue.selection.isCollapsed; + + @override + bool get copyEnabled => !textEditingValue.selection.isCollapsed; + + @override + bool get pasteEnabled => + _clipboardStatus == null || + _clipboardStatus!.value == ClipboardStatus.pasteable; + + @override + bool get selectAllEnabled => textEditingValue.text.isNotEmpty; + @override void copySelection(SelectionChangedCause cause) { final TextSelection copyRange = textEditingValue.selection; @@ -509,7 +622,6 @@ class BasicTextInputClientState extends State ), cause, ); - break; } hideToolbar(); } @@ -539,17 +651,6 @@ class BasicTextInputClientState extends State _clipboardStatus?.update(); } - @override - void hideToolbar([bool hideHandles = true]) { - if (hideHandles) { - // Hide the handles and the toolbar. - _selectionOverlay?.hide(); - } else if (_selectionOverlay?.toolbarIsVisible ?? false) { - // Hide only the toolbar but not the handles. - _selectionOverlay?.hideToolbar(); - } - } - @override Future pasteText(SelectionChangedCause cause) async { final TextSelection pasteRange = textEditingValue.selection; @@ -589,6 +690,18 @@ class BasicTextInputClientState extends State ), cause, ); + if (cause == SelectionChangedCause.toolbar) { + switch (defaultTargetPlatform) { + case TargetPlatform.android: + case TargetPlatform.iOS: + case TargetPlatform.fuchsia: + break; + case TargetPlatform.macOS: + case TargetPlatform.linux: + case TargetPlatform.windows: + hideToolbar(); + } + } } @override @@ -639,6 +752,17 @@ class BasicTextInputClientState extends State } } + @override + void hideToolbar([bool hideHandles = true]) { + if (hideHandles) { + // Hide the handles and the toolbar. + _selectionOverlay?.hide(); + } else if (_selectionOverlay?.toolbarIsVisible ?? false) { + // Hide only the toolbar but not the handles. + _selectionOverlay?.hideToolbar(); + } + } + /// For TextSelection. final LayerLink _startHandleLayerLink = LayerLink(); final LayerLink _endHandleLayerLink = LayerLink(); @@ -651,14 +775,14 @@ class BasicTextInputClientState extends State void _handleSelectionChanged( TextSelection selection, SelectionChangedCause? cause) { // We return early if the selection is not valid. This can happen when the - // text of [EditableText] is updated at the same time as the selection is + // text of the editable is updated at the same time as the selection is // changed by a gesture event. if (!widget.controller.isSelectionWithinTextBounds(selection)) return; widget.controller.selection = selection; // This will show the keyboard for all selection changes on the - // EditableText except for those triggered by a keyboard input. + // editable except for those triggered by a keyboard input. // Typically BasicTextInputClient shouldn't take user keyboard input if // it's not focused already. switch (cause) { @@ -671,35 +795,17 @@ class BasicTextInputClientState extends State case SelectionChangedCause.tap: case SelectionChangedCause.toolbar: requestKeyboard(); - break; case SelectionChangedCause.keyboard: if (_hasFocus) { requestKeyboard(); } - break; } - if (widget.selectionControls == null) { + if (widget.selectionControls == null && widget.contextMenuBuilder == null) { _selectionOverlay?.dispose(); _selectionOverlay = null; } else { if (_selectionOverlay == null) { - _selectionOverlay = TextSelectionOverlay( - clipboardStatus: _clipboardStatus, - context: context, - value: _value, - debugRequiredFor: widget, - toolbarLayerLink: _toolbarLayerLink, - startHandleLayerLink: _startHandleLayerLink, - endHandleLayerLink: _endHandleLayerLink, - renderObject: renderEditable, - selectionControls: widget.selectionControls, - selectionDelegate: this, - dragStartBehavior: DragStartBehavior.start, - onSelectionHandleTapped: () { - _toggleToolbar(); - }, - magnifierConfiguration: TextMagnifierConfiguration.disabled, - ); + _selectionOverlay = _createSelectionOverlay(); } else { _selectionOverlay!.update(_value); } @@ -720,82 +826,222 @@ class BasicTextInputClientState extends State } } - static final Map _defaultWebShortcuts = - { - // Activation - const SingleActivator(LogicalKeyboardKey.space): - const DoNothingAndStopPropagationIntent(), + TextSelectionOverlay _createSelectionOverlay() { + final TextSelectionOverlay selectionOverlay = TextSelectionOverlay( + clipboardStatus: _clipboardStatus, + context: context, + value: _value, + debugRequiredFor: widget, + toolbarLayerLink: _toolbarLayerLink, + startHandleLayerLink: _startHandleLayerLink, + endHandleLayerLink: _endHandleLayerLink, + renderObject: renderEditable, + selectionControls: widget.selectionControls, + selectionDelegate: this, + dragStartBehavior: DragStartBehavior.start, + onSelectionHandleTapped: () { + _toggleToolbar(); + }, + contextMenuBuilder: widget.contextMenuBuilder == null || kIsWeb + ? null + : (context) { + return widget.contextMenuBuilder!( + context, + _clipboardStatus!.value, + copyEnabled + ? () => copySelection(SelectionChangedCause.toolbar) + : null, + cutEnabled + ? () => cutSelection(SelectionChangedCause.toolbar) + : null, + pasteEnabled + ? () => pasteText(SelectionChangedCause.toolbar) + : null, + selectAllEnabled + ? () => selectAll(SelectionChangedCause.toolbar) + : null, + liveTextInputEnabled + ? () => _startLiveTextInput(SelectionChangedCause.toolbar) + : null, + _contextMenuAnchors, + ); + }, + magnifierConfiguration: TextMagnifierConfiguration.disabled, + ); - // Scrolling - const SingleActivator(LogicalKeyboardKey.arrowUp): - const DoNothingAndStopPropagationIntent(), - const SingleActivator(LogicalKeyboardKey.arrowDown): - const DoNothingAndStopPropagationIntent(), - const SingleActivator(LogicalKeyboardKey.arrowLeft): - const DoNothingAndStopPropagationIntent(), - const SingleActivator(LogicalKeyboardKey.arrowRight): - const DoNothingAndStopPropagationIntent(), - }; + return selectionOverlay; + } + + void _toggleToolbar() { + final TextSelectionOverlay selectionOverlay = + _selectionOverlay ??= _createSelectionOverlay(); + + if (selectionOverlay.toolbarIsVisible) { + hideToolbar(false); + } else { + showToolbar(); + } + } + + // When the framework's text editing value changes we should update the text editing + // value contained within the selection overlay or we might observe unexpected behavior. + void _updateOrDisposeOfSelectionOverlayIfNeeded() { + if (_selectionOverlay != null) { + if (_hasFocus) { + _selectionOverlay!.update(_value); + } else { + _selectionOverlay!.dispose(); + _selectionOverlay = null; + } + } + } + + /// Gets the line heights at the start and end of the selection for the given + /// editable. + _GlyphHeights _getGlyphHeights() { + final TextSelection selection = textEditingValue.selection; + + // Only calculate handle rects if the text in the previous frame + // is the same as the text in the current frame. This is done because + // widget.renderObject contains the renderEditable from the previous frame. + // If the text changed between the current and previous frames then + // widget.renderObject.getRectForComposingRange might fail. In cases where + // the current frame is different from the previous we fall back to + // renderObject.preferredLineHeight. + final InlineSpan span = renderEditable.text!; + final String prevText = span.toPlainText(); + final String currText = textEditingValue.text; + if (prevText != currText || !selection.isValid || selection.isCollapsed) { + return _GlyphHeights( + start: renderEditable.preferredLineHeight, + end: renderEditable.preferredLineHeight, + ); + } + + final String selectedGraphemes = selection.textInside(currText); + final int firstSelectedGraphemeExtent = + selectedGraphemes.characters.first.length; + final Rect? startCharacterRect = + renderEditable.getRectForComposingRange(TextRange( + start: selection.start, + end: selection.start + firstSelectedGraphemeExtent, + )); + final int lastSelectedGraphemeExtent = + selectedGraphemes.characters.last.length; + final Rect? endCharacterRect = + renderEditable.getRectForComposingRange(TextRange( + start: selection.end - lastSelectedGraphemeExtent, + end: selection.end, + )); + return _GlyphHeights( + start: startCharacterRect?.height ?? renderEditable.preferredLineHeight, + end: endCharacterRect?.height ?? renderEditable.preferredLineHeight, + ); + } + + /// Returns the anchor points for the default context menu. + TextSelectionToolbarAnchors get _contextMenuAnchors { + if (renderEditable.lastSecondaryTapDownPosition != null) { + return TextSelectionToolbarAnchors( + primaryAnchor: renderEditable.lastSecondaryTapDownPosition!, + ); + } + + final _GlyphHeights glyphHeights = _getGlyphHeights(); + final TextSelection selection = textEditingValue.selection; + final List points = + renderEditable.getEndpointsForSelection(selection); + return TextSelectionToolbarAnchors.fromSelection( + renderBox: renderEditable, + startGlyphHeight: glyphHeights.start, + endGlyphHeight: glyphHeights.end, + selectionEndpoints: points, + ); + } + + /// For OCR Support. + /// Detects whether the Live Text input is enabled. + final LiveTextInputStatusNotifier? _liveTextInputStatus = + kIsWeb ? null : LiveTextInputStatusNotifier(); + + @override + bool get liveTextInputEnabled { + return _liveTextInputStatus?.value == LiveTextInputStatus.enabled && + textEditingValue.selection.isCollapsed; + } + + void _onChangedLiveTextInputStatus() { + setState(() { + // Inform the widget that the value of liveTextInputStatus has changed. + }); + } + + void _startLiveTextInput(SelectionChangedCause cause) { + if (!liveTextInputEnabled) { + return; + } + if (_hasInputConnection) { + LiveText.startLiveTextInput(); + } + if (cause == SelectionChangedCause.toolbar) { + hideToolbar(); + } + } @override Widget build(BuildContext context) { - return Shortcuts( - shortcuts: kIsWeb ? _defaultWebShortcuts : {}, - child: Actions( - actions: _actions, - child: Focus( - focusNode: widget.focusNode, - child: Scrollable( - viewportBuilder: (context, position) { - return CompositedTransformTarget( - link: _toolbarLayerLink, - child: _Editable( - key: _textKey, - startHandleLayerLink: _startHandleLayerLink, - endHandleLayerLink: _endHandleLayerLink, - inlineSpan: _buildTextSpan(), - value: _value, // We pass value.selection to RenderEditable. - cursorColor: Colors.blue, - backgroundCursorColor: Colors.grey[100], - showCursor: ValueNotifier(_hasFocus), - forceLine: - true, // Whether text field will take full line regardless of width. - readOnly: false, // editable text-field. - hasFocus: _hasFocus, - maxLines: null, // multi-line text-field. - minLines: null, - expands: false, // expands to height of parent. - strutStyle: null, - selectionColor: Colors.blue.withOpacity(0.40), - textScaleFactor: MediaQuery.textScaleFactorOf(context), - textAlign: TextAlign.left, - textDirection: _textDirection, - locale: Localizations.maybeLocaleOf(context), - textHeightBehavior: - DefaultTextHeightBehavior.maybeOf(context), - textWidthBasis: TextWidthBasis.parent, - obscuringCharacter: '•', - obscureText: - false, // This is a non-private text field that does not require obfuscation. - offset: position, - onCaretChanged: null, - rendererIgnoresPointer: true, - cursorWidth: 2.0, - cursorHeight: null, - cursorRadius: const Radius.circular(2.0), - cursorOffset: Offset.zero, - paintCursorAboveText: false, - enableInteractiveSelection: - true, // make true to enable selection on mobile. - textSelectionDelegate: this, - devicePixelRatio: MediaQuery.of(context).devicePixelRatio, - promptRectRange: null, - promptRectColor: null, - clipBehavior: Clip.hardEdge, - ), - ); - }, - ), + return Actions( + actions: _actions, + child: Focus( + focusNode: widget.focusNode, + child: Scrollable( + viewportBuilder: (context, position) { + return CompositedTransformTarget( + link: _toolbarLayerLink, + child: _Editable( + key: _textKey, + startHandleLayerLink: _startHandleLayerLink, + endHandleLayerLink: _endHandleLayerLink, + inlineSpan: _buildTextSpan(), + value: _value, // We pass value.selection to RenderEditable. + cursorColor: Colors.blue, + backgroundCursorColor: Colors.grey[100], + showCursor: ValueNotifier(_hasFocus), + forceLine: + true, // Whether text field will take full line regardless of width. + readOnly: false, // editable text-field. + hasFocus: _hasFocus, + maxLines: null, // multi-line text-field. + minLines: null, + expands: false, // expands to height of parent. + strutStyle: null, + selectionColor: Colors.blue.withOpacity(0.40), + textScaleFactor: MediaQuery.textScaleFactorOf(context), + textAlign: TextAlign.left, + textDirection: _textDirection, + locale: Localizations.maybeLocaleOf(context), + textHeightBehavior: DefaultTextHeightBehavior.maybeOf(context), + textWidthBasis: TextWidthBasis.parent, + obscuringCharacter: '•', + obscureText: + false, // This is a non-private text field that does not require obfuscation. + offset: position, + rendererIgnoresPointer: true, + cursorWidth: 2.0, + cursorHeight: null, + cursorRadius: const Radius.circular(2.0), + cursorOffset: Offset.zero, + paintCursorAboveText: false, + enableInteractiveSelection: + true, // make true to enable selection on mobile. + textSelectionDelegate: this, + devicePixelRatio: MediaQuery.of(context).devicePixelRatio, + promptRectRange: null, + promptRectColor: null, + clipBehavior: Clip.hardEdge, + ), + ); + }, ), ), ); @@ -829,7 +1075,6 @@ class _Editable extends MultiChildRenderObjectWidget { required this.obscuringCharacter, required this.obscureText, required this.offset, - this.onCaretChanged, this.rendererIgnoresPointer = false, required this.cursorWidth, this.cursorHeight, @@ -881,7 +1126,6 @@ class _Editable extends MultiChildRenderObjectWidget { final TextHeightBehavior? textHeightBehavior; final TextWidthBasis textWidthBasis; final ViewportOffset offset; - final CaretChangedHandler? onCaretChanged; final bool rendererIgnoresPointer; final double cursorWidth; final double? cursorHeight; @@ -918,7 +1162,6 @@ class _Editable extends MultiChildRenderObjectWidget { locale: locale ?? Localizations.maybeLocaleOf(context), selection: value.selection, offset: offset, - onCaretChanged: onCaretChanged, ignorePointer: rendererIgnoresPointer, obscuringCharacter: obscuringCharacter, obscureText: obscureText, @@ -960,7 +1203,6 @@ class _Editable extends MultiChildRenderObjectWidget { ..locale = locale ?? Localizations.maybeLocaleOf(context) ..selection = value.selection ..offset = offset - ..onCaretChanged = onCaretChanged ..ignorePointer = rendererIgnoresPointer ..textHeightBehavior = textHeightBehavior ..textWidthBasis = textWidthBasis @@ -979,3 +1221,18 @@ class _Editable extends MultiChildRenderObjectWidget { ..setPromptRectRange(promptRectRange); } } + +/// The start and end glyph heights of some range of text. +@immutable +class _GlyphHeights { + const _GlyphHeights({ + required this.start, + required this.end, + }); + + /// The glyph height of the first line. + final double start; + + /// The glyph height of the last line. + final double end; +} diff --git a/simplistic_editor/lib/text_editing_delta_history_view.dart b/simplistic_editor/lib/text_editing_delta_history_view.dart index 1cac8eb41..a9256bb82 100644 --- a/simplistic_editor/lib/text_editing_delta_history_view.dart +++ b/simplistic_editor/lib/text_editing_delta_history_view.dart @@ -164,16 +164,12 @@ class TextEditingDeltaView extends StatelessWidget { switch (deltaType) { case 'Insertion': rowColor = Colors.greenAccent.shade100; - break; case 'Deletion': rowColor = Colors.redAccent.shade100; - break; case 'Replacement': rowColor = Colors.yellowAccent.shade100; - break; case 'NonTextUpdate': rowColor = Colors.blueAccent.shade100; - break; default: rowColor = Colors.white; } diff --git a/simplistic_editor/linux/CMakeLists.txt b/simplistic_editor/linux/CMakeLists.txt index 03467b768..cb8fec3aa 100644 --- a/simplistic_editor/linux/CMakeLists.txt +++ b/simplistic_editor/linux/CMakeLists.txt @@ -86,6 +86,7 @@ set_target_properties(${BINARY_NAME} RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" ) + # Generated plugin build rules, which manage building the plugins and adding # them to the application. include(flutter/generated_plugins.cmake) diff --git a/simplistic_editor/macos/Runner.xcodeproj/project.pbxproj b/simplistic_editor/macos/Runner.xcodeproj/project.pbxproj index 031b7329b..b78a40714 100644 --- a/simplistic_editor/macos/Runner.xcodeproj/project.pbxproj +++ b/simplistic_editor/macos/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 51; + objectVersion = 54; objects = { /* Begin PBXAggregateTarget section */ @@ -21,6 +21,7 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; @@ -29,6 +30,13 @@ /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 33CC10E52044A3C60003C045 /* Project object */; @@ -52,6 +60,8 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* simplistic_editor.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "simplistic_editor.app"; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -71,6 +81,13 @@ /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 33CC10EA2044A3C60003C045 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; @@ -81,6 +98,14 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; 33BA886A226E78AF003329D5 /* Configs */ = { isa = PBXGroup; children = ( @@ -97,6 +122,7 @@ children = ( 33FAB671232836740065AC1E /* Runner */, 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, ); @@ -106,6 +132,7 @@ isa = PBXGroup; children = ( 33CC10ED2044A3C60003C045 /* simplistic_editor.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, ); name = Products; sourceTree = ""; @@ -155,6 +182,24 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; 33CC10EC2044A3C60003C045 /* Runner */ = { isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; @@ -185,6 +230,10 @@ LastUpgradeCheck = 1300; ORGANIZATIONNAME = ""; TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; 33CC10EC2044A3C60003C045 = { CreatedOnToolsVersion = 9.2; LastSwiftMigration = 1100; @@ -215,12 +264,20 @@ projectRoot = ""; targets = ( 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, 33CC111A2044C6BA0003C045 /* Flutter Assemble */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 33CC10EB2044A3C60003C045 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -235,6 +292,7 @@ /* Begin PBXShellScriptBuildPhase section */ 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -273,6 +331,14 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 33CC10E92044A3C60003C045 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -286,6 +352,11 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; @@ -306,6 +377,48 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.simplisticEditor.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/simplistic_editor.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/simplistic_editor"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.simplisticEditor.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/simplistic_editor.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/simplistic_editor"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = com.example.simplisticEditor.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/simplistic_editor.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/simplistic_editor"; + }; + name = Profile; + }; 338D0CE9231458BD00FA5F75 /* Profile */ = { isa = XCBuildConfiguration; baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; @@ -344,7 +457,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; @@ -423,7 +536,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; @@ -470,7 +583,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; @@ -536,6 +649,16 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/simplistic_editor/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/simplistic_editor/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index cb47a7832..c25142579 100644 --- a/simplistic_editor/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/simplistic_editor/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -37,6 +37,17 @@ + + + + =2.17.0-0 <3.0.0' + sdk: ^3.1.0 # Dependencies specify other packages that your package needs in order to work. # To automatically upgrade your package dependencies to the latest versions @@ -36,16 +36,11 @@ dependencies: cupertino_icons: ^1.0.2 dev_dependencies: + analysis_defaults: + path: ../analysis_defaults flutter_test: sdk: flutter - # The "flutter_lints" package below contains a set of recommended lints to - # encourage good coding practices. The lint set provided by the package is - # activated in the `analysis_options.yaml` file located at the root of your - # package. See that file for information about deactivating specific lint - # rules and activating additional ones. - flutter_lints: ^2.0.0 - # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec diff --git a/simplistic_editor/web/index.html b/simplistic_editor/web/index.html index c0d6c8111..a7a6016ec 100644 --- a/simplistic_editor/web/index.html +++ b/simplistic_editor/web/index.html @@ -46,11 +46,12 @@ _flutter.loader.loadEntrypoint({ serviceWorker: { serviceWorkerVersion: serviceWorkerVersion, + }, + onEntrypointLoaded: function(engineInitializer) { + engineInitializer.initializeEngine().then(function(appRunner) { + appRunner.runApp(); + }); } - }).then(function(engineInitializer) { - return engineInitializer.initializeEngine(); - }).then(function(appRunner) { - return appRunner.runApp(); }); }); diff --git a/simplistic_editor/windows/CMakeLists.txt b/simplistic_editor/windows/CMakeLists.txt index 33b9d1ca2..b5ec70e33 100644 --- a/simplistic_editor/windows/CMakeLists.txt +++ b/simplistic_editor/windows/CMakeLists.txt @@ -52,6 +52,7 @@ add_subdirectory(${FLUTTER_MANAGED_DIR}) # Application build; see runner/CMakeLists.txt. add_subdirectory("runner") + # Generated plugin build rules, which manage building the plugins and adding # them to the application. include(flutter/generated_plugins.cmake) diff --git a/simplistic_editor/windows/runner/CMakeLists.txt b/simplistic_editor/windows/runner/CMakeLists.txt index b9e550fba..394917c05 100644 --- a/simplistic_editor/windows/runner/CMakeLists.txt +++ b/simplistic_editor/windows/runner/CMakeLists.txt @@ -20,12 +20,20 @@ add_executable(${BINARY_NAME} WIN32 # that need different build settings. apply_standard_settings(${BINARY_NAME}) +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + # Disable Windows macros that collide with C++ standard library functions. target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") # Add dependency libraries and include directories. Add any application-specific # dependencies here. target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") # Run the Flutter tool portions of the build. This must not be removed. diff --git a/simplistic_editor/windows/runner/Runner.rc b/simplistic_editor/windows/runner/Runner.rc index 5173cb939..de6b9dde9 100644 --- a/simplistic_editor/windows/runner/Runner.rc +++ b/simplistic_editor/windows/runner/Runner.rc @@ -60,14 +60,14 @@ IDI_APP_ICON ICON "resources\\app_icon.ico" // Version // -#ifdef FLUTTER_BUILD_NUMBER -#define VERSION_AS_NUMBER FLUTTER_BUILD_NUMBER +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD #else -#define VERSION_AS_NUMBER 1,0,0 +#define VERSION_AS_NUMBER 1,0,0,0 #endif -#ifdef FLUTTER_BUILD_NAME -#define VERSION_AS_STRING #FLUTTER_BUILD_NAME +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION #else #define VERSION_AS_STRING "1.0.0" #endif @@ -93,7 +93,7 @@ BEGIN VALUE "FileDescription", "simplistic_editor" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "simplistic_editor" "\0" - VALUE "LegalCopyright", "Copyright (C) 2022 com.example. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2023 com.example. All rights reserved." "\0" VALUE "OriginalFilename", "simplistic_editor.exe" "\0" VALUE "ProductName", "simplistic_editor" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/simplistic_editor/windows/runner/flutter_window.cpp b/simplistic_editor/windows/runner/flutter_window.cpp index b43b9095e..b25e363ef 100644 --- a/simplistic_editor/windows/runner/flutter_window.cpp +++ b/simplistic_editor/windows/runner/flutter_window.cpp @@ -26,6 +26,11 @@ bool FlutterWindow::OnCreate() { } RegisterPlugins(flutter_controller_->engine()); SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + return true; } diff --git a/simplistic_editor/windows/runner/main.cpp b/simplistic_editor/windows/runner/main.cpp index f926970c9..ec269d173 100644 --- a/simplistic_editor/windows/runner/main.cpp +++ b/simplistic_editor/windows/runner/main.cpp @@ -27,7 +27,7 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, FlutterWindow window(project); Win32Window::Point origin(10, 10); Win32Window::Size size(1280, 720); - if (!window.CreateAndShow(L"simplistic_editor", origin, size)) { + if (!window.Create(L"simplistic_editor", origin, size)) { return EXIT_FAILURE; } window.SetQuitOnClose(true); diff --git a/simplistic_editor/windows/runner/runner.exe.manifest b/simplistic_editor/windows/runner/runner.exe.manifest index c977c4a42..a42ea7687 100644 --- a/simplistic_editor/windows/runner/runner.exe.manifest +++ b/simplistic_editor/windows/runner/runner.exe.manifest @@ -7,7 +7,7 @@ - + diff --git a/simplistic_editor/windows/runner/utils.cpp b/simplistic_editor/windows/runner/utils.cpp index f5bf9fa0f..b2b08734d 100644 --- a/simplistic_editor/windows/runner/utils.cpp +++ b/simplistic_editor/windows/runner/utils.cpp @@ -47,16 +47,17 @@ std::string Utf8FromUtf16(const wchar_t* utf16_string) { } int target_length = ::WideCharToMultiByte( CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, nullptr, 0, nullptr, nullptr); + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); std::string utf8_string; - if (target_length == 0 || target_length > utf8_string.max_size()) { + if (target_length <= 0 || target_length > utf8_string.max_size()) { return utf8_string; } utf8_string.resize(target_length); int converted_length = ::WideCharToMultiByte( CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, utf8_string.data(), - target_length, nullptr, nullptr); + input_length, utf8_string.data(), target_length, nullptr, nullptr); if (converted_length == 0) { return std::string(); } diff --git a/simplistic_editor/windows/runner/win32_window.cpp b/simplistic_editor/windows/runner/win32_window.cpp index c10f08dc7..60608d0fe 100644 --- a/simplistic_editor/windows/runner/win32_window.cpp +++ b/simplistic_editor/windows/runner/win32_window.cpp @@ -1,13 +1,31 @@ #include "win32_window.h" +#include #include #include "resource.h" namespace { +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + // The number of Win32Window objects that currently exist. static int g_active_window_count = 0; @@ -31,8 +49,8 @@ void EnableFullDpiSupportIfAvailable(HWND hwnd) { GetProcAddress(user32_module, "EnableNonClientDpiScaling")); if (enable_non_client_dpi_scaling != nullptr) { enable_non_client_dpi_scaling(hwnd); - FreeLibrary(user32_module); } + FreeLibrary(user32_module); } } // namespace @@ -42,7 +60,7 @@ class WindowClassRegistrar { public: ~WindowClassRegistrar() = default; - // Returns the singleton registar instance. + // Returns the singleton registrar instance. static WindowClassRegistrar* GetInstance() { if (!instance_) { instance_ = new WindowClassRegistrar(); @@ -102,9 +120,9 @@ Win32Window::~Win32Window() { Destroy(); } -bool Win32Window::CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size) { +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { Destroy(); const wchar_t* window_class = @@ -117,7 +135,7 @@ bool Win32Window::CreateAndShow(const std::wstring& title, double scale_factor = dpi / 96.0; HWND window = CreateWindow( - window_class, title.c_str(), WS_OVERLAPPEDWINDOW | WS_VISIBLE, + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), Scale(size.width, scale_factor), Scale(size.height, scale_factor), nullptr, nullptr, GetModuleHandle(nullptr), this); @@ -126,9 +144,15 @@ bool Win32Window::CreateAndShow(const std::wstring& title, return false; } + UpdateTheme(window); + return OnCreate(); } +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + // static LRESULT CALLBACK Win32Window::WndProc(HWND const window, UINT const message, @@ -188,6 +212,10 @@ Win32Window::MessageHandler(HWND hwnd, SetFocus(child_content_); } return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; } return DefWindowProc(window_handle_, message, wparam, lparam); @@ -243,3 +271,18 @@ bool Win32Window::OnCreate() { void Win32Window::OnDestroy() { // No-op; provided for subclasses. } + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/simplistic_editor/windows/runner/win32_window.h b/simplistic_editor/windows/runner/win32_window.h index 17ba43112..e901dde68 100644 --- a/simplistic_editor/windows/runner/win32_window.h +++ b/simplistic_editor/windows/runner/win32_window.h @@ -28,15 +28,16 @@ class Win32Window { Win32Window(); virtual ~Win32Window(); - // Creates and shows a win32 window with |title| and position and size using + // Creates a win32 window with |title| that is positioned and sized using // |origin| and |size|. New windows are created on the default monitor. Window // sizes are specified to the OS in physical pixels, hence to ensure a - // consistent size to will treat the width height passed in to this function - // as logical pixels and scale to appropriate for the default monitor. Returns - // true if the window was created successfully. - bool CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size); + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); // Release OS resources associated with window. void Destroy(); @@ -76,7 +77,7 @@ class Win32Window { // OS callback called by message pump. Handles the WM_NCCREATE message which // is passed when the non-client area is being created and enables automatic // non-client DPI scaling so that the non-client area automatically - // responsponds to changes in DPI. All other messages are handled by + // responds to changes in DPI. All other messages are handled by // MessageHandler. static LRESULT CALLBACK WndProc(HWND const window, UINT const message, @@ -86,6 +87,9 @@ class Win32Window { // Retrieves a class instance pointer for |window| static Win32Window* GetThisFromHandle(HWND const window) noexcept; + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + bool quit_on_close_ = false; // window handle for top level window. diff --git a/testing_app/.metadata b/testing_app/.metadata index 7c361ddcc..a7cbe7932 100644 --- a/testing_app/.metadata +++ b/testing_app/.metadata @@ -1,10 +1,45 @@ # This file tracks properties of this Flutter project. # Used by Flutter tool to assess capabilities and perform upgrades etc. # -# This file should be version controlled and should not be manually edited. +# This file should be version controlled. version: - revision: b041144f833e05cf463b8887fa12efdec9493488 - channel: stable + revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + channel: beta project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + - platform: android + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + - platform: ios + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + - platform: linux + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + - platform: macos + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + - platform: web + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + - platform: windows + create_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + base_revision: 0df8557c56a182d31fa024eeb08c428ae52edf7f + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/testing_app/analysis_options.yaml b/testing_app/analysis_options.yaml index 5e2133eb6..13d6fe105 100644 --- a/testing_app/analysis_options.yaml +++ b/testing_app/analysis_options.yaml @@ -1 +1 @@ -include: ../analysis_options.yaml +include: package:analysis_defaults/flutter.yaml diff --git a/testing_app/android/app/build.gradle b/testing_app/android/app/build.gradle index 6f5a41255..a453bc119 100644 --- a/testing_app/android/app/build.gradle +++ b/testing_app/android/app/build.gradle @@ -27,6 +27,7 @@ apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle" android { compileSdkVersion flutter.compileSdkVersion + ndkVersion flutter.ndkVersion compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 @@ -44,6 +45,8 @@ android { defaultConfig { // TODO: Specify your own unique Application ID (https://developer.android.com/studio/build/application-id.html). applicationId "dev.flutter.testing_app" + // You can update the following values to match your application needs. + // For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration. minSdkVersion flutter.minSdkVersion targetSdkVersion flutter.targetSdkVersion versionCode flutterVersionCode.toInteger() diff --git a/testing_app/android/app/src/androidTest/java/dev/flutter/testing_app/MainActivityTest.java b/testing_app/android/app/src/androidTest/java/dev/flutter/testing_app/MainActivityTest.java deleted file mode 100644 index bd19a0a12..000000000 --- a/testing_app/android/app/src/androidTest/java/dev/flutter/testing_app/MainActivityTest.java +++ /dev/null @@ -1,12 +0,0 @@ -package dev.flutter.testing_app; - -import androidx.test.rule.ActivityTestRule; -import dev.flutter.plugins.e2e.FlutterTestRunner; -import org.junit.Rule; -import org.junit.runner.RunWith; - -@RunWith(FlutterTestRunner.class) -public class MainActivityTest { - @Rule - public ActivityTestRule rule = new ActivityTestRule<>(MainActivity.class, true, false); -} diff --git a/testing_app/android/app/src/debug/AndroidManifest.xml b/testing_app/android/app/src/debug/AndroidManifest.xml index 9cd19788a..fcc8f1994 100644 --- a/testing_app/android/app/src/debug/AndroidManifest.xml +++ b/testing_app/android/app/src/debug/AndroidManifest.xml @@ -1,6 +1,7 @@ - diff --git a/testing_app/android/app/src/main/AndroidManifest.xml b/testing_app/android/app/src/main/AndroidManifest.xml index 0df7c44df..0ebc35849 100644 --- a/testing_app/android/app/src/main/AndroidManifest.xml +++ b/testing_app/android/app/src/main/AndroidManifest.xml @@ -1,6 +1,6 @@ - diff --git a/testing_app/android/app/src/main/res/values-night/styles.xml b/testing_app/android/app/src/main/res/values-night/styles.xml index 3db14bb53..06952be74 100644 --- a/testing_app/android/app/src/main/res/values-night/styles.xml +++ b/testing_app/android/app/src/main/res/values-night/styles.xml @@ -3,7 +3,7 @@ diff --git a/testing_app/android/build.gradle b/testing_app/android/build.gradle index 4256f9173..e50c3a02b 100644 --- a/testing_app/android/build.gradle +++ b/testing_app/android/build.gradle @@ -1,12 +1,12 @@ buildscript { - ext.kotlin_version = '1.6.10' + ext.kotlin_version = '1.7.10' repositories { google() mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:4.1.0' + classpath 'com.android.tools.build:gradle:7.3.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/testing_app/android/gradle/wrapper/gradle-wrapper.properties b/testing_app/android/gradle/wrapper/gradle-wrapper.properties index bc6a58afd..3c472b99c 100644 --- a/testing_app/android/gradle/wrapper/gradle-wrapper.properties +++ b/testing_app/android/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,5 @@ -#Fri Jun 23 08:50:38 CEST 2017 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-all.zip diff --git a/testing_app/android/settings.gradle b/testing_app/android/settings.gradle index d3b6a4013..44e62bcf0 100644 --- a/testing_app/android/settings.gradle +++ b/testing_app/android/settings.gradle @@ -1,7 +1,3 @@ -// Copyright 2014 The Flutter Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - include ':app' def localPropertiesFile = new File(rootProject.projectDir, "local.properties") diff --git a/testing_app/ios/Flutter/AppFrameworkInfo.plist b/testing_app/ios/Flutter/AppFrameworkInfo.plist index 8d4492f97..9625e105d 100644 --- a/testing_app/ios/Flutter/AppFrameworkInfo.plist +++ b/testing_app/ios/Flutter/AppFrameworkInfo.plist @@ -21,6 +21,6 @@ CFBundleVersion 1.0 MinimumOSVersion - 9.0 + 11.0 diff --git a/testing_app/ios/Podfile b/testing_app/ios/Podfile index 1e8c3c90a..fdcc671eb 100644 --- a/testing_app/ios/Podfile +++ b/testing_app/ios/Podfile @@ -1,5 +1,5 @@ # Uncomment this line to define a global platform for your project -# platform :ios, '9.0' +# platform :ios, '11.0' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' @@ -32,6 +32,9 @@ target 'Runner' do use_modular_headers! flutter_install_all_ios_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end end post_install do |installer| diff --git a/testing_app/ios/Runner.xcodeproj/project.pbxproj b/testing_app/ios/Runner.xcodeproj/project.pbxproj index c9bed27be..05fdec622 100644 --- a/testing_app/ios/Runner.xcodeproj/project.pbxproj +++ b/testing_app/ios/Runner.xcodeproj/project.pbxproj @@ -3,19 +3,29 @@ archiveVersion = 1; classes = { }; - objectVersion = 50; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ 1498D2341E8E89220040F4C2 /* GeneratedPluginRegistrant.m in Sources */ = {isa = PBXBuildFile; fileRef = 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */; }; - 1D7251F7C7786B5C97B58455 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = EB75866D049DD85D515402B1 /* Pods_Runner.framework */; }; 3B3967161E833CAA004F5970 /* AppFrameworkInfo.plist in Resources */ = {isa = PBXBuildFile; fileRef = 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */; }; 74858FAF1ED2DC5600515810 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 74858FAE1ED2DC5600515810 /* AppDelegate.swift */; }; 97C146FC1CF9000F007C117D /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FA1CF9000F007C117D /* Main.storyboard */; }; 97C146FE1CF9000F007C117D /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FD1CF9000F007C117D /* Assets.xcassets */; }; 97C147011CF9000F007C117D /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 97C146FF1CF9000F007C117D /* LaunchScreen.storyboard */; }; + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C807B294A618700263BE5 /* RunnerTests.swift */; }; /* End PBXBuildFile section */ +/* Begin PBXContainerItemProxy section */ + 331C8085294A63A400263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 97C146E61CF9000F007C117D /* Project object */; + proxyType = 1; + remoteGlobalIDString = 97C146ED1CF9000F007C117D; + remoteInfo = Runner; + }; +/* End PBXContainerItemProxy section */ + /* Begin PBXCopyFilesBuildPhase section */ 9705A1C41CF9048500538489 /* Embed Frameworks */ = { isa = PBXCopyFilesBuildPhase; @@ -33,11 +43,9 @@ 1498D2321E8E86230040F4C2 /* GeneratedPluginRegistrant.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = GeneratedPluginRegistrant.h; sourceTree = ""; }; 1498D2331E8E89220040F4C2 /* GeneratedPluginRegistrant.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = GeneratedPluginRegistrant.m; sourceTree = ""; }; 3B3967151E833CAA004F5970 /* AppFrameworkInfo.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = AppFrameworkInfo.plist; path = Flutter/AppFrameworkInfo.plist; sourceTree = ""; }; - 4E099A224B9D3AF6B8130DFE /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; 74858FAD1ED2DC5600515810 /* Runner-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Runner-Bridging-Header.h"; sourceTree = ""; }; 74858FAE1ED2DC5600515810 /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Release.xcconfig; path = Flutter/Release.xcconfig; sourceTree = ""; }; - 868C9C969644094983841C3C /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Debug.xcconfig; path = Flutter/Debug.xcconfig; sourceTree = ""; }; 9740EEB31CF90195004384FC /* Generated.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = Generated.xcconfig; path = Flutter/Generated.xcconfig; sourceTree = ""; }; 97C146EE1CF9000F007C117D /* Runner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Runner.app; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -45,8 +53,8 @@ 97C146FD1CF9000F007C117D /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 97C147001CF9000F007C117D /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; }; 97C147021CF9000F007C117D /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - B2FB5E0F6915B87718E65180 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; - EB75866D049DD85D515402B1 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C807B294A618700263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; + 331C8081294A63A400263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -54,32 +62,12 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 1D7251F7C7786B5C97B58455 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 431ACBA659B1F50CDDFFDADF /* Frameworks */ = { - isa = PBXGroup; - children = ( - EB75866D049DD85D515402B1 /* Pods_Runner.framework */, - ); - name = Frameworks; - sourceTree = ""; - }; - 5FB2CAED07279C85E2929B34 /* Pods */ = { - isa = PBXGroup; - children = ( - B2FB5E0F6915B87718E65180 /* Pods-Runner.debug.xcconfig */, - 4E099A224B9D3AF6B8130DFE /* Pods-Runner.release.xcconfig */, - 868C9C969644094983841C3C /* Pods-Runner.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; 9740EEB11CF90186004384FC /* Flutter */ = { isa = PBXGroup; children = ( @@ -91,14 +79,21 @@ name = Flutter; sourceTree = ""; }; + 331C8082294A63A400263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C807B294A618700263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; 97C146E51CF9000F007C117D = { isa = PBXGroup; children = ( 9740EEB11CF90186004384FC /* Flutter */, 97C146F01CF9000F007C117D /* Runner */, 97C146EF1CF9000F007C117D /* Products */, - 5FB2CAED07279C85E2929B34 /* Pods */, - 431ACBA659B1F50CDDFFDADF /* Frameworks */, + 331C8082294A63A400263BE5 /* RunnerTests */, ); sourceTree = ""; }; @@ -106,6 +101,7 @@ isa = PBXGroup; children = ( 97C146EE1CF9000F007C117D /* Runner.app */, + 331C8081294A63A400263BE5 /* RunnerTests.xctest */, ); name = Products; sourceTree = ""; @@ -128,18 +124,34 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 331C8080294A63A400263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C807D294A63A400263BE5 /* Sources */, + 331C807E294A63A400263BE5 /* Frameworks */, + 331C807F294A63A400263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C8086294A63A400263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C8081294A63A400263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; 97C146ED1CF9000F007C117D /* Runner */ = { isa = PBXNativeTarget; buildConfigurationList = 97C147051CF9000F007C117D /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 9EC5D79C8ED0114123D29008 /* [CP] Check Pods Manifest.lock */, 9740EEB61CF901F6004384FC /* Run Script */, 97C146EA1CF9000F007C117D /* Sources */, 97C146EB1CF9000F007C117D /* Frameworks */, 97C146EC1CF9000F007C117D /* Resources */, 9705A1C41CF9048500538489 /* Embed Frameworks */, 3B06AD1E1E4923F5004D2608 /* Thin Binary */, - A6EF44EE731374FE48486562 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -159,6 +171,10 @@ LastUpgradeCheck = 1300; ORGANIZATIONNAME = ""; TargetAttributes = { + 331C8080294A63A400263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 97C146ED1CF9000F007C117D; + }; 97C146ED1CF9000F007C117D = { CreatedOnToolsVersion = 7.3.1; LastSwiftMigration = 1100; @@ -179,11 +195,19 @@ projectRoot = ""; targets = ( 97C146ED1CF9000F007C117D /* Runner */, + 331C8080294A63A400263BE5 /* RunnerTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 331C807F294A63A400263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 97C146EC1CF9000F007C117D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -200,10 +224,12 @@ /* Begin PBXShellScriptBuildPhase section */ 3B06AD1E1E4923F5004D2608 /* Thin Binary */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputPaths = ( + "${TARGET_BUILD_DIR}/${INFOPLIST_PATH}", ); name = "Thin Binary"; outputPaths = ( @@ -214,6 +240,7 @@ }; 9740EEB61CF901F6004384FC /* Run Script */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -226,48 +253,17 @@ shellPath = /bin/sh; shellScript = "/bin/sh \"$FLUTTER_ROOT/packages/flutter_tools/bin/xcode_backend.sh\" build"; }; - 9EC5D79C8ED0114123D29008 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - A6EF44EE731374FE48486562 /* [CP] Embed Pods Frameworks */ = { - isa = PBXShellScriptBuildPhase; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + 331C807D294A63A400263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - ); - inputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-input-files.xcfilelist", - ); - name = "[CP] Embed Pods Frameworks"; - outputFileListPaths = ( - "${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks-${CONFIGURATION}-output-files.xcfilelist", + 331C808B294A63AB00263BE5 /* RunnerTests.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-frameworks.sh\"\n"; - showEnvVarsInLog = 0; }; -/* End PBXShellScriptBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ 97C146EA1CF9000F007C117D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -279,6 +275,14 @@ }; /* End PBXSourcesBuildPhase section */ +/* Begin PBXTargetDependency section */ + 331C8086294A63A400263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 97C146ED1CF9000F007C117D /* Runner */; + targetProxy = 331C8085294A63A400263BE5 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + /* Begin PBXVariantGroup section */ 97C146FA1CF9000F007C117D /* Main.storyboard */ = { isa = PBXVariantGroup; @@ -340,7 +344,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -371,6 +375,56 @@ }; name = Profile; }; + 331C8088294A63A400263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = AE0B7B92F70575B8D7E0D07E /* Pods-RunnerTests.debug.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.testingApp.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Debug; + }; + 331C8089294A63A400263BE5 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 89B67EB44CE7B6631473024E /* Pods-RunnerTests.release.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.testingApp.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Release; + }; + 331C808A294A63A400263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 640959BDD8F10B91D80A66BE /* Pods-RunnerTests.profile.xcconfig */; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CODE_SIGN_STYLE = Automatic; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.testingApp.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/Runner.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/Runner"; + }; + name = Profile; + }; 97C147031CF9000F007C117D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { @@ -418,7 +472,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; @@ -467,7 +521,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 9.0; + IPHONEOS_DEPLOYMENT_TARGET = 11.0; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = iphoneos; SUPPORTED_PLATFORMS = iphoneos; @@ -526,6 +580,16 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C8088294A63A400263BE5 /* Debug */, + 331C8089294A63A400263BE5 /* Release */, + 331C808A294A63A400263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 97C146E91CF9000F007C117D /* Build configuration list for PBXProject "Runner" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/testing_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/testing_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index c87d15a33..e42adcb34 100644 --- a/testing_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/testing_app/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -37,6 +37,17 @@ + + + + - - diff --git a/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png index 28c6bf030..7353c41ec 100644 Binary files a/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png and b/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ diff --git a/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png index 2ccbfd967..797d452e4 100644 Binary files a/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png and b/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ diff --git a/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png index f091b6b0b..6ed2d933e 100644 Binary files a/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png and b/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ diff --git a/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png index 4cde12118..4cd7b0099 100644 Binary files a/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png and b/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ diff --git a/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png index d0ef06e7e..fe730945a 100644 Binary files a/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png and b/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ diff --git a/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png index dcdc2306c..321773cd8 100644 Binary files a/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png and b/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ diff --git a/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png index 2ccbfd967..797d452e4 100644 Binary files a/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png and b/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ diff --git a/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png index c8f9ed8f5..502f463a9 100644 Binary files a/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png and b/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ diff --git a/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png index a6d6b8609..0ec303439 100644 Binary files a/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png and b/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ diff --git a/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png index a6d6b8609..0ec303439 100644 Binary files a/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png and b/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ diff --git a/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png index 75b2d164a..e9f5fea27 100644 Binary files a/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png and b/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ diff --git a/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png index c4df70d39..84ac32ae7 100644 Binary files a/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png and b/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ diff --git a/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png index 6a84f41e1..8953cba09 100644 Binary files a/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png and b/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ diff --git a/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png index d0e1f5853..0467bf12a 100644 Binary files a/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png and b/testing_app/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ diff --git a/testing_app/ios/Runner/Info.plist b/testing_app/ios/Runner/Info.plist index 65d82092f..0f22db4b2 100644 --- a/testing_app/ios/Runner/Info.plist +++ b/testing_app/ios/Runner/Info.plist @@ -42,6 +42,10 @@ UIInterfaceOrientationLandscapeRight UIViewControllerBasedStatusBarAppearance + + CADisableMinimumFrameDurationOnPhone + + UIApplicationSupportsIndirectInputEvents diff --git a/testing_app/ios/RunnerTests/RunnerTests.swift b/testing_app/ios/RunnerTests/RunnerTests.swift new file mode 100644 index 000000000..86a7c3b1b --- /dev/null +++ b/testing_app/ios/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import Flutter +import UIKit +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/testing_app/lib/main.dart b/testing_app/lib/main.dart index c30ea7927..ebd8b72e1 100644 --- a/testing_app/lib/main.dart +++ b/testing_app/lib/main.dart @@ -40,8 +40,9 @@ class TestingApp extends StatelessWidget { child: MaterialApp.router( title: 'Testing Sample', theme: ThemeData( - primarySwatch: Colors.blue, + colorSchemeSeed: Colors.blue, visualDensity: VisualDensity.adaptivePlatformDensity, + useMaterial3: true, ), routerConfig: router(), ), diff --git a/testing_app/lib/screens/home.dart b/testing_app/lib/screens/home.dart index 949f55901..ea8a09c79 100644 --- a/testing_app/lib/screens/home.dart +++ b/testing_app/lib/screens/home.dart @@ -20,7 +20,6 @@ class HomePage extends StatelessWidget { title: const Text('Testing Sample'), actions: [ TextButton.icon( - style: TextButton.styleFrom(foregroundColor: Colors.white), onPressed: () { context.go(FavoritesPage.fullPath); }, diff --git a/testing_app/linux/CMakeLists.txt b/testing_app/linux/CMakeLists.txt index c6c1506b3..ae86125f5 100644 --- a/testing_app/linux/CMakeLists.txt +++ b/testing_app/linux/CMakeLists.txt @@ -1,11 +1,19 @@ +# Project-level configuration. cmake_minimum_required(VERSION 3.10) project(runner LANGUAGES CXX) +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. set(BINARY_NAME "testing_app") +# The unique GTK application identifier for this application. See: +# https://wiki.gnome.org/HowDoI/ChooseApplicationID set(APPLICATION_ID "dev.flutter.testing_app") +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. cmake_policy(SET CMP0063 NEW) +# Load bundled libraries from the lib/ directory relative to the binary. set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") # Root filesystem for cross-building. @@ -18,7 +26,7 @@ if(FLUTTER_TARGET_PLATFORM_SYSROOT) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) endif() -# Configure build options. +# Define build configuration options. if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Flutter build mode" FORCE) @@ -27,6 +35,10 @@ if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) endif() # Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. function(APPLY_STANDARD_SETTINGS TARGET) target_compile_features(${TARGET} PUBLIC cxx_std_14) target_compile_options(${TARGET} PRIVATE -Wall -Werror) @@ -34,9 +46,8 @@ function(APPLY_STANDARD_SETTINGS TARGET) target_compile_definitions(${TARGET} PRIVATE "$<$>:NDEBUG>") endfunction() -set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") - # Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") add_subdirectory(${FLUTTER_MANAGED_DIR}) # System-level dependencies. @@ -45,16 +56,27 @@ pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0) add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}") -# Application build +# Define the application target. To change its name, change BINARY_NAME above, +# not the value here, or `flutter run` will no longer work. +# +# Any new source files that you add to the application should be added here. add_executable(${BINARY_NAME} "main.cc" "my_application.cc" "${FLUTTER_MANAGED_DIR}/generated_plugin_registrant.cc" ) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. apply_standard_settings(${BINARY_NAME}) + +# Add dependency libraries. Add any application-specific dependencies here. target_link_libraries(${BINARY_NAME} PRIVATE flutter) target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK) + +# Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) + # Only the install-generated bundle's copy of the executable will launch # correctly, since the resources must in the right relative locations. To avoid # people trying to run the unbundled copy, put it in a subdirectory instead of @@ -64,6 +86,7 @@ set_target_properties(${BINARY_NAME} RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/intermediates_do_not_run" ) + # Generated plugin build rules, which manage building the plugins and adding # them to the application. include(flutter/generated_plugins.cmake) @@ -94,11 +117,11 @@ install(FILES "${FLUTTER_ICU_DATA_FILE}" DESTINATION "${INSTALL_BUNDLE_DATA_DIR} install(FILES "${FLUTTER_LIBRARY}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" COMPONENT Runtime) -if(PLUGIN_BUNDLED_LIBRARIES) - install(FILES "${PLUGIN_BUNDLED_LIBRARIES}" +foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES}) + install(FILES "${bundled_library}" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}" COMPONENT Runtime) -endif() +endforeach(bundled_library) # Fully re-copy the assets directory on each build to avoid having stale files # from a previous install. diff --git a/testing_app/linux/flutter/CMakeLists.txt b/testing_app/linux/flutter/CMakeLists.txt index 33fd5801e..d5bd01648 100644 --- a/testing_app/linux/flutter/CMakeLists.txt +++ b/testing_app/linux/flutter/CMakeLists.txt @@ -1,3 +1,4 @@ +# This file controls Flutter-level build steps. It should not be edited. cmake_minimum_required(VERSION 3.10) set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") diff --git a/testing_app/macos/Podfile b/testing_app/macos/Podfile index dade8dfad..c795730db 100644 --- a/testing_app/macos/Podfile +++ b/testing_app/macos/Podfile @@ -1,4 +1,4 @@ -platform :osx, '10.11' +platform :osx, '10.14' # CocoaPods analytics sends network stats synchronously affecting flutter build latency. ENV['COCOAPODS_DISABLE_STATS'] = 'true' @@ -31,6 +31,9 @@ target 'Runner' do use_modular_headers! flutter_install_all_macos_pods File.dirname(File.realpath(__FILE__)) + target 'RunnerTests' do + inherit! :search_paths + end end post_install do |installer| diff --git a/testing_app/macos/Runner.xcodeproj/project.pbxproj b/testing_app/macos/Runner.xcodeproj/project.pbxproj index d6ae09f74..14f7dff44 100644 --- a/testing_app/macos/Runner.xcodeproj/project.pbxproj +++ b/testing_app/macos/Runner.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 51; + objectVersion = 54; objects = { /* Begin PBXAggregateTarget section */ @@ -21,15 +21,22 @@ /* End PBXAggregateTarget section */ /* Begin PBXBuildFile section */ + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 331C80D7294CF71000263BE5 /* RunnerTests.swift */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F12044A3C60003C045 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; 33CC11132044BFA00003C045 /* MainFlutterWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC11122044BFA00003C045 /* MainFlutterWindow.swift */; }; - 342711F40FB293F77C9CDBEE /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 4441C3B9493C9D1EDF4808C6 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ + 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = 33CC10E52044A3C60003C045 /* Project object */; + proxyType = 1; + remoteGlobalIDString = 33CC10EC2044A3C60003C045; + remoteInfo = Runner; + }; 33CC111F2044C79F0003C045 /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = 33CC10E52044A3C60003C045 /* Project object */; @@ -53,9 +60,11 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = RunnerTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; + 331C80D7294CF71000263BE5 /* RunnerTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RunnerTests.swift; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; - 33CC10ED2044A3C60003C045 /* testing_app.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = testing_app.app; sourceTree = BUILT_PRODUCTS_DIR; }; + 33CC10ED2044A3C60003C045 /* testing_app.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "testing_app.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 33CC10F02044A3C60003C045 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 33CC10F22044A3C60003C045 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Assets.xcassets; path = Runner/Assets.xcassets; sourceTree = ""; }; 33CC10F52044A3C60003C045 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; @@ -67,26 +76,36 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 4441C3B9493C9D1EDF4808C6 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; - 581529EB374B1F86BD81F72C /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - BF2ED5F321F1547EFAECB6EE /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - FDB999018C41EE55B938F301 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ + 331C80D2294CF70F00263BE5 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 33CC10EA2044A3C60003C045 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 342711F40FB293F77C9CDBEE /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ + 331C80D6294CF71000263BE5 /* RunnerTests */ = { + isa = PBXGroup; + children = ( + 331C80D7294CF71000263BE5 /* RunnerTests.swift */, + ); + path = RunnerTests; + sourceTree = ""; + }; 33BA886A226E78AF003329D5 /* Configs */ = { isa = PBXGroup; children = ( @@ -103,9 +122,9 @@ children = ( 33FAB671232836740065AC1E /* Runner */, 33CEB47122A05771004F2AC0 /* Flutter */, + 331C80D6294CF71000263BE5 /* RunnerTests */, 33CC10EE2044A3C60003C045 /* Products */, D73912EC22F37F3D000D13A0 /* Frameworks */, - ACAA6ACFCD519B3E59E78F06 /* Pods */, ); sourceTree = ""; }; @@ -113,6 +132,7 @@ isa = PBXGroup; children = ( 33CC10ED2044A3C60003C045 /* testing_app.app */, + 331C80D5294CF71000263BE5 /* RunnerTests.xctest */, ); name = Products; sourceTree = ""; @@ -152,21 +172,9 @@ path = Runner; sourceTree = ""; }; - ACAA6ACFCD519B3E59E78F06 /* Pods */ = { - isa = PBXGroup; - children = ( - 581529EB374B1F86BD81F72C /* Pods-Runner.debug.xcconfig */, - BF2ED5F321F1547EFAECB6EE /* Pods-Runner.release.xcconfig */, - FDB999018C41EE55B938F301 /* Pods-Runner.profile.xcconfig */, - ); - name = Pods; - path = Pods; - sourceTree = ""; - }; D73912EC22F37F3D000D13A0 /* Frameworks */ = { isa = PBXGroup; children = ( - 4441C3B9493C9D1EDF4808C6 /* Pods_Runner.framework */, ); name = Frameworks; sourceTree = ""; @@ -174,11 +182,28 @@ /* End PBXGroup section */ /* Begin PBXNativeTarget section */ + 331C80D4294CF70F00263BE5 /* RunnerTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */; + buildPhases = ( + 331C80D1294CF70F00263BE5 /* Sources */, + 331C80D2294CF70F00263BE5 /* Frameworks */, + 331C80D3294CF70F00263BE5 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + 331C80DA294CF71000263BE5 /* PBXTargetDependency */, + ); + name = RunnerTests; + productName = RunnerTests; + productReference = 331C80D5294CF71000263BE5 /* RunnerTests.xctest */; + productType = "com.apple.product-type.bundle.unit-test"; + }; 33CC10EC2044A3C60003C045 /* Runner */ = { isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - 315F7BE8F5B29EF727DCEF29 /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, @@ -205,6 +230,10 @@ LastUpgradeCheck = 1300; ORGANIZATIONNAME = ""; TargetAttributes = { + 331C80D4294CF70F00263BE5 = { + CreatedOnToolsVersion = 14.0; + TestTargetID = 33CC10EC2044A3C60003C045; + }; 33CC10EC2044A3C60003C045 = { CreatedOnToolsVersion = 9.2; LastSwiftMigration = 1100; @@ -235,12 +264,20 @@ projectRoot = ""; targets = ( 33CC10EC2044A3C60003C045 /* Runner */, + 331C80D4294CF70F00263BE5 /* RunnerTests */, 33CC111A2044C6BA0003C045 /* Flutter Assemble */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ + 331C80D3294CF70F00263BE5 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; 33CC10EB2044A3C60003C045 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; @@ -253,30 +290,9 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 315F7BE8F5B29EF727DCEF29 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); @@ -315,6 +331,14 @@ /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ + 331C80D1294CF70F00263BE5 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + 331C80D8294CF71000263BE5 /* RunnerTests.swift in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; 33CC10E92044A3C60003C045 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; @@ -328,6 +352,11 @@ /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ + 331C80DA294CF71000263BE5 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = 33CC10EC2044A3C60003C045 /* Runner */; + targetProxy = 331C80D9294CF71000263BE5 /* PBXContainerItemProxy */; + }; 33CC11202044C79F0003C045 /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = 33CC111A2044C6BA0003C045 /* Flutter Assemble */; @@ -348,6 +377,48 @@ /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ + 331C80DB294CF71000263BE5 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.testingApp.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/testing_app.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/testing_app"; + }; + name = Debug; + }; + 331C80DC294CF71000263BE5 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.testingApp.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/testing_app.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/testing_app"; + }; + name = Release; + }; + 331C80DD294CF71000263BE5 /* Profile */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(TEST_HOST)"; + CURRENT_PROJECT_VERSION = 1; + GENERATE_INFOPLIST_FILE = YES; + MARKETING_VERSION = 1.0; + PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.testingApp.RunnerTests; + PRODUCT_NAME = "$(TARGET_NAME)"; + SWIFT_VERSION = 5.0; + TEST_HOST = "$(BUILT_PRODUCTS_DIR)/testing_app.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/testing_app"; + }; + name = Profile; + }; 338D0CE9231458BD00FA5F75 /* Profile */ = { isa = XCBuildConfiguration; baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; @@ -386,7 +457,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; @@ -465,7 +536,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; @@ -512,7 +583,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.11; + MACOSX_DEPLOYMENT_TARGET = 10.14; MTL_ENABLE_DEBUG_INFO = NO; SDKROOT = macosx; SWIFT_COMPILATION_MODE = wholemodule; @@ -578,6 +649,16 @@ /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ + 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + 331C80DB294CF71000263BE5 /* Debug */, + 331C80DC294CF71000263BE5 /* Release */, + 331C80DD294CF71000263BE5 /* Profile */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; 33CC10E82044A3C60003C045 /* Build configuration list for PBXProject "Runner" */ = { isa = XCConfigurationList; buildConfigurations = ( diff --git a/testing_app/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/testing_app/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index 4833eb09e..01526930e 100644 --- a/testing_app/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/testing_app/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -37,6 +37,17 @@ + + + + - - diff --git a/testing_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/testing_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png index 3c4935a7c..82b6f9d9a 100644 Binary files a/testing_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png and b/testing_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png differ diff --git a/testing_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/testing_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png index ed4cc1642..13b35eba5 100644 Binary files a/testing_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png and b/testing_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png differ diff --git a/testing_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/testing_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png index 483be6138..0a3f5fa40 100644 Binary files a/testing_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png and b/testing_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png differ diff --git a/testing_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/testing_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png index bcbf36df2..bdb57226d 100644 Binary files a/testing_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png and b/testing_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png differ diff --git a/testing_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png b/testing_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png index 9c0a65286..f083318e0 100644 Binary files a/testing_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png and b/testing_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png differ diff --git a/testing_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/testing_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png index e71a72613..326c0e72c 100644 Binary files a/testing_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png and b/testing_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png differ diff --git a/testing_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/testing_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png index 8a31fe2dd..2f1632cfd 100644 Binary files a/testing_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png and b/testing_app/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png differ diff --git a/testing_app/macos/Runner/Base.lproj/MainMenu.xib b/testing_app/macos/Runner/Base.lproj/MainMenu.xib index 537341abf..80e867a4e 100644 --- a/testing_app/macos/Runner/Base.lproj/MainMenu.xib +++ b/testing_app/macos/Runner/Base.lproj/MainMenu.xib @@ -323,6 +323,10 @@ + + + + diff --git a/testing_app/macos/Runner/Configs/AppInfo.xcconfig b/testing_app/macos/Runner/Configs/AppInfo.xcconfig index 4c7261da0..0470555e8 100644 --- a/testing_app/macos/Runner/Configs/AppInfo.xcconfig +++ b/testing_app/macos/Runner/Configs/AppInfo.xcconfig @@ -11,4 +11,4 @@ PRODUCT_NAME = testing_app PRODUCT_BUNDLE_IDENTIFIER = dev.flutter.testingApp // The copyright displayed in application information -PRODUCT_COPYRIGHT = Copyright © 2022 dev.flutter. All rights reserved. +PRODUCT_COPYRIGHT = Copyright © 2023 dev.flutter. All rights reserved. diff --git a/testing_app/macos/RunnerTests/RunnerTests.swift b/testing_app/macos/RunnerTests/RunnerTests.swift new file mode 100644 index 000000000..5418c9f53 --- /dev/null +++ b/testing_app/macos/RunnerTests/RunnerTests.swift @@ -0,0 +1,12 @@ +import FlutterMacOS +import Cocoa +import XCTest + +class RunnerTests: XCTestCase { + + func testExample() { + // If you add code to the Runner application, consider adding tests here. + // See https://developer.apple.com/documentation/xctest for more information about using XCTest. + } + +} diff --git a/testing_app/pubspec.yaml b/testing_app/pubspec.yaml index d63dcce09..a47ed92db 100644 --- a/testing_app/pubspec.yaml +++ b/testing_app/pubspec.yaml @@ -4,7 +4,7 @@ description: A sample that shows testing in Flutter. version: 1.0.0+1 environment: - sdk: ">=2.17.0-0 <3.0.0" + sdk: ^3.1.0 dependencies: flutter: @@ -12,15 +12,16 @@ dependencies: cupertino_icons: ^1.0.3 provider: ^6.0.2 - go_router: ^6.0.0 + go_router: ">=10.0.0 <13.0.0" dev_dependencies: + analysis_defaults: + path: ../analysis_defaults integration_test: sdk: flutter flutter_test: sdk: flutter test: ^1.16.8 - flutter_lints: ^2.0.1 flutter: uses-material-design: true diff --git a/testing_app/web/index.html b/testing_app/web/index.html index 2278bdb97..865f162c9 100644 --- a/testing_app/web/index.html +++ b/testing_app/web/index.html @@ -31,74 +31,29 @@ testing_app + + + + - diff --git a/testing_app/windows/CMakeLists.txt b/testing_app/windows/CMakeLists.txt index c68add1ce..6d4cf851c 100644 --- a/testing_app/windows/CMakeLists.txt +++ b/testing_app/windows/CMakeLists.txt @@ -1,13 +1,16 @@ +# Project-level configuration. cmake_minimum_required(VERSION 3.14) project(testing_app LANGUAGES CXX) +# The name of the executable created for the application. Change this to change +# the on-disk name of your application. set(BINARY_NAME "testing_app") +# Explicitly opt in to modern CMake behaviors to avoid warnings with recent +# versions of CMake. cmake_policy(SET CMP0063 NEW) -set(CMAKE_INSTALL_RPATH "$ORIGIN/lib") - -# Configure build options. +# Define build configuration option. get_property(IS_MULTICONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) if(IS_MULTICONFIG) set(CMAKE_CONFIGURATION_TYPES "Debug;Profile;Release" @@ -20,7 +23,7 @@ else() "Debug" "Profile" "Release") endif() endif() - +# Define settings for the Profile build mode. set(CMAKE_EXE_LINKER_FLAGS_PROFILE "${CMAKE_EXE_LINKER_FLAGS_RELEASE}") set(CMAKE_SHARED_LINKER_FLAGS_PROFILE "${CMAKE_SHARED_LINKER_FLAGS_RELEASE}") set(CMAKE_C_FLAGS_PROFILE "${CMAKE_C_FLAGS_RELEASE}") @@ -30,6 +33,10 @@ set(CMAKE_CXX_FLAGS_PROFILE "${CMAKE_CXX_FLAGS_RELEASE}") add_definitions(-DUNICODE -D_UNICODE) # Compilation settings that should be applied to most targets. +# +# Be cautious about adding new options here, as plugins use this function by +# default. In most cases, you should add new options to specific targets instead +# of modifying this function. function(APPLY_STANDARD_SETTINGS TARGET) target_compile_features(${TARGET} PUBLIC cxx_std_17) target_compile_options(${TARGET} PRIVATE /W4 /WX /wd"4100") @@ -38,14 +45,14 @@ function(APPLY_STANDARD_SETTINGS TARGET) target_compile_definitions(${TARGET} PRIVATE "$<$:_DEBUG>") endfunction() -set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") - # Flutter library and tool build rules. +set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter") add_subdirectory(${FLUTTER_MANAGED_DIR}) -# Application build +# Application build; see runner/CMakeLists.txt. add_subdirectory("runner") + # Generated plugin build rules, which manage building the plugins and adding # them to the application. include(flutter/generated_plugins.cmake) diff --git a/testing_app/windows/flutter/CMakeLists.txt b/testing_app/windows/flutter/CMakeLists.txt index b2e4bd8d6..930d2071a 100644 --- a/testing_app/windows/flutter/CMakeLists.txt +++ b/testing_app/windows/flutter/CMakeLists.txt @@ -1,3 +1,4 @@ +# This file controls Flutter-level build steps. It should not be edited. cmake_minimum_required(VERSION 3.14) set(EPHEMERAL_DIR "${CMAKE_CURRENT_SOURCE_DIR}/ephemeral") diff --git a/testing_app/windows/runner/CMakeLists.txt b/testing_app/windows/runner/CMakeLists.txt index de2d8916b..394917c05 100644 --- a/testing_app/windows/runner/CMakeLists.txt +++ b/testing_app/windows/runner/CMakeLists.txt @@ -1,6 +1,11 @@ cmake_minimum_required(VERSION 3.14) project(runner LANGUAGES CXX) +# Define the application target. To change its name, change BINARY_NAME in the +# top-level CMakeLists.txt, not the value here, or `flutter run` will no longer +# work. +# +# Any new source files that you add to the application should be added here. add_executable(${BINARY_NAME} WIN32 "flutter_window.cpp" "main.cpp" @@ -10,8 +15,26 @@ add_executable(${BINARY_NAME} WIN32 "Runner.rc" "runner.exe.manifest" ) + +# Apply the standard set of build settings. This can be removed for applications +# that need different build settings. apply_standard_settings(${BINARY_NAME}) + +# Add preprocessor definitions for the build version. +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION=\"${FLUTTER_VERSION}\"") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MAJOR=${FLUTTER_VERSION_MAJOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_MINOR=${FLUTTER_VERSION_MINOR}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_PATCH=${FLUTTER_VERSION_PATCH}") +target_compile_definitions(${BINARY_NAME} PRIVATE "FLUTTER_VERSION_BUILD=${FLUTTER_VERSION_BUILD}") + +# Disable Windows macros that collide with C++ standard library functions. target_compile_definitions(${BINARY_NAME} PRIVATE "NOMINMAX") + +# Add dependency libraries and include directories. Add any application-specific +# dependencies here. target_link_libraries(${BINARY_NAME} PRIVATE flutter flutter_wrapper_app) +target_link_libraries(${BINARY_NAME} PRIVATE "dwmapi.lib") target_include_directories(${BINARY_NAME} PRIVATE "${CMAKE_SOURCE_DIR}") + +# Run the Flutter tool portions of the build. This must not be removed. add_dependencies(${BINARY_NAME} flutter_assemble) diff --git a/testing_app/windows/runner/Runner.rc b/testing_app/windows/runner/Runner.rc index 069acfb4e..ea8bcf9a1 100644 --- a/testing_app/windows/runner/Runner.rc +++ b/testing_app/windows/runner/Runner.rc @@ -60,14 +60,14 @@ IDI_APP_ICON ICON "resources\\app_icon.ico" // Version // -#ifdef FLUTTER_BUILD_NUMBER -#define VERSION_AS_NUMBER FLUTTER_BUILD_NUMBER +#if defined(FLUTTER_VERSION_MAJOR) && defined(FLUTTER_VERSION_MINOR) && defined(FLUTTER_VERSION_PATCH) && defined(FLUTTER_VERSION_BUILD) +#define VERSION_AS_NUMBER FLUTTER_VERSION_MAJOR,FLUTTER_VERSION_MINOR,FLUTTER_VERSION_PATCH,FLUTTER_VERSION_BUILD #else -#define VERSION_AS_NUMBER 1,0,0 +#define VERSION_AS_NUMBER 1,0,0,0 #endif -#ifdef FLUTTER_BUILD_NAME -#define VERSION_AS_STRING #FLUTTER_BUILD_NAME +#if defined(FLUTTER_VERSION) +#define VERSION_AS_STRING FLUTTER_VERSION #else #define VERSION_AS_STRING "1.0.0" #endif @@ -90,10 +90,10 @@ BEGIN BLOCK "040904e4" BEGIN VALUE "CompanyName", "dev.flutter" "\0" - VALUE "FileDescription", "A new Flutter project." "\0" + VALUE "FileDescription", "testing_app" "\0" VALUE "FileVersion", VERSION_AS_STRING "\0" VALUE "InternalName", "testing_app" "\0" - VALUE "LegalCopyright", "Copyright (C) 2022 dev.flutter. All rights reserved." "\0" + VALUE "LegalCopyright", "Copyright (C) 2023 dev.flutter. All rights reserved." "\0" VALUE "OriginalFilename", "testing_app.exe" "\0" VALUE "ProductName", "testing_app" "\0" VALUE "ProductVersion", VERSION_AS_STRING "\0" diff --git a/testing_app/windows/runner/flutter_window.cpp b/testing_app/windows/runner/flutter_window.cpp index b43b9095e..b25e363ef 100644 --- a/testing_app/windows/runner/flutter_window.cpp +++ b/testing_app/windows/runner/flutter_window.cpp @@ -26,6 +26,11 @@ bool FlutterWindow::OnCreate() { } RegisterPlugins(flutter_controller_->engine()); SetChildContent(flutter_controller_->view()->GetNativeWindow()); + + flutter_controller_->engine()->SetNextFrameCallback([&]() { + this->Show(); + }); + return true; } diff --git a/testing_app/windows/runner/main.cpp b/testing_app/windows/runner/main.cpp index cd2de09c9..5509e7d2e 100644 --- a/testing_app/windows/runner/main.cpp +++ b/testing_app/windows/runner/main.cpp @@ -27,7 +27,7 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, FlutterWindow window(project); Win32Window::Point origin(10, 10); Win32Window::Size size(1280, 720); - if (!window.CreateAndShow(L"testing_app", origin, size)) { + if (!window.Create(L"testing_app", origin, size)) { return EXIT_FAILURE; } window.SetQuitOnClose(true); diff --git a/testing_app/windows/runner/runner.exe.manifest b/testing_app/windows/runner/runner.exe.manifest index c977c4a42..a42ea7687 100644 --- a/testing_app/windows/runner/runner.exe.manifest +++ b/testing_app/windows/runner/runner.exe.manifest @@ -7,7 +7,7 @@ - + diff --git a/testing_app/windows/runner/utils.cpp b/testing_app/windows/runner/utils.cpp index d19bdbbcc..b2b08734d 100644 --- a/testing_app/windows/runner/utils.cpp +++ b/testing_app/windows/runner/utils.cpp @@ -47,16 +47,17 @@ std::string Utf8FromUtf16(const wchar_t* utf16_string) { } int target_length = ::WideCharToMultiByte( CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, nullptr, 0, nullptr, nullptr); - if (target_length == 0) { - return std::string(); - } + -1, nullptr, 0, nullptr, nullptr) + -1; // remove the trailing null character + int input_length = (int)wcslen(utf16_string); std::string utf8_string; + if (target_length <= 0 || target_length > utf8_string.max_size()) { + return utf8_string; + } utf8_string.resize(target_length); int converted_length = ::WideCharToMultiByte( CP_UTF8, WC_ERR_INVALID_CHARS, utf16_string, - -1, utf8_string.data(), - target_length, nullptr, nullptr); + input_length, utf8_string.data(), target_length, nullptr, nullptr); if (converted_length == 0) { return std::string(); } diff --git a/testing_app/windows/runner/win32_window.cpp b/testing_app/windows/runner/win32_window.cpp index c10f08dc7..60608d0fe 100644 --- a/testing_app/windows/runner/win32_window.cpp +++ b/testing_app/windows/runner/win32_window.cpp @@ -1,13 +1,31 @@ #include "win32_window.h" +#include #include #include "resource.h" namespace { +/// Window attribute that enables dark mode window decorations. +/// +/// Redefined in case the developer's machine has a Windows SDK older than +/// version 10.0.22000.0. +/// See: https://docs.microsoft.com/windows/win32/api/dwmapi/ne-dwmapi-dwmwindowattribute +#ifndef DWMWA_USE_IMMERSIVE_DARK_MODE +#define DWMWA_USE_IMMERSIVE_DARK_MODE 20 +#endif + constexpr const wchar_t kWindowClassName[] = L"FLUTTER_RUNNER_WIN32_WINDOW"; +/// Registry key for app theme preference. +/// +/// A value of 0 indicates apps should use dark mode. A non-zero or missing +/// value indicates apps should use light mode. +constexpr const wchar_t kGetPreferredBrightnessRegKey[] = + L"Software\\Microsoft\\Windows\\CurrentVersion\\Themes\\Personalize"; +constexpr const wchar_t kGetPreferredBrightnessRegValue[] = L"AppsUseLightTheme"; + // The number of Win32Window objects that currently exist. static int g_active_window_count = 0; @@ -31,8 +49,8 @@ void EnableFullDpiSupportIfAvailable(HWND hwnd) { GetProcAddress(user32_module, "EnableNonClientDpiScaling")); if (enable_non_client_dpi_scaling != nullptr) { enable_non_client_dpi_scaling(hwnd); - FreeLibrary(user32_module); } + FreeLibrary(user32_module); } } // namespace @@ -42,7 +60,7 @@ class WindowClassRegistrar { public: ~WindowClassRegistrar() = default; - // Returns the singleton registar instance. + // Returns the singleton registrar instance. static WindowClassRegistrar* GetInstance() { if (!instance_) { instance_ = new WindowClassRegistrar(); @@ -102,9 +120,9 @@ Win32Window::~Win32Window() { Destroy(); } -bool Win32Window::CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size) { +bool Win32Window::Create(const std::wstring& title, + const Point& origin, + const Size& size) { Destroy(); const wchar_t* window_class = @@ -117,7 +135,7 @@ bool Win32Window::CreateAndShow(const std::wstring& title, double scale_factor = dpi / 96.0; HWND window = CreateWindow( - window_class, title.c_str(), WS_OVERLAPPEDWINDOW | WS_VISIBLE, + window_class, title.c_str(), WS_OVERLAPPEDWINDOW, Scale(origin.x, scale_factor), Scale(origin.y, scale_factor), Scale(size.width, scale_factor), Scale(size.height, scale_factor), nullptr, nullptr, GetModuleHandle(nullptr), this); @@ -126,9 +144,15 @@ bool Win32Window::CreateAndShow(const std::wstring& title, return false; } + UpdateTheme(window); + return OnCreate(); } +bool Win32Window::Show() { + return ShowWindow(window_handle_, SW_SHOWNORMAL); +} + // static LRESULT CALLBACK Win32Window::WndProc(HWND const window, UINT const message, @@ -188,6 +212,10 @@ Win32Window::MessageHandler(HWND hwnd, SetFocus(child_content_); } return 0; + + case WM_DWMCOLORIZATIONCOLORCHANGED: + UpdateTheme(hwnd); + return 0; } return DefWindowProc(window_handle_, message, wparam, lparam); @@ -243,3 +271,18 @@ bool Win32Window::OnCreate() { void Win32Window::OnDestroy() { // No-op; provided for subclasses. } + +void Win32Window::UpdateTheme(HWND const window) { + DWORD light_mode; + DWORD light_mode_size = sizeof(light_mode); + LSTATUS result = RegGetValue(HKEY_CURRENT_USER, kGetPreferredBrightnessRegKey, + kGetPreferredBrightnessRegValue, + RRF_RT_REG_DWORD, nullptr, &light_mode, + &light_mode_size); + + if (result == ERROR_SUCCESS) { + BOOL enable_dark_mode = light_mode == 0; + DwmSetWindowAttribute(window, DWMWA_USE_IMMERSIVE_DARK_MODE, + &enable_dark_mode, sizeof(enable_dark_mode)); + } +} diff --git a/testing_app/windows/runner/win32_window.h b/testing_app/windows/runner/win32_window.h index 17ba43112..e901dde68 100644 --- a/testing_app/windows/runner/win32_window.h +++ b/testing_app/windows/runner/win32_window.h @@ -28,15 +28,16 @@ class Win32Window { Win32Window(); virtual ~Win32Window(); - // Creates and shows a win32 window with |title| and position and size using + // Creates a win32 window with |title| that is positioned and sized using // |origin| and |size|. New windows are created on the default monitor. Window // sizes are specified to the OS in physical pixels, hence to ensure a - // consistent size to will treat the width height passed in to this function - // as logical pixels and scale to appropriate for the default monitor. Returns - // true if the window was created successfully. - bool CreateAndShow(const std::wstring& title, - const Point& origin, - const Size& size); + // consistent size this function will scale the inputted width and height as + // as appropriate for the default monitor. The window is invisible until + // |Show| is called. Returns true if the window was created successfully. + bool Create(const std::wstring& title, const Point& origin, const Size& size); + + // Show the current window. Returns true if the window was successfully shown. + bool Show(); // Release OS resources associated with window. void Destroy(); @@ -76,7 +77,7 @@ class Win32Window { // OS callback called by message pump. Handles the WM_NCCREATE message which // is passed when the non-client area is being created and enables automatic // non-client DPI scaling so that the non-client area automatically - // responsponds to changes in DPI. All other messages are handled by + // responds to changes in DPI. All other messages are handled by // MessageHandler. static LRESULT CALLBACK WndProc(HWND const window, UINT const message, @@ -86,6 +87,9 @@ class Win32Window { // Retrieves a class instance pointer for |window| static Win32Window* GetThisFromHandle(HWND const window) noexcept; + // Update the window frame's theme to match the system theme. + static void UpdateTheme(HWND const window); + bool quit_on_close_ = false; // window handle for top level window. diff --git a/tool/android_ci_script.sh b/tool/android_ci_script.sh index 47af693eb..b2f3fb54f 100755 --- a/tool/android_ci_script.sh +++ b/tool/android_ci_script.sh @@ -37,7 +37,6 @@ do echo "== Testing '${PROJECT_NAME}' on Flutter's stable channel ==" pushd "${PROJECT_NAME}" - gradle wrapper ./gradlew --stacktrace assembleDebug ./gradlew --stacktrace assembleRelease diff --git a/tool/flutter_ci_script_beta.sh b/tool/flutter_ci_script_beta.sh index d126c7fe3..39efa1011 100755 --- a/tool/flutter_ci_script_beta.sh +++ b/tool/flutter_ci_script_beta.sh @@ -14,15 +14,19 @@ declare -ar PROJECT_NAMES=( "add_to_app/multiple_flutters/multiple_flutters_module" "add_to_app/plugin/flutter_module_using_plugin" "add_to_app/prebuilt_module/flutter_module" + "analysis_defaults" "android_splash_screen" - "animations" + # TODO(DomesticMouse): 'textScaleFactor' is deprecated and shouldn't be used. + # "animations" "background_isolate_channels" "code_sharing/client" "code_sharing/server" "code_sharing/shared" + "deeplink_store_example" "desktop_photo_search/fluent_ui" "desktop_photo_search/material" - "experimental/context_menus" + # TODO(DomesticMouse): Context Menu tests are flaky? + # "experimental/context_menus" "experimental/federated_plugin/federated_plugin" "experimental/federated_plugin/federated_plugin/example" "experimental/federated_plugin/federated_plugin_macos" @@ -31,28 +35,37 @@ declare -ar PROJECT_NAMES=( "experimental/federated_plugin/federated_plugin_windows" "experimental/linting_tool" "experimental/material_3_demo" - "experimental/pedometer" + # TODO(DomesticMouse): Dart formatting required + # "experimental/pedometer" + # "experimental/pedometer/example" "experimental/varfont_shader_puzzle" "experimental/web_dashboard" "flutter_maps_firestore" "form_app" "game_template" + "google_maps" "infinite_list" "ios_app_clip" "isolate_example" - "jsonexample" + # TODO(DomesticMouse): ComplexObjectView widget test Typical object is displayed correctly + # "jsonexample" "material_3_demo" - "navigation_and_routing" + # TODO(DomesticMouse): Use 'const' with the constructor to improve performance. + # "navigation_and_routing" "place_tracker" "platform_channels" "platform_design" "platform_view_swift" "provider_counter" "provider_shopper" - "simplistic_calculator" - "simplistic_editor" + "simple_shader" + # TODO(DomesticMouse): Inferred type argument 'AutoPlacement' doesn't conform to the bound 'Enum?' of the type variable 'T' on 'EnumProperty'. + # "simplistic_calculator" + # TODO(DomesticMouse): The named parameter 'onLookUp' is required + # "simplistic_editor" "testing_app" "veggieseasons" + "web_embedding/element_embedding_demo" "web/_tool" "web/samples_index" ) diff --git a/tool/flutter_ci_script_master.sh b/tool/flutter_ci_script_master.sh index 501ad44ee..33379c994 100755 --- a/tool/flutter_ci_script_master.sh +++ b/tool/flutter_ci_script_master.sh @@ -14,17 +14,19 @@ declare -ar PROJECT_NAMES=( "add_to_app/multiple_flutters/multiple_flutters_module" "add_to_app/plugin/flutter_module_using_plugin" "add_to_app/prebuilt_module/flutter_module" + "analysis_defaults" "android_splash_screen" - "animations" + # TODO(DomesticMouse): 'textScaleFactor' is deprecated and shouldn't be used. + # "animations" "background_isolate_channels" - # TODO(DomesticMouse): Use 'const' with the constructor to improve performance. - # "code_sharing/client" + "code_sharing/client" "code_sharing/server" "code_sharing/shared" + "deeplink_store_example" "desktop_photo_search/fluent_ui" "desktop_photo_search/material" - "experimental/context_menus" - "experimental/element_embedding_demo" + # TODO(DomesticMouse): Context Menu tests are flaky? + # "experimental/context_menus" "experimental/federated_plugin/federated_plugin" "experimental/federated_plugin/federated_plugin/example" "experimental/federated_plugin/federated_plugin_macos" @@ -32,32 +34,38 @@ declare -ar PROJECT_NAMES=( "experimental/federated_plugin/federated_plugin_web" "experimental/federated_plugin/federated_plugin_windows" "experimental/linting_tool" - # TODO(DomesticMouse): Use 'const' with the constructor to improve performance. - # "experimental/material_3_demo" - "experimental/pedometer" + "experimental/material_3_demo" + # TODO(DomesticMouse): Dart formatting required + # "experimental/pedometer" + # "experimental/pedometer/example" "experimental/varfont_shader_puzzle" "experimental/web_dashboard" "flutter_maps_firestore" "form_app" "game_template" + "google_maps" "infinite_list" "ios_app_clip" "isolate_example" - "jsonexample" - # TODO(DomesticMouse): Use 'const' with the constructor to improve performance. - # "material_3_demo" - "navigation_and_routing" + # TODO(DomesticMouse): ComplexObjectView widget test Typical object is displayed correctly + # "jsonexample" + "material_3_demo" # TODO(DomesticMouse): Use 'const' with the constructor to improve performance. - # "place_tracker" + # "navigation_and_routing" + "place_tracker" "platform_channels" "platform_design" "platform_view_swift" "provider_counter" "provider_shopper" - "simplistic_calculator" - "simplistic_editor" + "simple_shader" + # TODO(DomesticMouse): Inferred type argument 'AutoPlacement' doesn't conform to the bound 'Enum?' of the type variable 'T' on 'EnumProperty'. + # "simplistic_calculator" + # TODO(DomesticMouse): The named parameter 'onLookUp' is required + # "simplistic_editor" "testing_app" "veggieseasons" + "web_embedding/element_embedding_demo" "web/_tool" "web/samples_index" ) diff --git a/tool/flutter_ci_script_shared.sh b/tool/flutter_ci_script_shared.sh index 1a451ee55..2842c945f 100644 --- a/tool/flutter_ci_script_shared.sh +++ b/tool/flutter_ci_script_shared.sh @@ -20,7 +20,12 @@ function ci_projects () { # Run the actual tests. if [ -d "test" ] then - flutter test + if grep -q "flutter:" "pubspec.yaml"; then + flutter test + else + # If the project is not a Flutter project, use the Dart CLI. + dart test + fi fi popd diff --git a/tool/flutter_ci_script_stable.sh b/tool/flutter_ci_script_stable.sh index 561835b79..f790bb0ff 100755 --- a/tool/flutter_ci_script_stable.sh +++ b/tool/flutter_ci_script_stable.sh @@ -14,12 +14,14 @@ declare -ar PROJECT_NAMES=( "add_to_app/multiple_flutters/multiple_flutters_module" "add_to_app/plugin/flutter_module_using_plugin" "add_to_app/prebuilt_module/flutter_module" + "analysis_defaults" "android_splash_screen" "animations" "background_isolate_channels" "code_sharing/client" "code_sharing/server" "code_sharing/shared" + "deeplink_store_example" "desktop_photo_search/fluent_ui" "desktop_photo_search/material" "experimental/context_menus" @@ -32,11 +34,13 @@ declare -ar PROJECT_NAMES=( "experimental/linting_tool" "experimental/material_3_demo" "experimental/pedometer" + "experimental/pedometer/example" "experimental/varfont_shader_puzzle" "experimental/web_dashboard" "flutter_maps_firestore" "form_app" "game_template" + "google_maps" "infinite_list" "ios_app_clip" "isolate_example" @@ -49,10 +53,12 @@ declare -ar PROJECT_NAMES=( "platform_view_swift" "provider_counter" "provider_shopper" + "simple_shader" "simplistic_calculator" "simplistic_editor" "testing_app" "veggieseasons" + "web_embedding/element_embedding_demo" "web/_tool" "web/samples_index" ) diff --git a/veggieseasons/analysis_options.yaml b/veggieseasons/analysis_options.yaml index 5e2133eb6..13d6fe105 100644 --- a/veggieseasons/analysis_options.yaml +++ b/veggieseasons/analysis_options.yaml @@ -1 +1 @@ -include: ../analysis_options.yaml +include: package:analysis_defaults/flutter.yaml diff --git a/veggieseasons/lib/main.dart b/veggieseasons/lib/main.dart index a54f282d5..4bd78bc5f 100644 --- a/veggieseasons/lib/main.dart +++ b/veggieseasons/lib/main.dart @@ -2,18 +2,26 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:io'; +import 'dart:io' show Platform; import 'package:flutter/cupertino.dart'; -import 'package:flutter/foundation.dart'; +import 'package:flutter/foundation.dart' show kIsWeb; import 'package:flutter/services.dart' show DeviceOrientation, SystemChrome; +import 'package:go_router/go_router.dart'; import 'package:provider/provider.dart'; import 'package:veggieseasons/data/app_state.dart'; import 'package:veggieseasons/data/preferences.dart'; import 'package:veggieseasons/screens/home.dart'; import 'package:veggieseasons/styles.dart'; +import 'package:veggieseasons/widgets/fade_transition_page.dart'; import 'package:window_size/window_size.dart'; +import 'screens/details.dart'; +import 'screens/favorites.dart'; +import 'screens/list.dart'; +import 'screens/search.dart'; +import 'screens/settings.dart'; + void main() { WidgetsFlutterBinding.ensureInitialized(); SystemChrome.setPreferredOrientations([ @@ -48,6 +56,9 @@ void setupWindow() { } } +final _rootNavigatorKey = GlobalKey(); +final _shellNavigatorKey = GlobalKey(); + class VeggieApp extends StatefulWidget { const VeggieApp({super.key}); @@ -83,14 +94,138 @@ class _VeggieAppState extends State with RestorationMixin { create: (_) => Preferences()..load(), ), ], - child: CupertinoApp( + child: CupertinoApp.router( theme: Styles.veggieThemeData, debugShowCheckedModeBanner: false, - home: const HomeScreen(restorationId: 'home'), restorationScopeId: 'app', + routerConfig: GoRouter( + navigatorKey: _rootNavigatorKey, + restorationScopeId: 'router', + initialLocation: '/list', + redirect: (context, state) { + if (state.path == '/') { + return '/list'; + } + return null; + }, + debugLogDiagnostics: true, + routes: [ + ShellRoute( + navigatorKey: _shellNavigatorKey, + pageBuilder: (context, state, child) { + return CupertinoPage( + restorationId: 'router.shell', + child: HomeScreen( + restorationId: 'home', + child: child, + onTap: (index) { + if (index == 0) { + context.go('/list'); + } else if (index == 1) { + context.go('/favorites'); + } else if (index == 2) { + context.go('/search'); + } else { + context.go('/settings'); + } + }, + ), + ); + }, + routes: [ + GoRoute( + path: '/list', + pageBuilder: (context, state) { + return FadeTransitionPage( + key: state.pageKey, + restorationId: 'route.list', + child: const ListScreen(restorationId: 'list'), + ); + }, + routes: [ + _buildDetailsRoute(), + ], + ), + GoRoute( + path: '/favorites', + pageBuilder: (context, state) { + return FadeTransitionPage( + key: state.pageKey, + restorationId: 'route.favorites', + child: const FavoritesScreen(restorationId: 'favorites'), + ); + }, + routes: [ + _buildDetailsRoute(), + ], + ), + GoRoute( + path: '/search', + pageBuilder: (context, state) { + return FadeTransitionPage( + key: state.pageKey, + restorationId: 'route.search', + child: const SearchScreen(restorationId: 'search'), + ); + }, + routes: [ + _buildDetailsRoute(), + ], + ), + GoRoute( + path: '/settings', + pageBuilder: (context, state) { + return FadeTransitionPage( + key: state.pageKey, + restorationId: 'route.settings', + child: const SettingsScreen(restorationId: 'settings'), + ); + }, + routes: [ + GoRoute( + parentNavigatorKey: _rootNavigatorKey, + path: 'categories', + pageBuilder: (context, state) { + return VeggieCategorySettingsScreen.pageBuilder( + context); + }, + ), + GoRoute( + parentNavigatorKey: _rootNavigatorKey, + path: 'calories', + pageBuilder: (context, state) { + return CalorieSettingsScreen.pageBuilder(context); + }, + ), + ], + ), + ], + ), + ], + ), ), ); } + + // GoRouter does not support relative routes, + // see https://github.com/flutter/flutter/issues/108177 + GoRoute _buildDetailsRoute() { + return GoRoute( + parentNavigatorKey: _rootNavigatorKey, + path: 'details/:id', + pageBuilder: (context, state) { + final veggieId = int.parse(state.pathParameters['id']!); + return CupertinoPage( + restorationId: 'route.details', + fullscreenDialog: true, + child: DetailsScreen( + id: veggieId, + restorationId: 'details', + ), + ); + }, + ); + } } class _RestorableAppState extends RestorableListenable { diff --git a/veggieseasons/lib/screens/details.dart b/veggieseasons/lib/screens/details.dart index 8cc96f497..e672fee8c 100644 --- a/veggieseasons/lib/screens/details.dart +++ b/veggieseasons/lib/screens/details.dart @@ -3,6 +3,7 @@ // found in the LICENSE file. import 'package:flutter/cupertino.dart'; +import 'package:go_router/go_router.dart'; import 'package:provider/provider.dart'; import 'package:veggieseasons/data/app_state.dart'; import 'package:veggieseasons/data/preferences.dart'; @@ -240,19 +241,6 @@ class DetailsScreen extends StatefulWidget { const DetailsScreen({this.id, this.restorationId, super.key}); - static String show(NavigatorState navigator, int veggieId) { - return navigator.restorablePush(_routeBuilder, arguments: veggieId); - } - - static Route _routeBuilder(BuildContext context, Object? arguments) { - final veggieId = arguments as int?; - return CupertinoPageRoute( - builder: (context) => - DetailsScreen(id: veggieId, restorationId: 'details'), - fullscreenDialog: true, - ); - } - @override State createState() => _DetailsScreenState(); } @@ -295,7 +283,7 @@ class _DetailsScreenState extends State with RestorationMixin { left: 16, child: SafeArea( child: CloseButton(() { - Navigator.of(context).pop(); + context.pop(); }), ), ), diff --git a/veggieseasons/lib/screens/home.dart b/veggieseasons/lib/screens/home.dart index fd6a89f5b..901294bfd 100644 --- a/veggieseasons/lib/screens/home.dart +++ b/veggieseasons/lib/screens/home.dart @@ -3,52 +3,62 @@ // found in the LICENSE file. import 'package:flutter/cupertino.dart'; -import 'package:veggieseasons/screens/favorites.dart'; -import 'package:veggieseasons/screens/list.dart'; -import 'package:veggieseasons/screens/search.dart'; -import 'package:veggieseasons/screens/settings.dart'; +import 'package:go_router/go_router.dart'; class HomeScreen extends StatelessWidget { - const HomeScreen({super.key, this.restorationId}); + const HomeScreen({ + super.key, + this.restorationId, + required this.child, + required this.onTap, + }); final String? restorationId; + final Widget child; + final void Function(int) onTap; @override Widget build(BuildContext context) { + final index = _getSelectedIndex(GoRouter.of(context).location); return RestorationScope( restorationId: restorationId, - child: CupertinoTabScaffold( - restorationId: 'scaffold', - tabBar: CupertinoTabBar(items: const [ - BottomNavigationBarItem( - icon: Icon(CupertinoIcons.home), - label: 'Home', - ), - BottomNavigationBarItem( - icon: Icon(CupertinoIcons.book), - label: 'My Garden', - ), - BottomNavigationBarItem( - icon: Icon(CupertinoIcons.search), - label: 'Search', - ), - BottomNavigationBarItem( - icon: Icon(CupertinoIcons.settings), - label: 'Settings', - ), - ]), - tabBuilder: (context, index) { - if (index == 0) { - return const ListScreen(restorationId: 'list'); - } else if (index == 1) { - return const FavoritesScreen(restorationId: 'favorites'); - } else if (index == 2) { - return const SearchScreen(restorationId: 'search'); - } else { - return const SettingsScreen(restorationId: 'settings'); - } - }, + child: CupertinoPageScaffold( + child: Column( + children: [ + Expanded(child: child), + CupertinoTabBar( + currentIndex: index, + items: const [ + BottomNavigationBarItem( + icon: Icon(CupertinoIcons.home), + label: 'Home', + ), + BottomNavigationBarItem( + icon: Icon(CupertinoIcons.book), + label: 'My Garden', + ), + BottomNavigationBarItem( + icon: Icon(CupertinoIcons.search), + label: 'Search', + ), + BottomNavigationBarItem( + icon: Icon(CupertinoIcons.settings), + label: 'Settings', + ), + ], + onTap: onTap, + ), + ], + ), ), ); } + + int _getSelectedIndex(String location) { + if (location.startsWith('/list')) return 0; + if (location.startsWith('/favorites')) return 1; + if (location.startsWith('/search')) return 2; + if (location.startsWith('/settings')) return 3; + return 0; + } } diff --git a/veggieseasons/lib/screens/settings.dart b/veggieseasons/lib/screens/settings.dart index 53d3ccb38..a095695da 100644 --- a/veggieseasons/lib/screens/settings.dart +++ b/veggieseasons/lib/screens/settings.dart @@ -3,6 +3,7 @@ // found in the LICENSE file. import 'package:flutter/cupertino.dart'; +import 'package:go_router/go_router.dart'; import 'package:provider/provider.dart'; import 'package:veggieseasons/data/preferences.dart'; import 'package:veggieseasons/data/veggie.dart'; @@ -15,14 +16,10 @@ class VeggieCategorySettingsScreen extends StatelessWidget { final String? restorationId; - static String show(NavigatorState navigator) { - return navigator.restorablePush(_routeBuilder); - } - - static Route _routeBuilder(BuildContext context, Object? argument) { - return CupertinoPageRoute( - builder: (context) => - const VeggieCategorySettingsScreen(restorationId: 'category'), + static Page pageBuilder(BuildContext context) { + return const CupertinoPage( + restorationId: 'router.categories', + child: VeggieCategorySettingsScreen(restorationId: 'category'), title: 'Preferred Categories', ); } @@ -99,14 +96,10 @@ class CalorieSettingsScreen extends StatelessWidget { static const min = 2600; static const step = 200; - static String show(NavigatorState navigator) { - return navigator.restorablePush(_routeBuilder); - } - - static Route _routeBuilder(BuildContext context, Object? argument) { - return CupertinoPageRoute( - builder: (context) => - const CalorieSettingsScreen(restorationId: 'calorie'), + static Page pageBuilder(BuildContext context) { + return const CupertinoPage( + restorationId: 'router.calorie', + child: CalorieSettingsScreen(restorationId: 'calorie'), title: 'Calorie Target', ); } @@ -198,7 +191,7 @@ class _SettingsScreenState extends State { }, ), onPress: () { - CalorieSettingsScreen.show(Navigator.of(context)); + context.go('/settings/calories'); }, ); } @@ -213,7 +206,7 @@ class _SettingsScreenState extends State { ), content: const SettingsNavigationIndicator(), onPress: () { - VeggieCategorySettingsScreen.show(Navigator.of(context)); + context.go('/settings/categories'); }, ); } @@ -242,13 +235,13 @@ class _SettingsScreenState extends State { onPressed: () async { await prefs.restoreDefaults(); if (!mounted) return; - Navigator.pop(context); + context.pop(); }, ), CupertinoDialogAction( isDefaultAction: true, child: const Text('No'), - onPressed: () => Navigator.pop(context), + onPressed: () => context.pop(), ) ], ), diff --git a/veggieseasons/lib/widgets/close_button.dart b/veggieseasons/lib/widgets/close_button.dart index e1370f8e5..7eb11891c 100644 --- a/veggieseasons/lib/widgets/close_button.dart +++ b/veggieseasons/lib/widgets/close_button.dart @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:ui'; +import 'dart:ui' as ui; import 'package:flutter/cupertino.dart'; import 'package:veggieseasons/styles.dart'; @@ -19,7 +19,7 @@ class FrostedBox extends StatelessWidget { @override Widget build(BuildContext context) { return BackdropFilter( - filter: ImageFilter.blur(sigmaX: 10, sigmaY: 10), + filter: ui.ImageFilter.blur(sigmaX: 10, sigmaY: 10), child: DecoratedBox( decoration: const BoxDecoration( color: Styles.frostedBackground, diff --git a/veggieseasons/lib/widgets/fade_transition_page.dart b/veggieseasons/lib/widgets/fade_transition_page.dart new file mode 100644 index 000000000..066ca5d89 --- /dev/null +++ b/veggieseasons/lib/widgets/fade_transition_page.dart @@ -0,0 +1,66 @@ +// Copyright 2021, the Flutter project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import 'package:flutter/cupertino.dart'; + +class FadeTransitionPage extends Page { + final Widget child; + final Duration duration; + + const FadeTransitionPage({ + super.key, + required this.child, + this.duration = const Duration(milliseconds: 300), + super.restorationId, + }); + + @override + Route createRoute(BuildContext context) => + PageBasedFadeTransitionRoute(this); +} + +class PageBasedFadeTransitionRoute extends PageRoute { + PageBasedFadeTransitionRoute(FadeTransitionPage page) + : super(settings: page); + + FadeTransitionPage get _page => settings as FadeTransitionPage; + + @override + Color? get barrierColor => null; + + @override + String? get barrierLabel => null; + + @override + Duration get transitionDuration => _page.duration; + + @override + Duration get reverseTransitionDuration => _page.duration; + + @override + bool get maintainState => true; + + @override + Widget buildPage( + BuildContext context, + Animation animation, + Animation secondaryAnimation, + ) { + return _page.child; + } + + @override + Widget buildTransitions( + BuildContext context, + Animation animation, + Animation secondaryAnimation, + Widget child, + ) { + final tween = CurveTween(curve: Curves.easeInOut); + return FadeTransition( + opacity: animation.drive(tween), + child: _page.child, + ); + } +} diff --git a/veggieseasons/lib/widgets/veggie_card.dart b/veggieseasons/lib/widgets/veggie_card.dart index f7b2eb952..bf6dd154f 100644 --- a/veggieseasons/lib/widgets/veggie_card.dart +++ b/veggieseasons/lib/widgets/veggie_card.dart @@ -2,11 +2,11 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. -import 'dart:ui'; +import 'dart:ui' as ui; import 'package:flutter/cupertino.dart'; +import 'package:go_router/go_router.dart'; import 'package:veggieseasons/data/veggie.dart'; -import 'package:veggieseasons/screens/details.dart'; import 'package:veggieseasons/styles.dart'; class FrostyBackground extends StatelessWidget { @@ -25,7 +25,7 @@ class FrostyBackground extends StatelessWidget { Widget build(BuildContext context) { return ClipRect( child: BackdropFilter( - filter: ImageFilter.blur(sigmaX: intensity, sigmaY: intensity), + filter: ui.ImageFilter.blur(sigmaX: intensity, sigmaY: intensity), child: DecoratedBox( decoration: BoxDecoration( color: color, @@ -139,7 +139,12 @@ class VeggieCard extends StatelessWidget { @override Widget build(BuildContext context) { return PressableCard( - onPressed: () => DetailsScreen.show(Navigator.of(context), veggie.id), + onPressed: () { + // GoRouter does not support relative routes, + // so navigate to the absolute route. + // see https://github.com/flutter/flutter/issues/108177 + context.go('/list/details/${veggie.id}'); + }, child: Stack( children: [ Semantics( diff --git a/veggieseasons/lib/widgets/veggie_headline.dart b/veggieseasons/lib/widgets/veggie_headline.dart index d9e05ec50..c0c00c300 100644 --- a/veggieseasons/lib/widgets/veggie_headline.dart +++ b/veggieseasons/lib/widgets/veggie_headline.dart @@ -3,8 +3,8 @@ // found in the LICENSE file. import 'package:flutter/cupertino.dart'; +import 'package:go_router/go_router.dart'; import 'package:veggieseasons/data/veggie.dart'; -import 'package:veggieseasons/screens/details.dart'; import 'package:veggieseasons/styles.dart'; class ZoomClipAssetImage extends StatelessWidget { @@ -72,7 +72,13 @@ class VeggieHeadline extends StatelessWidget { final themeData = CupertinoTheme.of(context); return GestureDetector( - onTap: () => DetailsScreen.show(Navigator.of(context), veggie.id), + onTap: () { + // GoRouter does not support relative routes, + // so navigate to the absolute route, which can be either + // `/favorites/details/${veggie.id}` or `/search/details/${veggie.id}` + // see https://github.com/flutter/flutter/issues/108177 + context.go('${GoRouter.of(context).location}/details/${veggie.id}'); + }, child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ diff --git a/veggieseasons/pubspec.yaml b/veggieseasons/pubspec.yaml index c1ee8e719..85b88ce4c 100644 --- a/veggieseasons/pubspec.yaml +++ b/veggieseasons/pubspec.yaml @@ -5,7 +5,7 @@ publish_to: none version: 1.2.0 environment: - sdk: ">=2.17.0-0 <3.0.0" + sdk: ^3.1.0 dependencies: flutter: @@ -16,16 +16,20 @@ dependencies: intl: ^0.18.0 provider: ^6.0.1 shared_preferences: ^2.0.14 - window_size: + window_size: git: url: https://github.com/google/flutter-desktop-embedding path: plugins/window_size + # TODO: https://github.com/flutter/samples/issues/1838 + # go_router ^7.1.0 is breaking the state restoration tests + go_router: 7.0.2 dev_dependencies: + analysis_defaults: + path: ../analysis_defaults flutter_test: sdk: flutter - flutter_lints: ^2.0.1 - flutter_launcher_icons: ^0.11.0 + flutter_launcher_icons: ^0.13.0 flutter: assets: diff --git a/web/_tool/pubspec.yaml b/web/_tool/pubspec.yaml index ba5630c78..46edadfba 100644 --- a/web/_tool/pubspec.yaml +++ b/web/_tool/pubspec.yaml @@ -2,11 +2,11 @@ name: tool publish_to: none environment: - sdk: '>=2.17.0 <3.0.0' + sdk: ^3.1.0 dependencies: - markdown: ^6.0.0 + markdown: ^7.0.0 path: ^1.8.0 dev_dependencies: - lints: ^2.0.0 + lints: ^3.0.0 diff --git a/web/next_gen_ui_demo b/web/next_gen_ui_demo new file mode 120000 index 000000000..6d470ed8f --- /dev/null +++ b/web/next_gen_ui_demo @@ -0,0 +1 @@ +../next_gen_ui_demo \ No newline at end of file diff --git a/web/samples_index/README.md b/web/samples_index/README.md index 06d60ab74..d2db13906 100644 --- a/web/samples_index/README.md +++ b/web/samples_index/README.md @@ -1,6 +1,7 @@ # Flutter samples index generator -This tool is used to generate the visual samples index for Flutter samples. +This tool is used to generate the visual +[samples index for Flutter samples](https://flutter.github.io/samples/). ## Generating the index diff --git a/web/samples_index/lib/src/data.dart b/web/samples_index/lib/src/data.dart index a33d66ca7..62381161a 100644 --- a/web/samples_index/lib/src/data.dart +++ b/web/samples_index/lib/src/data.dart @@ -3,7 +3,7 @@ // found in the LICENSE file /// Defines the data types for this project. -library data; +library; import 'package:json_annotation/json_annotation.dart'; import 'package:path/path.dart' as path; @@ -68,9 +68,6 @@ class Sample { /// 'web' final List platforms; - /// Links to display on the details page - final List links; - /// The type of the sample. Supported values are either 'sample' or /// 'cookbook'. final String type; @@ -94,7 +91,6 @@ class Sample { this.packages = const [], this.tags = const [], this.platforms = const [], - this.links = const [], required this.type, this.date, this.channel, @@ -172,16 +168,3 @@ class Screenshot { Map toJson() => _$ScreenshotToJson(this); } - -/// An external link displayed next to a sample -@JsonSerializable(anyMap: true, checked: true) -class Link { - final String text; - final String href; - - Link(this.text, this.href); - - factory Link.fromJson(Map json) => _$LinkFromJson(json); - - Map toJson() => _$LinkToJson(this); -} diff --git a/web/samples_index/lib/src/data.g.dart b/web/samples_index/lib/src/data.g.dart index 82da349f1..752603bad 100644 --- a/web/samples_index/lib/src/data.g.dart +++ b/web/samples_index/lib/src/data.g.dart @@ -1,6 +1,6 @@ // GENERATED CODE - DO NOT MODIFY BY HAND -part of data; +part of 'data.dart'; // ************************************************************************** // JsonSerializableGenerator @@ -62,13 +62,6 @@ Sample _$SampleFromJson(Map json) => $checkedCreate( (v) => (v as List?)?.map((e) => e as String).toList() ?? const []), - links: $checkedConvert( - 'links', - (v) => - (v as List?) - ?.map((e) => Link.fromJson(e as Map)) - .toList() ?? - const []), type: $checkedConvert('type', (v) => v as String), date: $checkedConvert( 'date', (v) => v == null ? null : DateTime.parse(v as String)), @@ -90,7 +83,6 @@ Map _$SampleToJson(Sample instance) => { 'packages': instance.packages, 'tags': instance.tags, 'platforms': instance.platforms, - 'links': instance.links, 'type': instance.type, 'date': instance.date?.toIso8601String(), 'channel': instance.channel, @@ -113,20 +105,3 @@ Map _$ScreenshotToJson(Screenshot instance) => 'url': instance.url, 'alt': instance.alt, }; - -Link _$LinkFromJson(Map json) => $checkedCreate( - 'Link', - json, - ($checkedConvert) { - final val = Link( - $checkedConvert('text', (v) => v as String), - $checkedConvert('href', (v) => v as String), - ); - return val; - }, - ); - -Map _$LinkToJson(Link instance) => { - 'text': instance.text, - 'href': instance.href, - }; diff --git a/web/samples_index/lib/src/samples.yaml b/web/samples_index/lib/src/samples.yaml index 96ce47ff4..6d214aae6 100644 --- a/web/samples_index/lib/src/samples.yaml +++ b/web/samples_index/lib/src/samples.yaml @@ -83,7 +83,6 @@ samples: - scoped_model tags: ['intermediate', 'sample', 'gallery', 'material', 'design', 'vignettes'] platforms: ['web', 'ios', 'android'] - links: [] type: demo - name: Add to App @@ -106,7 +105,6 @@ samples: - provider tags: ['advanced', 'sample', 'add-to-app', 'android', 'ios', 'native', 'embedding'] platforms: ['ios', 'android'] - links: [] type: sample - name: Code Sharing @@ -124,7 +122,6 @@ samples: - shelf tags: ['intermediate', 'sample', 'code-sharing', 'dart', 'server'] platforms: ['android', 'ios', 'linux', 'macos', 'web', 'windows'] - links: [] type: sample - name: Animations @@ -153,7 +150,6 @@ samples: - flutter/material tags: ['intermediate', 'sample', 'animation'] platforms: ['ios', 'android', 'web'] - links: [] type: sample web: web/animations @@ -178,7 +174,6 @@ samples: - google_maps_webservice tags: ['intermediate', 'sample', 'firebase', 'maps'] platforms: ['ios', 'android'] - links: [] type: sample - name: Isolate Example @@ -203,7 +198,6 @@ samples: - dart:math tags: ['intermediate', 'sample', 'isolates', 'concurrency'] platforms: ['ios', 'android'] - links: [] type: sample - name: jsonexample @@ -232,7 +226,6 @@ samples: - built_value_generator tags: ['beginner', 'sample'] platforms: ['ios', 'android'] - links: [] type: sample - name: Place Tracker @@ -259,7 +252,6 @@ samples: - google_maps_flutter tags: ['intermediate', 'sample', 'json', 'serialization'] platforms: ['android'] - links: [] type: sample - name: Platform Design @@ -291,7 +283,6 @@ samples: - flutter/cupertino tags: ['advanced', 'sample', 'ios'] platforms: ['ios', 'android'] - links: [] type: sample - name: Platform View Swift @@ -313,7 +304,6 @@ samples: - flutter/services tags: ['advanced', 'sample', 'ios'] platforms: ['ios'] - links: [] type: sample - name: Infinite List @@ -338,7 +328,6 @@ samples: - meta tags: ['sample', 'material', 'design', 'android', 'ios'] platforms: ['ios', 'android'] - links: [] type: sample - name: IOS App Clip @@ -359,7 +348,6 @@ samples: - device_info tags: ['sample', 'Device Info', 'ios'] platforms: ['ios'] - links: [] type: sample - name: Testing App @@ -382,7 +370,6 @@ samples: - provider tags: ['sample', 'material', 'android', 'ios'] platforms: ['ios', 'android'] - links: [] type: sample - name: Provider Shopper @@ -406,7 +393,6 @@ samples: - provider tags: ['intermediate', 'sample', 'provider'] platforms: ['ios', 'android', 'web'] - links: [] type: sample web: web/provider_shopper @@ -433,7 +419,6 @@ samples: - firebase tags: ['intermediate', 'sample', 'firebase'] platforms: ['ios', 'android', 'web'] - links: [] type: sample web: web/web_dashboard @@ -455,7 +440,6 @@ samples: packages: [] tags: ['intermediate', 'sample', 'forms'] platforms: ['ios', 'android', 'web'] - links: [] type: sample web: web/form_app @@ -480,7 +464,6 @@ samples: packages: [] tags: ['advanced', 'sample', 'navigation', 'router'] platforms: ['ios', 'android', 'web'] - links: [] type: sample web: web/navigation_and_routing @@ -522,7 +505,6 @@ samples: widgets: [] packages: [] platforms: ['web'] - links: [] tags: ['demo', 'game'] type: demo @@ -546,7 +528,6 @@ samples: widgets: - TextInput packages: [] - links: [] tags: ["demo", "text"] platforms: ["ios", "android", "web", "windows", "macos", "linux"] type: demo @@ -579,7 +560,6 @@ samples: - Card - AppBar packages: [] - links: [] tags: ["material", "design"] platforms: ["ios", "android", "web", "windows", "macos", "linux"] type: demo @@ -611,7 +591,6 @@ samples: - logging - provider - shared_preferences - links: [] tags: ["games", "firebase", "ads", "crashlytics", "routing"] platforms: ["ios", "android", "web", "windows", "macos", "linux"] type: demo @@ -629,7 +608,39 @@ samples: widgets: [] packages: [] platforms: ['web'] - links: [] tags: ['demo', 'animation'] web: https://z.flutter.gallery/#/dice type: demo + + - name: Web Embedding + author: Flutter and Angular + screenshots: + - url: images/web_embedding1.png + alt: A Flutter app embedded in an Angular app + - url: images/web_embedding2.png + alt: A Flutter app embedded in an Angular app + source: https://github.com/flutter/samples/tree/main/web_embedding + description: > + An example app showing how to embed Flutter in a web application using Angular + difficulty: advanced + widgets: [] + packages: [] + platforms: ['web'] + tags: ['demo', 'web', 'add-to-app', 'embedding'] + web: https://flutter-angular.web.app/ + type: demo + + - name: Next Gen UI demo + author: Flutter + screenshots: + - url: images/next_gen_ui_demo.png + alt: Next Gen UI demo screenshot + source: https://github.com/flutter/samples/tree/main/next_gen_ui_demo + description: A sample version of the Next Generation UI codelab for demoing at I/O Connect + difficulty: advanced + packages: + - flutter_animate + platforms: + - Windows, macOS, Linux, web, Android, iOS + type: sample + web: web/next_gen_ui_demo diff --git a/web/samples_index/pubspec.yaml b/web/samples_index/pubspec.yaml index 07a05b5f7..461f6ca60 100644 --- a/web/samples_index/pubspec.yaml +++ b/web/samples_index/pubspec.yaml @@ -4,34 +4,37 @@ homepage: https://github.com/flutter/samples/tree/main/web/samples_index version: 0.0.1 environment: - sdk: '>=2.17.0 <3.0.0' + sdk: ^3.1.0 dependencies: - json_annotation: ^4.7.0 - path: ^1.8.0 - yaml: ^3.1.0 + json_annotation: ^4.8.1 + path: ^1.8.3 + yaml: ^3.1.2 mdc_web: ^0.6.0 - # ^2.1.5 is no longer compatible with our overridden sass version - # https://github.com/flutter/samples/issues/1472 - sass_builder: 2.1.4 - checked_yaml: ^2.0.1 - webdriver: ^3.0.0 - html: ^0.15.0 + sass_builder: ^2.2.1 + checked_yaml: ^2.0.3 + webdriver: ^3.0.2 + html: ^0.15.3 dev_dependencies: - grinder: ^0.9.0 - flutter_lints: ^2.0.1 - test: ^1.12.0 - json_serializable: ^6.5.0 - build: ^2.3.0 - build_runner: ^2.3.0 - build_web_compilers: ^3.2.0 + grinder: ^0.9.4 + flutter_lints: ">=2.0.1 <4.0.0" + test: ^1.24.2 + json_serializable: ^6.6.2 + build: ^2.4.0 + build_runner: ^2.4.2 + build_web_compilers: ^4.0.3 image: ">=3.2.0 <5.0.0" -# waiting for the next material-components-web release. -# Once released, it will need to be rolled into package:mdc_web. -# +# package:mdc_web needs to upgrade the version of material-components-web 12.0.0 +# or above, which includes this fix for the division operator: + # https://github.com/material-components/material-components-web/pull/7158 -# https://github.com/flutter/samples/issues/1472 +# +# Until then, dart-sass produces a warning that this operator is being removed +# in favor of calc(). +# +# See this issue for details: +# https://github.com/dart-lang/dart-pad/issues/2388 dependency_overrides: - sass: 1.32.10 \ No newline at end of file + sass: ^1.62.0 \ No newline at end of file diff --git a/web/samples_index/test/samples_index_test.dart b/web/samples_index/test/samples_index_test.dart index 97ee6f10c..1935a88c9 100644 --- a/web/samples_index/test/samples_index_test.dart +++ b/web/samples_index/test/samples_index_test.dart @@ -38,9 +38,6 @@ void main() { expect(sample.tags, hasLength(3)); expect(sample.tags[1], 'kittens'); expect(sample.platforms, hasLength(3)); - expect(sample.links, hasLength(2)); - expect(sample.links[1].text, 'author'); - expect(sample.links[1].href, 'https://jpryan.me'); expect(sample.type, 'sample'); expect(sample.date, DateTime.parse('2019-12-15T02:59:43.1Z')); expect(sample.channel, 'stable'); diff --git a/web/samples_index/test/yaml/single.yaml b/web/samples_index/test/yaml/single.yaml index f981a8ece..5f762b32b 100644 --- a/web/samples_index/test/yaml/single.yaml +++ b/web/samples_index/test/yaml/single.yaml @@ -16,11 +16,6 @@ samples: - path tags: ['beginner', 'kittens', 'cats'] platforms: ['web', 'ios', 'android'] - links: - - text: inspiration - href: https://apps.apple.com/us/app/neko-atsume-kitty-collector/id923917775 - - text: author - href: https://jpryan.me type: sample # sample, app, or cookbook date: 2019-12-15T02:59:43.1Z channel: stable diff --git a/web/samples_index/web/images/next_gen_ui_demo.png b/web/samples_index/web/images/next_gen_ui_demo.png new file mode 100644 index 000000000..d6269cf1e Binary files /dev/null and b/web/samples_index/web/images/next_gen_ui_demo.png differ diff --git a/web/samples_index/web/images/web_embedding1.png b/web/samples_index/web/images/web_embedding1.png new file mode 100644 index 000000000..d6f85bb91 Binary files /dev/null and b/web/samples_index/web/images/web_embedding1.png differ diff --git a/web/samples_index/web/images/web_embedding2.png b/web/samples_index/web/images/web_embedding2.png new file mode 100644 index 000000000..0e684e316 Binary files /dev/null and b/web/samples_index/web/images/web_embedding2.png differ diff --git a/web_embedding/README.md b/web_embedding/README.md new file mode 100644 index 000000000..da897af69 --- /dev/null +++ b/web_embedding/README.md @@ -0,0 +1,33 @@ +# web_embedding + +This directory contains examples of how to embed Flutter in web apps (without iframes): + +* **element_embedding_demo**: Modifies the index.html of a flutter app so it is + launched in a custom `hostElement`. This is the most basic embedding example. +* **ng-flutter**: A simple Angular app (and component) that replicates the above + example, but in an Angular style. + +Check the `README.md` of each example for more details on how to run it, and the +"Points of Interest" it may contain. + +## Community Contributions + +Members of the community have graciously ported and contributed the following examples +of Flutter Web embedding into other web frameworks: + +| Author | Host Framework | Code | +|--------|----------------|------| +| [@p-mazhnik][] | **React JS** | [p-mazhnik/flutter-embedding cra-flutter][] | +| [@p-mazhnik][] | **React Native** | [p-mazhnik/flutter-embedding expo-flutter][] | + + +_(All contributions are welcome! Please, [create an issue][] or open a PR to let us know +how you've embedded a Flutter Web app with your favorite web framework_ +(Vue? Svelte? Ember? Aurelia? jQuery? MooTools? Prototype?), _so it can be added to the table above!)_ + + [@p-mazhnik]: https://github.com/p-mazhnik + [p-mazhnik/flutter-embedding cra-flutter]: https://github.com/p-mazhnik/flutter-embedding/tree/main/cra-flutter + [p-mazhnik/flutter-embedding expo-flutter]: https://github.com/p-mazhnik/flutter-embedding/tree/main/expo-flutter + [create an issue]: https://github.com/flutter/samples/issues/new + + diff --git a/experimental/element_embedding_demo/.gitignore b/web_embedding/element_embedding_demo/.gitignore similarity index 100% rename from experimental/element_embedding_demo/.gitignore rename to web_embedding/element_embedding_demo/.gitignore diff --git a/experimental/element_embedding_demo/README.md b/web_embedding/element_embedding_demo/README.md similarity index 100% rename from experimental/element_embedding_demo/README.md rename to web_embedding/element_embedding_demo/README.md diff --git a/experimental/element_embedding_demo/assets/dash.png b/web_embedding/element_embedding_demo/assets/dash.png similarity index 100% rename from experimental/element_embedding_demo/assets/dash.png rename to web_embedding/element_embedding_demo/assets/dash.png diff --git a/experimental/element_embedding_demo/lib/main.dart b/web_embedding/element_embedding_demo/lib/main.dart similarity index 98% rename from experimental/element_embedding_demo/lib/main.dart rename to web_embedding/element_embedding_demo/lib/main.dart index 159af27ed..4e68290ae 100644 --- a/experimental/element_embedding_demo/lib/main.dart +++ b/web_embedding/element_embedding_demo/lib/main.dart @@ -64,7 +64,8 @@ class _MyAppState extends State { return MaterialApp( title: 'Element embedding', theme: ThemeData( - primarySwatch: Colors.blue, + colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue), + useMaterial3: true, ), debugShowCheckedModeBanner: false, home: demoScreenRouter(_currentDemoScreen), diff --git a/experimental/element_embedding_demo/pubspec.yaml b/web_embedding/element_embedding_demo/pubspec.yaml similarity index 87% rename from experimental/element_embedding_demo/pubspec.yaml rename to web_embedding/element_embedding_demo/pubspec.yaml index 659daedba..5dd7ee5cd 100644 --- a/experimental/element_embedding_demo/pubspec.yaml +++ b/web_embedding/element_embedding_demo/pubspec.yaml @@ -4,7 +4,7 @@ publish_to: 'none' version: 1.0.0+1 environment: - sdk: '>=3.0.0-0 <4.0.0' + sdk: ^3.1.0 dependencies: cupertino_icons: ^1.0.2 @@ -15,7 +15,7 @@ dependencies: dev_dependencies: flutter_test: sdk: flutter - flutter_lints: ^2.0.0 + flutter_lints: ^3.0.0 flutter: uses-material-design: true diff --git a/experimental/element_embedding_demo/web/css/style.css b/web_embedding/element_embedding_demo/web/css/style.css similarity index 100% rename from experimental/element_embedding_demo/web/css/style.css rename to web_embedding/element_embedding_demo/web/css/style.css diff --git a/experimental/element_embedding_demo/web/favicon.ico b/web_embedding/element_embedding_demo/web/favicon.ico similarity index 100% rename from experimental/element_embedding_demo/web/favicon.ico rename to web_embedding/element_embedding_demo/web/favicon.ico diff --git a/experimental/element_embedding_demo/web/fonts/DMSans-Bold.ttf b/web_embedding/element_embedding_demo/web/fonts/DMSans-Bold.ttf similarity index 100% rename from experimental/element_embedding_demo/web/fonts/DMSans-Bold.ttf rename to web_embedding/element_embedding_demo/web/fonts/DMSans-Bold.ttf diff --git a/experimental/element_embedding_demo/web/fonts/DMSans-Regular.ttf b/web_embedding/element_embedding_demo/web/fonts/DMSans-Regular.ttf similarity index 100% rename from experimental/element_embedding_demo/web/fonts/DMSans-Regular.ttf rename to web_embedding/element_embedding_demo/web/fonts/DMSans-Regular.ttf diff --git a/experimental/element_embedding_demo/web/fonts/OFL.txt b/web_embedding/element_embedding_demo/web/fonts/OFL.txt similarity index 100% rename from experimental/element_embedding_demo/web/fonts/OFL.txt rename to web_embedding/element_embedding_demo/web/fonts/OFL.txt diff --git a/experimental/element_embedding_demo/web/icons/Icon-192.png b/web_embedding/element_embedding_demo/web/icons/Icon-192.png similarity index 100% rename from experimental/element_embedding_demo/web/icons/Icon-192.png rename to web_embedding/element_embedding_demo/web/icons/Icon-192.png diff --git a/experimental/element_embedding_demo/web/icons/Icon-512.png b/web_embedding/element_embedding_demo/web/icons/Icon-512.png similarity index 100% rename from experimental/element_embedding_demo/web/icons/Icon-512.png rename to web_embedding/element_embedding_demo/web/icons/Icon-512.png diff --git a/experimental/element_embedding_demo/web/icons/Icon-maskable-192.png b/web_embedding/element_embedding_demo/web/icons/Icon-maskable-192.png similarity index 100% rename from experimental/element_embedding_demo/web/icons/Icon-maskable-192.png rename to web_embedding/element_embedding_demo/web/icons/Icon-maskable-192.png diff --git a/experimental/element_embedding_demo/web/icons/Icon-maskable-512.png b/web_embedding/element_embedding_demo/web/icons/Icon-maskable-512.png similarity index 100% rename from experimental/element_embedding_demo/web/icons/Icon-maskable-512.png rename to web_embedding/element_embedding_demo/web/icons/Icon-maskable-512.png diff --git a/experimental/element_embedding_demo/web/icons/favicon.png b/web_embedding/element_embedding_demo/web/icons/favicon.png similarity index 100% rename from experimental/element_embedding_demo/web/icons/favicon.png rename to web_embedding/element_embedding_demo/web/icons/favicon.png diff --git a/experimental/element_embedding_demo/web/icons/nail.png b/web_embedding/element_embedding_demo/web/icons/nail.png similarity index 100% rename from experimental/element_embedding_demo/web/icons/nail.png rename to web_embedding/element_embedding_demo/web/icons/nail.png diff --git a/experimental/element_embedding_demo/web/icons/unsplash-x9WGMWwp1NM.png b/web_embedding/element_embedding_demo/web/icons/unsplash-x9WGMWwp1NM.png similarity index 100% rename from experimental/element_embedding_demo/web/icons/unsplash-x9WGMWwp1NM.png rename to web_embedding/element_embedding_demo/web/icons/unsplash-x9WGMWwp1NM.png diff --git a/experimental/element_embedding_demo/web/index.html b/web_embedding/element_embedding_demo/web/index.html similarity index 100% rename from experimental/element_embedding_demo/web/index.html rename to web_embedding/element_embedding_demo/web/index.html diff --git a/experimental/element_embedding_demo/web/js/demo-css-fx.js b/web_embedding/element_embedding_demo/web/js/demo-css-fx.js similarity index 100% rename from experimental/element_embedding_demo/web/js/demo-css-fx.js rename to web_embedding/element_embedding_demo/web/js/demo-css-fx.js diff --git a/experimental/element_embedding_demo/web/js/demo-js-interop.js b/web_embedding/element_embedding_demo/web/js/demo-js-interop.js similarity index 100% rename from experimental/element_embedding_demo/web/js/demo-js-interop.js rename to web_embedding/element_embedding_demo/web/js/demo-js-interop.js diff --git a/experimental/element_embedding_demo/web/manifest.json b/web_embedding/element_embedding_demo/web/manifest.json similarity index 100% rename from experimental/element_embedding_demo/web/manifest.json rename to web_embedding/element_embedding_demo/web/manifest.json diff --git a/web_embedding/ng-flutter/.gitignore b/web_embedding/ng-flutter/.gitignore new file mode 100644 index 000000000..0711527ef --- /dev/null +++ b/web_embedding/ng-flutter/.gitignore @@ -0,0 +1,42 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# Compiled output +/dist +/tmp +/out-tsc +/bazel-out + +# Node +/node_modules +npm-debug.log +yarn-error.log + +# IDEs and editors +.idea/ +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# Visual Studio Code +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json +.history/* + +# Miscellaneous +/.angular/cache +.sass-cache/ +/connect.lock +/coverage +/libpeerconnection.log +testem.log +/typings + +# System files +.DS_Store +Thumbs.db diff --git a/web_embedding/ng-flutter/README.md b/web_embedding/ng-flutter/README.md new file mode 100644 index 000000000..f10416276 --- /dev/null +++ b/web_embedding/ng-flutter/README.md @@ -0,0 +1,177 @@ +# ng-flutter + +This Angular project is a simple example of how Angular and Flutter +web apps could be integrated, and have them interop. + +## Points of Interest + +### Angular + +This repository is a quite standard Angular app. The following changes were made +to be able to use (and interop) with a Flutter web application: + +* `package.json` has a custom `prebuild` script that builds the + Flutter web app, so Angular can find it later. +* `flutter.js` is added as a `"scripts"` entry in `angular.json`. + Angular takes care of minimizing and injecting it as any other script. +* The rest of the flutter app `flutter/build/web/` is registered + as an `"assets"` entry in `angular.json`, and moved to `/flutter`. +* The `ng-flutter` component takes care of embedding Flutter web, and yielding + control to Angular through an `appLoaded` `EventEmitter`. The object yielded + by this emitter is a state controller exposed by flutter via a JS custom + event! + +### Flutter + +The embedded Flutter application lives in the `flutter` directory of this repo. +That application is a standard web app, that doesn't need to be aware that it's +going to be embedded in another framework. + +* Flutter uses new `@staticInterop` methods to allow certain Dart functions to + be called from JavaScript. +* Look at how `createDartExport` and `broadcastAppEvent` work together to make + the `_state` controller of the Flutter app available to Angular! + +## How to build the app + +### Requirements + +If you want to build and run this demo on your machine, you'll need +a moderately recent version of Angular: + +```console +$ ng version + +Angular CLI: 16.0.1 +Node: 18.16.0 +Package Manager: npm 9.5.1 +OS: linux x64 +``` + +And Flutter: + +``` +$ flutter --version + +Flutter 3.10.0-12.0.pre.38 • channel master +Framework • revision 1a51dc2131 (8 days ago) • 2023-04-24 12:25:21 -0700 +Engine • revision 5fbde6c0fc +Tools • Dart 3.1.0 (build 3.1.0-35.0.dev) • DevTools 2.23.1 +``` + +**Ensure `npm`, `ng` and `flutter` are present in your `$PATH`.** + +### Building the app + +This repository is a moderately standard Angular app. It integrates +Flutter web by making it part of the Angular `assets`. + +In order to build this app, first fetch its `npm` dependencies: + +```console +$ npm install + +added 963 packages, and audited 964 packages in 17s + +93 packages are looking for funding + run `npm fund` for details + +found 0 vulnerabilities +``` + +Then run the `build` script. It'll take care of building Flutter +automatically: + +```console +$ npm run build + +> ng-flutter@0.0.0 prebuild + +... Flutter web build output ... + +Compiling lib/main.dart for the Web... + +> ng-flutter@0.0.0 build +> ng build + +... Angular build output ... + +✔ Browser application bundle generation complete. +✔ Copying assets complete. +✔ Index html generation complete. +``` + +### Local Angular development + +Once you've reached this point, you should be able to work with +your Angular application normally, for example to run a local web +server: + +```console +$ npm run start + +> ng-flutter@0.0.0 start +> ng serve + +✔ Browser application bundle generation complete. + +Initial Chunk Files | Names | Raw Size +vendor.js | vendor | 4.38 MB | + +... Angular build output... + +** Angular Live Development Server is listening on localhost:4200, open your browser on http://localhost:4200/ ** + + +✔ Compiled successfully. +``` + +Navigate to `http://localhost:4200/`. The application will automatically reload +if you change any of its Angular source files. + +### Local Flutter web development + +The Flutter app lives inside the `flutter` directory, and can be +developed independently. Just do any changes on Flutter web as you'd +normally do. It even includes a small `web/index.html` so you can see +changes to your app without running the whole Angular setup. + +> **Note** +> For now, Angular does _not_ auto-detect changes to your Flutter web +app, so once you're happy with your Flutter web app, make sure to +call `npm run build` so everything rebuilds and gets placed into its +correct location. + +### Deploying the app + +After `npm run build`, you should have a deployable Angular + Flutter +web app in the `dist` directory of this Angular project. + +Your built app can can be deployed anywhere, but do check +[Firebase hosting](https://firebase.google.com/docs/hosting) for a +super-easy deployment experience! + +## Troubleshooting + +### Flutter + +Ensure your flutter app is properly rebuilt after any changes. + +* Run `npm run build` to re-build the Flutter app. + +If you encounter error messages like: + +``` +Error: Can't resolve 'flutter/build/web/flutter.js' in '/my/checkout/of/ng-flutter' +``` + +You definitely need to run `npm run build`! + +## Reach out to the team(s)! + +Have you had any problem not covered in this README? Do you want +to see other embedding examples? + +Let us know by [creating an issue](https://github.com/flutter/samples/issues/new) or opening a new pull request. + +Thanks! diff --git a/web_embedding/ng-flutter/angular.json b/web_embedding/ng-flutter/angular.json new file mode 100644 index 000000000..cf031a030 --- /dev/null +++ b/web_embedding/ng-flutter/angular.json @@ -0,0 +1,114 @@ +{ + "$schema": "./node_modules/@angular/cli/lib/config/schema.json", + "version": 1, + "newProjectRoot": "projects", + "projects": { + "ng-flutter": { + "projectType": "application", + "schematics": {}, + "root": "", + "sourceRoot": "src", + "prefix": "app", + "architect": { + "build": { + "builder": "@angular-devkit/build-angular:browser", + "options": { + "outputPath": "dist/ng-flutter", + "index": "src/index.html", + "main": "src/main.ts", + "polyfills": [ + "zone.js" + ], + "tsConfig": "tsconfig.app.json", + "assets": [ + "src/favicon.ico", + "src/assets", + { + "input": "flutter/build/web/", + "glob": "**/*", + "output": "/flutter/" + } + ], + "styles": [ + "@angular/material/prebuilt-themes/indigo-pink.css", + "src/styles.css" + ], + "scripts": [ + { + "input": "flutter/build/web/flutter.js", + "inject": true, + "bundleName": "flutter" + } + ] + }, + "configurations": { + "production": { + "budgets": [ + { + "type": "initial", + "maximumWarning": "500kb", + "maximumError": "1mb" + }, + { + "type": "anyComponentStyle", + "maximumWarning": "2kb", + "maximumError": "4kb" + } + ], + "outputHashing": "all" + }, + "development": { + "buildOptimizer": false, + "optimization": false, + "vendorChunk": true, + "extractLicenses": false, + "sourceMap": true, + "namedChunks": true + } + }, + "defaultConfiguration": "production" + }, + "serve": { + "builder": "@angular-devkit/build-angular:dev-server", + "configurations": { + "production": { + "browserTarget": "ng-flutter:build:production" + }, + "development": { + "browserTarget": "ng-flutter:build:development" + } + }, + "defaultConfiguration": "development" + }, + "extract-i18n": { + "builder": "@angular-devkit/build-angular:extract-i18n", + "options": { + "browserTarget": "ng-flutter:build" + } + }, + "test": { + "builder": "@angular-devkit/build-angular:karma", + "options": { + "polyfills": [ + "zone.js", + "zone.js/testing" + ], + "tsConfig": "tsconfig.spec.json", + "assets": [ + "src/favicon.ico", + "src/assets" + ], + "styles": [ + "@angular/material/prebuilt-themes/indigo-pink.css", + "src/styles.css" + ], + "scripts": [] + } + } + } + } + }, + "cli": { + "analytics": "0ff9b6e8-2034-4f87-9ac7-46dbd612ebad" + } +} diff --git a/web_embedding/ng-flutter/flutter/.gitignore b/web_embedding/ng-flutter/flutter/.gitignore new file mode 100644 index 000000000..24476c5d1 --- /dev/null +++ b/web_embedding/ng-flutter/flutter/.gitignore @@ -0,0 +1,44 @@ +# Miscellaneous +*.class +*.log +*.pyc +*.swp +.DS_Store +.atom/ +.buildlog/ +.history +.svn/ +migrate_working_dir/ + +# IntelliJ related +*.iml +*.ipr +*.iws +.idea/ + +# The .vscode folder contains launch configuration and tasks you configure in +# VS Code which you may wish to be included in version control, so this line +# is commented out by default. +#.vscode/ + +# Flutter/Dart/Pub related +**/doc/api/ +**/ios/Flutter/.last_build_id +.dart_tool/ +.flutter-plugins +.flutter-plugins-dependencies +.packages +.pub-cache/ +.pub/ +/build/ + +# Symbolication related +app.*.symbols + +# Obfuscation related +app.*.map.json + +# Android Studio will place build artifacts here +/android/app/debug +/android/app/profile +/android/app/release diff --git a/web_embedding/ng-flutter/flutter/.metadata b/web_embedding/ng-flutter/flutter/.metadata new file mode 100644 index 000000000..35b0a49d4 --- /dev/null +++ b/web_embedding/ng-flutter/flutter/.metadata @@ -0,0 +1,45 @@ +# This file tracks properties of this Flutter project. +# Used by Flutter tool to assess capabilities and perform upgrades etc. +# +# This file should be version controlled. + +version: + revision: f41ae4f4c925336400b11dc02986c1b4d78a173c + channel: master + +project_type: app + +# Tracks metadata for the flutter migrate command +migration: + platforms: + - platform: root + create_revision: f41ae4f4c925336400b11dc02986c1b4d78a173c + base_revision: f41ae4f4c925336400b11dc02986c1b4d78a173c + - platform: android + create_revision: f41ae4f4c925336400b11dc02986c1b4d78a173c + base_revision: f41ae4f4c925336400b11dc02986c1b4d78a173c + - platform: ios + create_revision: f41ae4f4c925336400b11dc02986c1b4d78a173c + base_revision: f41ae4f4c925336400b11dc02986c1b4d78a173c + - platform: linux + create_revision: f41ae4f4c925336400b11dc02986c1b4d78a173c + base_revision: f41ae4f4c925336400b11dc02986c1b4d78a173c + - platform: macos + create_revision: f41ae4f4c925336400b11dc02986c1b4d78a173c + base_revision: f41ae4f4c925336400b11dc02986c1b4d78a173c + - platform: web + create_revision: f41ae4f4c925336400b11dc02986c1b4d78a173c + base_revision: f41ae4f4c925336400b11dc02986c1b4d78a173c + - platform: windows + create_revision: f41ae4f4c925336400b11dc02986c1b4d78a173c + base_revision: f41ae4f4c925336400b11dc02986c1b4d78a173c + + # User provided section + + # List of Local paths (relative to this file) that should be + # ignored by the migrate tool. + # + # Files that are not part of the templates will be ignored by default. + unmanaged_files: + - 'lib/main.dart' + - 'ios/Runner.xcodeproj/project.pbxproj' diff --git a/web_embedding/ng-flutter/flutter/README.md b/web_embedding/ng-flutter/flutter/README.md new file mode 100644 index 000000000..46dd17197 --- /dev/null +++ b/web_embedding/ng-flutter/flutter/README.md @@ -0,0 +1,16 @@ +# ng_companion + +A new Flutter project. + +## Getting Started + +This project is a starting point for a Flutter application. + +A few resources to get you started if this is your first Flutter project: + +- [Lab: Write your first Flutter app](https://docs.flutter.dev/get-started/codelab) +- [Cookbook: Useful Flutter samples](https://docs.flutter.dev/cookbook) + +For help getting started with Flutter development, view the +[online documentation](https://docs.flutter.dev/), which offers tutorials, +samples, guidance on mobile development, and a full API reference. diff --git a/web_embedding/ng-flutter/flutter/analysis_options.yaml b/web_embedding/ng-flutter/flutter/analysis_options.yaml new file mode 100644 index 000000000..61b6c4de1 --- /dev/null +++ b/web_embedding/ng-flutter/flutter/analysis_options.yaml @@ -0,0 +1,29 @@ +# This file configures the analyzer, which statically analyzes Dart code to +# check for errors, warnings, and lints. +# +# The issues identified by the analyzer are surfaced in the UI of Dart-enabled +# IDEs (https://dart.dev/tools#ides-and-editors). The analyzer can also be +# invoked from the command line by running `flutter analyze`. + +# The following line activates a set of recommended lints for Flutter apps, +# packages, and plugins designed to encourage good coding practices. +include: package:flutter_lints/flutter.yaml + +linter: + # The lint rules applied to this project can be customized in the + # section below to disable rules from the `package:flutter_lints/flutter.yaml` + # included above or to enable additional rules. A list of all available lints + # and their documentation is published at + # https://dart-lang.github.io/linter/lints/index.html. + # + # Instead of disabling a lint rule for the entire project in the + # section below, it can also be suppressed for a single line of code + # or a specific dart file by using the `// ignore: name_of_lint` and + # `// ignore_for_file: name_of_lint` syntax on the line or in the file + # producing the lint. + rules: + # avoid_print: false # Uncomment to disable the `avoid_print` rule + # prefer_single_quotes: true # Uncomment to enable the `prefer_single_quotes` rule + +# Additional information about this file can be found at +# https://dart.dev/guides/language/analysis-options diff --git a/web_embedding/ng-flutter/flutter/assets/dash-big.png b/web_embedding/ng-flutter/flutter/assets/dash-big.png new file mode 100644 index 000000000..b0710449e Binary files /dev/null and b/web_embedding/ng-flutter/flutter/assets/dash-big.png differ diff --git a/web_embedding/ng-flutter/flutter/assets/dash.png b/web_embedding/ng-flutter/flutter/assets/dash.png new file mode 100644 index 000000000..3ea815db2 Binary files /dev/null and b/web_embedding/ng-flutter/flutter/assets/dash.png differ diff --git a/web_embedding/ng-flutter/flutter/lib/main.dart b/web_embedding/ng-flutter/flutter/lib/main.dart new file mode 100644 index 000000000..09a121b99 --- /dev/null +++ b/web_embedding/ng-flutter/flutter/lib/main.dart @@ -0,0 +1,74 @@ +// ignore_for_file: avoid_web_libraries_in_flutter + +import 'package:flutter/material.dart'; + +import 'pages/counter.dart'; +import 'pages/dash.dart'; +import 'pages/text.dart'; + +import 'src/js_interop.dart'; + +void main() { + runApp(const MyApp()); +} + +class MyApp extends StatefulWidget { + const MyApp({super.key}); + + @override + State createState() => _MyAppState(); +} + +class _MyAppState extends State { + final ValueNotifier _screen = + ValueNotifier(DemoScreen.counter); + final ValueNotifier _counter = ValueNotifier(0); + final ValueNotifier _text = ValueNotifier(''); + + late final DemoAppStateManager _state; + + @override + void initState() { + super.initState(); + _state = DemoAppStateManager( + screen: _screen, + counter: _counter, + text: _text, + ); + final export = createDartExport(_state); + + // Emit this through the root object of the flutter app :) + broadcastAppEvent('flutter-initialized', export); + } + + @override + void dispose() { + super.dispose(); + } + + @override + Widget build(BuildContext context) { + return MaterialApp( + title: 'Element embedding', + theme: ThemeData( + colorScheme: ColorScheme.fromSeed(seedColor: Colors.blue), + useMaterial3: true, + ), + home: ValueListenableBuilder( + valueListenable: _screen, + builder: (context, value, child) => demoScreenRouter(value), + ), + ); + } + + Widget demoScreenRouter(DemoScreen which) { + switch (which) { + case DemoScreen.counter: + return CounterDemo(counter: _counter); + case DemoScreen.text: + return TextFieldDemo(text: _text); + case DemoScreen.dash: + return DashDemo(text: _text); + } + } +} diff --git a/web_embedding/ng-flutter/flutter/lib/pages/counter.dart b/web_embedding/ng-flutter/flutter/lib/pages/counter.dart new file mode 100644 index 000000000..8b373fead --- /dev/null +++ b/web_embedding/ng-flutter/flutter/lib/pages/counter.dart @@ -0,0 +1,49 @@ +import 'package:flutter/material.dart'; + +class CounterDemo extends StatefulWidget { + final ValueNotifier counter; + + const CounterDemo({ + super.key, + required this.counter, + }); + + @override + State createState() => _CounterDemoState(); +} + +class _CounterDemoState extends State { + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + backgroundColor: Theme.of(context).colorScheme.inversePrimary, + title: const Text('Counter'), + ), + body: Center( + child: Column( + mainAxisAlignment: MainAxisAlignment.center, + children: [ + const Text( + 'You have pushed the button this many times:', + ), + ValueListenableBuilder( + valueListenable: widget.counter, + builder: (context, value, child) => Text( + '$value', + style: Theme.of(context).textTheme.headlineMedium, + ), + ), + ], + ), + ), + floatingActionButton: FloatingActionButton( + onPressed: () { + widget.counter.value++; + }, + tooltip: 'Increment', + child: const Icon(Icons.add), + ), + ); + } +} diff --git a/web_embedding/ng-flutter/flutter/lib/pages/dash.dart b/web_embedding/ng-flutter/flutter/lib/pages/dash.dart new file mode 100644 index 000000000..05deca16e --- /dev/null +++ b/web_embedding/ng-flutter/flutter/lib/pages/dash.dart @@ -0,0 +1,146 @@ +import 'package:flutter/material.dart'; + +class DashDemo extends StatefulWidget { + final ValueNotifier text; + + const DashDemo({super.key, required this.text}); + + @override + State createState() => _DashDemoState(); +} + +class _DashDemoState extends State { + final double textFieldHeight = 80; + final Color colorPrimary = Colors.blue.shade700; + late TextEditingController textController; + + int totalCharCount = 0; + + @override + void initState() { + super.initState(); + // Initial value of the text box + totalCharCount = widget.text.value.length; + textController = TextEditingController.fromValue(TextEditingValue( + text: widget.text.value, + selection: TextSelection.collapsed(offset: widget.text.value.length))); + // Report changes + textController.addListener(_onTextControllerChange); + // Listen to changes from the outside + widget.text.addListener(_onTextStateChanged); + } + + void _onTextControllerChange() { + widget.text.value = textController.text; + setState(() { + totalCharCount = textController.text.length; + }); + } + + void _onTextStateChanged() { + textController.value = TextEditingValue( + text: widget.text.value, + selection: TextSelection.collapsed(offset: widget.text.value.length), + ); + } + + @override + void dispose() { + super.dispose(); + textController.dispose(); + widget.text.removeListener(_onTextStateChanged); + } + + void _handleClear() { + textController.value = TextEditingValue( + text: '', + selection: TextSelection.collapsed(offset: widget.text.value.length), + ); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + body: Column( + children: [ + Expanded( + child: Container( + width: double.infinity, + color: colorPrimary, + child: Column( + crossAxisAlignment: CrossAxisAlignment.center, + mainAxisAlignment: MainAxisAlignment.center, + children: [ + Text( + 'COUNT WITH DASH!', + style: Theme.of(context).textTheme.titleLarge!.copyWith( + color: Colors.white, + ), + ), + // Bordered dash avatar + Padding( + padding: const EdgeInsets.all(12), + child: ClipOval( + child: Container( + color: Colors.white, + padding: const EdgeInsets.all(2), + child: ClipOval( + child: Container( + color: colorPrimary, + padding: const EdgeInsets.all(2), + child: const CircleAvatar( + radius: 45, + backgroundColor: Colors.white, + foregroundImage: + AssetImage('assets/dash.png'), + )), + )), + ), + ), + Text( + '$totalCharCount', + style: Theme.of(context).textTheme.displayLarge!.copyWith( + color: Colors.white, + ), + ), + ], + ), + ), + ), + Padding( + padding: const EdgeInsets.all(12), + child: Row( + children: [ + Expanded( + child: TextField( + autofocus: true, + controller: textController, + maxLines: 1, + decoration: const InputDecoration( + border: OutlineInputBorder(), + hintText: 'Type something!', + ), + ), + ), + Padding( + padding: const EdgeInsets.only(left: 12), + child: Ink( + decoration: ShapeDecoration( + color: colorPrimary, + shape: const CircleBorder(), + ), + child: IconButton( + icon: const Icon(Icons.refresh), + color: Colors.white, + onPressed: _handleClear, + ), + ), + ), + ], + ), + ), + ], + ), + ); + } +} diff --git a/web_embedding/ng-flutter/flutter/lib/pages/text.dart b/web_embedding/ng-flutter/flutter/lib/pages/text.dart new file mode 100644 index 000000000..0f151e156 --- /dev/null +++ b/web_embedding/ng-flutter/flutter/lib/pages/text.dart @@ -0,0 +1,67 @@ +import 'package:flutter/material.dart'; + +class TextFieldDemo extends StatefulWidget { + const TextFieldDemo({super.key, required this.text}); + final ValueNotifier text; + + @override + State createState() => _TextFieldDemoState(); +} + +class _TextFieldDemoState extends State { + late TextEditingController textController; + + @override + void initState() { + super.initState(); + // Initial value of the text box + textController = TextEditingController.fromValue(TextEditingValue( + text: widget.text.value, + selection: TextSelection.collapsed(offset: widget.text.value.length))); + // Report changes + textController.addListener(_onTextControllerChange); + // Listen to changes from the outside + widget.text.addListener(_onTextStateChanged); + } + + void _onTextControllerChange() { + widget.text.value = textController.text; + } + + void _onTextStateChanged() { + textController.value = TextEditingValue( + text: widget.text.value, + selection: TextSelection.collapsed(offset: widget.text.value.length), + ); + } + + @override + void dispose() { + super.dispose(); + textController.dispose(); + widget.text.removeListener(_onTextStateChanged); + } + + @override + Widget build(BuildContext context) { + return Scaffold( + appBar: AppBar( + backgroundColor: Theme.of(context).colorScheme.inversePrimary, + title: const Text('Text Field'), + ), + body: Center( + child: Padding( + padding: const EdgeInsets.all(14.0), + child: TextField( + controller: textController, + maxLines: null, + decoration: const InputDecoration( + border: OutlineInputBorder(), + hintText: 'Type something!', + ), + ), + ), + ), + ); + } +} diff --git a/web_embedding/ng-flutter/flutter/lib/src/js_interop.dart b/web_embedding/ng-flutter/flutter/lib/src/js_interop.dart new file mode 100644 index 000000000..dd9af0ba3 --- /dev/null +++ b/web_embedding/ng-flutter/flutter/lib/src/js_interop.dart @@ -0,0 +1,7 @@ +/// Exposes useful functions to interop with JS from our Flutter app. +library example_js_interop; + +export 'js_interop/counter_state_manager.dart'; +export 'js_interop/helper.dart' show broadcastAppEvent; + +export 'package:js/js_util.dart' show createDartExport; diff --git a/web_embedding/ng-flutter/flutter/lib/src/js_interop/counter_state_manager.dart b/web_embedding/ng-flutter/flutter/lib/src/js_interop/counter_state_manager.dart new file mode 100644 index 000000000..874bda091 --- /dev/null +++ b/web_embedding/ng-flutter/flutter/lib/src/js_interop/counter_state_manager.dart @@ -0,0 +1,82 @@ +import 'package:flutter/foundation.dart'; +import 'package:js/js.dart'; + +enum DemoScreen { + counter('counter'), + text('text'), + dash('dash'); + + const DemoScreen(String screen) : _screen = screen; + final String _screen; + + @override + String toString() => _screen; +} + +/// This is the bit of state that JS is able to see. +/// +/// It contains getters/setters/operations and a mechanism to +/// subscribe to change notifications from an incoming [notifier]. +@JSExport() +class DemoAppStateManager { + // Creates a DemoAppStateManager wrapping a ValueNotifier. + DemoAppStateManager({ + required ValueNotifier screen, + required ValueNotifier counter, + required ValueNotifier text, + }) : _counter = counter, + _text = text, + _screen = screen; + + final ValueNotifier _screen; + final ValueNotifier _counter; + final ValueNotifier _text; + + // _counter + int getClicks() { + return _counter.value; + } + + void setClicks(int value) { + _counter.value = value; + } + + void incrementClicks() { + _counter.value++; + } + + void decrementClicks() { + _counter.value--; + } + + // _text + void setText(String text) { + _text.value = text; + } + + String getText() { + return _text.value; + } + + // _screen + void setScreen(String screen) { + _screen.value = DemoScreen.values.byName(screen); + } + + String getScreen() { + return _screen.value.toString(); + } + + // Allows clients to subscribe to changes to the wrapped value. + void onClicksChanged(VoidCallback f) { + _counter.addListener(f); + } + + void onTextChanged(VoidCallback f) { + _text.addListener(f); + } + + void onScreenChanged(VoidCallback f) { + _screen.addListener(f); + } +} diff --git a/web_embedding/ng-flutter/flutter/lib/src/js_interop/dom.dart b/web_embedding/ng-flutter/flutter/lib/src/js_interop/dom.dart new file mode 100644 index 000000000..acf03c71e --- /dev/null +++ b/web_embedding/ng-flutter/flutter/lib/src/js_interop/dom.dart @@ -0,0 +1,58 @@ +import 'dart:js_interop'; +import 'package:js/js.dart'; +import 'package:js/js_util.dart' as js_util; + +/// This is a little bit of JS-interop code so this Flutter app can dispatch +/// a custom JS event (to be deprecated by package:web) + +@JS('CustomEvent') +@staticInterop +class DomCustomEvent { + external factory DomCustomEvent.withType(JSString type); + external factory DomCustomEvent.withOptions(JSString type, JSAny options); + factory DomCustomEvent._(String type, [Object? options]) { + if (options != null) { + return DomCustomEvent.withOptions( + type.toJS, js_util.jsify(options) as JSAny); + } + return DomCustomEvent.withType(type.toJS); + } +} + +dispatchCustomEvent(DomElement target, String type, Object data) { + final DomCustomEvent event = DomCustomEvent._(type, { + 'bubbles': true, + 'composed': true, + 'detail': data, + }); + + target.dispatchEvent(event); +} + +@JS() +@staticInterop +class DomEventTarget {} + +extension DomEventTargetExtension on DomEventTarget { + @JS('dispatchEvent') + external JSBoolean _dispatchEvent(DomCustomEvent event); + bool dispatchEvent(DomCustomEvent event) => _dispatchEvent(event).toDart; +} + +@JS() +@staticInterop +class DomElement extends DomEventTarget {} + +extension DomElementExtension on DomElement { + @JS('querySelector') + external DomElement? _querySelector(JSString selectors); + DomElement? querySelector(String selectors) => _querySelector(selectors.toJS); +} + +@JS() +@staticInterop +class DomDocument extends DomElement {} + +@JS() +@staticInterop +external DomDocument get document; diff --git a/web_embedding/ng-flutter/flutter/lib/src/js_interop/helper.dart b/web_embedding/ng-flutter/flutter/lib/src/js_interop/helper.dart new file mode 100644 index 000000000..d20a1f2e5 --- /dev/null +++ b/web_embedding/ng-flutter/flutter/lib/src/js_interop/helper.dart @@ -0,0 +1,10 @@ +import 'dom.dart' as dom; + +/// Locates the root of the flutter app (for now, the first element that has +/// a flt-renderer tag), and dispatches a JS event named [name] with [data]. +void broadcastAppEvent(String name, Object data) { + final dom.DomElement? root = dom.document.querySelector('[flt-renderer]'); + assert(root != null, 'Flutter root element cannot be found!'); + + dom.dispatchCustomEvent(root!, name, data); +} diff --git a/web_embedding/ng-flutter/flutter/pubspec.yaml b/web_embedding/ng-flutter/flutter/pubspec.yaml new file mode 100644 index 000000000..57ed9d31f --- /dev/null +++ b/web_embedding/ng-flutter/flutter/pubspec.yaml @@ -0,0 +1,23 @@ +name: ng_companion +description: A flutter app with a counter that can be manipulated from JS. +publish_to: 'none' +version: 1.0.0 + +environment: + sdk: ^3.0.0 + +dependencies: + cupertino_icons: ^1.0.2 + flutter: + sdk: flutter + js: ^0.6.7 + +dev_dependencies: + flutter_test: + sdk: flutter + flutter_lints: ^3.0.0 + +flutter: + uses-material-design: true + assets: + - assets/ diff --git a/web_embedding/ng-flutter/flutter/web/favicon.png b/web_embedding/ng-flutter/flutter/web/favicon.png new file mode 100644 index 000000000..8aaa46ac1 Binary files /dev/null and b/web_embedding/ng-flutter/flutter/web/favicon.png differ diff --git a/web_embedding/ng-flutter/flutter/web/icons/Icon-192.png b/web_embedding/ng-flutter/flutter/web/icons/Icon-192.png new file mode 100644 index 000000000..b749bfef0 Binary files /dev/null and b/web_embedding/ng-flutter/flutter/web/icons/Icon-192.png differ diff --git a/web_embedding/ng-flutter/flutter/web/icons/Icon-512.png b/web_embedding/ng-flutter/flutter/web/icons/Icon-512.png new file mode 100644 index 000000000..88cfd48df Binary files /dev/null and b/web_embedding/ng-flutter/flutter/web/icons/Icon-512.png differ diff --git a/web_embedding/ng-flutter/flutter/web/icons/Icon-maskable-192.png b/web_embedding/ng-flutter/flutter/web/icons/Icon-maskable-192.png new file mode 100644 index 000000000..eb9b4d76e Binary files /dev/null and b/web_embedding/ng-flutter/flutter/web/icons/Icon-maskable-192.png differ diff --git a/web_embedding/ng-flutter/flutter/web/icons/Icon-maskable-512.png b/web_embedding/ng-flutter/flutter/web/icons/Icon-maskable-512.png new file mode 100644 index 000000000..d69c56691 Binary files /dev/null and b/web_embedding/ng-flutter/flutter/web/icons/Icon-maskable-512.png differ diff --git a/web_embedding/ng-flutter/flutter/web/index.html b/web_embedding/ng-flutter/flutter/web/index.html new file mode 100644 index 000000000..bb8a10bc3 --- /dev/null +++ b/web_embedding/ng-flutter/flutter/web/index.html @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + ng_companion + + + + + + + + + + diff --git a/web_embedding/ng-flutter/flutter/web/manifest.json b/web_embedding/ng-flutter/flutter/web/manifest.json new file mode 100644 index 000000000..7717b50a4 --- /dev/null +++ b/web_embedding/ng-flutter/flutter/web/manifest.json @@ -0,0 +1,35 @@ +{ + "name": "ng_companion", + "short_name": "ng_companion", + "start_url": ".", + "display": "standalone", + "background_color": "#0175C2", + "theme_color": "#0175C2", + "description": "A new Flutter project.", + "orientation": "portrait-primary", + "prefer_related_applications": false, + "icons": [ + { + "src": "icons/Icon-192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "icons/Icon-512.png", + "sizes": "512x512", + "type": "image/png" + }, + { + "src": "icons/Icon-maskable-192.png", + "sizes": "192x192", + "type": "image/png", + "purpose": "maskable" + }, + { + "src": "icons/Icon-maskable-512.png", + "sizes": "512x512", + "type": "image/png", + "purpose": "maskable" + } + ] +} diff --git a/web_embedding/ng-flutter/package-lock.json b/web_embedding/ng-flutter/package-lock.json new file mode 100644 index 000000000..cbfd7b0c4 --- /dev/null +++ b/web_embedding/ng-flutter/package-lock.json @@ -0,0 +1,12414 @@ +{ + "name": "ng-flutter", + "version": "0.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "ng-flutter", + "version": "0.0.0", + "dependencies": { + "@angular/animations": "^16.1.8", + "@angular/cdk": "^16.1.7", + "@angular/common": "^16.1.8", + "@angular/compiler": "^16.1.8", + "@angular/core": "^16.1.8", + "@angular/forms": "^16.1.8", + "@angular/material": "^16.1.7", + "@angular/platform-browser": "^16.1.8", + "@angular/platform-browser-dynamic": "^16.1.8", + "@angular/router": "^16.1.8", + "rxjs": "~7.8.1", + "tslib": "^2.6.1", + "zone.js": "~0.13.0" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^16.1.8", + "@angular/cli": "~16.1.8", + "@angular/compiler-cli": "^16.1.8", + "@types/jasmine": "~5.1.0", + "jasmine-core": "~4.6.0", + "karma": "~6.4.2", + "karma-chrome-launcher": "~3.2.0", + "karma-coverage": "~2.2.0", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.0.0", + "typescript": "~5.1.6" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@angular-devkit/architect": { + "version": "0.1601.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/architect/-/architect-0.1601.8.tgz", + "integrity": "sha512-kOXVGwsQnZvtz2UZNefcEy64Jiwq0eSoQUeozvDXOaYRJABLjPKI2YaarvKC9/Z1SGLuje0o/eRJO4T8aRk9rQ==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "16.1.8", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular-devkit/build-angular": { + "version": "16.1.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-angular/-/build-angular-16.1.8.tgz", + "integrity": "sha512-iyElPBQdcJq2plw5YqSz4mzNUfSRXI3ISFTEwPtimzPOorsj/OxB3Z6kJ8fDUsBAJ5OKR7xL7VnQJJ3S+05RhQ==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "2.2.1", + "@angular-devkit/architect": "0.1601.8", + "@angular-devkit/build-webpack": "0.1601.8", + "@angular-devkit/core": "16.1.8", + "@babel/core": "7.22.5", + "@babel/generator": "7.22.7", + "@babel/helper-annotate-as-pure": "7.22.5", + "@babel/helper-split-export-declaration": "7.22.5", + "@babel/plugin-proposal-async-generator-functions": "7.20.7", + "@babel/plugin-transform-async-to-generator": "7.22.5", + "@babel/plugin-transform-runtime": "7.22.5", + "@babel/preset-env": "7.22.5", + "@babel/runtime": "7.22.5", + "@babel/template": "7.22.5", + "@discoveryjs/json-ext": "0.5.7", + "@ngtools/webpack": "16.1.8", + "@vitejs/plugin-basic-ssl": "1.0.1", + "ansi-colors": "4.1.3", + "autoprefixer": "10.4.14", + "babel-loader": "9.1.2", + "babel-plugin-istanbul": "6.1.1", + "browserslist": "^4.21.5", + "cacache": "17.1.3", + "chokidar": "3.5.3", + "copy-webpack-plugin": "11.0.0", + "critters": "0.0.20", + "css-loader": "6.8.1", + "esbuild-wasm": "0.17.19", + "fast-glob": "3.2.12", + "https-proxy-agent": "5.0.1", + "inquirer": "8.2.4", + "jsonc-parser": "3.2.0", + "karma-source-map-support": "1.4.0", + "less": "4.1.3", + "less-loader": "11.1.0", + "license-webpack-plugin": "4.0.2", + "loader-utils": "3.2.1", + "magic-string": "0.30.0", + "mini-css-extract-plugin": "2.7.6", + "mrmime": "1.0.1", + "open": "8.4.2", + "ora": "5.4.1", + "parse5-html-rewriting-stream": "7.0.0", + "picomatch": "2.3.1", + "piscina": "3.2.0", + "postcss": "8.4.24", + "postcss-loader": "7.3.2", + "resolve-url-loader": "5.0.0", + "rxjs": "7.8.1", + "sass": "1.63.2", + "sass-loader": "13.3.1", + "semver": "7.5.3", + "source-map-loader": "4.0.1", + "source-map-support": "0.5.21", + "terser": "5.17.7", + "text-table": "0.2.0", + "tree-kill": "1.2.2", + "tslib": "2.5.3", + "vite": "4.3.9", + "webpack": "5.86.0", + "webpack-dev-middleware": "6.1.1", + "webpack-dev-server": "4.15.0", + "webpack-merge": "5.9.0", + "webpack-subresource-integrity": "5.1.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "optionalDependencies": { + "esbuild": "0.17.19" + }, + "peerDependencies": { + "@angular/compiler-cli": "^16.0.0", + "@angular/localize": "^16.0.0", + "@angular/platform-server": "^16.0.0", + "@angular/service-worker": "^16.0.0", + "jest": "^29.5.0", + "jest-environment-jsdom": "^29.5.0", + "karma": "^6.3.0", + "ng-packagr": "^16.0.0", + "protractor": "^7.0.0", + "tailwindcss": "^2.0.0 || ^3.0.0", + "typescript": ">=4.9.3 <5.2" + }, + "peerDependenciesMeta": { + "@angular/localize": { + "optional": true + }, + "@angular/platform-server": { + "optional": true + }, + "@angular/service-worker": { + "optional": true + }, + "jest": { + "optional": true + }, + "jest-environment-jsdom": { + "optional": true + }, + "karma": { + "optional": true + }, + "ng-packagr": { + "optional": true + }, + "protractor": { + "optional": true + }, + "tailwindcss": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular-devkit/build-angular/node_modules/tslib": { + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.5.3.tgz", + "integrity": "sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==", + "dev": true + }, + "node_modules/@angular-devkit/build-angular/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@angular-devkit/build-webpack": { + "version": "0.1601.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/build-webpack/-/build-webpack-0.1601.8.tgz", + "integrity": "sha512-LUMA3xNnN4IY/FPaqyF6rzba+QVxl3vA+v0l71CBIKNU+Qee6D9xe8KG0Bn7relqDhWZOSHY0nhhO2mBoz4iQg==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1601.8", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "webpack": "^5.30.0", + "webpack-dev-server": "^4.0.0" + } + }, + "node_modules/@angular-devkit/core": { + "version": "16.1.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/core/-/core-16.1.8.tgz", + "integrity": "sha512-dSRD/+bGanArIXkj+kaU1kDFleZeQMzmBiOXX+pK0Ah9/0Yn1VmY3RZh1zcX9vgIQXV+t7UPrTpOjaERMUtVGw==", + "dev": true, + "dependencies": { + "ajv": "8.12.0", + "ajv-formats": "2.1.1", + "jsonc-parser": "3.2.0", + "rxjs": "7.8.1", + "source-map": "0.7.4" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "chokidar": "^3.5.2" + }, + "peerDependenciesMeta": { + "chokidar": { + "optional": true + } + } + }, + "node_modules/@angular-devkit/schematics": { + "version": "16.1.8", + "resolved": "https://registry.npmjs.org/@angular-devkit/schematics/-/schematics-16.1.8.tgz", + "integrity": "sha512-6LyzMdFJs337RTxxkI2U1Ndw0CW5mMX/aXWl8d7cW2odiSrAg8IdlMqpc+AM8+CPfsB0FtS1aWkEZqJLT0jHOg==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "16.1.8", + "jsonc-parser": "3.2.0", + "magic-string": "0.30.0", + "ora": "5.4.1", + "rxjs": "7.8.1" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/animations": { + "version": "16.1.8", + "resolved": "https://registry.npmjs.org/@angular/animations/-/animations-16.1.8.tgz", + "integrity": "sha512-aIAf8EAZomgXMF6AP0wTPAc04Cvw+nL9nkEVwQNVxMByZpcbnnqHWHokLD8es8DzlwDT+EIZS4wZMBA4XUmPyA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/core": "16.1.8" + } + }, + "node_modules/@angular/cdk": { + "version": "16.1.7", + "resolved": "https://registry.npmjs.org/@angular/cdk/-/cdk-16.1.7.tgz", + "integrity": "sha512-KLiqzbilkGBtQcaNdqjN16XyNdQxEkN4Oqbg6coahWqwvEVEdhNwLrwOJcCHMH2vvMzCd4XHaOnAxQjVy5pkjQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "optionalDependencies": { + "parse5": "^7.1.2" + }, + "peerDependencies": { + "@angular/common": "^16.0.0 || ^17.0.0", + "@angular/core": "^16.0.0 || ^17.0.0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/cli": { + "version": "16.1.8", + "resolved": "https://registry.npmjs.org/@angular/cli/-/cli-16.1.8.tgz", + "integrity": "sha512-amOIHMq8EvixhnI+do5Bcy6IZSFAJx0njhhLM4ltDuNUczH8VH0hNegZKxhb8K87AMO8jITFM+NLrzccyghsDQ==", + "dev": true, + "dependencies": { + "@angular-devkit/architect": "0.1601.8", + "@angular-devkit/core": "16.1.8", + "@angular-devkit/schematics": "16.1.8", + "@schematics/angular": "16.1.8", + "@yarnpkg/lockfile": "1.1.0", + "ansi-colors": "4.1.3", + "ini": "4.1.1", + "inquirer": "8.2.4", + "jsonc-parser": "3.2.0", + "npm-package-arg": "10.1.0", + "npm-pick-manifest": "8.0.1", + "open": "8.4.2", + "ora": "5.4.1", + "pacote": "15.2.0", + "resolve": "1.22.2", + "semver": "7.5.3", + "symbol-observable": "4.0.0", + "yargs": "17.7.2" + }, + "bin": { + "ng": "bin/ng.js" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@angular/cli/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular/cli/node_modules/semver": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.3.tgz", + "integrity": "sha512-QBlUtyVk/5EeHbi7X0fw6liDZc7BBmEaSYn01fMU1OUYbf6GPsbTtd8WmnqbI20SeycoHSeiybkE/q1Q+qlThQ==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@angular/cli/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@angular/common": { + "version": "16.1.8", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-16.1.8.tgz", + "integrity": "sha512-Zm+Ysxdf74VwG3mbAqs2v1QFUR+h9RyJBXF5VFABEpgFw7NUOBKrayjJmKjgZ0TBAmL2+nXehJgcPph3zNp3sg==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/core": "16.1.8", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/compiler": { + "version": "16.1.8", + "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-16.1.8.tgz", + "integrity": "sha512-jF2zk3LjrcI/xpjJG6yoLiL2t2l5227i8SjhRUawAL1sy0xtb/PiSLjCNhuSgyixbB/8az/YezZe11MSg48FDg==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/core": "16.1.8" + }, + "peerDependenciesMeta": { + "@angular/core": { + "optional": true + } + } + }, + "node_modules/@angular/compiler-cli": { + "version": "16.1.8", + "resolved": "https://registry.npmjs.org/@angular/compiler-cli/-/compiler-cli-16.1.8.tgz", + "integrity": "sha512-Whk3RBnEYwN0c6Mo7hU6JDpHSyKONmIQEN8ViHJXwmyHK8w+/Z27iBw10QiyWUMtYb4tIM1xSLhRFAwH/3WnPQ==", + "dev": true, + "dependencies": { + "@babel/core": "7.22.5", + "@jridgewell/sourcemap-codec": "^1.4.14", + "chokidar": "^3.0.0", + "convert-source-map": "^1.5.1", + "reflect-metadata": "^0.1.2", + "semver": "^7.0.0", + "tslib": "^2.3.0", + "yargs": "^17.2.1" + }, + "bin": { + "ng-xi18n": "bundles/src/bin/ng_xi18n.js", + "ngc": "bundles/src/bin/ngc.js", + "ngcc": "bundles/ngcc/index.js" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/compiler": "16.1.8", + "typescript": ">=4.9.3 <5.2" + } + }, + "node_modules/@angular/core": { + "version": "16.1.8", + "resolved": "https://registry.npmjs.org/@angular/core/-/core-16.1.8.tgz", + "integrity": "sha512-XtOpY9HA85hPGrPwe1rgE8NJ3bFWbuJFx4SUlzB66k9B5jo8bD2Dxl/0id55RFS5gmvCe/Qhh0zoGyMpkWjMHA==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "rxjs": "^6.5.3 || ^7.4.0", + "zone.js": "~0.13.0" + } + }, + "node_modules/@angular/forms": { + "version": "16.1.8", + "resolved": "https://registry.npmjs.org/@angular/forms/-/forms-16.1.8.tgz", + "integrity": "sha512-V36q42ExvL93T7oYvRf4Z2z2V/kOm0wgaFgkNSiBHgIpuwvrAZ9nRZBui5Fqdnep3xKYd980vAaTtACA1blv3Q==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": "16.1.8", + "@angular/core": "16.1.8", + "@angular/platform-browser": "16.1.8", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/material": { + "version": "16.1.7", + "resolved": "https://registry.npmjs.org/@angular/material/-/material-16.1.7.tgz", + "integrity": "sha512-n4h843O8wjV8xpLk4XmxV3ICDQo+a4Ofk2LZ9ja1KzohgweXOJ3PBpBrVeesToa5EMvuFgejcPwE6sJysxoyUg==", + "dependencies": { + "@material/animation": "15.0.0-canary.b994146f6.0", + "@material/auto-init": "15.0.0-canary.b994146f6.0", + "@material/banner": "15.0.0-canary.b994146f6.0", + "@material/base": "15.0.0-canary.b994146f6.0", + "@material/button": "15.0.0-canary.b994146f6.0", + "@material/card": "15.0.0-canary.b994146f6.0", + "@material/checkbox": "15.0.0-canary.b994146f6.0", + "@material/chips": "15.0.0-canary.b994146f6.0", + "@material/circular-progress": "15.0.0-canary.b994146f6.0", + "@material/data-table": "15.0.0-canary.b994146f6.0", + "@material/density": "15.0.0-canary.b994146f6.0", + "@material/dialog": "15.0.0-canary.b994146f6.0", + "@material/dom": "15.0.0-canary.b994146f6.0", + "@material/drawer": "15.0.0-canary.b994146f6.0", + "@material/elevation": "15.0.0-canary.b994146f6.0", + "@material/fab": "15.0.0-canary.b994146f6.0", + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/floating-label": "15.0.0-canary.b994146f6.0", + "@material/form-field": "15.0.0-canary.b994146f6.0", + "@material/icon-button": "15.0.0-canary.b994146f6.0", + "@material/image-list": "15.0.0-canary.b994146f6.0", + "@material/layout-grid": "15.0.0-canary.b994146f6.0", + "@material/line-ripple": "15.0.0-canary.b994146f6.0", + "@material/linear-progress": "15.0.0-canary.b994146f6.0", + "@material/list": "15.0.0-canary.b994146f6.0", + "@material/menu": "15.0.0-canary.b994146f6.0", + "@material/menu-surface": "15.0.0-canary.b994146f6.0", + "@material/notched-outline": "15.0.0-canary.b994146f6.0", + "@material/radio": "15.0.0-canary.b994146f6.0", + "@material/ripple": "15.0.0-canary.b994146f6.0", + "@material/rtl": "15.0.0-canary.b994146f6.0", + "@material/segmented-button": "15.0.0-canary.b994146f6.0", + "@material/select": "15.0.0-canary.b994146f6.0", + "@material/shape": "15.0.0-canary.b994146f6.0", + "@material/slider": "15.0.0-canary.b994146f6.0", + "@material/snackbar": "15.0.0-canary.b994146f6.0", + "@material/switch": "15.0.0-canary.b994146f6.0", + "@material/tab": "15.0.0-canary.b994146f6.0", + "@material/tab-bar": "15.0.0-canary.b994146f6.0", + "@material/tab-indicator": "15.0.0-canary.b994146f6.0", + "@material/tab-scroller": "15.0.0-canary.b994146f6.0", + "@material/textfield": "15.0.0-canary.b994146f6.0", + "@material/theme": "15.0.0-canary.b994146f6.0", + "@material/tooltip": "15.0.0-canary.b994146f6.0", + "@material/top-app-bar": "15.0.0-canary.b994146f6.0", + "@material/touch-target": "15.0.0-canary.b994146f6.0", + "@material/typography": "15.0.0-canary.b994146f6.0", + "tslib": "^2.3.0" + }, + "peerDependencies": { + "@angular/animations": "^16.0.0 || ^17.0.0", + "@angular/cdk": "16.1.7", + "@angular/common": "^16.0.0 || ^17.0.0", + "@angular/core": "^16.0.0 || ^17.0.0", + "@angular/forms": "^16.0.0 || ^17.0.0", + "@angular/platform-browser": "^16.0.0 || ^17.0.0", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@angular/platform-browser": { + "version": "16.1.8", + "resolved": "https://registry.npmjs.org/@angular/platform-browser/-/platform-browser-16.1.8.tgz", + "integrity": "sha512-wfUCVU7DLMHy5Rw7LY8KSTuLk0ff2bWElT6WSAKXXFEPjQiWuXbbIe+gglJX5HFQQHoyVwNbsSDIIgEp535Kvw==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/animations": "16.1.8", + "@angular/common": "16.1.8", + "@angular/core": "16.1.8" + }, + "peerDependenciesMeta": { + "@angular/animations": { + "optional": true + } + } + }, + "node_modules/@angular/platform-browser-dynamic": { + "version": "16.1.8", + "resolved": "https://registry.npmjs.org/@angular/platform-browser-dynamic/-/platform-browser-dynamic-16.1.8.tgz", + "integrity": "sha512-mhQH78Zn/oFe+U8DmVvPJ0/7neDlnKcgktQ7f1vFNibRLqkmHW/o1vZ0B7CAmO+yzGbB8mt+RBCFAfA7g3oRDg==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": "16.1.8", + "@angular/compiler": "16.1.8", + "@angular/core": "16.1.8", + "@angular/platform-browser": "16.1.8" + } + }, + "node_modules/@angular/router": { + "version": "16.1.8", + "resolved": "https://registry.npmjs.org/@angular/router/-/router-16.1.8.tgz", + "integrity": "sha512-p11Mz0qQbl26fcEEQ9LEUZhKrca9kqSwMWgxBRMWZl0AgtbWQadiVdjiQY0rvpohI7qSO8m3s7CFIQLKIOEvYQ==", + "dependencies": { + "tslib": "^2.3.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0" + }, + "peerDependencies": { + "@angular/common": "16.1.8", + "@angular/core": "16.1.8", + "@angular/platform-browser": "16.1.8", + "rxjs": "^6.5.3 || ^7.4.0" + } + }, + "node_modules/@assemblyscript/loader": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", + "integrity": "sha512-H71nDOOL8Y7kWRLqf6Sums+01Q5msqBW2KhDUTemh1tvY04eSkSXrK0uj/4mmY0Xr16/3zyZmsrxN7CKuRbNRg==", + "dev": true + }, + "node_modules/@babel/code-frame": { + "version": "7.22.13", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.22.13.tgz", + "integrity": "sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==", + "dev": true, + "dependencies": { + "@babel/highlight": "^7.22.13", + "chalk": "^2.4.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.22.9.tgz", + "integrity": "sha512-5UamI7xkUcJ3i9qVDS+KFDEK8/7oJ55/sJMB1Ge7IEapr7KfdfV/HErR+koZwOfd+SgtFKOKRhRakdg++DcJpQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.22.5.tgz", + "integrity": "sha512-SBuTAjg91A3eKOvD+bPEz3LlhHZRNu1nFOVts9lzDJTXshHTjII0BAtDS3Y2DAkdZdDKWVZGVwkDfc4Clxn1dg==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.22.5", + "@babel/generator": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helpers": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.5", + "@babel/types": "^7.22.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.22.7", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.22.7.tgz", + "integrity": "sha512-p+jPjMG+SI8yvIaxGgeW24u7q9+5+TGpZh8/CuB7RhBKd7RCy8FayNEFNNKrNK/eUcY/4ExQqLmyrvBXKsIcwQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.22.5.tgz", + "integrity": "sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.22.10.tgz", + "integrity": "sha512-Av0qubwDQxC56DoUReVDeLfMEjYYSN1nZrTUrWkXd7hpU73ymRANkbuDm3yni9npkn+RXy9nNbEJZEzXr7xrfQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.22.10.tgz", + "integrity": "sha512-JMSwHD4J7SLod0idLq5PKgI+6g/hLD/iuWBq08ZX49xE14VpVEojJ5rHWptpirV2j020MvypRLAXAO50igCJ5Q==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.9", + "@babel/helper-validator-option": "^7.22.5", + "browserslist": "^4.21.9", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.22.10.tgz", + "integrity": "sha512-5IBb77txKYQPpOEdUdIhBx8VrZyDCQ+H82H0+5dX1TmuscP5vJKEE3cKurjtIw/vFwzbVH48VweE78kVDBrqjA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.9", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-create-class-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.22.9.tgz", + "integrity": "sha512-+svjVa/tFwsNSG4NEy1h85+HQ5imbT92Q5/bgtS7P0GTQlP8WuFdqsiABmQouhiFGyV66oGxZFpeYHza1rNsKw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "regexpu-core": "^5.3.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.4.2.tgz", + "integrity": "sha512-k0qnnOqHn5dK9pZpfD5XXZ9SojAITdCKRn2Lp6rnDGzIbaP0rHyMPk/4wsSxVBVz4RfN0q6VpXWP2pDGIoQ7hw==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-plugin-utils": "^7.22.5", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name/node_modules/@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.22.5.tgz", + "integrity": "sha512-aBiH1NKMG0H2cGZqspNvsaBe6wNGjbJjuLy29aU+eDZjSbbN53BaxlpB02xm9v34pLTZ1nIQPFYn2qMZoa5BQQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.5.tgz", + "integrity": "sha512-8Dl6+HD/cKifutF5qGd/8ZJi84QeAKh+CEe1sBzz8UayBBGg1dAIJrdHOcOM5b2MpzWL2yuotJTtGjETq0qjXg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.22.9.tgz", + "integrity": "sha512-t+WA2Xn5K+rTeGtC8jCsdAH52bjggG5TKRuRrAGNM/mjIbO4GxvlLMFOEz9wXY5I2XQ60PMFsAG2WIcG82dQMQ==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-module-transforms/node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.22.5.tgz", + "integrity": "sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", + "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.22.9.tgz", + "integrity": "sha512-8WWC4oR4Px+tr+Fp0X3RHDVfINGpF3ad1HIbrc8A77epiR6eMMc6jsgozkzT2uDiOOdoS9cLIQ+XD2XvI2WSmQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-wrap-function": "^7.22.9" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.22.9", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.22.9.tgz", + "integrity": "sha512-LJIKvvpgPOPUThdYqcX6IXRuIcTkcAub0IaDRGCZH0p5GPUp7PhRU9QVgFcDDd51BaPkk77ZjqFwh6DZTAEmGg==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-member-expression-to-functions": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.22.5.tgz", + "integrity": "sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.5.tgz", + "integrity": "sha512-thqK5QFghPKWLhAV321lxF95yCg2K3Ob5yw+M3VHWfdia0IkPXUtoLH8x/6Fh486QUvzhb8YOWHChTVen2/PoQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz", + "integrity": "sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.22.5.tgz", + "integrity": "sha512-R3oB6xlIVKUnxNUxbmgq7pKjxpru24zlimpE8WK47fACIlM0II/Hm1RS8IaOI7NgCr6LNS+jl5l75m20npAziw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.22.10.tgz", + "integrity": "sha512-OnMhjWjuGYtdoO3FmsEFWvBStBAe2QOgwOLsLNDjN+aaiMD8InJk1/O3HSD8lkqTjCgg5YI34Tz15KNNA3p+nQ==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.22.5", + "@babel/template": "^7.22.5", + "@babel/types": "^7.22.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.22.10.tgz", + "integrity": "sha512-a41J4NW8HyZa1I1vAndrraTlPZ/eZoga2ZgS7fEr0tZJGVU4xqdE80CEm0CcNjha5EZ8fTBYLKHF0kqDUuAwQw==", + "dev": true, + "dependencies": { + "@babel/template": "^7.22.5", + "@babel/traverse": "^7.22.10", + "@babel/types": "^7.22.10" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", + "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.0.tgz", + "integrity": "sha512-vvPKKdMemU85V9WE/l5wZEmImpCtLqbnTvqDS2U1fJ96KrxoW7KrXhNsNCblQlg8Ck4b85yxdTyelsMUgFUXiw==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.22.5.tgz", + "integrity": "sha512-NP1M5Rf+u2Gw9qfSO4ihjcTGW5zXTi36ITLd4/EoAcEhIZ0yjMqmftDNl3QC19CX7olhrjpyU454g/2W7X0jvQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.22.5.tgz", + "integrity": "sha512-31Bb65aZaUwqCbWMnZPduIZxCBngHFlzyN6Dq6KAJjtx+lx6ohKHubc61OomYi7XwVD4Ol0XCVz4h+pYFR048g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.13.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", + "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-private-property-in-object": { + "version": "7.21.0-placeholder-for-preset-env.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz", + "integrity": "sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==", + "dev": true, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-assertions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.22.5.tgz", + "integrity": "sha512-rdV97N7KqsRzeNGoWUOK6yUsWarLjE5Su/Snk9IYPU9CwkWHs4t+rTGOvffTR8XGkJMTAdLfO0xVnXm8wugIJg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.22.5.tgz", + "integrity": "sha512-KwvoWDeNKPETmozyFE0P2rOLqh39EoQHNjqizrI5B8Vt0ZNS7M56s7dAiAqbYfiAYOuIzIh96z3iR2ktgu3tEg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-unicode-sets-regex": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz", + "integrity": "sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.22.5.tgz", + "integrity": "sha512-26lTNXoVRdAnsaDXPpvCNUq+OVWEVC6bx7Vvz9rC53F2bagUWW4u4ii2+h8Fejfh7RYqPxn+libeFBBck9muEw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-generator-functions": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.22.10.tgz", + "integrity": "sha512-eueE8lvKVzq5wIObKK/7dvoeKJ+xc6TvRn6aysIjS6pSCeLy7S/eVi7pEQknZqyqvzaNKdDtem8nUNTBgDVR2g==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.22.5.tgz", + "integrity": "sha512-b1A8D8ZzE/VhNDoV1MSJTnpKkCG5bJo+19R4o4oy03zM7ws8yEMK755j61Dc3EyvdysbqH5BOOTquJ7ZX9C6vQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-remap-async-to-generator": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.22.5.tgz", + "integrity": "sha512-tdXZ2UdknEKQWKJP1KMNmuF5Lx3MymtMN/pvA+p/VEkhK8jVcQ1fzSy8KM9qRYhAf2/lV33hoMPKI/xaI9sADA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.22.10.tgz", + "integrity": "sha512-1+kVpGAOOI1Albt6Vse7c8pHzcZQdQKW+wJH+g8mCaszOdDVwRXa/slHPqIw+oJAJANTKDMuM2cBdV0Dg618Vg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.22.5.tgz", + "integrity": "sha512-nDkQ0NfkOhPTq8YCLiWNxp1+f9fCobEjCb0n8WdbNUBc4IB5V7P1QnX9IjpSoquKrXF5SKojHleVNs2vGeHCHQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-class-static-block": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.22.5.tgz", + "integrity": "sha512-SPToJ5eYZLxlnp1UzdARpOGeC2GbHvr9d/UV0EukuVx8atktg194oe+C5BqQ8jRTkgLRVOPYeXRSBg1IlMoVRA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.22.6.tgz", + "integrity": "sha512-58EgM6nuPNG6Py4Z3zSuu0xWu2VfodiMi72Jt5Kj2FECmaYk1RrTXA45z6KBFsu9tRgwQDwIiY4FXTt+YsSFAQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.6", + "@babel/helper-environment-visitor": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-optimise-call-expression": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes/node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.22.5.tgz", + "integrity": "sha512-4GHWBgRf0krxPX+AaPtgBAlTgTeZmqDynokHOX7aqqAB4tHs3U2Y02zH6ETFdLZGcg9UQSD1WCmkVrE9ErHeOg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/template": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.22.10.tgz", + "integrity": "sha512-dPJrL0VOyxqLM9sritNbMSGx/teueHF/htMKrPT7DNxccXxRDPYqlgPFFdr8u+F+qUZOkZoXue/6rL5O5GduEw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.22.5.tgz", + "integrity": "sha512-5/Yk9QxCQCl+sOIB1WelKnVRxTJDSAIxtJLL2/pqL14ZVlbH0fUQUZa/T5/UnQtBNgghR7mfB8ERBKyKPCi7Vw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.22.5.tgz", + "integrity": "sha512-dEnYD+9BBgld5VBXHnF/DbYGp3fqGMsyxKbtD1mDyIA7AkTSpKXFhCVuj/oQVOoALfBs77DudA0BE4d5mcpmqw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dynamic-import": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.22.5.tgz", + "integrity": "sha512-0MC3ppTB1AMxd8fXjSrbPa7LT9hrImt+/fcj+Pg5YMD7UQyWp/02+JWpdnCymmsXwIx5Z+sYn1bwCn4ZJNvhqQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.22.5.tgz", + "integrity": "sha512-vIpJFNM/FjZ4rh1myqIya9jXwrwwgFRHPjT3DkUA9ZLHuzox8jiXkOLvwm1H+PQIP3CqfC++WPKeuDi0Sjdj1g==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-export-namespace-from": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.22.5.tgz", + "integrity": "sha512-X4hhm7FRnPgd4nDA4b/5V280xCx6oL7Oob5+9qVS5C13Zq4bh1qq7LU0GgRU6b5dBWBvhGaXYVB4AcN6+ol6vg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.22.5.tgz", + "integrity": "sha512-3kxQjX1dU9uudwSshyLeEipvrLjBCVthCgeTp6CzE/9JYrlAIaeekVxRpCWsDDfYTfRZRoCeZatCQvwo+wvK8A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.22.5.tgz", + "integrity": "sha512-UIzQNMS0p0HHiQm3oelztj+ECwFnj+ZRV4KnguvlsD2of1whUeM6o7wGNj6oLwcDoAXQ8gEqfgC24D+VdIcevg==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-function-name": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-json-strings": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.22.5.tgz", + "integrity": "sha512-DuCRB7fu8MyTLbEQd1ew3R85nx/88yMoqo2uPSjevMj3yoN7CDM8jkgrY0wmVxfJZyJ/B9fE1iq7EQppWQmR5A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.22.5.tgz", + "integrity": "sha512-fTLj4D79M+mepcw3dgFBTIDYpbcB9Sm0bpm4ppXPaO+U+PKFFyV9MGRvS0gvGw62sd10kT5lRMKXAADb9pWy8g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-logical-assignment-operators": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.22.5.tgz", + "integrity": "sha512-MQQOUW1KL8X0cDWfbwYP+TbVbZm16QmQXJQ+vndPtH/BoO0lOKpVoEDMI7+PskYxH+IiE0tS8xZye0qr1lGzSA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-member-expression-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.22.5.tgz", + "integrity": "sha512-RZEdkNtzzYCFl9SE9ATaUMTj2hqMb4StarOJLrZRbqqU4HSBE7UlBw9WBWQiDzrJZJdUWiMTVDI6Gv/8DPvfew==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.22.5.tgz", + "integrity": "sha512-R+PTfLTcYEmb1+kK7FNkhQ1gP4KgjpSO6HfH9+f8/yfp2Nt3ggBjiVpRwmwTlfqZLafYKJACy36yDXlEmI9HjQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.22.5.tgz", + "integrity": "sha512-B4pzOXj+ONRmuaQTg05b3y/4DuFz3WcCNAXPLb2Q0GT0TrGKGxNKV4jwsXts+StaM0LQczZbOpj8o1DLPDJIiA==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-simple-access": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.22.5.tgz", + "integrity": "sha512-emtEpoaTMsOs6Tzz+nbmcePl6AKVtS1yC4YNAeMun9U8YCsgadPNxnOPQ8GhHFB2qdx+LZu9LgoC0Lthuu05DQ==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.22.5.tgz", + "integrity": "sha512-+S6kzefN/E1vkSsKx8kmQuqeQsvCKCd1fraCM7zXm4SFoggI099Tr4G8U81+5gtMdUeMQ4ipdQffbKLX0/7dBQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.22.5.tgz", + "integrity": "sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.22.5.tgz", + "integrity": "sha512-AsF7K0Fx/cNKVyk3a+DW0JLo+Ua598/NxMRvxDnkpCIGFh43+h/v2xyhRUYf6oD8gE4QtL83C7zZVghMjHd+iw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-nullish-coalescing-operator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.22.5.tgz", + "integrity": "sha512-6CF8g6z1dNYZ/VXok5uYkkBBICHZPiGEl7oDnAx2Mt1hlHVHOSIKWJaXHjQJA5VB43KZnXZDIexMchY4y2PGdA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-numeric-separator": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.22.5.tgz", + "integrity": "sha512-NbslED1/6M+sXiwwtcAB/nieypGw02Ejf4KtDeMkCEpP6gWFMX1wI9WKYua+4oBneCCEmulOkRpwywypVZzs/g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-rest-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.22.5.tgz", + "integrity": "sha512-Kk3lyDmEslH9DnvCDA1s1kkd3YWQITiBOHngOtDL9Pt6BZjzqb6hiOlb8VfjiiQJ2unmegBqZu0rx5RxJb5vmQ==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.22.5.tgz", + "integrity": "sha512-klXqyaT9trSjIUrcsYIfETAzmOEZL3cBYqOYLJxBHfMFFggmXOv+NYSX/Jbs9mzMVESw/WycLFPRx8ba/b2Ipw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-replace-supers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-catch-binding": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.22.5.tgz", + "integrity": "sha512-pH8orJahy+hzZje5b8e2QIlBWQvGpelS76C63Z+jhZKsmzfNaPQ+LaW6dcJ9bxTpo1mtXbgHwy765Ro3jftmUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-optional-chaining": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.22.10.tgz", + "integrity": "sha512-MMkQqZAZ+MGj+jGTG3OTuhKeBpNcO+0oCEbrGNEaOmiEn+1MzRyQlYsruGiU8RTK3zV6XwrVJTmwiDOyYK6J9g==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.22.5.tgz", + "integrity": "sha512-AVkFUBurORBREOmHRKo06FjHYgjrabpdqRSwq6+C7R5iTCZOsM4QbcB27St0a4U6fffyAOqh3s/qEfybAhfivg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-methods": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.22.5.tgz", + "integrity": "sha512-PPjh4gyrQnGe97JTalgRGMuU4icsZFnWkzicB/fUtzlKUqvsWBKEpPPfr5a2JiyirZkHxnAqkQMO5Z5B2kK3fA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-private-property-in-object": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.22.5.tgz", + "integrity": "sha512-/9xnaTTJcVoBtSSmrVyhtSvO3kbqS2ODoh2juEU72c3aYonNF0OMGiaz2gjukyKM2wBBYJP38S4JiE0Wfb5VMQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.22.5", + "@babel/helper-create-class-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-property-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.22.5.tgz", + "integrity": "sha512-TiOArgddK3mK/x1Qwf5hay2pxI6wCZnvQqrFSqbtg1GLl2JcNMitVH/YnqjP+M31pLUeTfzY1HAXFDnUBV30rQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.22.10.tgz", + "integrity": "sha512-F28b1mDt8KcT5bUyJc/U9nwzw6cV+UmTeRlXYIl2TNqMMJif0Jeey9/RQ3C4NOd2zp0/TRsDns9ttj2L523rsw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "regenerator-transform": "^0.15.2" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-reserved-words": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.22.5.tgz", + "integrity": "sha512-DTtGKFRQUDm8svigJzZHzb/2xatPc6TzNvAIJ5GqOKDsGFYgAskjRulbR/vGsPKq3OPqtexnz327qYpP57RFyA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.22.5.tgz", + "integrity": "sha512-bg4Wxd1FWeFx3daHFTWk1pkSWK/AyQuiyAoeZAOkAOUBjnZPH6KT7eMxouV47tQ6hl6ax2zyAWBdWZXbrvXlaw==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.22.5.tgz", + "integrity": "sha512-vM4fq9IXHscXVKzDv5itkO1X52SmdFBFcMIBZ2FRn2nqVYqw6dBexUgMvAjHW+KXpPPViD/Yo3GrDEBaRC0QYA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.22.5.tgz", + "integrity": "sha512-5ZzDQIGyvN4w8+dMmpohL6MBo+l2G7tfC/O2Dg7/hjpgeWvUx8FzfeOKxGog9IimPa4YekaQ9PlDqTLOljkcxg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.22.5.tgz", + "integrity": "sha512-zf7LuNpHG0iEeiyCNwX4j3gDg1jgt1k3ZdXBKbZSoA3BbGQGvMiSvfbZRR3Dr3aeJe3ooWFZxOOG3IRStYp2Bw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.22.5.tgz", + "integrity": "sha512-5ciOehRNf+EyUeewo8NkbQiUs4d6ZxiHo6BcBcnFlgiJfu16q0bQUw9Jvo0b0gBKFG1SMhDSjeKXSYuJLeFSMA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.22.5.tgz", + "integrity": "sha512-bYkI5lMzL4kPii4HHEEChkD0rkc+nvnlR6+o/qdqR6zrm0Sv/nodmyLhlq2DO0YKLUNd2VePmPRjJXSBh9OIdA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-escapes": { + "version": "7.22.10", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.22.10.tgz", + "integrity": "sha512-lRfaRKGZCBqDlRU3UIFovdp9c9mEvlylmpod0/OatICsSfuQ9YFthRo1tpTkGsklEefZdqlEFdY4A2dwTb6ohg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-property-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.22.5.tgz", + "integrity": "sha512-HCCIb+CbJIAE6sXn5CjFQXMwkCClcOfPCzTlilJ8cUatfzwHlWQkbtV0zD338u9dZskwvuOYTuuaMaA8J5EI5A==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.22.5.tgz", + "integrity": "sha512-028laaOKptN5vHJf9/Arr/HiJekMd41hOEZYvNsrsXqJ7YPYuX2bQxh31fkZzGmq3YqHRJzYFFAVYvKfMPKqyg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-sets-regex": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.22.5.tgz", + "integrity": "sha512-lhMfi4FC15j13eKrh3DnYHjpGj6UKQHtNKTbtc1igvAhRy4+kLhV07OpLcsN0VgDEw/MjAvJO4BdMJsHwMhzCg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.22.5.tgz", + "integrity": "sha512-fj06hw89dpiZzGZtxn+QybifF07nNiZjZ7sazs2aVDcysAZVGjW7+7iFYxg6GLNM47R/thYfLdrXc+2f11Vi9A==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.5", + "@babel/helper-compilation-targets": "^7.22.5", + "@babel/helper-plugin-utils": "^7.22.5", + "@babel/helper-validator-option": "^7.22.5", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.22.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.22.5", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-import-assertions": "^7.22.5", + "@babel/plugin-syntax-import-attributes": "^7.22.5", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.22.5", + "@babel/plugin-transform-async-generator-functions": "^7.22.5", + "@babel/plugin-transform-async-to-generator": "^7.22.5", + "@babel/plugin-transform-block-scoped-functions": "^7.22.5", + "@babel/plugin-transform-block-scoping": "^7.22.5", + "@babel/plugin-transform-class-properties": "^7.22.5", + "@babel/plugin-transform-class-static-block": "^7.22.5", + "@babel/plugin-transform-classes": "^7.22.5", + "@babel/plugin-transform-computed-properties": "^7.22.5", + "@babel/plugin-transform-destructuring": "^7.22.5", + "@babel/plugin-transform-dotall-regex": "^7.22.5", + "@babel/plugin-transform-duplicate-keys": "^7.22.5", + "@babel/plugin-transform-dynamic-import": "^7.22.5", + "@babel/plugin-transform-exponentiation-operator": "^7.22.5", + "@babel/plugin-transform-export-namespace-from": "^7.22.5", + "@babel/plugin-transform-for-of": "^7.22.5", + "@babel/plugin-transform-function-name": "^7.22.5", + "@babel/plugin-transform-json-strings": "^7.22.5", + "@babel/plugin-transform-literals": "^7.22.5", + "@babel/plugin-transform-logical-assignment-operators": "^7.22.5", + "@babel/plugin-transform-member-expression-literals": "^7.22.5", + "@babel/plugin-transform-modules-amd": "^7.22.5", + "@babel/plugin-transform-modules-commonjs": "^7.22.5", + "@babel/plugin-transform-modules-systemjs": "^7.22.5", + "@babel/plugin-transform-modules-umd": "^7.22.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.22.5", + "@babel/plugin-transform-new-target": "^7.22.5", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.22.5", + "@babel/plugin-transform-numeric-separator": "^7.22.5", + "@babel/plugin-transform-object-rest-spread": "^7.22.5", + "@babel/plugin-transform-object-super": "^7.22.5", + "@babel/plugin-transform-optional-catch-binding": "^7.22.5", + "@babel/plugin-transform-optional-chaining": "^7.22.5", + "@babel/plugin-transform-parameters": "^7.22.5", + "@babel/plugin-transform-private-methods": "^7.22.5", + "@babel/plugin-transform-private-property-in-object": "^7.22.5", + "@babel/plugin-transform-property-literals": "^7.22.5", + "@babel/plugin-transform-regenerator": "^7.22.5", + "@babel/plugin-transform-reserved-words": "^7.22.5", + "@babel/plugin-transform-shorthand-properties": "^7.22.5", + "@babel/plugin-transform-spread": "^7.22.5", + "@babel/plugin-transform-sticky-regex": "^7.22.5", + "@babel/plugin-transform-template-literals": "^7.22.5", + "@babel/plugin-transform-typeof-symbol": "^7.22.5", + "@babel/plugin-transform-unicode-escapes": "^7.22.5", + "@babel/plugin-transform-unicode-property-regex": "^7.22.5", + "@babel/plugin-transform-unicode-regex": "^7.22.5", + "@babel/plugin-transform-unicode-sets-regex": "^7.22.5", + "@babel/preset-modules": "^0.1.5", + "@babel/types": "^7.22.5", + "babel-plugin-polyfill-corejs2": "^0.4.3", + "babel-plugin-polyfill-corejs3": "^0.8.1", + "babel-plugin-polyfill-regenerator": "^0.5.0", + "core-js-compat": "^3.30.2", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/preset-modules": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.6.tgz", + "integrity": "sha512-ID2yj6K/4lKfhuU3+EX4UvNbIt7eACFbHmNUjzA+ep+B5971CknnA/9DEWKbRokfbbtblxxxXFJJrH47UEAMVg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true + }, + "node_modules/@babel/runtime": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.5.tgz", + "integrity": "sha512-ecjvYlnAaZ/KVneE/OdKYBYfgXV3Ptu6zQWmgEF7vwKhQnvVS6bjMD2XYgj+SNvQ1GfK/pjgokfPkC/2CO8CuA==", + "dev": true, + "dependencies": { + "regenerator-runtime": "^0.13.11" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.5.tgz", + "integrity": "sha512-X7yV7eiwAxdj9k94NEylvbVHLiVG1nvzCV2EAowhxLTwODV1jl9UzZ48leOC0sH7OnuHrIkllaBgneUykIcZaw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/parser": "^7.22.5", + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.23.2", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.2.tgz", + "integrity": "sha512-azpe59SQ48qG6nu2CzcMLbxUudtN+dOM9kDbUqGq3HXUJRlo7i8fvPoxQUzYgLZ4cMVmuZgm8vvBpNeRhd6XSw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.22.13", + "@babel/generator": "^7.23.0", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.0", + "@babel/types": "^7.23.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/generator": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.0.tgz", + "integrity": "sha512-lN85QRR+5IbYrMWM6Y4pE/noaQtg4pNiqeNGX60eqOfo6gtEj6uw/JagelB8vVztSd7R6M5n1+PQkDbHbBRU4g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.23.0", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "dependencies": { + "@babel/types": "^7.22.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.0.tgz", + "integrity": "sha512-0oIyUfKoI3mSqMvsxBdclDwxXKXAUA8v/apZbc+iSyARYou1o8ZGDxbUYyLFoW2arqS2jDGqJuZvv1d/io1axg==", + "dev": true, + "dependencies": { + "@babel/helper-string-parser": "^7.22.5", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", + "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", + "dev": true, + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@discoveryjs/json-ext": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", + "integrity": "sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/@isaacs/cliui/node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.3.tgz", + "integrity": "sha512-b+fsZXeLYi9fEULmfBrhxn4IrPlINf8fiNarzTof004v3lFdntdwa9PF7vFJqm3mg7s+ScJMxXaE3Acp1irZcg==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + } + }, + "node_modules/@jridgewell/trace-mapping/node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", + "integrity": "sha512-Hcv+nVC0kZnQ3tD9GVu5xSMR4VVYOteQIr/hwFPVEvPdlXqgGEuRjiheChHgdM+JyqdgNcmzZOX/tnl0JOiI7A==", + "dev": true + }, + "node_modules/@material/animation": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/animation/-/animation-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-kqqzG54tabYJ5VsBur5k1bqCFQCEpaW3hmLRMiSVVxRY7XgTt7qkuOOz48gs+MPqR6P8VIi6gFpuscV1+DWDhw==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/auto-init": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/auto-init/-/auto-init-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-8nLe/XeueJg5yyYx5e4UxWQXpTDyUhibKfyroGwnRKc8pdpOCOulHSOj/fIVGJAIbxkEJoebwMadWUNCjUhc9A==", + "dependencies": { + "@material/base": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/banner": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/banner/-/banner-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-gJ4/VdP4dJgHP72Kdjy2f/UjHB45J4CuxoGvI0NIQYUjOSsr4kQiQHsjVgyEPZR/5wa7kBhM7/0mJ+zF7Ghv2A==", + "dependencies": { + "@material/base": "15.0.0-canary.b994146f6.0", + "@material/button": "15.0.0-canary.b994146f6.0", + "@material/dom": "15.0.0-canary.b994146f6.0", + "@material/elevation": "15.0.0-canary.b994146f6.0", + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/ripple": "15.0.0-canary.b994146f6.0", + "@material/rtl": "15.0.0-canary.b994146f6.0", + "@material/shape": "15.0.0-canary.b994146f6.0", + "@material/theme": "15.0.0-canary.b994146f6.0", + "@material/tokens": "15.0.0-canary.b994146f6.0", + "@material/typography": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/base": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/base/-/base-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-rW2upYD5YjRFBL6DzYn3SCRhtvpEDkwplDS810e3vt71uLMRyqXyw4OQJH+Nab/t+32TFDtKNUphXIzwICXGDQ==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/button": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/button/-/button-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-SMyqtsvJuCqpXBz2JgciuR6wddNJSGpTXUFxmLbGluBy5/hHm06JWlOFcUOxGDv46OdRGGrRfkg6A9JtvtsJsw==", + "dependencies": { + "@material/density": "15.0.0-canary.b994146f6.0", + "@material/dom": "15.0.0-canary.b994146f6.0", + "@material/elevation": "15.0.0-canary.b994146f6.0", + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/focus-ring": "15.0.0-canary.b994146f6.0", + "@material/ripple": "15.0.0-canary.b994146f6.0", + "@material/rtl": "15.0.0-canary.b994146f6.0", + "@material/shape": "15.0.0-canary.b994146f6.0", + "@material/theme": "15.0.0-canary.b994146f6.0", + "@material/tokens": "15.0.0-canary.b994146f6.0", + "@material/touch-target": "15.0.0-canary.b994146f6.0", + "@material/typography": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/card": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/card/-/card-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-WSggGon91HcDhJyatnYLFkoM9glkkeJjyjFDWrcJkwN1rdrPJU+GH+PNjvmArz5hGv9WkmjDjhOdAuPnL4Mb7g==", + "dependencies": { + "@material/dom": "15.0.0-canary.b994146f6.0", + "@material/elevation": "15.0.0-canary.b994146f6.0", + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/ripple": "15.0.0-canary.b994146f6.0", + "@material/rtl": "15.0.0-canary.b994146f6.0", + "@material/shape": "15.0.0-canary.b994146f6.0", + "@material/theme": "15.0.0-canary.b994146f6.0", + "@material/tokens": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/checkbox": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/checkbox/-/checkbox-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-pulRiwG9S/dS6WBG+GteODBltddFiL0Sb7HAqdzF2BTKNKv25q1ZIR3ftoEa09TNeWM88AOzTJ4aBHiADfJn2w==", + "dependencies": { + "@material/animation": "15.0.0-canary.b994146f6.0", + "@material/base": "15.0.0-canary.b994146f6.0", + "@material/density": "15.0.0-canary.b994146f6.0", + "@material/dom": "15.0.0-canary.b994146f6.0", + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/focus-ring": "15.0.0-canary.b994146f6.0", + "@material/ripple": "15.0.0-canary.b994146f6.0", + "@material/rtl": "15.0.0-canary.b994146f6.0", + "@material/theme": "15.0.0-canary.b994146f6.0", + "@material/touch-target": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/chips": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/chips/-/chips-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-3yJPj7x+eKLA4LMKG7aTWI+itAnKRVGOcniuR6aiXVy0OKr5asNuWNeZc9J0/VErjjxF3tdybDzDSPo01qPy9w==", + "dependencies": { + "@material/animation": "15.0.0-canary.b994146f6.0", + "@material/base": "15.0.0-canary.b994146f6.0", + "@material/checkbox": "15.0.0-canary.b994146f6.0", + "@material/density": "15.0.0-canary.b994146f6.0", + "@material/dom": "15.0.0-canary.b994146f6.0", + "@material/elevation": "15.0.0-canary.b994146f6.0", + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/focus-ring": "15.0.0-canary.b994146f6.0", + "@material/ripple": "15.0.0-canary.b994146f6.0", + "@material/rtl": "15.0.0-canary.b994146f6.0", + "@material/shape": "15.0.0-canary.b994146f6.0", + "@material/theme": "15.0.0-canary.b994146f6.0", + "@material/tokens": "15.0.0-canary.b994146f6.0", + "@material/touch-target": "15.0.0-canary.b994146f6.0", + "@material/typography": "15.0.0-canary.b994146f6.0", + "safevalues": "^0.3.4", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/circular-progress": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/circular-progress/-/circular-progress-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-6YUvGXdtZKJoE7AuovR4xk1aiWp/EDZ6j2U3TOeynd1assQQCg5XT4abqAoHtpJrRPaCFgUAp836HyiDVVuYug==", + "dependencies": { + "@material/animation": "15.0.0-canary.b994146f6.0", + "@material/base": "15.0.0-canary.b994146f6.0", + "@material/dom": "15.0.0-canary.b994146f6.0", + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/progress-indicator": "15.0.0-canary.b994146f6.0", + "@material/rtl": "15.0.0-canary.b994146f6.0", + "@material/theme": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/data-table": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/data-table/-/data-table-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-v4hIduIe/wzyibuL/RPM/ErYrt8XpB7fxyQqtV+0JsMpFa8E81QYyvMCS9EJj9m4YdkrQnZgA+vXQlOkhWvmdQ==", + "dependencies": { + "@material/animation": "15.0.0-canary.b994146f6.0", + "@material/base": "15.0.0-canary.b994146f6.0", + "@material/checkbox": "15.0.0-canary.b994146f6.0", + "@material/density": "15.0.0-canary.b994146f6.0", + "@material/dom": "15.0.0-canary.b994146f6.0", + "@material/elevation": "15.0.0-canary.b994146f6.0", + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/icon-button": "15.0.0-canary.b994146f6.0", + "@material/linear-progress": "15.0.0-canary.b994146f6.0", + "@material/list": "15.0.0-canary.b994146f6.0", + "@material/menu": "15.0.0-canary.b994146f6.0", + "@material/rtl": "15.0.0-canary.b994146f6.0", + "@material/select": "15.0.0-canary.b994146f6.0", + "@material/shape": "15.0.0-canary.b994146f6.0", + "@material/theme": "15.0.0-canary.b994146f6.0", + "@material/tokens": "15.0.0-canary.b994146f6.0", + "@material/touch-target": "15.0.0-canary.b994146f6.0", + "@material/typography": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/density": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/density/-/density-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-m8l0vuoWSoAPItBpWp5eZDvitUcB2JWoO8V486hLgdveVcKgXG09xWM43ScH+PLXAWjzr5olDEuJ2tvfkN3SpQ==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/dialog": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/dialog/-/dialog-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-JucU92yh8cfZQpyRBunHr6uohacePLYmhcPaGpkAGQ1b+zCznEsNs55tjhaVQNoj91XA9rrBqtL6Otg+fxFJtQ==", + "dependencies": { + "@material/animation": "15.0.0-canary.b994146f6.0", + "@material/base": "15.0.0-canary.b994146f6.0", + "@material/button": "15.0.0-canary.b994146f6.0", + "@material/dom": "15.0.0-canary.b994146f6.0", + "@material/elevation": "15.0.0-canary.b994146f6.0", + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/icon-button": "15.0.0-canary.b994146f6.0", + "@material/ripple": "15.0.0-canary.b994146f6.0", + "@material/rtl": "15.0.0-canary.b994146f6.0", + "@material/shape": "15.0.0-canary.b994146f6.0", + "@material/theme": "15.0.0-canary.b994146f6.0", + "@material/tokens": "15.0.0-canary.b994146f6.0", + "@material/touch-target": "15.0.0-canary.b994146f6.0", + "@material/typography": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/dom": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/dom/-/dom-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-DiUsTezrCi4iytjIn7xXoXZSNFvuTrVVZgc7cR9cW8yu2Hpz8bPf87PacVn4IP9OsNwy/dCDMk1Kcq/DMh7gXQ==", + "dependencies": { + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/rtl": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/drawer": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/drawer/-/drawer-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-Kbuf32V0eX69amvCVbAjNSabNDerZWyG8ip466EfQHRh0OUZwvsbhLp9FZOB7AyR+/bQiHf3mVLcombOdmdkcQ==", + "dependencies": { + "@material/animation": "15.0.0-canary.b994146f6.0", + "@material/base": "15.0.0-canary.b994146f6.0", + "@material/dom": "15.0.0-canary.b994146f6.0", + "@material/elevation": "15.0.0-canary.b994146f6.0", + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/list": "15.0.0-canary.b994146f6.0", + "@material/ripple": "15.0.0-canary.b994146f6.0", + "@material/rtl": "15.0.0-canary.b994146f6.0", + "@material/shape": "15.0.0-canary.b994146f6.0", + "@material/theme": "15.0.0-canary.b994146f6.0", + "@material/typography": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/elevation": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/elevation/-/elevation-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-l2YDNgBajSI6oA2l6gaeYCTGHRao657syqQ/tv95/Hkcee9900A4RrsxCwSxOqqAs5pZZDEJ33kFJjj27nqZDw==", + "dependencies": { + "@material/animation": "15.0.0-canary.b994146f6.0", + "@material/base": "15.0.0-canary.b994146f6.0", + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/rtl": "15.0.0-canary.b994146f6.0", + "@material/theme": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/fab": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/fab/-/fab-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-ExyDVkNWINpns41Ahj4u8I/OhiVkqI0nmcqjFRtgTJMmKEd4NhlvqIxE7gakAlyS68riJu5UleqTSTVmt8mv2Q==", + "dependencies": { + "@material/animation": "15.0.0-canary.b994146f6.0", + "@material/dom": "15.0.0-canary.b994146f6.0", + "@material/elevation": "15.0.0-canary.b994146f6.0", + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/focus-ring": "15.0.0-canary.b994146f6.0", + "@material/ripple": "15.0.0-canary.b994146f6.0", + "@material/rtl": "15.0.0-canary.b994146f6.0", + "@material/shape": "15.0.0-canary.b994146f6.0", + "@material/theme": "15.0.0-canary.b994146f6.0", + "@material/tokens": "15.0.0-canary.b994146f6.0", + "@material/touch-target": "15.0.0-canary.b994146f6.0", + "@material/typography": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/feature-targeting": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/feature-targeting/-/feature-targeting-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-HR/FjSQmza98B1DF80MRjODyfOI9r7wXkPSts/cLQsYkpwZ5uJmxhvQKjDCeYVpMV0lQuvuvVOQo7uD44TdWEg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/floating-label": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/floating-label/-/floating-label-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-g64talBNWCS0FUfLWal0uB637gUciSIqYxFzSW//LglTtbZLGK2J4+9gAEswQGnKeO4ux08EN2n1ZcMDYQ58ow==", + "dependencies": { + "@material/animation": "15.0.0-canary.b994146f6.0", + "@material/base": "15.0.0-canary.b994146f6.0", + "@material/dom": "15.0.0-canary.b994146f6.0", + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/rtl": "15.0.0-canary.b994146f6.0", + "@material/theme": "15.0.0-canary.b994146f6.0", + "@material/typography": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/focus-ring": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/focus-ring/-/focus-ring-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-87qEMuXsCvlQfTiimnzJUZoebnIXWcMtRZevNLymN9Y0t9jGckQxZPmrI0llRkpyiR/Ewhec5SI/JGrFlYHnsA==", + "dependencies": { + "@material/dom": "15.0.0-canary.b994146f6.0", + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/rtl": "15.0.0-canary.b994146f6.0" + } + }, + "node_modules/@material/form-field": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/form-field/-/form-field-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-Tg1SQQaopvXMyDEYxGTWnhCWQmNcWVIoKMLmle9P/gi2p8ulcj0iOCPYf+3ECqUBVozOmTPKlYOOiRwtKStAeA==", + "dependencies": { + "@material/base": "15.0.0-canary.b994146f6.0", + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/ripple": "15.0.0-canary.b994146f6.0", + "@material/rtl": "15.0.0-canary.b994146f6.0", + "@material/theme": "15.0.0-canary.b994146f6.0", + "@material/typography": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/icon-button": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/icon-button/-/icon-button-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-X6DvOv4jpymHUjI7ZAbO946nDgGYKDwPZfkRzBE84gv2XEr2qfMuABhojxkYubRbt03oauBdcJVVMFCXkVhArQ==", + "dependencies": { + "@material/base": "15.0.0-canary.b994146f6.0", + "@material/density": "15.0.0-canary.b994146f6.0", + "@material/dom": "15.0.0-canary.b994146f6.0", + "@material/elevation": "15.0.0-canary.b994146f6.0", + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/focus-ring": "15.0.0-canary.b994146f6.0", + "@material/ripple": "15.0.0-canary.b994146f6.0", + "@material/rtl": "15.0.0-canary.b994146f6.0", + "@material/theme": "15.0.0-canary.b994146f6.0", + "@material/touch-target": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/image-list": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/image-list/-/image-list-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-kf903XFF1P+V5ZPXCt+7R6c55g4UyQE1ZHkTViCIJfd52gU40bHODMhTQy/ywBkwDeJfNk8uf1V1IM24WQYpxA==", + "dependencies": { + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/shape": "15.0.0-canary.b994146f6.0", + "@material/theme": "15.0.0-canary.b994146f6.0", + "@material/typography": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/layout-grid": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/layout-grid/-/layout-grid-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-OALBSGue8g1/mEwLYYi2d950dJFpNYKW87jPS9/KM65JKMyxoU7tU2d4An1BuyqK0r9sopGq6Pn/zhill0iLaw==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/line-ripple": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/line-ripple/-/line-ripple-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-evjZxCu4iodiKtW8N0xjY8ACRXm3sY+4rAmq3vV5BmHWAJ3BobjbFYslDMZQ+4mu3HmwMatbJehKxHegahitNg==", + "dependencies": { + "@material/animation": "15.0.0-canary.b994146f6.0", + "@material/base": "15.0.0-canary.b994146f6.0", + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/theme": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/linear-progress": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/linear-progress/-/linear-progress-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-jlXh+tIj+/o0Ks7fHdC/24fH6IXCAl2vF52U6NwT39ESrlwmlLhp3gtag5GSBHN5E7Z09nK871Yo1G/b1F+COg==", + "dependencies": { + "@material/animation": "15.0.0-canary.b994146f6.0", + "@material/base": "15.0.0-canary.b994146f6.0", + "@material/dom": "15.0.0-canary.b994146f6.0", + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/progress-indicator": "15.0.0-canary.b994146f6.0", + "@material/rtl": "15.0.0-canary.b994146f6.0", + "@material/theme": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/list": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/list/-/list-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-kY/i6VvFBb/W3VvCPvWRMzWvu7mvNFJ+R8ijfawDoAXiv4fj42GO4iFyTcFXaUevEPKp791pN/09BMJQ6jYEvA==", + "dependencies": { + "@material/base": "15.0.0-canary.b994146f6.0", + "@material/density": "15.0.0-canary.b994146f6.0", + "@material/dom": "15.0.0-canary.b994146f6.0", + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/ripple": "15.0.0-canary.b994146f6.0", + "@material/rtl": "15.0.0-canary.b994146f6.0", + "@material/shape": "15.0.0-canary.b994146f6.0", + "@material/theme": "15.0.0-canary.b994146f6.0", + "@material/tokens": "15.0.0-canary.b994146f6.0", + "@material/typography": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/menu": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/menu/-/menu-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-y6smNmLJ+U0DoXWbyqzW+VW/uWDuklhdGHc5MbZrTOhsKkhvoTVNMSOa+NFPU4gTwrplvUjaUvnIsQ0wygwD3g==", + "dependencies": { + "@material/base": "15.0.0-canary.b994146f6.0", + "@material/dom": "15.0.0-canary.b994146f6.0", + "@material/elevation": "15.0.0-canary.b994146f6.0", + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/list": "15.0.0-canary.b994146f6.0", + "@material/menu-surface": "15.0.0-canary.b994146f6.0", + "@material/ripple": "15.0.0-canary.b994146f6.0", + "@material/rtl": "15.0.0-canary.b994146f6.0", + "@material/shape": "15.0.0-canary.b994146f6.0", + "@material/theme": "15.0.0-canary.b994146f6.0", + "@material/tokens": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/menu-surface": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/menu-surface/-/menu-surface-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-StmM3lrRn1iMEZfq532jpMNppqyBBy68FbPurKEsHuP/3q+CscfnwjrS9ym+JcHqXKMHnQXbL/49ymffRGX2AQ==", + "dependencies": { + "@material/animation": "15.0.0-canary.b994146f6.0", + "@material/base": "15.0.0-canary.b994146f6.0", + "@material/elevation": "15.0.0-canary.b994146f6.0", + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/rtl": "15.0.0-canary.b994146f6.0", + "@material/shape": "15.0.0-canary.b994146f6.0", + "@material/theme": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/notched-outline": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/notched-outline/-/notched-outline-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-UZxU8jXM2t/bk/CiO0K+TSPspuJRZIyrYlIS0gd+qq/u8Gi2DpALBlLAh9Jeu46IUg4YGlPsNWYfe8p3QAVyoA==", + "dependencies": { + "@material/base": "15.0.0-canary.b994146f6.0", + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/floating-label": "15.0.0-canary.b994146f6.0", + "@material/rtl": "15.0.0-canary.b994146f6.0", + "@material/shape": "15.0.0-canary.b994146f6.0", + "@material/theme": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/progress-indicator": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/progress-indicator/-/progress-indicator-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-VT+mOQhohaM+pBX1rknbVOI6JCGKg9NiOHBoYljIvnexNeILE+mW9g6mtQ0ZCJPz0oMmiSAMLcuxMIcBXx84Xw==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/@material/radio": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/radio/-/radio-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-U/RR2lVNWwEO2+kJtGz9XzvnOF0gAZn1krMY0z/eU9Wnl0OgPZbqQrxXMoVNv1pzKYSEwZQEGado/rv8qp7piA==", + "dependencies": { + "@material/animation": "15.0.0-canary.b994146f6.0", + "@material/base": "15.0.0-canary.b994146f6.0", + "@material/density": "15.0.0-canary.b994146f6.0", + "@material/dom": "15.0.0-canary.b994146f6.0", + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/focus-ring": "15.0.0-canary.b994146f6.0", + "@material/ripple": "15.0.0-canary.b994146f6.0", + "@material/theme": "15.0.0-canary.b994146f6.0", + "@material/touch-target": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/ripple": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/ripple/-/ripple-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-WzIbc8wYTzMOczqGXVCBPdNcv/73Ef8FwcQYsscGMaqCzgVsdpoqilTfsx7Ryyz6dQbyfmJqp7s+YpPujcezOA==", + "dependencies": { + "@material/animation": "15.0.0-canary.b994146f6.0", + "@material/base": "15.0.0-canary.b994146f6.0", + "@material/dom": "15.0.0-canary.b994146f6.0", + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/rtl": "15.0.0-canary.b994146f6.0", + "@material/theme": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/rtl": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/rtl/-/rtl-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-H/W6BVn4Ygfkrf/FgSrNhbu1uY7PST2wlsjEYQt06EfAM0CDHEwSL1MwV4FmpQA/r40Q0PqoLN6moDrtCe5S8g==", + "dependencies": { + "@material/theme": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/segmented-button": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/segmented-button/-/segmented-button-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-jd+f4BTnU0tghxBpAM/XdVmruDXSoQ88TYSFWbrhulS+/c/ooCZURWvVC4mHNej+QR/fODkx4adbqkBiwwCtMw==", + "dependencies": { + "@material/base": "15.0.0-canary.b994146f6.0", + "@material/elevation": "15.0.0-canary.b994146f6.0", + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/ripple": "15.0.0-canary.b994146f6.0", + "@material/theme": "15.0.0-canary.b994146f6.0", + "@material/touch-target": "15.0.0-canary.b994146f6.0", + "@material/typography": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/select": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/select/-/select-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-5thEQS+B17JSm3I8D+mqQe2G3ArVnXJALTEEE9FmMUKwKYkrsLplm3FYuEXERZGJnYeTRdkdmhYY/YeocfZoyA==", + "dependencies": { + "@material/animation": "15.0.0-canary.b994146f6.0", + "@material/base": "15.0.0-canary.b994146f6.0", + "@material/density": "15.0.0-canary.b994146f6.0", + "@material/dom": "15.0.0-canary.b994146f6.0", + "@material/elevation": "15.0.0-canary.b994146f6.0", + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/floating-label": "15.0.0-canary.b994146f6.0", + "@material/line-ripple": "15.0.0-canary.b994146f6.0", + "@material/list": "15.0.0-canary.b994146f6.0", + "@material/menu": "15.0.0-canary.b994146f6.0", + "@material/menu-surface": "15.0.0-canary.b994146f6.0", + "@material/notched-outline": "15.0.0-canary.b994146f6.0", + "@material/ripple": "15.0.0-canary.b994146f6.0", + "@material/rtl": "15.0.0-canary.b994146f6.0", + "@material/shape": "15.0.0-canary.b994146f6.0", + "@material/theme": "15.0.0-canary.b994146f6.0", + "@material/tokens": "15.0.0-canary.b994146f6.0", + "@material/typography": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/shape": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/shape/-/shape-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-sINM3gr3aLgdvqZVfqfXV5EB77owLLJjy+2NqchJ8ZPqucCJ+F/BsCBfLA2Wu3O4Sc9IpAEn/o1hzYm/CWAFAw==", + "dependencies": { + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/rtl": "15.0.0-canary.b994146f6.0", + "@material/theme": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/slider": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/slider/-/slider-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-dyT72+Kp//AEajJxDUVoMoizUjf2uggVMGXOaQ7FhpGHuf7LC3EyEjrrJ15efFzYgTjdJUU1YQkCwGmdt6CQsA==", + "dependencies": { + "@material/animation": "15.0.0-canary.b994146f6.0", + "@material/base": "15.0.0-canary.b994146f6.0", + "@material/dom": "15.0.0-canary.b994146f6.0", + "@material/elevation": "15.0.0-canary.b994146f6.0", + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/ripple": "15.0.0-canary.b994146f6.0", + "@material/rtl": "15.0.0-canary.b994146f6.0", + "@material/theme": "15.0.0-canary.b994146f6.0", + "@material/tokens": "15.0.0-canary.b994146f6.0", + "@material/typography": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/snackbar": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/snackbar/-/snackbar-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-fEhPASJossScNpcrNYrrH8uU+rUf6+kw7/ZMrpUzzz1lVXliL28jTNEmU1nFpcDI4M2GXH+Z64f7vl2hiMDG8g==", + "dependencies": { + "@material/animation": "15.0.0-canary.b994146f6.0", + "@material/base": "15.0.0-canary.b994146f6.0", + "@material/button": "15.0.0-canary.b994146f6.0", + "@material/dom": "15.0.0-canary.b994146f6.0", + "@material/elevation": "15.0.0-canary.b994146f6.0", + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/icon-button": "15.0.0-canary.b994146f6.0", + "@material/ripple": "15.0.0-canary.b994146f6.0", + "@material/rtl": "15.0.0-canary.b994146f6.0", + "@material/shape": "15.0.0-canary.b994146f6.0", + "@material/theme": "15.0.0-canary.b994146f6.0", + "@material/tokens": "15.0.0-canary.b994146f6.0", + "@material/typography": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/switch": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/switch/-/switch-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-czCXTUa30ILIf1J3exiuSVIRcodGATHexd3eWDq4sfHo4iMh4rBMaIxcqkmnb2iwE/mMTNyVfoauijx2QiNKrA==", + "dependencies": { + "@material/animation": "15.0.0-canary.b994146f6.0", + "@material/base": "15.0.0-canary.b994146f6.0", + "@material/density": "15.0.0-canary.b994146f6.0", + "@material/dom": "15.0.0-canary.b994146f6.0", + "@material/elevation": "15.0.0-canary.b994146f6.0", + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/focus-ring": "15.0.0-canary.b994146f6.0", + "@material/ripple": "15.0.0-canary.b994146f6.0", + "@material/rtl": "15.0.0-canary.b994146f6.0", + "@material/shape": "15.0.0-canary.b994146f6.0", + "@material/theme": "15.0.0-canary.b994146f6.0", + "@material/tokens": "15.0.0-canary.b994146f6.0", + "safevalues": "^0.3.4", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/tab": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/tab/-/tab-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-ygswooiNdBNNDnQdbPX0nzDQu7oQlHo8vWZ0/xL4IPVEXabY5zCzsEbGNZw2u/syo56c/NHPyMsUmXDGRSXOvQ==", + "dependencies": { + "@material/base": "15.0.0-canary.b994146f6.0", + "@material/elevation": "15.0.0-canary.b994146f6.0", + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/focus-ring": "15.0.0-canary.b994146f6.0", + "@material/ripple": "15.0.0-canary.b994146f6.0", + "@material/rtl": "15.0.0-canary.b994146f6.0", + "@material/tab-indicator": "15.0.0-canary.b994146f6.0", + "@material/theme": "15.0.0-canary.b994146f6.0", + "@material/tokens": "15.0.0-canary.b994146f6.0", + "@material/typography": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/tab-bar": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/tab-bar/-/tab-bar-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-F9NegACnFEWMu1pAAypV4Jd7qROeffkvEgVO28Xxk/CvzZxFz8kAjYJZ+rI6RUhPX3BhXzwsz/AlLwsJMT2tnA==", + "dependencies": { + "@material/animation": "15.0.0-canary.b994146f6.0", + "@material/base": "15.0.0-canary.b994146f6.0", + "@material/density": "15.0.0-canary.b994146f6.0", + "@material/elevation": "15.0.0-canary.b994146f6.0", + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/tab": "15.0.0-canary.b994146f6.0", + "@material/tab-indicator": "15.0.0-canary.b994146f6.0", + "@material/tab-scroller": "15.0.0-canary.b994146f6.0", + "@material/theme": "15.0.0-canary.b994146f6.0", + "@material/tokens": "15.0.0-canary.b994146f6.0", + "@material/typography": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/tab-indicator": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/tab-indicator/-/tab-indicator-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-8IH/DmwlZhQlw/2Y3aKrEvjEhZB+qbKUiyaij3BkTAexvyFeDBh5cLNjRpYkUJSGeSPhS6yu4SYzMHPmQEwQmA==", + "dependencies": { + "@material/animation": "15.0.0-canary.b994146f6.0", + "@material/base": "15.0.0-canary.b994146f6.0", + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/theme": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/tab-scroller": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/tab-scroller/-/tab-scroller-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-1MeWkr62OICfTv8oqhIZe6jFo0dKeMlUfB+/WcgnpoeMBszCOSlx5tQ4pedxUkuR3I+Z7rsTfSN0LavgF8bATA==", + "dependencies": { + "@material/animation": "15.0.0-canary.b994146f6.0", + "@material/base": "15.0.0-canary.b994146f6.0", + "@material/dom": "15.0.0-canary.b994146f6.0", + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/tab": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/textfield": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/textfield/-/textfield-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-Kxb3DoJ5o8u3Y1gRMHKmWrDl1TirVxuf/UFrxPFiCE3J1SqiE2VQpakiD1emZwp+LSKtbRsQ/iILYLB/h7Wuvw==", + "dependencies": { + "@material/animation": "15.0.0-canary.b994146f6.0", + "@material/base": "15.0.0-canary.b994146f6.0", + "@material/density": "15.0.0-canary.b994146f6.0", + "@material/dom": "15.0.0-canary.b994146f6.0", + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/floating-label": "15.0.0-canary.b994146f6.0", + "@material/line-ripple": "15.0.0-canary.b994146f6.0", + "@material/notched-outline": "15.0.0-canary.b994146f6.0", + "@material/ripple": "15.0.0-canary.b994146f6.0", + "@material/rtl": "15.0.0-canary.b994146f6.0", + "@material/shape": "15.0.0-canary.b994146f6.0", + "@material/theme": "15.0.0-canary.b994146f6.0", + "@material/tokens": "15.0.0-canary.b994146f6.0", + "@material/typography": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/theme": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/theme/-/theme-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-5tsZ92dAeUcZ9g9CrIkqX/GYc0M5DIfsydtI1PAidaBzr1Uokuh4rTZVQZBv7gyglF0yDua59lkb0I6wI9vxXg==", + "dependencies": { + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/tokens": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/tokens/-/tokens-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-jFqU7PtvGkrP8b8i2soCrYQInTrnZ1/rIPDi+Xm3sa/qSghCNwFrdJEqwcwtv1fPlJIOtzkIuVRYRmAP9rXQIQ==", + "dependencies": { + "@material/elevation": "15.0.0-canary.b994146f6.0" + } + }, + "node_modules/@material/tooltip": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/tooltip/-/tooltip-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-bVzydXGn3fauHJ8pkh32DsdyRJXleeFQ4t7jZ/rcRik+n4G1BvYiblfuu3Z/OCC0m3TJDyMdJhd+sLqRDqLUUg==", + "dependencies": { + "@material/animation": "15.0.0-canary.b994146f6.0", + "@material/base": "15.0.0-canary.b994146f6.0", + "@material/button": "15.0.0-canary.b994146f6.0", + "@material/dom": "15.0.0-canary.b994146f6.0", + "@material/elevation": "15.0.0-canary.b994146f6.0", + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/rtl": "15.0.0-canary.b994146f6.0", + "@material/shape": "15.0.0-canary.b994146f6.0", + "@material/theme": "15.0.0-canary.b994146f6.0", + "@material/tokens": "15.0.0-canary.b994146f6.0", + "@material/typography": "15.0.0-canary.b994146f6.0", + "safevalues": "^0.3.4", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/top-app-bar": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/top-app-bar/-/top-app-bar-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-VHq0wX3OJE1TKvjO8Qtlu+rv5EGoqAhNLBcEjpUUGoqHH/gpd356FEuIqJId4pUh5jaWf8T4ZU9xVbQGMtntzw==", + "dependencies": { + "@material/animation": "15.0.0-canary.b994146f6.0", + "@material/base": "15.0.0-canary.b994146f6.0", + "@material/elevation": "15.0.0-canary.b994146f6.0", + "@material/ripple": "15.0.0-canary.b994146f6.0", + "@material/rtl": "15.0.0-canary.b994146f6.0", + "@material/shape": "15.0.0-canary.b994146f6.0", + "@material/theme": "15.0.0-canary.b994146f6.0", + "@material/typography": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/touch-target": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/touch-target/-/touch-target-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-X26Y9OWvIqYOHo+sC2VMvOoeQWlUR3/yb7uPdfq92Y44zlQ4Vexgq7nEUblEiXQ8Fj+d0T9rIhRh1y9PP3Z2dw==", + "dependencies": { + "@material/base": "15.0.0-canary.b994146f6.0", + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/rtl": "15.0.0-canary.b994146f6.0", + "@material/theme": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@material/typography": { + "version": "15.0.0-canary.b994146f6.0", + "resolved": "https://registry.npmjs.org/@material/typography/-/typography-15.0.0-canary.b994146f6.0.tgz", + "integrity": "sha512-sWU5W30WWqdw5P6bsRx9AbvMNcz/QvQg56Syr06V6nfgSztpeuo7TfPk2J+N0ArRALo1mUrkAPk66iWYQ2p/QA==", + "dependencies": { + "@material/feature-targeting": "15.0.0-canary.b994146f6.0", + "@material/theme": "15.0.0-canary.b994146f6.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@ngtools/webpack": { + "version": "16.1.8", + "resolved": "https://registry.npmjs.org/@ngtools/webpack/-/webpack-16.1.8.tgz", + "integrity": "sha512-co2SC1a822655Ek2f6fkMFsswHeCm2obNceb0kftLSpqomCgPAC3T447pB3TE1Iw+BEMFdjrAgIrp3nyYWwHsQ==", + "dev": true, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + }, + "peerDependencies": { + "@angular/compiler-cli": "^16.0.0", + "typescript": ">=4.9.3 <5.2", + "webpack": "^5.54.0" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/fs": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-3.1.0.tgz", + "integrity": "sha512-7kZUAaLscfgbwBQRbvdMYaZOWyMEcPTH/tJjnyAWJ/dvvs9Ef+CERx/qJb9GExJpl1qipaDGn7KqHnFGGixd0w==", + "dev": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-4.1.0.tgz", + "integrity": "sha512-9hwoB3gStVfa0N31ymBmrX+GuDGdVA/QWShZVqE0HK2Af+7QGGrCTbZia/SW0ImUTjTne7SP91qxDmtXvDHRPQ==", + "dev": true, + "dependencies": { + "@npmcli/promise-spawn": "^6.0.0", + "lru-cache": "^7.4.4", + "npm-pick-manifest": "^8.0.0", + "proc-log": "^3.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-2.0.2.tgz", + "integrity": "sha512-xACzLPhnfD51GKvTOOuNX2/V4G4mz9/1I2MfDoye9kBM3RYe5g2YbscsaGoTlaWqkxeiapBWyseULVKpSVHtKQ==", + "dev": true, + "dependencies": { + "npm-bundled": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "bin": { + "installed-package-contents": "lib/index.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-3.0.0.tgz", + "integrity": "sha512-gp8pRXC2oOxu0DUE1/M3bYtb1b3/DbJ5aM113+XJBgfXdussRAsX0YOrOhdd8WvnAR6auDBvJomGAkLKA5ydxA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-6.0.2.tgz", + "integrity": "sha512-gGq0NJkIGSwdbUt4yhdF8ZrmkGKVz9vAdVzpOfnom+V8PLSmSOVhZwbNvZZS1EYcJN5hzzKBxmmVVAInM6HQLg==", + "dev": true, + "dependencies": { + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-6.0.2.tgz", + "integrity": "sha512-NCcr1uQo1k5U+SYlnIrbAh3cxy+OQT1VtqiAbxdymSlptbzBb62AjH2xXgjNCoP073hoa1CfCAcwoZ8k96C4nA==", + "dev": true, + "dependencies": { + "@npmcli/node-gyp": "^3.0.0", + "@npmcli/promise-spawn": "^6.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^3.0.0", + "which": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-3.0.1.tgz", + "integrity": "sha512-XA1b62dzQzLfaEOSQFTCOd5KFf/1VSzZo7/7TUjnya6u0vGGKzU96UQBZTAThCb2j4/xjBAyii1OhRLJEivHvg==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/which.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@schematics/angular": { + "version": "16.1.8", + "resolved": "https://registry.npmjs.org/@schematics/angular/-/angular-16.1.8.tgz", + "integrity": "sha512-gTHy1A/E9BCr0sj3VCr6eBYkgVkO96QWiZcFumedGnvstvp5wiCoIoJPLLfYaxVt1vt08xmnmS3OZ3r0qCLdpA==", + "dev": true, + "dependencies": { + "@angular-devkit/core": "16.1.8", + "@angular-devkit/schematics": "16.1.8", + "jsonc-parser": "3.2.0" + }, + "engines": { + "node": "^16.14.0 || >=18.10.0", + "npm": "^6.11.0 || ^7.5.6 || >=8.0.0", + "yarn": ">= 1.13.0" + } + }, + "node_modules/@sigstore/bundle": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-1.0.0.tgz", + "integrity": "sha512-yLvrWDOh6uMOUlFCTJIZEnwOT9Xte7NPXUqVexEKGSF5XtBAuSg5du0kn3dRR0p47a4ah10Y0mNt8+uyeQXrBQ==", + "dev": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.2.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/protobuf-specs": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.2.0.tgz", + "integrity": "sha512-8ZhZKAVfXjIspDWwm3D3Kvj0ddbJ0HqDZ/pOs5cx88HpT8mVsotFrg7H1UMnXOuDHz6Zykwxn4mxG3QLuN+RUg==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@sigstore/tuf": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-1.0.3.tgz", + "integrity": "sha512-2bRovzs0nJZFlCN3rXirE4gwxCn97JNjMmwpecqlbgV9WcxX7WRuIrgzx/X7Ib7MYRbyUTpBYE0s2x6AmZXnlg==", + "dev": true, + "dependencies": { + "@sigstore/protobuf-specs": "^0.2.0", + "tuf-js": "^1.1.7" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@socket.io/component-emitter": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@socket.io/component-emitter/-/component-emitter-3.1.0.tgz", + "integrity": "sha512-+9jVqKhRSpsc591z5vX+X5Yyw+he/HCB4iQ/RYxw35CEPaY1gnsNE43nf9n9AaYjAQrTiI/mOwKUKdUs9vf7Xg==", + "dev": true + }, + "node_modules/@tootallnate/once": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", + "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tufjs/canonical-json": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-1.0.0.tgz", + "integrity": "sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-1.0.4.tgz", + "integrity": "sha512-qaGV9ltJP0EO25YfFUPhxRVK0evXFIAGicsVXuRim4Ed9cjPxYhNnNJ49SFmbeLgtxpslIkX317IgpfcHPVj/A==", + "dev": true, + "dependencies": { + "@tufjs/canonical-json": "1.0.0", + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@types/body-parser": { + "version": "1.19.2", + "resolved": "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.19.2.tgz", + "integrity": "sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==", + "dev": true, + "dependencies": { + "@types/connect": "*", + "@types/node": "*" + } + }, + "node_modules/@types/bonjour": { + "version": "3.5.10", + "resolved": "https://registry.npmjs.org/@types/bonjour/-/bonjour-3.5.10.tgz", + "integrity": "sha512-p7ienRMiS41Nu2/igbJxxLDWrSZ0WxM8UQgCeO9KhoVF7cOVFkrKsiDr1EsJIla8vV3oEEjGcz11jc5yimhzZw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect": { + "version": "3.4.35", + "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz", + "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/connect-history-api-fallback": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@types/connect-history-api-fallback/-/connect-history-api-fallback-1.5.0.tgz", + "integrity": "sha512-4x5FkPpLipqwthjPsF7ZRbOv3uoLUFkTA9G9v583qi4pACvq0uTELrB8OLUzPWUI4IJIyvM85vzkV1nyiI2Lig==", + "dev": true, + "dependencies": { + "@types/express-serve-static-core": "*", + "@types/node": "*" + } + }, + "node_modules/@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "dev": true + }, + "node_modules/@types/cors": { + "version": "2.8.13", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.13.tgz", + "integrity": "sha512-RG8AStHlUiV5ysZQKq97copd2UmVYw3/pRMLefISZ3S1hK104Cwm7iLQ3fTKx+lsUH2CE8FlLaYeEA2LSeqYUA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/eslint": { + "version": "8.37.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.37.0.tgz", + "integrity": "sha512-Piet7dG2JBuDIfohBngQ3rCt7MgO9xCO4xIMKxBThCq5PNRB91IjlJ10eJVwfoNtvTErmxLzwBZ7rHZtbOMmFQ==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/@types/eslint-scope/-/eslint-scope-3.7.4.tgz", + "integrity": "sha512-9K4zoImiZc3HlIp6AVUDE4CWYx22a+lhSZMYNpbjW04+YF0KWj4pJXnEMjdnFTiQibFFmElcsasJXDbdI/EPhA==", + "dev": true, + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", + "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", + "dev": true + }, + "node_modules/@types/express": { + "version": "4.17.17", + "resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.17.tgz", + "integrity": "sha512-Q4FmmuLGBG58btUnfS1c1r/NQdlp3DMfGDGig8WhfpA2YRUtEkxAjkZb0yvplJGYdF1fsQ81iMDcH24sSCNC/Q==", + "dev": true, + "dependencies": { + "@types/body-parser": "*", + "@types/express-serve-static-core": "^4.17.33", + "@types/qs": "*", + "@types/serve-static": "*" + } + }, + "node_modules/@types/express-serve-static-core": { + "version": "4.17.35", + "resolved": "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.17.35.tgz", + "integrity": "sha512-wALWQwrgiB2AWTT91CB62b6Yt0sNHpznUXeZEcnPU3DRdlDIz74x8Qg1UUYKSVFi+va5vKOLYRBI1bRKiLLKIg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "@types/qs": "*", + "@types/range-parser": "*", + "@types/send": "*" + } + }, + "node_modules/@types/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@types/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-/K3ds8TRAfBvi5vfjuz8y6+GiAYBZ0x4tXv1Av6CWBWn0IlADc+ZX9pMq7oU0fNQPnBwIZl3rmeLp6SBApbxSQ==", + "dev": true + }, + "node_modules/@types/http-proxy": { + "version": "1.17.11", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.11.tgz", + "integrity": "sha512-HC8G7c1WmaF2ekqpnFq626xd3Zz0uvaqFmBJNRZCGEZCXkvSdJoNFn/8Ygbd9fKNQj8UzLdCETaI0UWPAjK7IA==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/jasmine": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@types/jasmine/-/jasmine-5.1.0.tgz", + "integrity": "sha512-XOV0KsqXNX2gUSqk05RWeolIMgaAQ7+l/ozOBoQ8NGwLg+E7J9vgagODtNgfim4jCzEUP0oJ3gnXeC+Zv+Xi1A==", + "dev": true + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "node_modules/@types/mime": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.2.tgz", + "integrity": "sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.1.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.1.0.tgz", + "integrity": "sha512-O+z53uwx64xY7D6roOi4+jApDGFg0qn6WHcxe5QeqjMaTezBO/mxdfFXIVAVVyNWKx84OmPB3L8kbVYOTeN34A==", + "dev": true + }, + "node_modules/@types/qs": { + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.7.tgz", + "integrity": "sha512-FGa1F62FT09qcrueBA6qYTrJPVDzah9a+493+o2PCXsesWHIn27G98TsSMs3WPNbZIEj4+VJf6saSFpvD+3Zsw==", + "dev": true + }, + "node_modules/@types/range-parser": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.4.tgz", + "integrity": "sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==", + "dev": true + }, + "node_modules/@types/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "dev": true + }, + "node_modules/@types/send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/@types/send/-/send-0.17.1.tgz", + "integrity": "sha512-Cwo8LE/0rnvX7kIIa3QHCkcuF21c05Ayb0ZfxPiv0W8VRiZiNW/WuRupHKpqqGVGf7SUA44QSOUKaEd9lIrd/Q==", + "dev": true, + "dependencies": { + "@types/mime": "^1", + "@types/node": "*" + } + }, + "node_modules/@types/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@types/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-d/Hs3nWDxNL2xAczmOVZNj92YZCS6RGxfBPjKzuu/XirCgXdpKEb88dYNbrYGint6IVWLNP+yonwVAuRC0T2Dg==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/serve-static": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.15.2.tgz", + "integrity": "sha512-J2LqtvFYCzaj8pVYKw8klQXrLLk7TBZmQ4ShlcdkELFKGwGMfevMLneMMRkMgZxotOD9wg497LpC7O8PcvAmfw==", + "dev": true, + "dependencies": { + "@types/http-errors": "*", + "@types/mime": "*", + "@types/node": "*" + } + }, + "node_modules/@types/sockjs": { + "version": "0.3.33", + "resolved": "https://registry.npmjs.org/@types/sockjs/-/sockjs-0.3.33.tgz", + "integrity": "sha512-f0KEEe05NvUnat+boPTZ0dgaLZ4SfSouXUgv5noUiefG2ajgKjmETo9ZJyuqsl7dfl2aHlLJUiki6B4ZYldiiw==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ws": { + "version": "8.5.5", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", + "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "dev": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@vitejs/plugin-basic-ssl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-basic-ssl/-/plugin-basic-ssl-1.0.1.tgz", + "integrity": "sha512-pcub+YbFtFhaGRTo1832FQHQSHvMrlb43974e2eS8EKleR3p1cDdkJFPci1UhwkEf1J9Bz+wKBSzqpKp7nNj2A==", + "dev": true, + "engines": { + "node": ">=14.6.0" + }, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0" + } + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.11.5.tgz", + "integrity": "sha512-LHY/GSAZZRpsNQH+/oHqhRQ5FT7eoULcBqgfyTB5nQHogFnK3/7QoN7dLnwSE/JkUAF0SrRuclT7ODqMFtWxxQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.11.5.tgz", + "integrity": "sha512-1j1zTIC5EZOtCplMBG/IEwLtUojtwFVwdyVMbL/hwWqbzlQoJsWCOavrdnLkemwNoC/EOwtUFch3fuo+cbcXYQ==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.11.5.tgz", + "integrity": "sha512-L65bDPmfpY0+yFrsgz8b6LhXmbbs38OnwDCf6NpnMUYqa+ENfE5Dq9E42ny0qz/PdR0LJyq/T5YijPnU8AXEpA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.11.5.tgz", + "integrity": "sha512-fDKo1gstwFFSfacIeH5KfwzjykIE6ldh1iH9Y/8YkAZrhmu4TctqYjSh7t0K2VyDSXOZJ1MLhht/k9IvYGcIxg==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-numbers/-/helper-numbers-1.11.5.tgz", + "integrity": "sha512-DhykHXM0ZABqfIGYNv93A5KKDw/+ywBFnuWybZZWcuzWHfbp21wUfRkbtz7dMGwGgT4iXjWuhRMA2Mzod6W4WA==", + "dev": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.5", + "@webassemblyjs/helper-api-error": "1.11.5", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.11.5.tgz", + "integrity": "sha512-oC4Qa0bNcqnjAowFn7MPCETQgDYytpsfvz4ujZz63Zu/a/v71HeCAAmZsgZ3YVKec3zSPYytG3/PrRCqbtcAvA==", + "dev": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.11.5.tgz", + "integrity": "sha512-uEoThA1LN2NA+K3B9wDo3yKlBfVtC6rh0i4/6hvbz071E8gTNZD/pT0MsBf7MeD6KbApMSkaAK0XeKyOZC7CIA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.11.5.tgz", + "integrity": "sha512-37aGq6qVL8A8oPbPrSGMBcp38YZFXcHfiROflJn9jxSdSMMM5dS5P/9e2/TpaJuhE+wFrbukN2WI6Hw9MH5acg==", + "dev": true, + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.11.5.tgz", + "integrity": "sha512-ajqrRSXaTJoPW+xmkfYN6l8VIeNnR4vBOTQO9HzR7IygoCcKWkICbKFbVTNMjMgMREqXEr0+2M6zukzM47ZUfQ==", + "dev": true, + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.11.5.tgz", + "integrity": "sha512-WiOhulHKTZU5UPlRl53gHR8OxdGsSOxqfpqWeA2FmcwBMaoEdz6b2x2si3IwC9/fSPLfe8pBMRTHVMk5nlwnFQ==", + "dev": true + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.11.5.tgz", + "integrity": "sha512-C0p9D2fAu3Twwqvygvf42iGCQ4av8MFBLiTb+08SZ4cEdwzWx9QeAHDo1E2k+9s/0w1DM40oflJOpkZ8jW4HCQ==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/helper-wasm-section": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5", + "@webassemblyjs/wasm-opt": "1.11.5", + "@webassemblyjs/wasm-parser": "1.11.5", + "@webassemblyjs/wast-printer": "1.11.5" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.11.5.tgz", + "integrity": "sha512-14vteRlRjxLK9eSyYFvw1K8Vv+iPdZU0Aebk3j6oB8TQiQYuO6hj9s4d7qf6f2HJr2khzvNldAFG13CgdkAIfA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/ieee754": "1.11.5", + "@webassemblyjs/leb128": "1.11.5", + "@webassemblyjs/utf8": "1.11.5" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.11.5.tgz", + "integrity": "sha512-tcKwlIXstBQgbKy1MlbDMlXaxpucn42eb17H29rawYLxm5+MsEmgPzeCP8B1Cl69hCice8LeKgZpRUAPtqYPgw==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-buffer": "1.11.5", + "@webassemblyjs/wasm-gen": "1.11.5", + "@webassemblyjs/wasm-parser": "1.11.5" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.11.5.tgz", + "integrity": "sha512-SVXUIwsLQlc8srSD7jejsfTU83g7pIGr2YYNb9oHdtldSxaOhvA5xwvIiWIfcX8PlSakgqMXsLpLfbbJ4cBYew==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@webassemblyjs/helper-api-error": "1.11.5", + "@webassemblyjs/helper-wasm-bytecode": "1.11.5", + "@webassemblyjs/ieee754": "1.11.5", + "@webassemblyjs/leb128": "1.11.5", + "@webassemblyjs/utf8": "1.11.5" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.5", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.11.5.tgz", + "integrity": "sha512-f7Pq3wvg3GSPUPzR0F6bmI89Hdb+u9WXrSKc4v+N0aV0q6r42WoF92Jp2jEorBEBRoRNXgjp53nBniDXcqZYPA==", + "dev": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.5", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", + "dev": true + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, + "node_modules/abab": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", + "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", + "dev": true + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/acorn-import-assertions/-/acorn-import-assertions-1.9.0.tgz", + "integrity": "sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==", + "dev": true, + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/adjust-sourcemap-loader": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/adjust-sourcemap-loader/-/adjust-sourcemap-loader-4.0.0.tgz", + "integrity": "sha512-OXwN5b9pCUXNQHJpwwD2qP40byEmSgzj8B4ydSN0uMNYWiFmJ6x6KwUllMmfk8Rwu/HJDFR7U8ubsWBoN0Xp0A==", + "dev": true, + "dependencies": { + "loader-utils": "^2.0.0", + "regex-parser": "^2.2.11" + }, + "engines": { + "node": ">=8.9" + } + }, + "node_modules/adjust-sourcemap-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agentkeepalive": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz", + "integrity": "sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==", + "dev": true, + "dependencies": { + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", + "dev": true, + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.3" + }, + "peerDependencies": { + "ajv": "^8.8.2" + } + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "node_modules/are-we-there-yet": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz", + "integrity": "sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==", + "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "node_modules/autoprefixer": { + "version": "10.4.14", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.14.tgz", + "integrity": "sha512-FQzyfOsTlwVzjHxKEqRIAdJx9niO6VCBCoEwax/VLSoQF29ggECcPuBqUMZ+u8jCZOPSy8b8/8KnuFbp0SaFZQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], + "dependencies": { + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001464", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/babel-loader": { + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/babel-loader/-/babel-loader-9.1.2.tgz", + "integrity": "sha512-mN14niXW43tddohGl8HPu5yfQq70iUThvFL/4QzESA7GcZoC0eVOhvWdQ8+3UlSjaDE9MVtsW9mxDY07W7VpVA==", + "dev": true, + "dependencies": { + "find-cache-dir": "^3.3.2", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "peerDependencies": { + "@babel/core": "^7.12.0", + "webpack": ">=5" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.4.5", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.5.tgz", + "integrity": "sha512-19hwUH5FKl49JEsvyTcoHakh6BE0wgXLLptIyKZ3PijHc/Ci521wygORCUCCred+E/twuqRyAkE02BAWPmsHOg==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.22.6", + "@babel/helper-define-polyfill-provider": "^0.4.2", + "semver": "^6.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.8.3.tgz", + "integrity": "sha512-z41XaniZL26WLrvjy7soabMXrfPWARN25PZoriDEiLMxAp50AUW3t35BGQUMg5xK3UrpVTtagIDklxYa+MhiNA==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.2", + "core-js-compat": "^3.31.0" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.5.2.tgz", + "integrity": "sha512-tAlOptU0Xj34V1Y2PNTL4Y0FOJMDB6bZmoW39FeCQIhigGLkqu3Fj6uiXpxIf6Ij274ENdYx64y6Au+ZKlb1IA==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.4.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0 || ^8.0.0-0 <8.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true, + "engines": { + "node": "^4.5.0 || >= 5.9" + } + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/bonjour-service": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/bonjour-service/-/bonjour-service-1.1.1.tgz", + "integrity": "sha512-Z/5lQRMOG9k7W+FkeGTNjh7htqn/2LMnfOvBZ8pynNZCM9MwkQkI3zeI4oz09uWdcgmgHugVvBqxGg4VQJ5PCg==", + "dev": true, + "dependencies": { + "array-flatten": "^2.1.2", + "dns-equal": "^1.0.0", + "fast-deep-equal": "^3.1.3", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", + "dev": true + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.21.10", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.10.tgz", + "integrity": "sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001517", + "electron-to-chromium": "^1.4.477", + "node-releases": "^2.0.13", + "update-browserslist-db": "^1.0.11" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true + }, + "node_modules/builtins": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", + "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", + "dev": true, + "dependencies": { + "semver": "^7.0.0" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "17.1.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-17.1.3.tgz", + "integrity": "sha512-jAdjGxmPxZh0IipMdR7fK/4sDSrHMLUV0+GvVUsjwyGNKHsh79kW/otg+GkbXwl6Uzvy9wsvHOX4nUoWldeZMg==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^3.1.0", + "fs-minipass": "^3.0.0", + "glob": "^10.2.2", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "p-map": "^4.0.0", + "ssri": "^10.0.0", + "tar": "^6.1.11", + "unique-filename": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001519", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001519.tgz", + "integrity": "sha512-0QHgqR+Jv4bxHMp8kZ1Kn8CH55OikjKJ6JmKkZYP1F3D7w+lnFXF70nG5eNfsZS89jadi5Ywy5UCSKLAglIRkg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "dev": true, + "engines": { + "node": ">=6.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.9.0.tgz", + "integrity": "sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", + "dev": true + }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "bin": { + "color-support": "bin.js" + } + }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/compression/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/compression/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/compression/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/connect-history-api-fallback/-/connect-history-api-fallback-2.0.0.tgz", + "integrity": "sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/convert-source-map": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", + "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", + "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "node_modules/copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "dependencies": { + "is-what": "^3.14.1" + }, + "funding": { + "url": "https://github.com/sponsors/mesqueeb" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-11.0.0.tgz", + "integrity": "sha512-fX2MWpamkW0hZxMEg0+mYnA40LTosOSa5TqZ9GYIBzyJa9C3QUaMPSE2xAi/buNr8u89SfD9wHSQVBzrRa/SOQ==", + "dev": true, + "dependencies": { + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.1", + "globby": "^13.1.1", + "normalize-path": "^3.0.0", + "schema-utils": "^4.0.0", + "serialize-javascript": "^6.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/core-js-compat": { + "version": "3.32.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.32.0.tgz", + "integrity": "sha512-7a9a3D1k4UCVKnLhrgALyFcP7YCsLOQIxPd0dKjf/6GuPcgyiGP70ewWdCGrSK7evyhymi0qO4EqCmSJofDeYw==", + "dev": true, + "dependencies": { + "browserslist": "^4.21.9" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", + "dev": true + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cosmiconfig": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.2.0.tgz", + "integrity": "sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==", + "dev": true, + "dependencies": { + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "parse-json": "^5.0.0", + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + } + }, + "node_modules/cosmiconfig/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/cosmiconfig/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/critters": { + "version": "0.0.20", + "resolved": "https://registry.npmjs.org/critters/-/critters-0.0.20.tgz", + "integrity": "sha512-CImNRorKOl5d8TWcnAz5n5izQ6HFsvz29k327/ELy6UFcmbiZNOsinaKvzv16WZR0P6etfSWYzE47C4/56B3Uw==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "css-select": "^5.1.0", + "dom-serializer": "^2.0.0", + "domhandler": "^5.0.2", + "htmlparser2": "^8.0.2", + "postcss": "^8.4.23", + "pretty-bytes": "^5.3.0" + } + }, + "node_modules/critters/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/critters/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/critters/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/critters/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/critters/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/critters/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-loader": { + "version": "6.8.1", + "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-6.8.1.tgz", + "integrity": "sha512-xDAXtEVGlD0gJ07iclwWVkLoZOpEvAWaSyf6W18S2pOC//K8+qUDIx8IIT3D+HjnmkJPQeesOPv5aiUaJsCM2g==", + "dev": true, + "dependencies": { + "icss-utils": "^5.1.0", + "postcss": "^8.4.21", + "postcss-modules-extract-imports": "^3.0.0", + "postcss-modules-local-by-default": "^4.0.3", + "postcss-modules-scope": "^3.0.0", + "postcss-modules-values": "^4.0.0", + "postcss-value-parser": "^4.2.0", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/custom-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/custom-event/-/custom-event-1.0.1.tgz", + "integrity": "sha512-GAj5FOq0Hd+RsCGVJxZuKaIDXDf3h6GQoNEjFgbLLI/trgtavwUbSnZ5pVfg27DVCaWjIohryS0JFwIJyT2cMg==", + "dev": true + }, + "node_modules/date-format": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/date-format/-/date-format-4.0.14.tgz", + "integrity": "sha512-39BOQLs9ZjKh0/patS9nrT8wc3ioX3/eA/zgbKNopnF2wCqJEoxywwwElATYvRsXdnOxA/OQeQoFZ3rFjVajhg==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/default-gateway": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-6.0.3.tgz", + "integrity": "sha512-fwSOJsbbNzZ/CUFpqFBqYfYNLj1NbMPm8MMCIzHjC83iSJRBEGmDUxU+WP661BaBQImeC2yHwXtz+P/O9o+XEg==", + "dev": true, + "dependencies": { + "execa": "^5.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/defaults": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "node_modules/di": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/di/-/di-0.0.1.tgz", + "integrity": "sha512-uJaamHkagcZtHPqCIHZxnFrXlunQXgBOsZSUOWwFw31QJCAbyTBoHMW75YOTur5ZNx8pIeAKgf6GWIgaqqiLhA==", + "dev": true + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", + "dev": true + }, + "node_modules/dns-packet": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.0.tgz", + "integrity": "sha512-rza3UH1LwdHh9qyPXp8lkwpjSNk/AMD3dPytUoRoqnypDUhY0xvbdmVhWOfxO68frEfV9BU8V12Ez7ZsHGZpCQ==", + "dev": true, + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dom-serialize": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/dom-serialize/-/dom-serialize-2.2.1.tgz", + "integrity": "sha512-Yra4DbvoW7/Z6LBN560ZwXMjoNOSAN2wRsKFGc4iBeso+mpIA6qj1vfdf9HpMaKAqG6wXTy+1SYEzmNpKXOSsQ==", + "dev": true, + "dependencies": { + "custom-event": "~1.0.0", + "ent": "~2.2.0", + "extend": "^3.0.0", + "void-elements": "^2.0.0" + } + }, + "node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ] + }, + "node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dev": true, + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dev": true, + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.4.488", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.488.tgz", + "integrity": "sha512-Dv4sTjiW7t/UWGL+H8ZkgIjtUAVZDgb/PwGWvMsCT7jipzUV/u5skbLXPFKb6iV0tiddVi/bcS2/kUrczeWgIQ==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/engine.io": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.4.2.tgz", + "integrity": "sha512-FKn/3oMiJjrOEOeUub2WCox6JhxBXq/Zn3fZOMCBxKnNYtsdKjxhl7yR3fZhM9PV+rdE75SU5SYMc+2PGzo+Tg==", + "dev": true, + "dependencies": { + "@types/cookie": "^0.4.1", + "@types/cors": "^2.8.12", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~5.0.3", + "ws": "~8.11.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/engine.io-parser": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.0.6.tgz", + "integrity": "sha512-tjuoZDMAdEhVnSFleYPCtdL2GXwVTGtNjoeJd9IhIG3C1xs9uwxqRNEu5WpnDZCaozwVlK/nuQhpodhXSIMaxw==", + "dev": true, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", + "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/ent": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/ent/-/ent-2.2.0.tgz", + "integrity": "sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==", + "dev": true + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "devOptional": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dev": true, + "optional": true, + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-module-lexer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-1.2.1.tgz", + "integrity": "sha512-9978wrXM50Y4rTMmW5kXIC09ZdXQZqkE4mxhwkd8VbzsGkXGPgV4zWuqQJgCEzYngdo2dYDa0l8xhX4fkSwJSg==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + }, + "node_modules/esbuild-wasm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild-wasm/-/esbuild-wasm-0.17.19.tgz", + "integrity": "sha512-X9UQEMJMZXwlGCfqcBmJ1jEa+KrLfd+gCBypO/TSzo5hZvbVwFqpxj1YCuX54ptTF75wxmrgorR4RL40AKtLVg==", + "dev": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter-asyncresource": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/eventemitter-asyncresource/-/eventemitter-asyncresource-1.0.0.tgz", + "integrity": "sha512-39F7TBIV0G7gTelxwbEqnwhp90eqCPON1k0NwNfwhgKn4Co4ybUbj2pECcXT0B3ztRKZ7Pw1JujUUgmQJHcVAQ==", + "dev": true + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.1.tgz", + "integrity": "sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==", + "dev": true + }, + "node_modules/express": { + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "node_modules/express/node_modules/body-parser": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/express/node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/express/node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/express/node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/express/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "node_modules/fast-glob": { + "version": "3.2.12", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", + "integrity": "sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", + "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/finalhandler/node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + } + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/flatted": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.7.tgz", + "integrity": "sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==", + "dev": true + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", + "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-minipass": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.2.tgz", + "integrity": "sha512-2GAfyfoaCDRrM6jaOS3UsBts8yJ55VioXdWcOL7dK9zdAuKT71+WBA4ifnNYqVjYv+4SsPxjK0JT4yIIn4cA/g==", + "dev": true, + "dependencies": { + "minipass": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/fs-monkey": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.4.tgz", + "integrity": "sha512-INM/fWAxMICjttnD0DX1rBvinKskj5G1w+oy/pnm9u/tSlnBrzFonJMcalKJ30P8RRsPzKcCG7Q8l0jx5Fh9YQ==", + "dev": true + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "node_modules/gauge": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz", + "integrity": "sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==", + "dev": true, + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.0.tgz", + "integrity": "sha512-L049y6nFOuom5wGyRc3/gdTLO94dySVKRACj1RmJZBQXlbTMhtNIgkWkUHq+jYmZvKf14EW1EoJnnjbmoHij0Q==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "dev": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/glob": { + "version": "10.3.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.3.tgz", + "integrity": "sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.0.3", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.4.1.tgz", + "integrity": "sha512-lkX1HJXwyMcprw/5YUZc2s7DrpAiHB21/V+E1rHUrVNokkvB6bqMzT0VfV6/86ZNabt1k14YOIaT7nDvOX3Iiw==", + "dev": true + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "13.1.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.4.tgz", + "integrity": "sha512-iui/IiiW+QrJ1X1hKH5qwlMQyv34wJAYwH1vrf8b9kBA4sNiif3gKsMHa+BrdnOpEudWjpotfa7LrTzB1ERS/g==", + "dev": true, + "dependencies": { + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.11", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true + }, + "node_modules/hdr-histogram-js": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hdr-histogram-js/-/hdr-histogram-js-2.0.3.tgz", + "integrity": "sha512-Hkn78wwzWHNCp2uarhzQ2SGFLU3JY8SBDDd3TAABK4fc30wm+MuPOrg5QVFVfkKOQd6Bfz3ukJEI+q9sXEkK1g==", + "dev": true, + "dependencies": { + "@assemblyscript/loader": "^0.10.1", + "base64-js": "^1.2.0", + "pako": "^1.0.3" + } + }, + "node_modules/hdr-histogram-percentiles-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hdr-histogram-percentiles-obj/-/hdr-histogram-percentiles-obj-3.0.0.tgz", + "integrity": "sha512-7kIufnBqdsBGcSZLPJwqHT3yhk1QTsSlFsVD3kx5ixH/AlgBs9yM1q6DPhXZ8f8gtdqgh7N7/5btRLpQsS2gHw==", + "dev": true + }, + "node_modules/hosted-git-info": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-6.1.1.tgz", + "integrity": "sha512-r0EI+HBMcXadMrugk0GCQ+6BQV39PiWAZVfq7oIckeGiN7sjRGyQxPdft3nQekFTCQbYxLBH+/axZMeH8UX6+w==", + "dev": true, + "dependencies": { + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hpack.js/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/hpack.js/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "node_modules/hpack.js/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/html-entities": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-2.4.0.tgz", + "integrity": "sha512-igBTJcNNNhvZFRtm8uA6xMY6xYleeDwn3PeBCkDz7tHttv4F2hsDI2aPgNERWzvRcNYHNT3ymRaQzllmXj4YsQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/mdevils" + }, + { + "type": "patreon", + "url": "https://patreon.com/mdevils" + } + ] + }, + "node_modules/html-escaper": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", + "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", + "dev": true + }, + "node_modules/htmlparser2": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", + "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", + "dev": true, + "funding": [ + "https://github.com/fb55/htmlparser2?sponsor=1", + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3", + "domutils": "^3.0.1", + "entities": "^4.4.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==", + "dev": true + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", + "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", + "dev": true, + "dependencies": { + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-middleware": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-2.0.6.tgz", + "integrity": "sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==", + "dev": true, + "dependencies": { + "@types/http-proxy": "^1.17.8", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.2" + }, + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "@types/express": "^4.17.13" + }, + "peerDependenciesMeta": { + "@types/express": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-utils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-5.1.0.tgz", + "integrity": "sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", + "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/ignore-walk": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-6.0.3.tgz", + "integrity": "sha512-C7FfFoTA+bI10qfeydT8aZbvr91vAEU+2W5BZUlzPec47oNb07SsOfwYrtxuvOYdUApPP/Qlh4DtAO51Ekk2QA==", + "dev": true, + "dependencies": { + "minimatch": "^9.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "optional": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/immutable": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.0.tgz", + "integrity": "sha512-0AOCmOip+xgJwEVTQj1EfiDDOkPmuyllDuTuEX+DDXUgapLAsBIfkg3sxCYyCEA8mQqZrrxPUGjcOQ2JS3WLkg==", + "dev": true + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ini/-/ini-4.1.1.tgz", + "integrity": "sha512-QQnnxNyfvmHFIsj7gkPcYymR8Jdw/o7mp5ZFihxn6h8Ci6fh3Dx4E1gPjpQEpIuPo9XVNY/ZUwh4BPMjGyL01g==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/inquirer": { + "version": "8.2.4", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.4.tgz", + "integrity": "sha512-nn4F01dxU8VeKfq192IjLsxu0/OmMZ4Lg3xKAns148rCaXP6ntAoEkVYZThWjwON8AlzdZZi6oqnhNbxUG9hVg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/inquirer/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/inquirer/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/inquirer/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ip": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ip/-/ip-2.0.0.tgz", + "integrity": "sha512-WKa+XuLG1A1R0UWhl2+1XQSi+fZWMsYKffMZTTYsiZaUD8k2yDAj5atimTUD2TZkyCkNEeYE5NhFZmupOGtjYQ==", + "dev": true + }, + "node_modules/ipaddr.js": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-2.1.0.tgz", + "integrity": "sha512-LlbxQ7xKzfBusov6UMi4MFpEg0m+mAm9xyNGEduwXMEDuf4WfzB/RZwMVYEd7IKGvh4IUkEXYxtAVu9T3OelJQ==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", + "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "node_modules/isbinaryfile": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/isbinaryfile/-/isbinaryfile-4.0.10.tgz", + "integrity": "sha512-iHrqe5shvBUcFbmZq9zOQHBoeOhZJu6RQGrDpBgenUm/Am+F3JM2MgQj+rK3Z601fzrL5gLZWtAPH2OBaSVcyw==", + "dev": true, + "engines": { + "node": ">= 8.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/gjtorikian/" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.0.tgz", + "integrity": "sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/istanbul-lib-report": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz", + "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^3.0.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", + "dev": true, + "dependencies": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-source-maps/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/istanbul-reports": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.5.tgz", + "integrity": "sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==", + "dev": true, + "dependencies": { + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/jackspeak": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.2.2.tgz", + "integrity": "sha512-mgNtVv4vUuaKA97yxUHoA3+FkuhtxkjdXEWOyB/N76fjy0FjezEt34oy3epBtvCvS+7DyKwqCFWx/oJLV5+kCg==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jasmine-core": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/jasmine-core/-/jasmine-core-4.6.0.tgz", + "integrity": "sha512-O236+gd0ZXS8YAjFx8xKaJ94/erqUliEkJTDedyE7iHvv4ZVqi+q+8acJxu05/WJDKm512EUNn809In37nWlAQ==", + "dev": true + }, + "node_modules/jest-worker": { + "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", + "dev": true, + "dependencies": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": ">= 10.13.0" + } + }, + "node_modules/jest-worker/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.19.1.tgz", + "integrity": "sha512-oVhqoRDaBXf7sjkll95LHVS6Myyyb1zaunVwk4Z0+WPSW4gjS0pl01zYKHScTuyEhQsFxV5L4DR5r+YqSyqyyg==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/karma": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/karma/-/karma-6.4.2.tgz", + "integrity": "sha512-C6SU/53LB31BEgRg+omznBEMY4SjHU3ricV6zBcAe1EeILKkeScr+fZXtaI5WyDbkVowJxxAI6h73NcFPmXolQ==", + "dev": true, + "dependencies": { + "@colors/colors": "1.5.0", + "body-parser": "^1.19.0", + "braces": "^3.0.2", + "chokidar": "^3.5.1", + "connect": "^3.7.0", + "di": "^0.0.1", + "dom-serialize": "^2.2.1", + "glob": "^7.1.7", + "graceful-fs": "^4.2.6", + "http-proxy": "^1.18.1", + "isbinaryfile": "^4.0.8", + "lodash": "^4.17.21", + "log4js": "^6.4.1", + "mime": "^2.5.2", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.5", + "qjobs": "^1.2.0", + "range-parser": "^1.2.1", + "rimraf": "^3.0.2", + "socket.io": "^4.4.1", + "source-map": "^0.6.1", + "tmp": "^0.2.1", + "ua-parser-js": "^0.7.30", + "yargs": "^16.1.1" + }, + "bin": { + "karma": "bin/karma" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/karma-chrome-launcher": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/karma-chrome-launcher/-/karma-chrome-launcher-3.2.0.tgz", + "integrity": "sha512-rE9RkUPI7I9mAxByQWkGJFXfFD6lE4gC5nPuZdobf/QdTEJI6EU4yIay/cfU/xV4ZxlM5JiTv7zWYgA64NpS5Q==", + "dev": true, + "dependencies": { + "which": "^1.2.1" + } + }, + "node_modules/karma-coverage": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/karma-coverage/-/karma-coverage-2.2.0.tgz", + "integrity": "sha512-gPVdoZBNDZ08UCzdMHHhEImKrw1+PAOQOIiffv1YsvxFhBjqvo/SVXNk4tqn1SYqX0BJZT6S/59zgxiBe+9OuA==", + "dev": true, + "dependencies": { + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-instrument": "^5.1.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.0.5", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/karma-coverage/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/karma-coverage/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/karma-jasmine": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/karma-jasmine/-/karma-jasmine-5.1.0.tgz", + "integrity": "sha512-i/zQLFrfEpRyQoJF9fsCdTMOF5c2dK7C7OmsuKg2D0YSsuZSfQDiLuaiktbuio6F2wiCsZSnSnieIQ0ant/uzQ==", + "dev": true, + "dependencies": { + "jasmine-core": "^4.1.0" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "karma": "^6.0.0" + } + }, + "node_modules/karma-jasmine-html-reporter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/karma-jasmine-html-reporter/-/karma-jasmine-html-reporter-2.0.0.tgz", + "integrity": "sha512-SB8HNNiazAHXM1vGEzf8/tSyEhkfxuDdhYdPBX2Mwgzt0OuF2gicApQ+uvXLID/gXyJQgvrM9+1/2SxZFUUDIA==", + "dev": true, + "peerDependencies": { + "jasmine-core": "^4.0.0", + "karma": "^6.0.0", + "karma-jasmine": "^5.0.0" + } + }, + "node_modules/karma-source-map-support": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/karma-source-map-support/-/karma-source-map-support-1.4.0.tgz", + "integrity": "sha512-RsBECncGO17KAoJCYXjv+ckIz+Ii9NCi+9enk+rq6XC81ezYkb4/RHE6CTXdA7IOJqoF3wcaLfVG0CPmE5ca6A==", + "dev": true, + "dependencies": { + "source-map-support": "^0.5.5" + } + }, + "node_modules/karma/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/karma/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/karma/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/karma/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/karma/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/karma/node_modules/tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "dependencies": { + "rimraf": "^3.0.0" + }, + "engines": { + "node": ">=8.17.0" + } + }, + "node_modules/karma/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/karma/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/klona/-/klona-2.0.6.tgz", + "integrity": "sha512-dhG34DXATL5hSxJbIexCft8FChFXtmskoZYnoPWjXQuebWYCNkVeV3KkGegCK9CP1oswI/vQibS2GY7Em/sJJA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/launch-editor": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/launch-editor/-/launch-editor-2.6.0.tgz", + "integrity": "sha512-JpDCcQnyAAzZZaZ7vEiSqL690w7dAEyLao+KC96zBplnYbJS7TYNjvM3M7y3dGz+v7aIsJk3hllWuc0kWAjyRQ==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.7.3" + } + }, + "node_modules/less": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/less/-/less-4.1.3.tgz", + "integrity": "sha512-w16Xk/Ta9Hhyei0Gpz9m7VS8F28nieJaL/VyShID7cYvP6IL5oHeL6p4TXSDJqZE/lNv0oJ2pGVjJsRkfwm5FA==", + "dev": true, + "dependencies": { + "copy-anything": "^2.0.1", + "parse-node-version": "^1.0.1", + "tslib": "^2.3.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "needle": "^3.1.0", + "source-map": "~0.6.0" + } + }, + "node_modules/less-loader": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/less-loader/-/less-loader-11.1.0.tgz", + "integrity": "sha512-C+uDBV7kS7W5fJlUjq5mPBeBVhYpTIm5gB09APT9o3n/ILeaXVsiSFTbZpTJCJwQ/Crczfn3DmfQFwxYusWFug==", + "dev": true, + "dependencies": { + "klona": "^2.0.4" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "less": "^3.5.0 || ^4.0.0", + "webpack": "^5.0.0" + } + }, + "node_modules/less/node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dev": true, + "optional": true, + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/less/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/less/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "optional": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/less/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/license-webpack-plugin": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/license-webpack-plugin/-/license-webpack-plugin-4.0.2.tgz", + "integrity": "sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==", + "dev": true, + "dependencies": { + "webpack-sources": "^3.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-sources": { + "optional": true + } + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/loader-runner": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.0.tgz", + "integrity": "sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==", + "dev": true, + "engines": { + "node": ">=6.11.5" + } + }, + "node_modules/loader-utils": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-3.2.1.tgz", + "integrity": "sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==", + "dev": true, + "engines": { + "node": ">= 12.13.0" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/log-symbols/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/log-symbols/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/log4js": { + "version": "6.9.1", + "resolved": "https://registry.npmjs.org/log4js/-/log4js-6.9.1.tgz", + "integrity": "sha512-1somDdy9sChrr9/f4UlzhdaGfDR2c/SaD2a4T7qEkG4jTS57/B3qmnjLYePwQ8cqWnUHZI0iAKxMBpCZICiZ2g==", + "dev": true, + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "flatted": "^3.2.7", + "rfdc": "^1.3.0", + "streamroller": "^3.1.5" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.0.tgz", + "integrity": "sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.13" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/make-fetch-happen": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-11.1.1.tgz", + "integrity": "sha512-rLWS7GCSTcEujjVBs2YqG7Y4643u8ucvCJeSRqiLYhesrDuzeuFIk37xREzAsfQaqzl8b9rNCE4m6J8tvX4Q8w==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.2.1", + "cacache": "^17.0.0", + "http-cache-semantics": "^4.1.1", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^10.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memfs": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/memfs/-/memfs-3.5.3.tgz", + "integrity": "sha512-UERzLsxzllchadvbPs5aolHh65ISpKpM+ccLbOJ8/vvpBKmAWf+la7dXFy7Mr0ySHbdHrFv5kGFCUHHe6GFEmw==", + "dev": true, + "dependencies": { + "fs-monkey": "^1.0.4" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "2.7.6", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-2.7.6.tgz", + "integrity": "sha512-Qk7HcgaPkGG6eD77mLvZS1nmxlao3j+9PkrT9Uc7HAE1id3F41+DdBRYRYkbyfNRGzm8/YWtzhw7nVPmwhqTQw==", + "dev": true, + "dependencies": { + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", + "integrity": "sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-collect/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minipass-fetch": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-3.0.3.tgz", + "integrity": "sha512-n5ITsTkDqYkYJZjcRWzZt9qnZKCT7nKCosJhHoj7S7zD+BP4jVbWs+odsniw5TA3E0sLomhTKOKjF86wf11PuQ==", + "dev": true, + "dependencies": { + "minipass": "^5.0.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + }, + "optionalDependencies": { + "encoding": "^0.1.13" + } + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/minipass-json-stream/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-json-stream/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mrmime": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", + "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "dev": true, + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", + "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/needle": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/needle/-/needle-3.2.0.tgz", + "integrity": "sha512-oUvzXnyLiVyVGoianLijF9O/RecZUf7TkBfimjGrLM4eQhXyeJwM6GeAWccwfQ9aa4gMCZKqhAOuLaMIcQxajQ==", + "dev": true, + "optional": true, + "dependencies": { + "debug": "^3.2.6", + "iconv-lite": "^0.6.3", + "sax": "^1.2.4" + }, + "bin": { + "needle": "bin/needle" + }, + "engines": { + "node": ">= 4.4.x" + } + }, + "node_modules/needle/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "optional": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/needle/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", + "dev": true + }, + "node_modules/nice-napi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nice-napi/-/nice-napi-1.0.2.tgz", + "integrity": "sha512-px/KnJAJZf5RuBGcfD+Sp2pAKq0ytz8j+1NehvgIGFkvtvFrDM3T8E4x/JJODXK9WZow8RRGrbA9QQ3hs+pDhA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "!win32" + ], + "dependencies": { + "node-addon-api": "^3.0.0", + "node-gyp-build": "^4.2.2" + } + }, + "node_modules/node-addon-api": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-3.2.1.tgz", + "integrity": "sha512-mmcei9JghVNDYydghQmeDX8KoAm0FAiYyIcUt/N4nhyAipB17pllZQDOJD2fotxABnt4Mdz+dKTO7eftLg4d0A==", + "dev": true, + "optional": true + }, + "node_modules/node-forge": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.3.1.tgz", + "integrity": "sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==", + "dev": true, + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-gyp": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-9.4.0.tgz", + "integrity": "sha512-dMXsYP6gc9rRbejLXmTbVRYjAHw7ppswsKyMxuxJxxOHzluIO1rGp9TOQgjFJ+2MCqcOcQTOPB/8Xwhr+7s4Eg==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^11.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": "^12.13 || ^14.13 || >=16" + } + }, + "node_modules/node-gyp-build": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.6.0.tgz", + "integrity": "sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==", + "dev": true, + "optional": true, + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/node-gyp/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/node-gyp/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/node-gyp/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/node-gyp/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/node-releases": { + "version": "2.0.13", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.13.tgz", + "integrity": "sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==", + "dev": true + }, + "node_modules/nopt": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", + "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", + "dev": true, + "dependencies": { + "abbrev": "^1.0.0" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/normalize-package-data": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-5.0.0.tgz", + "integrity": "sha512-h9iPVIfrVZ9wVYQnxFgtw1ugSvGEMOlyPWWtm8BMJhnwyEL/FLbYbTY3V3PpjI/BUK67n9PEWDu6eHzu1fB15Q==", + "dev": true, + "dependencies": { + "hosted-git-info": "^6.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-bundled": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-3.0.0.tgz", + "integrity": "sha512-Vq0eyEQy+elFpzsKjMss9kxqb9tG3YHg4dsyWuUENuzvSUWe1TCnW/vV9FkhvBk/brEDoDiVd+M1Btosa6ImdQ==", + "dev": true, + "dependencies": { + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-install-checks": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-6.1.1.tgz", + "integrity": "sha512-dH3GmQL4vsPtld59cOn8uY0iOqRmqKvV+DLGwNXV/Q7MDgD2QfOADWd/mFXcIE5LVhYYGjA3baz6W9JneqnuCw==", + "dev": true, + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-3.0.1.tgz", + "integrity": "sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-package-arg": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-10.1.0.tgz", + "integrity": "sha512-uFyyCEmgBfZTtrKk/5xDfHp6+MdrqGotX/VoOyEEl3mBwiEE5FlBaePanazJSVMPT7vKepcjYBY2ztg9A3yPIA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^6.0.0", + "proc-log": "^3.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-packlist": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-7.0.4.tgz", + "integrity": "sha512-d6RGEuRrNS5/N84iglPivjaJPxhDbZmlbTwTDX2IbcRHG5bZCdtysYMhwiPvcF4GisXHGn7xsxv+GQ7T/02M5Q==", + "dev": true, + "dependencies": { + "ignore-walk": "^6.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-8.0.1.tgz", + "integrity": "sha512-mRtvlBjTsJvfCCdmPtiu2bdlx8d/KXtF7yNXNWe7G0Z36qWA9Ny5zXsI2PfBZEv7SXgoxTmNaTzGSbbzDZChoA==", + "dev": true, + "dependencies": { + "npm-install-checks": "^6.0.0", + "npm-normalize-package-bin": "^3.0.0", + "npm-package-arg": "^10.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-registry-fetch": { + "version": "14.0.5", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-14.0.5.tgz", + "integrity": "sha512-kIDMIo4aBm6xg7jOttupWZamsZRkAqMqwqqbVXnUqstY5+tapvv6bkH/qMR76jdgV+YljEUCyWx3hRYMrJiAgA==", + "dev": true, + "dependencies": { + "make-fetch-happen": "^11.0.0", + "minipass": "^5.0.0", + "minipass-fetch": "^3.0.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^10.0.0", + "proc-log": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npmlog": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz", + "integrity": "sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==", + "dev": true, + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.3.tgz", + "integrity": "sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", + "dev": true, + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", + "dev": true, + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/ora/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/ora/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", + "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "dev": true, + "dependencies": { + "@types/retry": "0.12.0", + "retry": "^0.13.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/pacote": { + "version": "15.2.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-15.2.0.tgz", + "integrity": "sha512-rJVZeIwHTUta23sIZgEIM62WYwbmGbThdbnkt81ravBplQv+HjyroqnLRNH2+sLJHcGZmLRmhPwACqhfTcOmnA==", + "dev": true, + "dependencies": { + "@npmcli/git": "^4.0.0", + "@npmcli/installed-package-contents": "^2.0.1", + "@npmcli/promise-spawn": "^6.0.1", + "@npmcli/run-script": "^6.0.0", + "cacache": "^17.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^5.0.0", + "npm-package-arg": "^10.0.0", + "npm-packlist": "^7.0.0", + "npm-pick-manifest": "^8.0.0", + "npm-registry-fetch": "^14.0.0", + "proc-log": "^3.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^6.0.0", + "read-package-json-fast": "^3.0.0", + "sigstore": "^1.3.0", + "ssri": "^10.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parse-node-version": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz", + "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "devOptional": true, + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-html-rewriting-stream": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-html-rewriting-stream/-/parse5-html-rewriting-stream-7.0.0.tgz", + "integrity": "sha512-mazCyGWkmCRWDI15Zp+UiCqMp/0dgEmkZRvhlsqqKYr4SsVm/TvnSpD9fCvqCA2zoWJcfRym846ejWBBHRiYEg==", + "dev": true, + "dependencies": { + "entities": "^4.3.0", + "parse5": "^7.0.0", + "parse5-sax-parser": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5-sax-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/parse5-sax-parser/-/parse5-sax-parser-7.0.0.tgz", + "integrity": "sha512-5A+v2SNsq8T6/mG3ahcz8ZtQ0OUFTatxPbeidoMB7tkJSGDY3tdfl4MHovtLQHkEn5CGxijNWRQHhRQ6IRpXKg==", + "dev": true, + "dependencies": { + "parse5": "^7.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dev": true, + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.0.tgz", + "integrity": "sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/piscina": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/piscina/-/piscina-3.2.0.tgz", + "integrity": "sha512-yn/jMdHRw+q2ZJhFhyqsmANcbF6V2QwmD84c6xRau+QpQOmtrBCoRGdvTfeuFDYXB5W2m6MfLkjkvQa9lUSmIA==", + "dev": true, + "dependencies": { + "eventemitter-asyncresource": "^1.0.0", + "hdr-histogram-js": "^2.0.1", + "hdr-histogram-percentiles-obj": "^3.0.0" + }, + "optionalDependencies": { + "nice-napi": "^1.0.2" + } + }, + "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss": { + "version": "8.4.24", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.24.tgz", + "integrity": "sha512-M0RzbcI0sO/XJNucsGjvWU9ERWxb/ytp1w6dKtxTKgixdtQDq4rmx/g8W1hnaheq9jgwL/oyEdH5Bc4WwJKMqg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-loader": { + "version": "7.3.2", + "resolved": "https://registry.npmjs.org/postcss-loader/-/postcss-loader-7.3.2.tgz", + "integrity": "sha512-c7qDlXErX6n0VT+LUsW+nwefVtTu3ORtVvK8EXuUIDcxo+b/euYqpuHlJAvePb0Af5e8uMjR/13e0lTuYifaig==", + "dev": true, + "dependencies": { + "cosmiconfig": "^8.1.3", + "jiti": "^1.18.2", + "klona": "^2.0.6", + "semver": "^7.3.8" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "postcss": "^7.0.0 || ^8.0.1", + "webpack": "^5.0.0" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-extract-imports/-/postcss-modules-extract-imports-3.0.0.tgz", + "integrity": "sha512-bdHleFnP3kZ4NYDhuGlVK+CMrQ/pqUm8bx/oGL93K6gVwiclvX5x0n76fYMKuIGKzlABOy13zsvqjb0f92TEXw==", + "dev": true, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-4.0.3.tgz", + "integrity": "sha512-2/u2zraspoACtrbFRnTijMiQtb4GW4BvatjaG/bCjYQo8kLTdevCUlwuBHx2sCnSyrI3x3qj4ZK1j5LQBgzmwA==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.1.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-3.0.0.tgz", + "integrity": "sha512-hncihwFA2yPath8oZ15PZqvWGkWf+XUfQgUGamS4LqoP1anQLOsOJw0vr7J7IwLpoY9fatA2qiGUGmuZL0Iqlg==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.4" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-4.0.0.tgz", + "integrity": "sha512-RDxHkAiEGI78gS2ofyvCsu7iycRv7oqw5xMWn9iMoR0N/7mf9D50ecQqUo5BZ9Zh2vH4bCUR/ktCqbB9m8vJjQ==", + "dev": true, + "dependencies": { + "icss-utils": "^5.0.0" + }, + "engines": { + "node": "^10 || ^12 || >= 14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.13", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", + "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/proc-log": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-3.0.0.tgz", + "integrity": "sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==", + "dev": true + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/proxy-addr/node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==", + "dev": true, + "optional": true + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/qjobs": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/qjobs/-/qjobs-1.2.0.tgz", + "integrity": "sha512-8YOJEHtxpySA3fFDyCRxA+UUV+fA+rTWnuWvylOK/NCjhY+b4ocCtmu8TtsWb+mYeU+GCHf/S66KZF/AsteKHg==", + "dev": true, + "engines": { + "node": ">=0.9" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-package-json": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/read-package-json/-/read-package-json-6.0.4.tgz", + "integrity": "sha512-AEtWXYfopBj2z5N5PbkAOeNHRPUg5q+Nen7QLxV8M2zJq1ym6/lCz3fYNTCXe19puu2d06jfHhrP7v/S2PtMMw==", + "dev": true, + "dependencies": { + "glob": "^10.2.2", + "json-parse-even-better-errors": "^3.0.0", + "normalize-package-data": "^5.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/read-package-json-fast/-/read-package-json-fast-3.0.2.tgz", + "integrity": "sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^3.0.0", + "npm-normalize-package-bin": "^3.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json-fast/node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/read-package-json/node_modules/json-parse-even-better-errors": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-3.0.0.tgz", + "integrity": "sha512-iZbGHafX/59r39gPwVPRBGw0QQKnA7tte5pSMrhWOW7swGsVvVTjmfyAV9pNqk8YGT7tRCdxRu8uzcgZwoDooA==", + "dev": true, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==", + "dev": true + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "dev": true + }, + "node_modules/regenerator-transform": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz", + "integrity": "sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-parser": { + "version": "2.2.11", + "resolved": "https://registry.npmjs.org/regex-parser/-/regex-parser-2.2.11.tgz", + "integrity": "sha512-jbD/FT0+9MBU2XAZluI7w2OBs1RBi6p9M83nkoZayQXXU9e8Robt69FcZc7wU4eJD/YFTjn1JdCk3rbMJajz8Q==", + "dev": true + }, + "node_modules/regexpu-core": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", + "dev": true, + "dependencies": { + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsparser": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.2", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.2.tgz", + "integrity": "sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==", + "dev": true, + "dependencies": { + "is-core-module": "^2.11.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve-url-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-url-loader/-/resolve-url-loader-5.0.0.tgz", + "integrity": "sha512-uZtduh8/8srhBoMx//5bwqjQ+rfYOUq8zC9NrMUGtjBiGTtFJM42s58/36+hTqeqINcnYe08Nj3LkK9lW4N8Xg==", + "dev": true, + "dependencies": { + "adjust-sourcemap-loader": "^4.0.0", + "convert-source-map": "^1.7.0", + "loader-utils": "^2.0.0", + "postcss": "^8.2.14", + "source-map": "0.6.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/resolve-url-loader/node_modules/loader-utils": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.4.tgz", + "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/resolve-url-loader/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rfdc": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.0.tgz", + "integrity": "sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==", + "dev": true + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/rollup": { + "version": "3.21.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.21.5.tgz", + "integrity": "sha512-a4NTKS4u9PusbUJcfF4IMxuqjFzjm6ifj76P54a7cKnvVzJaG12BLVR+hgU2YDGHzyMMQNxLAZWuALsn8q2oQg==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "node_modules/safevalues": { + "version": "0.3.4", + "resolved": "https://registry.npmjs.org/safevalues/-/safevalues-0.3.4.tgz", + "integrity": "sha512-LRneZZRXNgjzwG4bDQdOTSbze3fHm1EAKN/8bePxnlEZiBmkYEDggaHbuvHI9/hoqHbGfsEA7tWS9GhYHZBBsw==" + }, + "node_modules/sass": { + "version": "1.63.2", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.63.2.tgz", + "integrity": "sha512-u56TU0AIFqMtauKl/OJ1AeFsXqRHkgO7nCWmHaDwfxDo9GUMSqBA4NEh6GMuh1CYVM7zuROYtZrHzPc2ixK+ww==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/sass-loader": { + "version": "13.3.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-13.3.1.tgz", + "integrity": "sha512-cBTxmgyVA1nXPvIK4brjJMXOMJ2v2YrQEuHqLw3LylGb3gsR6jAvdjHMcy/+JGTmmIF9SauTrLLR7bsWDMWqgg==", + "dev": true, + "dependencies": { + "klona": "^2.0.6", + "neo-async": "^2.6.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "fibers": ">= 3.1.0", + "node-sass": "^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0", + "sass": "^1.3.0", + "sass-embedded": "*", + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "fibers": { + "optional": true + }, + "node-sass": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + } + } + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true, + "optional": true + }, + "node_modules/schema-utils": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.0.1.tgz", + "integrity": "sha512-lELhBAAly9NowEsX0yZBlw9ahZG+sK/1RJ21EpzdYHKEs13Vku3LJ+MIPhh4sMs0oCCeufZQEQbMekiA4vuVIQ==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "node_modules/selfsigned": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-2.1.1.tgz", + "integrity": "sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==", + "dev": true, + "dependencies": { + "node-forge": "^1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/semver/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-javascript": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", + "integrity": "sha512-owoXEFjWRllis8/M1Q+Cw5k8ZH40e3zhp/ovX+Xr/vi1qj6QesbyXXViFbpNvWvPNAD62SutwEXavefrLJWj7w==", + "dev": true, + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/serve-index/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true + }, + "node_modules/sigstore": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-1.8.0.tgz", + "integrity": "sha512-ogU8qtQ3VFBawRJ8wjsBEX/vIFeHuGs1fm4jZtjWQwjo8pfAt7T/rh+udlAN4+QUe0IzA8qRSc/YZ7dHP6kh+w==", + "dev": true, + "dependencies": { + "@sigstore/bundle": "^1.0.0", + "@sigstore/protobuf-specs": "^0.2.0", + "@sigstore/tuf": "^1.0.3", + "make-fetch-happen": "^11.0.1" + }, + "bin": { + "sigstore": "bin/sigstore.js" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/slash": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", + "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socket.io": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.6.1.tgz", + "integrity": "sha512-KMcaAi4l/8+xEjkRICl6ak8ySoxsYG+gG6/XfRCPJPQ/haCRIJBTL4wIl8YCsmtaBovcAXGLOShyVWQ/FG8GZA==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.2", + "engine.io": "~6.4.1", + "socket.io-adapter": "~2.5.2", + "socket.io-parser": "~4.2.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/socket.io-adapter": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.2.tgz", + "integrity": "sha512-87C3LO/NOMc+eMcpcxUBebGjkpMDkNBS9tf7KJqcDsmL936EChtVva71Dw2q4tQcuVC+hAUy4an2NO/sYXmwRA==", + "dev": true, + "dependencies": { + "ws": "~8.11.0" + } + }, + "node_modules/socket.io-parser": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.2.3.tgz", + "integrity": "sha512-JMafRntWVO2DCJimKsRTh/wnqVvO4hrfwOqtO7f+uzwsQMuxO6VwImtYxaQ+ieoyshWOTJyV0fA21lccEXRPpQ==", + "dev": true, + "dependencies": { + "@socket.io/component-emitter": "~3.1.0", + "debug": "~4.3.1" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/socks": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz", + "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==", + "dev": true, + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-7.0.0.tgz", + "integrity": "sha512-Fgl0YPZ902wEsAyiQ+idGd1A7rSFx/ayC1CQVMw5P+EQx2V0SgpGtf6OKFhVjPflPUl9YMmEOnmfjCdMUsygww==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/source-map": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", + "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-loader": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/source-map-loader/-/source-map-loader-4.0.1.tgz", + "integrity": "sha512-oqXpzDIByKONVY8g1NUPOTQhe0UTU5bWUl32GSkqK2LjJj0HmwTMVKxcUip0RgAYhY1mqgOxjbQM48a0mmeNfA==", + "dev": true, + "dependencies": { + "abab": "^2.0.6", + "iconv-lite": "^0.6.3", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.72.1" + } + }, + "node_modules/source-map-loader/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.2.0.tgz", + "integrity": "sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz", + "integrity": "sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==", + "dev": true + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "dev": true + }, + "node_modules/ssri": { + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-10.0.4.tgz", + "integrity": "sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==", + "dev": true, + "dependencies": { + "minipass": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/streamroller": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/streamroller/-/streamroller-3.1.5.tgz", + "integrity": "sha512-KFxaM7XT+irxvdqSP1LGLgNWbYN7ay5owZ3r/8t77p+EtSUAfUgtl7be3xtqtOmGUl9K9YPO2ca8133RlTjvKw==", + "dev": true, + "dependencies": { + "date-format": "^4.0.14", + "debug": "^4.3.4", + "fs-extra": "^8.1.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/symbol-observable": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", + "integrity": "sha512-b19dMThMV4HVFynSAM1++gBHAbk2Tc/osgLIBZMKsyqh34jb2e8Os7T6ZW/Bt3pJFdBTd2JwAnAAEQV7rSNvcQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "6.1.15", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.15.tgz", + "integrity": "sha512-/zKt9UyngnxIT/EAGYuxaMYgOIJiP81ab9ZfkILq4oNLPFX50qyYmu7jRj9qeXoxmJHjGlbH0+cm2uy1WCs10A==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tar/node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/terser": { + "version": "5.17.7", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.17.7.tgz", + "integrity": "sha512-/bi0Zm2C6VAexlGgLlVxA0P2lru/sdLyfCVaRMfKVo9nWxbmz7f/sD8VPybPeSUJaJcwmCJis9pBIhcVcG1QcQ==", + "dev": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.8.tgz", + "integrity": "sha512-WiHL3ElchZMsK27P8uIUh4604IgJyAW47LVXGbEoB21DbQcZ+OuMpGjVYnEUaqcWM6dO8uS2qUbA7LSCWqvsbg==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz", + "integrity": "sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "dev": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/test-exclude/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", + "dev": true + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tslib": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz", + "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==" + }, + "node_modules/tuf-js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-1.1.7.tgz", + "integrity": "sha512-i3P9Kgw3ytjELUfpuKVDNBJvk4u5bXL6gskv572mcevPbSKCV3zt3djhmlEQ65yERjIbOSncy7U4cQJaB1CBCg==", + "dev": true, + "dependencies": { + "@tufjs/models": "1.0.4", + "debug": "^4.3.4", + "make-fetch-happen": "^11.1.1" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typed-assert": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/typed-assert/-/typed-assert-1.0.9.tgz", + "integrity": "sha512-KNNZtayBCtmnNmbo5mG47p1XsCyrx6iVqomjcZnec/1Y5GGARaxPs6r49RnSPeUP3YjNYiU9sQHAtY4BBvnZwg==", + "dev": true + }, + "node_modules/typescript": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.1.6.tgz", + "integrity": "sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/ua-parser-js": { + "version": "0.7.35", + "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.35.tgz", + "integrity": "sha512-veRf7dawaj9xaWEu9HoTVn5Pggtc/qj+kqTOFvNiN1l0YdxwC1kvel57UCjThjGa3BHBihE8/UJAHI+uQHmd/g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/ua-parser-js" + }, + { + "type": "paypal", + "url": "https://paypal.me/faisalman" + } + ], + "engines": { + "node": "*" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unique-filename": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-3.0.0.tgz", + "integrity": "sha512-afXhuC55wkAmZ0P18QsVE6kp8JaxrEokN2HGIoIVv2ijHQd419H0+6EigAFcIzXeMIkcIkNBpB3L/DXB3cTS/g==", + "dev": true, + "dependencies": { + "unique-slug": "^4.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/unique-slug": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-4.0.0.tgz", + "integrity": "sha512-WrcA6AyEfqDX5bWige/4NQfPZMtASNVxdmWR76WESYQVAACSgWcR6e9i0mofqqBxYFtL4oAxPIptY73/0YE1DQ==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-5.0.0.tgz", + "integrity": "sha512-YuKoXDAhBYxY7SfOKxHBDoSyENFeW5VvIIQp2TGQuit8gpK6MnWaQelBKxso72DoxTZfZdcP3W90LqpSkgPzLQ==", + "dev": true, + "dependencies": { + "builtins": "^5.0.0" + }, + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vite": { + "version": "4.3.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.3.9.tgz", + "integrity": "sha512-qsTNZjO9NoJNW7KnOrgYwczm0WctJ8m/yqYAMAK9Lxt4SoySUfS5S8ia9K7JHpa3KEeMfyF8LoJ3c5NeBJy6pg==", + "dev": true, + "dependencies": { + "esbuild": "^0.17.5", + "postcss": "^8.4.23", + "rollup": "^3.21.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/void-elements": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", + "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.0.tgz", + "integrity": "sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==", + "dev": true, + "dependencies": { + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webpack": { + "version": "5.86.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.86.0.tgz", + "integrity": "sha512-3BOvworZ8SO/D4GVP+GoRC3fVeg5MO4vzmq8TJJEkdmopxyazGDxN8ClqN12uzrZW9Tv8EED8v5VSb6Sqyi0pg==", + "dev": true, + "dependencies": { + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.14.1", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.1.2", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-middleware": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-6.1.1.tgz", + "integrity": "sha512-y51HrHaFeeWir0YO4f0g+9GwZawuigzcAdRNon6jErXy/SqV/+O6eaVAzDqE6t3e3NpGeR5CS+cCDaTC+V3yEQ==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.12", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 14.15.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server": { + "version": "4.15.0", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-4.15.0.tgz", + "integrity": "sha512-HmNB5QeSl1KpulTBQ8UT4FPrByYyaLxpJoQ0+s7EvUrMc16m0ZS1sgb1XGqzmgCPk0c9y+aaXxn11tbLzuM7NQ==", + "dev": true, + "dependencies": { + "@types/bonjour": "^3.5.9", + "@types/connect-history-api-fallback": "^1.3.5", + "@types/express": "^4.17.13", + "@types/serve-index": "^1.9.1", + "@types/serve-static": "^1.13.10", + "@types/sockjs": "^0.3.33", + "@types/ws": "^8.5.1", + "ansi-html-community": "^0.0.8", + "bonjour-service": "^1.0.11", + "chokidar": "^3.5.3", + "colorette": "^2.0.10", + "compression": "^1.7.4", + "connect-history-api-fallback": "^2.0.0", + "default-gateway": "^6.0.3", + "express": "^4.17.3", + "graceful-fs": "^4.2.6", + "html-entities": "^2.3.2", + "http-proxy-middleware": "^2.0.3", + "ipaddr.js": "^2.0.1", + "launch-editor": "^2.6.0", + "open": "^8.0.9", + "p-retry": "^4.5.0", + "rimraf": "^3.0.2", + "schema-utils": "^4.0.0", + "selfsigned": "^2.1.1", + "serve-index": "^1.9.1", + "sockjs": "^0.3.24", + "spdy": "^4.0.2", + "webpack-dev-middleware": "^5.3.1", + "ws": "^8.13.0" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.37.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack": { + "optional": true + }, + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/webpack-dev-middleware": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-5.3.3.tgz", + "integrity": "sha512-hj5CYrY0bZLB+eTO+x/j67Pkrquiy7kWepMHmUMoPsmcUaeEnQJqFzHJOyxgWlq746/wUuA64p9ta34Kyb01pA==", + "dev": true, + "dependencies": { + "colorette": "^2.0.10", + "memfs": "^3.4.3", + "mime-types": "^2.1.31", + "range-parser": "^1.2.1", + "schema-utils": "^4.0.0" + }, + "engines": { + "node": ">= 12.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-server/node_modules/ws": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.13.0.tgz", + "integrity": "sha512-x9vcZYTrFPC7aSIbj7sRCYo7L/Xb8Iy+pW0ng0wt2vCJv7M9HOMy0UoN3rr+IFC7hb7vXoqS+P9ktyLLLhO+LA==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/webpack-merge": { + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.9.0.tgz", + "integrity": "sha512-6NbRQw4+Sy50vYNTw7EyOn41OZItPiXB8GNv3INSoe3PSFaHJEz3SHTrYVaRm2LilNGnFUzh0FAwqPEmU/CwDg==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "wildcard": "^2.0.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/webpack-sources": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-3.2.3.tgz", + "integrity": "sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==", + "dev": true, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/webpack-subresource-integrity": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/webpack-subresource-integrity/-/webpack-subresource-integrity-5.1.0.tgz", + "integrity": "sha512-sacXoX+xd8r4WKsy9MvH/q/vBtEHr86cpImXwyg74pFIpERKt6FmB8cXpeuh0ZLgclOlHI4Wcll7+R5L02xk9Q==", + "dev": true, + "dependencies": { + "typed-assert": "^1.0.8" + }, + "engines": { + "node": ">= 12" + }, + "peerDependencies": { + "html-webpack-plugin": ">= 5.0.0-beta.1 < 6", + "webpack": "^5.12.0" + }, + "peerDependenciesMeta": { + "html-webpack-plugin": { + "optional": true + } + } + }, + "node_modules/webpack/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/webpack/node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true, + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/webpack/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.2.tgz", + "integrity": "sha512-pvjEHOgWc9OWA/f/DE3ohBWTD6EleVLf7iFUkoSwAxttdBhB9QUebQgxER2kWueOvRJXPHNnyrvvh9eZINB8Eg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wildcard": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.1.tgz", + "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", + "dev": true + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/ws": { + "version": "8.11.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", + "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "dev": true, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/zone.js": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/zone.js/-/zone.js-0.13.0.tgz", + "integrity": "sha512-7m3hNNyswsdoDobCkYNAy5WiUulkMd3+fWaGT9ij6iq3Zr/IwJo4RMCYPSDjT+r7tnPErmY9sZpKhWQ8S5k6XQ==", + "dependencies": { + "tslib": "^2.3.0" + } + } + } +} diff --git a/web_embedding/ng-flutter/package.json b/web_embedding/ng-flutter/package.json new file mode 100644 index 000000000..9f28b3cbe --- /dev/null +++ b/web_embedding/ng-flutter/package.json @@ -0,0 +1,41 @@ +{ + "name": "ng-flutter", + "version": "0.0.0", + "scripts": { + "ng": "ng", + "prebuild": "pushd flutter && flutter clean && flutter build web && popd", + "start": "ng serve", + "build": "ng build", + "watch": "ng build --watch --configuration development", + "test": "ng test" + }, + "private": true, + "dependencies": { + "@angular/animations": "^16.1.8", + "@angular/cdk": "^16.1.7", + "@angular/common": "^16.1.8", + "@angular/compiler": "^16.1.8", + "@angular/core": "^16.1.8", + "@angular/forms": "^16.1.8", + "@angular/material": "^16.1.7", + "@angular/platform-browser": "^16.1.8", + "@angular/platform-browser-dynamic": "^16.1.8", + "@angular/router": "^16.1.8", + "rxjs": "~7.8.1", + "tslib": "^2.6.1", + "zone.js": "~0.13.0" + }, + "devDependencies": { + "@angular-devkit/build-angular": "^16.1.8", + "@angular/cli": "~16.1.8", + "@angular/compiler-cli": "^16.1.8", + "@types/jasmine": "~5.1.0", + "jasmine-core": "~4.6.0", + "karma": "~6.4.2", + "karma-chrome-launcher": "~3.2.0", + "karma-coverage": "~2.2.0", + "karma-jasmine": "~5.1.0", + "karma-jasmine-html-reporter": "~2.0.0", + "typescript": "~5.1.6" + } +} diff --git a/web_embedding/ng-flutter/src/app/app.component.spec.ts b/web_embedding/ng-flutter/src/app/app.component.spec.ts new file mode 100644 index 000000000..50fecba23 --- /dev/null +++ b/web_embedding/ng-flutter/src/app/app.component.spec.ts @@ -0,0 +1,35 @@ +import { TestBed } from '@angular/core/testing'; +import { RouterTestingModule } from '@angular/router/testing'; +import { AppComponent } from './app.component'; + +describe('AppComponent', () => { + beforeEach(async () => { + await TestBed.configureTestingModule({ + imports: [ + RouterTestingModule + ], + declarations: [ + AppComponent + ], + }).compileComponents(); + }); + + it('should create the app', () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.componentInstance; + expect(app).toBeTruthy(); + }); + + it(`should have as title 'ng-flutter'`, () => { + const fixture = TestBed.createComponent(AppComponent); + const app = fixture.componentInstance; + expect(app.title).toEqual('ng-flutter'); + }); + + it('should render title', () => { + const fixture = TestBed.createComponent(AppComponent); + fixture.detectChanges(); + const compiled = fixture.nativeElement as HTMLElement; + expect(compiled.querySelector('.content span')?.textContent).toContain('ng-flutter app is running!'); + }); +}); diff --git a/web_embedding/ng-flutter/src/app/app.component.ts b/web_embedding/ng-flutter/src/app/app.component.ts new file mode 100644 index 000000000..8a4c8e8f0 --- /dev/null +++ b/web_embedding/ng-flutter/src/app/app.component.ts @@ -0,0 +1,171 @@ +import { ChangeDetectorRef, Component } from '@angular/core'; +import { NgFlutterComponent } from './ng-flutter/ng-flutter.component'; +import { BreakpointObserver, Breakpoints } from '@angular/cdk/layout'; +import { MatSidenavModule } from '@angular/material/sidenav'; +import { CommonModule } from '@angular/common'; +import { MatToolbarModule } from '@angular/material/toolbar'; +import { MatIconModule } from '@angular/material/icon'; +import { MatListModule } from '@angular/material/list'; +import { MatCardModule } from '@angular/material/card'; +import { MatSliderModule } from '@angular/material/slider'; +import { MatButtonModule } from '@angular/material/button'; +import { MatSelectModule } from '@angular/material/select'; +import { MatFormFieldModule } from '@angular/material/form-field'; +import { MatInputModule } from '@angular/material/input'; + +@Component({ + standalone: true, + selector: 'app-root', + template: ` + + + Angular 🤝 Flutter + + + + + + +
+

Effects

+
+ + + + +
+
+ +
+

JS Interop

+ + Screen + + Counter + TextField + Custom App + + + + Clicks + + + + Text + + + +
+
+
+ + +
+ +
+
+
+`, + styles: [` + :host{ + display: flex; + height: 100%; + flex-direction: column; + } + .toolbar-spacer { + flex: 1 1 auto; + } + .sidenav-container { + flex: 1; + } + .sidenav { + width: 300px; + padding: 10px; + } + .button-list { + display: flex; + flex-wrap: wrap; + gap: 5px; + margin-bottom: 20px; + } + .button-list button { + min-width: 130px; + } + .sidenav-content { + display: flex; + justify-content: center; + align-items: center; + } + .flutter-app { + border: 1px solid #eee; + border-radius: 5px; + height: 480px; + width: 320px; + transition: all 150ms ease-in-out; + overflow: hidden; + } + `], + imports: [ + NgFlutterComponent, + MatToolbarModule, + MatSidenavModule, + MatSidenavModule, + MatIconModule, + CommonModule, + MatListModule, + MatCardModule, + MatSliderModule, + MatButtonModule, + MatFormFieldModule, + MatSelectModule, + MatInputModule, + ], +}) +export class AppComponent { + title = 'ng-flutter'; + flutterState?: any; + + constructor(private changeDetectorRef: ChangeDetectorRef, private breakpointObserver: BreakpointObserver) { } + + onFlutterAppLoaded(state: any) { + this.flutterState = state; + this.flutterState.onClicksChanged(() => { this.onCounterChanged() }); + this.flutterState.onTextChanged(() => { this.onTextChanged() }); + } + + onCounterSet(event: Event) { + let clicks = parseInt((event.target as HTMLInputElement).value, 10) || 0; + this.flutterState.setClicks(clicks); + } + + onTextSet(event: Event) { + this.flutterState.setText((event.target as HTMLInputElement).value || ''); + } + + // I need to force a change detection here. When clicking on the "Decrement" + // button, everything works fine, but clicking on Flutter doesn't trigger a + // repaint (even though this method is called) + onCounterChanged() { + this.changeDetectorRef.detectChanges(); + } + + onTextChanged() { + this.changeDetectorRef.detectChanges(); + } +} diff --git a/web_embedding/ng-flutter/src/app/ng-flutter/ng-flutter.component.spec.ts b/web_embedding/ng-flutter/src/app/ng-flutter/ng-flutter.component.spec.ts new file mode 100644 index 000000000..b0720c4a5 --- /dev/null +++ b/web_embedding/ng-flutter/src/app/ng-flutter/ng-flutter.component.spec.ts @@ -0,0 +1,23 @@ +import { ComponentFixture, TestBed } from '@angular/core/testing'; + +import { NgFlutterComponent } from './ng-flutter.component'; + +describe('NgFlutterComponent', () => { + let component: NgFlutterComponent; + let fixture: ComponentFixture; + + beforeEach(async () => { + await TestBed.configureTestingModule({ + declarations: [ NgFlutterComponent ] + }) + .compileComponents(); + + fixture = TestBed.createComponent(NgFlutterComponent); + component = fixture.componentInstance; + fixture.detectChanges(); + }); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/web_embedding/ng-flutter/src/app/ng-flutter/ng-flutter.component.ts b/web_embedding/ng-flutter/src/app/ng-flutter/ng-flutter.component.ts new file mode 100644 index 000000000..1895060e1 --- /dev/null +++ b/web_embedding/ng-flutter/src/app/ng-flutter/ng-flutter.component.ts @@ -0,0 +1,65 @@ +import { Component, AfterViewInit, SimpleChanges, ViewChild, ElementRef, Input, EventEmitter, Output } from '@angular/core'; +import { MatProgressSpinnerModule } from '@angular/material/progress-spinner'; + +// The global _flutter namespace +declare var _flutter: any; +declare var window: { + _debug: any +}; + +@Component({ + selector: 'ng-flutter', + standalone: true, + template: ` +
+
+ +
+
+ `, + styles: [` + :host div { + width: 100%; + height: 100%; + } + .spinner { + display: flex; + justify-content: center; + align-items: center; + }`, + ], + imports: [ + MatProgressSpinnerModule, + ], +}) +export class NgFlutterComponent implements AfterViewInit { + // The target that will host the Flutter app. + @ViewChild('flutterTarget') flutterTarget!: ElementRef; + + @Input() src: String = 'main.dart.js'; + @Input() assetBase: String = ''; + @Output() appLoaded: EventEmitter = new EventEmitter(); + + ngAfterViewInit(): void { + const target: HTMLElement = this.flutterTarget.nativeElement; + + _flutter.loader.loadEntrypoint({ + entrypointUrl: this.src, + onEntrypointLoaded: async (engineInitializer: any) => { + let appRunner = await engineInitializer.initializeEngine({ + hostElement: target, + assetBase: this.assetBase, + }); + await appRunner.runApp(); + } + }); + + target.addEventListener("flutter-initialized", (event: Event) => { + let state = (event as CustomEvent).detail; + window._debug = state; + this.appLoaded.emit(state); + }, { + once: true, + }); + } +} diff --git a/web_embedding/ng-flutter/src/assets/.gitkeep b/web_embedding/ng-flutter/src/assets/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/web_embedding/ng-flutter/src/favicon.ico b/web_embedding/ng-flutter/src/favicon.ico new file mode 100644 index 000000000..997406ad2 Binary files /dev/null and b/web_embedding/ng-flutter/src/favicon.ico differ diff --git a/web_embedding/ng-flutter/src/index.html b/web_embedding/ng-flutter/src/index.html new file mode 100644 index 000000000..91c167b55 --- /dev/null +++ b/web_embedding/ng-flutter/src/index.html @@ -0,0 +1,16 @@ + + + + + NgFlutter + + + + + + + + + + + diff --git a/web_embedding/ng-flutter/src/main.ts b/web_embedding/ng-flutter/src/main.ts new file mode 100644 index 000000000..1a7b3c840 --- /dev/null +++ b/web_embedding/ng-flutter/src/main.ts @@ -0,0 +1,14 @@ +import { bootstrapApplication } from '@angular/platform-browser'; +import { provideRouter, Routes } from '@angular/router'; +import { AppComponent } from './app/app.component'; +import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; +import { importProvidersFrom } from '@angular/core'; + +const appRoutes: Routes = []; + +bootstrapApplication(AppComponent, { + providers: [ + provideRouter(appRoutes), + importProvidersFrom(BrowserAnimationsModule) +] +}) \ No newline at end of file diff --git a/web_embedding/ng-flutter/src/styles.css b/web_embedding/ng-flutter/src/styles.css new file mode 100644 index 000000000..efe0dc107 --- /dev/null +++ b/web_embedding/ng-flutter/src/styles.css @@ -0,0 +1,54 @@ +html, body { height: 100%; } +body { margin: 0; font-family: Roboto, "Helvetica Neue", sans-serif; } + +/* FX */ +.fx-resize { + width: 480px !important; + height: 320px !important; +} +.fx-spin { animation: spin 6400ms ease-in-out infinite; } +.fx-shadow { position: relative; overflow: visible !important; } +.fx-shadow::before { + content: ""; + position: absolute; + display: block; + width: 100%; + top: calc(100% - 1px); + left: 0; + height: 1px; + background-color: black; + border-radius: 50%; + z-index: -1; + transform: rotateX(80deg); + box-shadow: 0px 0px 60px 38px rgb(0 0 0 / 25%); +} +.fx-mirror { + -webkit-box-reflect: below 0px linear-gradient(to bottom, rgba(0,0,0,0.0), rgba(0,0,0,0.4)); +} + +@keyframes spin { + 0% { + transform: perspective(1000px) rotateY(0deg); + animation-timing-function: ease-in-out; + } + 10% { + transform: perspective(1000px) rotateY(0deg); + animation-timing-function: ease-in-out; + } + 40% { + transform: perspective(1000px) rotateY(180deg); + animation-timing-function: ease-in-out; + } + 60% { + transform: perspective(1000px) rotateY(180deg); + animation-timing-function: ease-in-out; + } + 90% { + transform: perspective(1000px) rotateY(359deg); + animation-timing-function: ease-in-out; + } + 100% { + transform: perspective(1000px) rotateY(360deg); + animation-timing-function: ease-in-out; + } +} \ No newline at end of file diff --git a/web_embedding/ng-flutter/tsconfig.app.json b/web_embedding/ng-flutter/tsconfig.app.json new file mode 100644 index 000000000..374cc9d29 --- /dev/null +++ b/web_embedding/ng-flutter/tsconfig.app.json @@ -0,0 +1,14 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/app", + "types": [] + }, + "files": [ + "src/main.ts" + ], + "include": [ + "src/**/*.d.ts" + ] +} diff --git a/web_embedding/ng-flutter/tsconfig.json b/web_embedding/ng-flutter/tsconfig.json new file mode 100644 index 000000000..ed966d43a --- /dev/null +++ b/web_embedding/ng-flutter/tsconfig.json @@ -0,0 +1,33 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "compileOnSave": false, + "compilerOptions": { + "baseUrl": "./", + "outDir": "./dist/out-tsc", + "forceConsistentCasingInFileNames": true, + "strict": true, + "noImplicitOverride": true, + "noPropertyAccessFromIndexSignature": true, + "noImplicitReturns": true, + "noFallthroughCasesInSwitch": true, + "sourceMap": true, + "declaration": false, + "downlevelIteration": true, + "experimentalDecorators": true, + "moduleResolution": "node", + "importHelpers": true, + "target": "ES2022", + "module": "ES2022", + "useDefineForClassFields": false, + "lib": [ + "ES2022", + "dom" + ] + }, + "angularCompilerOptions": { + "enableI18nLegacyMessageIdFormat": false, + "strictInjectionParameters": true, + "strictInputAccessModifiers": true, + "strictTemplates": true + } +} diff --git a/web_embedding/ng-flutter/tsconfig.spec.json b/web_embedding/ng-flutter/tsconfig.spec.json new file mode 100644 index 000000000..be7e9da76 --- /dev/null +++ b/web_embedding/ng-flutter/tsconfig.spec.json @@ -0,0 +1,14 @@ +/* To learn more about this file see: https://angular.io/config/tsconfig. */ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "./out-tsc/spec", + "types": [ + "jasmine" + ] + }, + "include": [ + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +}