diff --git a/.github/workflows/native_storage.yaml b/.github/workflows/native_storage.yaml
new file mode 100644
index 00000000..eda7b561
--- /dev/null
+++ b/.github/workflows/native_storage.yaml
@@ -0,0 +1,168 @@
+name: native_storage
+on:
+ pull_request:
+ paths:
+ - ".github/workflows/native_storage.yaml"
+ - "packages/native/storage/**"
+
+# Prevent duplicate runs due to Graphite
+# https://graphite.dev/docs/troubleshooting#why-are-my-actions-running-twice
+concurrency:
+ group: ${{ github.repository }}-${{ github.workflow }}-${{ github.ref }}-${{ github.ref == 'refs/heads/main' && github.sha || ''}}
+ cancel-in-progress: true
+
+jobs:
+ analyze_and_format:
+ runs-on: ubuntu-latest
+ timeout-minutes: 10
+ steps:
+ - name: Git Checkout
+ uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # 4.1.2
+ - name: Setup Flutter
+ uses: subosito/flutter-action@1c5eb12d812966ca84680edc38353a0851c8fd56 # 2.14.0
+ with:
+ cache: true
+ - name: Get Packages
+ working-directory: packages/native/storage
+ run: dart pub get
+ - name: Analyze
+ working-directory: packages/native/storage
+ run: dart analyze
+ - name: Format
+ working-directory: packages/native/storage
+ run: dart format --set-exit-if-changed .
+ test_darwin:
+ runs-on: macos-latest-xlarge
+ timeout-minutes: 20
+ steps:
+ - name: Git Checkout
+ uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # 4.1.2
+ - name: Setup Flutter
+ uses: subosito/flutter-action@1c5eb12d812966ca84680edc38353a0851c8fd56 # 2.14.0
+ with:
+ cache: true
+ - name: Get Packages
+ working-directory: packages/native/storage
+ run: dart pub get
+ - name: Test
+ working-directory: packages/native/storage
+ run: dart test
+ - name: Get Packages (Example)
+ working-directory: packages/native/storage/example
+ run: flutter pub get
+ - name: Setup iOS Simulator
+ run: |
+ RUNTIME=$(xcrun simctl list runtimes | grep 'iOS 17' | tail -n 1 | cut -d' ' -f 7)
+ echo "Using runtime: $RUNTIME"
+ xcrun simctl create ios 'iPhone 15 Pro Max' $RUNTIME
+ echo "Booting simulator"
+ xcrun simctl boot ios
+ echo "Booted simulator"
+ - name: Test (iOS)
+ working-directory: packages/native/storage/example
+ run: flutter test -d ios integration_test/storage_test.dart
+ - name: Test (macOS)
+ working-directory: packages/native/storage/example
+ run: flutter test -d macos integration_test/storage_test.dart
+ test_android:
+ runs-on:
+ group: public
+ labels: linux
+ timeout-minutes: 15
+ steps:
+ - name: Git Checkout
+ uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # 4.1.2
+ - name: Setup Flutter
+ uses: subosito/flutter-action@1c5eb12d812966ca84680edc38353a0851c8fd56 # 2.14.0
+ with:
+ cache: true
+ - name: Get Packages (Example)
+ working-directory: packages/native/storage/example
+ run: flutter pub get
+ - name: Enable KVM
+ run: |
+ echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules
+ sudo udevadm control --reload-rules
+ sudo udevadm trigger --name-match=kvm
+ - name: Test (Android)
+ uses: ReactiveCircus/android-emulator-runner@6b0df4b0efb23bb0ec63d881db79aefbc976e4b2 # 2.30.1
+ with:
+ # Matches `package:jni` compileSdkVersion
+ # https://github.com/dart-lang/native/blob/001910c9f40d637cb25c19bb500fb89cebdf7450/pkgs/jni/android/build.gradle#L57C23-L57C25
+ api-level: 31
+ arch: x86_64
+ script: cd packages/native/storage/example && flutter test -d emulator integration_test/storage_test.dart
+ test_linux:
+ runs-on: ubuntu-latest
+ timeout-minutes: 15
+ steps:
+ - name: Git Checkout
+ uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # 4.1.2
+ - name: Setup Flutter
+ uses: subosito/flutter-action@1c5eb12d812966ca84680edc38353a0851c8fd56 # 2.14.0
+ with:
+ cache: true
+ - name: Install Build Dependencies
+ run: sudo apt-get update && sudo apt-get install -y clang cmake git ninja-build pkg-config libgtk-3-dev liblzma-dev libstdc++-12-dev
+ - name: Setup Test Environment
+ working-directory: packages/native/storage
+ run: tool/setup-ci.sh
+ - name: Get Packages
+ working-directory: packages/native/storage
+ run: dart pub get
+ - name: Test
+ working-directory: packages/native/storage
+ run: dart test
+ - name: Get Packages (Example)
+ working-directory: packages/native/storage/example
+ run: flutter pub get
+ - name: Test (Linux)
+ working-directory: packages/native/storage/example
+ run: |
+ # Headless tests require virtual display for the linux tests to run.
+ export DISPLAY=:99
+ sudo Xvfb -ac :99 -screen 0 1280x1024x24 > /dev/null 2>&1 &
+ flutter test -d linux integration_test/storage_test.dart
+ # TODO: Re-enable
+ # Need to fix this: Git error. Command: `git clone --mirror https://github.com/dart-lang/native /c/Users/runneradmin/.pub-cache\git\cache\native-647c69ed8027da6d6def6bc40efa87cf1a2f76aa`
+ test_windows:
+ runs-on: windows-latest
+ timeout-minutes: 15
+ steps:
+ - name: Git Checkout
+ uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # 4.1.2
+ - name: Setup Flutter
+ uses: subosito/flutter-action@1c5eb12d812966ca84680edc38353a0851c8fd56 # 2.14.0
+ with:
+ cache: true
+ - name: Get Packages
+ working-directory: packages/native/storage
+ run: dart pub get --no-example
+ # - name: Test
+ # working-directory: packages/native/storage
+ # run: dart test
+ - name: Get Packages (Example)
+ working-directory: packages/native/storage/example
+ run: flutter pub get
+ - name: Test (Windows)
+ working-directory: packages/native/storage/example
+ run: flutter test -d windows integration_test/storage_test.dart
+ test_web:
+ runs-on: ubuntu-latest
+ timeout-minutes: 15
+ steps:
+ - name: Git Checkout
+ uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # 4.1.2
+ - name: Setup Flutter
+ uses: subosito/flutter-action@1c5eb12d812966ca84680edc38353a0851c8fd56 # 2.14.0
+ with:
+ cache: true
+ - name: Get Packages
+ working-directory: packages/native/storage
+ run: dart pub get
+ - name: Test (Chrome, dart2js)
+ working-directory: packages/native/storage
+ run: dart test -p chrome
+ - name: Test (Chrome, dart2wasm)
+ working-directory: packages/native/storage
+ run: dart test -p chrome -c dart2wasm
diff --git a/Cargo.lock b/Cargo.lock
index 6a4ae907..8dc9d1e9 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -1881,9 +1881,9 @@ dependencies = [
[[package]]
name = "serde_json"
-version = "1.0.114"
+version = "1.0.115"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c5f09b1bd632ef549eaa9f60a1f8de742bdbc698e6cee2095fc84dde5f549ae0"
+checksum = "12dc5c46daa8e9fdf4f5e71b6cf9a53f2487da0e86e55808e2d35539666497dd"
dependencies = [
"indexmap 2.2.5",
"itoa",
diff --git a/packages/native/storage/.gitignore b/packages/native/storage/.gitignore
new file mode 100644
index 00000000..fcd5f4e2
--- /dev/null
+++ b/packages/native/storage/.gitignore
@@ -0,0 +1,8 @@
+# https://dart.dev/guides/libraries/private-files
+# Created by `dart pub`
+.dart_tool/
+
+# Avoid committing pubspec.lock for library packages; see
+# https://dart.dev/guides/libraries/private-files#pubspeclock.
+pubspec.lock
+build/
\ No newline at end of file
diff --git a/packages/native/storage/CHANGELOG.md b/packages/native/storage/CHANGELOG.md
new file mode 100644
index 00000000..a0712a79
--- /dev/null
+++ b/packages/native/storage/CHANGELOG.md
@@ -0,0 +1,3 @@
+## 0.1.0
+
+- Initial version.
diff --git a/packages/native/storage/LICENSE b/packages/native/storage/LICENSE
new file mode 100644
index 00000000..27ecec44
--- /dev/null
+++ b/packages/native/storage/LICENSE
@@ -0,0 +1,19 @@
+Copyright (c) 2024 Teo, Inc. (Celest)
+
+Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
+
+1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
+
+Subject to the terms and conditions of this license, each copyright holder and contributor hereby grants to those receiving rights under this license a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except for failure to satisfy the conditions of this license) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer this software, where such license applies only to those patent claims, already acquired or hereafter acquired, licensable by such copyright holder or contributor that are necessarily infringed by:
+
+(a) their Contribution(s) (the licensed copyrights of copyright holders and non-copyrightable additions of contributors, in source or binary form) alone; or
+
+(b) combination of their Contribution(s) with the work of authorship to which such Contribution(s) was added by such copyright holder or contributor, if, at the time the Contribution is added, such addition causes such combination to be necessarily infringed. The patent license shall not apply to any other combinations which include the Contribution.
+
+Except as expressly stated above, no rights or licenses from any copyright holder or contributor is granted under this license, whether expressly, by implication, estoppel or otherwise.
+
+DISCLAIMER
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\ No newline at end of file
diff --git a/packages/native/storage/README.md b/packages/native/storage/README.md
new file mode 100644
index 00000000..8a20228d
--- /dev/null
+++ b/packages/native/storage/README.md
@@ -0,0 +1,87 @@
+# native_storage
+
+Provides a unified API for accessing platform-native storage functionality, such as the iOS Keychain and Android SharedPreferences.
+Sync and async APIs are provided for all storage operations, where asynchronous APIs use an `Isolate` to perform the operation in
+a background thread.
+
+> See [Web support](#Web) below for more info on how this package behaves in a browser environment.
+
+## Storage Types
+
+All implementations conform to the `NativeStorage` interface, which provides a simple API for reading and writing key-value pairs.
+There are three variations of `NativeStorage`: `NativeLocalStorage`, `NativeSecureStorage`, and `IsolatedNativeStorage`.
+By default, a `NativeLocalStorage` instance is returned.
+
+### Local Storage
+
+Using a `NativeLocalStorage` instance, you can read/write values to your application's local data storage which are isolated to your
+application and persisted across app restarts.
+
+```dart
+final storage = NativeStorage();
+storage.write('key', 'value');
+print(storage.read('key')); // value
+```
+
+The local storage APIs are useful for storing non-sensitive data that should persist across app restarts and be deleted alongside the app.
+
+The platform implementations for local `NativeStorage` are:
+
+| Platform | Implementation |
+| -------- | -------------- |
+| iOS/macOS | [UserDefaults](https://developer.apple.com/documentation/foundation/userdefaults) |
+| Android | [SharedPreferences](https://developer.android.com/reference/android/content/SharedPreferences) |
+| Linux | JSON file |
+| Windows | [Registry](https://learn.microsoft.com/en-us/windows/win32/sysinfo/about-the-registry) |
+| Web | [localStorage](https://developer.mozilla.org/en-US/docs/Web/API/Window/localStorage) |
+
+### Secure Storage
+
+Sometimes you may need to store sensitive data, such as API keys or user credentials, in a way that is more secure than local storage.
+In this case, use the `secure` getter on a `NativeStorage` instance to get a secure variation.
+
+```dart
+final secureStorage = storage.secure;
+secureStorage.write('key', 'value'); // value is encrypted before being stored
+print(secureStorage.read('key')); // value
+```
+
+The platform implementations for `NativeSecureStorage` are:
+
+| Platform | Implementation |
+| -------- | -------------- |
+| iOS/macOS | [Keychain](https://developer.apple.com/documentation/security/keychain_services) |
+| Android | [EncryptedSharedPreferences](https://developer.android.com/reference/androidx/security/crypto/EncryptedSharedPreferences) |
+| Linux | [libsecret](https://wiki.gnome.org/Projects/Libsecret) |
+| Windows | [Security and Identity API](https://learn.microsoft.com/en-us/windows/win32/api/dpapi/) |
+| Web | In-Memory (See [Web](#Web)) |
+
+### Isolated Storage
+
+The APIs shown above are all synchronous, which means they will block the main thread while reading/writing data. If you need to perform
+storage operations in the background, use the `isolated` getter on a `NativeStorage` instance to get an isolated variation.
+
+```dart
+final isolatedStorage = storage.isolated;
+await isolated.write('key', 'value'); // value is written in a background thread
+print(await isolated.read('key')); // value
+```
+
+These can be combined to create a secure, isolated storage for example:
+
+```dart
+final secureIsolatedStorage = storage.secure.isolated;
+await secureIsolatedStorage.write('key', 'value'); // value is encrypted and written in a background thread
+print(await secureIsolatedStorage.read); // value
+```
+
+The platform implementations for `IsolatedNativeStorage` are the same as the local/secure storage implementations, but the operations
+are performed using an [Isolate](https://api.dart.dev/stable/dart-isolate/Isolate-class.html).
+
+### Web
+
+When running in a browser environment, there is [no way](https://auth0.com/blog/secure-browser-storage-the-facts/) to securely persist
+sensitive data. As a result, the `NativeSecureStorage` implementation for web is an in-memory store that does not persist data across
+page reloads. The `NativeLocalStorage` implementation for web, however, uses the browser's `localStorage` API for persistence.
+
+The `IsolatedNativeStorage` implementation for web uses the `NativeLocalStorage` implementation, but does not perform calls in a Web Worker.
diff --git a/packages/native/storage/analysis_options.yaml b/packages/native/storage/analysis_options.yaml
new file mode 100644
index 00000000..572dd239
--- /dev/null
+++ b/packages/native/storage/analysis_options.yaml
@@ -0,0 +1 @@
+include: package:lints/recommended.yaml
diff --git a/packages/native/storage/android/.gitignore b/packages/native/storage/android/.gitignore
new file mode 100644
index 00000000..167e46c9
--- /dev/null
+++ b/packages/native/storage/android/.gitignore
@@ -0,0 +1,8 @@
+*.iml
+.gradle
+local.properties
+.idea/
+.DS_Store
+build
+captures
+.cxx
\ No newline at end of file
diff --git a/packages/native/storage/android/build.gradle b/packages/native/storage/android/build.gradle
new file mode 100644
index 00000000..06f28715
--- /dev/null
+++ b/packages/native/storage/android/build.gradle
@@ -0,0 +1,71 @@
+group 'dev.celest.native_storage'
+version '1.0-SNAPSHOT'
+
+buildscript {
+ ext.kotlin_version = '1.7.21'
+ repositories {
+ google()
+ mavenCentral()
+ }
+
+ dependencies {
+ classpath 'com.android.tools.build:gradle:7.4.2'
+ classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
+ }
+}
+
+rootProject.allprojects {
+ repositories {
+ google()
+ mavenCentral()
+ }
+}
+
+apply plugin: 'com.android.library'
+apply plugin: 'kotlin-android'
+
+android {
+ // Conditional for compatibility with AGP <4.2.
+ if (project.android.hasProperty("namespace")) {
+ namespace 'dev.celest.native_storage'
+ }
+
+ compileSdk 34
+
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+
+ kotlinOptions {
+ jvmTarget = '1.8'
+ }
+
+ sourceSets {
+ main.java.srcDirs += 'src/main/kotlin'
+ }
+
+ defaultConfig {
+ minSdkVersion 23
+ consumerProguardFiles 'consumer-rules.pro'
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ }
+ }
+
+ testOptions {
+ unitTests {
+ includeAndroidResources = true
+ }
+ }
+}
+
+dependencies {
+ implementation 'androidx.security:security-crypto:[1.1.0-alpha04,)'
+ testImplementation 'junit:junit:4.13.2'
+ testImplementation 'org.robolectric:robolectric:4.10.3'
+ testImplementation 'androidx.test:core-ktx:1.5.0'
+}
diff --git a/packages/native/storage/android/consumer-rules.pro b/packages/native/storage/android/consumer-rules.pro
new file mode 100644
index 00000000..aea702ac
--- /dev/null
+++ b/packages/native/storage/android/consumer-rules.pro
@@ -0,0 +1 @@
+-keep class dev.celest.native_storage.** { *; }
\ No newline at end of file
diff --git a/packages/native/storage/android/settings.gradle b/packages/native/storage/android/settings.gradle
new file mode 100644
index 00000000..d8dd1483
--- /dev/null
+++ b/packages/native/storage/android/settings.gradle
@@ -0,0 +1,6 @@
+rootProject.name = 'native_storage'
+dependencyResolutionManagement {
+ repositories {
+ google()
+ }
+}
diff --git a/packages/native/storage/android/src/main/AndroidManifest.xml b/packages/native/storage/android/src/main/AndroidManifest.xml
new file mode 100644
index 00000000..ed4ae82a
--- /dev/null
+++ b/packages/native/storage/android/src/main/AndroidManifest.xml
@@ -0,0 +1,3 @@
+
+
\ No newline at end of file
diff --git a/packages/native/storage/android/src/main/kotlin/dev/celest/native_storage/NativeLocalStorage.kt b/packages/native/storage/android/src/main/kotlin/dev/celest/native_storage/NativeLocalStorage.kt
new file mode 100644
index 00000000..1f394f26
--- /dev/null
+++ b/packages/native/storage/android/src/main/kotlin/dev/celest/native_storage/NativeLocalStorage.kt
@@ -0,0 +1,17 @@
+package dev.celest.native_storage
+
+import android.content.Context
+import android.content.SharedPreferences
+import androidx.annotation.Keep
+
+@Keep
+class NativeLocalStorage(
+ context: Context,
+ namespace: String,
+ scope: String?,
+) : NativeStorage(context, namespace, scope) {
+
+ override val sharedPreferences: SharedPreferences =
+ context.getSharedPreferences(namespace, Context.MODE_PRIVATE)
+
+}
\ No newline at end of file
diff --git a/packages/native/storage/android/src/main/kotlin/dev/celest/native_storage/NativeSecureStorage.kt b/packages/native/storage/android/src/main/kotlin/dev/celest/native_storage/NativeSecureStorage.kt
new file mode 100644
index 00000000..6dcfd692
--- /dev/null
+++ b/packages/native/storage/android/src/main/kotlin/dev/celest/native_storage/NativeSecureStorage.kt
@@ -0,0 +1,33 @@
+package dev.celest.native_storage
+
+import android.content.Context
+import android.content.SharedPreferences
+import androidx.annotation.Keep
+import androidx.security.crypto.EncryptedSharedPreferences
+import androidx.security.crypto.MasterKey
+
+// TODO(dnys1): Exclude from backup:
+// - https://developer.android.com/reference/androidx/security/crypto/EncryptedSharedPreferences
+// - https://developer.android.com/guide/topics/data/autobackup#IncludingFiles
+@Keep
+class NativeSecureStorage(
+ context: Context,
+ namespace: String,
+ scope: String?,
+) : NativeStorage(context, namespace, scope) {
+
+ override val sharedPreferences: SharedPreferences by lazy {
+ val masterKey = MasterKey.Builder(context)
+ .setKeyScheme(MasterKey.KeyScheme.AES256_GCM)
+ .build()
+ val sharedPreferences = EncryptedSharedPreferences.create(
+ context,
+ namespace,
+ masterKey,
+ EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV,
+ EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM,
+ )
+ sharedPreferences
+ }
+
+}
\ No newline at end of file
diff --git a/packages/native/storage/android/src/main/kotlin/dev/celest/native_storage/NativeStorage.kt b/packages/native/storage/android/src/main/kotlin/dev/celest/native_storage/NativeStorage.kt
new file mode 100644
index 00000000..87fa66bb
--- /dev/null
+++ b/packages/native/storage/android/src/main/kotlin/dev/celest/native_storage/NativeStorage.kt
@@ -0,0 +1,59 @@
+package dev.celest.native_storage
+
+import android.content.Context
+import android.content.SharedPreferences
+import androidx.annotation.Keep
+
+/**
+ * Base class for native storage implementations.
+ */
+@Keep
+sealed class NativeStorage(
+ protected val context: Context,
+ protected val namespace: String,
+ private val scope: String?,
+) {
+
+ /**
+ * The implementation-specific SharedPreferences instance.
+ */
+ protected abstract val sharedPreferences: SharedPreferences
+
+ /**
+ * The prefix to set on all keys.
+ */
+ private val prefix: String = if (scope.isNullOrEmpty()) "" else "$scope/"
+
+ private val editor: SharedPreferences.Editor
+ get() = sharedPreferences.edit()
+
+ fun write(key: String, value: String?) {
+ println("Writing: $prefix$key")
+ with(editor) {
+ putString("$prefix$key", value)
+ apply()
+ }
+ }
+
+ fun read(key: String): String? {
+ println("Reading: $prefix$key")
+ return sharedPreferences.getString("$prefix$key", null)
+ }
+
+ fun delete(key: String): String? {
+ val current = read("$prefix$key")
+ with(editor) {
+ remove("$prefix$key")
+ apply()
+ }
+ return current
+ }
+
+ fun clear() {
+ with(editor) {
+ clear()
+ apply()
+ }
+ }
+
+}
\ No newline at end of file
diff --git a/packages/native/storage/android/src/test/kotlin/dev/celest/native_storage/FakeAndroidKeystore.kt b/packages/native/storage/android/src/test/kotlin/dev/celest/native_storage/FakeAndroidKeystore.kt
new file mode 100644
index 00000000..b224efb9
--- /dev/null
+++ b/packages/native/storage/android/src/test/kotlin/dev/celest/native_storage/FakeAndroidKeystore.kt
@@ -0,0 +1,92 @@
+package dev.celest.native_storage
+
+import java.io.InputStream
+import java.io.OutputStream
+import java.security.Key
+import java.security.KeyStore
+import java.security.KeyStoreSpi
+import java.security.Provider
+import java.security.SecureRandom
+import java.security.Security
+import java.security.cert.Certificate
+import java.security.spec.AlgorithmParameterSpec
+import java.util.Date
+import java.util.Enumeration
+import javax.crypto.KeyGenerator
+import javax.crypto.KeyGeneratorSpi
+import javax.crypto.SecretKey
+
+/**
+ * A Fake Keystore implementation to use in Tests since it is not available in robolectric.
+ * See: https://github.com/robolectric/robolectric/issues/1518
+ */
+object FakeAndroidKeyStore {
+
+ val setup by lazy {
+ Security.addProvider(object : Provider("AndroidKeyStore", 1.0, "") {
+ init {
+ put("KeyStore.AndroidKeyStore", FakeKeyStore::class.java.name)
+ put("KeyGenerator.AES", FakeAesKeyGenerator::class.java.name)
+ }
+ })
+ }
+
+ @Suppress("unused")
+ class FakeKeyStore : KeyStoreSpi() {
+ private val wrapped = KeyStore.getInstance(KeyStore.getDefaultType())
+
+ override fun engineIsKeyEntry(alias: String?): Boolean = wrapped.isKeyEntry(alias)
+ override fun engineIsCertificateEntry(alias: String?): Boolean =
+ wrapped.isCertificateEntry(alias)
+
+ override fun engineGetCertificate(alias: String?): Certificate =
+ wrapped.getCertificate(alias)
+
+ override fun engineGetCreationDate(alias: String?): Date = wrapped.getCreationDate(alias)
+ override fun engineDeleteEntry(alias: String?) = wrapped.deleteEntry(alias)
+ override fun engineSetKeyEntry(
+ alias: String?,
+ key: Key?,
+ password: CharArray?,
+ chain: Array?
+ ) =
+ wrapped.setKeyEntry(alias, key, password, chain)
+
+ override fun engineSetKeyEntry(
+ alias: String?,
+ key: ByteArray?,
+ chain: Array?
+ ) = wrapped.setKeyEntry(alias, key, chain)
+
+ override fun engineStore(stream: OutputStream?, password: CharArray?) =
+ wrapped.store(stream, password)
+
+ override fun engineSize(): Int = wrapped.size()
+ override fun engineAliases(): Enumeration = wrapped.aliases()
+ override fun engineContainsAlias(alias: String?): Boolean = wrapped.containsAlias(alias)
+ override fun engineLoad(stream: InputStream?, password: CharArray?) =
+ wrapped.load(stream, password)
+
+ override fun engineGetCertificateChain(alias: String?): Array =
+ wrapped.getCertificateChain(alias)
+
+ override fun engineSetCertificateEntry(alias: String?, cert: Certificate?) =
+ wrapped.setCertificateEntry(alias, cert)
+
+ override fun engineGetCertificateAlias(cert: Certificate?): String =
+ wrapped.getCertificateAlias(cert)
+
+ override fun engineGetKey(alias: String?, password: CharArray?): Key? =
+ wrapped.getKey(alias, password)
+ }
+
+ @Suppress("unused")
+ class FakeAesKeyGenerator : KeyGeneratorSpi() {
+ private val wrapped = KeyGenerator.getInstance("AES")
+
+ override fun engineInit(random: SecureRandom?) = Unit
+ override fun engineInit(params: AlgorithmParameterSpec?, random: SecureRandom?) = Unit
+ override fun engineInit(keysize: Int, random: SecureRandom?) = Unit
+ override fun engineGenerateKey(): SecretKey = wrapped.generateKey()
+ }
+}
diff --git a/packages/native/storage/android/src/test/kotlin/dev/celest/native_storage/NativeStorageTest.kt b/packages/native/storage/android/src/test/kotlin/dev/celest/native_storage/NativeStorageTest.kt
new file mode 100644
index 00000000..3588674c
--- /dev/null
+++ b/packages/native/storage/android/src/test/kotlin/dev/celest/native_storage/NativeStorageTest.kt
@@ -0,0 +1,117 @@
+package dev.celest.native_storage
+
+import android.content.Context
+import androidx.test.core.app.ApplicationProvider
+import org.junit.Assert.*
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.junit.runners.Suite
+import org.robolectric.RobolectricTestRunner
+import org.robolectric.annotation.Config
+
+@RunWith(Suite::class)
+@Suite.SuiteClasses(
+ DefaultsTest::class,
+ CustomNamespaceTest::class,
+ CustomScopeTest::class,
+ EmptyScopeTest::class,
+)
+class NativeStorageTest
+
+class DefaultsTest : NativeStorageTestBase()
+
+class CustomNamespaceTest : NativeStorageTestBase() {
+ override val namespace = "my.custom.namespace"
+}
+
+class CustomScopeTest : NativeStorageTestBase() {
+ override val namespace = "my.custom.namespace"
+ override val scope = "custom-scope"
+}
+
+class EmptyScopeTest : NativeStorageTestBase() {
+ override val namespace = "my.custom.namespace"
+ override val scope = ""
+
+ @Test
+ fun sharesWithNullScope() {
+ val localNull = NativeLocalStorage(context, namespace, null)
+ localStorage.write("hello", "world")
+ assertEquals("world", localNull.read("hello"))
+
+ // TODO: Not working
+// val secureNull = NativeSecureStorage(context, namespace, "")
+// secureStorage.write("hello", "world")
+// assertEquals("world", secureNull.read("hello"))
+ }
+
+ @Test
+ fun twoInstances() {
+ val inst1 = NativeSecureStorage(context, defaultNamespace, "")
+ val inst2 = NativeSecureStorage(context, defaultNamespace, "")
+
+ inst1.write("hello", "world")
+ assertEquals("world", inst1.read("hello"))
+ assertEquals("world", inst2.read("hello"))
+ }
+}
+
+@RunWith(RobolectricTestRunner::class)
+@Config(manifest = Config.NONE, sdk = [23, 33])
+abstract class NativeStorageTestBase {
+
+ val context: Context = ApplicationProvider.getApplicationContext()
+ val defaultNamespace: String = context.packageName
+ private val defaultScope: String? = null
+
+ open val namespace: String = defaultNamespace
+ open val scope: String? = defaultScope
+
+ private lateinit var secureStorage: NativeSecureStorage
+ lateinit var localStorage: NativeLocalStorage
+ private lateinit var storages: List
+
+ @Before
+ fun setUp() {
+ println("${javaClass.simpleName}: namespace=$namespace, scope=$scope")
+ FakeAndroidKeyStore.setup
+ secureStorage = NativeSecureStorage(context, namespace, scope)
+ localStorage = NativeLocalStorage(context, namespace, scope)
+ storages = listOf(secureStorage, localStorage)
+ secureStorage.clear()
+ localStorage.clear()
+ }
+
+ @Test
+ fun unknownKey() {
+ storages.forEach {
+ assertEquals(it.read("key1"), null)
+ }
+ }
+
+ @Test
+ fun readWriteDelete() {
+ storages.forEach { storage ->
+ storage.write("key1", "value1")
+ assertEquals(storage.read("key1"), "value1")
+
+ storage.delete("key1")
+ assertNull(storage.read("key1"))
+ }
+ }
+
+ @Test
+ fun clear() {
+ storages.forEach { storage ->
+ storage.write("key1", "value1")
+ storage.write("key2", "value2")
+ assertEquals(storage.read("key1"), "value1")
+ assertEquals(storage.read("key2"), "value2")
+
+ storage.clear()
+ assertNull(storage.read("key1"))
+ assertNull(storage.read("key2"))
+ }
+ }
+}
diff --git a/packages/native/storage/example/.gitignore b/packages/native/storage/example/.gitignore
new file mode 100644
index 00000000..29a3a501
--- /dev/null
+++ b/packages/native/storage/example/.gitignore
@@ -0,0 +1,43 @@
+# 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
+.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/packages/native/storage/example/.metadata b/packages/native/storage/example/.metadata
new file mode 100644
index 00000000..bae49f35
--- /dev/null
+++ b/packages/native/storage/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 and should not be manually edited.
+
+version:
+ revision: "7482962148e8d758338d8a28f589f317e1e42ba4"
+ channel: "stable"
+
+project_type: app
+
+# Tracks metadata for the flutter migrate command
+migration:
+ platforms:
+ - platform: root
+ create_revision: 7482962148e8d758338d8a28f589f317e1e42ba4
+ base_revision: 7482962148e8d758338d8a28f589f317e1e42ba4
+ - platform: android
+ create_revision: 7482962148e8d758338d8a28f589f317e1e42ba4
+ base_revision: 7482962148e8d758338d8a28f589f317e1e42ba4
+ - platform: ios
+ create_revision: 7482962148e8d758338d8a28f589f317e1e42ba4
+ base_revision: 7482962148e8d758338d8a28f589f317e1e42ba4
+ - platform: linux
+ create_revision: 7482962148e8d758338d8a28f589f317e1e42ba4
+ base_revision: 7482962148e8d758338d8a28f589f317e1e42ba4
+ - platform: macos
+ create_revision: 7482962148e8d758338d8a28f589f317e1e42ba4
+ base_revision: 7482962148e8d758338d8a28f589f317e1e42ba4
+ - platform: web
+ create_revision: 7482962148e8d758338d8a28f589f317e1e42ba4
+ base_revision: 7482962148e8d758338d8a28f589f317e1e42ba4
+ - platform: windows
+ create_revision: 7482962148e8d758338d8a28f589f317e1e42ba4
+ base_revision: 7482962148e8d758338d8a28f589f317e1e42ba4
+
+ # 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/packages/native/storage/example/README.md b/packages/native/storage/example/README.md
new file mode 100644
index 00000000..35a989bb
--- /dev/null
+++ b/packages/native/storage/example/README.md
@@ -0,0 +1,3 @@
+# platform_storage_example
+
+A new Flutter project.
diff --git a/packages/native/storage/example/analysis_options.yaml b/packages/native/storage/example/analysis_options.yaml
new file mode 100644
index 00000000..f9b30346
--- /dev/null
+++ b/packages/native/storage/example/analysis_options.yaml
@@ -0,0 +1 @@
+include: package:flutter_lints/flutter.yaml
diff --git a/packages/native/storage/example/android/.gitignore b/packages/native/storage/example/android/.gitignore
new file mode 100644
index 00000000..6f568019
--- /dev/null
+++ b/packages/native/storage/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/packages/native/storage/example/android/app/build.gradle b/packages/native/storage/example/android/app/build.gradle
new file mode 100644
index 00000000..6a91853f
--- /dev/null
+++ b/packages/native/storage/example/android/app/build.gradle
@@ -0,0 +1,66 @@
+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()) {
+ localPropertiesFile.withReader('UTF-8') { reader ->
+ localProperties.load(reader)
+ }
+}
+
+def flutterVersionCode = localProperties.getProperty('flutter.versionCode')
+if (flutterVersionCode == null) {
+ flutterVersionCode = '1'
+}
+
+def flutterVersionName = localProperties.getProperty('flutter.versionName')
+if (flutterVersionName == null) {
+ flutterVersionName = '1.0'
+}
+
+android {
+ namespace "dev.celest.platform_storage_example"
+ compileSdk 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 {
+ applicationId "dev.celest.platform_storage_example"
+ minSdkVersion 23
+ targetSdkVersion flutter.targetSdkVersion
+ versionCode flutterVersionCode.toInteger()
+ versionName flutterVersionName
+ }
+
+ buildTypes {
+ release {
+ signingConfig signingConfigs.debug
+ }
+ }
+}
+
+flutter {
+ source '../..'
+}
+
+dependencies {
+ // These dependencies are only present so that `jnigen` will work.
+ // Applications should not include these.
+ implementation 'androidx.security:security-crypto:[1.1.0-alpha04,)'
+}
diff --git a/packages/native/storage/example/android/app/src/debug/AndroidManifest.xml b/packages/native/storage/example/android/app/src/debug/AndroidManifest.xml
new file mode 100644
index 00000000..399f6981
--- /dev/null
+++ b/packages/native/storage/example/android/app/src/debug/AndroidManifest.xml
@@ -0,0 +1,7 @@
+
+
+
+
diff --git a/packages/native/storage/example/android/app/src/main/AndroidManifest.xml b/packages/native/storage/example/android/app/src/main/AndroidManifest.xml
new file mode 100644
index 00000000..cd012feb
--- /dev/null
+++ b/packages/native/storage/example/android/app/src/main/AndroidManifest.xml
@@ -0,0 +1,44 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/native/storage/example/android/app/src/main/kotlin/dev/celest/platform_storage_example/MainActivity.kt b/packages/native/storage/example/android/app/src/main/kotlin/dev/celest/platform_storage_example/MainActivity.kt
new file mode 100644
index 00000000..bed75735
--- /dev/null
+++ b/packages/native/storage/example/android/app/src/main/kotlin/dev/celest/platform_storage_example/MainActivity.kt
@@ -0,0 +1,5 @@
+package dev.celest.platform_storage_example
+
+import io.flutter.embedding.android.FlutterActivity
+
+class MainActivity: FlutterActivity()
diff --git a/packages/native/storage/example/android/app/src/main/res/drawable-v21/launch_background.xml b/packages/native/storage/example/android/app/src/main/res/drawable-v21/launch_background.xml
new file mode 100644
index 00000000..f74085f3
--- /dev/null
+++ b/packages/native/storage/example/android/app/src/main/res/drawable-v21/launch_background.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
diff --git a/packages/native/storage/example/android/app/src/main/res/drawable/launch_background.xml b/packages/native/storage/example/android/app/src/main/res/drawable/launch_background.xml
new file mode 100644
index 00000000..304732f8
--- /dev/null
+++ b/packages/native/storage/example/android/app/src/main/res/drawable/launch_background.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
diff --git a/packages/native/storage/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/packages/native/storage/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 00000000..db77bb4b
Binary files /dev/null and b/packages/native/storage/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/packages/native/storage/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/packages/native/storage/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 00000000..17987b79
Binary files /dev/null and b/packages/native/storage/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/packages/native/storage/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/packages/native/storage/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 00000000..09d43914
Binary files /dev/null and b/packages/native/storage/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/packages/native/storage/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/packages/native/storage/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 00000000..d5f1c8d3
Binary files /dev/null and b/packages/native/storage/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/packages/native/storage/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/packages/native/storage/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 00000000..4d6372ee
Binary files /dev/null and b/packages/native/storage/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/packages/native/storage/example/android/app/src/main/res/values-night/styles.xml b/packages/native/storage/example/android/app/src/main/res/values-night/styles.xml
new file mode 100644
index 00000000..06952be7
--- /dev/null
+++ b/packages/native/storage/example/android/app/src/main/res/values-night/styles.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/packages/native/storage/example/android/app/src/main/res/values/styles.xml b/packages/native/storage/example/android/app/src/main/res/values/styles.xml
new file mode 100644
index 00000000..cb1ef880
--- /dev/null
+++ b/packages/native/storage/example/android/app/src/main/res/values/styles.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
diff --git a/packages/native/storage/example/android/app/src/profile/AndroidManifest.xml b/packages/native/storage/example/android/app/src/profile/AndroidManifest.xml
new file mode 100644
index 00000000..399f6981
--- /dev/null
+++ b/packages/native/storage/example/android/app/src/profile/AndroidManifest.xml
@@ -0,0 +1,7 @@
+
+
+
+
diff --git a/packages/native/storage/example/android/build.gradle b/packages/native/storage/example/android/build.gradle
new file mode 100644
index 00000000..bc157bd1
--- /dev/null
+++ b/packages/native/storage/example/android/build.gradle
@@ -0,0 +1,18 @@
+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/packages/native/storage/example/android/gradle.properties b/packages/native/storage/example/android/gradle.properties
new file mode 100644
index 00000000..598d13fe
--- /dev/null
+++ b/packages/native/storage/example/android/gradle.properties
@@ -0,0 +1,3 @@
+org.gradle.jvmargs=-Xmx4G
+android.useAndroidX=true
+android.enableJetifier=true
diff --git a/packages/native/storage/example/android/gradle/wrapper/gradle-wrapper.properties b/packages/native/storage/example/android/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 00000000..e1ca574e
--- /dev/null
+++ b/packages/native/storage/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.6.3-all.zip
diff --git a/packages/native/storage/example/android/settings.gradle b/packages/native/storage/example/android/settings.gradle
new file mode 100644
index 00000000..1d6d19b7
--- /dev/null
+++ b/packages/native/storage/example/android/settings.gradle
@@ -0,0 +1,26 @@
+pluginManagement {
+ def flutterSdkPath = {
+ def properties = new Properties()
+ file("local.properties").withInputStream { properties.load(it) }
+ def flutterSdkPath = properties.getProperty("flutter.sdk")
+ assert flutterSdkPath != null, "flutter.sdk not set in local.properties"
+ return flutterSdkPath
+ }
+ settings.ext.flutterSdkPath = flutterSdkPath()
+
+ includeBuild("${settings.ext.flutterSdkPath}/packages/flutter_tools/gradle")
+
+ repositories {
+ google()
+ mavenCentral()
+ gradlePluginPortal()
+ }
+}
+
+plugins {
+ id "dev.flutter.flutter-plugin-loader" version "1.0.0"
+ id "com.android.application" version "7.3.0" apply false
+ id "org.jetbrains.kotlin.android" version "1.7.10" apply false
+}
+
+include ":app"
diff --git a/packages/native/storage/example/integration_test/storage_shared.dart b/packages/native/storage/example/integration_test/storage_shared.dart
new file mode 100644
index 00000000..094f5352
--- /dev/null
+++ b/packages/native/storage/example/integration_test/storage_shared.dart
@@ -0,0 +1,206 @@
+import 'dart:math';
+
+import 'package:native_storage/native_storage.dart';
+import 'package:test/test.dart';
+
+void sharedTests(String name, NativeStorageFactory factory) {
+ group(name, () {
+ const allowedNamespaces = ['com.domain.scope'];
+ for (final namespace in allowedNamespaces) {
+ late String key;
+ final storage = factory(namespace: namespace);
+
+ setUp(() {
+ storage.clear();
+ // Add some randomness to prevent overlap between concurrent tests.
+ key = String.fromCharCodes(
+ List.generate(10, (_) => _random.nextInt(255) + 1),
+ );
+ });
+
+ tearDownAll(() {
+ storage.clear();
+ storage.close();
+ });
+
+ group('namespace=$namespace', () {
+ group('write', () {
+ test('writes a new key-value pair to storage', () {
+ storage.write(key, 'value');
+ expect(storage.read(key), 'value');
+ });
+
+ test('updates the value for an existing key', () {
+ storage.write(key, 'write');
+ expect(storage.read(key), 'write', reason: 'Value was written');
+
+ storage.write(key, 'update');
+ expect(storage.read(key), 'update', reason: 'Value was updated');
+ });
+ });
+
+ group('read', () {
+ test('can read a non-existent key', () {
+ expect(storage.read(key), isNull);
+ });
+ });
+
+ group('delete', () {
+ test('removes the key if it exists', () {
+ storage.write(key, 'delete');
+ expect(storage.read(key), 'delete', reason: 'Value was written');
+
+ storage.delete(key);
+ expect(storage.read(key), isNull, reason: 'Value was deleted');
+ });
+
+ test('can delete a non-existent key', () {
+ expect(storage.read(key), isNull);
+ expect(() => storage.delete(key), returnsNormally);
+ });
+ });
+
+ group('clear', () {
+ const key1 = 'key1';
+ const key2 = 'key2';
+ const value1 = 'value1';
+ const value2 = 'value2';
+
+ test('removes all keys from storage', () {
+ storage.write(key1, value1);
+ storage.write(key2, value2);
+ expect(storage.read(key1), value1);
+ expect(storage.read(key2), value2);
+
+ storage.clear();
+
+ expect(storage.read(key1), isNull, reason: 'Storage was cleared');
+ expect(storage.read(key2), isNull, reason: 'Storage was cleared');
+ });
+
+ test('does not throw when no items present', () {
+ expect(storage.clear, returnsNormally);
+ });
+ });
+
+ group('large values', () {
+ for (final (length, s) in _largeKeyValuePairs) {
+ test('can store key/value with length $length', () {
+ storage.write(s, s);
+ expect(storage.read(s), s, reason: 'Value was written');
+
+ storage.delete(s);
+ expect(storage.read(s), isNull, reason: 'Value was deleted');
+ });
+ }
+ });
+
+ group('isolated', () {
+ late String key;
+ final isolated = storage.isolated;
+
+ setUp(() async {
+ await isolated.clear();
+ // Add some randomness to prevent overlap between concurrent tests.
+ key = String.fromCharCodes(
+ List.generate(10, (_) => _random.nextInt(255) + 1),
+ );
+ });
+
+ tearDownAll(() async {
+ await isolated.clear();
+ await isolated.close();
+ });
+
+ group('write', () {
+ test('writes a new key-value pair to storage', () async {
+ await isolated.write(key, 'value');
+ expect(await isolated.read(key), 'value');
+ });
+
+ test('updates the value for an existing key', () async {
+ await isolated.write(key, 'write');
+ expect(await isolated.read(key), 'write',
+ reason: 'Value was written');
+
+ await isolated.write(key, 'update');
+ expect(await isolated.read(key), 'update',
+ reason: 'Value was updated');
+ });
+ });
+
+ group('read', () {
+ test('can read a non-existent key', () async {
+ expect(await isolated.read(key), isNull);
+ });
+ });
+
+ group('delete', () {
+ test('removes the key if it exists', () async {
+ await isolated.write(key, 'delete');
+ expect(await isolated.read(key), 'delete',
+ reason: 'Value was written');
+
+ await isolated.delete(key);
+ expect(await isolated.read(key), isNull,
+ reason: 'Value was deleted');
+ });
+
+ test('can delete a non-existent key', () async {
+ expect(await isolated.read(key), isNull);
+ await expectLater(isolated.delete(key), completes);
+ });
+ });
+
+ group('clear', () {
+ const key1 = 'key1';
+ const key2 = 'key2';
+ const value1 = 'value1';
+ const value2 = 'value2';
+
+ test('removes all keys from storage', () async {
+ await isolated.write(key1, value1);
+ await isolated.write(key2, value2);
+ expect(await isolated.read(key1), value1);
+ expect(await isolated.read(key2), value2);
+
+ await isolated.clear();
+
+ expect(await isolated.read(key1), isNull,
+ reason: 'Storage was cleared');
+ expect(await isolated.read(key2), isNull,
+ reason: 'Storage was cleared');
+ });
+
+ test('does not throw when no items present', () async {
+ await expectLater(isolated.clear(), completes);
+ });
+ });
+
+ group('large values', () {
+ for (final (length, s) in _largeKeyValuePairs) {
+ test('can store key/value with length $length', () async {
+ await isolated.write(s, s);
+ expect(await isolated.read(s), s, reason: 'Value was written');
+
+ await isolated.delete(s);
+ expect(await isolated.read(s), isNull,
+ reason: 'Value was deleted');
+ });
+ }
+ });
+ });
+ });
+ }
+ });
+}
+
+final _random = Random();
+Iterable<(int, String)> get _largeKeyValuePairs sync* {
+ for (final length in const [100, 1000]) {
+ final string = String.fromCharCodes(
+ List.generate(length, (_) => _random.nextInt(94) + 33),
+ );
+ yield (length, string);
+ }
+}
diff --git a/packages/native/storage/example/integration_test/storage_test.dart b/packages/native/storage/example/integration_test/storage_test.dart
new file mode 100644
index 00000000..0dce8ab5
--- /dev/null
+++ b/packages/native/storage/example/integration_test/storage_test.dart
@@ -0,0 +1,11 @@
+import 'package:integration_test/integration_test.dart';
+import 'package:native_storage/native_storage.dart';
+
+import 'storage_shared.dart';
+
+void main() {
+ IntegrationTestWidgetsFlutterBinding.ensureInitialized();
+ sharedTests('MemoryStorage', NativeMemoryStorage.new);
+ sharedTests('SecureStorage', NativeSecureStorage.new);
+ sharedTests('LocalStorage', NativeLocalStorage.new);
+}
diff --git a/packages/native/storage/example/ios/.gitignore b/packages/native/storage/example/ios/.gitignore
new file mode 100644
index 00000000..7a7f9873
--- /dev/null
+++ b/packages/native/storage/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/packages/native/storage/example/ios/Flutter/AppFrameworkInfo.plist b/packages/native/storage/example/ios/Flutter/AppFrameworkInfo.plist
new file mode 100644
index 00000000..7c569640
--- /dev/null
+++ b/packages/native/storage/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
+ 12.0
+
+
diff --git a/packages/native/storage/example/ios/Flutter/Debug.xcconfig b/packages/native/storage/example/ios/Flutter/Debug.xcconfig
new file mode 100644
index 00000000..ec97fc6f
--- /dev/null
+++ b/packages/native/storage/example/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/packages/native/storage/example/ios/Flutter/Release.xcconfig b/packages/native/storage/example/ios/Flutter/Release.xcconfig
new file mode 100644
index 00000000..c4855bfe
--- /dev/null
+++ b/packages/native/storage/example/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/packages/native/storage/example/ios/Podfile b/packages/native/storage/example/ios/Podfile
new file mode 100644
index 00000000..d97f17e2
--- /dev/null
+++ b/packages/native/storage/example/ios/Podfile
@@ -0,0 +1,44 @@
+# Uncomment this line to define a global platform for your project
+# platform :ios, '12.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/packages/native/storage/example/ios/Podfile.lock b/packages/native/storage/example/ios/Podfile.lock
new file mode 100644
index 00000000..d0dbce64
--- /dev/null
+++ b/packages/native/storage/example/ios/Podfile.lock
@@ -0,0 +1,22 @@
+PODS:
+ - Flutter (1.0.0)
+ - integration_test (0.0.1):
+ - Flutter
+
+DEPENDENCIES:
+ - Flutter (from `Flutter`)
+ - integration_test (from `.symlinks/plugins/integration_test/ios`)
+
+EXTERNAL SOURCES:
+ Flutter:
+ :path: Flutter
+ integration_test:
+ :path: ".symlinks/plugins/integration_test/ios"
+
+SPEC CHECKSUMS:
+ Flutter: e0871f40cf51350855a761d2e70bf5af5b9b5de7
+ integration_test: 13825b8a9334a850581300559b8839134b124670
+
+PODFILE CHECKSUM: 819463e6a0290f5a72f145ba7cde16e8b6ef0796
+
+COCOAPODS: 1.15.2
diff --git a/packages/native/storage/example/ios/Runner.xcodeproj/project.pbxproj b/packages/native/storage/example/ios/Runner.xcodeproj/project.pbxproj
new file mode 100644
index 00000000..a90a1219
--- /dev/null
+++ b/packages/native/storage/example/ios/Runner.xcodeproj/project.pbxproj
@@ -0,0 +1,731 @@
+// !$*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 */; };
+ 3BDBFC0E740AB9DB93F6ABC9 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 3B7317A5687E8DF9BBC7ECAF /* Pods_Runner.framework */; };
+ 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 */; };
+ CC06C258D8697D8C3B1CEA5F /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C84FEF24F369C5B0893F94EF /* 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;
+ 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 = ""; };
+ 15ABA0448EC8876D9452719E /* 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 = ""; };
+ 1961E00E9E8B44B5BFE3E44C /* 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 = ""; };
+ 32021773E5AD85F1B81AEEA2 /* 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 = ""; };
+ 3B7317A5687E8DF9BBC7ECAF /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ 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 = ""; };
+ A7E34459F410C1670284B9DF /* 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 = ""; };
+ C84FEF24F369C5B0893F94EF /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ E9D6537A32E2FABF24C294F9 /* 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 = ""; };
+ F6965525160F9BA63AA1E149 /* 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 = (
+ 3BDBFC0E740AB9DB93F6ABC9 /* Pods_Runner.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ FA5499B75B1F295278BFB167 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ CC06C258D8697D8C3B1CEA5F /* Pods_RunnerTests.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 331C8082294A63A400263BE5 /* RunnerTests */ = {
+ isa = PBXGroup;
+ children = (
+ 331C807B294A618700263BE5 /* RunnerTests.swift */,
+ );
+ path = RunnerTests;
+ sourceTree = "";
+ };
+ 4A7D410D92E60A30B84ADFB5 /* Pods */ = {
+ isa = PBXGroup;
+ children = (
+ 1961E00E9E8B44B5BFE3E44C /* Pods-Runner.debug.xcconfig */,
+ A7E34459F410C1670284B9DF /* Pods-Runner.release.xcconfig */,
+ 32021773E5AD85F1B81AEEA2 /* Pods-Runner.profile.xcconfig */,
+ F6965525160F9BA63AA1E149 /* Pods-RunnerTests.debug.xcconfig */,
+ 15ABA0448EC8876D9452719E /* Pods-RunnerTests.release.xcconfig */,
+ E9D6537A32E2FABF24C294F9 /* Pods-RunnerTests.profile.xcconfig */,
+ );
+ name = Pods;
+ path = Pods;
+ sourceTree = "";
+ };
+ 87D0DCBE563B14248B37AB63 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ 3B7317A5687E8DF9BBC7ECAF /* Pods_Runner.framework */,
+ C84FEF24F369C5B0893F94EF /* Pods_RunnerTests.framework */,
+ );
+ name = Frameworks;
+ 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 */,
+ 4A7D410D92E60A30B84ADFB5 /* Pods */,
+ 87D0DCBE563B14248B37AB63 /* 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 = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 331C8080294A63A400263BE5 /* RunnerTests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 331C8087294A63A400263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */;
+ buildPhases = (
+ 007BD01F728FFABCEA548027 /* [CP] Check Pods Manifest.lock */,
+ 331C807D294A63A400263BE5 /* Sources */,
+ 331C807F294A63A400263BE5 /* Resources */,
+ FA5499B75B1F295278BFB167 /* 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 = (
+ BED24C9B61940BD82131D0A2 /* [CP] Check Pods Manifest.lock */,
+ 9740EEB61CF901F6004384FC /* Run Script */,
+ 97C146EA1CF9000F007C117D /* Sources */,
+ 97C146EB1CF9000F007C117D /* Frameworks */,
+ 97C146EC1CF9000F007C117D /* Resources */,
+ 9705A1C41CF9048500538489 /* Embed Frameworks */,
+ 3B06AD1E1E4923F5004D2608 /* Thin Binary */,
+ 25620E05A85D912D35F1A6A0 /* [CP] Embed Pods Frameworks */,
+ );
+ 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 = {
+ BuildIndependentTargetsInParallel = YES;
+ LastUpgradeCheck = 1510;
+ 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 */
+ 007BD01F728FFABCEA548027 /* [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;
+ };
+ 25620E05A85D912D35F1A6A0 /* [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;
+ };
+ 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";
+ };
+ BED24C9B61940BD82131D0A2 /* [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 */
+ 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;
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
+ 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;
+ ENABLE_USER_SCRIPT_SANDBOXING = NO;
+ 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 = 12.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 = 3N6FCLHNUW;
+ ENABLE_BITCODE = NO;
+ INFOPLIST_FILE = Runner/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = dev.celest.platformStorageExample;
+ 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 = F6965525160F9BA63AA1E149 /* 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.celest.platformStorageExample.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 = 15ABA0448EC8876D9452719E /* 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.celest.platformStorageExample.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 = E9D6537A32E2FABF24C294F9 /* 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.celest.platformStorageExample.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;
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
+ 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;
+ ENABLE_USER_SCRIPT_SANDBOXING = NO;
+ 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 = 12.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;
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
+ 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;
+ ENABLE_USER_SCRIPT_SANDBOXING = NO;
+ 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 = 12.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 = 3N6FCLHNUW;
+ ENABLE_BITCODE = NO;
+ INFOPLIST_FILE = Runner/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = dev.celest.platformStorageExample;
+ 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 = 3N6FCLHNUW;
+ ENABLE_BITCODE = NO;
+ INFOPLIST_FILE = Runner/Info.plist;
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = dev.celest.platformStorageExample;
+ 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/packages/native/storage/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/packages/native/storage/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 00000000..919434a6
--- /dev/null
+++ b/packages/native/storage/example/ios/Runner.xcodeproj/project.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,7 @@
+
+
+
+
+
diff --git a/packages/native/storage/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/native/storage/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 00000000..18d98100
--- /dev/null
+++ b/packages/native/storage/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/packages/native/storage/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/packages/native/storage/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
new file mode 100644
index 00000000..f9b0d7c5
--- /dev/null
+++ b/packages/native/storage/example/ios/Runner.xcodeproj/project.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
@@ -0,0 +1,8 @@
+
+
+
+
+ PreviewsEnabled
+
+
+
diff --git a/packages/native/storage/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/packages/native/storage/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
new file mode 100644
index 00000000..8e3ca5df
--- /dev/null
+++ b/packages/native/storage/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/native/storage/example/ios/Runner.xcworkspace/contents.xcworkspacedata b/packages/native/storage/example/ios/Runner.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 00000000..21a3cc14
--- /dev/null
+++ b/packages/native/storage/example/ios/Runner.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
diff --git a/packages/native/storage/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/native/storage/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 00000000..18d98100
--- /dev/null
+++ b/packages/native/storage/example/ios/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/packages/native/storage/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings b/packages/native/storage/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
new file mode 100644
index 00000000..f9b0d7c5
--- /dev/null
+++ b/packages/native/storage/example/ios/Runner.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings
@@ -0,0 +1,8 @@
+
+
+
+
+ PreviewsEnabled
+
+
+
diff --git a/packages/native/storage/example/ios/Runner/AppDelegate.swift b/packages/native/storage/example/ios/Runner/AppDelegate.swift
new file mode 100644
index 00000000..70693e4a
--- /dev/null
+++ b/packages/native/storage/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/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 00000000..d36b1fab
--- /dev/null
+++ b/packages/native/storage/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/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png b/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png
new file mode 100644
index 00000000..dc9ada47
Binary files /dev/null and b/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-1024x1024@1x.png differ
diff --git a/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png b/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png
new file mode 100644
index 00000000..7353c41e
Binary files /dev/null and b/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@1x.png differ
diff --git a/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png b/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png
new file mode 100644
index 00000000..797d452e
Binary files /dev/null and b/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@2x.png differ
diff --git a/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png b/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png
new file mode 100644
index 00000000..6ed2d933
Binary files /dev/null and b/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-20x20@3x.png differ
diff --git a/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png b/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png
new file mode 100644
index 00000000..4cd7b009
Binary files /dev/null and b/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@1x.png differ
diff --git a/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png b/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png
new file mode 100644
index 00000000..fe730945
Binary files /dev/null and b/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@2x.png differ
diff --git a/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png b/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png
new file mode 100644
index 00000000..321773cd
Binary files /dev/null and b/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-29x29@3x.png differ
diff --git a/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png b/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png
new file mode 100644
index 00000000..797d452e
Binary files /dev/null and b/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@1x.png differ
diff --git a/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png b/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png
new file mode 100644
index 00000000..502f463a
Binary files /dev/null and b/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@2x.png differ
diff --git a/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png b/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png
new file mode 100644
index 00000000..0ec30343
Binary files /dev/null and b/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-40x40@3x.png differ
diff --git a/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png b/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png
new file mode 100644
index 00000000..0ec30343
Binary files /dev/null and b/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@2x.png differ
diff --git a/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png b/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png
new file mode 100644
index 00000000..e9f5fea2
Binary files /dev/null and b/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-60x60@3x.png differ
diff --git a/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png b/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png
new file mode 100644
index 00000000..84ac32ae
Binary files /dev/null and b/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@1x.png differ
diff --git a/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png b/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png
new file mode 100644
index 00000000..8953cba0
Binary files /dev/null and b/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-76x76@2x.png differ
diff --git a/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png b/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png
new file mode 100644
index 00000000..0467bf12
Binary files /dev/null and b/packages/native/storage/example/ios/Runner/Assets.xcassets/AppIcon.appiconset/Icon-App-83.5x83.5@2x.png differ
diff --git a/packages/native/storage/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json b/packages/native/storage/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/Contents.json
new file mode 100644
index 00000000..0bedcf2f
--- /dev/null
+++ b/packages/native/storage/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/packages/native/storage/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png b/packages/native/storage/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png
new file mode 100644
index 00000000..9da19eac
Binary files /dev/null and b/packages/native/storage/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage.png differ
diff --git a/packages/native/storage/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png b/packages/native/storage/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png
new file mode 100644
index 00000000..9da19eac
Binary files /dev/null and b/packages/native/storage/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@2x.png differ
diff --git a/packages/native/storage/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png b/packages/native/storage/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png
new file mode 100644
index 00000000..9da19eac
Binary files /dev/null and b/packages/native/storage/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/LaunchImage@3x.png differ
diff --git a/packages/native/storage/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md b/packages/native/storage/example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md
new file mode 100644
index 00000000..89c2725b
--- /dev/null
+++ b/packages/native/storage/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/packages/native/storage/example/ios/Runner/Base.lproj/LaunchScreen.storyboard b/packages/native/storage/example/ios/Runner/Base.lproj/LaunchScreen.storyboard
new file mode 100644
index 00000000..f2e259c7
--- /dev/null
+++ b/packages/native/storage/example/ios/Runner/Base.lproj/LaunchScreen.storyboard
@@ -0,0 +1,37 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/native/storage/example/ios/Runner/Base.lproj/Main.storyboard b/packages/native/storage/example/ios/Runner/Base.lproj/Main.storyboard
new file mode 100644
index 00000000..f3c28516
--- /dev/null
+++ b/packages/native/storage/example/ios/Runner/Base.lproj/Main.storyboard
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/native/storage/example/ios/Runner/Info.plist b/packages/native/storage/example/ios/Runner/Info.plist
new file mode 100644
index 00000000..fa572e39
--- /dev/null
+++ b/packages/native/storage/example/ios/Runner/Info.plist
@@ -0,0 +1,49 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleDisplayName
+ Platform Storage Example
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ platform_storage_example
+ 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
+
+ CADisableMinimumFrameDurationOnPhone
+
+ UIApplicationSupportsIndirectInputEvents
+
+
+
diff --git a/packages/native/storage/example/ios/Runner/Runner-Bridging-Header.h b/packages/native/storage/example/ios/Runner/Runner-Bridging-Header.h
new file mode 100644
index 00000000..308a2a56
--- /dev/null
+++ b/packages/native/storage/example/ios/Runner/Runner-Bridging-Header.h
@@ -0,0 +1 @@
+#import "GeneratedPluginRegistrant.h"
diff --git a/packages/native/storage/example/ios/RunnerTests/RunnerTests.swift b/packages/native/storage/example/ios/RunnerTests/RunnerTests.swift
new file mode 100644
index 00000000..86a7c3b1
--- /dev/null
+++ b/packages/native/storage/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/packages/native/storage/example/lib/main.dart b/packages/native/storage/example/lib/main.dart
new file mode 100644
index 00000000..a7256585
--- /dev/null
+++ b/packages/native/storage/example/lib/main.dart
@@ -0,0 +1,20 @@
+import 'package:flutter/material.dart';
+
+void main() {
+ runApp(const MainApp());
+}
+
+class MainApp extends StatelessWidget {
+ const MainApp({super.key});
+
+ @override
+ Widget build(BuildContext context) {
+ return const MaterialApp(
+ home: Scaffold(
+ body: Center(
+ child: Text('Hello World!'),
+ ),
+ ),
+ );
+ }
+}
diff --git a/packages/native/storage/example/linux/.gitignore b/packages/native/storage/example/linux/.gitignore
new file mode 100644
index 00000000..d3896c98
--- /dev/null
+++ b/packages/native/storage/example/linux/.gitignore
@@ -0,0 +1 @@
+flutter/ephemeral
diff --git a/packages/native/storage/example/linux/CMakeLists.txt b/packages/native/storage/example/linux/CMakeLists.txt
new file mode 100644
index 00000000..2668394c
--- /dev/null
+++ b/packages/native/storage/example/linux/CMakeLists.txt
@@ -0,0 +1,145 @@
+# 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 "platform_storage_example")
+# The unique GTK application identifier for this application. See:
+# https://wiki.gnome.org/HowDoI/ChooseApplicationID
+set(APPLICATION_ID "dev.celest.platform_storage_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)
+
+# Copy the native assets provided by the build.dart from all packages.
+set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/linux/")
+install(DIRECTORY "${NATIVE_ASSETS_DIR}"
+ DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
+ COMPONENT Runtime)
+
+# 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/packages/native/storage/example/linux/flutter/CMakeLists.txt b/packages/native/storage/example/linux/flutter/CMakeLists.txt
new file mode 100644
index 00000000..d5bd0164
--- /dev/null
+++ b/packages/native/storage/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/packages/native/storage/example/linux/flutter/generated_plugin_registrant.cc b/packages/native/storage/example/linux/flutter/generated_plugin_registrant.cc
new file mode 100644
index 00000000..e71a16d2
--- /dev/null
+++ b/packages/native/storage/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/packages/native/storage/example/linux/flutter/generated_plugin_registrant.h b/packages/native/storage/example/linux/flutter/generated_plugin_registrant.h
new file mode 100644
index 00000000..e0f0a47b
--- /dev/null
+++ b/packages/native/storage/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/packages/native/storage/example/linux/flutter/generated_plugins.cmake b/packages/native/storage/example/linux/flutter/generated_plugins.cmake
new file mode 100644
index 00000000..be1ee3e5
--- /dev/null
+++ b/packages/native/storage/example/linux/flutter/generated_plugins.cmake
@@ -0,0 +1,24 @@
+#
+# Generated file, do not edit.
+#
+
+list(APPEND FLUTTER_PLUGIN_LIST
+)
+
+list(APPEND FLUTTER_FFI_PLUGIN_LIST
+ jni
+)
+
+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/packages/native/storage/example/linux/main.cc b/packages/native/storage/example/linux/main.cc
new file mode 100644
index 00000000..e7c5c543
--- /dev/null
+++ b/packages/native/storage/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/packages/native/storage/example/linux/my_application.cc b/packages/native/storage/example/linux/my_application.cc
new file mode 100644
index 00000000..92458f38
--- /dev/null
+++ b/packages/native/storage/example/linux/my_application.cc
@@ -0,0 +1,124 @@
+#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, "platform_storage_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, "platform_storage_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 GApplication::startup.
+static void my_application_startup(GApplication* application) {
+ //MyApplication* self = MY_APPLICATION(object);
+
+ // Perform any actions required at application startup.
+
+ G_APPLICATION_CLASS(my_application_parent_class)->startup(application);
+}
+
+// Implements GApplication::shutdown.
+static void my_application_shutdown(GApplication* application) {
+ //MyApplication* self = MY_APPLICATION(object);
+
+ // Perform any actions required at application shutdown.
+
+ G_APPLICATION_CLASS(my_application_parent_class)->shutdown(application);
+}
+
+// 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_APPLICATION_CLASS(klass)->startup = my_application_startup;
+ G_APPLICATION_CLASS(klass)->shutdown = my_application_shutdown;
+ 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/packages/native/storage/example/linux/my_application.h b/packages/native/storage/example/linux/my_application.h
new file mode 100644
index 00000000..72271d5e
--- /dev/null
+++ b/packages/native/storage/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/packages/native/storage/example/macos/.gitignore b/packages/native/storage/example/macos/.gitignore
new file mode 100644
index 00000000..746adbb6
--- /dev/null
+++ b/packages/native/storage/example/macos/.gitignore
@@ -0,0 +1,7 @@
+# Flutter-related
+**/Flutter/ephemeral/
+**/Pods/
+
+# Xcode-related
+**/dgph
+**/xcuserdata/
diff --git a/packages/native/storage/example/macos/Flutter/Flutter-Debug.xcconfig b/packages/native/storage/example/macos/Flutter/Flutter-Debug.xcconfig
new file mode 100644
index 00000000..4b81f9b2
--- /dev/null
+++ b/packages/native/storage/example/macos/Flutter/Flutter-Debug.xcconfig
@@ -0,0 +1,2 @@
+#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"
+#include "ephemeral/Flutter-Generated.xcconfig"
diff --git a/packages/native/storage/example/macos/Flutter/Flutter-Release.xcconfig b/packages/native/storage/example/macos/Flutter/Flutter-Release.xcconfig
new file mode 100644
index 00000000..5caa9d15
--- /dev/null
+++ b/packages/native/storage/example/macos/Flutter/Flutter-Release.xcconfig
@@ -0,0 +1,2 @@
+#include? "Pods/Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"
+#include "ephemeral/Flutter-Generated.xcconfig"
diff --git a/packages/native/storage/example/macos/Flutter/GeneratedPluginRegistrant.swift b/packages/native/storage/example/macos/Flutter/GeneratedPluginRegistrant.swift
new file mode 100644
index 00000000..cccf817a
--- /dev/null
+++ b/packages/native/storage/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/packages/native/storage/example/macos/Podfile b/packages/native/storage/example/macos/Podfile
new file mode 100644
index 00000000..c795730d
--- /dev/null
+++ b/packages/native/storage/example/macos/Podfile
@@ -0,0 +1,43 @@
+platform :osx, '10.14'
+
+# 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', 'ephemeral', '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 Flutter-Generated.xcconfig, then run \"flutter pub get\""
+end
+
+require File.expand_path(File.join('packages', 'flutter_tools', 'bin', 'podhelper'), flutter_root)
+
+flutter_macos_podfile_setup
+
+target 'Runner' do
+ use_frameworks!
+ 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|
+ installer.pods_project.targets.each do |target|
+ flutter_additional_macos_build_settings(target)
+ end
+end
diff --git a/packages/native/storage/example/macos/Podfile.lock b/packages/native/storage/example/macos/Podfile.lock
new file mode 100644
index 00000000..006d87bd
--- /dev/null
+++ b/packages/native/storage/example/macos/Podfile.lock
@@ -0,0 +1,16 @@
+PODS:
+ - FlutterMacOS (1.0.0)
+
+DEPENDENCIES:
+ - FlutterMacOS (from `Flutter/ephemeral`)
+
+EXTERNAL SOURCES:
+ FlutterMacOS:
+ :path: Flutter/ephemeral
+
+SPEC CHECKSUMS:
+ FlutterMacOS: 8f6f14fa908a6fb3fba0cd85dbd81ec4b251fb24
+
+PODFILE CHECKSUM: 236401fc2c932af29a9fcf0e97baeeb2d750d367
+
+COCOAPODS: 1.15.2
diff --git a/packages/native/storage/example/macos/Runner.xcodeproj/project.pbxproj b/packages/native/storage/example/macos/Runner.xcodeproj/project.pbxproj
new file mode 100644
index 00000000..640b05db
--- /dev/null
+++ b/packages/native/storage/example/macos/Runner.xcodeproj/project.pbxproj
@@ -0,0 +1,783 @@
+// !$*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 */; };
+ 50795433F41231DF0DBFDFEA /* Pods_RunnerTests.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 9E77822563FAC9567E1AB3B0 /* Pods_RunnerTests.framework */; };
+ 81C3F78258FF8898DF8EDA77 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F56E53C457270D82BA04C487 /* 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 */;
+ 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 */
+ 2DE9338F8FE827E5FCD47649 /* 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 /* platform_storage_example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = platform_storage_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 = ""; };
+ 8FD2DA7447946B7C030D0697 /* 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; path = Debug.xcconfig; sourceTree = ""; };
+ 9C760FE1710C15EA740F8448 /* 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 = ""; };
+ 9E77822563FAC9567E1AB3B0 /* Pods_RunnerTests.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_RunnerTests.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ AAF9EF43F796504DF5A87D85 /* 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 = ""; };
+ E42EAF37EAA396C4700D2F2F /* 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 = ""; };
+ F56E53C457270D82BA04C487 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ FEC40CB35D4322F5A6F4FD08 /* 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 = (
+ 50795433F41231DF0DBFDFEA /* Pods_RunnerTests.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+ 33CC10EA2044A3C60003C045 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 81C3F78258FF8898DF8EDA77 /* 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 = (
+ 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 */,
+ A5216D29DB22297733E243AC /* Pods */,
+ );
+ sourceTree = "";
+ };
+ 33CC10EE2044A3C60003C045 /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ 33CC10ED2044A3C60003C045 /* platform_storage_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 = "";
+ };
+ A5216D29DB22297733E243AC /* Pods */ = {
+ isa = PBXGroup;
+ children = (
+ AAF9EF43F796504DF5A87D85 /* Pods-Runner.debug.xcconfig */,
+ E42EAF37EAA396C4700D2F2F /* Pods-Runner.release.xcconfig */,
+ 2DE9338F8FE827E5FCD47649 /* Pods-Runner.profile.xcconfig */,
+ 8FD2DA7447946B7C030D0697 /* Pods-RunnerTests.debug.xcconfig */,
+ FEC40CB35D4322F5A6F4FD08 /* Pods-RunnerTests.release.xcconfig */,
+ 9C760FE1710C15EA740F8448 /* Pods-RunnerTests.profile.xcconfig */,
+ );
+ name = Pods;
+ path = Pods;
+ sourceTree = "";
+ };
+ D73912EC22F37F3D000D13A0 /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ F56E53C457270D82BA04C487 /* Pods_Runner.framework */,
+ 9E77822563FAC9567E1AB3B0 /* Pods_RunnerTests.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ 331C80D4294CF70F00263BE5 /* RunnerTests */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = 331C80DE294CF71000263BE5 /* Build configuration list for PBXNativeTarget "RunnerTests" */;
+ buildPhases = (
+ D00352CAE0D6B334617EB7C5 /* [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 = (
+ 1382CE128BAAFFAB3677921F /* [CP] Check Pods Manifest.lock */,
+ 33CC10E92044A3C60003C045 /* Sources */,
+ 33CC10EA2044A3C60003C045 /* Frameworks */,
+ 33CC10EB2044A3C60003C045 /* Resources */,
+ 33CC110E2044A8840003C045 /* Bundle Framework */,
+ 3399D490228B24CF009A79C7 /* ShellScript */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ 33CC11202044C79F0003C045 /* PBXTargetDependency */,
+ );
+ name = Runner;
+ productName = Runner;
+ productReference = 33CC10ED2044A3C60003C045 /* platform_storage_example.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ 33CC10E52044A3C60003C045 /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ BuildIndependentTargetsInParallel = YES;
+ LastSwiftUpdateCheck = 0920;
+ LastUpgradeCheck = 1510;
+ 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 */
+ 1382CE128BAAFFAB3677921F /* [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 = (
+ );
+ 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";
+ };
+ D00352CAE0D6B334617EB7C5 /* [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 */
+ 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;
+ baseConfigurationReference = 8FD2DA7447946B7C030D0697 /* Pods-RunnerTests.debug.xcconfig */;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CURRENT_PROJECT_VERSION = 1;
+ GENERATE_INFOPLIST_FILE = YES;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = dev.celest.platformStorageExample.RunnerTests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_VERSION = 5.0;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/platform_storage_example.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/platform_storage_example";
+ };
+ name = Debug;
+ };
+ 331C80DC294CF71000263BE5 /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = FEC40CB35D4322F5A6F4FD08 /* Pods-RunnerTests.release.xcconfig */;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CURRENT_PROJECT_VERSION = 1;
+ GENERATE_INFOPLIST_FILE = YES;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = dev.celest.platformStorageExample.RunnerTests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_VERSION = 5.0;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/platform_storage_example.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/platform_storage_example";
+ };
+ name = Release;
+ };
+ 331C80DD294CF71000263BE5 /* Profile */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 9C760FE1710C15EA740F8448 /* Pods-RunnerTests.profile.xcconfig */;
+ buildSettings = {
+ BUNDLE_LOADER = "$(TEST_HOST)";
+ CURRENT_PROJECT_VERSION = 1;
+ GENERATE_INFOPLIST_FILE = YES;
+ MARKETING_VERSION = 1.0;
+ PRODUCT_BUNDLE_IDENTIFIER = dev.celest.platformStorageExample.RunnerTests;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ SWIFT_VERSION = 5.0;
+ TEST_HOST = "$(BUILT_PRODUCTS_DIR)/platform_storage_example.app/$(BUNDLE_EXECUTABLE_FOLDER_PATH)/platform_storage_example";
+ };
+ name = Profile;
+ };
+ 338D0CE9231458BD00FA5F75 /* Profile */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
+ 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;
+ DEAD_CODE_STRIPPING = YES;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_USER_SCRIPT_SANDBOXING = NO;
+ 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;
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
+ 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;
+ DEAD_CODE_STRIPPING = YES;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ ENABLE_USER_SCRIPT_SANDBOXING = NO;
+ 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;
+ ASSETCATALOG_COMPILER_GENERATE_SWIFT_ASSET_SYMBOL_EXTENSIONS = YES;
+ 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;
+ DEAD_CODE_STRIPPING = YES;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_USER_SCRIPT_SANDBOXING = NO;
+ 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/packages/native/storage/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/native/storage/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 00000000..18d98100
--- /dev/null
+++ b/packages/native/storage/example/macos/Runner.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/packages/native/storage/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/packages/native/storage/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
new file mode 100644
index 00000000..21e2b2f3
--- /dev/null
+++ b/packages/native/storage/example/macos/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme
@@ -0,0 +1,98 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/native/storage/example/macos/Runner.xcworkspace/contents.xcworkspacedata b/packages/native/storage/example/macos/Runner.xcworkspace/contents.xcworkspacedata
new file mode 100644
index 00000000..21a3cc14
--- /dev/null
+++ b/packages/native/storage/example/macos/Runner.xcworkspace/contents.xcworkspacedata
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
diff --git a/packages/native/storage/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist b/packages/native/storage/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
new file mode 100644
index 00000000..18d98100
--- /dev/null
+++ b/packages/native/storage/example/macos/Runner.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist
@@ -0,0 +1,8 @@
+
+
+
+
+ IDEDidComputeMac32BitWarning
+
+
+
diff --git a/packages/native/storage/example/macos/Runner/AppDelegate.swift b/packages/native/storage/example/macos/Runner/AppDelegate.swift
new file mode 100644
index 00000000..d53ef643
--- /dev/null
+++ b/packages/native/storage/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/packages/native/storage/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json b/packages/native/storage/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 00000000..a2ec33f1
--- /dev/null
+++ b/packages/native/storage/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/packages/native/storage/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png b/packages/native/storage/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png
new file mode 100644
index 00000000..82b6f9d9
Binary files /dev/null and b/packages/native/storage/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_1024.png differ
diff --git a/packages/native/storage/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png b/packages/native/storage/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png
new file mode 100644
index 00000000..13b35eba
Binary files /dev/null and b/packages/native/storage/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_128.png differ
diff --git a/packages/native/storage/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png b/packages/native/storage/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png
new file mode 100644
index 00000000..0a3f5fa4
Binary files /dev/null and b/packages/native/storage/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_16.png differ
diff --git a/packages/native/storage/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png b/packages/native/storage/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png
new file mode 100644
index 00000000..bdb57226
Binary files /dev/null and b/packages/native/storage/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_256.png differ
diff --git a/packages/native/storage/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png b/packages/native/storage/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png
new file mode 100644
index 00000000..f083318e
Binary files /dev/null and b/packages/native/storage/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_32.png differ
diff --git a/packages/native/storage/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png b/packages/native/storage/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png
new file mode 100644
index 00000000..326c0e72
Binary files /dev/null and b/packages/native/storage/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_512.png differ
diff --git a/packages/native/storage/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png b/packages/native/storage/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png
new file mode 100644
index 00000000..2f1632cf
Binary files /dev/null and b/packages/native/storage/example/macos/Runner/Assets.xcassets/AppIcon.appiconset/app_icon_64.png differ
diff --git a/packages/native/storage/example/macos/Runner/Base.lproj/MainMenu.xib b/packages/native/storage/example/macos/Runner/Base.lproj/MainMenu.xib
new file mode 100644
index 00000000..80e867a4
--- /dev/null
+++ b/packages/native/storage/example/macos/Runner/Base.lproj/MainMenu.xib
@@ -0,0 +1,343 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/native/storage/example/macos/Runner/Configs/AppInfo.xcconfig b/packages/native/storage/example/macos/Runner/Configs/AppInfo.xcconfig
new file mode 100644
index 00000000..8d69ec4c
--- /dev/null
+++ b/packages/native/storage/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 = platform_storage_example
+
+// The application's bundle identifier
+PRODUCT_BUNDLE_IDENTIFIER = dev.celest.platformStorageExample
+
+// The copyright displayed in application information
+PRODUCT_COPYRIGHT = Copyright © 2024 dev.celest. All rights reserved.
diff --git a/packages/native/storage/example/macos/Runner/Configs/Debug.xcconfig b/packages/native/storage/example/macos/Runner/Configs/Debug.xcconfig
new file mode 100644
index 00000000..36b0fd94
--- /dev/null
+++ b/packages/native/storage/example/macos/Runner/Configs/Debug.xcconfig
@@ -0,0 +1,2 @@
+#include "../../Flutter/Flutter-Debug.xcconfig"
+#include "Warnings.xcconfig"
diff --git a/packages/native/storage/example/macos/Runner/Configs/Release.xcconfig b/packages/native/storage/example/macos/Runner/Configs/Release.xcconfig
new file mode 100644
index 00000000..dff4f495
--- /dev/null
+++ b/packages/native/storage/example/macos/Runner/Configs/Release.xcconfig
@@ -0,0 +1,2 @@
+#include "../../Flutter/Flutter-Release.xcconfig"
+#include "Warnings.xcconfig"
diff --git a/packages/native/storage/example/macos/Runner/Configs/Warnings.xcconfig b/packages/native/storage/example/macos/Runner/Configs/Warnings.xcconfig
new file mode 100644
index 00000000..42bcbf47
--- /dev/null
+++ b/packages/native/storage/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/packages/native/storage/example/macos/Runner/DebugProfile.entitlements b/packages/native/storage/example/macos/Runner/DebugProfile.entitlements
new file mode 100644
index 00000000..dddb8a30
--- /dev/null
+++ b/packages/native/storage/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/packages/native/storage/example/macos/Runner/Info.plist b/packages/native/storage/example/macos/Runner/Info.plist
new file mode 100644
index 00000000..4789daa6
--- /dev/null
+++ b/packages/native/storage/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/packages/native/storage/example/macos/Runner/MainFlutterWindow.swift b/packages/native/storage/example/macos/Runner/MainFlutterWindow.swift
new file mode 100644
index 00000000..3cc05eb2
--- /dev/null
+++ b/packages/native/storage/example/macos/Runner/MainFlutterWindow.swift
@@ -0,0 +1,15 @@
+import Cocoa
+import FlutterMacOS
+
+class MainFlutterWindow: NSWindow {
+ override func awakeFromNib() {
+ let flutterViewController = FlutterViewController()
+ let windowFrame = self.frame
+ self.contentViewController = flutterViewController
+ self.setFrame(windowFrame, display: true)
+
+ RegisterGeneratedPlugins(registry: flutterViewController)
+
+ super.awakeFromNib()
+ }
+}
diff --git a/packages/native/storage/example/macos/Runner/Release.entitlements b/packages/native/storage/example/macos/Runner/Release.entitlements
new file mode 100644
index 00000000..852fa1a4
--- /dev/null
+++ b/packages/native/storage/example/macos/Runner/Release.entitlements
@@ -0,0 +1,8 @@
+
+
+
+
+ com.apple.security.app-sandbox
+
+
+
diff --git a/packages/native/storage/example/macos/RunnerTests/RunnerTests.swift b/packages/native/storage/example/macos/RunnerTests/RunnerTests.swift
new file mode 100644
index 00000000..5418c9f5
--- /dev/null
+++ b/packages/native/storage/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/packages/native/storage/example/pubspec.yaml b/packages/native/storage/example/pubspec.yaml
new file mode 100644
index 00000000..a0b384b4
--- /dev/null
+++ b/packages/native/storage/example/pubspec.yaml
@@ -0,0 +1,24 @@
+name: platform_storage_example
+description: "A new Flutter project."
+publish_to: 'none'
+version: 0.1.0
+
+environment:
+ sdk: '>=3.3.0 <4.0.0'
+
+dependencies:
+ flutter:
+ sdk: flutter
+ native_storage:
+ path: ../
+
+dev_dependencies:
+ flutter_test:
+ sdk: flutter
+ flutter_lints: ^3.0.0
+ integration_test:
+ sdk: flutter
+ test: ^1.24.9
+
+flutter:
+ uses-material-design: true
diff --git a/packages/native/storage/example/test_driver/integration_test.dart b/packages/native/storage/example/test_driver/integration_test.dart
new file mode 100644
index 00000000..01a82181
--- /dev/null
+++ b/packages/native/storage/example/test_driver/integration_test.dart
@@ -0,0 +1,5 @@
+import 'package:integration_test/integration_test_driver.dart';
+
+// Required for running integration tests in the browser
+// https://docs.flutter.dev/cookbook/testing/integration/introduction#5b-web
+Future main() => integrationDriver();
diff --git a/packages/native/storage/example/web/favicon.png b/packages/native/storage/example/web/favicon.png
new file mode 100644
index 00000000..8aaa46ac
Binary files /dev/null and b/packages/native/storage/example/web/favicon.png differ
diff --git a/packages/native/storage/example/web/icons/Icon-192.png b/packages/native/storage/example/web/icons/Icon-192.png
new file mode 100644
index 00000000..b749bfef
Binary files /dev/null and b/packages/native/storage/example/web/icons/Icon-192.png differ
diff --git a/packages/native/storage/example/web/icons/Icon-512.png b/packages/native/storage/example/web/icons/Icon-512.png
new file mode 100644
index 00000000..88cfd48d
Binary files /dev/null and b/packages/native/storage/example/web/icons/Icon-512.png differ
diff --git a/packages/native/storage/example/web/icons/Icon-maskable-192.png b/packages/native/storage/example/web/icons/Icon-maskable-192.png
new file mode 100644
index 00000000..eb9b4d76
Binary files /dev/null and b/packages/native/storage/example/web/icons/Icon-maskable-192.png differ
diff --git a/packages/native/storage/example/web/icons/Icon-maskable-512.png b/packages/native/storage/example/web/icons/Icon-maskable-512.png
new file mode 100644
index 00000000..d69c5669
Binary files /dev/null and b/packages/native/storage/example/web/icons/Icon-maskable-512.png differ
diff --git a/packages/native/storage/example/web/index.html b/packages/native/storage/example/web/index.html
new file mode 100644
index 00000000..e00840f1
--- /dev/null
+++ b/packages/native/storage/example/web/index.html
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ platform_storage_example
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/native/storage/example/web/manifest.json b/packages/native/storage/example/web/manifest.json
new file mode 100644
index 00000000..ae38fb7e
--- /dev/null
+++ b/packages/native/storage/example/web/manifest.json
@@ -0,0 +1,35 @@
+{
+ "name": "platform_storage_example",
+ "short_name": "platform_storage_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/packages/native/storage/example/windows/.gitignore b/packages/native/storage/example/windows/.gitignore
new file mode 100644
index 00000000..d492d0d9
--- /dev/null
+++ b/packages/native/storage/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/packages/native/storage/example/windows/CMakeLists.txt b/packages/native/storage/example/windows/CMakeLists.txt
new file mode 100644
index 00000000..017156c7
--- /dev/null
+++ b/packages/native/storage/example/windows/CMakeLists.txt
@@ -0,0 +1,108 @@
+# Project-level configuration.
+cmake_minimum_required(VERSION 3.14)
+project(platform_storage_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 "platform_storage_example")
+
+# Explicitly opt in to modern CMake behaviors to avoid warnings with recent
+# versions of CMake.
+cmake_policy(VERSION 3.14...3.25)
+
+# 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()
+
+# Copy the native assets provided by the build.dart from all packages.
+set(NATIVE_ASSETS_DIR "${PROJECT_BUILD_DIR}native_assets/windows/")
+install(DIRECTORY "${NATIVE_ASSETS_DIR}"
+ DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
+ COMPONENT Runtime)
+
+# 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/packages/native/storage/example/windows/flutter/CMakeLists.txt b/packages/native/storage/example/windows/flutter/CMakeLists.txt
new file mode 100644
index 00000000..903f4899
--- /dev/null
+++ b/packages/native/storage/example/windows/flutter/CMakeLists.txt
@@ -0,0 +1,109 @@
+# 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")
+
+# Set fallback configurations for older versions of the flutter tool.
+if (NOT DEFINED FLUTTER_TARGET_PLATFORM)
+ set(FLUTTER_TARGET_PLATFORM "windows-x64")
+endif()
+
+# === 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"
+ ${FLUTTER_TARGET_PLATFORM} $
+ 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/packages/native/storage/example/windows/flutter/generated_plugin_registrant.cc b/packages/native/storage/example/windows/flutter/generated_plugin_registrant.cc
new file mode 100644
index 00000000..8b6d4680
--- /dev/null
+++ b/packages/native/storage/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/packages/native/storage/example/windows/flutter/generated_plugin_registrant.h b/packages/native/storage/example/windows/flutter/generated_plugin_registrant.h
new file mode 100644
index 00000000..dc139d85
--- /dev/null
+++ b/packages/native/storage/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/packages/native/storage/example/windows/flutter/generated_plugins.cmake b/packages/native/storage/example/windows/flutter/generated_plugins.cmake
new file mode 100644
index 00000000..3ad69c61
--- /dev/null
+++ b/packages/native/storage/example/windows/flutter/generated_plugins.cmake
@@ -0,0 +1,24 @@
+#
+# Generated file, do not edit.
+#
+
+list(APPEND FLUTTER_PLUGIN_LIST
+)
+
+list(APPEND FLUTTER_FFI_PLUGIN_LIST
+ jni
+)
+
+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/packages/native/storage/example/windows/runner/CMakeLists.txt b/packages/native/storage/example/windows/runner/CMakeLists.txt
new file mode 100644
index 00000000..394917c0
--- /dev/null
+++ b/packages/native/storage/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/packages/native/storage/example/windows/runner/Runner.rc b/packages/native/storage/example/windows/runner/Runner.rc
new file mode 100644
index 00000000..32169e62
--- /dev/null
+++ b/packages/native/storage/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", "dev.celest" "\0"
+ VALUE "FileDescription", "platform_storage_example" "\0"
+ VALUE "FileVersion", VERSION_AS_STRING "\0"
+ VALUE "InternalName", "platform_storage_example" "\0"
+ VALUE "LegalCopyright", "Copyright (C) 2024 dev.celest. All rights reserved." "\0"
+ VALUE "OriginalFilename", "platform_storage_example.exe" "\0"
+ VALUE "ProductName", "platform_storage_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/packages/native/storage/example/windows/runner/flutter_window.cpp b/packages/native/storage/example/windows/runner/flutter_window.cpp
new file mode 100644
index 00000000..955ee303
--- /dev/null
+++ b/packages/native/storage/example/windows/runner/flutter_window.cpp
@@ -0,0 +1,71 @@
+#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();
+ });
+
+ // 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;
+}
+
+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/packages/native/storage/example/windows/runner/flutter_window.h b/packages/native/storage/example/windows/runner/flutter_window.h
new file mode 100644
index 00000000..6da0652f
--- /dev/null
+++ b/packages/native/storage/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/packages/native/storage/example/windows/runner/main.cpp b/packages/native/storage/example/windows/runner/main.cpp
new file mode 100644
index 00000000..dd9300bc
--- /dev/null
+++ b/packages/native/storage/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"platform_storage_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/packages/native/storage/example/windows/runner/resource.h b/packages/native/storage/example/windows/runner/resource.h
new file mode 100644
index 00000000..66a65d1e
--- /dev/null
+++ b/packages/native/storage/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/packages/native/storage/example/windows/runner/resources/app_icon.ico b/packages/native/storage/example/windows/runner/resources/app_icon.ico
new file mode 100644
index 00000000..c04e20ca
Binary files /dev/null and b/packages/native/storage/example/windows/runner/resources/app_icon.ico differ
diff --git a/packages/native/storage/example/windows/runner/runner.exe.manifest b/packages/native/storage/example/windows/runner/runner.exe.manifest
new file mode 100644
index 00000000..a42ea768
--- /dev/null
+++ b/packages/native/storage/example/windows/runner/runner.exe.manifest
@@ -0,0 +1,20 @@
+
+
+
+
+ PerMonitorV2
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/native/storage/example/windows/runner/utils.cpp b/packages/native/storage/example/windows/runner/utils.cpp
new file mode 100644
index 00000000..b2b08734
--- /dev/null
+++ b/packages/native/storage/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/packages/native/storage/example/windows/runner/utils.h b/packages/native/storage/example/windows/runner/utils.h
new file mode 100644
index 00000000..3879d547
--- /dev/null
+++ b/packages/native/storage/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/packages/native/storage/example/windows/runner/win32_window.cpp b/packages/native/storage/example/windows/runner/win32_window.cpp
new file mode 100644
index 00000000..60608d0f
--- /dev/null
+++ b/packages/native/storage/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/packages/native/storage/example/windows/runner/win32_window.h b/packages/native/storage/example/windows/runner/win32_window.h
new file mode 100644
index 00000000..e901dde6
--- /dev/null
+++ b/packages/native/storage/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/packages/native/storage/ffigen.core_foundation.yaml b/packages/native/storage/ffigen.core_foundation.yaml
new file mode 100644
index 00000000..d88260a5
--- /dev/null
+++ b/packages/native/storage/ffigen.core_foundation.yaml
@@ -0,0 +1,50 @@
+name: CoreFoundation
+description: |
+ Bindings for Core Foundation on iOS/macOS.
+
+ Regenerate bindings with `dart run ffigen --config=ffigen.core_foundation.yaml`.
+language: "c"
+output:
+ bindings: "lib/src/native/darwin/core_foundation.ffi.dart"
+compiler-opts:
+ - "-F/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks"
+headers:
+ entry-points:
+ - "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/CoreFoundation.framework/Headers/CFDictionary.h"
+ - "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/CoreFoundation.framework/Headers/CFString.h"
+ - "/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/CoreFoundation.framework/Headers/CFData.h"
+preamble: |
+ // ignore_for_file: type=lint
+ // ignore_for_file: return_of_invalid_type
+ // ignore_for_file: unnecessary_non_null_assertion
+comments:
+ style: any
+ length: full
+
+ffi-native:
+exclude-all-by-default: true
+typedefs:
+ include:
+ - CF.*
+globals:
+ include:
+ - kCF.*
+functions:
+ include:
+ - CFDictionary.*
+ - CFDataCreate
+ - CFStringGetCStringPtr
+ - CFStringGetCString
+ - CFStringGetLength
+ - CFStringGetMaximumSizeForEncoding
+ - CFStringCreateWithCString
+ - CFDataGetBytePtr
+ - CFRelease
+structs:
+ rename:
+ "__CFString": CFString
+ "__CFData": CFData
+ "__CFDictionary": CFDictionary
+unnamed-enums:
+ include:
+ - kCF.*
diff --git a/packages/native/storage/ffigen.foundation.yaml b/packages/native/storage/ffigen.foundation.yaml
new file mode 100644
index 00000000..84288d14
--- /dev/null
+++ b/packages/native/storage/ffigen.foundation.yaml
@@ -0,0 +1,28 @@
+name: Foundation
+description: |
+ Bindings for Foundation on iOS/macOS.
+
+ Regenerate bindings with `dart run ffigen --config=ffigen.foundation.yaml`.
+language: "objc"
+output:
+ bindings: "lib/src/native/darwin/foundation.ffi.dart"
+compiler-opts:
+ - "-F/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks"
+headers:
+ entry-points:
+ - "/System/Volumes/Data/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSBundle.h"
+ - "/System/Volumes/Data/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Foundation.framework/Versions/C/Headers/NSUserDefaults.h"
+preamble: |
+ // ignore_for_file: type=lint
+ // ignore_for_file: return_of_invalid_type
+ // ignore_for_file: unnecessary_non_null_assertion
+comments:
+ style: any
+ length: full
+
+ffi-native:
+exclude-all-by-default: true
+objc-interfaces:
+ include:
+ - NSBundle
+ - NSUserDefaults
diff --git a/packages/native/storage/ffigen.glib.yaml b/packages/native/storage/ffigen.glib.yaml
new file mode 100644
index 00000000..4c215c44
--- /dev/null
+++ b/packages/native/storage/ffigen.glib.yaml
@@ -0,0 +1,53 @@
+name: Glib
+description: |
+ Bindings for glib on Linux.
+
+ Regenerate bindings with `dart run ffigen --config=ffigen.glib.yaml`.
+language: c
+output: lib/src/native/linux/glib.ffi.dart
+headers:
+ entry-points:
+ - /usr/include/glib-2.0/glib.h
+ - /usr/include/glib-2.0/glib-object.h
+ - /usr/include/glib-2.0/gio/gio.h
+preamble: |
+ // ignore_for_file: type=lint
+ // ignore_for_file: return_of_invalid_type
+ // ignore_for_file: unnecessary_non_null_assertion
+comments:
+ style: any
+ length: full
+
+exclude-all-by-default: true
+typedefs:
+ include:
+ - gboolean
+ - gint
+ - gpointer
+ - gchar
+functions:
+ include:
+ - g_hash_table_new
+ - g_hash_table_insert
+ - g_hash_table_destroy
+ - g_application_get_default
+ - g_application_get_application_id
+ - g_get_user_config_dir
+ - g_error_free
+structs:
+ include:
+ - _GError
+ - _GHashTable
+ - _GCancellable
+ - _GObject
+ rename:
+ "_GError": GError
+ "_GHashTable": GHashTable
+ "_GCancellable": GCancellable
+ "_GObject": GObject
+type-map:
+ typedefs:
+ gchar:
+ lib: pkg_ffi
+ c-type: Utf8
+ dart-type: Char
diff --git a/packages/native/storage/ffigen.libsecret.yaml b/packages/native/storage/ffigen.libsecret.yaml
new file mode 100644
index 00000000..6dffd35f
--- /dev/null
+++ b/packages/native/storage/ffigen.libsecret.yaml
@@ -0,0 +1,69 @@
+name: Libsecret
+description: |
+ Bindings for Libsecret on Linux.
+
+ Regenerate bindings with `dart run ffigen --config=ffigen.libsecret.yaml`.
+language: c
+output: lib/src/native/linux/libsecret.ffi.dart
+headers:
+ entry-points:
+ - /usr/include/libsecret-1/libsecret/secret.h
+preamble: |
+ // ignore_for_file: type=lint
+ // ignore_for_file: return_of_invalid_type
+ // ignore_for_file: unnecessary_non_null_assertion
+library-imports:
+ glib: package:native_storage/src/native/linux/glib.ffi.dart
+comments:
+ style: any
+ length: full
+
+exclude-all-by-default: true
+functions:
+ include:
+ - secret_password_storev_sync
+ - secret_password_lookupv_sync
+ - secret_password_clearv_sync
+ - secret_password_free
+structs:
+ include:
+ - SecretSchema
+ - SecretSchemaAttribute
+enums:
+ include:
+ - SecretSchemaAttributeType
+ - SecretSchemaFlags
+macros:
+ include:
+ - SECRET_COLLECTION_DEFAULT
+type-map:
+ typedefs:
+ GHashTable:
+ lib: glib
+ c-type: GHashTable
+ dart-type: GHashTable
+ GError:
+ lib: glib
+ c-type: GError
+ dart-type: GError
+ GCancellable:
+ lib: glib
+ c-type: GCancellable
+ dart-type: GCancellable
+ gpointer:
+ lib: glib
+ c-type: gpointer
+ dart-type: gpointer
+ gboolean:
+ lib: glib
+ c-type: gboolean
+ dart-type: int
+ gchar:
+ lib: pkg_ffi
+ c-type: Utf8
+ dart-type: Char
+ gint:
+ lib: glib
+ c-type: gint
+ dart-type: int
+
diff --git a/packages/native/storage/ffigen.security.yaml b/packages/native/storage/ffigen.security.yaml
new file mode 100644
index 00000000..682a7143
--- /dev/null
+++ b/packages/native/storage/ffigen.security.yaml
@@ -0,0 +1,82 @@
+name: SecurityFramework
+description: |
+ Bindings for Security.framework on iOS/macOS.
+
+ Regenerate bindings with `dart run ffigen --config=ffigen.security.yaml`.
+language: "c"
+output:
+ bindings: "lib/src/native/darwin/security.ffi.dart"
+compiler-opts:
+ - "-F/System/Volumes/Data/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks"
+headers:
+ entry-points:
+ - "/System/Volumes/Data/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Security.framework/Headers/SecItem.h"
+ - "/System/Volumes/Data/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Security.framework/Headers/SecBase.h"
+ - "/System/Volumes/Data/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/System/Library/Frameworks/Security.framework/Headers/SecKeychainItem.h"
+preamble: |
+ // ignore_for_file: type=lint
+ // ignore_for_file: return_of_invalid_type
+ // ignore_for_file: unnecessary_non_null_assertion
+comments:
+ style: any
+ length: full
+library-imports:
+ cf: "package:native_storage/src/native/darwin/core_foundation.ffi.dart"
+
+ffi-native:
+exclude-all-by-default: true
+typedefs:
+ include:
+ - Sec.*
+functions:
+ include:
+ - Sec.*
+globals:
+ include:
+ - kSec.*
+ - kCF.*
+unnamed-enums:
+ include:
+ - errSec.*
+type-map:
+ typedefs:
+ CFString:
+ lib: cf
+ c-type: CFString
+ dart-type: CFString
+ CFType:
+ lib: cf
+ c-type: CFType
+ dart-type: CFType
+ CFArray:
+ lib: cf
+ c-type: CFArray
+ dart-type: CFArray
+ CFArrayRef:
+ lib: cf
+ c-type: CFArrayRef
+ dart-type: CFArrayRef
+ CFData:
+ lib: cf
+ c-type: CFData
+ dart-type: CFData
+ CFDataRef:
+ lib: cf
+ c-type: CFDataRef
+ dart-type: CFDataRef
+ CFDictionary:
+ lib: cf
+ c-type: CFDictionary
+ dart-type: CFDictionary
+ CFStringRef:
+ lib: cf
+ c-type: CFStringRef
+ dart-type: CFStringRef
+ CFTypeRef:
+ lib: cf
+ c-type: CFTypeRef
+ dart-type: CFTypeRef
+ CFDictionaryRef:
+ lib: cf
+ c-type: CFDictionaryRef
+ dart-type: CFDictionaryRef
diff --git a/packages/native/storage/jnigen.yaml b/packages/native/storage/jnigen.yaml
new file mode 100644
index 00000000..f8984baa
--- /dev/null
+++ b/packages/native/storage/jnigen.yaml
@@ -0,0 +1,23 @@
+# Regenerate bindings with `dart run jnigen --config jnigen.yaml`.
+
+summarizer:
+ backend: asm
+
+android_sdk_config:
+ add_gradle_deps: true
+ android_example: "example/"
+
+suspend_fun_to_async: true
+
+output:
+ bindings_type: dart_only
+ dart:
+ path: "lib/src/native/android/jni_bindings.ffi.dart"
+ structure: single_file
+
+classes:
+ - dev.celest.native_storage.NativeStorage
+ - dev.celest.native_storage.NativeLocalStorage
+ - dev.celest.native_storage.NativeSecureStorage
+ - android.app.Activity
+ - android.content.Context
diff --git a/packages/native/storage/lib/native_storage.dart b/packages/native/storage/lib/native_storage.dart
new file mode 100644
index 00000000..11d3ca3e
--- /dev/null
+++ b/packages/native/storage/lib/native_storage.dart
@@ -0,0 +1,6 @@
+export 'src/isolated/isolated_storage.dart';
+export 'src/local/local_storage.dart';
+export 'src/memory_storage.dart';
+export 'src/native_storage.dart';
+export 'src/native_storage_exception.dart';
+export 'src/secure/secure_storage.dart';
diff --git a/packages/native/storage/lib/src/isolated/isolated_storage.dart b/packages/native/storage/lib/src/isolated/isolated_storage.dart
new file mode 100644
index 00000000..1141ce4d
--- /dev/null
+++ b/packages/native/storage/lib/src/isolated/isolated_storage.dart
@@ -0,0 +1,44 @@
+import 'package:native_storage/native_storage.dart';
+import 'package:native_storage/src/isolated/isolated_storage_platform.vm.dart'
+ if (dart.library.js_interop) 'package:native_storage/src/isolated/isolated_storage_platform.web.dart';
+
+/// A [NativeStorage] constructor.
+typedef NativeStorageFactory = NativeStorage Function({
+ String? namespace,
+ String? scope,
+});
+
+/// {@template native_storage.isolated_native_storage}
+/// A [NativeStorage] that performs storage operations asynchronously on a
+/// separate isolate.
+///
+/// On Web platforms, this simply returns an asynchronous wrapper over the same
+/// non-isolated storage.
+/// {@endtemplate}
+abstract interface class IsolatedNativeStorage {
+ /// {@macro native_storage.isolated_native_storage}
+ factory IsolatedNativeStorage({
+ required NativeStorageFactory factory,
+ String? namespace,
+ String? scope,
+ }) = IsolatedNativeStoragePlatform;
+
+ /// Reads a value asynchronously from storage on a background thread.
+ Future read(String key);
+
+ /// Writes a value asynchronously to storage on a background thread.
+ Future write(String key, String value);
+
+ /// Deletes a value asynchronously from storage on a background thread.
+ Future delete(String key);
+
+ /// Clears all values asynchronously for the configured `namespace` and
+ /// `scope` from storage.
+ Future clear();
+
+ /// {@macro native_storage.native_storage.close}
+ ///
+ /// If [force] is `true`, any pending requests will be cancelled and complete
+ /// with an error. Defaults to `false`.
+ Future close({bool force = false});
+}
diff --git a/packages/native/storage/lib/src/isolated/isolated_storage_platform.vm.dart b/packages/native/storage/lib/src/isolated/isolated_storage_platform.vm.dart
new file mode 100644
index 00000000..fa818734
--- /dev/null
+++ b/packages/native/storage/lib/src/isolated/isolated_storage_platform.vm.dart
@@ -0,0 +1,240 @@
+import 'dart:async';
+import 'dart:isolate';
+
+import 'package:native_storage/native_storage.dart';
+import 'package:stack_trace/stack_trace.dart';
+import 'package:stream_channel/isolate_channel.dart';
+
+enum IsolatedStorageCommand { read, write, delete, clear }
+
+typedef StorageConfig = ({
+ NativeStorageFactory factory,
+ String? namespace,
+ String? scope,
+});
+
+final class IsolatedStorageRequest {
+ const IsolatedStorageRequest({
+ required this.id,
+ required this.command,
+ this.key,
+ this.value,
+ this.error,
+ });
+
+ final int id;
+ final IsolatedStorageCommand command;
+ final String? key;
+ final String? value;
+ final (NativeStorageException, StackTrace)? error;
+
+ IsolatedStorageRequest result({
+ String? value,
+ (NativeStorageException, StackTrace)? error,
+ }) {
+ return IsolatedStorageRequest(
+ id: id,
+ command: command,
+ key: key,
+ value: value,
+ error: error,
+ );
+ }
+
+ String? unwrap() {
+ if (error case (final error, final stackTrace)) {
+ Error.throwWithStackTrace(
+ error,
+ Chain([stackTrace, Chain.current()].map(Trace.from)),
+ );
+ }
+ return value;
+ }
+}
+
+typedef IsolatedStorageResponse = String?;
+
+/// The VM implementation of [IsolatedNativeStorage] which uses an [Isolate]
+/// to handle storage operations.
+final class IsolatedNativeStoragePlatform implements IsolatedNativeStorage {
+ IsolatedNativeStoragePlatform({
+ required NativeStorageFactory factory,
+ String? namespace,
+ String? scope,
+ }) : _config = (
+ factory: factory,
+ namespace: namespace,
+ scope: scope,
+ ) {
+ _spawned = spawn().then((_) {
+ _listener = _channel!.stream.listen((response) {
+ final completer = _pendingRequests.remove(response.id);
+ if (completer == null) {
+ throw StateError('Request already completed');
+ }
+ completer.complete(response);
+ });
+ });
+ }
+
+ final StorageConfig _config;
+ Isolate? _isolate;
+ IsolateChannel? _channel;
+ StreamSubscription? _listener;
+ Future? _spawned;
+ final _pendingRequests = >{};
+ var _closed = false;
+
+ Future spawn() async {
+ final port = ReceivePort();
+ _channel = IsolateChannel.connectReceive(port);
+ _isolate = await Isolate.spawn(
+ _handleRequests,
+ (port.sendPort, _config),
+ debugName: 'IsolatedStoragePlatform',
+ );
+ }
+
+ var _currentRequestId = 0;
+ (int, Completer) get _nextRequestId {
+ final id = _currentRequestId++;
+ final completer = Completer.sync();
+ _pendingRequests[id] = completer;
+ return (id, completer);
+ }
+
+ static Future _handleRequests(
+ (SendPort sendPort, StorageConfig config) init,
+ ) async {
+ final (sendPort, (:factory, :namespace, :scope)) = init;
+ final channel =
+ IsolateChannel.connectSend(sendPort);
+ final storage = factory(namespace: namespace, scope: scope);
+ try {
+ await for (final request in channel.stream) {
+ channel.sink.add(storage.handle(request));
+ }
+ } finally {
+ storage.close();
+ }
+ }
+
+ Future _send({
+ required IsolatedStorageCommand command,
+ String? key,
+ String? value,
+ }) async {
+ if (_closed) {
+ throw StateError('Storage is closed');
+ }
+ await _spawned;
+ final (id, completer) = _nextRequestId;
+ final request = IsolatedStorageRequest(
+ id: id,
+ command: command,
+ key: key,
+ value: value,
+ );
+ try {
+ _channel!.sink.add(request);
+ final response = await completer.future;
+ return response.unwrap();
+ } finally {
+ _pendingRequests.remove(id);
+ }
+ }
+
+ @override
+ Future clear() async {
+ await _send(command: IsolatedStorageCommand.clear);
+ }
+
+ @override
+ Future delete(String key) async {
+ return _send(command: IsolatedStorageCommand.delete, key: key);
+ }
+
+ @override
+ Future read(String key) async {
+ return _send(command: IsolatedStorageCommand.read, key: key);
+ }
+
+ @override
+ Future write(String key, String value) async {
+ final writtenValue = await _send(
+ command: IsolatedStorageCommand.write,
+ key: key,
+ value: value,
+ );
+ return writtenValue!;
+ }
+
+ @override
+ Future close({bool force = false}) async {
+ if (_closed) {
+ return;
+ }
+ _closed = true;
+ if (force) {
+ for (final pendingRequest in _pendingRequests.values) {
+ pendingRequest.completeError(StateError('Storage is closed'));
+ }
+ } else {
+ await Future.wait([
+ for (final pendingRequest in _pendingRequests.values)
+ pendingRequest.future,
+ ]);
+ }
+ _pendingRequests.clear();
+ unawaited(_listener?.cancel());
+ _listener = null;
+ _channel?.sink.close();
+ _channel = null;
+ _isolate?.kill();
+ _isolate = null;
+ }
+}
+
+extension on NativeStorage {
+ IsolatedStorageRequest handle(IsolatedStorageRequest request) {
+ final IsolatedStorageRequest(
+ :command,
+ :key,
+ :value,
+ ) = request;
+ try {
+ switch (command) {
+ case IsolatedStorageCommand.read:
+ if (key == null) {
+ throw StateError('Missing key');
+ }
+ final value = read(key);
+ return request.result(value: value);
+ case IsolatedStorageCommand.write:
+ if (key == null) {
+ throw StateError('Missing key');
+ }
+ if (value == null) {
+ throw StateError('Missing key');
+ }
+ final wroteValue = write(key, value);
+ return request.result(value: wroteValue);
+ case IsolatedStorageCommand.delete:
+ if (key == null) {
+ throw StateError('Missing key');
+ }
+ final value = delete(key);
+ return request.result(value: value);
+ case IsolatedStorageCommand.clear:
+ clear();
+ return request.result();
+ }
+ } on Object catch (e, st) {
+ final storageException = switch (e) {
+ NativeStorageException() => e,
+ _ => NativeStorageUnknownException(e.toString()),
+ };
+ return request.result(error: (storageException, st));
+ }
+ }
+}
diff --git a/packages/native/storage/lib/src/isolated/isolated_storage_platform.web.dart b/packages/native/storage/lib/src/isolated/isolated_storage_platform.web.dart
new file mode 100644
index 00000000..53343311
--- /dev/null
+++ b/packages/native/storage/lib/src/isolated/isolated_storage_platform.web.dart
@@ -0,0 +1,42 @@
+import 'package:native_storage/native_storage.dart';
+
+/// The browser implementation of [IsolatedNativeStorage].
+final class IsolatedNativeStoragePlatform implements IsolatedNativeStorage {
+ IsolatedNativeStoragePlatform({
+ required NativeStorageFactory factory,
+ String? namespace,
+ String? scope,
+ }) : _impl = factory(
+ namespace: namespace,
+ scope: scope,
+ );
+
+ IsolatedNativeStoragePlatform.from(this._impl);
+
+ final NativeStorage _impl;
+
+ @override
+ Future clear() async {
+ return _impl.clear();
+ }
+
+ @override
+ Future delete(String key) async {
+ return _impl.delete(key);
+ }
+
+ @override
+ Future read(String key) async {
+ return _impl.read(key);
+ }
+
+ @override
+ Future write(String key, String value) async {
+ return _impl.write(key, value);
+ }
+
+ @override
+ Future close({bool force = false}) async {
+ return _impl.close();
+ }
+}
diff --git a/packages/native/storage/lib/src/local/local_storage.android.dart b/packages/native/storage/lib/src/local/local_storage.android.dart
new file mode 100644
index 00000000..1e0e027c
--- /dev/null
+++ b/packages/native/storage/lib/src/local/local_storage.android.dart
@@ -0,0 +1,54 @@
+import 'package:jni/jni.dart';
+import 'package:native_storage/src/isolated/isolated_storage.dart';
+import 'package:native_storage/src/isolated/isolated_storage_platform.web.dart'
+ as unsupported;
+import 'package:native_storage/src/local/local_storage_platform.vm.dart';
+import 'package:native_storage/src/native/android/android.dart';
+
+final class LocalStoragePlatformAndroid extends NativeLocalStoragePlatform {
+ LocalStoragePlatformAndroid({
+ String? namespace,
+ super.scope,
+ }) : _namespace = namespace,
+ super.base();
+
+ final String? _namespace;
+
+ @override
+ String get namespace => _namespace ?? android.packageName;
+
+ late final _storage = android.localStorage(namespace, scope);
+
+ @override
+ void clear() => _storage.clear();
+
+ @override
+ String? delete(String key) {
+ final value = _storage.delete(key.toJString());
+ if (value.isNull) {
+ return null;
+ }
+ return value.toDartString();
+ }
+
+ @override
+ String? read(String key) {
+ final value = _storage.read(key.toJString());
+ if (value.isNull) {
+ return null;
+ }
+ return value.toDartString();
+ }
+
+ @override
+ String write(String key, String value) {
+ _storage.write(key.toJString(), value.toJString());
+ return value;
+ }
+
+// jni objects cannot be shared across isolates
+// TODO(dnys1): Should be fixed in jni 0.8.0
+ @override
+ IsolatedNativeStorage get isolated =>
+ unsupported.IsolatedNativeStoragePlatform.from(this);
+}
diff --git a/packages/native/storage/lib/src/local/local_storage.dart b/packages/native/storage/lib/src/local/local_storage.dart
new file mode 100644
index 00000000..689dfc06
--- /dev/null
+++ b/packages/native/storage/lib/src/local/local_storage.dart
@@ -0,0 +1,23 @@
+import 'package:native_storage/native_storage.dart';
+import 'package:native_storage/src/local/local_storage_platform.vm.dart'
+ if (dart.library.js_interop) 'package:native_storage/src/local/local_storage_platform.web.dart';
+
+/// {@template native_storage.native_local_storage}
+/// Provides app-local storage of key-value pairs.
+///
+/// The values written to this storage are persisted across app reloads for
+/// the lifetime of the app on the end user's device. Unlike
+/// [NativeSecureStorage], which may persist values after an app is
+/// uninstalled, values written to this storage are guaranteed to be removed
+/// when the app is no longer present on the device.
+/// {@endtemplate}
+abstract interface class NativeLocalStorage implements NativeStorage {
+ /// {@macro native_storage.native_local_storage}
+ factory NativeLocalStorage({
+ String? namespace,
+ String? scope,
+ }) = NativeLocalStoragePlatform;
+
+ @override
+ NativeLocalStorage scoped(String scope);
+}
diff --git a/packages/native/storage/lib/src/local/local_storage.linux.dart b/packages/native/storage/lib/src/local/local_storage.linux.dart
new file mode 100644
index 00000000..cb864551
--- /dev/null
+++ b/packages/native/storage/lib/src/local/local_storage.linux.dart
@@ -0,0 +1,62 @@
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:native_storage/src/local/local_storage_platform.vm.dart';
+import 'package:native_storage/src/native/linux/linux.dart';
+import 'package:path/path.dart' as p;
+
+final class LocalStorageLinux extends NativeLocalStoragePlatform {
+ LocalStorageLinux({
+ String? namespace,
+ super.scope,
+ }) : super.base();
+
+ late final String _storagePath = p.joinAll([
+ linux.userConfigHome,
+ if (scope != null) ...[namespace, '$scope.json'] else '$namespace.json',
+ ]);
+
+ @override
+ String get namespace => linux.applicationId;
+
+ late final File _storage = File(_storagePath);
+
+ Map _readData() {
+ if (!_storage.existsSync()) {
+ return {};
+ }
+ return (jsonDecode(_storage.readAsStringSync()) as Map).cast();
+ }
+
+ void _writeData(Map data) {
+ if (!_storage.existsSync()) {
+ _storage.createSync(recursive: true);
+ }
+ _storage.writeAsStringSync(jsonEncode(data));
+ }
+
+ @override
+ void clear() {
+ if (_storage.existsSync()) {
+ _storage.deleteSync();
+ }
+ }
+
+ @override
+ String? delete(String key) {
+ final data = _readData();
+ final value = data.remove(key);
+ _writeData(data);
+ return value;
+ }
+
+ @override
+ String? read(String key) => _readData()[key];
+
+ @override
+ String write(String key, String value) {
+ final data = _readData()..[key] = value;
+ _writeData(data);
+ return value;
+ }
+}
diff --git a/packages/native/storage/lib/src/local/local_storage.windows.dart b/packages/native/storage/lib/src/local/local_storage.windows.dart
new file mode 100644
index 00000000..f6903ca1
--- /dev/null
+++ b/packages/native/storage/lib/src/local/local_storage.windows.dart
@@ -0,0 +1,70 @@
+import 'package:native_storage/src/local/local_storage_platform.vm.dart';
+import 'package:native_storage/src/native/windows/windows.dart';
+import 'package:native_storage/src/util/functional.dart';
+import 'package:win32_registry/win32_registry.dart';
+
+final class LocalStorageWindows extends NativeLocalStoragePlatform {
+ LocalStorageWindows({
+ String? namespace,
+ super.scope,
+ }) : _namespace = namespace,
+ super.base();
+
+ final String? _namespace;
+
+ @override
+ late final String namespace = lazy(() {
+ if (_namespace != null) {
+ return _namespace;
+ }
+ if (windows.applicationInfo case (:final companyName, :final productName)) {
+ return '$companyName\\$productName';
+ }
+ return windows.applicationId;
+ });
+
+ late final _registry = lazy(() {
+ final hkcu = Registry.currentUser;
+ final rootKey = hkcu
+ .createKey('SOFTWARE\\Classes\\Local Settings\\Software\\$namespace');
+ if (scope case final scope?) {
+ return rootKey.createKey(scope);
+ }
+ return rootKey;
+ });
+
+ @override
+ String? delete(String key) {
+ final current = read(key);
+ if (current == null) {
+ return null;
+ }
+ _registry.deleteValue(key);
+ return current;
+ }
+
+ @override
+ String? read(String key) => _registry.getValueAsString(key);
+
+ @override
+ String write(String key, String value) {
+ _registry.createValue(RegistryValue(key, RegistryValueType.string, value));
+ return value;
+ }
+
+ @override
+ void clear() {
+ for (final value in List.of(_registry.values)) {
+ _registry.deleteValue(value.name);
+ }
+ for (final subkey in List.of(_registry.subkeyNames)) {
+ _registry.deleteKey(subkey, recursive: true);
+ }
+ }
+
+ @override
+ void close() {
+ _registry.close();
+ super.close();
+ }
+}
diff --git a/packages/native/storage/lib/src/local/local_storage_darwin.dart b/packages/native/storage/lib/src/local/local_storage_darwin.dart
new file mode 100644
index 00000000..8d5f1ac3
--- /dev/null
+++ b/packages/native/storage/lib/src/local/local_storage_darwin.dart
@@ -0,0 +1,63 @@
+import 'dart:io';
+
+import 'package:native_storage/src/local/local_storage_platform.vm.dart';
+import 'package:native_storage/src/native/darwin/darwin.dart';
+import 'package:native_storage/src/native/darwin/foundation.ffi.dart';
+import 'package:native_storage/src/util/functional.dart';
+import 'package:path/path.dart' as p;
+
+final class LocalStoragePlatformDarwin extends NativeLocalStoragePlatform {
+ LocalStoragePlatformDarwin({
+ String? namespace,
+ super.scope,
+ }) : _namespace = namespace,
+ super.base();
+
+ final String? _namespace;
+
+ @override
+ late final String namespace = lazy(() {
+ return _namespace ??
+ darwin.bundleIdentifier ??
+ p.basenameWithoutExtension(Platform.resolvedExecutable);
+ });
+
+ late final NSUserDefaults _userDefaults = darwin.userDefaults(namespace);
+
+ @override
+ String? read(String key) {
+ return _userDefaults.stringForKey_(darwin.nsString(key))?.toString();
+ }
+
+ @override
+ String write(String key, String value) {
+ _userDefaults.setObject_forKey_(
+ darwin.nsString(value),
+ darwin.nsString(key),
+ );
+ return value;
+ }
+
+ @override
+ String? delete(String key) {
+ final existing = read(key);
+ _userDefaults.removeObjectForKey_(darwin.nsString(key));
+ return existing;
+ }
+
+ @override
+ void clear() {
+ final allValues = _userDefaults.persistentDomainForName_(
+ darwin.nsString(namespace),
+ );
+ if (allValues == null) {
+ return;
+ }
+ for (var i = 0; i < allValues.allKeys.count; i++) {
+ final key = NSString.castFrom(allValues.allKeys.objectAtIndex_(i));
+ if (scope == null || key.toString().startsWith(scope!)) {
+ _userDefaults.removeObjectForKey_(key);
+ }
+ }
+ }
+}
diff --git a/packages/native/storage/lib/src/local/local_storage_platform.vm.dart b/packages/native/storage/lib/src/local/local_storage_platform.vm.dart
new file mode 100644
index 00000000..8ee7fe19
--- /dev/null
+++ b/packages/native/storage/lib/src/local/local_storage_platform.vm.dart
@@ -0,0 +1,66 @@
+import 'dart:io';
+
+import 'package:meta/meta.dart';
+import 'package:native_storage/native_storage.dart';
+import 'package:native_storage/src/local/local_storage.android.dart';
+import 'package:native_storage/src/local/local_storage.linux.dart';
+import 'package:native_storage/src/local/local_storage.windows.dart';
+import 'package:native_storage/src/local/local_storage_darwin.dart';
+
+/// The VM implementation of [NativeLocalStorage].
+abstract base class NativeLocalStoragePlatform implements NativeLocalStorage {
+ factory NativeLocalStoragePlatform({
+ String? namespace,
+ String? scope,
+ }) {
+ if (Platform.isMacOS || Platform.isIOS) {
+ return LocalStoragePlatformDarwin(namespace: namespace, scope: scope);
+ }
+ if (Platform.isAndroid) {
+ return LocalStoragePlatformAndroid(namespace: namespace, scope: scope);
+ }
+ if (Platform.isWindows) {
+ return LocalStorageWindows(namespace: namespace, scope: scope);
+ }
+ if (Platform.isLinux) {
+ return LocalStorageLinux(namespace: namespace, scope: scope);
+ }
+ throw UnsupportedError('This platform is not yet supported.');
+ }
+
+ @protected
+ NativeLocalStoragePlatform.base({
+ this.scope,
+ });
+
+ @override
+ final String? scope;
+
+ @override
+ @mustCallSuper
+ void close() {
+ _isolated?.close().ignore();
+ _isolated = null;
+ }
+
+ @override
+ NativeSecureStorage get secure =>
+ NativeSecureStorage(namespace: namespace, scope: scope);
+
+ IsolatedNativeStorage? _isolated;
+ @override
+ IsolatedNativeStorage get isolated => _isolated ??= IsolatedNativeStorage(
+ factory: NativeLocalStoragePlatform.new,
+ namespace: namespace,
+ scope: scope,
+ );
+
+ @override
+ NativeLocalStorage scoped(String scope) => NativeLocalStoragePlatform(
+ namespace: namespace,
+ scope: switch (this.scope) {
+ final currentScope? => '$currentScope.$scope',
+ null => scope,
+ },
+ );
+}
diff --git a/packages/native/storage/lib/src/local/local_storage_platform.web.dart b/packages/native/storage/lib/src/local/local_storage_platform.web.dart
new file mode 100644
index 00000000..dc9f6969
--- /dev/null
+++ b/packages/native/storage/lib/src/local/local_storage_platform.web.dart
@@ -0,0 +1,76 @@
+import 'package:native_storage/native_storage.dart';
+import 'package:web/web.dart' as web;
+
+/// The browser implementation of [NativeLocalStorage].
+final class NativeLocalStoragePlatform implements NativeLocalStorage {
+ NativeLocalStoragePlatform({String? namespace, this.scope})
+ : namespace = namespace ?? web.window.location.hostname;
+
+ @override
+ final String namespace;
+
+ @override
+ final String? scope;
+
+ late final String _prefix =
+ scope == null ? '$namespace/' : '$namespace/$scope/';
+ final web.Storage _storage = web.window.localStorage;
+
+ @override
+ void clear() {
+ for (final key in _storage.keys) {
+ if (key.startsWith(_prefix)) {
+ _storage.removeItem(key);
+ }
+ }
+ }
+
+ @override
+ String? delete(String key) {
+ final value = read(key);
+ if (value != null) {
+ _storage.removeItem('$_prefix$key');
+ }
+ return null;
+ }
+
+ @override
+ String? read(String key) => _storage['$_prefix$key'];
+
+ @override
+ String write(String key, String value) {
+ _storage.setItem('$_prefix$key', value);
+ return value;
+ }
+
+ @override
+ void close() {
+ _isolated?.close().ignore();
+ _isolated = null;
+ }
+
+ @override
+ NativeSecureStorage get secure =>
+ NativeSecureStorage(namespace: namespace, scope: scope);
+
+ IsolatedNativeStorage? _isolated;
+ @override
+ IsolatedNativeStorage get isolated => _isolated ??= IsolatedNativeStorage(
+ factory: NativeLocalStoragePlatform.new,
+ namespace: namespace,
+ scope: scope,
+ );
+
+ @override
+ NativeLocalStorage scoped(String scope) => NativeLocalStoragePlatform(
+ namespace: namespace,
+ scope: switch (this.scope) {
+ final currentScope? => '$currentScope/$scope',
+ null => scope,
+ },
+ );
+}
+
+extension on web.Storage {
+ List get keys => [for (var i = 0; i < length; i++) key(i)!];
+}
diff --git a/packages/native/storage/lib/src/memory_storage.dart b/packages/native/storage/lib/src/memory_storage.dart
new file mode 100644
index 00000000..2cf4da4d
--- /dev/null
+++ b/packages/native/storage/lib/src/memory_storage.dart
@@ -0,0 +1,56 @@
+import 'package:native_storage/src/isolated/isolated_storage.dart';
+import 'package:native_storage/src/native_storage.dart';
+import 'package:native_storage/src/secure/secure_storage.dart';
+
+/// An in-memory implementation of [NativeStorage] and [NativeSecureStorage].
+final class NativeMemoryStorage implements NativeStorage, NativeSecureStorage {
+ NativeMemoryStorage({
+ String? namespace,
+ this.scope,
+ }) : namespace = namespace ?? '';
+
+ @override
+ final String namespace;
+
+ @override
+ final String? scope;
+
+ final _storage = {};
+ late final String _prefix =
+ scope == null ? '$namespace/' : '$namespace/$scope/';
+
+ @override
+ void clear() => _storage.removeWhere((key, _) => key.startsWith(_prefix));
+
+ @override
+ String? delete(String key) => _storage.remove('$_prefix$key');
+
+ @override
+ String? read(String key) => _storage['$_prefix$key'];
+
+ @override
+ String write(String key, String value) => _storage['$_prefix$key'] = value;
+
+ @override
+ void close() => clear();
+
+ @override
+ NativeSecureStorage get secure => this;
+
+ IsolatedNativeStorage? _isolated;
+ @override
+ IsolatedNativeStorage get isolated => _isolated ??= IsolatedNativeStorage(
+ factory: NativeMemoryStorage.new,
+ namespace: namespace,
+ scope: scope,
+ );
+
+ @override
+ NativeMemoryStorage scoped(String scope) => NativeMemoryStorage(
+ namespace: namespace,
+ scope: switch (this.scope) {
+ final currentScope? => '$currentScope/$scope',
+ null => scope,
+ },
+ );
+}
diff --git a/packages/native/storage/lib/src/native/android/android.dart b/packages/native/storage/lib/src/native/android/android.dart
new file mode 100644
index 00000000..ed497452
--- /dev/null
+++ b/packages/native/storage/lib/src/native/android/android.dart
@@ -0,0 +1,35 @@
+import 'package:jni/jni.dart';
+import 'package:native_storage/src/native/android/jni_bindings.ffi.dart';
+
+final android = AndroidCommon._();
+
+final class AndroidCommon {
+ AndroidCommon._();
+
+ // Must be getters so that they are fresh for each JNI call
+ late final Activity _mainActivity =
+ Activity.fromRef(Jni.getCurrentActivity());
+ late final Context _mainActivityContext =
+ Context.fromRef(_mainActivity.reference);
+
+ late final String packageName =
+ _mainActivityContext.getPackageName().toDartString();
+
+ NativeLocalStorage localStorage(String namespace, String? scope) {
+ scope ??= ''; // Can't pass `null`
+ return NativeLocalStorage.new1(
+ _mainActivityContext,
+ namespace.toJString(),
+ scope.toJString(),
+ );
+ }
+
+ NativeSecureStorage secureStorage(String namespace, String? scope) {
+ scope ??= ''; // Can't pass `null`
+ return NativeSecureStorage.new1(
+ _mainActivityContext,
+ namespace.toJString(),
+ scope.toJString(),
+ );
+ }
+}
diff --git a/packages/native/storage/lib/src/native/android/jni_bindings.ffi.dart b/packages/native/storage/lib/src/native/android/jni_bindings.ffi.dart
new file mode 100644
index 00000000..3de5362f
--- /dev/null
+++ b/packages/native/storage/lib/src/native/android/jni_bindings.ffi.dart
@@ -0,0 +1,7116 @@
+// Autogenerated by jnigen. DO NOT EDIT!
+
+// ignore_for_file: annotate_overrides
+// ignore_for_file: camel_case_extensions
+// ignore_for_file: camel_case_types
+// ignore_for_file: constant_identifier_names
+// ignore_for_file: file_names
+// ignore_for_file: lines_longer_than_80_chars
+// ignore_for_file: no_leading_underscores_for_local_identifiers
+// ignore_for_file: non_constant_identifier_names
+// 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;
+import "package:jni/internal_helpers_for_jnigen.dart";
+import "package:jni/jni.dart" as jni;
+
+/// from: dev.celest.native_storage.NativeStorage
+class NativeStorage extends jni.JObject {
+ @override
+ late final jni.JObjType $type = type;
+
+ NativeStorage.fromRef(
+ jni.JObjectPtr ref,
+ ) : super.fromRef(ref);
+
+ static final _class =
+ jni.Jni.findJClass(r"dev/celest/native_storage/NativeStorage");
+
+ /// The type which includes information such as the signature of this class.
+ static const type = $NativeStorageType();
+ static final _id_getContext = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"getContext", r"()Landroid/content/Context;");
+
+ /// from: protected final android.content.Context getContext()
+ /// The returned object must be released after use, by calling the [release] method.
+ Context getContext() {
+ return const $ContextType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_getContext, jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getNamespace = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"getNamespace", r"()Ljava/lang/String;");
+
+ /// from: protected final java.lang.String getNamespace()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JString getNamespace() {
+ return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_getNamespace, jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getSharedPreferences = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"getSharedPreferences",
+ r"()Landroid/content/SharedPreferences;");
+
+ /// from: protected abstract android.content.SharedPreferences getSharedPreferences()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getSharedPreferences() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getSharedPreferences,
+ jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_write = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"write", r"(Ljava/lang/String;Ljava/lang/String;)V");
+
+ /// from: public final void write(java.lang.String string, java.lang.String string1)
+ void write(
+ jni.JString string,
+ jni.JString string1,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_write,
+ jni.JniCallType.voidType,
+ [string.reference, string1.reference]).check();
+ }
+
+ static final _id_read = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"read", r"(Ljava/lang/String;)Ljava/lang/String;");
+
+ /// from: public final java.lang.String read(java.lang.String string)
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JString read(
+ jni.JString string,
+ ) {
+ return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_read,
+ jni.JniCallType.objectType,
+ [string.reference]).object);
+ }
+
+ static final _id_delete = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"delete", r"(Ljava/lang/String;)Ljava/lang/String;");
+
+ /// from: public final java.lang.String delete(java.lang.String string)
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JString delete(
+ jni.JString string,
+ ) {
+ return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_delete,
+ jni.JniCallType.objectType,
+ [string.reference]).object);
+ }
+
+ static final _id_clear =
+ jni.Jni.accessors.getMethodIDOf(_class.reference, r"clear", r"()V");
+
+ /// from: public final void clear()
+ void clear() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_clear, jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_new0 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"",
+ r"(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V");
+
+ /// from: public void (android.content.Context context, java.lang.String string, java.lang.String string1, kotlin.jvm.internal.DefaultConstructorMarker defaultConstructorMarker)
+ /// The returned object must be released after use, by calling the [release] method.
+ factory NativeStorage(
+ Context context,
+ jni.JString string,
+ jni.JString string1,
+ jni.JObject defaultConstructorMarker,
+ ) {
+ return NativeStorage.fromRef(
+ jni.Jni.accessors.newObjectWithArgs(_class.reference, _id_new0, [
+ context.reference,
+ string.reference,
+ string1.reference,
+ defaultConstructorMarker.reference
+ ]).object);
+ }
+}
+
+final class $NativeStorageType extends jni.JObjType {
+ const $NativeStorageType();
+
+ @override
+ String get signature => r"Ldev/celest/native_storage/NativeStorage;";
+
+ @override
+ NativeStorage fromRef(jni.JObjectPtr ref) => NativeStorage.fromRef(ref);
+
+ @override
+ jni.JObjType get superType => const jni.JObjectType();
+
+ @override
+ final superCount = 1;
+
+ @override
+ int get hashCode => ($NativeStorageType).hashCode;
+
+ @override
+ bool operator ==(Object other) {
+ return other.runtimeType == ($NativeStorageType) &&
+ other is $NativeStorageType;
+ }
+}
+
+/// from: dev.celest.native_storage.NativeLocalStorage
+class NativeLocalStorage extends NativeStorage {
+ @override
+ late final jni.JObjType $type = type;
+
+ NativeLocalStorage.fromRef(
+ jni.JObjectPtr ref,
+ ) : super.fromRef(ref);
+
+ static final _class =
+ jni.Jni.findJClass(r"dev/celest/native_storage/NativeLocalStorage");
+
+ /// The type which includes information such as the signature of this class.
+ static const type = $NativeLocalStorageType();
+ static final _id_new1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"",
+ r"(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)V");
+
+ /// from: public void (android.content.Context context, java.lang.String string, java.lang.String string1)
+ /// The returned object must be released after use, by calling the [release] method.
+ factory NativeLocalStorage.new1(
+ Context context,
+ jni.JString string,
+ jni.JString string1,
+ ) {
+ return NativeLocalStorage.fromRef(jni.Jni.accessors.newObjectWithArgs(
+ _class.reference,
+ _id_new1,
+ [context.reference, string.reference, string1.reference]).object);
+ }
+
+ static final _id_getSharedPreferences = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"getSharedPreferences",
+ r"()Landroid/content/SharedPreferences;");
+
+ /// from: protected android.content.SharedPreferences getSharedPreferences()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getSharedPreferences() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getSharedPreferences,
+ jni.JniCallType.objectType, []).object);
+ }
+}
+
+final class $NativeLocalStorageType extends jni.JObjType {
+ const $NativeLocalStorageType();
+
+ @override
+ String get signature => r"Ldev/celest/native_storage/NativeLocalStorage;";
+
+ @override
+ NativeLocalStorage fromRef(jni.JObjectPtr ref) =>
+ NativeLocalStorage.fromRef(ref);
+
+ @override
+ jni.JObjType get superType => const $NativeStorageType();
+
+ @override
+ final superCount = 2;
+
+ @override
+ int get hashCode => ($NativeLocalStorageType).hashCode;
+
+ @override
+ bool operator ==(Object other) {
+ return other.runtimeType == ($NativeLocalStorageType) &&
+ other is $NativeLocalStorageType;
+ }
+}
+
+/// from: dev.celest.native_storage.NativeSecureStorage
+class NativeSecureStorage extends NativeStorage {
+ @override
+ late final jni.JObjType $type = type;
+
+ NativeSecureStorage.fromRef(
+ jni.JObjectPtr ref,
+ ) : super.fromRef(ref);
+
+ static final _class =
+ jni.Jni.findJClass(r"dev/celest/native_storage/NativeSecureStorage");
+
+ /// The type which includes information such as the signature of this class.
+ static const type = $NativeSecureStorageType();
+ static final _id_new1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"",
+ r"(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)V");
+
+ /// from: public void (android.content.Context context, java.lang.String string, java.lang.String string1)
+ /// The returned object must be released after use, by calling the [release] method.
+ factory NativeSecureStorage.new1(
+ Context context,
+ jni.JString string,
+ jni.JString string1,
+ ) {
+ return NativeSecureStorage.fromRef(jni.Jni.accessors.newObjectWithArgs(
+ _class.reference,
+ _id_new1,
+ [context.reference, string.reference, string1.reference]).object);
+ }
+
+ static final _id_getSharedPreferences = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"getSharedPreferences",
+ r"()Landroid/content/SharedPreferences;");
+
+ /// from: protected android.content.SharedPreferences getSharedPreferences()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getSharedPreferences() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getSharedPreferences,
+ jni.JniCallType.objectType, []).object);
+ }
+}
+
+final class $NativeSecureStorageType extends jni.JObjType {
+ const $NativeSecureStorageType();
+
+ @override
+ String get signature => r"Ldev/celest/native_storage/NativeSecureStorage;";
+
+ @override
+ NativeSecureStorage fromRef(jni.JObjectPtr ref) =>
+ NativeSecureStorage.fromRef(ref);
+
+ @override
+ jni.JObjType get superType => const $NativeStorageType();
+
+ @override
+ final superCount = 2;
+
+ @override
+ int get hashCode => ($NativeSecureStorageType).hashCode;
+
+ @override
+ bool operator ==(Object other) {
+ return other.runtimeType == ($NativeSecureStorageType) &&
+ other is $NativeSecureStorageType;
+ }
+}
+
+/// from: android.app.Activity$ScreenCaptureCallback
+class Activity_ScreenCaptureCallback extends jni.JObject {
+ @override
+ late final jni.JObjType $type = type;
+
+ Activity_ScreenCaptureCallback.fromRef(
+ jni.JObjectPtr ref,
+ ) : super.fromRef(ref);
+
+ static final _class =
+ jni.Jni.findJClass(r"android/app/Activity$ScreenCaptureCallback");
+
+ /// The type which includes information such as the signature of this class.
+ static const type = $Activity_ScreenCaptureCallbackType();
+ static final _id_onScreenCaptured = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"onScreenCaptured", r"()V");
+
+ /// from: public abstract void onScreenCaptured()
+ void onScreenCaptured() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_onScreenCaptured, jni.JniCallType.voidType, []).check();
+ }
+}
+
+final class $Activity_ScreenCaptureCallbackType
+ extends jni.JObjType {
+ const $Activity_ScreenCaptureCallbackType();
+
+ @override
+ String get signature => r"Landroid/app/Activity$ScreenCaptureCallback;";
+
+ @override
+ Activity_ScreenCaptureCallback fromRef(jni.JObjectPtr ref) =>
+ Activity_ScreenCaptureCallback.fromRef(ref);
+
+ @override
+ jni.JObjType get superType => const jni.JObjectType();
+
+ @override
+ final superCount = 1;
+
+ @override
+ int get hashCode => ($Activity_ScreenCaptureCallbackType).hashCode;
+
+ @override
+ bool operator ==(Object other) {
+ return other.runtimeType == ($Activity_ScreenCaptureCallbackType) &&
+ other is $Activity_ScreenCaptureCallbackType;
+ }
+}
+
+/// from: android.app.Activity
+class Activity extends jni.JObject {
+ @override
+ late final jni.JObjType $type = type;
+
+ Activity.fromRef(
+ jni.JObjectPtr ref,
+ ) : super.fromRef(ref);
+
+ static final _class = jni.Jni.findJClass(r"android/app/Activity");
+
+ /// The type which includes information such as the signature of this class.
+ static const type = $ActivityType();
+
+ /// from: static public final int DEFAULT_KEYS_DIALER
+ static const DEFAULT_KEYS_DIALER = 1;
+
+ /// from: static public final int DEFAULT_KEYS_DISABLE
+ static const DEFAULT_KEYS_DISABLE = 0;
+
+ /// from: static public final int DEFAULT_KEYS_SEARCH_GLOBAL
+ static const DEFAULT_KEYS_SEARCH_GLOBAL = 4;
+
+ /// from: static public final int DEFAULT_KEYS_SEARCH_LOCAL
+ static const DEFAULT_KEYS_SEARCH_LOCAL = 3;
+
+ /// from: static public final int DEFAULT_KEYS_SHORTCUT
+ static const DEFAULT_KEYS_SHORTCUT = 2;
+
+ static final _id_FOCUSED_STATE_SET = jni.Jni.accessors.getStaticFieldIDOf(
+ _class.reference,
+ r"FOCUSED_STATE_SET",
+ r"[I",
+ );
+
+ /// from: static protected final int[] FOCUSED_STATE_SET
+ /// 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(jni.Jni.accessors
+ .getStaticField(_class.reference, _id_FOCUSED_STATE_SET,
+ jni.JniCallType.objectType)
+ .object);
+
+ /// from: static public final int FULLSCREEN_MODE_REQUEST_ENTER
+ static const FULLSCREEN_MODE_REQUEST_ENTER = 1;
+
+ /// from: static public final int FULLSCREEN_MODE_REQUEST_EXIT
+ static const FULLSCREEN_MODE_REQUEST_EXIT = 0;
+
+ /// from: static public final int OVERRIDE_TRANSITION_CLOSE
+ static const OVERRIDE_TRANSITION_CLOSE = 1;
+
+ /// from: static public final int OVERRIDE_TRANSITION_OPEN
+ static const OVERRIDE_TRANSITION_OPEN = 0;
+
+ /// from: static public final int RESULT_CANCELED
+ static const RESULT_CANCELED = 0;
+
+ /// from: static public final int RESULT_FIRST_USER
+ static const RESULT_FIRST_USER = 1;
+
+ /// from: static public final int RESULT_OK
+ static const RESULT_OK = -1;
+
+ static final _id_new0 =
+ jni.Jni.accessors.getMethodIDOf(_class.reference, r"", r"()V");
+
+ /// from: public void ()
+ /// The returned object must be released after use, by calling the [release] method.
+ factory Activity() {
+ return Activity.fromRef(jni.Jni.accessors
+ .newObjectWithArgs(_class.reference, _id_new0, []).object);
+ }
+
+ static final _id_getIntent = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"getIntent", r"()Landroid/content/Intent;");
+
+ /// from: public android.content.Intent getIntent()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getIntent() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_getIntent, jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_setIntent = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"setIntent", r"(Landroid/content/Intent;)V");
+
+ /// from: public void setIntent(android.content.Intent intent)
+ void setIntent(
+ jni.JObject intent,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_setIntent,
+ jni.JniCallType.voidType, [intent.reference]).check();
+ }
+
+ static final _id_setLocusContext = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"setLocusContext",
+ r"(Landroid/content/LocusId;Landroid/os/Bundle;)V");
+
+ /// from: public void setLocusContext(android.content.LocusId locusId, android.os.Bundle bundle)
+ void setLocusContext(
+ jni.JObject locusId,
+ jni.JObject bundle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_setLocusContext,
+ jni.JniCallType.voidType,
+ [locusId.reference, bundle.reference]).check();
+ }
+
+ static final _id_getApplication = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"getApplication", r"()Landroid/app/Application;");
+
+ /// from: public final android.app.Application getApplication()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getApplication() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_getApplication, jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_isChild =
+ jni.Jni.accessors.getMethodIDOf(_class.reference, r"isChild", r"()Z");
+
+ /// from: public final boolean isChild()
+ bool isChild() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_isChild, jni.JniCallType.booleanType, []).boolean;
+ }
+
+ static final _id_getParent = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"getParent", r"()Landroid/app/Activity;");
+
+ /// from: public final android.app.Activity getParent()
+ /// The returned object must be released after use, by calling the [release] method.
+ Activity getParent() {
+ return const $ActivityType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_getParent, jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getWindowManager = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"getWindowManager", r"()Landroid/view/WindowManager;");
+
+ /// from: public android.view.WindowManager getWindowManager()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getWindowManager() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getWindowManager,
+ jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getWindow = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"getWindow", r"()Landroid/view/Window;");
+
+ /// from: public android.view.Window getWindow()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getWindow() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_getWindow, jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getLoaderManager = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"getLoaderManager", r"()Landroid/app/LoaderManager;");
+
+ /// from: public android.app.LoaderManager getLoaderManager()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getLoaderManager() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getLoaderManager,
+ jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getCurrentFocus = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"getCurrentFocus", r"()Landroid/view/View;");
+
+ /// from: public android.view.View getCurrentFocus()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getCurrentFocus() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_getCurrentFocus, jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_attachBaseContext = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"attachBaseContext", r"(Landroid/content/Context;)V");
+
+ /// from: protected void attachBaseContext(android.content.Context context)
+ void attachBaseContext(
+ Context context,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_attachBaseContext,
+ jni.JniCallType.voidType,
+ [context.reference]).check();
+ }
+
+ static final _id_registerActivityLifecycleCallbacks = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"registerActivityLifecycleCallbacks",
+ r"(Landroid/app/Application$ActivityLifecycleCallbacks;)V");
+
+ /// from: public void registerActivityLifecycleCallbacks(android.app.Application$ActivityLifecycleCallbacks activityLifecycleCallbacks)
+ void registerActivityLifecycleCallbacks(
+ jni.JObject activityLifecycleCallbacks,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_registerActivityLifecycleCallbacks,
+ jni.JniCallType.voidType,
+ [activityLifecycleCallbacks.reference]).check();
+ }
+
+ static final _id_unregisterActivityLifecycleCallbacks = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"unregisterActivityLifecycleCallbacks",
+ r"(Landroid/app/Application$ActivityLifecycleCallbacks;)V");
+
+ /// from: public void unregisterActivityLifecycleCallbacks(android.app.Application$ActivityLifecycleCallbacks activityLifecycleCallbacks)
+ void unregisterActivityLifecycleCallbacks(
+ jni.JObject activityLifecycleCallbacks,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_unregisterActivityLifecycleCallbacks,
+ jni.JniCallType.voidType,
+ [activityLifecycleCallbacks.reference]).check();
+ }
+
+ static final _id_registerComponentCallbacks = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"registerComponentCallbacks",
+ r"(Landroid/content/ComponentCallbacks;)V");
+
+ /// from: public void registerComponentCallbacks(android.content.ComponentCallbacks componentCallbacks)
+ void registerComponentCallbacks(
+ jni.JObject componentCallbacks,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_registerComponentCallbacks,
+ jni.JniCallType.voidType,
+ [componentCallbacks.reference]).check();
+ }
+
+ static final _id_unregisterComponentCallbacks = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"unregisterComponentCallbacks",
+ r"(Landroid/content/ComponentCallbacks;)V");
+
+ /// from: public void unregisterComponentCallbacks(android.content.ComponentCallbacks componentCallbacks)
+ void unregisterComponentCallbacks(
+ jni.JObject componentCallbacks,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_unregisterComponentCallbacks,
+ jni.JniCallType.voidType,
+ [componentCallbacks.reference]).check();
+ }
+
+ static final _id_onCreate = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"onCreate", r"(Landroid/os/Bundle;)V");
+
+ /// from: protected void onCreate(android.os.Bundle bundle)
+ void onCreate(
+ jni.JObject bundle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_onCreate,
+ jni.JniCallType.voidType, [bundle.reference]).check();
+ }
+
+ static final _id_getSplashScreen = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"getSplashScreen", r"()Landroid/window/SplashScreen;");
+
+ /// from: public final android.window.SplashScreen getSplashScreen()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getSplashScreen() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_getSplashScreen, jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_onCreate1 = jni.Jni.accessors.getMethodIDOf(_class.reference,
+ r"onCreate", r"(Landroid/os/Bundle;Landroid/os/PersistableBundle;)V");
+
+ /// from: public void onCreate(android.os.Bundle bundle, android.os.PersistableBundle persistableBundle)
+ void onCreate1(
+ jni.JObject bundle,
+ jni.JObject persistableBundle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onCreate1,
+ jni.JniCallType.voidType,
+ [bundle.reference, persistableBundle.reference]).check();
+ }
+
+ static final _id_onRestoreInstanceState = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"onRestoreInstanceState", r"(Landroid/os/Bundle;)V");
+
+ /// from: protected void onRestoreInstanceState(android.os.Bundle bundle)
+ void onRestoreInstanceState(
+ jni.JObject bundle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onRestoreInstanceState,
+ jni.JniCallType.voidType,
+ [bundle.reference]).check();
+ }
+
+ static final _id_onRestoreInstanceState1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"onRestoreInstanceState",
+ r"(Landroid/os/Bundle;Landroid/os/PersistableBundle;)V");
+
+ /// from: public void onRestoreInstanceState(android.os.Bundle bundle, android.os.PersistableBundle persistableBundle)
+ void onRestoreInstanceState1(
+ jni.JObject bundle,
+ jni.JObject persistableBundle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onRestoreInstanceState1,
+ jni.JniCallType.voidType,
+ [bundle.reference, persistableBundle.reference]).check();
+ }
+
+ static final _id_onPostCreate = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"onPostCreate", r"(Landroid/os/Bundle;)V");
+
+ /// from: protected void onPostCreate(android.os.Bundle bundle)
+ void onPostCreate(
+ jni.JObject bundle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_onPostCreate,
+ jni.JniCallType.voidType, [bundle.reference]).check();
+ }
+
+ static final _id_onPostCreate1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"onPostCreate",
+ r"(Landroid/os/Bundle;Landroid/os/PersistableBundle;)V");
+
+ /// from: public void onPostCreate(android.os.Bundle bundle, android.os.PersistableBundle persistableBundle)
+ void onPostCreate1(
+ jni.JObject bundle,
+ jni.JObject persistableBundle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onPostCreate1,
+ jni.JniCallType.voidType,
+ [bundle.reference, persistableBundle.reference]).check();
+ }
+
+ static final _id_onStart =
+ jni.Jni.accessors.getMethodIDOf(_class.reference, r"onStart", r"()V");
+
+ /// from: protected void onStart()
+ void onStart() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_onStart, jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_onRestart =
+ jni.Jni.accessors.getMethodIDOf(_class.reference, r"onRestart", r"()V");
+
+ /// from: protected void onRestart()
+ void onRestart() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_onRestart, jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_onStateNotSaved = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"onStateNotSaved", r"()V");
+
+ /// from: public void onStateNotSaved()
+ void onStateNotSaved() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_onStateNotSaved, jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_onResume =
+ jni.Jni.accessors.getMethodIDOf(_class.reference, r"onResume", r"()V");
+
+ /// from: protected void onResume()
+ void onResume() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_onResume, jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_onPostResume = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"onPostResume", r"()V");
+
+ /// from: protected void onPostResume()
+ void onPostResume() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_onPostResume, jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_onTopResumedActivityChanged = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"onTopResumedActivityChanged", r"(Z)V");
+
+ /// from: public void onTopResumedActivityChanged(boolean z)
+ void onTopResumedActivityChanged(
+ bool z,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onTopResumedActivityChanged,
+ jni.JniCallType.voidType,
+ [z ? 1 : 0]).check();
+ }
+
+ static final _id_isVoiceInteraction = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"isVoiceInteraction", r"()Z");
+
+ /// from: public boolean isVoiceInteraction()
+ bool isVoiceInteraction() {
+ return jni.Jni.accessors.callMethodWithArgs(reference,
+ _id_isVoiceInteraction, jni.JniCallType.booleanType, []).boolean;
+ }
+
+ static final _id_isVoiceInteractionRoot = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"isVoiceInteractionRoot", r"()Z");
+
+ /// from: public boolean isVoiceInteractionRoot()
+ bool isVoiceInteractionRoot() {
+ return jni.Jni.accessors.callMethodWithArgs(reference,
+ _id_isVoiceInteractionRoot, jni.JniCallType.booleanType, []).boolean;
+ }
+
+ static final _id_getVoiceInteractor = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"getVoiceInteractor",
+ r"()Landroid/app/VoiceInteractor;");
+
+ /// from: public android.app.VoiceInteractor getVoiceInteractor()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getVoiceInteractor() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getVoiceInteractor,
+ jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_isLocalVoiceInteractionSupported = jni.Jni.accessors
+ .getMethodIDOf(
+ _class.reference, r"isLocalVoiceInteractionSupported", r"()Z");
+
+ /// from: public boolean isLocalVoiceInteractionSupported()
+ bool isLocalVoiceInteractionSupported() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_isLocalVoiceInteractionSupported,
+ jni.JniCallType.booleanType, []).boolean;
+ }
+
+ static final _id_startLocalVoiceInteraction = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"startLocalVoiceInteraction",
+ r"(Landroid/os/Bundle;)V");
+
+ /// from: public void startLocalVoiceInteraction(android.os.Bundle bundle)
+ void startLocalVoiceInteraction(
+ jni.JObject bundle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_startLocalVoiceInteraction,
+ jni.JniCallType.voidType,
+ [bundle.reference]).check();
+ }
+
+ static final _id_onLocalVoiceInteractionStarted = jni.Jni.accessors
+ .getMethodIDOf(
+ _class.reference, r"onLocalVoiceInteractionStarted", r"()V");
+
+ /// from: public void onLocalVoiceInteractionStarted()
+ void onLocalVoiceInteractionStarted() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onLocalVoiceInteractionStarted,
+ jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_onLocalVoiceInteractionStopped = jni.Jni.accessors
+ .getMethodIDOf(
+ _class.reference, r"onLocalVoiceInteractionStopped", r"()V");
+
+ /// from: public void onLocalVoiceInteractionStopped()
+ void onLocalVoiceInteractionStopped() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onLocalVoiceInteractionStopped,
+ jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_stopLocalVoiceInteraction = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"stopLocalVoiceInteraction", r"()V");
+
+ /// from: public void stopLocalVoiceInteraction()
+ void stopLocalVoiceInteraction() {
+ return jni.Jni.accessors.callMethodWithArgs(reference,
+ _id_stopLocalVoiceInteraction, jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_onNewIntent = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"onNewIntent", r"(Landroid/content/Intent;)V");
+
+ /// from: protected void onNewIntent(android.content.Intent intent)
+ void onNewIntent(
+ jni.JObject intent,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_onNewIntent,
+ jni.JniCallType.voidType, [intent.reference]).check();
+ }
+
+ static final _id_onSaveInstanceState = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"onSaveInstanceState", r"(Landroid/os/Bundle;)V");
+
+ /// from: protected void onSaveInstanceState(android.os.Bundle bundle)
+ void onSaveInstanceState(
+ jni.JObject bundle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onSaveInstanceState,
+ jni.JniCallType.voidType,
+ [bundle.reference]).check();
+ }
+
+ static final _id_onSaveInstanceState1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"onSaveInstanceState",
+ r"(Landroid/os/Bundle;Landroid/os/PersistableBundle;)V");
+
+ /// from: public void onSaveInstanceState(android.os.Bundle bundle, android.os.PersistableBundle persistableBundle)
+ void onSaveInstanceState1(
+ jni.JObject bundle,
+ jni.JObject persistableBundle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onSaveInstanceState1,
+ jni.JniCallType.voidType,
+ [bundle.reference, persistableBundle.reference]).check();
+ }
+
+ static final _id_onPause =
+ jni.Jni.accessors.getMethodIDOf(_class.reference, r"onPause", r"()V");
+
+ /// from: protected void onPause()
+ void onPause() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_onPause, jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_onUserLeaveHint = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"onUserLeaveHint", r"()V");
+
+ /// from: protected void onUserLeaveHint()
+ void onUserLeaveHint() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_onUserLeaveHint, jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_onCreateThumbnail = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"onCreateThumbnail",
+ r"(Landroid/graphics/Bitmap;Landroid/graphics/Canvas;)Z");
+
+ /// from: public boolean onCreateThumbnail(android.graphics.Bitmap bitmap, android.graphics.Canvas canvas)
+ bool onCreateThumbnail(
+ jni.JObject bitmap,
+ jni.JObject canvas,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onCreateThumbnail,
+ jni.JniCallType.booleanType,
+ [bitmap.reference, canvas.reference]).boolean;
+ }
+
+ static final _id_onCreateDescription = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"onCreateDescription", r"()Ljava/lang/CharSequence;");
+
+ /// from: public java.lang.CharSequence onCreateDescription()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject onCreateDescription() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onCreateDescription,
+ jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_onProvideAssistData = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"onProvideAssistData", r"(Landroid/os/Bundle;)V");
+
+ /// from: public void onProvideAssistData(android.os.Bundle bundle)
+ void onProvideAssistData(
+ jni.JObject bundle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onProvideAssistData,
+ jni.JniCallType.voidType,
+ [bundle.reference]).check();
+ }
+
+ static final _id_onProvideAssistContent = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"onProvideAssistContent",
+ r"(Landroid/app/assist/AssistContent;)V");
+
+ /// from: public void onProvideAssistContent(android.app.assist.AssistContent assistContent)
+ void onProvideAssistContent(
+ jni.JObject assistContent,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onProvideAssistContent,
+ jni.JniCallType.voidType,
+ [assistContent.reference]).check();
+ }
+
+ static final _id_onGetDirectActions = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"onGetDirectActions",
+ r"(Landroid/os/CancellationSignal;Ljava/util/function/Consumer;)V");
+
+ /// from: public void onGetDirectActions(android.os.CancellationSignal cancellationSignal, java.util.function.Consumer consumer)
+ void onGetDirectActions(
+ jni.JObject cancellationSignal,
+ jni.JObject consumer,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onGetDirectActions,
+ jni.JniCallType.voidType,
+ [cancellationSignal.reference, consumer.reference]).check();
+ }
+
+ static final _id_onPerformDirectAction = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"onPerformDirectAction",
+ r"(Ljava/lang/String;Landroid/os/Bundle;Landroid/os/CancellationSignal;Ljava/util/function/Consumer;)V");
+
+ /// 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,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_onPerformDirectAction, jni.JniCallType.voidType, [
+ string.reference,
+ bundle.reference,
+ cancellationSignal.reference,
+ consumer.reference
+ ]).check();
+ }
+
+ static final _id_requestShowKeyboardShortcuts = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"requestShowKeyboardShortcuts", r"()V");
+
+ /// from: public final void requestShowKeyboardShortcuts()
+ void requestShowKeyboardShortcuts() {
+ return jni.Jni.accessors.callMethodWithArgs(reference,
+ _id_requestShowKeyboardShortcuts, jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_dismissKeyboardShortcutsHelper = jni.Jni.accessors
+ .getMethodIDOf(
+ _class.reference, r"dismissKeyboardShortcutsHelper", r"()V");
+
+ /// from: public final void dismissKeyboardShortcutsHelper()
+ void dismissKeyboardShortcutsHelper() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_dismissKeyboardShortcutsHelper,
+ jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_onProvideKeyboardShortcuts = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"onProvideKeyboardShortcuts",
+ r"(Ljava/util/List;Landroid/view/Menu;I)V");
+
+ /// from: public void onProvideKeyboardShortcuts(java.util.List list, android.view.Menu menu, int i)
+ void onProvideKeyboardShortcuts(
+ jni.JList list,
+ jni.JObject menu,
+ int i,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onProvideKeyboardShortcuts,
+ jni.JniCallType.voidType,
+ [list.reference, menu.reference, jni.JValueInt(i)]).check();
+ }
+
+ static final _id_showAssist = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"showAssist", r"(Landroid/os/Bundle;)Z");
+
+ /// from: public boolean showAssist(android.os.Bundle bundle)
+ bool showAssist(
+ jni.JObject bundle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_showAssist,
+ jni.JniCallType.booleanType, [bundle.reference]).boolean;
+ }
+
+ static final _id_onStop =
+ jni.Jni.accessors.getMethodIDOf(_class.reference, r"onStop", r"()V");
+
+ /// from: protected void onStop()
+ void onStop() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_onStop, jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_onDestroy =
+ jni.Jni.accessors.getMethodIDOf(_class.reference, r"onDestroy", r"()V");
+
+ /// from: protected void onDestroy()
+ void onDestroy() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_onDestroy, jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_reportFullyDrawn = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"reportFullyDrawn", r"()V");
+
+ /// from: public void reportFullyDrawn()
+ void reportFullyDrawn() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_reportFullyDrawn, jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_onMultiWindowModeChanged = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"onMultiWindowModeChanged",
+ r"(ZLandroid/content/res/Configuration;)V");
+
+ /// from: public void onMultiWindowModeChanged(boolean z, android.content.res.Configuration configuration)
+ void onMultiWindowModeChanged(
+ bool z,
+ jni.JObject configuration,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onMultiWindowModeChanged,
+ jni.JniCallType.voidType,
+ [z ? 1 : 0, configuration.reference]).check();
+ }
+
+ static final _id_onMultiWindowModeChanged1 = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"onMultiWindowModeChanged", r"(Z)V");
+
+ /// from: public void onMultiWindowModeChanged(boolean z)
+ void onMultiWindowModeChanged1(
+ bool z,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onMultiWindowModeChanged1,
+ jni.JniCallType.voidType,
+ [z ? 1 : 0]).check();
+ }
+
+ static final _id_isInMultiWindowMode = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"isInMultiWindowMode", r"()Z");
+
+ /// from: public boolean isInMultiWindowMode()
+ bool isInMultiWindowMode() {
+ return jni.Jni.accessors.callMethodWithArgs(reference,
+ _id_isInMultiWindowMode, jni.JniCallType.booleanType, []).boolean;
+ }
+
+ static final _id_onPictureInPictureModeChanged = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"onPictureInPictureModeChanged",
+ r"(ZLandroid/content/res/Configuration;)V");
+
+ /// from: public void onPictureInPictureModeChanged(boolean z, android.content.res.Configuration configuration)
+ void onPictureInPictureModeChanged(
+ bool z,
+ jni.JObject configuration,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onPictureInPictureModeChanged,
+ jni.JniCallType.voidType,
+ [z ? 1 : 0, configuration.reference]).check();
+ }
+
+ static final _id_onPictureInPictureUiStateChanged = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"onPictureInPictureUiStateChanged",
+ r"(Landroid/app/PictureInPictureUiState;)V");
+
+ /// from: public void onPictureInPictureUiStateChanged(android.app.PictureInPictureUiState pictureInPictureUiState)
+ void onPictureInPictureUiStateChanged(
+ jni.JObject pictureInPictureUiState,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onPictureInPictureUiStateChanged,
+ jni.JniCallType.voidType,
+ [pictureInPictureUiState.reference]).check();
+ }
+
+ static final _id_onPictureInPictureModeChanged1 = jni.Jni.accessors
+ .getMethodIDOf(
+ _class.reference, r"onPictureInPictureModeChanged", r"(Z)V");
+
+ /// from: public void onPictureInPictureModeChanged(boolean z)
+ void onPictureInPictureModeChanged1(
+ bool z,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onPictureInPictureModeChanged1,
+ jni.JniCallType.voidType,
+ [z ? 1 : 0]).check();
+ }
+
+ static final _id_isInPictureInPictureMode = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"isInPictureInPictureMode", r"()Z");
+
+ /// from: public boolean isInPictureInPictureMode()
+ bool isInPictureInPictureMode() {
+ return jni.Jni.accessors.callMethodWithArgs(reference,
+ _id_isInPictureInPictureMode, jni.JniCallType.booleanType, []).boolean;
+ }
+
+ static final _id_enterPictureInPictureMode = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"enterPictureInPictureMode", r"()V");
+
+ /// from: public void enterPictureInPictureMode()
+ void enterPictureInPictureMode() {
+ return jni.Jni.accessors.callMethodWithArgs(reference,
+ _id_enterPictureInPictureMode, jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_enterPictureInPictureMode1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"enterPictureInPictureMode",
+ r"(Landroid/app/PictureInPictureParams;)Z");
+
+ /// from: public boolean enterPictureInPictureMode(android.app.PictureInPictureParams pictureInPictureParams)
+ bool enterPictureInPictureMode1(
+ jni.JObject pictureInPictureParams,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_enterPictureInPictureMode1,
+ jni.JniCallType.booleanType,
+ [pictureInPictureParams.reference]).boolean;
+ }
+
+ static final _id_setPictureInPictureParams = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"setPictureInPictureParams",
+ r"(Landroid/app/PictureInPictureParams;)V");
+
+ /// from: public void setPictureInPictureParams(android.app.PictureInPictureParams pictureInPictureParams)
+ void setPictureInPictureParams(
+ jni.JObject pictureInPictureParams,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_setPictureInPictureParams,
+ jni.JniCallType.voidType,
+ [pictureInPictureParams.reference]).check();
+ }
+
+ static final _id_getMaxNumPictureInPictureActions = jni.Jni.accessors
+ .getMethodIDOf(
+ _class.reference, r"getMaxNumPictureInPictureActions", r"()I");
+
+ /// from: public int getMaxNumPictureInPictureActions()
+ int getMaxNumPictureInPictureActions() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getMaxNumPictureInPictureActions,
+ jni.JniCallType.intType, []).integer;
+ }
+
+ static final _id_onPictureInPictureRequested = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"onPictureInPictureRequested", r"()Z");
+
+ /// from: public boolean onPictureInPictureRequested()
+ bool onPictureInPictureRequested() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onPictureInPictureRequested,
+ jni.JniCallType.booleanType, []).boolean;
+ }
+
+ static final _id_requestFullscreenMode = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"requestFullscreenMode",
+ r"(ILandroid/os/OutcomeReceiver;)V");
+
+ /// from: public void requestFullscreenMode(int i, android.os.OutcomeReceiver outcomeReceiver)
+ void requestFullscreenMode(
+ int i,
+ jni.JObject outcomeReceiver,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_requestFullscreenMode,
+ jni.JniCallType.voidType,
+ [jni.JValueInt(i), outcomeReceiver.reference]).check();
+ }
+
+ static final _id_setShouldDockBigOverlays = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"setShouldDockBigOverlays", r"(Z)V");
+
+ /// from: public void setShouldDockBigOverlays(boolean z)
+ void setShouldDockBigOverlays(
+ bool z,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_setShouldDockBigOverlays,
+ jni.JniCallType.voidType,
+ [z ? 1 : 0]).check();
+ }
+
+ static final _id_shouldDockBigOverlays = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"shouldDockBigOverlays", r"()Z");
+
+ /// from: public boolean shouldDockBigOverlays()
+ bool shouldDockBigOverlays() {
+ return jni.Jni.accessors.callMethodWithArgs(reference,
+ _id_shouldDockBigOverlays, jni.JniCallType.booleanType, []).boolean;
+ }
+
+ static final _id_onConfigurationChanged = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"onConfigurationChanged",
+ r"(Landroid/content/res/Configuration;)V");
+
+ /// from: public void onConfigurationChanged(android.content.res.Configuration configuration)
+ void onConfigurationChanged(
+ jni.JObject configuration,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onConfigurationChanged,
+ jni.JniCallType.voidType,
+ [configuration.reference]).check();
+ }
+
+ static final _id_getChangingConfigurations = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"getChangingConfigurations", r"()I");
+
+ /// from: public int getChangingConfigurations()
+ int getChangingConfigurations() {
+ return jni.Jni.accessors.callMethodWithArgs(reference,
+ _id_getChangingConfigurations, jni.JniCallType.intType, []).integer;
+ }
+
+ static final _id_getLastNonConfigurationInstance = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"getLastNonConfigurationInstance",
+ r"()Ljava/lang/Object;");
+
+ /// from: public java.lang.Object getLastNonConfigurationInstance()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getLastNonConfigurationInstance() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getLastNonConfigurationInstance,
+ jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_onRetainNonConfigurationInstance = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"onRetainNonConfigurationInstance",
+ r"()Ljava/lang/Object;");
+
+ /// from: public java.lang.Object onRetainNonConfigurationInstance()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject onRetainNonConfigurationInstance() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onRetainNonConfigurationInstance,
+ jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_onLowMemory =
+ jni.Jni.accessors.getMethodIDOf(_class.reference, r"onLowMemory", r"()V");
+
+ /// from: public void onLowMemory()
+ void onLowMemory() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_onLowMemory, jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_onTrimMemory = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"onTrimMemory", r"(I)V");
+
+ /// from: public void onTrimMemory(int i)
+ void onTrimMemory(
+ int i,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_onTrimMemory,
+ jni.JniCallType.voidType, [jni.JValueInt(i)]).check();
+ }
+
+ static final _id_getFragmentManager = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"getFragmentManager",
+ r"()Landroid/app/FragmentManager;");
+
+ /// from: public android.app.FragmentManager getFragmentManager()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getFragmentManager() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getFragmentManager,
+ jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_onAttachFragment = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"onAttachFragment", r"(Landroid/app/Fragment;)V");
+
+ /// from: public void onAttachFragment(android.app.Fragment fragment)
+ void onAttachFragment(
+ jni.JObject fragment,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_onAttachFragment,
+ jni.JniCallType.voidType, [fragment.reference]).check();
+ }
+
+ static final _id_managedQuery = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"managedQuery",
+ r"(Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)Landroid/database/Cursor;");
+
+ /// 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 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,
+ ) {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_managedQuery, jni.JniCallType.objectType, [
+ uri.reference,
+ strings.reference,
+ string.reference,
+ strings1.reference,
+ string1.reference
+ ]).object);
+ }
+
+ static final _id_startManagingCursor = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"startManagingCursor",
+ r"(Landroid/database/Cursor;)V");
+
+ /// from: public void startManagingCursor(android.database.Cursor cursor)
+ void startManagingCursor(
+ jni.JObject cursor,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_startManagingCursor,
+ jni.JniCallType.voidType,
+ [cursor.reference]).check();
+ }
+
+ static final _id_stopManagingCursor = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"stopManagingCursor", r"(Landroid/database/Cursor;)V");
+
+ /// from: public void stopManagingCursor(android.database.Cursor cursor)
+ void stopManagingCursor(
+ jni.JObject cursor,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_stopManagingCursor,
+ jni.JniCallType.voidType,
+ [cursor.reference]).check();
+ }
+
+ static final _id_findViewById = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"findViewById", r"(I)Landroid/view/View;");
+
+ /// from: public T findViewById(int i)
+ /// 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(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_findViewById,
+ jni.JniCallType.objectType,
+ [jni.JValueInt(i)]).object);
+ }
+
+ static final _id_requireViewById = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"requireViewById", r"(I)Landroid/view/View;");
+
+ /// from: public final T requireViewById(int i)
+ /// 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(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_requireViewById,
+ jni.JniCallType.objectType,
+ [jni.JValueInt(i)]).object);
+ }
+
+ static final _id_getActionBar = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"getActionBar", r"()Landroid/app/ActionBar;");
+
+ /// from: public android.app.ActionBar getActionBar()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getActionBar() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_getActionBar, jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_setActionBar = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"setActionBar", r"(Landroid/widget/Toolbar;)V");
+
+ /// from: public void setActionBar(android.widget.Toolbar toolbar)
+ void setActionBar(
+ jni.JObject toolbar,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_setActionBar,
+ jni.JniCallType.voidType, [toolbar.reference]).check();
+ }
+
+ static final _id_setContentView = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"setContentView", r"(I)V");
+
+ /// from: public void setContentView(int i)
+ void setContentView(
+ int i,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_setContentView,
+ jni.JniCallType.voidType, [jni.JValueInt(i)]).check();
+ }
+
+ static final _id_setContentView1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"setContentView", r"(Landroid/view/View;)V");
+
+ /// from: public void setContentView(android.view.View view)
+ void setContentView1(
+ jni.JObject view,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_setContentView1,
+ jni.JniCallType.voidType, [view.reference]).check();
+ }
+
+ static final _id_setContentView2 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"setContentView",
+ r"(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V");
+
+ /// from: public void setContentView(android.view.View view, android.view.ViewGroup$LayoutParams layoutParams)
+ void setContentView2(
+ jni.JObject view,
+ jni.JObject layoutParams,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_setContentView2,
+ jni.JniCallType.voidType,
+ [view.reference, layoutParams.reference]).check();
+ }
+
+ static final _id_addContentView = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"addContentView",
+ r"(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V");
+
+ /// from: public void addContentView(android.view.View view, android.view.ViewGroup$LayoutParams layoutParams)
+ void addContentView(
+ jni.JObject view,
+ jni.JObject layoutParams,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_addContentView,
+ jni.JniCallType.voidType,
+ [view.reference, layoutParams.reference]).check();
+ }
+
+ static final _id_getContentTransitionManager = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"getContentTransitionManager",
+ r"()Landroid/transition/TransitionManager;");
+
+ /// from: public android.transition.TransitionManager getContentTransitionManager()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getContentTransitionManager() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getContentTransitionManager,
+ jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_setContentTransitionManager = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"setContentTransitionManager",
+ r"(Landroid/transition/TransitionManager;)V");
+
+ /// from: public void setContentTransitionManager(android.transition.TransitionManager transitionManager)
+ void setContentTransitionManager(
+ jni.JObject transitionManager,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_setContentTransitionManager,
+ jni.JniCallType.voidType,
+ [transitionManager.reference]).check();
+ }
+
+ static final _id_getContentScene = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"getContentScene", r"()Landroid/transition/Scene;");
+
+ /// from: public android.transition.Scene getContentScene()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getContentScene() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_getContentScene, jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_setFinishOnTouchOutside = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"setFinishOnTouchOutside", r"(Z)V");
+
+ /// from: public void setFinishOnTouchOutside(boolean z)
+ void setFinishOnTouchOutside(
+ bool z,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_setFinishOnTouchOutside,
+ jni.JniCallType.voidType,
+ [z ? 1 : 0]).check();
+ }
+
+ static final _id_setDefaultKeyMode = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"setDefaultKeyMode", r"(I)V");
+
+ /// from: public final void setDefaultKeyMode(int i)
+ void setDefaultKeyMode(
+ int i,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_setDefaultKeyMode,
+ jni.JniCallType.voidType,
+ [jni.JValueInt(i)]).check();
+ }
+
+ static final _id_onKeyDown = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"onKeyDown", r"(ILandroid/view/KeyEvent;)Z");
+
+ /// from: public boolean onKeyDown(int i, android.view.KeyEvent keyEvent)
+ bool onKeyDown(
+ int i,
+ jni.JObject keyEvent,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onKeyDown,
+ jni.JniCallType.booleanType,
+ [jni.JValueInt(i), keyEvent.reference]).boolean;
+ }
+
+ static final _id_onKeyLongPress = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"onKeyLongPress", r"(ILandroid/view/KeyEvent;)Z");
+
+ /// from: public boolean onKeyLongPress(int i, android.view.KeyEvent keyEvent)
+ bool onKeyLongPress(
+ int i,
+ jni.JObject keyEvent,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onKeyLongPress,
+ jni.JniCallType.booleanType,
+ [jni.JValueInt(i), keyEvent.reference]).boolean;
+ }
+
+ static final _id_onKeyUp = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"onKeyUp", r"(ILandroid/view/KeyEvent;)Z");
+
+ /// from: public boolean onKeyUp(int i, android.view.KeyEvent keyEvent)
+ bool onKeyUp(
+ int i,
+ jni.JObject keyEvent,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onKeyUp,
+ jni.JniCallType.booleanType,
+ [jni.JValueInt(i), keyEvent.reference]).boolean;
+ }
+
+ static final _id_onKeyMultiple = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"onKeyMultiple", r"(IILandroid/view/KeyEvent;)Z");
+
+ /// from: public boolean onKeyMultiple(int i, int i1, android.view.KeyEvent keyEvent)
+ bool onKeyMultiple(
+ int i,
+ int i1,
+ jni.JObject keyEvent,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onKeyMultiple,
+ jni.JniCallType.booleanType,
+ [jni.JValueInt(i), jni.JValueInt(i1), keyEvent.reference]).boolean;
+ }
+
+ static final _id_onBackPressed = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"onBackPressed", r"()V");
+
+ /// from: public void onBackPressed()
+ void onBackPressed() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_onBackPressed, jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_onKeyShortcut = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"onKeyShortcut", r"(ILandroid/view/KeyEvent;)Z");
+
+ /// from: public boolean onKeyShortcut(int i, android.view.KeyEvent keyEvent)
+ bool onKeyShortcut(
+ int i,
+ jni.JObject keyEvent,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onKeyShortcut,
+ jni.JniCallType.booleanType,
+ [jni.JValueInt(i), keyEvent.reference]).boolean;
+ }
+
+ static final _id_onTouchEvent = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"onTouchEvent", r"(Landroid/view/MotionEvent;)Z");
+
+ /// from: public boolean onTouchEvent(android.view.MotionEvent motionEvent)
+ bool onTouchEvent(
+ jni.JObject motionEvent,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_onTouchEvent,
+ jni.JniCallType.booleanType, [motionEvent.reference]).boolean;
+ }
+
+ static final _id_onTrackballEvent = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"onTrackballEvent", r"(Landroid/view/MotionEvent;)Z");
+
+ /// from: public boolean onTrackballEvent(android.view.MotionEvent motionEvent)
+ bool onTrackballEvent(
+ jni.JObject motionEvent,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_onTrackballEvent,
+ jni.JniCallType.booleanType, [motionEvent.reference]).boolean;
+ }
+
+ static final _id_onGenericMotionEvent = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"onGenericMotionEvent",
+ r"(Landroid/view/MotionEvent;)Z");
+
+ /// from: public boolean onGenericMotionEvent(android.view.MotionEvent motionEvent)
+ bool onGenericMotionEvent(
+ jni.JObject motionEvent,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onGenericMotionEvent,
+ jni.JniCallType.booleanType,
+ [motionEvent.reference]).boolean;
+ }
+
+ static final _id_onUserInteraction = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"onUserInteraction", r"()V");
+
+ /// from: public void onUserInteraction()
+ void onUserInteraction() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_onUserInteraction, jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_onWindowAttributesChanged = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"onWindowAttributesChanged",
+ r"(Landroid/view/WindowManager$LayoutParams;)V");
+
+ /// from: public void onWindowAttributesChanged(android.view.WindowManager$LayoutParams layoutParams)
+ void onWindowAttributesChanged(
+ jni.JObject layoutParams,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onWindowAttributesChanged,
+ jni.JniCallType.voidType,
+ [layoutParams.reference]).check();
+ }
+
+ static final _id_onContentChanged = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"onContentChanged", r"()V");
+
+ /// from: public void onContentChanged()
+ void onContentChanged() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_onContentChanged, jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_onWindowFocusChanged = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"onWindowFocusChanged", r"(Z)V");
+
+ /// from: public void onWindowFocusChanged(boolean z)
+ void onWindowFocusChanged(
+ bool z,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onWindowFocusChanged,
+ jni.JniCallType.voidType,
+ [z ? 1 : 0]).check();
+ }
+
+ static final _id_onAttachedToWindow = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"onAttachedToWindow", r"()V");
+
+ /// from: public void onAttachedToWindow()
+ void onAttachedToWindow() {
+ return jni.Jni.accessors.callMethodWithArgs(reference,
+ _id_onAttachedToWindow, jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_onDetachedFromWindow = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"onDetachedFromWindow", r"()V");
+
+ /// from: public void onDetachedFromWindow()
+ void onDetachedFromWindow() {
+ return jni.Jni.accessors.callMethodWithArgs(reference,
+ _id_onDetachedFromWindow, jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_hasWindowFocus = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"hasWindowFocus", r"()Z");
+
+ /// from: public boolean hasWindowFocus()
+ bool hasWindowFocus() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_hasWindowFocus, jni.JniCallType.booleanType, []).boolean;
+ }
+
+ static final _id_dispatchKeyEvent = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"dispatchKeyEvent", r"(Landroid/view/KeyEvent;)Z");
+
+ /// from: public boolean dispatchKeyEvent(android.view.KeyEvent keyEvent)
+ bool dispatchKeyEvent(
+ jni.JObject keyEvent,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_dispatchKeyEvent,
+ jni.JniCallType.booleanType, [keyEvent.reference]).boolean;
+ }
+
+ static final _id_dispatchKeyShortcutEvent = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"dispatchKeyShortcutEvent",
+ r"(Landroid/view/KeyEvent;)Z");
+
+ /// from: public boolean dispatchKeyShortcutEvent(android.view.KeyEvent keyEvent)
+ bool dispatchKeyShortcutEvent(
+ jni.JObject keyEvent,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_dispatchKeyShortcutEvent,
+ jni.JniCallType.booleanType,
+ [keyEvent.reference]).boolean;
+ }
+
+ static final _id_dispatchTouchEvent = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"dispatchTouchEvent",
+ r"(Landroid/view/MotionEvent;)Z");
+
+ /// from: public boolean dispatchTouchEvent(android.view.MotionEvent motionEvent)
+ bool dispatchTouchEvent(
+ jni.JObject motionEvent,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_dispatchTouchEvent,
+ jni.JniCallType.booleanType,
+ [motionEvent.reference]).boolean;
+ }
+
+ static final _id_dispatchTrackballEvent = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"dispatchTrackballEvent",
+ r"(Landroid/view/MotionEvent;)Z");
+
+ /// from: public boolean dispatchTrackballEvent(android.view.MotionEvent motionEvent)
+ bool dispatchTrackballEvent(
+ jni.JObject motionEvent,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_dispatchTrackballEvent,
+ jni.JniCallType.booleanType,
+ [motionEvent.reference]).boolean;
+ }
+
+ static final _id_dispatchGenericMotionEvent = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"dispatchGenericMotionEvent",
+ r"(Landroid/view/MotionEvent;)Z");
+
+ /// from: public boolean dispatchGenericMotionEvent(android.view.MotionEvent motionEvent)
+ bool dispatchGenericMotionEvent(
+ jni.JObject motionEvent,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_dispatchGenericMotionEvent,
+ jni.JniCallType.booleanType,
+ [motionEvent.reference]).boolean;
+ }
+
+ static final _id_dispatchPopulateAccessibilityEvent = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"dispatchPopulateAccessibilityEvent",
+ r"(Landroid/view/accessibility/AccessibilityEvent;)Z");
+
+ /// from: public boolean dispatchPopulateAccessibilityEvent(android.view.accessibility.AccessibilityEvent accessibilityEvent)
+ bool dispatchPopulateAccessibilityEvent(
+ jni.JObject accessibilityEvent,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_dispatchPopulateAccessibilityEvent,
+ jni.JniCallType.booleanType,
+ [accessibilityEvent.reference]).boolean;
+ }
+
+ static final _id_onCreatePanelView = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"onCreatePanelView", r"(I)Landroid/view/View;");
+
+ /// from: public android.view.View onCreatePanelView(int i)
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject onCreatePanelView(
+ int i,
+ ) {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onCreatePanelView,
+ jni.JniCallType.objectType,
+ [jni.JValueInt(i)]).object);
+ }
+
+ static final _id_onCreatePanelMenu = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"onCreatePanelMenu", r"(ILandroid/view/Menu;)Z");
+
+ /// from: public boolean onCreatePanelMenu(int i, android.view.Menu menu)
+ bool onCreatePanelMenu(
+ int i,
+ jni.JObject menu,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onCreatePanelMenu,
+ jni.JniCallType.booleanType,
+ [jni.JValueInt(i), menu.reference]).boolean;
+ }
+
+ static final _id_onPreparePanel = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"onPreparePanel",
+ r"(ILandroid/view/View;Landroid/view/Menu;)Z");
+
+ /// from: public boolean onPreparePanel(int i, android.view.View view, android.view.Menu menu)
+ bool onPreparePanel(
+ int i,
+ jni.JObject view,
+ jni.JObject menu,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onPreparePanel,
+ jni.JniCallType.booleanType,
+ [jni.JValueInt(i), view.reference, menu.reference]).boolean;
+ }
+
+ static final _id_onMenuOpened = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"onMenuOpened", r"(ILandroid/view/Menu;)Z");
+
+ /// from: public boolean onMenuOpened(int i, android.view.Menu menu)
+ bool onMenuOpened(
+ int i,
+ jni.JObject menu,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onMenuOpened,
+ jni.JniCallType.booleanType,
+ [jni.JValueInt(i), menu.reference]).boolean;
+ }
+
+ static final _id_onMenuItemSelected = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"onMenuItemSelected", r"(ILandroid/view/MenuItem;)Z");
+
+ /// from: public boolean onMenuItemSelected(int i, android.view.MenuItem menuItem)
+ bool onMenuItemSelected(
+ int i,
+ jni.JObject menuItem,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onMenuItemSelected,
+ jni.JniCallType.booleanType,
+ [jni.JValueInt(i), menuItem.reference]).boolean;
+ }
+
+ static final _id_onPanelClosed = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"onPanelClosed", r"(ILandroid/view/Menu;)V");
+
+ /// from: public void onPanelClosed(int i, android.view.Menu menu)
+ void onPanelClosed(
+ int i,
+ jni.JObject menu,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_onPanelClosed,
+ jni.JniCallType.voidType, [jni.JValueInt(i), menu.reference]).check();
+ }
+
+ static final _id_invalidateOptionsMenu = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"invalidateOptionsMenu", r"()V");
+
+ /// from: public void invalidateOptionsMenu()
+ void invalidateOptionsMenu() {
+ return jni.Jni.accessors.callMethodWithArgs(reference,
+ _id_invalidateOptionsMenu, jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_onCreateOptionsMenu = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"onCreateOptionsMenu", r"(Landroid/view/Menu;)Z");
+
+ /// from: public boolean onCreateOptionsMenu(android.view.Menu menu)
+ bool onCreateOptionsMenu(
+ jni.JObject menu,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onCreateOptionsMenu,
+ jni.JniCallType.booleanType,
+ [menu.reference]).boolean;
+ }
+
+ static final _id_onPrepareOptionsMenu = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"onPrepareOptionsMenu", r"(Landroid/view/Menu;)Z");
+
+ /// from: public boolean onPrepareOptionsMenu(android.view.Menu menu)
+ bool onPrepareOptionsMenu(
+ jni.JObject menu,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onPrepareOptionsMenu,
+ jni.JniCallType.booleanType,
+ [menu.reference]).boolean;
+ }
+
+ static final _id_onOptionsItemSelected = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"onOptionsItemSelected",
+ r"(Landroid/view/MenuItem;)Z");
+
+ /// from: public boolean onOptionsItemSelected(android.view.MenuItem menuItem)
+ bool onOptionsItemSelected(
+ jni.JObject menuItem,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onOptionsItemSelected,
+ jni.JniCallType.booleanType,
+ [menuItem.reference]).boolean;
+ }
+
+ static final _id_onNavigateUp = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"onNavigateUp", r"()Z");
+
+ /// from: public boolean onNavigateUp()
+ bool onNavigateUp() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_onNavigateUp, jni.JniCallType.booleanType, []).boolean;
+ }
+
+ static final _id_onNavigateUpFromChild = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"onNavigateUpFromChild", r"(Landroid/app/Activity;)Z");
+
+ /// from: public boolean onNavigateUpFromChild(android.app.Activity activity)
+ bool onNavigateUpFromChild(
+ Activity activity,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onNavigateUpFromChild,
+ jni.JniCallType.booleanType,
+ [activity.reference]).boolean;
+ }
+
+ static final _id_onCreateNavigateUpTaskStack = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"onCreateNavigateUpTaskStack",
+ r"(Landroid/app/TaskStackBuilder;)V");
+
+ /// from: public void onCreateNavigateUpTaskStack(android.app.TaskStackBuilder taskStackBuilder)
+ void onCreateNavigateUpTaskStack(
+ jni.JObject taskStackBuilder,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onCreateNavigateUpTaskStack,
+ jni.JniCallType.voidType,
+ [taskStackBuilder.reference]).check();
+ }
+
+ static final _id_onPrepareNavigateUpTaskStack = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"onPrepareNavigateUpTaskStack",
+ r"(Landroid/app/TaskStackBuilder;)V");
+
+ /// from: public void onPrepareNavigateUpTaskStack(android.app.TaskStackBuilder taskStackBuilder)
+ void onPrepareNavigateUpTaskStack(
+ jni.JObject taskStackBuilder,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onPrepareNavigateUpTaskStack,
+ jni.JniCallType.voidType,
+ [taskStackBuilder.reference]).check();
+ }
+
+ static final _id_onOptionsMenuClosed = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"onOptionsMenuClosed", r"(Landroid/view/Menu;)V");
+
+ /// from: public void onOptionsMenuClosed(android.view.Menu menu)
+ void onOptionsMenuClosed(
+ jni.JObject menu,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onOptionsMenuClosed,
+ jni.JniCallType.voidType,
+ [menu.reference]).check();
+ }
+
+ static final _id_openOptionsMenu = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"openOptionsMenu", r"()V");
+
+ /// from: public void openOptionsMenu()
+ void openOptionsMenu() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_openOptionsMenu, jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_closeOptionsMenu = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"closeOptionsMenu", r"()V");
+
+ /// from: public void closeOptionsMenu()
+ void closeOptionsMenu() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_closeOptionsMenu, jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_onCreateContextMenu = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"onCreateContextMenu",
+ r"(Landroid/view/ContextMenu;Landroid/view/View;Landroid/view/ContextMenu$ContextMenuInfo;)V");
+
+ /// 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,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_onCreateContextMenu, jni.JniCallType.voidType, [
+ contextMenu.reference,
+ view.reference,
+ contextMenuInfo.reference
+ ]).check();
+ }
+
+ static final _id_registerForContextMenu = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"registerForContextMenu", r"(Landroid/view/View;)V");
+
+ /// from: public void registerForContextMenu(android.view.View view)
+ void registerForContextMenu(
+ jni.JObject view,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_registerForContextMenu,
+ jni.JniCallType.voidType,
+ [view.reference]).check();
+ }
+
+ static final _id_unregisterForContextMenu = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"unregisterForContextMenu", r"(Landroid/view/View;)V");
+
+ /// from: public void unregisterForContextMenu(android.view.View view)
+ void unregisterForContextMenu(
+ jni.JObject view,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_unregisterForContextMenu,
+ jni.JniCallType.voidType,
+ [view.reference]).check();
+ }
+
+ static final _id_openContextMenu = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"openContextMenu", r"(Landroid/view/View;)V");
+
+ /// from: public void openContextMenu(android.view.View view)
+ void openContextMenu(
+ jni.JObject view,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_openContextMenu,
+ jni.JniCallType.voidType, [view.reference]).check();
+ }
+
+ static final _id_closeContextMenu = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"closeContextMenu", r"()V");
+
+ /// from: public void closeContextMenu()
+ void closeContextMenu() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_closeContextMenu, jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_onContextItemSelected = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"onContextItemSelected",
+ r"(Landroid/view/MenuItem;)Z");
+
+ /// from: public boolean onContextItemSelected(android.view.MenuItem menuItem)
+ bool onContextItemSelected(
+ jni.JObject menuItem,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onContextItemSelected,
+ jni.JniCallType.booleanType,
+ [menuItem.reference]).boolean;
+ }
+
+ static final _id_onContextMenuClosed = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"onContextMenuClosed", r"(Landroid/view/Menu;)V");
+
+ /// from: public void onContextMenuClosed(android.view.Menu menu)
+ void onContextMenuClosed(
+ jni.JObject menu,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onContextMenuClosed,
+ jni.JniCallType.voidType,
+ [menu.reference]).check();
+ }
+
+ static final _id_onCreateDialog = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"onCreateDialog", r"(I)Landroid/app/Dialog;");
+
+ /// from: protected android.app.Dialog onCreateDialog(int i)
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject onCreateDialog(
+ int i,
+ ) {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onCreateDialog,
+ jni.JniCallType.objectType,
+ [jni.JValueInt(i)]).object);
+ }
+
+ static final _id_onCreateDialog1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"onCreateDialog",
+ r"(ILandroid/os/Bundle;)Landroid/app/Dialog;");
+
+ /// from: protected android.app.Dialog onCreateDialog(int i, android.os.Bundle bundle)
+ /// 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(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onCreateDialog1,
+ jni.JniCallType.objectType,
+ [jni.JValueInt(i), bundle.reference]).object);
+ }
+
+ static final _id_onPrepareDialog = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"onPrepareDialog", r"(ILandroid/app/Dialog;)V");
+
+ /// from: protected void onPrepareDialog(int i, android.app.Dialog dialog)
+ void onPrepareDialog(
+ int i,
+ jni.JObject dialog,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_onPrepareDialog,
+ jni.JniCallType.voidType, [jni.JValueInt(i), dialog.reference]).check();
+ }
+
+ static final _id_onPrepareDialog1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"onPrepareDialog",
+ r"(ILandroid/app/Dialog;Landroid/os/Bundle;)V");
+
+ /// from: protected void onPrepareDialog(int i, android.app.Dialog dialog, android.os.Bundle bundle)
+ void onPrepareDialog1(
+ int i,
+ jni.JObject dialog,
+ jni.JObject bundle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onPrepareDialog1,
+ jni.JniCallType.voidType,
+ [jni.JValueInt(i), dialog.reference, bundle.reference]).check();
+ }
+
+ static final _id_showDialog =
+ jni.Jni.accessors.getMethodIDOf(_class.reference, r"showDialog", r"(I)V");
+
+ /// from: public final void showDialog(int i)
+ void showDialog(
+ int i,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_showDialog,
+ jni.JniCallType.voidType, [jni.JValueInt(i)]).check();
+ }
+
+ static final _id_showDialog1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"showDialog", r"(ILandroid/os/Bundle;)Z");
+
+ /// from: public final boolean showDialog(int i, android.os.Bundle bundle)
+ bool showDialog1(
+ int i,
+ jni.JObject bundle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_showDialog1,
+ jni.JniCallType.booleanType,
+ [jni.JValueInt(i), bundle.reference]).boolean;
+ }
+
+ static final _id_dismissDialog = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"dismissDialog", r"(I)V");
+
+ /// from: public final void dismissDialog(int i)
+ void dismissDialog(
+ int i,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_dismissDialog,
+ jni.JniCallType.voidType, [jni.JValueInt(i)]).check();
+ }
+
+ static final _id_removeDialog = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"removeDialog", r"(I)V");
+
+ /// from: public final void removeDialog(int i)
+ void removeDialog(
+ int i,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_removeDialog,
+ jni.JniCallType.voidType, [jni.JValueInt(i)]).check();
+ }
+
+ static final _id_onSearchRequested = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"onSearchRequested", r"(Landroid/view/SearchEvent;)Z");
+
+ /// from: public boolean onSearchRequested(android.view.SearchEvent searchEvent)
+ bool onSearchRequested(
+ jni.JObject searchEvent,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onSearchRequested,
+ jni.JniCallType.booleanType,
+ [searchEvent.reference]).boolean;
+ }
+
+ static final _id_onSearchRequested1 = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"onSearchRequested", r"()Z");
+
+ /// from: public boolean onSearchRequested()
+ bool onSearchRequested1() {
+ return jni.Jni.accessors.callMethodWithArgs(reference,
+ _id_onSearchRequested1, jni.JniCallType.booleanType, []).boolean;
+ }
+
+ static final _id_getSearchEvent = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"getSearchEvent", r"()Landroid/view/SearchEvent;");
+
+ /// from: public final android.view.SearchEvent getSearchEvent()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getSearchEvent() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_getSearchEvent, jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_startSearch = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"startSearch",
+ r"(Ljava/lang/String;ZLandroid/os/Bundle;Z)V");
+
+ /// 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,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_startSearch,
+ jni.JniCallType.voidType,
+ [string.reference, z ? 1 : 0, bundle.reference, z1 ? 1 : 0]).check();
+ }
+
+ static final _id_triggerSearch = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"triggerSearch",
+ r"(Ljava/lang/String;Landroid/os/Bundle;)V");
+
+ /// from: public void triggerSearch(java.lang.String string, android.os.Bundle bundle)
+ void triggerSearch(
+ jni.JString string,
+ jni.JObject bundle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_triggerSearch,
+ jni.JniCallType.voidType, [string.reference, bundle.reference]).check();
+ }
+
+ static final _id_takeKeyEvents = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"takeKeyEvents", r"(Z)V");
+
+ /// from: public void takeKeyEvents(boolean z)
+ void takeKeyEvents(
+ bool z,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_takeKeyEvents,
+ jni.JniCallType.voidType, [z ? 1 : 0]).check();
+ }
+
+ static final _id_requestWindowFeature = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"requestWindowFeature", r"(I)Z");
+
+ /// from: public final boolean requestWindowFeature(int i)
+ bool requestWindowFeature(
+ int i,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_requestWindowFeature,
+ jni.JniCallType.booleanType,
+ [jni.JValueInt(i)]).boolean;
+ }
+
+ static final _id_setFeatureDrawableResource = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"setFeatureDrawableResource", r"(II)V");
+
+ /// from: public final void setFeatureDrawableResource(int i, int i1)
+ void setFeatureDrawableResource(
+ int i,
+ int i1,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_setFeatureDrawableResource,
+ jni.JniCallType.voidType,
+ [jni.JValueInt(i), jni.JValueInt(i1)]).check();
+ }
+
+ static final _id_setFeatureDrawableUri = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"setFeatureDrawableUri", r"(ILandroid/net/Uri;)V");
+
+ /// from: public final void setFeatureDrawableUri(int i, android.net.Uri uri)
+ void setFeatureDrawableUri(
+ int i,
+ jni.JObject uri,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_setFeatureDrawableUri,
+ jni.JniCallType.voidType,
+ [jni.JValueInt(i), uri.reference]).check();
+ }
+
+ static final _id_setFeatureDrawable = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"setFeatureDrawable",
+ r"(ILandroid/graphics/drawable/Drawable;)V");
+
+ /// from: public final void setFeatureDrawable(int i, android.graphics.drawable.Drawable drawable)
+ void setFeatureDrawable(
+ int i,
+ jni.JObject drawable,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_setFeatureDrawable,
+ jni.JniCallType.voidType,
+ [jni.JValueInt(i), drawable.reference]).check();
+ }
+
+ static final _id_setFeatureDrawableAlpha = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"setFeatureDrawableAlpha", r"(II)V");
+
+ /// from: public final void setFeatureDrawableAlpha(int i, int i1)
+ void setFeatureDrawableAlpha(
+ int i,
+ int i1,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_setFeatureDrawableAlpha,
+ jni.JniCallType.voidType,
+ [jni.JValueInt(i), jni.JValueInt(i1)]).check();
+ }
+
+ static final _id_getLayoutInflater = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"getLayoutInflater",
+ r"()Landroid/view/LayoutInflater;");
+
+ /// from: public android.view.LayoutInflater getLayoutInflater()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getLayoutInflater() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getLayoutInflater,
+ jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getMenuInflater = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"getMenuInflater", r"()Landroid/view/MenuInflater;");
+
+ /// from: public android.view.MenuInflater getMenuInflater()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getMenuInflater() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_getMenuInflater, jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_setTheme =
+ jni.Jni.accessors.getMethodIDOf(_class.reference, r"setTheme", r"(I)V");
+
+ /// from: public void setTheme(int i)
+ void setTheme(
+ int i,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_setTheme,
+ jni.JniCallType.voidType, [jni.JValueInt(i)]).check();
+ }
+
+ static final _id_onApplyThemeResource = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"onApplyThemeResource",
+ r"(Landroid/content/res/Resources$Theme;IZ)V");
+
+ /// from: protected void onApplyThemeResource(android.content.res.Resources$Theme theme, int i, boolean z)
+ void onApplyThemeResource(
+ jni.JObject theme,
+ int i,
+ bool z,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onApplyThemeResource,
+ jni.JniCallType.voidType,
+ [theme.reference, jni.JValueInt(i), z ? 1 : 0]).check();
+ }
+
+ static final _id_requestPermissions = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"requestPermissions", r"([Ljava/lang/String;I)V");
+
+ /// from: public final void requestPermissions(java.lang.String[] strings, int i)
+ void requestPermissions(
+ jni.JArray strings,
+ int i,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_requestPermissions,
+ jni.JniCallType.voidType,
+ [strings.reference, jni.JValueInt(i)]).check();
+ }
+
+ static final _id_onRequestPermissionsResult = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"onRequestPermissionsResult",
+ r"(I[Ljava/lang/String;[I)V");
+
+ /// from: public void onRequestPermissionsResult(int i, java.lang.String[] strings, int[] is)
+ void onRequestPermissionsResult(
+ int i,
+ jni.JArray strings,
+ jni.JArray is0,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onRequestPermissionsResult,
+ jni.JniCallType.voidType,
+ [jni.JValueInt(i), strings.reference, is0.reference]).check();
+ }
+
+ static final _id_shouldShowRequestPermissionRationale = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"shouldShowRequestPermissionRationale",
+ r"(Ljava/lang/String;)Z");
+
+ /// from: public boolean shouldShowRequestPermissionRationale(java.lang.String string)
+ bool shouldShowRequestPermissionRationale(
+ jni.JString string,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_shouldShowRequestPermissionRationale,
+ jni.JniCallType.booleanType,
+ [string.reference]).boolean;
+ }
+
+ static final _id_startActivityForResult = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"startActivityForResult",
+ r"(Landroid/content/Intent;I)V");
+
+ /// from: public void startActivityForResult(android.content.Intent intent, int i)
+ void startActivityForResult(
+ jni.JObject intent,
+ int i,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_startActivityForResult,
+ jni.JniCallType.voidType,
+ [intent.reference, jni.JValueInt(i)]).check();
+ }
+
+ static final _id_startActivityForResult1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"startActivityForResult",
+ r"(Landroid/content/Intent;ILandroid/os/Bundle;)V");
+
+ /// from: public void startActivityForResult(android.content.Intent intent, int i, android.os.Bundle bundle)
+ void startActivityForResult1(
+ jni.JObject intent,
+ int i,
+ jni.JObject bundle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_startActivityForResult1,
+ jni.JniCallType.voidType,
+ [intent.reference, jni.JValueInt(i), bundle.reference]).check();
+ }
+
+ static final _id_isActivityTransitionRunning = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"isActivityTransitionRunning", r"()Z");
+
+ /// from: public boolean isActivityTransitionRunning()
+ bool isActivityTransitionRunning() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_isActivityTransitionRunning,
+ jni.JniCallType.booleanType, []).boolean;
+ }
+
+ static final _id_startIntentSenderForResult = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"startIntentSenderForResult",
+ r"(Landroid/content/IntentSender;ILandroid/content/Intent;III)V");
+
+ /// 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,
+ jni.JObject intent,
+ int i1,
+ int i2,
+ int i3,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_startIntentSenderForResult, jni.JniCallType.voidType, [
+ intentSender.reference,
+ jni.JValueInt(i),
+ intent.reference,
+ jni.JValueInt(i1),
+ jni.JValueInt(i2),
+ jni.JValueInt(i3)
+ ]).check();
+ }
+
+ static final _id_startIntentSenderForResult1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"startIntentSenderForResult",
+ r"(Landroid/content/IntentSender;ILandroid/content/Intent;IIILandroid/os/Bundle;)V");
+
+ /// 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,
+ jni.JObject intent,
+ int i1,
+ int i2,
+ int i3,
+ jni.JObject bundle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_startIntentSenderForResult1, jni.JniCallType.voidType, [
+ intentSender.reference,
+ jni.JValueInt(i),
+ intent.reference,
+ jni.JValueInt(i1),
+ jni.JValueInt(i2),
+ jni.JValueInt(i3),
+ bundle.reference
+ ]).check();
+ }
+
+ static final _id_startActivity = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"startActivity", r"(Landroid/content/Intent;)V");
+
+ /// from: public void startActivity(android.content.Intent intent)
+ void startActivity(
+ jni.JObject intent,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_startActivity,
+ jni.JniCallType.voidType, [intent.reference]).check();
+ }
+
+ static final _id_startActivity1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"startActivity",
+ r"(Landroid/content/Intent;Landroid/os/Bundle;)V");
+
+ /// from: public void startActivity(android.content.Intent intent, android.os.Bundle bundle)
+ void startActivity1(
+ jni.JObject intent,
+ jni.JObject bundle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_startActivity1,
+ jni.JniCallType.voidType, [intent.reference, bundle.reference]).check();
+ }
+
+ static final _id_startActivities = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"startActivities", r"([Landroid/content/Intent;)V");
+
+ /// from: public void startActivities(android.content.Intent[] intents)
+ void startActivities(
+ jni.JArray intents,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_startActivities,
+ jni.JniCallType.voidType, [intents.reference]).check();
+ }
+
+ static final _id_startActivities1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"startActivities",
+ r"([Landroid/content/Intent;Landroid/os/Bundle;)V");
+
+ /// from: public void startActivities(android.content.Intent[] intents, android.os.Bundle bundle)
+ void startActivities1(
+ jni.JArray intents,
+ jni.JObject bundle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_startActivities1,
+ jni.JniCallType.voidType,
+ [intents.reference, bundle.reference]).check();
+ }
+
+ static final _id_startIntentSender = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"startIntentSender",
+ r"(Landroid/content/IntentSender;Landroid/content/Intent;III)V");
+
+ /// from: public void startIntentSender(android.content.IntentSender intentSender, android.content.Intent intent, int i, int i1, int i2)
+ void startIntentSender(
+ jni.JObject intentSender,
+ jni.JObject intent,
+ int i,
+ int i1,
+ int i2,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_startIntentSender, jni.JniCallType.voidType, [
+ intentSender.reference,
+ intent.reference,
+ jni.JValueInt(i),
+ jni.JValueInt(i1),
+ jni.JValueInt(i2)
+ ]).check();
+ }
+
+ static final _id_startIntentSender1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"startIntentSender",
+ r"(Landroid/content/IntentSender;Landroid/content/Intent;IIILandroid/os/Bundle;)V");
+
+ /// 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,
+ jni.JObject intent,
+ int i,
+ int i1,
+ int i2,
+ jni.JObject bundle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_startIntentSender1, jni.JniCallType.voidType, [
+ intentSender.reference,
+ intent.reference,
+ jni.JValueInt(i),
+ jni.JValueInt(i1),
+ jni.JValueInt(i2),
+ bundle.reference
+ ]).check();
+ }
+
+ static final _id_startActivityIfNeeded = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"startActivityIfNeeded",
+ r"(Landroid/content/Intent;I)Z");
+
+ /// from: public boolean startActivityIfNeeded(android.content.Intent intent, int i)
+ bool startActivityIfNeeded(
+ jni.JObject intent,
+ int i,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_startActivityIfNeeded,
+ jni.JniCallType.booleanType,
+ [intent.reference, jni.JValueInt(i)]).boolean;
+ }
+
+ static final _id_startActivityIfNeeded1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"startActivityIfNeeded",
+ r"(Landroid/content/Intent;ILandroid/os/Bundle;)Z");
+
+ /// from: public boolean startActivityIfNeeded(android.content.Intent intent, int i, android.os.Bundle bundle)
+ bool startActivityIfNeeded1(
+ jni.JObject intent,
+ int i,
+ jni.JObject bundle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_startActivityIfNeeded1,
+ jni.JniCallType.booleanType,
+ [intent.reference, jni.JValueInt(i), bundle.reference]).boolean;
+ }
+
+ static final _id_startNextMatchingActivity = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"startNextMatchingActivity",
+ r"(Landroid/content/Intent;)Z");
+
+ /// from: public boolean startNextMatchingActivity(android.content.Intent intent)
+ bool startNextMatchingActivity(
+ jni.JObject intent,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_startNextMatchingActivity,
+ jni.JniCallType.booleanType,
+ [intent.reference]).boolean;
+ }
+
+ static final _id_startNextMatchingActivity1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"startNextMatchingActivity",
+ r"(Landroid/content/Intent;Landroid/os/Bundle;)Z");
+
+ /// from: public boolean startNextMatchingActivity(android.content.Intent intent, android.os.Bundle bundle)
+ bool startNextMatchingActivity1(
+ jni.JObject intent,
+ jni.JObject bundle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_startNextMatchingActivity1,
+ jni.JniCallType.booleanType,
+ [intent.reference, bundle.reference]).boolean;
+ }
+
+ static final _id_startActivityFromChild = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"startActivityFromChild",
+ r"(Landroid/app/Activity;Landroid/content/Intent;I)V");
+
+ /// from: public void startActivityFromChild(android.app.Activity activity, android.content.Intent intent, int i)
+ void startActivityFromChild(
+ Activity activity,
+ jni.JObject intent,
+ int i,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_startActivityFromChild,
+ jni.JniCallType.voidType,
+ [activity.reference, intent.reference, jni.JValueInt(i)]).check();
+ }
+
+ static final _id_startActivityFromChild1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"startActivityFromChild",
+ r"(Landroid/app/Activity;Landroid/content/Intent;ILandroid/os/Bundle;)V");
+
+ /// from: public void startActivityFromChild(android.app.Activity activity, android.content.Intent intent, int i, android.os.Bundle bundle)
+ void startActivityFromChild1(
+ Activity activity,
+ jni.JObject intent,
+ int i,
+ jni.JObject bundle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_startActivityFromChild1, jni.JniCallType.voidType, [
+ activity.reference,
+ intent.reference,
+ jni.JValueInt(i),
+ bundle.reference
+ ]).check();
+ }
+
+ static final _id_startActivityFromFragment = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"startActivityFromFragment",
+ r"(Landroid/app/Fragment;Landroid/content/Intent;I)V");
+
+ /// from: public void startActivityFromFragment(android.app.Fragment fragment, android.content.Intent intent, int i)
+ void startActivityFromFragment(
+ jni.JObject fragment,
+ jni.JObject intent,
+ int i,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_startActivityFromFragment,
+ jni.JniCallType.voidType,
+ [fragment.reference, intent.reference, jni.JValueInt(i)]).check();
+ }
+
+ static final _id_startActivityFromFragment1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"startActivityFromFragment",
+ r"(Landroid/app/Fragment;Landroid/content/Intent;ILandroid/os/Bundle;)V");
+
+ /// from: public void startActivityFromFragment(android.app.Fragment fragment, android.content.Intent intent, int i, android.os.Bundle bundle)
+ void startActivityFromFragment1(
+ jni.JObject fragment,
+ jni.JObject intent,
+ int i,
+ jni.JObject bundle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_startActivityFromFragment1, jni.JniCallType.voidType, [
+ fragment.reference,
+ intent.reference,
+ jni.JValueInt(i),
+ bundle.reference
+ ]).check();
+ }
+
+ static final _id_startIntentSenderFromChild = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"startIntentSenderFromChild",
+ r"(Landroid/app/Activity;Landroid/content/IntentSender;ILandroid/content/Intent;III)V");
+
+ /// 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,
+ jni.JObject intent,
+ int i1,
+ int i2,
+ int i3,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_startIntentSenderFromChild, jni.JniCallType.voidType, [
+ activity.reference,
+ intentSender.reference,
+ jni.JValueInt(i),
+ intent.reference,
+ jni.JValueInt(i1),
+ jni.JValueInt(i2),
+ jni.JValueInt(i3)
+ ]).check();
+ }
+
+ static final _id_startIntentSenderFromChild1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"startIntentSenderFromChild",
+ r"(Landroid/app/Activity;Landroid/content/IntentSender;ILandroid/content/Intent;IIILandroid/os/Bundle;)V");
+
+ /// 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,
+ jni.JObject intent,
+ int i1,
+ int i2,
+ int i3,
+ jni.JObject bundle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_startIntentSenderFromChild1, jni.JniCallType.voidType, [
+ activity.reference,
+ intentSender.reference,
+ jni.JValueInt(i),
+ intent.reference,
+ jni.JValueInt(i1),
+ jni.JValueInt(i2),
+ jni.JValueInt(i3),
+ bundle.reference
+ ]).check();
+ }
+
+ static final _id_overrideActivityTransition = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"overrideActivityTransition", r"(III)V");
+
+ /// from: public void overrideActivityTransition(int i, int i1, int i2)
+ void overrideActivityTransition(
+ int i,
+ int i1,
+ int i2,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_overrideActivityTransition,
+ jni.JniCallType.voidType,
+ [jni.JValueInt(i), jni.JValueInt(i1), jni.JValueInt(i2)]).check();
+ }
+
+ static final _id_overrideActivityTransition1 = jni.Jni.accessors
+ .getMethodIDOf(
+ _class.reference, r"overrideActivityTransition", r"(IIII)V");
+
+ /// from: public void overrideActivityTransition(int i, int i1, int i2, int i3)
+ void overrideActivityTransition1(
+ int i,
+ int i1,
+ int i2,
+ int i3,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_overrideActivityTransition1, jni.JniCallType.voidType, [
+ jni.JValueInt(i),
+ jni.JValueInt(i1),
+ jni.JValueInt(i2),
+ jni.JValueInt(i3)
+ ]).check();
+ }
+
+ static final _id_clearOverrideActivityTransition = jni.Jni.accessors
+ .getMethodIDOf(
+ _class.reference, r"clearOverrideActivityTransition", r"(I)V");
+
+ /// from: public void clearOverrideActivityTransition(int i)
+ void clearOverrideActivityTransition(
+ int i,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_clearOverrideActivityTransition,
+ jni.JniCallType.voidType,
+ [jni.JValueInt(i)]).check();
+ }
+
+ static final _id_overridePendingTransition = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"overridePendingTransition", r"(II)V");
+
+ /// from: public void overridePendingTransition(int i, int i1)
+ void overridePendingTransition(
+ int i,
+ int i1,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_overridePendingTransition,
+ jni.JniCallType.voidType,
+ [jni.JValueInt(i), jni.JValueInt(i1)]).check();
+ }
+
+ static final _id_overridePendingTransition1 = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"overridePendingTransition", r"(III)V");
+
+ /// from: public void overridePendingTransition(int i, int i1, int i2)
+ void overridePendingTransition1(
+ int i,
+ int i1,
+ int i2,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_overridePendingTransition1,
+ jni.JniCallType.voidType,
+ [jni.JValueInt(i), jni.JValueInt(i1), jni.JValueInt(i2)]).check();
+ }
+
+ static final _id_setResult =
+ jni.Jni.accessors.getMethodIDOf(_class.reference, r"setResult", r"(I)V");
+
+ /// from: public final void setResult(int i)
+ void setResult(
+ int i,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_setResult,
+ jni.JniCallType.voidType, [jni.JValueInt(i)]).check();
+ }
+
+ static final _id_setResult1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"setResult", r"(ILandroid/content/Intent;)V");
+
+ /// from: public final void setResult(int i, android.content.Intent intent)
+ void setResult1(
+ int i,
+ jni.JObject intent,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_setResult1,
+ jni.JniCallType.voidType, [jni.JValueInt(i), intent.reference]).check();
+ }
+
+ static final _id_getReferrer = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"getReferrer", r"()Landroid/net/Uri;");
+
+ /// from: public android.net.Uri getReferrer()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getReferrer() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_getReferrer, jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_onProvideReferrer = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"onProvideReferrer", r"()Landroid/net/Uri;");
+
+ /// from: public android.net.Uri onProvideReferrer()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject onProvideReferrer() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onProvideReferrer,
+ jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getCallingPackage = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"getCallingPackage", r"()Ljava/lang/String;");
+
+ /// from: public java.lang.String getCallingPackage()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JString getCallingPackage() {
+ return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getCallingPackage,
+ jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getCallingActivity = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"getCallingActivity",
+ r"()Landroid/content/ComponentName;");
+
+ /// from: public android.content.ComponentName getCallingActivity()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getCallingActivity() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getCallingActivity,
+ jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getLaunchedFromUid = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"getLaunchedFromUid", r"()I");
+
+ /// from: public int getLaunchedFromUid()
+ int getLaunchedFromUid() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_getLaunchedFromUid, jni.JniCallType.intType, []).integer;
+ }
+
+ static final _id_getLaunchedFromPackage = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"getLaunchedFromPackage", r"()Ljava/lang/String;");
+
+ /// from: public java.lang.String getLaunchedFromPackage()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JString getLaunchedFromPackage() {
+ return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getLaunchedFromPackage,
+ jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_setVisible =
+ jni.Jni.accessors.getMethodIDOf(_class.reference, r"setVisible", r"(Z)V");
+
+ /// from: public void setVisible(boolean z)
+ void setVisible(
+ bool z,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_setVisible,
+ jni.JniCallType.voidType, [z ? 1 : 0]).check();
+ }
+
+ static final _id_isFinishing =
+ jni.Jni.accessors.getMethodIDOf(_class.reference, r"isFinishing", r"()Z");
+
+ /// from: public boolean isFinishing()
+ bool isFinishing() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_isFinishing, jni.JniCallType.booleanType, []).boolean;
+ }
+
+ static final _id_isDestroyed =
+ jni.Jni.accessors.getMethodIDOf(_class.reference, r"isDestroyed", r"()Z");
+
+ /// from: public boolean isDestroyed()
+ bool isDestroyed() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_isDestroyed, jni.JniCallType.booleanType, []).boolean;
+ }
+
+ static final _id_isChangingConfigurations = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"isChangingConfigurations", r"()Z");
+
+ /// from: public boolean isChangingConfigurations()
+ bool isChangingConfigurations() {
+ return jni.Jni.accessors.callMethodWithArgs(reference,
+ _id_isChangingConfigurations, jni.JniCallType.booleanType, []).boolean;
+ }
+
+ static final _id_recreate =
+ jni.Jni.accessors.getMethodIDOf(_class.reference, r"recreate", r"()V");
+
+ /// from: public void recreate()
+ void recreate() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_recreate, jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_finish =
+ jni.Jni.accessors.getMethodIDOf(_class.reference, r"finish", r"()V");
+
+ /// from: public void finish()
+ void finish() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_finish, jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_finishAffinity = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"finishAffinity", r"()V");
+
+ /// from: public void finishAffinity()
+ void finishAffinity() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_finishAffinity, jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_finishFromChild = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"finishFromChild", r"(Landroid/app/Activity;)V");
+
+ /// from: public void finishFromChild(android.app.Activity activity)
+ void finishFromChild(
+ Activity activity,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_finishFromChild,
+ jni.JniCallType.voidType, [activity.reference]).check();
+ }
+
+ static final _id_finishAfterTransition = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"finishAfterTransition", r"()V");
+
+ /// from: public void finishAfterTransition()
+ void finishAfterTransition() {
+ return jni.Jni.accessors.callMethodWithArgs(reference,
+ _id_finishAfterTransition, jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_finishActivity = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"finishActivity", r"(I)V");
+
+ /// from: public void finishActivity(int i)
+ void finishActivity(
+ int i,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_finishActivity,
+ jni.JniCallType.voidType, [jni.JValueInt(i)]).check();
+ }
+
+ static final _id_finishActivityFromChild = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"finishActivityFromChild",
+ r"(Landroid/app/Activity;I)V");
+
+ /// from: public void finishActivityFromChild(android.app.Activity activity, int i)
+ void finishActivityFromChild(
+ Activity activity,
+ int i,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_finishActivityFromChild,
+ jni.JniCallType.voidType,
+ [activity.reference, jni.JValueInt(i)]).check();
+ }
+
+ static final _id_finishAndRemoveTask = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"finishAndRemoveTask", r"()V");
+
+ /// from: public void finishAndRemoveTask()
+ void finishAndRemoveTask() {
+ return jni.Jni.accessors.callMethodWithArgs(reference,
+ _id_finishAndRemoveTask, jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_releaseInstance = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"releaseInstance", r"()Z");
+
+ /// from: public boolean releaseInstance()
+ bool releaseInstance() {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_releaseInstance,
+ jni.JniCallType.booleanType, []).boolean;
+ }
+
+ static final _id_onActivityResult = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"onActivityResult", r"(IILandroid/content/Intent;)V");
+
+ /// from: protected void onActivityResult(int i, int i1, android.content.Intent intent)
+ void onActivityResult(
+ int i,
+ int i1,
+ jni.JObject intent,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onActivityResult,
+ jni.JniCallType.voidType,
+ [jni.JValueInt(i), jni.JValueInt(i1), intent.reference]).check();
+ }
+
+ static final _id_onActivityReenter = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"onActivityReenter", r"(ILandroid/content/Intent;)V");
+
+ /// from: public void onActivityReenter(int i, android.content.Intent intent)
+ void onActivityReenter(
+ int i,
+ jni.JObject intent,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onActivityReenter,
+ jni.JniCallType.voidType,
+ [jni.JValueInt(i), intent.reference]).check();
+ }
+
+ static final _id_createPendingResult = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"createPendingResult",
+ r"(ILandroid/content/Intent;I)Landroid/app/PendingIntent;");
+
+ /// from: public android.app.PendingIntent createPendingResult(int i, android.content.Intent intent, int i1)
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject createPendingResult(
+ int i,
+ jni.JObject intent,
+ int i1,
+ ) {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_createPendingResult,
+ jni.JniCallType.objectType,
+ [jni.JValueInt(i), intent.reference, jni.JValueInt(i1)]).object);
+ }
+
+ static final _id_setRequestedOrientation = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"setRequestedOrientation", r"(I)V");
+
+ /// from: public void setRequestedOrientation(int i)
+ void setRequestedOrientation(
+ int i,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_setRequestedOrientation,
+ jni.JniCallType.voidType,
+ [jni.JValueInt(i)]).check();
+ }
+
+ static final _id_getRequestedOrientation = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"getRequestedOrientation", r"()I");
+
+ /// from: public int getRequestedOrientation()
+ int getRequestedOrientation() {
+ return jni.Jni.accessors.callMethodWithArgs(reference,
+ _id_getRequestedOrientation, jni.JniCallType.intType, []).integer;
+ }
+
+ static final _id_getTaskId =
+ jni.Jni.accessors.getMethodIDOf(_class.reference, r"getTaskId", r"()I");
+
+ /// from: public int getTaskId()
+ int getTaskId() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_getTaskId, jni.JniCallType.intType, []).integer;
+ }
+
+ static final _id_isTaskRoot =
+ jni.Jni.accessors.getMethodIDOf(_class.reference, r"isTaskRoot", r"()Z");
+
+ /// from: public boolean isTaskRoot()
+ bool isTaskRoot() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_isTaskRoot, jni.JniCallType.booleanType, []).boolean;
+ }
+
+ static final _id_moveTaskToBack = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"moveTaskToBack", r"(Z)Z");
+
+ /// from: public boolean moveTaskToBack(boolean z)
+ bool moveTaskToBack(
+ bool z,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_moveTaskToBack,
+ jni.JniCallType.booleanType, [z ? 1 : 0]).boolean;
+ }
+
+ static final _id_getLocalClassName = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"getLocalClassName", r"()Ljava/lang/String;");
+
+ /// from: public java.lang.String getLocalClassName()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JString getLocalClassName() {
+ return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getLocalClassName,
+ jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getComponentName = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"getComponentName",
+ r"()Landroid/content/ComponentName;");
+
+ /// from: public android.content.ComponentName getComponentName()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getComponentName() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getComponentName,
+ jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getPreferences = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"getPreferences",
+ r"(I)Landroid/content/SharedPreferences;");
+
+ /// from: public android.content.SharedPreferences getPreferences(int i)
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getPreferences(
+ int i,
+ ) {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getPreferences,
+ jni.JniCallType.objectType,
+ [jni.JValueInt(i)]).object);
+ }
+
+ static final _id_isLaunchedFromBubble = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"isLaunchedFromBubble", r"()Z");
+
+ /// from: public boolean isLaunchedFromBubble()
+ bool isLaunchedFromBubble() {
+ return jni.Jni.accessors.callMethodWithArgs(reference,
+ _id_isLaunchedFromBubble, jni.JniCallType.booleanType, []).boolean;
+ }
+
+ static final _id_getSystemService = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"getSystemService",
+ r"(Ljava/lang/String;)Ljava/lang/Object;");
+
+ /// from: public java.lang.Object getSystemService(java.lang.String string)
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getSystemService(
+ jni.JString string,
+ ) {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getSystemService,
+ jni.JniCallType.objectType,
+ [string.reference]).object);
+ }
+
+ static final _id_setTitle = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"setTitle", r"(Ljava/lang/CharSequence;)V");
+
+ /// from: public void setTitle(java.lang.CharSequence charSequence)
+ void setTitle(
+ jni.JObject charSequence,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_setTitle,
+ jni.JniCallType.voidType, [charSequence.reference]).check();
+ }
+
+ static final _id_setTitle1 =
+ jni.Jni.accessors.getMethodIDOf(_class.reference, r"setTitle", r"(I)V");
+
+ /// from: public void setTitle(int i)
+ void setTitle1(
+ int i,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_setTitle1,
+ jni.JniCallType.voidType, [jni.JValueInt(i)]).check();
+ }
+
+ static final _id_setTitleColor = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"setTitleColor", r"(I)V");
+
+ /// from: public void setTitleColor(int i)
+ void setTitleColor(
+ int i,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_setTitleColor,
+ jni.JniCallType.voidType, [jni.JValueInt(i)]).check();
+ }
+
+ static final _id_getTitle = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"getTitle", r"()Ljava/lang/CharSequence;");
+
+ /// from: public final java.lang.CharSequence getTitle()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getTitle() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_getTitle, jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getTitleColor = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"getTitleColor", r"()I");
+
+ /// from: public final int getTitleColor()
+ int getTitleColor() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_getTitleColor, jni.JniCallType.intType, []).integer;
+ }
+
+ static final _id_onTitleChanged = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"onTitleChanged", r"(Ljava/lang/CharSequence;I)V");
+
+ /// from: protected void onTitleChanged(java.lang.CharSequence charSequence, int i)
+ void onTitleChanged(
+ jni.JObject charSequence,
+ int i,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onTitleChanged,
+ jni.JniCallType.voidType,
+ [charSequence.reference, jni.JValueInt(i)]).check();
+ }
+
+ static final _id_onChildTitleChanged = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"onChildTitleChanged",
+ r"(Landroid/app/Activity;Ljava/lang/CharSequence;)V");
+
+ /// from: protected void onChildTitleChanged(android.app.Activity activity, java.lang.CharSequence charSequence)
+ void onChildTitleChanged(
+ Activity activity,
+ jni.JObject charSequence,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onChildTitleChanged,
+ jni.JniCallType.voidType,
+ [activity.reference, charSequence.reference]).check();
+ }
+
+ static final _id_setTaskDescription = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"setTaskDescription",
+ r"(Landroid/app/ActivityManager$TaskDescription;)V");
+
+ /// from: public void setTaskDescription(android.app.ActivityManager$TaskDescription taskDescription)
+ void setTaskDescription(
+ jni.JObject taskDescription,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_setTaskDescription,
+ jni.JniCallType.voidType,
+ [taskDescription.reference]).check();
+ }
+
+ static final _id_setProgressBarVisibility = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"setProgressBarVisibility", r"(Z)V");
+
+ /// from: public final void setProgressBarVisibility(boolean z)
+ void setProgressBarVisibility(
+ bool z,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_setProgressBarVisibility,
+ jni.JniCallType.voidType,
+ [z ? 1 : 0]).check();
+ }
+
+ static final _id_setProgressBarIndeterminateVisibility = jni.Jni.accessors
+ .getMethodIDOf(
+ _class.reference, r"setProgressBarIndeterminateVisibility", r"(Z)V");
+
+ /// from: public final void setProgressBarIndeterminateVisibility(boolean z)
+ void setProgressBarIndeterminateVisibility(
+ bool z,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_setProgressBarIndeterminateVisibility,
+ jni.JniCallType.voidType,
+ [z ? 1 : 0]).check();
+ }
+
+ static final _id_setProgressBarIndeterminate = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"setProgressBarIndeterminate", r"(Z)V");
+
+ /// from: public final void setProgressBarIndeterminate(boolean z)
+ void setProgressBarIndeterminate(
+ bool z,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_setProgressBarIndeterminate,
+ jni.JniCallType.voidType,
+ [z ? 1 : 0]).check();
+ }
+
+ static final _id_setProgress = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"setProgress", r"(I)V");
+
+ /// from: public final void setProgress(int i)
+ void setProgress(
+ int i,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_setProgress,
+ jni.JniCallType.voidType, [jni.JValueInt(i)]).check();
+ }
+
+ static final _id_setSecondaryProgress = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"setSecondaryProgress", r"(I)V");
+
+ /// from: public final void setSecondaryProgress(int i)
+ void setSecondaryProgress(
+ int i,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_setSecondaryProgress,
+ jni.JniCallType.voidType,
+ [jni.JValueInt(i)]).check();
+ }
+
+ static final _id_setVolumeControlStream = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"setVolumeControlStream", r"(I)V");
+
+ /// from: public final void setVolumeControlStream(int i)
+ void setVolumeControlStream(
+ int i,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_setVolumeControlStream,
+ jni.JniCallType.voidType,
+ [jni.JValueInt(i)]).check();
+ }
+
+ static final _id_getVolumeControlStream = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"getVolumeControlStream", r"()I");
+
+ /// from: public final int getVolumeControlStream()
+ int getVolumeControlStream() {
+ return jni.Jni.accessors.callMethodWithArgs(reference,
+ _id_getVolumeControlStream, jni.JniCallType.intType, []).integer;
+ }
+
+ static final _id_setMediaController = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"setMediaController",
+ r"(Landroid/media/session/MediaController;)V");
+
+ /// from: public final void setMediaController(android.media.session.MediaController mediaController)
+ void setMediaController(
+ jni.JObject mediaController,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_setMediaController,
+ jni.JniCallType.voidType,
+ [mediaController.reference]).check();
+ }
+
+ static final _id_getMediaController = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"getMediaController",
+ r"()Landroid/media/session/MediaController;");
+
+ /// from: public final android.media.session.MediaController getMediaController()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getMediaController() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getMediaController,
+ jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_runOnUiThread = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"runOnUiThread", r"(Ljava/lang/Runnable;)V");
+
+ /// from: public final void runOnUiThread(java.lang.Runnable runnable)
+ void runOnUiThread(
+ jni.JObject runnable,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_runOnUiThread,
+ jni.JniCallType.voidType, [runnable.reference]).check();
+ }
+
+ static final _id_onCreateView = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"onCreateView",
+ r"(Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;");
+
+ /// from: public android.view.View onCreateView(java.lang.String string, android.content.Context context, android.util.AttributeSet attributeSet)
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject onCreateView(
+ jni.JString string,
+ Context context,
+ jni.JObject attributeSet,
+ ) {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onCreateView,
+ jni.JniCallType.objectType,
+ [string.reference, context.reference, attributeSet.reference]).object);
+ }
+
+ static final _id_onCreateView1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"onCreateView",
+ r"(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View;");
+
+ /// 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 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(jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_onCreateView1, jni.JniCallType.objectType, [
+ view.reference,
+ string.reference,
+ context.reference,
+ attributeSet.reference
+ ]).object);
+ }
+
+ static final _id_dump = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"dump",
+ r"(Ljava/lang/String;Ljava/io/FileDescriptor;Ljava/io/PrintWriter;[Ljava/lang/String;)V");
+
+ /// 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,
+ ) {
+ return jni.Jni.accessors
+ .callMethodWithArgs(reference, _id_dump, jni.JniCallType.voidType, [
+ string.reference,
+ fileDescriptor.reference,
+ printWriter.reference,
+ strings.reference
+ ]).check();
+ }
+
+ static final _id_isImmersive =
+ jni.Jni.accessors.getMethodIDOf(_class.reference, r"isImmersive", r"()Z");
+
+ /// from: public boolean isImmersive()
+ bool isImmersive() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_isImmersive, jni.JniCallType.booleanType, []).boolean;
+ }
+
+ static final _id_setTranslucent = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"setTranslucent", r"(Z)Z");
+
+ /// from: public boolean setTranslucent(boolean z)
+ bool setTranslucent(
+ bool z,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_setTranslucent,
+ jni.JniCallType.booleanType, [z ? 1 : 0]).boolean;
+ }
+
+ static final _id_requestVisibleBehind = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"requestVisibleBehind", r"(Z)Z");
+
+ /// from: public boolean requestVisibleBehind(boolean z)
+ bool requestVisibleBehind(
+ bool z,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_requestVisibleBehind,
+ jni.JniCallType.booleanType,
+ [z ? 1 : 0]).boolean;
+ }
+
+ static final _id_onVisibleBehindCanceled = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"onVisibleBehindCanceled", r"()V");
+
+ /// from: public void onVisibleBehindCanceled()
+ void onVisibleBehindCanceled() {
+ return jni.Jni.accessors.callMethodWithArgs(reference,
+ _id_onVisibleBehindCanceled, jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_onEnterAnimationComplete = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"onEnterAnimationComplete", r"()V");
+
+ /// from: public void onEnterAnimationComplete()
+ void onEnterAnimationComplete() {
+ return jni.Jni.accessors.callMethodWithArgs(reference,
+ _id_onEnterAnimationComplete, jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_setImmersive = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"setImmersive", r"(Z)V");
+
+ /// from: public void setImmersive(boolean z)
+ void setImmersive(
+ bool z,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_setImmersive,
+ jni.JniCallType.voidType, [z ? 1 : 0]).check();
+ }
+
+ static final _id_setVrModeEnabled = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"setVrModeEnabled",
+ r"(ZLandroid/content/ComponentName;)V");
+
+ /// from: public void setVrModeEnabled(boolean z, android.content.ComponentName componentName)
+ void setVrModeEnabled(
+ bool z,
+ jni.JObject componentName,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_setVrModeEnabled,
+ jni.JniCallType.voidType, [z ? 1 : 0, componentName.reference]).check();
+ }
+
+ static final _id_startActionMode = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"startActionMode",
+ r"(Landroid/view/ActionMode$Callback;)Landroid/view/ActionMode;");
+
+ /// from: public android.view.ActionMode startActionMode(android.view.ActionMode$Callback callback)
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject startActionMode(
+ jni.JObject callback,
+ ) {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_startActionMode,
+ jni.JniCallType.objectType,
+ [callback.reference]).object);
+ }
+
+ static final _id_startActionMode1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"startActionMode",
+ r"(Landroid/view/ActionMode$Callback;I)Landroid/view/ActionMode;");
+
+ /// from: public android.view.ActionMode startActionMode(android.view.ActionMode$Callback callback, int i)
+ /// 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(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_startActionMode1,
+ jni.JniCallType.objectType,
+ [callback.reference, jni.JValueInt(i)]).object);
+ }
+
+ static final _id_onWindowStartingActionMode = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"onWindowStartingActionMode",
+ r"(Landroid/view/ActionMode$Callback;)Landroid/view/ActionMode;");
+
+ /// from: public android.view.ActionMode onWindowStartingActionMode(android.view.ActionMode$Callback callback)
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject onWindowStartingActionMode(
+ jni.JObject callback,
+ ) {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onWindowStartingActionMode,
+ jni.JniCallType.objectType,
+ [callback.reference]).object);
+ }
+
+ static final _id_onWindowStartingActionMode1 = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"onWindowStartingActionMode",
+ r"(Landroid/view/ActionMode$Callback;I)Landroid/view/ActionMode;");
+
+ /// from: public android.view.ActionMode onWindowStartingActionMode(android.view.ActionMode$Callback callback, int i)
+ /// 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(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onWindowStartingActionMode1,
+ jni.JniCallType.objectType,
+ [callback.reference, jni.JValueInt(i)]).object);
+ }
+
+ static final _id_onActionModeStarted = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"onActionModeStarted",
+ r"(Landroid/view/ActionMode;)V");
+
+ /// from: public void onActionModeStarted(android.view.ActionMode actionMode)
+ void onActionModeStarted(
+ jni.JObject actionMode,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onActionModeStarted,
+ jni.JniCallType.voidType,
+ [actionMode.reference]).check();
+ }
+
+ static final _id_onActionModeFinished = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"onActionModeFinished",
+ r"(Landroid/view/ActionMode;)V");
+
+ /// from: public void onActionModeFinished(android.view.ActionMode actionMode)
+ void onActionModeFinished(
+ jni.JObject actionMode,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_onActionModeFinished,
+ jni.JniCallType.voidType,
+ [actionMode.reference]).check();
+ }
+
+ static final _id_shouldUpRecreateTask = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"shouldUpRecreateTask",
+ r"(Landroid/content/Intent;)Z");
+
+ /// from: public boolean shouldUpRecreateTask(android.content.Intent intent)
+ bool shouldUpRecreateTask(
+ jni.JObject intent,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_shouldUpRecreateTask,
+ jni.JniCallType.booleanType,
+ [intent.reference]).boolean;
+ }
+
+ static final _id_navigateUpTo = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"navigateUpTo", r"(Landroid/content/Intent;)Z");
+
+ /// from: public boolean navigateUpTo(android.content.Intent intent)
+ bool navigateUpTo(
+ jni.JObject intent,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_navigateUpTo,
+ jni.JniCallType.booleanType, [intent.reference]).boolean;
+ }
+
+ static final _id_navigateUpToFromChild = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"navigateUpToFromChild",
+ r"(Landroid/app/Activity;Landroid/content/Intent;)Z");
+
+ /// from: public boolean navigateUpToFromChild(android.app.Activity activity, android.content.Intent intent)
+ bool navigateUpToFromChild(
+ Activity activity,
+ jni.JObject intent,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_navigateUpToFromChild,
+ jni.JniCallType.booleanType,
+ [activity.reference, intent.reference]).boolean;
+ }
+
+ static final _id_getParentActivityIntent = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"getParentActivityIntent",
+ r"()Landroid/content/Intent;");
+
+ /// from: public android.content.Intent getParentActivityIntent()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getParentActivityIntent() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getParentActivityIntent,
+ jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_setEnterSharedElementCallback = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"setEnterSharedElementCallback",
+ r"(Landroid/app/SharedElementCallback;)V");
+
+ /// from: public void setEnterSharedElementCallback(android.app.SharedElementCallback sharedElementCallback)
+ void setEnterSharedElementCallback(
+ jni.JObject sharedElementCallback,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_setEnterSharedElementCallback,
+ jni.JniCallType.voidType,
+ [sharedElementCallback.reference]).check();
+ }
+
+ static final _id_setExitSharedElementCallback = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"setExitSharedElementCallback",
+ r"(Landroid/app/SharedElementCallback;)V");
+
+ /// from: public void setExitSharedElementCallback(android.app.SharedElementCallback sharedElementCallback)
+ void setExitSharedElementCallback(
+ jni.JObject sharedElementCallback,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_setExitSharedElementCallback,
+ jni.JniCallType.voidType,
+ [sharedElementCallback.reference]).check();
+ }
+
+ static final _id_postponeEnterTransition = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"postponeEnterTransition", r"()V");
+
+ /// from: public void postponeEnterTransition()
+ void postponeEnterTransition() {
+ return jni.Jni.accessors.callMethodWithArgs(reference,
+ _id_postponeEnterTransition, jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_startPostponedEnterTransition = jni.Jni.accessors
+ .getMethodIDOf(
+ _class.reference, r"startPostponedEnterTransition", r"()V");
+
+ /// from: public void startPostponedEnterTransition()
+ void startPostponedEnterTransition() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_startPostponedEnterTransition,
+ jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_requestDragAndDropPermissions = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"requestDragAndDropPermissions",
+ r"(Landroid/view/DragEvent;)Landroid/view/DragAndDropPermissions;");
+
+ /// from: public android.view.DragAndDropPermissions requestDragAndDropPermissions(android.view.DragEvent dragEvent)
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject requestDragAndDropPermissions(
+ jni.JObject dragEvent,
+ ) {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_requestDragAndDropPermissions,
+ jni.JniCallType.objectType,
+ [dragEvent.reference]).object);
+ }
+
+ static final _id_startLockTask = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"startLockTask", r"()V");
+
+ /// from: public void startLockTask()
+ void startLockTask() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_startLockTask, jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_stopLockTask = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"stopLockTask", r"()V");
+
+ /// from: public void stopLockTask()
+ void stopLockTask() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_stopLockTask, jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_showLockTaskEscapeMessage = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"showLockTaskEscapeMessage", r"()V");
+
+ /// from: public void showLockTaskEscapeMessage()
+ void showLockTaskEscapeMessage() {
+ return jni.Jni.accessors.callMethodWithArgs(reference,
+ _id_showLockTaskEscapeMessage, jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_setRecentsScreenshotEnabled = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"setRecentsScreenshotEnabled", r"(Z)V");
+
+ /// from: public void setRecentsScreenshotEnabled(boolean z)
+ void setRecentsScreenshotEnabled(
+ bool z,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_setRecentsScreenshotEnabled,
+ jni.JniCallType.voidType,
+ [z ? 1 : 0]).check();
+ }
+
+ static final _id_setShowWhenLocked = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"setShowWhenLocked", r"(Z)V");
+
+ /// from: public void setShowWhenLocked(boolean z)
+ void setShowWhenLocked(
+ bool z,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference,
+ _id_setShowWhenLocked, jni.JniCallType.voidType, [z ? 1 : 0]).check();
+ }
+
+ static final _id_setInheritShowWhenLocked = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"setInheritShowWhenLocked", r"(Z)V");
+
+ /// from: public void setInheritShowWhenLocked(boolean z)
+ void setInheritShowWhenLocked(
+ bool z,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_setInheritShowWhenLocked,
+ jni.JniCallType.voidType,
+ [z ? 1 : 0]).check();
+ }
+
+ static final _id_setTurnScreenOn = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"setTurnScreenOn", r"(Z)V");
+
+ /// from: public void setTurnScreenOn(boolean z)
+ void setTurnScreenOn(
+ bool z,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_setTurnScreenOn,
+ jni.JniCallType.voidType, [z ? 1 : 0]).check();
+ }
+
+ static final _id_getOnBackInvokedDispatcher = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"getOnBackInvokedDispatcher",
+ r"()Landroid/window/OnBackInvokedDispatcher;");
+
+ /// from: public android.window.OnBackInvokedDispatcher getOnBackInvokedDispatcher()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getOnBackInvokedDispatcher() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getOnBackInvokedDispatcher,
+ jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_registerScreenCaptureCallback = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"registerScreenCaptureCallback",
+ r"(Ljava/util/concurrent/Executor;Landroid/app/Activity$ScreenCaptureCallback;)V");
+
+ /// from: public void registerScreenCaptureCallback(java.util.concurrent.Executor executor, android.app.Activity$ScreenCaptureCallback screenCaptureCallback)
+ void registerScreenCaptureCallback(
+ jni.JObject executor,
+ Activity_ScreenCaptureCallback screenCaptureCallback,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_registerScreenCaptureCallback,
+ jni.JniCallType.voidType,
+ [executor.reference, screenCaptureCallback.reference]).check();
+ }
+
+ static final _id_unregisterScreenCaptureCallback = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"unregisterScreenCaptureCallback",
+ r"(Landroid/app/Activity$ScreenCaptureCallback;)V");
+
+ /// from: public void unregisterScreenCaptureCallback(android.app.Activity$ScreenCaptureCallback screenCaptureCallback)
+ void unregisterScreenCaptureCallback(
+ Activity_ScreenCaptureCallback screenCaptureCallback,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_unregisterScreenCaptureCallback,
+ jni.JniCallType.voidType,
+ [screenCaptureCallback.reference]).check();
+ }
+}
+
+final class $ActivityType extends jni.JObjType {
+ const $ActivityType();
+
+ @override
+ String get signature => r"Landroid/app/Activity;";
+
+ @override
+ Activity fromRef(jni.JObjectPtr ref) => Activity.fromRef(ref);
+
+ @override
+ jni.JObjType get superType => const jni.JObjectType();
+
+ @override
+ final superCount = 1;
+
+ @override
+ int get hashCode => ($ActivityType).hashCode;
+
+ @override
+ bool operator ==(Object other) {
+ return other.runtimeType == ($ActivityType) && other is $ActivityType;
+ }
+}
+
+/// from: android.content.Context$BindServiceFlags
+class Context_BindServiceFlags extends jni.JObject {
+ @override
+ late final jni.JObjType $type = type;
+
+ Context_BindServiceFlags.fromRef(
+ jni.JObjectPtr ref,
+ ) : super.fromRef(ref);
+
+ static final _class =
+ jni.Jni.findJClass(r"android/content/Context$BindServiceFlags");
+
+ /// The type which includes information such as the signature of this class.
+ static const type = $Context_BindServiceFlagsType();
+ static final _id_of = jni.Jni.accessors.getStaticMethodIDOf(_class.reference,
+ r"of", r"(J)Landroid/content/Context$BindServiceFlags;");
+
+ /// from: static public android.content.Context$BindServiceFlags of(long j)
+ /// The returned object must be released after use, by calling the [release] method.
+ static Context_BindServiceFlags of(
+ int j,
+ ) {
+ return const $Context_BindServiceFlagsType().fromRef(jni.Jni.accessors
+ .callStaticMethodWithArgs(
+ _class.reference, _id_of, jni.JniCallType.objectType, [j]).object);
+ }
+}
+
+final class $Context_BindServiceFlagsType
+ extends jni.JObjType {
+ const $Context_BindServiceFlagsType();
+
+ @override
+ String get signature => r"Landroid/content/Context$BindServiceFlags;";
+
+ @override
+ Context_BindServiceFlags fromRef(jni.JObjectPtr ref) =>
+ Context_BindServiceFlags.fromRef(ref);
+
+ @override
+ jni.JObjType get superType => const jni.JObjectType();
+
+ @override
+ final superCount = 1;
+
+ @override
+ int get hashCode => ($Context_BindServiceFlagsType).hashCode;
+
+ @override
+ bool operator ==(Object other) {
+ return other.runtimeType == ($Context_BindServiceFlagsType) &&
+ other is $Context_BindServiceFlagsType;
+ }
+}
+
+/// from: android.content.Context
+class Context extends jni.JObject {
+ @override
+ late final jni.JObjType $type = type;
+
+ Context.fromRef(
+ jni.JObjectPtr ref,
+ ) : super.fromRef(ref);
+
+ static final _class = jni.Jni.findJClass(r"android/content/Context");
+
+ /// 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 = r"""accessibility""";
+
+ /// from: static public final java.lang.String ACCOUNT_SERVICE
+ static const ACCOUNT_SERVICE = r"""account""";
+
+ /// from: static public final java.lang.String ACTIVITY_SERVICE
+ static const ACTIVITY_SERVICE = r"""activity""";
+
+ /// from: static public final java.lang.String ALARM_SERVICE
+ static const ALARM_SERVICE = r"""alarm""";
+
+ /// from: static public final java.lang.String APPWIDGET_SERVICE
+ static const APPWIDGET_SERVICE = r"""appwidget""";
+
+ /// from: static public final java.lang.String APP_OPS_SERVICE
+ static const APP_OPS_SERVICE = r"""appops""";
+
+ /// from: static public final java.lang.String APP_SEARCH_SERVICE
+ static const APP_SEARCH_SERVICE = r"""app_search""";
+
+ /// from: static public final java.lang.String AUDIO_SERVICE
+ static const AUDIO_SERVICE = r"""audio""";
+
+ /// from: static public final java.lang.String BATTERY_SERVICE
+ static const BATTERY_SERVICE = r"""batterymanager""";
+
+ /// from: static public final int BIND_ABOVE_CLIENT
+ static const BIND_ABOVE_CLIENT = 8;
+
+ /// from: static public final int BIND_ADJUST_WITH_ACTIVITY
+ static const BIND_ADJUST_WITH_ACTIVITY = 128;
+
+ /// from: static public final int BIND_ALLOW_ACTIVITY_STARTS
+ static const BIND_ALLOW_ACTIVITY_STARTS = 512;
+
+ /// from: static public final int BIND_ALLOW_OOM_MANAGEMENT
+ static const BIND_ALLOW_OOM_MANAGEMENT = 16;
+
+ /// from: static public final int BIND_AUTO_CREATE
+ static const BIND_AUTO_CREATE = 1;
+
+ /// from: static public final int BIND_DEBUG_UNBIND
+ static const BIND_DEBUG_UNBIND = 2;
+
+ /// from: static public final int BIND_EXTERNAL_SERVICE
+ static const BIND_EXTERNAL_SERVICE = -2147483648;
+
+ /// from: static public final long BIND_EXTERNAL_SERVICE_LONG
+ static const BIND_EXTERNAL_SERVICE_LONG = 4611686018427387904;
+
+ /// from: static public final int BIND_IMPORTANT
+ static const BIND_IMPORTANT = 64;
+
+ /// from: static public final int BIND_INCLUDE_CAPABILITIES
+ static const BIND_INCLUDE_CAPABILITIES = 4096;
+
+ /// from: static public final int BIND_NOT_FOREGROUND
+ static const BIND_NOT_FOREGROUND = 4;
+
+ /// from: static public final int BIND_NOT_PERCEPTIBLE
+ static const BIND_NOT_PERCEPTIBLE = 256;
+
+ /// from: static public final int BIND_SHARED_ISOLATED_PROCESS
+ static const BIND_SHARED_ISOLATED_PROCESS = 8192;
+
+ /// from: static public final int BIND_WAIVE_PRIORITY
+ static const BIND_WAIVE_PRIORITY = 32;
+
+ /// from: static public final java.lang.String BIOMETRIC_SERVICE
+ static const BIOMETRIC_SERVICE = r"""biometric""";
+
+ /// from: static public final java.lang.String BLOB_STORE_SERVICE
+ static const BLOB_STORE_SERVICE = r"""blob_store""";
+
+ /// from: static public final java.lang.String BLUETOOTH_SERVICE
+ static const BLUETOOTH_SERVICE = r"""bluetooth""";
+
+ /// from: static public final java.lang.String BUGREPORT_SERVICE
+ static const BUGREPORT_SERVICE = r"""bugreport""";
+
+ /// from: static public final java.lang.String CAMERA_SERVICE
+ static const CAMERA_SERVICE = r"""camera""";
+
+ /// from: static public final java.lang.String CAPTIONING_SERVICE
+ static const CAPTIONING_SERVICE = r"""captioning""";
+
+ /// from: static public final java.lang.String CARRIER_CONFIG_SERVICE
+ static const CARRIER_CONFIG_SERVICE = r"""carrier_config""";
+
+ /// from: static public final java.lang.String CLIPBOARD_SERVICE
+ static const CLIPBOARD_SERVICE = r"""clipboard""";
+
+ /// from: static public final java.lang.String COMPANION_DEVICE_SERVICE
+ static const COMPANION_DEVICE_SERVICE = r"""companiondevice""";
+
+ /// from: static public final java.lang.String CONNECTIVITY_DIAGNOSTICS_SERVICE
+ static const CONNECTIVITY_DIAGNOSTICS_SERVICE =
+ r"""connectivity_diagnostics""";
+
+ /// from: static public final java.lang.String CONNECTIVITY_SERVICE
+ static const CONNECTIVITY_SERVICE = r"""connectivity""";
+
+ /// from: static public final java.lang.String CONSUMER_IR_SERVICE
+ static const CONSUMER_IR_SERVICE = r"""consumer_ir""";
+
+ /// from: static public final int CONTEXT_IGNORE_SECURITY
+ static const CONTEXT_IGNORE_SECURITY = 2;
+
+ /// from: static public final int CONTEXT_INCLUDE_CODE
+ static const CONTEXT_INCLUDE_CODE = 1;
+
+ /// from: static public final int CONTEXT_RESTRICTED
+ static const CONTEXT_RESTRICTED = 4;
+
+ /// from: static public final java.lang.String CREDENTIAL_SERVICE
+ static const CREDENTIAL_SERVICE = r"""credential""";
+
+ /// from: static public final java.lang.String CROSS_PROFILE_APPS_SERVICE
+ static const CROSS_PROFILE_APPS_SERVICE = r"""crossprofileapps""";
+
+ /// from: static public final int DEVICE_ID_DEFAULT
+ static const DEVICE_ID_DEFAULT = 0;
+
+ /// from: static public final int DEVICE_ID_INVALID
+ static const DEVICE_ID_INVALID = -1;
+
+ /// from: static public final java.lang.String DEVICE_LOCK_SERVICE
+ static const DEVICE_LOCK_SERVICE = r"""device_lock""";
+
+ /// from: static public final java.lang.String DEVICE_POLICY_SERVICE
+ static const DEVICE_POLICY_SERVICE = r"""device_policy""";
+
+ /// from: static public final java.lang.String DISPLAY_HASH_SERVICE
+ static const DISPLAY_HASH_SERVICE = r"""display_hash""";
+
+ /// from: static public final java.lang.String DISPLAY_SERVICE
+ static const DISPLAY_SERVICE = r"""display""";
+
+ /// from: static public final java.lang.String DOMAIN_VERIFICATION_SERVICE
+ static const DOMAIN_VERIFICATION_SERVICE = r"""domain_verification""";
+
+ /// from: static public final java.lang.String DOWNLOAD_SERVICE
+ static const DOWNLOAD_SERVICE = r"""download""";
+
+ /// from: static public final java.lang.String DROPBOX_SERVICE
+ static const DROPBOX_SERVICE = r"""dropbox""";
+
+ /// from: static public final java.lang.String EUICC_SERVICE
+ static const EUICC_SERVICE = r"""euicc""";
+
+ /// from: static public final java.lang.String FILE_INTEGRITY_SERVICE
+ static const FILE_INTEGRITY_SERVICE = r"""file_integrity""";
+
+ /// from: static public final java.lang.String FINGERPRINT_SERVICE
+ static const FINGERPRINT_SERVICE = r"""fingerprint""";
+
+ /// from: static public final java.lang.String GAME_SERVICE
+ static const GAME_SERVICE = r"""game""";
+
+ /// from: static public final java.lang.String GRAMMATICAL_INFLECTION_SERVICE
+ static const GRAMMATICAL_INFLECTION_SERVICE = r"""grammatical_inflection""";
+
+ /// from: static public final java.lang.String HARDWARE_PROPERTIES_SERVICE
+ static const HARDWARE_PROPERTIES_SERVICE = r"""hardware_properties""";
+
+ /// from: static public final java.lang.String HEALTHCONNECT_SERVICE
+ static const HEALTHCONNECT_SERVICE = r"""healthconnect""";
+
+ /// from: static public final java.lang.String INPUT_METHOD_SERVICE
+ static const INPUT_METHOD_SERVICE = r"""input_method""";
+
+ /// from: static public final java.lang.String INPUT_SERVICE
+ static const INPUT_SERVICE = r"""input""";
+
+ /// from: static public final java.lang.String IPSEC_SERVICE
+ static const IPSEC_SERVICE = r"""ipsec""";
+
+ /// from: static public final java.lang.String JOB_SCHEDULER_SERVICE
+ static const JOB_SCHEDULER_SERVICE = r"""jobscheduler""";
+
+ /// from: static public final java.lang.String KEYGUARD_SERVICE
+ static const KEYGUARD_SERVICE = r"""keyguard""";
+
+ /// from: static public final java.lang.String LAUNCHER_APPS_SERVICE
+ static const LAUNCHER_APPS_SERVICE = r"""launcherapps""";
+
+ /// from: static public final java.lang.String LAYOUT_INFLATER_SERVICE
+ static const LAYOUT_INFLATER_SERVICE = r"""layout_inflater""";
+
+ /// from: static public final java.lang.String LOCALE_SERVICE
+ static const LOCALE_SERVICE = r"""locale""";
+
+ /// from: static public final java.lang.String LOCATION_SERVICE
+ static const LOCATION_SERVICE = r"""location""";
+
+ /// from: static public final java.lang.String MEDIA_COMMUNICATION_SERVICE
+ static const MEDIA_COMMUNICATION_SERVICE = r"""media_communication""";
+
+ /// from: static public final java.lang.String MEDIA_METRICS_SERVICE
+ static const MEDIA_METRICS_SERVICE = r"""media_metrics""";
+
+ /// from: static public final java.lang.String MEDIA_PROJECTION_SERVICE
+ static const MEDIA_PROJECTION_SERVICE = r"""media_projection""";
+
+ /// from: static public final java.lang.String MEDIA_ROUTER_SERVICE
+ static const MEDIA_ROUTER_SERVICE = r"""media_router""";
+
+ /// from: static public final java.lang.String MEDIA_SESSION_SERVICE
+ static const MEDIA_SESSION_SERVICE = r"""media_session""";
+
+ /// from: static public final java.lang.String MIDI_SERVICE
+ static const MIDI_SERVICE = r"""midi""";
+
+ /// from: static public final int MODE_APPEND
+ static const MODE_APPEND = 32768;
+
+ /// from: static public final int MODE_ENABLE_WRITE_AHEAD_LOGGING
+ static const MODE_ENABLE_WRITE_AHEAD_LOGGING = 8;
+
+ /// from: static public final int MODE_MULTI_PROCESS
+ static const MODE_MULTI_PROCESS = 4;
+
+ /// from: static public final int MODE_NO_LOCALIZED_COLLATORS
+ static const MODE_NO_LOCALIZED_COLLATORS = 16;
+
+ /// from: static public final int MODE_PRIVATE
+ static const MODE_PRIVATE = 0;
+
+ /// from: static public final int MODE_WORLD_READABLE
+ static const MODE_WORLD_READABLE = 1;
+
+ /// from: static public final int MODE_WORLD_WRITEABLE
+ static const MODE_WORLD_WRITEABLE = 2;
+
+ /// from: static public final java.lang.String NETWORK_STATS_SERVICE
+ static const NETWORK_STATS_SERVICE = r"""netstats""";
+
+ /// from: static public final java.lang.String NFC_SERVICE
+ static const NFC_SERVICE = r"""nfc""";
+
+ /// from: static public final java.lang.String NOTIFICATION_SERVICE
+ static const NOTIFICATION_SERVICE = r"""notification""";
+
+ /// from: static public final java.lang.String NSD_SERVICE
+ static const NSD_SERVICE = r"""servicediscovery""";
+
+ /// from: static public final java.lang.String OVERLAY_SERVICE
+ static const OVERLAY_SERVICE = r"""overlay""";
+
+ /// from: static public final java.lang.String PEOPLE_SERVICE
+ static const PEOPLE_SERVICE = r"""people""";
+
+ /// from: static public final java.lang.String PERFORMANCE_HINT_SERVICE
+ static const PERFORMANCE_HINT_SERVICE = r"""performance_hint""";
+
+ /// from: static public final java.lang.String POWER_SERVICE
+ static const POWER_SERVICE = r"""power""";
+
+ /// from: static public final java.lang.String PRINT_SERVICE
+ static const PRINT_SERVICE = r"""print""";
+
+ /// from: static public final int RECEIVER_EXPORTED
+ static const RECEIVER_EXPORTED = 2;
+
+ /// from: static public final int RECEIVER_NOT_EXPORTED
+ static const RECEIVER_NOT_EXPORTED = 4;
+
+ /// from: static public final int RECEIVER_VISIBLE_TO_INSTANT_APPS
+ static const RECEIVER_VISIBLE_TO_INSTANT_APPS = 1;
+
+ /// from: static public final java.lang.String RESTRICTIONS_SERVICE
+ static const RESTRICTIONS_SERVICE = r"""restrictions""";
+
+ /// from: static public final java.lang.String ROLE_SERVICE
+ static const ROLE_SERVICE = r"""role""";
+
+ /// from: static public final java.lang.String SEARCH_SERVICE
+ static const SEARCH_SERVICE = r"""search""";
+
+ /// from: static public final java.lang.String SENSOR_SERVICE
+ static const SENSOR_SERVICE = r"""sensor""";
+
+ /// from: static public final java.lang.String SHORTCUT_SERVICE
+ static const SHORTCUT_SERVICE = r"""shortcut""";
+
+ /// from: static public final java.lang.String STATUS_BAR_SERVICE
+ static const STATUS_BAR_SERVICE = r"""statusbar""";
+
+ /// from: static public final java.lang.String STORAGE_SERVICE
+ static const STORAGE_SERVICE = r"""storage""";
+
+ /// from: static public final java.lang.String STORAGE_STATS_SERVICE
+ static const STORAGE_STATS_SERVICE = r"""storagestats""";
+
+ /// from: static public final java.lang.String SYSTEM_HEALTH_SERVICE
+ static const SYSTEM_HEALTH_SERVICE = r"""systemhealth""";
+
+ /// from: static public final java.lang.String TELECOM_SERVICE
+ static const TELECOM_SERVICE = r"""telecom""";
+
+ /// from: static public final java.lang.String TELEPHONY_IMS_SERVICE
+ static const TELEPHONY_IMS_SERVICE = r"""telephony_ims""";
+
+ /// from: static public final java.lang.String TELEPHONY_SERVICE
+ static const TELEPHONY_SERVICE = r"""phone""";
+
+ /// from: static public final java.lang.String TELEPHONY_SUBSCRIPTION_SERVICE
+ static const TELEPHONY_SUBSCRIPTION_SERVICE =
+ r"""telephony_subscription_service""";
+
+ /// from: static public final java.lang.String TEXT_CLASSIFICATION_SERVICE
+ static const TEXT_CLASSIFICATION_SERVICE = r"""textclassification""";
+
+ /// from: static public final java.lang.String TEXT_SERVICES_MANAGER_SERVICE
+ static const TEXT_SERVICES_MANAGER_SERVICE = r"""textservices""";
+
+ /// from: static public final java.lang.String TV_INPUT_SERVICE
+ 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 = r"""tv_interactive_app""";
+
+ /// from: static public final java.lang.String UI_MODE_SERVICE
+ static const UI_MODE_SERVICE = r"""uimode""";
+
+ /// from: static public final java.lang.String USAGE_STATS_SERVICE
+ static const USAGE_STATS_SERVICE = r"""usagestats""";
+
+ /// from: static public final java.lang.String USB_SERVICE
+ static const USB_SERVICE = r"""usb""";
+
+ /// from: static public final java.lang.String USER_SERVICE
+ static const USER_SERVICE = r"""user""";
+
+ /// from: static public final java.lang.String VIBRATOR_MANAGER_SERVICE
+ static const VIBRATOR_MANAGER_SERVICE = r"""vibrator_manager""";
+
+ /// from: static public final java.lang.String VIBRATOR_SERVICE
+ static const VIBRATOR_SERVICE = r"""vibrator""";
+
+ /// from: static public final java.lang.String VIRTUAL_DEVICE_SERVICE
+ static const VIRTUAL_DEVICE_SERVICE = r"""virtualdevice""";
+
+ /// from: static public final java.lang.String VPN_MANAGEMENT_SERVICE
+ static const VPN_MANAGEMENT_SERVICE = r"""vpn_management""";
+
+ /// from: static public final java.lang.String WALLPAPER_SERVICE
+ static const WALLPAPER_SERVICE = r"""wallpaper""";
+
+ /// from: static public final java.lang.String WIFI_AWARE_SERVICE
+ static const WIFI_AWARE_SERVICE = r"""wifiaware""";
+
+ /// from: static public final java.lang.String WIFI_P2P_SERVICE
+ static const WIFI_P2P_SERVICE = r"""wifip2p""";
+
+ /// from: static public final java.lang.String WIFI_RTT_RANGING_SERVICE
+ static const WIFI_RTT_RANGING_SERVICE = r"""wifirtt""";
+
+ /// from: static public final java.lang.String WIFI_SERVICE
+ static const WIFI_SERVICE = r"""wifi""";
+
+ /// from: static public final java.lang.String WINDOW_SERVICE
+ static const WINDOW_SERVICE = r"""window""";
+
+ static final _id_new0 =
+ jni.Jni.accessors.getMethodIDOf(_class.reference, r"", r"()V");
+
+ /// from: public void ()
+ /// The returned object must be released after use, by calling the [release] method.
+ factory Context() {
+ return Context.fromRef(jni.Jni.accessors
+ .newObjectWithArgs(_class.reference, _id_new0, []).object);
+ }
+
+ static final _id_getAssets = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"getAssets", r"()Landroid/content/res/AssetManager;");
+
+ /// from: public abstract android.content.res.AssetManager getAssets()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getAssets() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_getAssets, jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getResources = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"getResources", r"()Landroid/content/res/Resources;");
+
+ /// from: public abstract android.content.res.Resources getResources()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getResources() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_getResources, jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getPackageManager = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"getPackageManager",
+ r"()Landroid/content/pm/PackageManager;");
+
+ /// from: public abstract android.content.pm.PackageManager getPackageManager()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getPackageManager() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getPackageManager,
+ jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getContentResolver = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"getContentResolver",
+ r"()Landroid/content/ContentResolver;");
+
+ /// from: public abstract android.content.ContentResolver getContentResolver()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getContentResolver() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getContentResolver,
+ jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getMainLooper = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"getMainLooper", r"()Landroid/os/Looper;");
+
+ /// from: public abstract android.os.Looper getMainLooper()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getMainLooper() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_getMainLooper, jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getMainExecutor = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"getMainExecutor",
+ r"()Ljava/util/concurrent/Executor;");
+
+ /// from: public java.util.concurrent.Executor getMainExecutor()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getMainExecutor() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_getMainExecutor, jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getApplicationContext = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"getApplicationContext",
+ r"()Landroid/content/Context;");
+
+ /// from: public abstract android.content.Context getApplicationContext()
+ /// The returned object must be released after use, by calling the [release] method.
+ Context getApplicationContext() {
+ return const $ContextType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getApplicationContext,
+ jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_registerComponentCallbacks = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"registerComponentCallbacks",
+ r"(Landroid/content/ComponentCallbacks;)V");
+
+ /// from: public void registerComponentCallbacks(android.content.ComponentCallbacks componentCallbacks)
+ void registerComponentCallbacks(
+ jni.JObject componentCallbacks,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_registerComponentCallbacks,
+ jni.JniCallType.voidType,
+ [componentCallbacks.reference]).check();
+ }
+
+ static final _id_unregisterComponentCallbacks = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"unregisterComponentCallbacks",
+ r"(Landroid/content/ComponentCallbacks;)V");
+
+ /// from: public void unregisterComponentCallbacks(android.content.ComponentCallbacks componentCallbacks)
+ void unregisterComponentCallbacks(
+ jni.JObject componentCallbacks,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_unregisterComponentCallbacks,
+ jni.JniCallType.voidType,
+ [componentCallbacks.reference]).check();
+ }
+
+ static final _id_getText = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"getText", r"(I)Ljava/lang/CharSequence;");
+
+ /// from: public final java.lang.CharSequence getText(int i)
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getText(
+ int i,
+ ) {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getText,
+ jni.JniCallType.objectType,
+ [jni.JValueInt(i)]).object);
+ }
+
+ static final _id_getString = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"getString", r"(I)Ljava/lang/String;");
+
+ /// from: public final java.lang.String getString(int i)
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JString getString(
+ int i,
+ ) {
+ return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getString,
+ jni.JniCallType.objectType,
+ [jni.JValueInt(i)]).object);
+ }
+
+ static final _id_getString1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"getString",
+ r"(I[Ljava/lang/Object;)Ljava/lang/String;");
+
+ /// from: public final java.lang.String getString(int i, java.lang.Object[] objects)
+ /// 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(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getString1,
+ jni.JniCallType.objectType,
+ [jni.JValueInt(i), objects.reference]).object);
+ }
+
+ static final _id_getColor =
+ jni.Jni.accessors.getMethodIDOf(_class.reference, r"getColor", r"(I)I");
+
+ /// from: public final int getColor(int i)
+ int getColor(
+ int i,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_getColor,
+ jni.JniCallType.intType, [jni.JValueInt(i)]).integer;
+ }
+
+ static final _id_getDrawable = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"getDrawable",
+ r"(I)Landroid/graphics/drawable/Drawable;");
+
+ /// from: public final android.graphics.drawable.Drawable getDrawable(int i)
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getDrawable(
+ int i,
+ ) {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getDrawable,
+ jni.JniCallType.objectType,
+ [jni.JValueInt(i)]).object);
+ }
+
+ static final _id_getColorStateList = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"getColorStateList",
+ r"(I)Landroid/content/res/ColorStateList;");
+
+ /// from: public final android.content.res.ColorStateList getColorStateList(int i)
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getColorStateList(
+ int i,
+ ) {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getColorStateList,
+ jni.JniCallType.objectType,
+ [jni.JValueInt(i)]).object);
+ }
+
+ static final _id_setTheme =
+ jni.Jni.accessors.getMethodIDOf(_class.reference, r"setTheme", r"(I)V");
+
+ /// from: public abstract void setTheme(int i)
+ void setTheme(
+ int i,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_setTheme,
+ jni.JniCallType.voidType, [jni.JValueInt(i)]).check();
+ }
+
+ static final _id_getTheme = jni.Jni.accessors.getMethodIDOf(_class.reference,
+ r"getTheme", r"()Landroid/content/res/Resources$Theme;");
+
+ /// from: public abstract android.content.res.Resources$Theme getTheme()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getTheme() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_getTheme, jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_obtainStyledAttributes = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"obtainStyledAttributes",
+ r"([I)Landroid/content/res/TypedArray;");
+
+ /// from: public final android.content.res.TypedArray obtainStyledAttributes(int[] is)
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject obtainStyledAttributes(
+ jni.JArray is0,
+ ) {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_obtainStyledAttributes,
+ jni.JniCallType.objectType,
+ [is0.reference]).object);
+ }
+
+ static final _id_obtainStyledAttributes1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"obtainStyledAttributes",
+ r"(I[I)Landroid/content/res/TypedArray;");
+
+ /// from: public final android.content.res.TypedArray obtainStyledAttributes(int i, int[] is)
+ /// 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(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_obtainStyledAttributes1,
+ jni.JniCallType.objectType,
+ [jni.JValueInt(i), is0.reference]).object);
+ }
+
+ static final _id_obtainStyledAttributes2 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"obtainStyledAttributes",
+ r"(Landroid/util/AttributeSet;[I)Landroid/content/res/TypedArray;");
+
+ /// from: public final android.content.res.TypedArray obtainStyledAttributes(android.util.AttributeSet attributeSet, int[] is)
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject obtainStyledAttributes2(
+ jni.JObject attributeSet,
+ jni.JArray is0,
+ ) {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_obtainStyledAttributes2,
+ jni.JniCallType.objectType,
+ [attributeSet.reference, is0.reference]).object);
+ }
+
+ static final _id_obtainStyledAttributes3 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"obtainStyledAttributes",
+ r"(Landroid/util/AttributeSet;[III)Landroid/content/res/TypedArray;");
+
+ /// from: public final android.content.res.TypedArray obtainStyledAttributes(android.util.AttributeSet attributeSet, int[] is, int i, int i1)
+ /// 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,
+ ) {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_obtainStyledAttributes3, jni.JniCallType.objectType, [
+ attributeSet.reference,
+ is0.reference,
+ jni.JValueInt(i),
+ jni.JValueInt(i1)
+ ]).object);
+ }
+
+ static final _id_getClassLoader = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"getClassLoader", r"()Ljava/lang/ClassLoader;");
+
+ /// from: public abstract java.lang.ClassLoader getClassLoader()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getClassLoader() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_getClassLoader, jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getPackageName = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"getPackageName", r"()Ljava/lang/String;");
+
+ /// from: public abstract java.lang.String getPackageName()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JString getPackageName() {
+ return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_getPackageName, jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getOpPackageName = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"getOpPackageName", r"()Ljava/lang/String;");
+
+ /// from: public java.lang.String getOpPackageName()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JString getOpPackageName() {
+ return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getOpPackageName,
+ jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getAttributionTag = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"getAttributionTag", r"()Ljava/lang/String;");
+
+ /// from: public java.lang.String getAttributionTag()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JString getAttributionTag() {
+ return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getAttributionTag,
+ jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getAttributionSource = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"getAttributionSource",
+ r"()Landroid/content/AttributionSource;");
+
+ /// from: public android.content.AttributionSource getAttributionSource()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getAttributionSource() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getAttributionSource,
+ jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getParams = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"getParams", r"()Landroid/content/ContextParams;");
+
+ /// from: public android.content.ContextParams getParams()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getParams() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_getParams, jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getApplicationInfo = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"getApplicationInfo",
+ r"()Landroid/content/pm/ApplicationInfo;");
+
+ /// from: public abstract android.content.pm.ApplicationInfo getApplicationInfo()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getApplicationInfo() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getApplicationInfo,
+ jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getPackageResourcePath = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"getPackageResourcePath", r"()Ljava/lang/String;");
+
+ /// from: public abstract java.lang.String getPackageResourcePath()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JString getPackageResourcePath() {
+ return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getPackageResourcePath,
+ jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getPackageCodePath = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"getPackageCodePath", r"()Ljava/lang/String;");
+
+ /// from: public abstract java.lang.String getPackageCodePath()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JString getPackageCodePath() {
+ return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getPackageCodePath,
+ jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getSharedPreferences = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"getSharedPreferences",
+ r"(Ljava/lang/String;I)Landroid/content/SharedPreferences;");
+
+ /// from: public abstract android.content.SharedPreferences getSharedPreferences(java.lang.String string, int i)
+ /// 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(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getSharedPreferences,
+ jni.JniCallType.objectType,
+ [string.reference, jni.JValueInt(i)]).object);
+ }
+
+ static final _id_moveSharedPreferencesFrom = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"moveSharedPreferencesFrom",
+ r"(Landroid/content/Context;Ljava/lang/String;)Z");
+
+ /// from: public abstract boolean moveSharedPreferencesFrom(android.content.Context context, java.lang.String string)
+ bool moveSharedPreferencesFrom(
+ Context context,
+ jni.JString string,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_moveSharedPreferencesFrom,
+ jni.JniCallType.booleanType,
+ [context.reference, string.reference]).boolean;
+ }
+
+ static final _id_deleteSharedPreferences = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"deleteSharedPreferences", r"(Ljava/lang/String;)Z");
+
+ /// from: public abstract boolean deleteSharedPreferences(java.lang.String string)
+ bool deleteSharedPreferences(
+ jni.JString string,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_deleteSharedPreferences,
+ jni.JniCallType.booleanType,
+ [string.reference]).boolean;
+ }
+
+ static final _id_openFileInput = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"openFileInput",
+ r"(Ljava/lang/String;)Ljava/io/FileInputStream;");
+
+ /// from: public abstract java.io.FileInputStream openFileInput(java.lang.String string)
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject openFileInput(
+ jni.JString string,
+ ) {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_openFileInput,
+ jni.JniCallType.objectType,
+ [string.reference]).object);
+ }
+
+ static final _id_openFileOutput = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"openFileOutput",
+ r"(Ljava/lang/String;I)Ljava/io/FileOutputStream;");
+
+ /// from: public abstract java.io.FileOutputStream openFileOutput(java.lang.String string, int i)
+ /// 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(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_openFileOutput,
+ jni.JniCallType.objectType,
+ [string.reference, jni.JValueInt(i)]).object);
+ }
+
+ static final _id_deleteFile = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"deleteFile", r"(Ljava/lang/String;)Z");
+
+ /// from: public abstract boolean deleteFile(java.lang.String string)
+ bool deleteFile(
+ jni.JString string,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_deleteFile,
+ jni.JniCallType.booleanType, [string.reference]).boolean;
+ }
+
+ static final _id_getFileStreamPath = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"getFileStreamPath",
+ r"(Ljava/lang/String;)Ljava/io/File;");
+
+ /// from: public abstract java.io.File getFileStreamPath(java.lang.String string)
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getFileStreamPath(
+ jni.JString string,
+ ) {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getFileStreamPath,
+ jni.JniCallType.objectType,
+ [string.reference]).object);
+ }
+
+ static final _id_getDataDir = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"getDataDir", r"()Ljava/io/File;");
+
+ /// from: public abstract java.io.File getDataDir()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getDataDir() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_getDataDir, jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getFilesDir = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"getFilesDir", r"()Ljava/io/File;");
+
+ /// from: public abstract java.io.File getFilesDir()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getFilesDir() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_getFilesDir, jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getNoBackupFilesDir = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"getNoBackupFilesDir", r"()Ljava/io/File;");
+
+ /// from: public abstract java.io.File getNoBackupFilesDir()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getNoBackupFilesDir() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getNoBackupFilesDir,
+ jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getExternalFilesDir = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"getExternalFilesDir",
+ r"(Ljava/lang/String;)Ljava/io/File;");
+
+ /// from: public abstract java.io.File getExternalFilesDir(java.lang.String string)
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getExternalFilesDir(
+ jni.JString string,
+ ) {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getExternalFilesDir,
+ jni.JniCallType.objectType,
+ [string.reference]).object);
+ }
+
+ static final _id_getExternalFilesDirs = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"getExternalFilesDirs",
+ r"(Ljava/lang/String;)[Ljava/io/File;");
+
+ /// from: public abstract java.io.File[] getExternalFilesDirs(java.lang.String string)
+ /// 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(jni.Jni.accessors
+ .callMethodWithArgs(reference, _id_getExternalFilesDirs,
+ jni.JniCallType.objectType, [string.reference]).object);
+ }
+
+ static final _id_getObbDir = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"getObbDir", r"()Ljava/io/File;");
+
+ /// from: public abstract java.io.File getObbDir()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getObbDir() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_getObbDir, jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getObbDirs = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"getObbDirs", r"()[Ljava/io/File;");
+
+ /// from: public abstract java.io.File[] getObbDirs()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JArray getObbDirs() {
+ return const jni.JArrayType(jni.JObjectType()).fromRef(jni.Jni.accessors
+ .callMethodWithArgs(
+ reference, _id_getObbDirs, jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getCacheDir = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"getCacheDir", r"()Ljava/io/File;");
+
+ /// from: public abstract java.io.File getCacheDir()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getCacheDir() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_getCacheDir, jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getCodeCacheDir = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"getCodeCacheDir", r"()Ljava/io/File;");
+
+ /// from: public abstract java.io.File getCodeCacheDir()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getCodeCacheDir() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_getCodeCacheDir, jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getExternalCacheDir = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"getExternalCacheDir", r"()Ljava/io/File;");
+
+ /// from: public abstract java.io.File getExternalCacheDir()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getExternalCacheDir() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getExternalCacheDir,
+ jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getExternalCacheDirs = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"getExternalCacheDirs", r"()[Ljava/io/File;");
+
+ /// from: public abstract java.io.File[] getExternalCacheDirs()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JArray getExternalCacheDirs() {
+ return const jni.JArrayType(jni.JObjectType()).fromRef(jni.Jni.accessors
+ .callMethodWithArgs(reference, _id_getExternalCacheDirs,
+ jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getExternalMediaDirs = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"getExternalMediaDirs", r"()[Ljava/io/File;");
+
+ /// from: public abstract java.io.File[] getExternalMediaDirs()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JArray getExternalMediaDirs() {
+ return const jni.JArrayType(jni.JObjectType()).fromRef(jni.Jni.accessors
+ .callMethodWithArgs(reference, _id_getExternalMediaDirs,
+ jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_fileList = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"fileList", r"()[Ljava/lang/String;");
+
+ /// from: public abstract java.lang.String[] fileList()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JArray fileList() {
+ return const jni.JArrayType(jni.JStringType()).fromRef(jni.Jni.accessors
+ .callMethodWithArgs(
+ reference, _id_fileList, jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getDir = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"getDir", r"(Ljava/lang/String;I)Ljava/io/File;");
+
+ /// from: public abstract java.io.File getDir(java.lang.String string, int i)
+ /// 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(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getDir,
+ jni.JniCallType.objectType,
+ [string.reference, jni.JValueInt(i)]).object);
+ }
+
+ static final _id_openOrCreateDatabase = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"openOrCreateDatabase",
+ r"(Ljava/lang/String;ILandroid/database/sqlite/SQLiteDatabase$CursorFactory;)Landroid/database/sqlite/SQLiteDatabase;");
+
+ /// 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 released after use, by calling the [release] method.
+ jni.JObject openOrCreateDatabase(
+ jni.JString string,
+ int i,
+ jni.JObject cursorFactory,
+ ) {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_openOrCreateDatabase,
+ jni.JniCallType.objectType,
+ [string.reference, jni.JValueInt(i), cursorFactory.reference]).object);
+ }
+
+ static final _id_openOrCreateDatabase1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"openOrCreateDatabase",
+ r"(Ljava/lang/String;ILandroid/database/sqlite/SQLiteDatabase$CursorFactory;Landroid/database/DatabaseErrorHandler;)Landroid/database/sqlite/SQLiteDatabase;");
+
+ /// 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 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(jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_openOrCreateDatabase1, jni.JniCallType.objectType, [
+ string.reference,
+ jni.JValueInt(i),
+ cursorFactory.reference,
+ databaseErrorHandler.reference
+ ]).object);
+ }
+
+ static final _id_moveDatabaseFrom = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"moveDatabaseFrom",
+ r"(Landroid/content/Context;Ljava/lang/String;)Z");
+
+ /// from: public abstract boolean moveDatabaseFrom(android.content.Context context, java.lang.String string)
+ bool moveDatabaseFrom(
+ Context context,
+ jni.JString string,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_moveDatabaseFrom,
+ jni.JniCallType.booleanType,
+ [context.reference, string.reference]).boolean;
+ }
+
+ static final _id_deleteDatabase = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"deleteDatabase", r"(Ljava/lang/String;)Z");
+
+ /// from: public abstract boolean deleteDatabase(java.lang.String string)
+ bool deleteDatabase(
+ jni.JString string,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_deleteDatabase,
+ jni.JniCallType.booleanType, [string.reference]).boolean;
+ }
+
+ static final _id_getDatabasePath = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"getDatabasePath",
+ r"(Ljava/lang/String;)Ljava/io/File;");
+
+ /// from: public abstract java.io.File getDatabasePath(java.lang.String string)
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getDatabasePath(
+ jni.JString string,
+ ) {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getDatabasePath,
+ jni.JniCallType.objectType,
+ [string.reference]).object);
+ }
+
+ static final _id_databaseList = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"databaseList", r"()[Ljava/lang/String;");
+
+ /// from: public abstract java.lang.String[] databaseList()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JArray databaseList() {
+ return const jni.JArrayType(jni.JStringType()).fromRef(jni.Jni.accessors
+ .callMethodWithArgs(reference, _id_databaseList,
+ jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getWallpaper = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"getWallpaper",
+ r"()Landroid/graphics/drawable/Drawable;");
+
+ /// from: public abstract android.graphics.drawable.Drawable getWallpaper()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getWallpaper() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_getWallpaper, jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_peekWallpaper = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"peekWallpaper",
+ r"()Landroid/graphics/drawable/Drawable;");
+
+ /// from: public abstract android.graphics.drawable.Drawable peekWallpaper()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject peekWallpaper() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_peekWallpaper, jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getWallpaperDesiredMinimumWidth = jni.Jni.accessors
+ .getMethodIDOf(
+ _class.reference, r"getWallpaperDesiredMinimumWidth", r"()I");
+
+ /// from: public abstract int getWallpaperDesiredMinimumWidth()
+ int getWallpaperDesiredMinimumWidth() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getWallpaperDesiredMinimumWidth,
+ jni.JniCallType.intType, []).integer;
+ }
+
+ static final _id_getWallpaperDesiredMinimumHeight = jni.Jni.accessors
+ .getMethodIDOf(
+ _class.reference, r"getWallpaperDesiredMinimumHeight", r"()I");
+
+ /// from: public abstract int getWallpaperDesiredMinimumHeight()
+ int getWallpaperDesiredMinimumHeight() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getWallpaperDesiredMinimumHeight,
+ jni.JniCallType.intType, []).integer;
+ }
+
+ static final _id_setWallpaper = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"setWallpaper", r"(Landroid/graphics/Bitmap;)V");
+
+ /// from: public abstract void setWallpaper(android.graphics.Bitmap bitmap)
+ void setWallpaper(
+ jni.JObject bitmap,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_setWallpaper,
+ jni.JniCallType.voidType, [bitmap.reference]).check();
+ }
+
+ static final _id_setWallpaper1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"setWallpaper", r"(Ljava/io/InputStream;)V");
+
+ /// from: public abstract void setWallpaper(java.io.InputStream inputStream)
+ void setWallpaper1(
+ jni.JObject inputStream,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_setWallpaper1,
+ jni.JniCallType.voidType, [inputStream.reference]).check();
+ }
+
+ static final _id_clearWallpaper = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"clearWallpaper", r"()V");
+
+ /// from: public abstract void clearWallpaper()
+ void clearWallpaper() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_clearWallpaper, jni.JniCallType.voidType, []).check();
+ }
+
+ static final _id_startActivity = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"startActivity", r"(Landroid/content/Intent;)V");
+
+ /// from: public abstract void startActivity(android.content.Intent intent)
+ void startActivity(
+ jni.JObject intent,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_startActivity,
+ jni.JniCallType.voidType, [intent.reference]).check();
+ }
+
+ static final _id_startActivity1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"startActivity",
+ r"(Landroid/content/Intent;Landroid/os/Bundle;)V");
+
+ /// from: public abstract void startActivity(android.content.Intent intent, android.os.Bundle bundle)
+ void startActivity1(
+ jni.JObject intent,
+ jni.JObject bundle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_startActivity1,
+ jni.JniCallType.voidType, [intent.reference, bundle.reference]).check();
+ }
+
+ static final _id_startActivities = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"startActivities", r"([Landroid/content/Intent;)V");
+
+ /// from: public abstract void startActivities(android.content.Intent[] intents)
+ void startActivities(
+ jni.JArray intents,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_startActivities,
+ jni.JniCallType.voidType, [intents.reference]).check();
+ }
+
+ static final _id_startActivities1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"startActivities",
+ r"([Landroid/content/Intent;Landroid/os/Bundle;)V");
+
+ /// from: public abstract void startActivities(android.content.Intent[] intents, android.os.Bundle bundle)
+ void startActivities1(
+ jni.JArray intents,
+ jni.JObject bundle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_startActivities1,
+ jni.JniCallType.voidType,
+ [intents.reference, bundle.reference]).check();
+ }
+
+ static final _id_startIntentSender = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"startIntentSender",
+ r"(Landroid/content/IntentSender;Landroid/content/Intent;III)V");
+
+ /// from: public abstract void startIntentSender(android.content.IntentSender intentSender, android.content.Intent intent, int i, int i1, int i2)
+ void startIntentSender(
+ jni.JObject intentSender,
+ jni.JObject intent,
+ int i,
+ int i1,
+ int i2,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_startIntentSender, jni.JniCallType.voidType, [
+ intentSender.reference,
+ intent.reference,
+ jni.JValueInt(i),
+ jni.JValueInt(i1),
+ jni.JValueInt(i2)
+ ]).check();
+ }
+
+ static final _id_startIntentSender1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"startIntentSender",
+ r"(Landroid/content/IntentSender;Landroid/content/Intent;IIILandroid/os/Bundle;)V");
+
+ /// 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,
+ jni.JObject intent,
+ int i,
+ int i1,
+ int i2,
+ jni.JObject bundle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_startIntentSender1, jni.JniCallType.voidType, [
+ intentSender.reference,
+ intent.reference,
+ jni.JValueInt(i),
+ jni.JValueInt(i1),
+ jni.JValueInt(i2),
+ bundle.reference
+ ]).check();
+ }
+
+ static final _id_sendBroadcast = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"sendBroadcast", r"(Landroid/content/Intent;)V");
+
+ /// from: public abstract void sendBroadcast(android.content.Intent intent)
+ void sendBroadcast(
+ jni.JObject intent,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_sendBroadcast,
+ jni.JniCallType.voidType, [intent.reference]).check();
+ }
+
+ static final _id_sendBroadcast1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"sendBroadcast",
+ r"(Landroid/content/Intent;Ljava/lang/String;)V");
+
+ /// from: public abstract void sendBroadcast(android.content.Intent intent, java.lang.String string)
+ void sendBroadcast1(
+ jni.JObject intent,
+ jni.JString string,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_sendBroadcast1,
+ jni.JniCallType.voidType, [intent.reference, string.reference]).check();
+ }
+
+ static final _id_sendBroadcastWithMultiplePermissions = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"sendBroadcastWithMultiplePermissions",
+ r"(Landroid/content/Intent;[Ljava/lang/String;)V");
+
+ /// from: public void sendBroadcastWithMultiplePermissions(android.content.Intent intent, java.lang.String[] strings)
+ void sendBroadcastWithMultiplePermissions(
+ jni.JObject intent,
+ jni.JArray strings,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_sendBroadcastWithMultiplePermissions,
+ jni.JniCallType.voidType,
+ [intent.reference, strings.reference]).check();
+ }
+
+ static final _id_sendBroadcast2 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"sendBroadcast",
+ r"(Landroid/content/Intent;Ljava/lang/String;Landroid/os/Bundle;)V");
+
+ /// from: public void sendBroadcast(android.content.Intent intent, java.lang.String string, android.os.Bundle bundle)
+ void sendBroadcast2(
+ jni.JObject intent,
+ jni.JString string,
+ jni.JObject bundle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_sendBroadcast2,
+ jni.JniCallType.voidType,
+ [intent.reference, string.reference, bundle.reference]).check();
+ }
+
+ static final _id_sendOrderedBroadcast = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"sendOrderedBroadcast",
+ r"(Landroid/content/Intent;Ljava/lang/String;)V");
+
+ /// from: public abstract void sendOrderedBroadcast(android.content.Intent intent, java.lang.String string)
+ void sendOrderedBroadcast(
+ jni.JObject intent,
+ jni.JString string,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_sendOrderedBroadcast,
+ jni.JniCallType.voidType,
+ [intent.reference, string.reference]).check();
+ }
+
+ static final _id_sendOrderedBroadcast1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"sendOrderedBroadcast",
+ r"(Landroid/content/Intent;Ljava/lang/String;Landroid/os/Bundle;)V");
+
+ /// from: public void sendOrderedBroadcast(android.content.Intent intent, java.lang.String string, android.os.Bundle bundle)
+ void sendOrderedBroadcast1(
+ jni.JObject intent,
+ jni.JString string,
+ jni.JObject bundle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_sendOrderedBroadcast1,
+ jni.JniCallType.voidType,
+ [intent.reference, string.reference, bundle.reference]).check();
+ }
+
+ static final _id_sendOrderedBroadcast2 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"sendOrderedBroadcast",
+ r"(Landroid/content/Intent;Ljava/lang/String;Landroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V");
+
+ /// 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 sendOrderedBroadcast2(
+ jni.JObject intent,
+ jni.JString string,
+ jni.JObject broadcastReceiver,
+ jni.JObject handler,
+ int i,
+ jni.JString string1,
+ jni.JObject bundle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_sendOrderedBroadcast2, jni.JniCallType.voidType, [
+ intent.reference,
+ string.reference,
+ broadcastReceiver.reference,
+ handler.reference,
+ jni.JValueInt(i),
+ string1.reference,
+ bundle.reference
+ ]).check();
+ }
+
+ static final _id_sendOrderedBroadcast3 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"sendOrderedBroadcast",
+ r"(Landroid/content/Intent;Ljava/lang/String;Landroid/os/Bundle;Landroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V");
+
+ /// from: public void sendOrderedBroadcast(android.content.Intent intent, java.lang.String string, android.os.Bundle bundle, android.content.BroadcastReceiver broadcastReceiver, android.os.Handler handler, int i, java.lang.String string1, android.os.Bundle bundle1)
+ void sendOrderedBroadcast3(
+ jni.JObject intent,
+ jni.JString string,
+ jni.JObject bundle,
+ jni.JObject broadcastReceiver,
+ jni.JObject handler,
+ int i,
+ jni.JString string1,
+ jni.JObject bundle1,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_sendOrderedBroadcast3, jni.JniCallType.voidType, [
+ intent.reference,
+ string.reference,
+ bundle.reference,
+ broadcastReceiver.reference,
+ handler.reference,
+ jni.JValueInt(i),
+ string1.reference,
+ bundle1.reference
+ ]).check();
+ }
+
+ static final _id_sendBroadcastAsUser = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"sendBroadcastAsUser",
+ r"(Landroid/content/Intent;Landroid/os/UserHandle;)V");
+
+ /// from: public abstract void sendBroadcastAsUser(android.content.Intent intent, android.os.UserHandle userHandle)
+ void sendBroadcastAsUser(
+ jni.JObject intent,
+ jni.JObject userHandle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_sendBroadcastAsUser,
+ jni.JniCallType.voidType,
+ [intent.reference, userHandle.reference]).check();
+ }
+
+ static final _id_sendBroadcastAsUser1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"sendBroadcastAsUser",
+ r"(Landroid/content/Intent;Landroid/os/UserHandle;Ljava/lang/String;)V");
+
+ /// from: public abstract void sendBroadcastAsUser(android.content.Intent intent, android.os.UserHandle userHandle, java.lang.String string)
+ void sendBroadcastAsUser1(
+ jni.JObject intent,
+ jni.JObject userHandle,
+ jni.JString string,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_sendBroadcastAsUser1,
+ jni.JniCallType.voidType,
+ [intent.reference, userHandle.reference, string.reference]).check();
+ }
+
+ static final _id_sendOrderedBroadcastAsUser = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"sendOrderedBroadcastAsUser",
+ r"(Landroid/content/Intent;Landroid/os/UserHandle;Ljava/lang/String;Landroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V");
+
+ /// 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(
+ jni.JObject intent,
+ jni.JObject userHandle,
+ jni.JString string,
+ jni.JObject broadcastReceiver,
+ jni.JObject handler,
+ int i,
+ jni.JString string1,
+ jni.JObject bundle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_sendOrderedBroadcastAsUser, jni.JniCallType.voidType, [
+ intent.reference,
+ userHandle.reference,
+ string.reference,
+ broadcastReceiver.reference,
+ handler.reference,
+ jni.JValueInt(i),
+ string1.reference,
+ bundle.reference
+ ]).check();
+ }
+
+ static final _id_sendOrderedBroadcast4 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"sendOrderedBroadcast",
+ r"(Landroid/content/Intent;Ljava/lang/String;Ljava/lang/String;Landroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V");
+
+ /// 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 sendOrderedBroadcast4(
+ jni.JObject intent,
+ jni.JString string,
+ jni.JString string1,
+ jni.JObject broadcastReceiver,
+ jni.JObject handler,
+ int i,
+ jni.JString string2,
+ jni.JObject bundle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_sendOrderedBroadcast4, jni.JniCallType.voidType, [
+ intent.reference,
+ string.reference,
+ string1.reference,
+ broadcastReceiver.reference,
+ handler.reference,
+ jni.JValueInt(i),
+ string2.reference,
+ bundle.reference
+ ]).check();
+ }
+
+ static final _id_sendStickyBroadcast = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"sendStickyBroadcast", r"(Landroid/content/Intent;)V");
+
+ /// from: public abstract void sendStickyBroadcast(android.content.Intent intent)
+ void sendStickyBroadcast(
+ jni.JObject intent,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_sendStickyBroadcast,
+ jni.JniCallType.voidType,
+ [intent.reference]).check();
+ }
+
+ static final _id_sendStickyBroadcast1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"sendStickyBroadcast",
+ r"(Landroid/content/Intent;Landroid/os/Bundle;)V");
+
+ /// from: public void sendStickyBroadcast(android.content.Intent intent, android.os.Bundle bundle)
+ void sendStickyBroadcast1(
+ jni.JObject intent,
+ jni.JObject bundle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_sendStickyBroadcast1,
+ jni.JniCallType.voidType,
+ [intent.reference, bundle.reference]).check();
+ }
+
+ static final _id_sendStickyOrderedBroadcast = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"sendStickyOrderedBroadcast",
+ r"(Landroid/content/Intent;Landroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V");
+
+ /// 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(
+ jni.JObject intent,
+ jni.JObject broadcastReceiver,
+ jni.JObject handler,
+ int i,
+ jni.JString string,
+ jni.JObject bundle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_sendStickyOrderedBroadcast, jni.JniCallType.voidType, [
+ intent.reference,
+ broadcastReceiver.reference,
+ handler.reference,
+ jni.JValueInt(i),
+ string.reference,
+ bundle.reference
+ ]).check();
+ }
+
+ static final _id_removeStickyBroadcast = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"removeStickyBroadcast",
+ r"(Landroid/content/Intent;)V");
+
+ /// from: public abstract void removeStickyBroadcast(android.content.Intent intent)
+ void removeStickyBroadcast(
+ jni.JObject intent,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_removeStickyBroadcast,
+ jni.JniCallType.voidType,
+ [intent.reference]).check();
+ }
+
+ static final _id_sendStickyBroadcastAsUser = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"sendStickyBroadcastAsUser",
+ r"(Landroid/content/Intent;Landroid/os/UserHandle;)V");
+
+ /// from: public abstract void sendStickyBroadcastAsUser(android.content.Intent intent, android.os.UserHandle userHandle)
+ void sendStickyBroadcastAsUser(
+ jni.JObject intent,
+ jni.JObject userHandle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_sendStickyBroadcastAsUser,
+ jni.JniCallType.voidType,
+ [intent.reference, userHandle.reference]).check();
+ }
+
+ static final _id_sendStickyOrderedBroadcastAsUser = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"sendStickyOrderedBroadcastAsUser",
+ r"(Landroid/content/Intent;Landroid/os/UserHandle;Landroid/content/BroadcastReceiver;Landroid/os/Handler;ILjava/lang/String;Landroid/os/Bundle;)V");
+
+ /// 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(
+ jni.JObject intent,
+ jni.JObject userHandle,
+ jni.JObject broadcastReceiver,
+ jni.JObject handler,
+ int i,
+ jni.JString string,
+ jni.JObject bundle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference,
+ _id_sendStickyOrderedBroadcastAsUser, jni.JniCallType.voidType, [
+ intent.reference,
+ userHandle.reference,
+ broadcastReceiver.reference,
+ handler.reference,
+ jni.JValueInt(i),
+ string.reference,
+ bundle.reference
+ ]).check();
+ }
+
+ static final _id_removeStickyBroadcastAsUser = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"removeStickyBroadcastAsUser",
+ r"(Landroid/content/Intent;Landroid/os/UserHandle;)V");
+
+ /// from: public abstract void removeStickyBroadcastAsUser(android.content.Intent intent, android.os.UserHandle userHandle)
+ void removeStickyBroadcastAsUser(
+ jni.JObject intent,
+ jni.JObject userHandle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_removeStickyBroadcastAsUser,
+ jni.JniCallType.voidType,
+ [intent.reference, userHandle.reference]).check();
+ }
+
+ static final _id_registerReceiver = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"registerReceiver",
+ r"(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;)Landroid/content/Intent;");
+
+ /// from: public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver broadcastReceiver, android.content.IntentFilter intentFilter)
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject registerReceiver(
+ jni.JObject broadcastReceiver,
+ jni.JObject intentFilter,
+ ) {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_registerReceiver,
+ jni.JniCallType.objectType,
+ [broadcastReceiver.reference, intentFilter.reference]).object);
+ }
+
+ static final _id_registerReceiver1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"registerReceiver",
+ r"(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;I)Landroid/content/Intent;");
+
+ /// from: public abstract android.content.Intent registerReceiver(android.content.BroadcastReceiver broadcastReceiver, android.content.IntentFilter intentFilter, int i)
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject registerReceiver1(
+ jni.JObject broadcastReceiver,
+ jni.JObject intentFilter,
+ int i,
+ ) {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_registerReceiver1, jni.JniCallType.objectType, [
+ broadcastReceiver.reference,
+ intentFilter.reference,
+ jni.JValueInt(i)
+ ]).object);
+ }
+
+ static final _id_registerReceiver2 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"registerReceiver",
+ r"(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;Ljava/lang/String;Landroid/os/Handler;)Landroid/content/Intent;");
+
+ /// 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 released after use, by calling the [release] method.
+ jni.JObject registerReceiver2(
+ jni.JObject broadcastReceiver,
+ jni.JObject intentFilter,
+ jni.JString string,
+ jni.JObject handler,
+ ) {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_registerReceiver2, jni.JniCallType.objectType, [
+ broadcastReceiver.reference,
+ intentFilter.reference,
+ string.reference,
+ handler.reference
+ ]).object);
+ }
+
+ static final _id_registerReceiver3 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"registerReceiver",
+ r"(Landroid/content/BroadcastReceiver;Landroid/content/IntentFilter;Ljava/lang/String;Landroid/os/Handler;I)Landroid/content/Intent;");
+
+ /// 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 released after use, by calling the [release] method.
+ jni.JObject registerReceiver3(
+ jni.JObject broadcastReceiver,
+ jni.JObject intentFilter,
+ jni.JString string,
+ jni.JObject handler,
+ int i,
+ ) {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_registerReceiver3, jni.JniCallType.objectType, [
+ broadcastReceiver.reference,
+ intentFilter.reference,
+ string.reference,
+ handler.reference,
+ jni.JValueInt(i)
+ ]).object);
+ }
+
+ static final _id_unregisterReceiver = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"unregisterReceiver",
+ r"(Landroid/content/BroadcastReceiver;)V");
+
+ /// from: public abstract void unregisterReceiver(android.content.BroadcastReceiver broadcastReceiver)
+ void unregisterReceiver(
+ jni.JObject broadcastReceiver,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_unregisterReceiver,
+ jni.JniCallType.voidType,
+ [broadcastReceiver.reference]).check();
+ }
+
+ static final _id_startService = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"startService",
+ r"(Landroid/content/Intent;)Landroid/content/ComponentName;");
+
+ /// from: public abstract android.content.ComponentName startService(android.content.Intent intent)
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject startService(
+ jni.JObject intent,
+ ) {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_startService,
+ jni.JniCallType.objectType,
+ [intent.reference]).object);
+ }
+
+ static final _id_startForegroundService = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"startForegroundService",
+ r"(Landroid/content/Intent;)Landroid/content/ComponentName;");
+
+ /// from: public abstract android.content.ComponentName startForegroundService(android.content.Intent intent)
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject startForegroundService(
+ jni.JObject intent,
+ ) {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_startForegroundService,
+ jni.JniCallType.objectType,
+ [intent.reference]).object);
+ }
+
+ static final _id_stopService = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"stopService", r"(Landroid/content/Intent;)Z");
+
+ /// from: public abstract boolean stopService(android.content.Intent intent)
+ bool stopService(
+ jni.JObject intent,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_stopService,
+ jni.JniCallType.booleanType, [intent.reference]).boolean;
+ }
+
+ static final _id_bindService = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"bindService",
+ r"(Landroid/content/Intent;Landroid/content/ServiceConnection;I)Z");
+
+ /// from: public abstract boolean bindService(android.content.Intent intent, android.content.ServiceConnection serviceConnection, int i)
+ bool bindService(
+ jni.JObject intent,
+ jni.JObject serviceConnection,
+ int i,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_bindService, jni.JniCallType.booleanType, [
+ intent.reference,
+ serviceConnection.reference,
+ jni.JValueInt(i)
+ ]).boolean;
+ }
+
+ static final _id_bindService1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"bindService",
+ r"(Landroid/content/Intent;Landroid/content/ServiceConnection;Landroid/content/Context$BindServiceFlags;)Z");
+
+ /// from: public boolean bindService(android.content.Intent intent, android.content.ServiceConnection serviceConnection, android.content.Context$BindServiceFlags bindServiceFlags)
+ bool bindService1(
+ jni.JObject intent,
+ jni.JObject serviceConnection,
+ Context_BindServiceFlags bindServiceFlags,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_bindService1, jni.JniCallType.booleanType, [
+ intent.reference,
+ serviceConnection.reference,
+ bindServiceFlags.reference
+ ]).boolean;
+ }
+
+ static final _id_bindService2 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"bindService",
+ r"(Landroid/content/Intent;ILjava/util/concurrent/Executor;Landroid/content/ServiceConnection;)Z");
+
+ /// from: public boolean bindService(android.content.Intent intent, int i, java.util.concurrent.Executor executor, android.content.ServiceConnection serviceConnection)
+ bool bindService2(
+ jni.JObject intent,
+ int i,
+ jni.JObject executor,
+ jni.JObject serviceConnection,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_bindService2, jni.JniCallType.booleanType, [
+ intent.reference,
+ jni.JValueInt(i),
+ executor.reference,
+ serviceConnection.reference
+ ]).boolean;
+ }
+
+ static final _id_bindService3 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"bindService",
+ r"(Landroid/content/Intent;Landroid/content/Context$BindServiceFlags;Ljava/util/concurrent/Executor;Landroid/content/ServiceConnection;)Z");
+
+ /// from: public boolean bindService(android.content.Intent intent, android.content.Context$BindServiceFlags bindServiceFlags, java.util.concurrent.Executor executor, android.content.ServiceConnection serviceConnection)
+ bool bindService3(
+ jni.JObject intent,
+ Context_BindServiceFlags bindServiceFlags,
+ jni.JObject executor,
+ jni.JObject serviceConnection,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_bindService3, jni.JniCallType.booleanType, [
+ intent.reference,
+ bindServiceFlags.reference,
+ executor.reference,
+ serviceConnection.reference
+ ]).boolean;
+ }
+
+ static final _id_bindIsolatedService = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"bindIsolatedService",
+ r"(Landroid/content/Intent;ILjava/lang/String;Ljava/util/concurrent/Executor;Landroid/content/ServiceConnection;)Z");
+
+ /// 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(
+ jni.JObject intent,
+ int i,
+ jni.JString string,
+ jni.JObject executor,
+ jni.JObject serviceConnection,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_bindIsolatedService, jni.JniCallType.booleanType, [
+ intent.reference,
+ jni.JValueInt(i),
+ string.reference,
+ executor.reference,
+ serviceConnection.reference
+ ]).boolean;
+ }
+
+ static final _id_bindIsolatedService1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"bindIsolatedService",
+ r"(Landroid/content/Intent;Landroid/content/Context$BindServiceFlags;Ljava/lang/String;Ljava/util/concurrent/Executor;Landroid/content/ServiceConnection;)Z");
+
+ /// from: public boolean bindIsolatedService(android.content.Intent intent, android.content.Context$BindServiceFlags bindServiceFlags, java.lang.String string, java.util.concurrent.Executor executor, android.content.ServiceConnection serviceConnection)
+ bool bindIsolatedService1(
+ jni.JObject intent,
+ Context_BindServiceFlags bindServiceFlags,
+ jni.JString string,
+ jni.JObject executor,
+ jni.JObject serviceConnection,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_bindIsolatedService1, jni.JniCallType.booleanType, [
+ intent.reference,
+ bindServiceFlags.reference,
+ string.reference,
+ executor.reference,
+ serviceConnection.reference
+ ]).boolean;
+ }
+
+ static final _id_bindServiceAsUser = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"bindServiceAsUser",
+ r"(Landroid/content/Intent;Landroid/content/ServiceConnection;ILandroid/os/UserHandle;)Z");
+
+ /// from: public boolean bindServiceAsUser(android.content.Intent intent, android.content.ServiceConnection serviceConnection, int i, android.os.UserHandle userHandle)
+ bool bindServiceAsUser(
+ jni.JObject intent,
+ jni.JObject serviceConnection,
+ int i,
+ jni.JObject userHandle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_bindServiceAsUser, jni.JniCallType.booleanType, [
+ intent.reference,
+ serviceConnection.reference,
+ jni.JValueInt(i),
+ userHandle.reference
+ ]).boolean;
+ }
+
+ static final _id_bindServiceAsUser1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"bindServiceAsUser",
+ r"(Landroid/content/Intent;Landroid/content/ServiceConnection;Landroid/content/Context$BindServiceFlags;Landroid/os/UserHandle;)Z");
+
+ /// from: public boolean bindServiceAsUser(android.content.Intent intent, android.content.ServiceConnection serviceConnection, android.content.Context$BindServiceFlags bindServiceFlags, android.os.UserHandle userHandle)
+ bool bindServiceAsUser1(
+ jni.JObject intent,
+ jni.JObject serviceConnection,
+ Context_BindServiceFlags bindServiceFlags,
+ jni.JObject userHandle,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_bindServiceAsUser1, jni.JniCallType.booleanType, [
+ intent.reference,
+ serviceConnection.reference,
+ bindServiceFlags.reference,
+ userHandle.reference
+ ]).boolean;
+ }
+
+ static final _id_updateServiceGroup = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"updateServiceGroup",
+ r"(Landroid/content/ServiceConnection;II)V");
+
+ /// from: public void updateServiceGroup(android.content.ServiceConnection serviceConnection, int i, int i1)
+ void updateServiceGroup(
+ jni.JObject serviceConnection,
+ int i,
+ int i1,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_updateServiceGroup, jni.JniCallType.voidType, [
+ serviceConnection.reference,
+ jni.JValueInt(i),
+ jni.JValueInt(i1)
+ ]).check();
+ }
+
+ static final _id_unbindService = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"unbindService",
+ r"(Landroid/content/ServiceConnection;)V");
+
+ /// from: public abstract void unbindService(android.content.ServiceConnection serviceConnection)
+ void unbindService(
+ jni.JObject serviceConnection,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(reference, _id_unbindService,
+ jni.JniCallType.voidType, [serviceConnection.reference]).check();
+ }
+
+ static final _id_startInstrumentation = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"startInstrumentation",
+ r"(Landroid/content/ComponentName;Ljava/lang/String;Landroid/os/Bundle;)Z");
+
+ /// 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,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_startInstrumentation,
+ jni.JniCallType.booleanType,
+ [componentName.reference, string.reference, bundle.reference]).boolean;
+ }
+
+ static final _id_getSystemService = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"getSystemService",
+ r"(Ljava/lang/String;)Ljava/lang/Object;");
+
+ /// from: public abstract java.lang.Object getSystemService(java.lang.String string)
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getSystemService(
+ jni.JString string,
+ ) {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getSystemService,
+ jni.JniCallType.objectType,
+ [string.reference]).object);
+ }
+
+ static final _id_getSystemService1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"getSystemService",
+ r"(Ljava/lang/Class;)Ljava/lang/Object;");
+
+ /// from: public final T getSystemService(java.lang.Class class)
+ /// 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(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getSystemService1,
+ jni.JniCallType.objectType,
+ [class0.reference]).object);
+ }
+
+ static final _id_getSystemServiceName = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"getSystemServiceName",
+ r"(Ljava/lang/Class;)Ljava/lang/String;");
+
+ /// from: public abstract java.lang.String getSystemServiceName(java.lang.Class class)
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JString getSystemServiceName(
+ jni.JObject class0,
+ ) {
+ return const jni.JStringType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_getSystemServiceName,
+ jni.JniCallType.objectType,
+ [class0.reference]).object);
+ }
+
+ static final _id_checkPermission = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"checkPermission", r"(Ljava/lang/String;II)I");
+
+ /// from: public abstract int checkPermission(java.lang.String string, int i, int i1)
+ int checkPermission(
+ jni.JString string,
+ int i,
+ int i1,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_checkPermission,
+ jni.JniCallType.intType,
+ [string.reference, jni.JValueInt(i), jni.JValueInt(i1)]).integer;
+ }
+
+ static final _id_checkCallingPermission = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"checkCallingPermission", r"(Ljava/lang/String;)I");
+
+ /// from: public abstract int checkCallingPermission(java.lang.String string)
+ int checkCallingPermission(
+ jni.JString string,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_checkCallingPermission,
+ jni.JniCallType.intType,
+ [string.reference]).integer;
+ }
+
+ static final _id_checkCallingOrSelfPermission = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"checkCallingOrSelfPermission",
+ r"(Ljava/lang/String;)I");
+
+ /// from: public abstract int checkCallingOrSelfPermission(java.lang.String string)
+ int checkCallingOrSelfPermission(
+ jni.JString string,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_checkCallingOrSelfPermission,
+ jni.JniCallType.intType,
+ [string.reference]).integer;
+ }
+
+ static final _id_checkSelfPermission = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"checkSelfPermission", r"(Ljava/lang/String;)I");
+
+ /// from: public abstract int checkSelfPermission(java.lang.String string)
+ int checkSelfPermission(
+ jni.JString string,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_checkSelfPermission,
+ jni.JniCallType.intType,
+ [string.reference]).integer;
+ }
+
+ static final _id_enforcePermission = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"enforcePermission",
+ r"(Ljava/lang/String;IILjava/lang/String;)V");
+
+ /// 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,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_enforcePermission, jni.JniCallType.voidType, [
+ string.reference,
+ jni.JValueInt(i),
+ jni.JValueInt(i1),
+ string1.reference
+ ]).check();
+ }
+
+ static final _id_enforceCallingPermission = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"enforceCallingPermission",
+ r"(Ljava/lang/String;Ljava/lang/String;)V");
+
+ /// from: public abstract void enforceCallingPermission(java.lang.String string, java.lang.String string1)
+ void enforceCallingPermission(
+ jni.JString string,
+ jni.JString string1,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_enforceCallingPermission,
+ jni.JniCallType.voidType,
+ [string.reference, string1.reference]).check();
+ }
+
+ static final _id_enforceCallingOrSelfPermission = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"enforceCallingOrSelfPermission",
+ r"(Ljava/lang/String;Ljava/lang/String;)V");
+
+ /// from: public abstract void enforceCallingOrSelfPermission(java.lang.String string, java.lang.String string1)
+ void enforceCallingOrSelfPermission(
+ jni.JString string,
+ jni.JString string1,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_enforceCallingOrSelfPermission,
+ jni.JniCallType.voidType,
+ [string.reference, string1.reference]).check();
+ }
+
+ static final _id_grantUriPermission = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"grantUriPermission",
+ r"(Ljava/lang/String;Landroid/net/Uri;I)V");
+
+ /// 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,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_grantUriPermission,
+ jni.JniCallType.voidType,
+ [string.reference, uri.reference, jni.JValueInt(i)]).check();
+ }
+
+ static final _id_revokeUriPermission = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"revokeUriPermission", r"(Landroid/net/Uri;I)V");
+
+ /// from: public abstract void revokeUriPermission(android.net.Uri uri, int i)
+ void revokeUriPermission(
+ jni.JObject uri,
+ int i,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_revokeUriPermission,
+ jni.JniCallType.voidType,
+ [uri.reference, jni.JValueInt(i)]).check();
+ }
+
+ static final _id_revokeUriPermission1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"revokeUriPermission",
+ r"(Ljava/lang/String;Landroid/net/Uri;I)V");
+
+ /// 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,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_revokeUriPermission1,
+ jni.JniCallType.voidType,
+ [string.reference, uri.reference, jni.JValueInt(i)]).check();
+ }
+
+ static final _id_checkUriPermission = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"checkUriPermission", r"(Landroid/net/Uri;III)I");
+
+ /// 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,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_checkUriPermission, jni.JniCallType.intType, [
+ uri.reference,
+ jni.JValueInt(i),
+ jni.JValueInt(i1),
+ jni.JValueInt(i2)
+ ]).integer;
+ }
+
+ static final _id_checkUriPermissions = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"checkUriPermissions", r"(Ljava/util/List;III)[I");
+
+ /// from: public java.lang.Object[] checkUriPermissions(java.util.List list, int i, int i1, int i2)
+ /// 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(jni.Jni.accessors
+ .callMethodWithArgs(
+ reference, _id_checkUriPermissions, jni.JniCallType.objectType, [
+ list.reference,
+ jni.JValueInt(i),
+ jni.JValueInt(i1),
+ jni.JValueInt(i2)
+ ]).object);
+ }
+
+ static final _id_checkCallingUriPermission = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"checkCallingUriPermission", r"(Landroid/net/Uri;I)I");
+
+ /// from: public abstract int checkCallingUriPermission(android.net.Uri uri, int i)
+ int checkCallingUriPermission(
+ jni.JObject uri,
+ int i,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_checkCallingUriPermission,
+ jni.JniCallType.intType,
+ [uri.reference, jni.JValueInt(i)]).integer;
+ }
+
+ static final _id_checkCallingUriPermissions = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"checkCallingUriPermissions",
+ r"(Ljava/util/List;I)[I");
+
+ /// from: public java.lang.Object[] checkCallingUriPermissions(java.util.List list, int i)
+ /// 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(jni.Jni.accessors
+ .callMethodWithArgs(
+ reference,
+ _id_checkCallingUriPermissions,
+ jni.JniCallType.objectType,
+ [list.reference, jni.JValueInt(i)]).object);
+ }
+
+ static final _id_checkCallingOrSelfUriPermission = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"checkCallingOrSelfUriPermission",
+ r"(Landroid/net/Uri;I)I");
+
+ /// from: public abstract int checkCallingOrSelfUriPermission(android.net.Uri uri, int i)
+ int checkCallingOrSelfUriPermission(
+ jni.JObject uri,
+ int i,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_checkCallingOrSelfUriPermission,
+ jni.JniCallType.intType,
+ [uri.reference, jni.JValueInt(i)]).integer;
+ }
+
+ static final _id_checkCallingOrSelfUriPermissions = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"checkCallingOrSelfUriPermissions",
+ r"(Ljava/util/List;I)[I");
+
+ /// from: public java.lang.Object[] checkCallingOrSelfUriPermissions(java.util.List list, int i)
+ /// 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(jni.Jni.accessors
+ .callMethodWithArgs(
+ reference,
+ _id_checkCallingOrSelfUriPermissions,
+ jni.JniCallType.objectType,
+ [list.reference, jni.JValueInt(i)]).object);
+ }
+
+ static final _id_checkUriPermission1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"checkUriPermission",
+ r"(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;III)I");
+
+ /// 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,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_checkUriPermission1, jni.JniCallType.intType, [
+ uri.reference,
+ string.reference,
+ string1.reference,
+ jni.JValueInt(i),
+ jni.JValueInt(i1),
+ jni.JValueInt(i2)
+ ]).integer;
+ }
+
+ static final _id_enforceUriPermission = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"enforceUriPermission",
+ r"(Landroid/net/Uri;IIILjava/lang/String;)V");
+
+ /// 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,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_enforceUriPermission, jni.JniCallType.voidType, [
+ uri.reference,
+ jni.JValueInt(i),
+ jni.JValueInt(i1),
+ jni.JValueInt(i2),
+ string.reference
+ ]).check();
+ }
+
+ static final _id_enforceCallingUriPermission = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"enforceCallingUriPermission",
+ r"(Landroid/net/Uri;ILjava/lang/String;)V");
+
+ /// 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,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_enforceCallingUriPermission,
+ jni.JniCallType.voidType,
+ [uri.reference, jni.JValueInt(i), string.reference]).check();
+ }
+
+ static final _id_enforceCallingOrSelfUriPermission = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"enforceCallingOrSelfUriPermission",
+ r"(Landroid/net/Uri;ILjava/lang/String;)V");
+
+ /// 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,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_enforceCallingOrSelfUriPermission,
+ jni.JniCallType.voidType,
+ [uri.reference, jni.JValueInt(i), string.reference]).check();
+ }
+
+ static final _id_enforceUriPermission1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"enforceUriPermission",
+ r"(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;IIILjava/lang/String;)V");
+
+ /// 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,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_enforceUriPermission1, jni.JniCallType.voidType, [
+ uri.reference,
+ string.reference,
+ string1.reference,
+ jni.JValueInt(i),
+ jni.JValueInt(i1),
+ jni.JValueInt(i2),
+ string2.reference
+ ]).check();
+ }
+
+ static final _id_revokeSelfPermissionOnKill = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"revokeSelfPermissionOnKill",
+ r"(Ljava/lang/String;)V");
+
+ /// from: public void revokeSelfPermissionOnKill(java.lang.String string)
+ void revokeSelfPermissionOnKill(
+ jni.JString string,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_revokeSelfPermissionOnKill,
+ jni.JniCallType.voidType,
+ [string.reference]).check();
+ }
+
+ static final _id_revokeSelfPermissionsOnKill = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"revokeSelfPermissionsOnKill",
+ r"(Ljava/util/Collection;)V");
+
+ /// from: public void revokeSelfPermissionsOnKill(java.util.Collection collection)
+ void revokeSelfPermissionsOnKill(
+ jni.JObject collection,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_revokeSelfPermissionsOnKill,
+ jni.JniCallType.voidType,
+ [collection.reference]).check();
+ }
+
+ static final _id_createPackageContext = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"createPackageContext",
+ r"(Ljava/lang/String;I)Landroid/content/Context;");
+
+ /// from: public abstract android.content.Context createPackageContext(java.lang.String string, int i)
+ /// The returned object must be released after use, by calling the [release] method.
+ Context createPackageContext(
+ jni.JString string,
+ int i,
+ ) {
+ return const $ContextType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_createPackageContext,
+ jni.JniCallType.objectType,
+ [string.reference, jni.JValueInt(i)]).object);
+ }
+
+ static final _id_createContextForSplit = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"createContextForSplit",
+ r"(Ljava/lang/String;)Landroid/content/Context;");
+
+ /// from: public abstract android.content.Context createContextForSplit(java.lang.String string)
+ /// The returned object must be released after use, by calling the [release] method.
+ Context createContextForSplit(
+ jni.JString string,
+ ) {
+ return const $ContextType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_createContextForSplit,
+ jni.JniCallType.objectType,
+ [string.reference]).object);
+ }
+
+ static final _id_createConfigurationContext = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"createConfigurationContext",
+ r"(Landroid/content/res/Configuration;)Landroid/content/Context;");
+
+ /// from: public abstract android.content.Context createConfigurationContext(android.content.res.Configuration configuration)
+ /// The returned object must be released after use, by calling the [release] method.
+ Context createConfigurationContext(
+ jni.JObject configuration,
+ ) {
+ return const $ContextType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_createConfigurationContext,
+ jni.JniCallType.objectType,
+ [configuration.reference]).object);
+ }
+
+ static final _id_createDisplayContext = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"createDisplayContext",
+ r"(Landroid/view/Display;)Landroid/content/Context;");
+
+ /// from: public abstract android.content.Context createDisplayContext(android.view.Display display)
+ /// The returned object must be released after use, by calling the [release] method.
+ Context createDisplayContext(
+ jni.JObject display,
+ ) {
+ return const $ContextType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_createDisplayContext,
+ jni.JniCallType.objectType,
+ [display.reference]).object);
+ }
+
+ static final _id_createDeviceContext = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"createDeviceContext",
+ r"(I)Landroid/content/Context;");
+
+ /// from: public android.content.Context createDeviceContext(int i)
+ /// The returned object must be released after use, by calling the [release] method.
+ Context createDeviceContext(
+ int i,
+ ) {
+ return const $ContextType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_createDeviceContext,
+ jni.JniCallType.objectType,
+ [jni.JValueInt(i)]).object);
+ }
+
+ static final _id_createWindowContext = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"createWindowContext",
+ r"(ILandroid/os/Bundle;)Landroid/content/Context;");
+
+ /// from: public android.content.Context createWindowContext(int i, android.os.Bundle bundle)
+ /// The returned object must be released after use, by calling the [release] method.
+ Context createWindowContext(
+ int i,
+ jni.JObject bundle,
+ ) {
+ return const $ContextType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_createWindowContext,
+ jni.JniCallType.objectType,
+ [jni.JValueInt(i), bundle.reference]).object);
+ }
+
+ static final _id_createWindowContext1 = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"createWindowContext",
+ r"(Landroid/view/Display;ILandroid/os/Bundle;)Landroid/content/Context;");
+
+ /// from: public android.content.Context createWindowContext(android.view.Display display, int i, android.os.Bundle bundle)
+ /// The returned object must be released after use, by calling the [release] method.
+ Context createWindowContext1(
+ jni.JObject display,
+ int i,
+ jni.JObject bundle,
+ ) {
+ return const $ContextType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_createWindowContext1,
+ jni.JniCallType.objectType,
+ [display.reference, jni.JValueInt(i), bundle.reference]).object);
+ }
+
+ static final _id_createContext = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"createContext",
+ r"(Landroid/content/ContextParams;)Landroid/content/Context;");
+
+ /// from: public android.content.Context createContext(android.content.ContextParams contextParams)
+ /// The returned object must be released after use, by calling the [release] method.
+ Context createContext(
+ jni.JObject contextParams,
+ ) {
+ return const $ContextType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_createContext,
+ jni.JniCallType.objectType,
+ [contextParams.reference]).object);
+ }
+
+ static final _id_createAttributionContext = jni.Jni.accessors.getMethodIDOf(
+ _class.reference,
+ r"createAttributionContext",
+ r"(Ljava/lang/String;)Landroid/content/Context;");
+
+ /// from: public android.content.Context createAttributionContext(java.lang.String string)
+ /// The returned object must be released after use, by calling the [release] method.
+ Context createAttributionContext(
+ jni.JString string,
+ ) {
+ return const $ContextType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_createAttributionContext,
+ jni.JniCallType.objectType,
+ [string.reference]).object);
+ }
+
+ static final _id_createDeviceProtectedStorageContext = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"createDeviceProtectedStorageContext",
+ r"()Landroid/content/Context;");
+
+ /// from: public abstract android.content.Context createDeviceProtectedStorageContext()
+ /// The returned object must be released after use, by calling the [release] method.
+ Context createDeviceProtectedStorageContext() {
+ return const $ContextType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_createDeviceProtectedStorageContext,
+ jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getDisplay = jni.Jni.accessors.getMethodIDOf(
+ _class.reference, r"getDisplay", r"()Landroid/view/Display;");
+
+ /// from: public android.view.Display getDisplay()
+ /// The returned object must be released after use, by calling the [release] method.
+ jni.JObject getDisplay() {
+ return const jni.JObjectType().fromRef(jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_getDisplay, jni.JniCallType.objectType, []).object);
+ }
+
+ static final _id_getDeviceId =
+ jni.Jni.accessors.getMethodIDOf(_class.reference, r"getDeviceId", r"()I");
+
+ /// from: public int getDeviceId()
+ int getDeviceId() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_getDeviceId, jni.JniCallType.intType, []).integer;
+ }
+
+ static final _id_registerDeviceIdChangeListener = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"registerDeviceIdChangeListener",
+ r"(Ljava/util/concurrent/Executor;Ljava/util/function/IntConsumer;)V");
+
+ /// from: public void registerDeviceIdChangeListener(java.util.concurrent.Executor executor, java.util.function.IntConsumer intConsumer)
+ void registerDeviceIdChangeListener(
+ jni.JObject executor,
+ jni.JObject intConsumer,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_registerDeviceIdChangeListener,
+ jni.JniCallType.voidType,
+ [executor.reference, intConsumer.reference]).check();
+ }
+
+ static final _id_unregisterDeviceIdChangeListener = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"unregisterDeviceIdChangeListener",
+ r"(Ljava/util/function/IntConsumer;)V");
+
+ /// from: public void unregisterDeviceIdChangeListener(java.util.function.IntConsumer intConsumer)
+ void unregisterDeviceIdChangeListener(
+ jni.JObject intConsumer,
+ ) {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference,
+ _id_unregisterDeviceIdChangeListener,
+ jni.JniCallType.voidType,
+ [intConsumer.reference]).check();
+ }
+
+ static final _id_isRestricted = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"isRestricted", r"()Z");
+
+ /// from: public boolean isRestricted()
+ bool isRestricted() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_isRestricted, jni.JniCallType.booleanType, []).boolean;
+ }
+
+ static final _id_isDeviceProtectedStorage = jni.Jni.accessors
+ .getMethodIDOf(_class.reference, r"isDeviceProtectedStorage", r"()Z");
+
+ /// from: public abstract boolean isDeviceProtectedStorage()
+ bool isDeviceProtectedStorage() {
+ return jni.Jni.accessors.callMethodWithArgs(reference,
+ _id_isDeviceProtectedStorage, jni.JniCallType.booleanType, []).boolean;
+ }
+
+ static final _id_isUiContext =
+ jni.Jni.accessors.getMethodIDOf(_class.reference, r"isUiContext", r"()Z");
+
+ /// from: public boolean isUiContext()
+ bool isUiContext() {
+ return jni.Jni.accessors.callMethodWithArgs(
+ reference, _id_isUiContext, jni.JniCallType.booleanType, []).boolean;
+ }
+}
+
+final class $ContextType extends jni.JObjType {
+ const $ContextType();
+
+ @override
+ String get signature => r"Landroid/content/Context;";
+
+ @override
+ Context fromRef(jni.JObjectPtr ref) => Context.fromRef(ref);
+
+ @override
+ jni.JObjType get superType => const jni.JObjectType();
+
+ @override
+ final superCount = 1;
+
+ @override
+ int get hashCode => ($ContextType).hashCode;
+
+ @override
+ bool operator ==(Object other) {
+ return other.runtimeType == ($ContextType) && other is $ContextType;
+ }
+}
diff --git a/packages/native/storage/lib/src/native/darwin/core_foundation.ffi.dart b/packages/native/storage/lib/src/native/darwin/core_foundation.ffi.dart
new file mode 100644
index 00000000..48ee9279
--- /dev/null
+++ b/packages/native/storage/lib/src/native/darwin/core_foundation.ffi.dart
@@ -0,0 +1,1231 @@
+// ignore_for_file: type=lint
+// ignore_for_file: return_of_invalid_type
+// ignore_for_file: unnecessary_non_null_assertion
+
+// AUTO GENERATED FILE, DO NOT EDIT.
+//
+// Generated by `package:ffigen`.
+import 'dart:ffi' as ffi;
+
+@ffi.Native()
+external double kCFCoreFoundationVersionNumber;
+
+/// Constant used by some functions to indicate failed searches.
+@ffi.Native()
+external final int kCFNotFound;
+
+/// the singleton null instance
+@ffi.Native()
+external final CFNullRef kCFNull;
+
+/// This is a synonym for NULL, if you'd rather use a named constant.
+@ffi.Native()
+external final CFAllocatorRef kCFAllocatorDefault;
+
+/// Default system allocator; you rarely need to use this.
+@ffi.Native()
+external final CFAllocatorRef kCFAllocatorSystemDefault;
+
+/// This allocator uses malloc(), realloc(), and free(). This should not be
+/// generally used; stick to kCFAllocatorDefault whenever possible. This
+/// allocator is useful as the "bytesDeallocator" in CFData or
+/// "contentsDeallocator" in CFString where the memory was obtained as a
+/// result of malloc() type functions.
+@ffi.Native()
+external final CFAllocatorRef kCFAllocatorMalloc;
+
+/// This allocator explicitly uses the default malloc zone, returned by
+/// malloc_default_zone(). It should only be used when an object is
+/// safe to be allocated in non-scanned memory.
+@ffi.Native()
+external final CFAllocatorRef kCFAllocatorMallocZone;
+
+/// Null allocator which does nothing and allocates no memory. This allocator
+/// is useful as the "bytesDeallocator" in CFData or "contentsDeallocator"
+/// in CFString where the memory should not be freed.
+@ffi.Native()
+external final CFAllocatorRef kCFAllocatorNull;
+
+/// Special allocator argument to CFAllocatorCreate() which means
+/// "use the functions given in the context to allocate the allocator
+/// itself as well".
+@ffi.Native()
+external final CFAllocatorRef kCFAllocatorUseContext;
+
+@ffi.Native()
+external void CFRelease(
+ CFTypeRef cf,
+);
+
+/// !
+/// @constant kCFTypeDictionaryKeyCallBacks
+/// Predefined CFDictionaryKeyCallBacks structure containing a
+/// set of callbacks appropriate for use when the keys of a
+/// CFDictionary are all CFTypes.
+@ffi.Native()
+external final CFDictionaryKeyCallBacks kCFTypeDictionaryKeyCallBacks;
+
+/// !
+/// @constant kCFCopyStringDictionaryKeyCallBacks
+/// Predefined CFDictionaryKeyCallBacks structure containing a
+/// set of callbacks appropriate for use when the keys of a
+/// CFDictionary are all CFStrings, which may be mutable and
+/// need to be copied in order to serve as constant keys for
+/// the values in the dictionary.
+@ffi.Native()
+external final CFDictionaryKeyCallBacks kCFCopyStringDictionaryKeyCallBacks;
+
+/// !
+/// @constant kCFTypeDictionaryValueCallBacks
+/// Predefined CFDictionaryValueCallBacks structure containing a set
+/// of callbacks appropriate for use when the values in a CFDictionary
+/// are all CFTypes.
+@ffi.Native()
+external final CFDictionaryValueCallBacks kCFTypeDictionaryValueCallBacks;
+
+/// !
+/// @function CFDictionaryGetTypeID
+/// Returns the type identifier of all CFDictionary instances.
+@ffi.Native()
+external int CFDictionaryGetTypeID();
+
+/// !
+/// @function CFDictionaryCreate
+/// Creates a new immutable dictionary with the given values.
+/// @param allocator The CFAllocator which should be used to allocate
+/// memory for the dictionary and its storage for values. This
+/// parameter may be NULL in which case the current default
+/// CFAllocator is used. If this reference is not a valid
+/// CFAllocator, the behavior is undefined.
+/// @param keys A C array of the pointer-sized keys to be used for
+/// the parallel C array of values to be put into the dictionary.
+/// This parameter may be NULL if the numValues parameter is 0.
+/// This C array is not changed or freed by this function. If
+/// this parameter is not a valid pointer to a C array of at
+/// least numValues pointers, the behavior is undefined.
+/// @param values A C array of the pointer-sized values to be in the
+/// dictionary. This parameter may be NULL if the numValues
+/// parameter is 0. This C array is not changed or freed by
+/// this function. If this parameter is not a valid pointer to
+/// a C array of at least numValues pointers, the behavior is
+/// undefined.
+/// @param numValues The number of values to copy from the keys and
+/// values C arrays into the CFDictionary. This number will be
+/// the count of the dictionary. If this parameter is
+/// negative, or greater than the number of values actually
+/// in the keys or values C arrays, the behavior is undefined.
+/// @param keyCallBacks A pointer to a CFDictionaryKeyCallBacks structure
+/// initialized with the callbacks for the dictionary to use on
+/// each key in the dictionary. The retain callback will be used
+/// within this function, for example, to retain all of the new
+/// keys from the keys C array. A copy of the contents of the
+/// callbacks structure is made, so that a pointer to a structure
+/// on the stack can be passed in, or can be reused for multiple
+/// dictionary creations. If the version field of this
+/// callbacks structure is not one of the defined ones for
+/// CFDictionary, the behavior is undefined. The retain field may
+/// be NULL, in which case the CFDictionary will do nothing to add
+/// a retain to the keys of the contained values. The release field
+/// may be NULL, in which case the CFDictionary will do nothing
+/// to remove the dictionary's retain (if any) on the keys when the
+/// dictionary is destroyed or a key-value pair is removed. If the
+/// copyDescription field is NULL, the dictionary will create a
+/// simple description for a key. If the equal field is NULL, the
+/// dictionary will use pointer equality to test for equality of
+/// keys. If the hash field is NULL, a key will be converted from
+/// a pointer to an integer to compute the hash code. This callbacks
+/// parameter itself may be NULL, which is treated as if a valid
+/// structure of version 0 with all fields NULL had been passed in.
+/// Otherwise, if any of the fields are not valid pointers to
+/// functions of the correct type, or this parameter is not a
+/// valid pointer to a CFDictionaryKeyCallBacks callbacks structure,
+/// the behavior is undefined. If any of the keys put into the
+/// dictionary is not one understood by one of the callback functions
+/// the behavior when that callback function is used is undefined.
+/// @param valueCallBacks A pointer to a CFDictionaryValueCallBacks structure
+/// initialized with the callbacks for the dictionary to use on
+/// each value in the dictionary. The retain callback will be used
+/// within this function, for example, to retain all of the new
+/// values from the values C array. A copy of the contents of the
+/// callbacks structure is made, so that a pointer to a structure
+/// on the stack can be passed in, or can be reused for multiple
+/// dictionary creations. If the version field of this callbacks
+/// structure is not one of the defined ones for CFDictionary, the
+/// behavior is undefined. The retain field may be NULL, in which
+/// case the CFDictionary will do nothing to add a retain to values
+/// as they are put into the dictionary. The release field may be
+/// NULL, in which case the CFDictionary will do nothing to remove
+/// the dictionary's retain (if any) on the values when the
+/// dictionary is destroyed or a key-value pair is removed. If the
+/// copyDescription field is NULL, the dictionary will create a
+/// simple description for a value. If the equal field is NULL, the
+/// dictionary will use pointer equality to test for equality of
+/// values. This callbacks parameter itself may be NULL, which is
+/// treated as if a valid structure of version 0 with all fields
+/// NULL had been passed in. Otherwise,
+/// if any of the fields are not valid pointers to functions
+/// of the correct type, or this parameter is not a valid
+/// pointer to a CFDictionaryValueCallBacks callbacks structure,
+/// the behavior is undefined. If any of the values put into the
+/// dictionary is not one understood by one of the callback functions
+/// the behavior when that callback function is used is undefined.
+/// @result A reference to the new immutable CFDictionary.
+@ffi.Native<
+ CFDictionaryRef Function(
+ CFAllocatorRef,
+ ffi.Pointer>,
+ ffi.Pointer>,
+ CFIndex,
+ ffi.Pointer,
+ ffi.Pointer)>()
+external CFDictionaryRef CFDictionaryCreate(
+ CFAllocatorRef allocator,
+ ffi.Pointer> keys,
+ ffi.Pointer> values,
+ int numValues,
+ ffi.Pointer keyCallBacks,
+ ffi.Pointer valueCallBacks,
+);
+
+/// !
+/// @function CFDictionaryCreateCopy
+/// Creates a new immutable dictionary with the key-value pairs from
+/// the given dictionary.
+/// @param allocator The CFAllocator which should be used to allocate
+/// memory for the dictionary and its storage for values. This
+/// parameter may be NULL in which case the current default
+/// CFAllocator is used. If this reference is not a valid
+/// CFAllocator, the behavior is undefined.
+/// @param theDict The dictionary which is to be copied. The keys and values
+/// from the dictionary are copied as pointers into the new
+/// dictionary (that is, the values themselves are copied, not
+/// that which the values point to, if anything). However, the
+/// keys and values are also retained by the new dictionary using
+/// the retain function of the original dictionary.
+/// The count of the new dictionary will be the same as the
+/// given dictionary. The new dictionary uses the same callbacks
+/// as the dictionary to be copied. If this parameter is
+/// not a valid CFDictionary, the behavior is undefined.
+/// @result A reference to the new immutable CFDictionary.
+@ffi.Native()
+external CFDictionaryRef CFDictionaryCreateCopy(
+ CFAllocatorRef allocator,
+ CFDictionaryRef theDict,
+);
+
+/// !
+/// @function CFDictionaryCreateMutable
+/// Creates a new mutable dictionary.
+/// @param allocator The CFAllocator which should be used to allocate
+/// memory for the dictionary and its storage for values. This
+/// parameter may be NULL in which case the current default
+/// CFAllocator is used. If this reference is not a valid
+/// CFAllocator, the behavior is undefined.
+/// @param capacity A hint about the number of values that will be held
+/// by the CFDictionary. Pass 0 for no hint. The implementation may
+/// ignore this hint, or may use it to optimize various
+/// operations. A dictionary's actual capacity is only limited by
+/// address space and available memory constraints). If this
+/// parameter is negative, the behavior is undefined.
+/// @param keyCallBacks A pointer to a CFDictionaryKeyCallBacks structure
+/// initialized with the callbacks for the dictionary to use on
+/// each key in the dictionary. A copy of the contents of the
+/// callbacks structure is made, so that a pointer to a structure
+/// on the stack can be passed in, or can be reused for multiple
+/// dictionary creations. If the version field of this
+/// callbacks structure is not one of the defined ones for
+/// CFDictionary, the behavior is undefined. The retain field may
+/// be NULL, in which case the CFDictionary will do nothing to add
+/// a retain to the keys of the contained values. The release field
+/// may be NULL, in which case the CFDictionary will do nothing
+/// to remove the dictionary's retain (if any) on the keys when the
+/// dictionary is destroyed or a key-value pair is removed. If the
+/// copyDescription field is NULL, the dictionary will create a
+/// simple description for a key. If the equal field is NULL, the
+/// dictionary will use pointer equality to test for equality of
+/// keys. If the hash field is NULL, a key will be converted from
+/// a pointer to an integer to compute the hash code. This callbacks
+/// parameter itself may be NULL, which is treated as if a valid
+/// structure of version 0 with all fields NULL had been passed in.
+/// Otherwise, if any of the fields are not valid pointers to
+/// functions of the correct type, or this parameter is not a
+/// valid pointer to a CFDictionaryKeyCallBacks callbacks structure,
+/// the behavior is undefined. If any of the keys put into the
+/// dictionary is not one understood by one of the callback functions
+/// the behavior when that callback function is used is undefined.
+/// @param valueCallBacks A pointer to a CFDictionaryValueCallBacks structure
+/// initialized with the callbacks for the dictionary to use on
+/// each value in the dictionary. The retain callback will be used
+/// within this function, for example, to retain all of the new
+/// values from the values C array. A copy of the contents of the
+/// callbacks structure is made, so that a pointer to a structure
+/// on the stack can be passed in, or can be reused for multiple
+/// dictionary creations. If the version field of this callbacks
+/// structure is not one of the defined ones for CFDictionary, the
+/// behavior is undefined. The retain field may be NULL, in which
+/// case the CFDictionary will do nothing to add a retain to values
+/// as they are put into the dictionary. The release field may be
+/// NULL, in which case the CFDictionary will do nothing to remove
+/// the dictionary's retain (if any) on the values when the
+/// dictionary is destroyed or a key-value pair is removed. If the
+/// copyDescription field is NULL, the dictionary will create a
+/// simple description for a value. If the equal field is NULL, the
+/// dictionary will use pointer equality to test for equality of
+/// values. This callbacks parameter itself may be NULL, which is
+/// treated as if a valid structure of version 0 with all fields
+/// NULL had been passed in. Otherwise,
+/// if any of the fields are not valid pointers to functions
+/// of the correct type, or this parameter is not a valid
+/// pointer to a CFDictionaryValueCallBacks callbacks structure,
+/// the behavior is undefined. If any of the values put into the
+/// dictionary is not one understood by one of the callback functions
+/// the behavior when that callback function is used is undefined.
+/// @result A reference to the new mutable CFDictionary.
+@ffi.Native<
+ CFMutableDictionaryRef Function(
+ CFAllocatorRef,
+ CFIndex,
+ ffi.Pointer,
+ ffi.Pointer)>()
+external CFMutableDictionaryRef CFDictionaryCreateMutable(
+ CFAllocatorRef allocator,
+ int capacity,
+ ffi.Pointer keyCallBacks,
+ ffi.Pointer valueCallBacks,
+);
+
+/// !
+/// @function CFDictionaryCreateMutableCopy
+/// Creates a new mutable dictionary with the key-value pairs from
+/// the given dictionary.
+/// @param allocator The CFAllocator which should be used to allocate
+/// memory for the dictionary and its storage for values. This
+/// parameter may be NULL in which case the current default
+/// CFAllocator is used. If this reference is not a valid
+/// CFAllocator, the behavior is undefined.
+/// @param capacity A hint about the number of values that will be held
+/// by the CFDictionary. Pass 0 for no hint. The implementation may
+/// ignore this hint, or may use it to optimize various
+/// operations. A dictionary's actual capacity is only limited by
+/// address space and available memory constraints).
+/// This parameter must be greater than or equal
+/// to the count of the dictionary which is to be copied, or the
+/// behavior is undefined. If this parameter is negative, the
+/// behavior is undefined.
+/// @param theDict The dictionary which is to be copied. The keys and values
+/// from the dictionary are copied as pointers into the new
+/// dictionary (that is, the values themselves are copied, not
+/// that which the values point to, if anything). However, the
+/// keys and values are also retained by the new dictionary using
+/// the retain function of the original dictionary.
+/// The count of the new dictionary will be the same as the
+/// given dictionary. The new dictionary uses the same callbacks
+/// as the dictionary to be copied. If this parameter is
+/// not a valid CFDictionary, the behavior is undefined.
+/// @result A reference to the new mutable CFDictionary.
+@ffi.Native<
+ CFMutableDictionaryRef Function(CFAllocatorRef, CFIndex, CFDictionaryRef)>()
+external CFMutableDictionaryRef CFDictionaryCreateMutableCopy(
+ CFAllocatorRef allocator,
+ int capacity,
+ CFDictionaryRef theDict,
+);
+
+/// !
+/// @function CFDictionaryGetCount
+/// Returns the number of values currently in the dictionary.
+/// @param theDict The dictionary to be queried. If this parameter is
+/// not a valid CFDictionary, the behavior is undefined.
+/// @result The number of values in the dictionary.
+@ffi.Native()
+external int CFDictionaryGetCount(
+ CFDictionaryRef theDict,
+);
+
+/// !
+/// @function CFDictionaryGetCountOfKey
+/// Counts the number of times the given key occurs in the dictionary.
+/// @param theDict The dictionary to be searched. If this parameter is
+/// not a valid CFDictionary, the behavior is undefined.
+/// @param key The key for which to find matches in the dictionary. The
+/// hash() and equal() key callbacks provided when the dictionary
+/// was created are used to compare. If the hash() key callback
+/// was NULL, the key is treated as a pointer and converted to
+/// an integer. If the equal() key callback was NULL, pointer
+/// equality (in C, ==) is used. If key, or any of the keys in
+/// the dictionary, are not understood by the equal() callback,
+/// the behavior is undefined.
+/// @result Returns 1 if a matching key is used by the dictionary,
+/// 0 otherwise.
+@ffi.Native)>()
+external int CFDictionaryGetCountOfKey(
+ CFDictionaryRef theDict,
+ ffi.Pointer key,
+);
+
+/// !
+/// @function CFDictionaryGetCountOfValue
+/// Counts the number of times the given value occurs in the dictionary.
+/// @param theDict The dictionary to be searched. If this parameter is
+/// not a valid CFDictionary, the behavior is undefined.
+/// @param value The value for which to find matches in the dictionary. The
+/// equal() callback provided when the dictionary was created is
+/// used to compare. If the equal() value callback was NULL, pointer
+/// equality (in C, ==) is used. If value, or any of the values in
+/// the dictionary, are not understood by the equal() callback,
+/// the behavior is undefined.
+/// @result The number of times the given value occurs in the dictionary.
+@ffi.Native)>()
+external int CFDictionaryGetCountOfValue(
+ CFDictionaryRef theDict,
+ ffi.Pointer value,
+);
+
+/// !
+/// @function CFDictionaryContainsKey
+/// Reports whether or not the key is in the dictionary.
+/// @param theDict The dictionary to be searched. If this parameter is
+/// not a valid CFDictionary, the behavior is undefined.
+/// @param key The key for which to find matches in the dictionary. The
+/// hash() and equal() key callbacks provided when the dictionary
+/// was created are used to compare. If the hash() key callback
+/// was NULL, the key is treated as a pointer and converted to
+/// an integer. If the equal() key callback was NULL, pointer
+/// equality (in C, ==) is used. If key, or any of the keys in
+/// the dictionary, are not understood by the equal() callback,
+/// the behavior is undefined.
+/// @result true, if the key is in the dictionary, otherwise false.
+@ffi.Native)>()
+external int CFDictionaryContainsKey(
+ CFDictionaryRef theDict,
+ ffi.Pointer key,
+);
+
+/// !
+/// @function CFDictionaryContainsValue
+/// Reports whether or not the value is in the dictionary.
+/// @param theDict The dictionary to be searched. If this parameter is
+/// not a valid CFDictionary, the behavior is undefined.
+/// @param value The value for which to find matches in the dictionary. The
+/// equal() callback provided when the dictionary was created is
+/// used to compare. If the equal() callback was NULL, pointer
+/// equality (in C, ==) is used. If value, or any of the values
+/// in the dictionary, are not understood by the equal() callback,
+/// the behavior is undefined.
+/// @result true, if the value is in the dictionary, otherwise false.
+@ffi.Native)>()
+external int CFDictionaryContainsValue(
+ CFDictionaryRef theDict,
+ ffi.Pointer value,
+);
+
+/// !
+/// @function CFDictionaryGetValue
+/// Retrieves the value associated with the given key.
+/// @param theDict The dictionary to be queried. If this parameter is
+/// not a valid CFDictionary, the behavior is undefined.
+/// @param key The key for which to find a match in the dictionary. The
+/// hash() and equal() key callbacks provided when the dictionary
+/// was created are used to compare. If the hash() key callback
+/// was NULL, the key is treated as a pointer and converted to
+/// an integer. If the equal() key callback was NULL, pointer
+/// equality (in C, ==) is used. If key, or any of the keys in
+/// the dictionary, are not understood by the equal() callback,
+/// the behavior is undefined.
+/// @result The value with the given key in the dictionary, or NULL if
+/// no key-value pair with a matching key exists. Since NULL
+/// can be a valid value in some dictionaries, the function
+/// CFDictionaryGetValueIfPresent() must be used to distinguish
+/// NULL-no-found from NULL-is-the-value.
+@ffi.Native<
+ ffi.Pointer Function(CFDictionaryRef, ffi.Pointer)>()
+external ffi.Pointer CFDictionaryGetValue(
+ CFDictionaryRef theDict,
+ ffi.Pointer key,
+);
+
+/// !
+/// @function CFDictionaryGetValueIfPresent
+/// Retrieves the value associated with the given key.
+/// @param theDict The dictionary to be queried. If this parameter is
+/// not a valid CFDictionary, the behavior is undefined.
+/// @param key The key for which to find a match in the dictionary. The
+/// hash() and equal() key callbacks provided when the dictionary
+/// was created are used to compare. If the hash() key callback
+/// was NULL, the key is treated as a pointer and converted to
+/// an integer. If the equal() key callback was NULL, pointer
+/// equality (in C, ==) is used. If key, or any of the keys in
+/// the dictionary, are not understood by the equal() callback,
+/// the behavior is undefined.
+/// @param value A pointer to memory which should be filled with the
+/// pointer-sized value if a matching key is found. If no key
+/// match is found, the contents of the storage pointed to by
+/// this parameter are undefined. This parameter may be NULL,
+/// in which case the value from the dictionary is not returned
+/// (but the return value of this function still indicates
+/// whether or not the key-value pair was present).
+/// @result true, if a matching key was found, false otherwise.
+@ffi.Native<
+ ffi.UnsignedChar Function(CFDictionaryRef, ffi.Pointer,
+ ffi.Pointer>)>()
+external int CFDictionaryGetValueIfPresent(
+ CFDictionaryRef theDict,
+ ffi.Pointer key,
+ ffi.Pointer> value,
+);
+
+/// !
+/// @function CFDictionaryGetKeysAndValues
+/// Fills the two buffers with the keys and values from the dictionary.
+/// @param theDict The dictionary to be queried. If this parameter is
+/// not a valid CFDictionary, the behavior is undefined.
+/// @param keys A C array of pointer-sized values to be filled with keys
+/// from the dictionary. The keys and values C arrays are parallel
+/// to each other (that is, the items at the same indices form a
+/// key-value pair from the dictionary). This parameter may be NULL
+/// if the keys are not desired. If this parameter is not a valid
+/// pointer to a C array of at least CFDictionaryGetCount() pointers,
+/// or NULL, the behavior is undefined.
+/// @param values A C array of pointer-sized values to be filled with values
+/// from the dictionary. The keys and values C arrays are parallel
+/// to each other (that is, the items at the same indices form a
+/// key-value pair from the dictionary). This parameter may be NULL
+/// if the values are not desired. If this parameter is not a valid
+/// pointer to a C array of at least CFDictionaryGetCount() pointers,
+/// or NULL, the behavior is undefined.
+@ffi.Native<
+ ffi.Void Function(CFDictionaryRef, ffi.Pointer>,
+ ffi.Pointer>)>()
+external void CFDictionaryGetKeysAndValues(
+ CFDictionaryRef theDict,
+ ffi.Pointer> keys,
+ ffi.Pointer> values,
+);
+
+/// !
+/// @function CFDictionaryApplyFunction
+/// Calls a function once for each value in the dictionary.
+/// @param theDict The dictionary to be queried. If this parameter is
+/// not a valid CFDictionary, the behavior is undefined.
+/// @param applier The callback function to call once for each value in
+/// the dictionary. If this parameter is not a
+/// pointer to a function of the correct prototype, the behavior
+/// is undefined. If there are keys or values which the
+/// applier function does not expect or cannot properly apply
+/// to, the behavior is undefined.
+/// @param context A pointer-sized user-defined value, which is passed
+/// as the third parameter to the applier function, but is
+/// otherwise unused by this function. If the context is not
+/// what is expected by the applier function, the behavior is
+/// undefined.
+@ffi.Native<
+ ffi.Void Function(
+ CFDictionaryRef, CFDictionaryApplierFunction, ffi.Pointer)>()
+external void CFDictionaryApplyFunction(
+ CFDictionaryRef theDict,
+ CFDictionaryApplierFunction applier,
+ ffi.Pointer context,
+);
+
+/// !
+/// @function CFDictionaryAddValue
+/// Adds the key-value pair to the dictionary if no such key already exists.
+/// @param theDict The dictionary to which the value is to be added. If this
+/// parameter is not a valid mutable CFDictionary, the behavior is
+/// undefined.
+/// @param key The key of the value to add to the dictionary. The key is
+/// retained by the dictionary using the retain callback provided
+/// when the dictionary was created. If the key is not of the sort
+/// expected by the retain callback, the behavior is undefined. If
+/// a key which matches this key is already present in the dictionary,
+/// this function does nothing ("add if absent").
+/// @param value The value to add to the dictionary. The value is retained
+/// by the dictionary using the retain callback provided when the
+/// dictionary was created. If the value is not of the sort expected
+/// by the retain callback, the behavior is undefined.
+@ffi.Native<
+ ffi.Void Function(
+ CFMutableDictionaryRef, ffi.Pointer, ffi.Pointer)>()
+external void CFDictionaryAddValue(
+ CFMutableDictionaryRef theDict,
+ ffi.Pointer key,
+ ffi.Pointer