diff --git a/.editorconfig b/.editorconfig index 83be1d5a0..6c8c930bc 100644 --- a/.editorconfig +++ b/.editorconfig @@ -4,3 +4,14 @@ [*.{kt,kts}] ij_kotlin_allow_trailing_comma=true ij_kotlin_allow_trailing_comma_on_call_site=true +ktlint_function_naming_ignore_when_annotated_with=Composable, Test +ktlint_standard_backing-property-naming = disabled +ktlint_standard_binary-expression-wrapping = disabled +ktlint_standard_chain-method-continuation = disabled +ktlint_standard_class-signature = disabled +ktlint_standard_condition-wrapping = disabled +ktlint_standard_function-expression-body = disabled +ktlint_standard_function-literal = disabled +ktlint_standard_function-type-modifier-spacing = disabled +ktlint_standard_multiline-loop = disabled +ktlint_standard_function-signature = disabled diff --git a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md b/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md deleted file mode 100644 index c38247d23..000000000 --- a/.github/PULL_REQUEST_TEMPLATE/pull_request_template.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -name: Pull request -about: Create a pull request -label: 'triage me' ---- -Thank you for opening a Pull Request! -Before submitting your PR, there are a few things you can do to make sure it goes smoothly: -- [ ] Make sure to open a GitHub issue as a bug/feature request before writing your code! That way we can discuss the change, evaluate designs, and agree on the general idea -- [ ] Ensure the tests and linter pass (`./gradlew --init-script gradle/init.gradle.kts spotlessApply` to automatically apply formatting) -- [ ] Appropriate docs were updated (if necessary) - -Is this your first Pull Request? -- [ ] Run `./tools/setup.sh` -- [ ] Import the code formatting style as explained in [the setup script](/tools/setup.sh#L40). - -Fixes # 🦕 diff --git a/.github/ci-gradle.properties b/.github/ci-gradle.properties index bd989705d..dbafa68cd 100644 --- a/.github/ci-gradle.properties +++ b/.github/ci-gradle.properties @@ -19,7 +19,6 @@ org.gradle.parallel=true org.gradle.workers.max=2 kotlin.incremental=false -kotlin.compiler.execution.strategy=in-process # Controls KotlinOptions.allWarningsAsErrors. # This value used in CI and is currently set to false. diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 000000000..433a7e4a3 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,25 @@ +# https://docs.github.com/github/administering-a-repository/configuration-options-for-dependency-updates +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" + - package-ecosystem: "gradle" + directory: "/" + schedule: + interval: "weekly" + registries: "*" + labels: [ "version update" ] + groups: + kotlin-ksp: + patterns: + - "org.jetbrains.kotlin:*" + - "org.jetbrains.kotlin.jvm" + - "com.google.devtools.ksp" + open-pull-requests-limit: 10 +registries: + maven-google: + type: "maven-repository" + url: "https://maven.google.com" + replaces-base: true diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 000000000..265ff2ba5 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,25 @@ +**DO NOT CREATE A PULL REQUEST WITHOUT READING THESE INSTRUCTIONS** + +## Instructions +Thanks for submitting a pull request. To accept your pull request we need you do a few things: + +**If this is your first pull request** + +- [Sign the contributors license agreement](https://cla.developers.google.com/) + +**Ensure tests pass and code is formatted correctly** + +- Run local tests on the `DemoDebug` variant by running `./gradlew testDemoDebug` +- Fix code formatting: `./gradlew --init-script gradle/init.gradle.kts spotlessApply` + +**Add a description** + +We need to know what you've done and why you've done it. Include a summary of what your pull request contains, and why you have made these changes. Include links to any relevant issues which it fixes. + +[Here's an example](https://github.com/android/nowinandroid/pull/1257). + +**NOW DELETE THIS LINE AND EVERYTHING ABOVE IT** + +**What I have done and why** + +\ diff --git a/.github/renovate.json b/.github/renovate.json deleted file mode 100644 index f19341761..000000000 --- a/.github/renovate.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "$schema": "https://docs.renovatebot.com/renovate-schema.json", - "extends": [ - "config:base", "group:all", ":dependencyDashboard", "schedule:daily" - ], - "packageRules": [ - { - "matchPackageNames": ["org.objenesis:objenesis"], - "allowedVersions": "<=2.6" - }, - { - "matchPackageNames": ["com.google.protobuf"], - "allowedVersions": "<=0.8.19" - } - ] -} diff --git a/.github/workflows/Build.yaml b/.github/workflows/Build.yaml index 3d49f3734..46177d30c 100644 --- a/.github/workflows/Build.yaml +++ b/.github/workflows/Build.yaml @@ -11,70 +11,77 @@ concurrency: cancel-in-progress: true jobs: - build: + test_and_apk: + name: "Local tests and APKs" runs-on: ubuntu-latest - timeout-minutes: 90 + + permissions: + contents: write + pull-requests: write + + timeout-minutes: 60 steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - - name: Validate Gradle Wrapper - uses: gradle/wrapper-validation-action@v1 + - name: Enable KVM group perms + 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 + ls /dev/kvm - name: Copy CI gradle.properties - run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties + run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties - name: Set up JDK 17 - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: 'zulu' java-version: 17 - name: Setup Gradle - uses: gradle/gradle-build-action@v2 - - - name: Check spotless - run: ./gradlew spotlessCheck --init-script gradle/init.gradle.kts --no-configuration-cache + uses: gradle/actions/setup-gradle@v4 - - name: Build all build type and flavor permutations - run: ./gradlew assemble - - - name: Upload build outputs (APKs) - uses: actions/upload-artifact@v3 - with: - name: APKs - path: '**/build/outputs/apk/**/*.apk' + - name: Setup Android SDK + uses: android-actions/setup-android@v3 - - name: Run local tests - run: ./gradlew testDemoDebug testProdDebug + - name: Accept licenses + run: yes | sdkmanager --licenses || true - test: - runs-on: ubuntu-latest + - name: Check build-logic + run: ./gradlew check -p build-logic - permissions: - contents: write - - timeout-minutes: 60 + - name: Check spotless + run: ./gradlew spotlessCheck --init-script gradle/init.gradle.kts --no-configuration-cache - steps: - - name: Checkout - uses: actions/checkout@v3 + - name: Check Dependency Guard + id: dependencyguard_verify + continue-on-error: true + run: ./gradlew dependencyGuard - - name: Validate Gradle Wrapper - uses: gradle/wrapper-validation-action@v1 + - name: Prevent updating Dependency Guard baselines if this is a fork + id: checkfork_dependencyguard + continue-on-error: false + if: steps.dependencyguard_verify.outcome == 'failure' && github.event.pull_request.head.repo.full_name != github.repository + run: | + echo "::error::Dependency Guard failed, please update baselines with: ./gradlew dependencyGuardBaseline" && exit 1 - - name: Copy CI gradle.properties - run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties + # Runs if previous job failed + - name: Generate new Dependency Guard baselines if verification failed and it's a PR + id: dependencyguard_baseline + if: steps.dependencyguard_verify.outcome == 'failure' && github.event_name == 'pull_request' + run: | + ./gradlew dependencyGuardBaseline - - name: Set up JDK 17 - uses: actions/setup-java@v3 + - name: Push new Dependency Guard baselines if available + uses: stefanzweifel/git-auto-commit-action@v5 + if: steps.dependencyguard_baseline.outcome == 'success' with: - distribution: 'zulu' - java-version: 17 - - - name: Setup Gradle - uses: gradle/gradle-build-action@v2 + file_pattern: '**/dependencies/*.txt' + disable_globbing: true + commit_message: "🤖 Updates baselines for Dependency Guard" - name: Run all local screenshot tests (Roborazzi) id: screenshotsverify @@ -82,7 +89,7 @@ jobs: run: ./gradlew verifyRoborazziDemoDebug - name: Prevent pushing new screenshots if this is a fork - id: checkfork + id: checkfork_screenshots continue-on-error: false if: steps.screenshotsverify.outcome == 'failure' && github.event.pull_request.head.repo.full_name != github.repository run: | @@ -96,7 +103,7 @@ jobs: ./gradlew recordRoborazziDemoDebug - name: Push new screenshots if available - uses: stefanzweifel/git-auto-commit-action@v4 + uses: stefanzweifel/git-auto-commit-action@v5 if: steps.screenshotsrecord.outcome == 'success' with: file_pattern: '*/*.png' @@ -105,22 +112,48 @@ jobs: # Run local tests after screenshot tests to avoid wrong UP-TO-DATE. TODO: Ignore screenshots. - name: Run local tests - if: always() - run: ./gradlew testDemoDebug testProdDebug + run: ./gradlew testDemoDebug :lint:test - - name: Upload test results (XML) + - name: Setup GMD + run: ./gradlew :benchmarks:pixel6Api33Setup + --info + -Pandroid.experimental.testOptions.managedDevices.emulator.showKernelLogging=true + -Pandroid.testoptions.manageddevices.emulator.gpu="swiftshader_indirect" + + - name: Build all build type and flavor permutations + run: ./gradlew :app:assemble :benchmarks:assemble -Pandroidx.baselineprofile.skipgeneration + -Pandroid.testoptions.manageddevices.emulator.gpu="swiftshader_indirect" + -Pandroid.experimental.testOptions.managedDevices.emulator.showKernelLogging=true + -Pandroid.experimental.androidTest.numManagedDeviceShards=1 + -Pandroid.experimental.testOptions.managedDevices.maxConcurrentDevices=1 + -Pandroid.experimental.testOptions.managedDevices.setupTimeoutMinutes=5 + + - name: Upload build outputs (APKs) + uses: actions/upload-artifact@v4 + with: + name: APKs + path: '**/build/outputs/apk/**/*.apk' + + - name: Upload JVM local results (XML) if: always() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: test-results + name: local-test-results path: '**/build/test-results/test*UnitTest/**.xml' + - name: Upload screenshot results (PNG) + if: always() + uses: actions/upload-artifact@v4 + with: + name: screenshot-test-results + path: '**/build/outputs/roborazzi/*_compare.png' + - name: Check lint run: ./gradlew :app:lintProdRelease :app-nia-catalog:lintRelease :lint:lint - name: Upload lint reports (HTML) if: always() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: lint-reports path: '**/build/reports/lint-results-*.html' @@ -131,34 +164,54 @@ jobs: with: sarif_file: './' + - name: Check badging + run: ./gradlew :app:checkProdReleaseBadging + androidTest: - needs: build - runs-on: macOS-latest # enables hardware acceleration in the virtual machine + runs-on: ubuntu-latest timeout-minutes: 55 strategy: matrix: api-level: [26, 30] steps: + - name: Delete unnecessary tools 🔧 + uses: jlumbroso/free-disk-space@v1.3.1 + with: + android: false # Don't remove Android tools + tool-cache: true # Remove image tool cache - rm -rf "$AGENT_TOOLSDIRECTORY" + dotnet: true # rm -rf /usr/share/dotnet + haskell: true # rm -rf /opt/ghc... + swap-storage: true # rm -f /mnt/swapfile (4GiB) + docker-images: false # Takes 16s, enable if needed in the future + large-packages: false # includes google-cloud-sdk and it's slow + + - name: Enable KVM group perms + 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 + ls /dev/kvm + - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Copy CI gradle.properties run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties - name: Set up JDK 17 - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: 'zulu' java-version: 17 - name: Setup Gradle - uses: gradle/gradle-build-action@v2 - - - name: Build AndroidTest apps - run: ./gradlew packageDemoDebug packageDemoDebugAndroidTest --daemon + uses: gradle/actions/setup-gradle@v4 + with: + validate-wrappers: true + gradle-home-cache-cleanup: true - - name: Run instrumentation tests + - name: Build projects and run instrumentation tests uses: reactivecircus/android-emulator-runner@v2 with: api-level: ${{ matrix.api-level }} @@ -168,51 +221,41 @@ jobs: heap-size: 600M script: ./gradlew connectedDemoDebugAndroidTest --daemon + - name: Run local tests (including Roborazzi) for the combined coverage report (only API 30) + if: matrix.api-level == 30 + # There is no need to verify Roborazzi tests to generate coverage. + run: ./gradlew testDemoDebugUnitTest -Proborazzi.test.verify=false # Add Prod if we ever add JVM tests for prod + + # Add `createProdDebugUnitTestCoverageReport` if we ever add JVM tests for prod + - name: Generate coverage reports for Debug variants (only API 30) + if: matrix.api-level == 30 + run: ./gradlew createDemoDebugCombinedCoverageReport + - name: Upload test reports if: always() - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: test-reports-${{ matrix.api-level }} path: '**/build/reports/androidTests' - androidTest-GMD: - needs: build - runs-on: macOS-latest # enables hardware acceleration in the virtual machine - timeout-minutes: 90 - - steps: - - name: Checkout - uses: actions/checkout@v3 - - - name: Copy CI gradle.properties - run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties - - - name: Set up JDK 17 - uses: actions/setup-java@v3 + - name: Display local test coverage (only API 30) + if: matrix.api-level == 30 + id: jacoco + uses: madrapps/jacoco-report@v1.7.1 with: - distribution: 'zulu' - java-version: 17 - - - name: Setup Gradle - uses: gradle/gradle-build-action@v2 - - - name: Accept Android licenses - run: yes | "$ANDROID_HOME"/cmdline-tools/latest/bin/sdkmanager --licenses || true - - - name: Build AndroidTest apps - run: ./gradlew packageDemoDebug packageDemoDebugAndroidTest - - - name: Run instrumented tests with GMD - run: ./gradlew ciDemoDebugAndroidTest --no-parallel --max-workers=1 - -Pandroid.testoptions.manageddevices.emulator.gpu="swiftshader_indirect" -Pandroid.experimental.testOptions.managedDevices.emulator.showKernelLogging=true - - - name: Upload test reports - if: success() || failure() - uses: actions/upload-artifact@v3 + title: Combined test coverage report + min-coverage-overall: 40 + min-coverage-changed-files: 60 + paths: | + ${{ github.workspace }}/**/build/reports/jacoco/**/*Report.xml + token: ${{ secrets.GITHUB_TOKEN }} + + - name: Upload local coverage reports (XML + HTML) (only API 30) + if: matrix.api-level == 30 + uses: actions/upload-artifact@v4 with: - name: test-reports-GMD - path: '**/build/reports/androidTests' - - - name: Print disk space usage - if: failure() - run: df -h + name: coverage-reports + if-no-files-found: error + compression-level: 1 + overwrite: false + path: '**/build/reports/jacoco/' diff --git a/.github/workflows/NightlyBaselineProfiles.yaml b/.github/workflows/NightlyBaselineProfiles.yaml new file mode 100644 index 000000000..288842ac7 --- /dev/null +++ b/.github/workflows/NightlyBaselineProfiles.yaml @@ -0,0 +1,59 @@ +name: NightlyBaselineProfiles + +on: + schedule: + - cron: '42 4 * * *' + +jobs: + baseline_profiles: + name: "Generate Baseline Profiles" + runs-on: ubuntu-latest + + permissions: + contents: write + + timeout-minutes: 60 + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Enable KVM group perms + 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 + ls /dev/kvm + + - name: Copy CI gradle.properties + run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties + + - name: Set up JDK 17 + uses: actions/setup-java@v4 + with: + distribution: 'zulu' + java-version: 17 + + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Setup Android SDK + uses: android-actions/setup-android@v3 + + - name: Accept licenses + run: yes | sdkmanager --licenses || true + + - name: Check build-logic + run: ./gradlew check -p build-logic + + - name: Setup GMD + run: ./gradlew :benchmarks:pixel6Api33Setup + --info + -Pandroid.experimental.testOptions.managedDevices.emulator.showKernelLogging=true + -Pandroid.testoptions.manageddevices.emulator.gpu="swiftshader_indirect" + + - name: Build all build type and flavor permutations including baseline profiles + run: ./gradlew :app:assemble + -Pandroid.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=baselineprofile + -Pandroid.testoptions.manageddevices.emulator.gpu="swiftshader_indirect" + -Pandroid.experimental.testOptions.managedDevices.emulator.showKernelLogging=true diff --git a/.github/workflows/Release.yml b/.github/workflows/Release.yml index 534e9d893..71ee060e1 100644 --- a/.github/workflows/Release.yml +++ b/.github/workflows/Release.yml @@ -8,27 +8,51 @@ on: jobs: build: runs-on: ubuntu-latest - timeout-minutes: 45 + timeout-minutes: 120 steps: + - name: Enable KVM group perms + 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 + ls /dev/kvm + - name: Checkout - uses: actions/checkout@v3 - - name: Validate Gradle Wrapper - uses: gradle/wrapper-validation-action@v1 + uses: actions/checkout@v4 - name: Copy CI gradle.properties run: mkdir -p ~/.gradle ; cp .github/ci-gradle.properties ~/.gradle/gradle.properties - name: Set up JDK 17 - uses: actions/setup-java@v3 + uses: actions/setup-java@v4 with: distribution: 'zulu' java-version: 17 - - name: Build app - run: ./gradlew :app:assembleDemoRelease + - name: Setup Gradle + uses: gradle/actions/setup-gradle@v4 + + - name: Setup Android SDK + uses: android-actions/setup-android@v3 + - name: Accept licenses + run: yes | sdkmanager --licenses || true + + - name: Setup GMD + run: ./gradlew :benchmarks:pixel6Api33Setup + --info + -Pandroid.experimental.testOptions.managedDevices.emulator.showKernelLogging=true + -Pandroid.testoptions.manageddevices.emulator.gpu="swiftshader_indirect" + + - name: Build release variant including baseline profile generation + run: ./gradlew :app:assembleDemoRelease + -Pandroid.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile + -Pandroid.testoptions.manageddevices.emulator.gpu="swiftshader_indirect" + -Pandroid.experimental.testOptions.managedDevices.emulator.showKernelLogging=true + -Pandroid.experimental.androidTest.numManagedDeviceShards=1 + -Pandroid.experimental.testOptions.managedDevices.maxConcurrentDevices=1 - name: Create Release id: create_release uses: actions/create-release@v1 diff --git a/.gitignore b/.gitignore index d4482596d..702e733eb 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ bin/ gen/ out/ build/ +generated/ # Local configuration file (sdk path, etc) local.properties @@ -43,3 +44,6 @@ _sandbox # Android Studio captures folder captures/ + +# Kotlin +.kotlin diff --git a/.google/BUILDME b/.google/BUILDME index 5295ed188..d6b23eab3 100644 --- a/.google/BUILDME +++ b/.google/BUILDME @@ -1,2 +1,2 @@ # This file can be used to trigger an internal build by changing the number below -3 +2 diff --git a/.idea/copyright/The_Android_Open_Source_Project.xml b/.idea/copyright/The_Android_Open_Source_Project.xml index 74acd98d8..855f041e8 100644 --- a/.idea/copyright/The_Android_Open_Source_Project.xml +++ b/.idea/copyright/The_Android_Open_Source_Project.xml @@ -1,6 +1,6 @@ - - \ No newline at end of file + diff --git a/README.md b/README.md index b71427dfe..83bf139be 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ The app is currently in development. The `prodRelease` variant is [available on **Now in Android** displays content from the [Now in Android](https://developer.android.com/series/now-in-android) series. Users can browse for links to recent videos, articles and other content. Users can also follow topics they are interested -in. +in, and be notified when new content is published which matches interests they are following. ## Screenshots @@ -109,12 +109,43 @@ Examples: manipulate the state of the `Test` repository and verify the resulting behavior, instead of checking that specific repository methods were called. -## Screenshot tests +To run the tests execute the following gradle tasks: + +- `testDemoDebug` run all local tests against the `demoDebug` variant. Screenshot tests will fail +(see below for explanation). To avoid this, run `recordRoborazziDemoDebug` prior to running unit tests. +- `connectedDemoDebugAndroidTest` run all instrumented tests against the `demoDebug` variant. -**Now In Android** uses [Roborazzi](https://github.com/takahirom/roborazzi) to do screenshot tests -of certain screens and components. To run these tests, run the `verifyRoborazziDemoDebug` or -`recordRoborazziDemoDebug` tasks. Note that screenshots are recorded on CI, using Linux, and other -platforms might generate slightly different images, making the tests fail. +**Note:** You should not run `./gradlew test` or `./gradlew connectedAndroidTest` as this will execute +tests against _all_ build variants which is both unnecessary and will result in failures as only the +`demoDebug` variant is supported. No other variants have any tests (although this might change in future). + +## Screenshot tests +A screenshot test takes a screenshot of a screen or a UI component within the app, and compares it +with a previously recorded screenshot which is known to be rendered correctly. + +For example, Now in Android has [screenshot tests](https://github.com/android/nowinandroid/blob/main/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppScreenSizesScreenshotTests.kt) +to verify that the navigation is displayed correctly on different screen sizes +([known correct screenshots](https://github.com/android/nowinandroid/tree/main/app/src/testDemo/screenshots)). + +Now In Android uses [Roborazzi](https://github.com/takahirom/roborazzi) to run screenshot tests +of certain screens and UI components. When working with screenshot tests the following gradle tasks are useful: + +- `verifyRoborazziDemoDebug` run all screenshot tests, verifying the screenshots against the known +correct screenshots. +- `recordRoborazziDemoDebug` record new "known correct" screenshots. Use this command when you have +made changes to the UI and manually verified that they are rendered correctly. Screenshots will be +stored in `modulename/src/test/screenshots`. +- `compareRoborazziDemoDebug` create comparison images between failed tests and the known correct +images. These can also be found in `modulename/src/test/screenshots`. + +**Note on failing screenshot tests:** The known correct screenshots stored in this repository are recorded on CI using Linux. Other +platforms may (and probably will) generate slightly different images, making the screenshot tests fail. +When working on a non-Linux platform, a workaround to this is to run `recordRoborazziDemoDebug` on the +`main` branch before starting work. After making changes, `verifyRoborazziDemoDebug` will identify only +legitimate changes. + +For more information about screenshot testing +[check out this talk](https://www.droidcon.com/2023/11/15/easy-screenshot-testing-with-compose/). # UI The app was designed using [Material 3 guidelines](https://m3.material.io/). Learn more about the design process and diff --git a/app-nia-catalog/README.md b/app-nia-catalog/README.md index edbbb5e46..cf6d05f4f 100644 --- a/app-nia-catalog/README.md +++ b/app-nia-catalog/README.md @@ -1,3 +1,3 @@ # :app-nia-catalog module - -![Dependency graph](../docs/images/graphs/dep_graph_app_nia_catalog.png) +## Dependency graph +![Dependency graph](../docs/images/graphs/dep_graph_app_nia_catalog.svg) diff --git a/app-nia-catalog/build.gradle.kts b/app-nia-catalog/build.gradle.kts index 1f9ac1e2a..94d55b81c 100644 --- a/app-nia-catalog/build.gradle.kts +++ b/app-nia-catalog/build.gradle.kts @@ -32,8 +32,8 @@ import com.google.samples.apps.nowinandroid.NiaFlavor * limitations under the License. */ plugins { - id("nowinandroid.android.application") - id("nowinandroid.android.application.compose") + alias(libs.plugins.nowinandroid.android.application) + alias(libs.plugins.nowinandroid.android.application.compose) } android { @@ -59,13 +59,18 @@ android { // To publish on the Play store a private signing key is required, but to allow anyone // who clones the code to sign and run the release variant, use the debug signing key. // TODO: Abstract the signing configuration to a separate file to avoid hardcoding this. - signingConfig = signingConfigs.getByName("debug") + signingConfig = signingConfigs.named("debug").get() } } } dependencies { - implementation(project(":core:designsystem")) - implementation(project(":core:ui")) implementation(libs.androidx.activity.compose) + + implementation(projects.core.designsystem) + implementation(projects.core.ui) +} + +dependencyGuard { + configuration("releaseRuntimeClasspath") } diff --git a/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt b/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt new file mode 100644 index 000000000..e009e88ee --- /dev/null +++ b/app-nia-catalog/dependencies/releaseRuntimeClasspath.txt @@ -0,0 +1,123 @@ +androidx.activity:activity-compose:1.9.3 +androidx.activity:activity-ktx:1.9.3 +androidx.activity:activity:1.9.3 +androidx.annotation:annotation-experimental:1.4.1 +androidx.annotation:annotation-jvm:1.8.1 +androidx.annotation:annotation:1.8.1 +androidx.appcompat:appcompat-resources:1.6.1 +androidx.arch.core:core-common:2.2.0 +androidx.arch.core:core-runtime:2.2.0 +androidx.autofill:autofill:1.0.0 +androidx.browser:browser:1.8.0 +androidx.collection:collection-jvm:1.4.4 +androidx.collection:collection-ktx:1.4.4 +androidx.collection:collection:1.4.4 +androidx.compose.animation:animation-android:1.7.5 +androidx.compose.animation:animation-core-android:1.7.5 +androidx.compose.animation:animation-core:1.7.5 +androidx.compose.animation:animation:1.7.5 +androidx.compose.foundation:foundation-android:1.7.5 +androidx.compose.foundation:foundation-layout-android:1.7.5 +androidx.compose.foundation:foundation-layout:1.7.5 +androidx.compose.foundation:foundation:1.7.5 +androidx.compose.material3.adaptive:adaptive-android:1.0.0 +androidx.compose.material3.adaptive:adaptive:1.0.0 +androidx.compose.material3:material3-adaptive-navigation-suite-android:1.3.1 +androidx.compose.material3:material3-adaptive-navigation-suite:1.3.1 +androidx.compose.material3:material3-android:1.3.1 +androidx.compose.material3:material3:1.3.1 +androidx.compose.material:material-icons-core-android:1.7.5 +androidx.compose.material:material-icons-core:1.7.5 +androidx.compose.material:material-icons-extended-android:1.7.5 +androidx.compose.material:material-icons-extended:1.7.5 +androidx.compose.material:material-ripple-android:1.7.5 +androidx.compose.material:material-ripple:1.7.5 +androidx.compose.runtime:runtime-android:1.7.5 +androidx.compose.runtime:runtime-saveable-android:1.7.5 +androidx.compose.runtime:runtime-saveable:1.7.5 +androidx.compose.runtime:runtime:1.7.5 +androidx.compose.ui:ui-android:1.7.5 +androidx.compose.ui:ui-geometry-android:1.7.5 +androidx.compose.ui:ui-geometry:1.7.5 +androidx.compose.ui:ui-graphics-android:1.7.5 +androidx.compose.ui:ui-graphics:1.7.5 +androidx.compose.ui:ui-text-android:1.7.5 +androidx.compose.ui:ui-text:1.7.5 +androidx.compose.ui:ui-tooling-preview-android:1.7.5 +androidx.compose.ui:ui-tooling-preview:1.7.5 +androidx.compose.ui:ui-unit-android:1.7.5 +androidx.compose.ui:ui-unit:1.7.5 +androidx.compose.ui:ui-util-android:1.7.5 +androidx.compose.ui:ui-util:1.7.5 +androidx.compose.ui:ui:1.7.5 +androidx.compose:compose-bom:2024.11.00 +androidx.concurrent:concurrent-futures:1.1.0 +androidx.core:core-ktx:1.13.1 +androidx.core:core:1.13.1 +androidx.customview:customview-poolingcontainer:1.0.0 +androidx.customview:customview:1.0.0 +androidx.emoji2:emoji2:1.3.0 +androidx.exifinterface:exifinterface:1.3.7 +androidx.fragment:fragment:1.5.1 +androidx.graphics:graphics-path:1.0.1 +androidx.interpolator:interpolator:1.0.0 +androidx.lifecycle:lifecycle-common-java8:2.8.3 +androidx.lifecycle:lifecycle-common-jvm:2.8.3 +androidx.lifecycle:lifecycle-common:2.8.3 +androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.3 +androidx.lifecycle:lifecycle-livedata-core:2.8.3 +androidx.lifecycle:lifecycle-livedata:2.8.3 +androidx.lifecycle:lifecycle-process:2.8.3 +androidx.lifecycle:lifecycle-runtime-android:2.8.3 +androidx.lifecycle:lifecycle-runtime-compose-android:2.8.3 +androidx.lifecycle:lifecycle-runtime-compose:2.8.3 +androidx.lifecycle:lifecycle-runtime-ktx-android:2.8.3 +androidx.lifecycle:lifecycle-runtime-ktx:2.8.3 +androidx.lifecycle:lifecycle-runtime:2.8.3 +androidx.lifecycle:lifecycle-viewmodel-android:2.8.3 +androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.3 +androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.3 +androidx.lifecycle:lifecycle-viewmodel:2.8.3 +androidx.loader:loader:1.0.0 +androidx.metrics:metrics-performance:1.0.0-beta01 +androidx.profileinstaller:profileinstaller:1.3.1 +androidx.savedstate:savedstate-ktx:1.2.1 +androidx.savedstate:savedstate:1.2.1 +androidx.startup:startup-runtime:1.1.1 +androidx.tracing:tracing-ktx:1.3.0-alpha02 +androidx.tracing:tracing:1.3.0-alpha02 +androidx.vectordrawable:vectordrawable-animated:1.1.0 +androidx.vectordrawable:vectordrawable:1.1.0 +androidx.versionedparcelable:versionedparcelable:1.1.1 +androidx.viewpager:viewpager:1.0.0 +androidx.window.extensions.core:core:1.0.0 +androidx.window:window-core-android:1.3.0 +androidx.window:window-core:1.3.0 +androidx.window:window:1.3.0 +com.google.accompanist:accompanist-drawablepainter:0.32.0 +com.google.code.findbugs:jsr305:3.0.2 +com.google.dagger:dagger-lint-aar:2.52 +com.google.dagger:dagger:2.52 +com.google.dagger:hilt-android:2.52 +com.google.dagger:hilt-core:2.52 +com.google.guava:listenablefuture:1.0 +com.squareup.okhttp3:okhttp:4.12.0 +com.squareup.okio:okio-jvm:3.9.0 +com.squareup.okio:okio:3.9.0 +io.coil-kt:coil-base:2.7.0 +io.coil-kt:coil-compose-base:2.7.0 +io.coil-kt:coil-compose:2.7.0 +io.coil-kt:coil:2.7.0 +jakarta.inject:jakarta.inject-api:2.0.1 +javax.inject:javax.inject:1 +org.jetbrains.kotlin:kotlin-stdlib-common:2.0.20 +org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.0 +org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0 +org.jetbrains.kotlin:kotlin-stdlib:2.0.20 +org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.1 +org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.8.1 +org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.8.1 +org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.1 +org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.6.1 +org.jetbrains.kotlinx:kotlinx-datetime:0.6.1 +org.jetbrains:annotations:23.0.0 diff --git a/app-nia-catalog/src/main/java/com/google/samples/apps/niacatalog/NiaCatalogActivity.kt b/app-nia-catalog/src/main/kotlin/com/google/samples/apps/niacatalog/NiaCatalogActivity.kt similarity index 100% rename from app-nia-catalog/src/main/java/com/google/samples/apps/niacatalog/NiaCatalogActivity.kt rename to app-nia-catalog/src/main/kotlin/com/google/samples/apps/niacatalog/NiaCatalogActivity.kt diff --git a/app-nia-catalog/src/main/java/com/google/samples/apps/niacatalog/ui/Catalog.kt b/app-nia-catalog/src/main/kotlin/com/google/samples/apps/niacatalog/ui/Catalog.kt similarity index 95% rename from app-nia-catalog/src/main/java/com/google/samples/apps/niacatalog/ui/Catalog.kt rename to app-nia-catalog/src/main/kotlin/com/google/samples/apps/niacatalog/ui/Catalog.kt index 2624262ad..02d4cf8d5 100644 --- a/app-nia-catalog/src/main/java/com/google/samples/apps/niacatalog/ui/Catalog.kt +++ b/app-nia-catalog/src/main/kotlin/com/google/samples/apps/niacatalog/ui/Catalog.kt @@ -32,8 +32,9 @@ import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember +import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp @@ -170,13 +171,13 @@ fun NiaCatalog() { item { Text("Chips", Modifier.padding(top = 16.dp)) } item { FlowRow(horizontalArrangement = Arrangement.spacedBy(16.dp)) { - var firstChecked by remember { mutableStateOf(false) } + var firstChecked by rememberSaveable { mutableStateOf(false) } NiaFilterChip( selected = firstChecked, onSelectedChange = { checked -> firstChecked = checked }, label = { Text(text = "Enabled") }, ) - var secondChecked by remember { mutableStateOf(true) } + var secondChecked by rememberSaveable { mutableStateOf(true) } NiaFilterChip( selected = secondChecked, onSelectedChange = { checked -> secondChecked = checked }, @@ -199,7 +200,7 @@ fun NiaCatalog() { item { Text("Icon buttons", Modifier.padding(top = 16.dp)) } item { FlowRow(horizontalArrangement = Arrangement.spacedBy(16.dp)) { - var firstChecked by remember { mutableStateOf(false) } + var firstChecked by rememberSaveable { mutableStateOf(false) } NiaIconToggleButton( checked = firstChecked, onCheckedChange = { checked -> firstChecked = checked }, @@ -216,7 +217,7 @@ fun NiaCatalog() { ) }, ) - var secondChecked by remember { mutableStateOf(true) } + var secondChecked by rememberSaveable { mutableStateOf(true) } NiaIconToggleButton( checked = secondChecked, onCheckedChange = { checked -> secondChecked = checked }, @@ -272,14 +273,14 @@ fun NiaCatalog() { item { Text("View toggle", Modifier.padding(top = 16.dp)) } item { FlowRow(horizontalArrangement = Arrangement.spacedBy(16.dp)) { - var firstExpanded by remember { mutableStateOf(false) } + var firstExpanded by rememberSaveable { mutableStateOf(false) } NiaViewToggleButton( expanded = firstExpanded, onExpandedChange = { expanded -> firstExpanded = expanded }, compactText = { Text(text = "Compact view") }, expandedText = { Text(text = "Expanded view") }, ) - var secondExpanded by remember { mutableStateOf(true) } + var secondExpanded by rememberSaveable { mutableStateOf(true) } NiaViewToggleButton( expanded = secondExpanded, onExpandedChange = { expanded -> secondExpanded = expanded }, @@ -318,7 +319,7 @@ fun NiaCatalog() { } item { Text("Tabs", Modifier.padding(top = 16.dp)) } item { - var selectedTabIndex by remember { mutableStateOf(0) } + var selectedTabIndex by rememberSaveable { mutableIntStateOf(0) } val titles = listOf("Topics", "People") NiaTabRow(selectedTabIndex = selectedTabIndex) { titles.forEachIndexed { index, title -> @@ -332,7 +333,7 @@ fun NiaCatalog() { } item { Text("Navigation", Modifier.padding(top = 16.dp)) } item { - var selectedItem by remember { mutableStateOf(0) } + var selectedItem by rememberSaveable { mutableIntStateOf(0) } val items = listOf("For you", "Saved", "Interests") val icons = listOf( NiaIcons.UpcomingBorder, diff --git a/app/README.md b/app/README.md index 9f151c245..a3fb4572a 100644 --- a/app/README.md +++ b/app/README.md @@ -1,3 +1,3 @@ # :app module - -![Dependency graph](../docs/images/graphs/dep_graph_app.png) +## Dependency graph +![Dependency graph](../docs/images/graphs/dep_graph_app.svg) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 81947e641..5434df8c2 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -16,14 +16,16 @@ import com.google.samples.apps.nowinandroid.NiaBuildType plugins { - id("nowinandroid.android.application") - id("nowinandroid.android.application.compose") - id("nowinandroid.android.application.flavors") - id("nowinandroid.android.application.jacoco") - id("nowinandroid.android.hilt") - id("jacoco") - id("nowinandroid.android.application.firebase") + alias(libs.plugins.nowinandroid.android.application) + alias(libs.plugins.nowinandroid.android.application.compose) + alias(libs.plugins.nowinandroid.android.application.flavors) + alias(libs.plugins.nowinandroid.android.application.jacoco) + alias(libs.plugins.nowinandroid.android.application.firebase) + alias(libs.plugins.nowinandroid.hilt) id("com.google.android.gms.oss-licenses-plugin") + alias(libs.plugins.baselineprofile) + alias(libs.plugins.roborazzi) + alias(libs.plugins.kotlin.serialization) } android { @@ -43,26 +45,17 @@ android { debug { applicationIdSuffix = NiaBuildType.DEBUG.applicationIdSuffix } - val release by getting { + release { isMinifyEnabled = true applicationIdSuffix = NiaBuildType.RELEASE.applicationIdSuffix - proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") + proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt")) // To publish on the Play store a private signing key is required, but to allow anyone // who clones the code to sign and run the release variant, use the debug signing key. // TODO: Abstract the signing configuration to a separate file to avoid hardcoding this. - signingConfig = signingConfigs.getByName("debug") - } - create("benchmark") { - // Enable all the optimizations from release build through initWith(release). - initWith(release) - matchingFallbacks.add("release") - // Debug key signing is available to everyone. - signingConfig = signingConfigs.getByName("debug") - // Only use benchmark proguard rules - proguardFiles("benchmark-rules.pro") - isMinifyEnabled = true - applicationIdSuffix = NiaBuildType.BENCHMARK.applicationIdSuffix + signingConfig = signingConfigs.named("debug").get() + // Ensure Baseline Profile is fresh for release builds. + baselineProfile.automaticGenerationDuringBuild = true } } @@ -80,56 +73,77 @@ android { } dependencies { - implementation(project(":feature:interests")) - implementation(project(":feature:foryou")) - implementation(project(":feature:bookmarks")) - implementation(project(":feature:topic")) - implementation(project(":feature:search")) - implementation(project(":feature:settings")) - - implementation(project(":core:common")) - implementation(project(":core:ui")) - implementation(project(":core:designsystem")) - implementation(project(":core:data")) - implementation(project(":core:model")) - implementation(project(":core:analytics")) - - implementation(project(":sync:work")) - - androidTestImplementation(project(":core:testing")) - androidTestImplementation(project(":core:datastore-test")) - androidTestImplementation(project(":core:data-test")) - androidTestImplementation(project(":core:network")) - androidTestImplementation(libs.androidx.navigation.testing) - androidTestImplementation(libs.accompanist.testharness) - androidTestImplementation(kotlin("test")) - debugImplementation(libs.androidx.compose.ui.testManifest) - debugImplementation(project(":ui-test-hilt-manifest")) + implementation(projects.feature.interests) + implementation(projects.feature.foryou) + implementation(projects.feature.bookmarks) + implementation(projects.feature.topic) + implementation(projects.feature.search) + implementation(projects.feature.settings) + + implementation(projects.core.common) + implementation(projects.core.ui) + implementation(projects.core.designsystem) + implementation(projects.core.data) + implementation(projects.core.model) + implementation(projects.core.analytics) + implementation(projects.sync.work) implementation(libs.androidx.activity.compose) - implementation(libs.androidx.appcompat) + implementation(libs.androidx.compose.material3.adaptive) + implementation(libs.androidx.compose.material3.adaptive.layout) + implementation(libs.androidx.compose.material3.adaptive.navigation) + implementation(libs.androidx.compose.material3.windowSizeClass) + implementation(libs.androidx.compose.runtime.tracing) implementation(libs.androidx.core.ktx) implementation(libs.androidx.core.splashscreen) - implementation(libs.androidx.compose.runtime) - implementation(libs.androidx.lifecycle.runtimeCompose) - implementation(libs.androidx.compose.runtime.tracing) - implementation(libs.androidx.compose.material3.windowSizeClass) implementation(libs.androidx.hilt.navigation.compose) + implementation(libs.androidx.lifecycle.runtimeCompose) implementation(libs.androidx.navigation.compose) - implementation(libs.androidx.window.manager) implementation(libs.androidx.profileinstaller) + implementation(libs.androidx.tracing.ktx) + implementation(libs.androidx.window.core) implementation(libs.kotlinx.coroutines.guava) implementation(libs.coil.kt) + implementation(libs.kotlinx.serialization.json) + + ksp(libs.hilt.compiler) - // Core functions - testImplementation(project(":core:testing")) - testImplementation(project(":core:datastore-test")) - testImplementation(project(":core:data-test")) - testImplementation(project(":core:network")) - testImplementation(libs.androidx.navigation.testing) - testImplementation(libs.accompanist.testharness) - testImplementation(kotlin("test")) - implementation(libs.work.testing) - kaptTest(libs.hilt.compiler) + debugImplementation(libs.androidx.compose.ui.testManifest) + debugImplementation(projects.uiTestHiltManifest) + + kspTest(libs.hilt.compiler) + + testImplementation(projects.core.dataTest) + testImplementation(projects.core.datastoreTest) + testImplementation(libs.hilt.android.testing) + testImplementation(projects.sync.syncTest) + testImplementation(libs.kotlin.test) + + testDemoImplementation(libs.robolectric) + testDemoImplementation(libs.roborazzi) + testDemoImplementation(projects.core.screenshotTesting) + + androidTestImplementation(projects.core.testing) + androidTestImplementation(projects.core.dataTest) + androidTestImplementation(projects.core.datastoreTest) + androidTestImplementation(libs.androidx.test.espresso.core) + androidTestImplementation(libs.androidx.navigation.testing) + androidTestImplementation(libs.androidx.compose.ui.test) + androidTestImplementation(libs.hilt.android.testing) + androidTestImplementation(libs.kotlin.test) + + baselineProfile(projects.benchmarks) +} + +baselineProfile { + // Don't build on every iteration of a full assemble. + // Instead enable generation directly for the release build variant. + automaticGenerationDuringBuild = false + + // Make use of Dex Layout Optimizations via Startup Profiles + dexLayoutOptimization = true +} +dependencyGuard { + configuration("prodReleaseRuntimeClasspath") } diff --git a/app/dependencies/prodReleaseRuntimeClasspath.txt b/app/dependencies/prodReleaseRuntimeClasspath.txt new file mode 100644 index 000000000..a2719ef22 --- /dev/null +++ b/app/dependencies/prodReleaseRuntimeClasspath.txt @@ -0,0 +1,232 @@ +androidx.activity:activity-compose:1.9.3 +androidx.activity:activity-ktx:1.9.3 +androidx.activity:activity:1.9.3 +androidx.annotation:annotation-experimental:1.4.1 +androidx.annotation:annotation-jvm:1.8.1 +androidx.annotation:annotation:1.8.1 +androidx.appcompat:appcompat-resources:1.7.0 +androidx.appcompat:appcompat:1.7.0 +androidx.arch.core:core-common:2.2.0 +androidx.arch.core:core-runtime:2.2.0 +androidx.autofill:autofill:1.0.0 +androidx.browser:browser:1.8.0 +androidx.collection:collection-jvm:1.4.4 +androidx.collection:collection-ktx:1.4.4 +androidx.collection:collection:1.4.4 +androidx.compose.animation:animation-android:1.7.5 +androidx.compose.animation:animation-core-android:1.7.5 +androidx.compose.animation:animation-core:1.7.5 +androidx.compose.animation:animation:1.7.5 +androidx.compose.foundation:foundation-android:1.7.5 +androidx.compose.foundation:foundation-layout-android:1.7.5 +androidx.compose.foundation:foundation-layout:1.7.5 +androidx.compose.foundation:foundation:1.7.5 +androidx.compose.material3.adaptive:adaptive-android:1.0.0 +androidx.compose.material3.adaptive:adaptive-layout-android:1.0.0 +androidx.compose.material3.adaptive:adaptive-layout:1.0.0 +androidx.compose.material3.adaptive:adaptive-navigation-android:1.0.0 +androidx.compose.material3.adaptive:adaptive-navigation:1.0.0 +androidx.compose.material3.adaptive:adaptive:1.0.0 +androidx.compose.material3:material3-adaptive-navigation-suite-android:1.3.1 +androidx.compose.material3:material3-adaptive-navigation-suite:1.3.1 +androidx.compose.material3:material3-android:1.3.1 +androidx.compose.material3:material3-window-size-class-android:1.3.1 +androidx.compose.material3:material3-window-size-class:1.3.1 +androidx.compose.material3:material3:1.3.1 +androidx.compose.material:material-icons-core-android:1.7.5 +androidx.compose.material:material-icons-core:1.7.5 +androidx.compose.material:material-icons-extended-android:1.7.5 +androidx.compose.material:material-icons-extended:1.7.5 +androidx.compose.material:material-ripple-android:1.7.5 +androidx.compose.material:material-ripple:1.7.5 +androidx.compose.runtime:runtime-android:1.7.5 +androidx.compose.runtime:runtime-saveable-android:1.7.5 +androidx.compose.runtime:runtime-saveable:1.7.5 +androidx.compose.runtime:runtime-tracing:1.7.5 +androidx.compose.runtime:runtime:1.7.5 +androidx.compose.ui:ui-android:1.7.5 +androidx.compose.ui:ui-geometry-android:1.7.5 +androidx.compose.ui:ui-geometry:1.7.5 +androidx.compose.ui:ui-graphics-android:1.7.5 +androidx.compose.ui:ui-graphics:1.7.5 +androidx.compose.ui:ui-text-android:1.7.5 +androidx.compose.ui:ui-text:1.7.5 +androidx.compose.ui:ui-tooling-preview-android:1.7.5 +androidx.compose.ui:ui-tooling-preview:1.7.5 +androidx.compose.ui:ui-unit-android:1.7.5 +androidx.compose.ui:ui-unit:1.7.5 +androidx.compose.ui:ui-util-android:1.7.5 +androidx.compose.ui:ui-util:1.7.5 +androidx.compose.ui:ui:1.7.5 +androidx.compose:compose-bom:2024.11.00 +androidx.concurrent:concurrent-futures:1.1.0 +androidx.core:core-ktx:1.13.1 +androidx.core:core-splashscreen:1.0.1 +androidx.core:core:1.13.1 +androidx.cursoradapter:cursoradapter:1.0.0 +androidx.customview:customview-poolingcontainer:1.0.0 +androidx.customview:customview:1.0.0 +androidx.datastore:datastore-android:1.1.1 +androidx.datastore:datastore-core-android:1.1.1 +androidx.datastore:datastore-core-okio-jvm:1.1.1 +androidx.datastore:datastore-core-okio:1.1.1 +androidx.datastore:datastore-core:1.1.1 +androidx.datastore:datastore-preferences-android:1.1.1 +androidx.datastore:datastore-preferences-core-jvm:1.1.1 +androidx.datastore:datastore-preferences-core:1.1.1 +androidx.datastore:datastore-preferences:1.1.1 +androidx.datastore:datastore:1.1.1 +androidx.documentfile:documentfile:1.0.0 +androidx.drawerlayout:drawerlayout:1.0.0 +androidx.emoji2:emoji2-views-helper:1.3.0 +androidx.emoji2:emoji2:1.3.0 +androidx.exifinterface:exifinterface:1.3.7 +androidx.fragment:fragment:1.5.4 +androidx.graphics:graphics-path:1.0.1 +androidx.hilt:hilt-common:1.2.0 +androidx.hilt:hilt-navigation-compose:1.2.0 +androidx.hilt:hilt-navigation:1.2.0 +androidx.hilt:hilt-work:1.2.0 +androidx.interpolator:interpolator:1.0.0 +androidx.legacy:legacy-support-core-utils:1.0.0 +androidx.lifecycle:lifecycle-common-java8:2.8.6 +androidx.lifecycle:lifecycle-common-jvm:2.8.6 +androidx.lifecycle:lifecycle-common:2.8.6 +androidx.lifecycle:lifecycle-livedata-core-ktx:2.8.6 +androidx.lifecycle:lifecycle-livedata-core:2.8.6 +androidx.lifecycle:lifecycle-livedata:2.8.6 +androidx.lifecycle:lifecycle-process:2.8.6 +androidx.lifecycle:lifecycle-runtime-android:2.8.6 +androidx.lifecycle:lifecycle-runtime-compose-android:2.8.6 +androidx.lifecycle:lifecycle-runtime-compose:2.8.6 +androidx.lifecycle:lifecycle-runtime-ktx-android:2.8.6 +androidx.lifecycle:lifecycle-runtime-ktx:2.8.6 +androidx.lifecycle:lifecycle-runtime:2.8.6 +androidx.lifecycle:lifecycle-service:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-android:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-compose-android:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-compose:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-ktx:2.8.6 +androidx.lifecycle:lifecycle-viewmodel-savedstate:2.8.6 +androidx.lifecycle:lifecycle-viewmodel:2.8.6 +androidx.loader:loader:1.0.0 +androidx.localbroadcastmanager:localbroadcastmanager:1.0.0 +androidx.metrics:metrics-performance:1.0.0-beta01 +androidx.navigation:navigation-common-ktx:2.8.0 +androidx.navigation:navigation-common:2.8.0 +androidx.navigation:navigation-compose:2.8.0 +androidx.navigation:navigation-runtime-ktx:2.8.0 +androidx.navigation:navigation-runtime:2.8.0 +androidx.print:print:1.0.0 +androidx.privacysandbox.ads:ads-adservices-java:1.0.0-beta05 +androidx.privacysandbox.ads:ads-adservices:1.0.0-beta05 +androidx.profileinstaller:profileinstaller:1.3.1 +androidx.resourceinspection:resourceinspection-annotation:1.0.1 +androidx.room:room-common:2.6.1 +androidx.room:room-ktx:2.6.1 +androidx.room:room-runtime:2.6.1 +androidx.savedstate:savedstate-ktx:1.2.1 +androidx.savedstate:savedstate:1.2.1 +androidx.sqlite:sqlite-framework:2.4.0 +androidx.sqlite:sqlite:2.4.0 +androidx.startup:startup-runtime:1.1.1 +androidx.tracing:tracing-ktx:1.3.0-alpha02 +androidx.tracing:tracing-perfetto:1.0.0 +androidx.tracing:tracing:1.3.0-alpha02 +androidx.vectordrawable:vectordrawable-animated:1.1.0 +androidx.vectordrawable:vectordrawable:1.1.0 +androidx.versionedparcelable:versionedparcelable:1.1.1 +androidx.viewpager:viewpager:1.0.0 +androidx.window.extensions.core:core:1.0.0 +androidx.window:window-core-android:1.3.0 +androidx.window:window-core:1.3.0 +androidx.window:window:1.3.0 +androidx.work:work-runtime-ktx:2.9.0 +androidx.work:work-runtime:2.9.0 +com.caverock:androidsvg-aar:1.4 +com.google.accompanist:accompanist-drawablepainter:0.32.0 +com.google.accompanist:accompanist-permissions:0.36.0 +com.google.android.datatransport:transport-api:3.2.0 +com.google.android.datatransport:transport-backend-cct:3.3.0 +com.google.android.datatransport:transport-runtime:3.3.0 +com.google.android.gms:play-services-ads-identifier:18.0.0 +com.google.android.gms:play-services-base:18.5.0 +com.google.android.gms:play-services-basement:18.4.0 +com.google.android.gms:play-services-cloud-messaging:17.2.0 +com.google.android.gms:play-services-measurement-api:22.1.0 +com.google.android.gms:play-services-measurement-base:22.1.0 +com.google.android.gms:play-services-measurement-impl:22.1.0 +com.google.android.gms:play-services-measurement-sdk-api:22.1.0 +com.google.android.gms:play-services-measurement-sdk:22.1.0 +com.google.android.gms:play-services-measurement:22.1.0 +com.google.android.gms:play-services-oss-licenses:17.1.0 +com.google.android.gms:play-services-stats:17.0.2 +com.google.android.gms:play-services-tasks:18.2.0 +com.google.code.findbugs:jsr305:3.0.2 +com.google.dagger:dagger-lint-aar:2.52 +com.google.dagger:dagger:2.52 +com.google.dagger:hilt-android:2.52 +com.google.dagger:hilt-core:2.52 +com.google.errorprone:error_prone_annotations:2.26.0 +com.google.firebase:firebase-abt:21.1.1 +com.google.firebase:firebase-analytics:22.1.0 +com.google.firebase:firebase-annotations:16.2.0 +com.google.firebase:firebase-bom:33.3.0 +com.google.firebase:firebase-common-ktx:21.0.0 +com.google.firebase:firebase-common:21.0.0 +com.google.firebase:firebase-components:18.0.0 +com.google.firebase:firebase-config-interop:16.0.1 +com.google.firebase:firebase-config:22.0.0 +com.google.firebase:firebase-crashlytics:19.1.0 +com.google.firebase:firebase-datatransport:19.0.0 +com.google.firebase:firebase-encoders-json:18.0.1 +com.google.firebase:firebase-encoders-proto:16.0.0 +com.google.firebase:firebase-encoders:17.0.0 +com.google.firebase:firebase-iid-interop:17.1.0 +com.google.firebase:firebase-installations-interop:17.2.0 +com.google.firebase:firebase-installations:18.0.0 +com.google.firebase:firebase-measurement-connector:20.0.1 +com.google.firebase:firebase-messaging:24.0.1 +com.google.firebase:firebase-perf:21.0.1 +com.google.firebase:firebase-sessions:2.0.4 +com.google.firebase:protolite-well-known-types:18.0.0 +com.google.guava:failureaccess:1.0.1 +com.google.guava:guava:31.1-android +com.google.guava:listenablefuture:9999.0-empty-to-avoid-conflict-with-guava +com.google.j2objc:j2objc-annotations:1.3 +com.google.protobuf:protobuf-javalite:4.28.2 +com.google.protobuf:protobuf-kotlin-lite:4.28.2 +com.squareup.okhttp3:logging-interceptor:4.12.0 +com.squareup.okhttp3:okhttp:4.12.0 +com.squareup.okio:okio-jvm:3.9.0 +com.squareup.okio:okio:3.9.0 +com.squareup.retrofit2:converter-kotlinx-serialization:2.11.0 +com.squareup.retrofit2:retrofit:2.11.0 +io.coil-kt:coil-base:2.7.0 +io.coil-kt:coil-compose-base:2.7.0 +io.coil-kt:coil-compose:2.7.0 +io.coil-kt:coil-svg:2.7.0 +io.coil-kt:coil:2.7.0 +jakarta.inject:jakarta.inject-api:2.0.1 +javax.inject:javax.inject:1 +org.checkerframework:checker-qual:3.12.0 +org.jetbrains.kotlin:kotlin-android-extensions-runtime:1.9.22 +org.jetbrains.kotlin:kotlin-parcelize-runtime:1.9.22 +org.jetbrains.kotlin:kotlin-stdlib-common:2.0.20 +org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.9.0 +org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.9.0 +org.jetbrains.kotlin:kotlin-stdlib:2.0.20 +org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0 +org.jetbrains.kotlinx:kotlinx-coroutines-bom:1.9.0 +org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.9.0 +org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0 +org.jetbrains.kotlinx:kotlinx-coroutines-guava:1.9.0 +org.jetbrains.kotlinx:kotlinx-coroutines-play-services:1.9.0 +org.jetbrains.kotlinx:kotlinx-datetime-jvm:0.6.1 +org.jetbrains.kotlinx:kotlinx-datetime:0.6.1 +org.jetbrains.kotlinx:kotlinx-serialization-bom:1.6.3 +org.jetbrains.kotlinx:kotlinx-serialization-core-jvm:1.6.3 +org.jetbrains.kotlinx:kotlinx-serialization-core:1.6.3 +org.jetbrains.kotlinx:kotlinx-serialization-json-jvm:1.6.3 +org.jetbrains.kotlinx:kotlinx-serialization-json:1.6.3 +org.jetbrains:annotations:23.0.0 diff --git a/app/prodRelease-badging.txt b/app/prodRelease-badging.txt new file mode 100644 index 000000000..9908e775a --- /dev/null +++ b/app/prodRelease-badging.txt @@ -0,0 +1,122 @@ +package: name='com.google.samples.apps.nowinandroid' versionCode='8' versionName='0.1.2' platformBuildVersionName='14' platformBuildVersionCode='34' compileSdkVersion='34' compileSdkVersionCodename='14' +sdkVersion:'21' +targetSdkVersion:'34' +uses-permission: name='android.permission.INTERNET' +uses-permission: name='android.permission.ACCESS_NETWORK_STATE' +uses-permission: name='android.permission.POST_NOTIFICATIONS' +uses-permission: name='android.permission.WAKE_LOCK' +uses-permission: name='com.google.android.c2dm.permission.RECEIVE' +uses-permission: name='com.google.android.finsky.permission.BIND_GET_INSTALL_REFERRER_SERVICE' +uses-permission: name='android.permission.RECEIVE_BOOT_COMPLETED' +uses-permission: name='android.permission.FOREGROUND_SERVICE' +uses-permission: name='com.google.samples.apps.nowinandroid.DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION' +application-label:'Now in Android' +application-label-af:'Now in Android' +application-label-am:'Now in Android' +application-label-ar:'Now in Android' +application-label-as:'Now in Android' +application-label-az:'Now in Android' +application-label-be:'Now in Android' +application-label-bg:'Now in Android' +application-label-bn:'Now in Android' +application-label-bs:'Now in Android' +application-label-ca:'Now in Android' +application-label-cs:'Now in Android' +application-label-da:'Now in Android' +application-label-de:'Now in Android' +application-label-el:'Now in Android' +application-label-en-AU:'Now in Android' +application-label-en-CA:'Now in Android' +application-label-en-GB:'Now in Android' +application-label-en-IN:'Now in Android' +application-label-en-XC:'Now in Android' +application-label-es:'Now in Android' +application-label-es-US:'Now in Android' +application-label-et:'Now in Android' +application-label-eu:'Now in Android' +application-label-fa:'Now in Android' +application-label-fi:'Now in Android' +application-label-fr:'Now in Android' +application-label-fr-CA:'Now in Android' +application-label-gl:'Now in Android' +application-label-gu:'Now in Android' +application-label-hi:'Now in Android' +application-label-hr:'Now in Android' +application-label-hu:'Now in Android' +application-label-hy:'Now in Android' +application-label-in:'Now in Android' +application-label-is:'Now in Android' +application-label-it:'Now in Android' +application-label-iw:'Now in Android' +application-label-ja:'Now in Android' +application-label-ka:'Now in Android' +application-label-kk:'Now in Android' +application-label-km:'Now in Android' +application-label-kn:'Now in Android' +application-label-ko:'Now in Android' +application-label-ky:'Now in Android' +application-label-lo:'Now in Android' +application-label-lt:'Now in Android' +application-label-lv:'Now in Android' +application-label-mk:'Now in Android' +application-label-ml:'Now in Android' +application-label-mn:'Now in Android' +application-label-mr:'Now in Android' +application-label-ms:'Now in Android' +application-label-my:'Now in Android' +application-label-nb:'Now in Android' +application-label-ne:'Now in Android' +application-label-nl:'Now in Android' +application-label-or:'Now in Android' +application-label-pa:'Now in Android' +application-label-pl:'Now in Android' +application-label-pt:'Now in Android' +application-label-pt-BR:'Now in Android' +application-label-pt-PT:'Now in Android' +application-label-ro:'Now in Android' +application-label-ru:'Now in Android' +application-label-si:'Now in Android' +application-label-sk:'Now in Android' +application-label-sl:'Now in Android' +application-label-sq:'Now in Android' +application-label-sr:'Now in Android' +application-label-sr-Latn:'Now in Android' +application-label-sv:'Now in Android' +application-label-sw:'Now in Android' +application-label-ta:'Now in Android' +application-label-te:'Now in Android' +application-label-th:'Now in Android' +application-label-tl:'Now in Android' +application-label-tr:'Now in Android' +application-label-uk:'Now in Android' +application-label-ur:'Now in Android' +application-label-uz:'Now in Android' +application-label-vi:'Now in Android' +application-label-zh-CN:'Now in Android' +application-label-zh-HK:'Now in Android' +application-label-zh-TW:'Now in Android' +application-label-zu:'Now in Android' +application-icon-120:'res/mipmap-anydpi-v26/ic_launcher.xml' +application-icon-160:'res/mipmap-anydpi-v26/ic_launcher.xml' +application-icon-240:'res/mipmap-anydpi-v26/ic_launcher.xml' +application-icon-320:'res/mipmap-anydpi-v26/ic_launcher.xml' +application-icon-480:'res/mipmap-anydpi-v26/ic_launcher.xml' +application-icon-640:'res/mipmap-anydpi-v26/ic_launcher.xml' +application-icon-65534:'res/mipmap-anydpi-v26/ic_launcher.xml' +application: label='Now in Android' icon='res/mipmap-anydpi-v26/ic_launcher.xml' +launchable-activity: name='com.google.samples.apps.nowinandroid.MainActivity' label='' icon='' +uses-library-not-required:'android.ext.adservices' +uses-library-not-required:'androidx.window.extensions' +uses-library-not-required:'androidx.window.sidecar' +feature-group: label='' + uses-feature: name='android.hardware.faketouch' + uses-implied-feature: name='android.hardware.faketouch' reason='default feature for all apps' +main +other-activities +other-receivers +other-services +supports-screens: 'small' 'normal' 'large' 'xlarge' +supports-any-density: 'true' +locales: '--_--' 'af' 'am' 'ar' 'as' 'az' 'be' 'bg' 'bn' 'bs' 'ca' 'cs' 'da' 'de' 'el' 'en-AU' 'en-CA' 'en-GB' 'en-IN' 'en-XC' 'es' 'es-US' 'et' 'eu' 'fa' 'fi' 'fr' 'fr-CA' 'gl' 'gu' 'hi' 'hr' 'hu' 'hy' 'in' 'is' 'it' 'iw' 'ja' 'ka' 'kk' 'km' 'kn' 'ko' 'ky' 'lo' 'lt' 'lv' 'mk' 'ml' 'mn' 'mr' 'ms' 'my' 'nb' 'ne' 'nl' 'or' 'pa' 'pl' 'pt' 'pt-BR' 'pt-PT' 'ro' 'ru' 'si' 'sk' 'sl' 'sq' 'sr' 'sr-Latn' 'sv' 'sw' 'ta' 'te' 'th' 'tl' 'tr' 'uk' 'ur' 'uz' 'vi' 'zh-CN' 'zh-HK' 'zh-TW' 'zu' +densities: '120' '160' '240' '320' '480' '640' '65534' +native-code: 'arm64-v8a' 'armeabi-v7a' 'x86' 'x86_64' diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro deleted file mode 100644 index 9c7f3b935..000000000 --- a/app/proguard-rules.pro +++ /dev/null @@ -1,19 +0,0 @@ --dontwarn org.bouncycastle.jsse.BCSSLParameters --dontwarn org.bouncycastle.jsse.BCSSLSocket --dontwarn org.bouncycastle.jsse.provider.BouncyCastleJsseProvider --dontwarn org.conscrypt.Conscrypt$Version --dontwarn org.conscrypt.Conscrypt --dontwarn org.conscrypt.ConscryptHostnameVerifier --dontwarn org.openjsse.javax.net.ssl.SSLParameters --dontwarn org.openjsse.javax.net.ssl.SSLSocket --dontwarn org.openjsse.net.ssl.OpenJSSE - -# Fix for Retrofit issue https://github.com/square/retrofit/issues/3751 -# Keep generic signature of Call, Response (R8 full mode strips signatures from non-kept items). --keep,allowobfuscation,allowshrinking interface retrofit2.Call --keep,allowobfuscation,allowshrinking class retrofit2.Response - -# With R8 full mode generic signatures are stripped for classes that are not -# kept. Suspend functions are wrapped in continuations where the type argument -# is used. --keep,allowobfuscation,allowshrinking class kotlin.coroutines.Continuation \ No newline at end of file diff --git a/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationUiTest.kt b/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationUiTest.kt deleted file mode 100644 index d92390918..000000000 --- a/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationUiTest.kt +++ /dev/null @@ -1,268 +0,0 @@ -/* - * Copyright 2022 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.samples.apps.nowinandroid.ui - -import androidx.compose.foundation.layout.BoxWithConstraints -import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi -import androidx.compose.material3.windowsizeclass.WindowSizeClass -import androidx.compose.ui.test.assertIsDisplayed -import androidx.compose.ui.test.junit4.createAndroidComposeRule -import androidx.compose.ui.test.onNodeWithTag -import androidx.compose.ui.unit.DpSize -import androidx.compose.ui.unit.dp -import com.google.accompanist.testharness.TestHarness -import com.google.samples.apps.nowinandroid.core.data.repository.CompositeUserNewsResourceRepository -import com.google.samples.apps.nowinandroid.core.data.util.NetworkMonitor -import com.google.samples.apps.nowinandroid.core.rules.GrantPostNotificationsPermissionRule -import com.google.samples.apps.nowinandroid.core.testing.repository.TestNewsRepository -import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserDataRepository -import com.google.samples.apps.nowinandroid.uitesthiltmanifest.HiltComponentActivity -import dagger.hilt.android.testing.BindValue -import dagger.hilt.android.testing.HiltAndroidRule -import dagger.hilt.android.testing.HiltAndroidTest -import org.junit.Before -import org.junit.Rule -import org.junit.Test -import org.junit.rules.TemporaryFolder -import javax.inject.Inject - -/** - * Tests that the navigation UI is rendered correctly on different screen sizes. - */ -@OptIn(ExperimentalMaterial3WindowSizeClassApi::class) -@HiltAndroidTest -class NavigationUiTest { - - /** - * Manages the components' state and is used to perform injection on your test - */ - @get:Rule(order = 0) - val hiltRule = HiltAndroidRule(this) - - /** - * Create a temporary folder used to create a Data Store file. This guarantees that - * the file is removed in between each test, preventing a crash. - */ - @BindValue - @get:Rule(order = 1) - val tmpFolder: TemporaryFolder = TemporaryFolder.builder().assureDeletion().build() - - /** - * Grant [android.Manifest.permission.POST_NOTIFICATIONS] permission. - */ - @get:Rule(order = 2) - val postNotificationsPermission = GrantPostNotificationsPermissionRule() - - /** - * Use a test activity to set the content on. - */ - @get:Rule(order = 3) - val composeTestRule = createAndroidComposeRule() - - val userNewsResourceRepository = CompositeUserNewsResourceRepository( - newsRepository = TestNewsRepository(), - userDataRepository = TestUserDataRepository(), - ) - - @Inject - lateinit var networkMonitor: NetworkMonitor - - @Before - fun setup() { - hiltRule.inject() - } - - @Test - fun compactWidth_compactHeight_showsNavigationBar() { - composeTestRule.setContent { - TestHarness(size = DpSize(400.dp, 400.dp)) { - BoxWithConstraints { - NiaApp( - windowSizeClass = WindowSizeClass.calculateFromSize( - DpSize(maxWidth, maxHeight), - ), - networkMonitor = networkMonitor, - userNewsResourceRepository = userNewsResourceRepository, - ) - } - } - } - - composeTestRule.onNodeWithTag("NiaBottomBar").assertIsDisplayed() - composeTestRule.onNodeWithTag("NiaNavRail").assertDoesNotExist() - } - - @Test - fun mediumWidth_compactHeight_showsNavigationRail() { - composeTestRule.setContent { - TestHarness(size = DpSize(610.dp, 400.dp)) { - BoxWithConstraints { - NiaApp( - windowSizeClass = WindowSizeClass.calculateFromSize( - DpSize(maxWidth, maxHeight), - ), - networkMonitor = networkMonitor, - userNewsResourceRepository = userNewsResourceRepository, - ) - } - } - } - - composeTestRule.onNodeWithTag("NiaNavRail").assertIsDisplayed() - composeTestRule.onNodeWithTag("NiaBottomBar").assertDoesNotExist() - } - - @Test - fun expandedWidth_compactHeight_showsNavigationRail() { - composeTestRule.setContent { - TestHarness(size = DpSize(900.dp, 400.dp)) { - BoxWithConstraints { - NiaApp( - windowSizeClass = WindowSizeClass.calculateFromSize( - DpSize(maxWidth, maxHeight), - ), - networkMonitor = networkMonitor, - userNewsResourceRepository = userNewsResourceRepository, - ) - } - } - } - - composeTestRule.onNodeWithTag("NiaNavRail").assertIsDisplayed() - composeTestRule.onNodeWithTag("NiaBottomBar").assertDoesNotExist() - } - - @Test - fun compactWidth_mediumHeight_showsNavigationBar() { - composeTestRule.setContent { - TestHarness(size = DpSize(400.dp, 500.dp)) { - BoxWithConstraints { - NiaApp( - windowSizeClass = WindowSizeClass.calculateFromSize( - DpSize(maxWidth, maxHeight), - ), - networkMonitor = networkMonitor, - userNewsResourceRepository = userNewsResourceRepository, - ) - } - } - } - - composeTestRule.onNodeWithTag("NiaBottomBar").assertIsDisplayed() - composeTestRule.onNodeWithTag("NiaNavRail").assertDoesNotExist() - } - - @Test - fun mediumWidth_mediumHeight_showsNavigationRail() { - composeTestRule.setContent { - TestHarness(size = DpSize(610.dp, 500.dp)) { - BoxWithConstraints { - NiaApp( - windowSizeClass = WindowSizeClass.calculateFromSize( - DpSize(maxWidth, maxHeight), - ), - networkMonitor = networkMonitor, - userNewsResourceRepository = userNewsResourceRepository, - ) - } - } - } - - composeTestRule.onNodeWithTag("NiaNavRail").assertIsDisplayed() - composeTestRule.onNodeWithTag("NiaBottomBar").assertDoesNotExist() - } - - @Test - fun expandedWidth_mediumHeight_showsNavigationRail() { - composeTestRule.setContent { - TestHarness(size = DpSize(900.dp, 500.dp)) { - BoxWithConstraints { - NiaApp( - windowSizeClass = WindowSizeClass.calculateFromSize( - DpSize(maxWidth, maxHeight), - ), - networkMonitor = networkMonitor, - userNewsResourceRepository = userNewsResourceRepository, - ) - } - } - } - - composeTestRule.onNodeWithTag("NiaNavRail").assertIsDisplayed() - composeTestRule.onNodeWithTag("NiaBottomBar").assertDoesNotExist() - } - - @Test - fun compactWidth_expandedHeight_showsNavigationBar() { - composeTestRule.setContent { - TestHarness(size = DpSize(400.dp, 1000.dp)) { - BoxWithConstraints { - NiaApp( - windowSizeClass = WindowSizeClass.calculateFromSize( - DpSize(maxWidth, maxHeight), - ), - networkMonitor = networkMonitor, - userNewsResourceRepository = userNewsResourceRepository, - ) - } - } - } - - composeTestRule.onNodeWithTag("NiaBottomBar").assertIsDisplayed() - composeTestRule.onNodeWithTag("NiaNavRail").assertDoesNotExist() - } - - @Test - fun mediumWidth_expandedHeight_showsNavigationRail() { - composeTestRule.setContent { - TestHarness(size = DpSize(610.dp, 1000.dp)) { - BoxWithConstraints { - NiaApp( - windowSizeClass = WindowSizeClass.calculateFromSize( - DpSize(maxWidth, maxHeight), - ), - networkMonitor = networkMonitor, - userNewsResourceRepository = userNewsResourceRepository, - ) - } - } - } - - composeTestRule.onNodeWithTag("NiaNavRail").assertIsDisplayed() - composeTestRule.onNodeWithTag("NiaBottomBar").assertDoesNotExist() - } - - @Test - fun expandedWidth_expandedHeight_showsNavigationRail() { - composeTestRule.setContent { - TestHarness(size = DpSize(900.dp, 1000.dp)) { - BoxWithConstraints { - NiaApp( - windowSizeClass = WindowSizeClass.calculateFromSize( - DpSize(maxWidth, maxHeight), - ), - networkMonitor = networkMonitor, - userNewsResourceRepository = userNewsResourceRepository, - ) - } - } - } - - composeTestRule.onNodeWithTag("NiaNavRail").assertIsDisplayed() - composeTestRule.onNodeWithTag("NiaBottomBar").assertDoesNotExist() - } -} diff --git a/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt b/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt similarity index 76% rename from app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt rename to app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt index e1eab4796..54053a1bb 100644 --- a/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt +++ b/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/NavigationTest.kt @@ -16,16 +16,16 @@ package com.google.samples.apps.nowinandroid.ui -import androidx.annotation.StringRes +import androidx.compose.ui.semantics.SemanticsActions.ScrollBy import androidx.compose.ui.test.assertCountEquals import androidx.compose.ui.test.assertIsOn import androidx.compose.ui.test.assertIsSelected -import androidx.compose.ui.test.hasAnyAncestor import androidx.compose.ui.test.hasTestTag import androidx.compose.ui.test.hasText -import androidx.compose.ui.test.junit4.AndroidComposeTestRule import androidx.compose.ui.test.junit4.createAndroidComposeRule +import androidx.compose.ui.test.onAllNodesWithTag import androidx.compose.ui.test.onAllNodesWithText +import androidx.compose.ui.test.onFirst import androidx.compose.ui.test.onNodeWithContentDescription import androidx.compose.ui.test.onNodeWithTag import androidx.compose.ui.test.onNodeWithText @@ -35,23 +35,21 @@ import androidx.test.espresso.Espresso import androidx.test.espresso.NoActivityResumedException import com.google.samples.apps.nowinandroid.MainActivity import com.google.samples.apps.nowinandroid.R +import com.google.samples.apps.nowinandroid.core.data.repository.NewsRepository import com.google.samples.apps.nowinandroid.core.data.repository.TopicsRepository import com.google.samples.apps.nowinandroid.core.model.data.Topic import com.google.samples.apps.nowinandroid.core.rules.GrantPostNotificationsPermissionRule -import dagger.hilt.android.testing.BindValue import dagger.hilt.android.testing.HiltAndroidRule import dagger.hilt.android.testing.HiltAndroidTest import kotlinx.coroutines.flow.first -import kotlinx.coroutines.test.runTest +import kotlinx.coroutines.runBlocking import org.junit.Before import org.junit.Rule import org.junit.Test -import org.junit.rules.TemporaryFolder import javax.inject.Inject -import kotlin.properties.ReadOnlyProperty import com.google.samples.apps.nowinandroid.feature.bookmarks.R as BookmarksR import com.google.samples.apps.nowinandroid.feature.foryou.R as FeatureForyouR -import com.google.samples.apps.nowinandroid.feature.interests.R as FeatureInterestsR +import com.google.samples.apps.nowinandroid.feature.search.R as FeatureSearchR import com.google.samples.apps.nowinandroid.feature.settings.R as SettingsR /** @@ -66,42 +64,34 @@ class NavigationTest { @get:Rule(order = 0) val hiltRule = HiltAndroidRule(this) - /** - * Create a temporary folder used to create a Data Store file. This guarantees that - * the file is removed in between each test, preventing a crash. - */ - @BindValue - @get:Rule(order = 1) - val tmpFolder: TemporaryFolder = TemporaryFolder.builder().assureDeletion().build() - /** * Grant [android.Manifest.permission.POST_NOTIFICATIONS] permission. */ - @get:Rule(order = 2) + @get:Rule(order = 1) val postNotificationsPermission = GrantPostNotificationsPermissionRule() /** * Use the primary activity to initialize the app normally. */ - @get:Rule(order = 3) + @get:Rule(order = 2) val composeTestRule = createAndroidComposeRule() @Inject lateinit var topicsRepository: TopicsRepository - private fun AndroidComposeTestRule<*, *>.stringResource(@StringRes resId: Int) = - ReadOnlyProperty { _, _ -> activity.getString(resId) } + @Inject + lateinit var newsRepository: NewsRepository // The strings used for matching in these tests - private val navigateUp by composeTestRule.stringResource(FeatureForyouR.string.navigate_up) - private val forYou by composeTestRule.stringResource(FeatureForyouR.string.for_you) - private val interests by composeTestRule.stringResource(FeatureInterestsR.string.interests) + private val navigateUp by composeTestRule.stringResource(FeatureForyouR.string.feature_foryou_navigate_up) + private val forYou by composeTestRule.stringResource(FeatureForyouR.string.feature_foryou_title) + private val interests by composeTestRule.stringResource(FeatureSearchR.string.feature_search_interests) private val sampleTopic = "Headlines" private val appName by composeTestRule.stringResource(R.string.app_name) - private val saved by composeTestRule.stringResource(BookmarksR.string.saved) - private val settings by composeTestRule.stringResource(SettingsR.string.top_app_bar_action_icon_description) - private val brand by composeTestRule.stringResource(SettingsR.string.brand_android) - private val ok by composeTestRule.stringResource(SettingsR.string.dismiss_dialog_button_text) + private val saved by composeTestRule.stringResource(BookmarksR.string.feature_bookmarks_title) + private val settings by composeTestRule.stringResource(SettingsR.string.feature_settings_top_app_bar_action_icon_description) + private val brand by composeTestRule.stringResource(SettingsR.string.feature_settings_brand_android) + private val ok by composeTestRule.stringResource(SettingsR.string.feature_settings_dismiss_dialog_button_text) @Before fun setup() = hiltRule.inject() @@ -166,7 +156,10 @@ class NavigationTest { composeTestRule.apply { // GIVEN the user is on any of the top level destinations, THEN the Up arrow is not shown. onNodeWithContentDescription(navigateUp).assertDoesNotExist() - // TODO: Add top level destinations here, see b/226357686. + + onNodeWithText(saved).performClick() + onNodeWithContentDescription(navigateUp).assertDoesNotExist() + onNodeWithText(interests).performClick() onNodeWithContentDescription(navigateUp).assertDoesNotExist() } @@ -222,12 +215,7 @@ class NavigationTest { onNodeWithText(ok).performClick() // Check that the saved screen is still visible and selected. - onNode( - hasText(saved) and - hasAnyAncestor( - hasTestTag("NiaBottomBar") or hasTestTag("NiaNavRail"), - ), - ).assertIsSelected() + onNode(hasText(saved) and hasTestTag("NiaNavItem")).assertIsSelected() } } @@ -265,14 +253,16 @@ class NavigationTest { } @Test - fun navigationBar_multipleBackStackInterests() = runTest { + fun navigationBar_multipleBackStackInterests() { composeTestRule.apply { onNodeWithText(interests).performClick() // Select the last topic - val topic = topicsRepository.getTopics().first().sortedBy(Topic::name).last().name - onNodeWithTag("interests:topics").performScrollToNode(hasText(topic)) - onNodeWithText(topic).performClick() + val topic = runBlocking { + topicsRepository.getTopics().first().sortedBy(Topic::name).last() + } + onNodeWithTag("interests:topics").performScrollToNode(hasText(topic.name)) + onNodeWithText(topic.name).performClick() // Switch tab onNodeWithText(forYou).performClick() @@ -280,8 +270,48 @@ class NavigationTest { // Come back to Interests onNodeWithText(interests).performClick() - // Verify we're not in the list of interests - onNodeWithTag("interests:topics").assertDoesNotExist() + // Verify the topic is still shown + onNodeWithTag("topic:${topic.id}").assertExists() + } + } + + @Test + fun navigatingToTopicFromForYou_showsTopicDetails() { + composeTestRule.apply { + // Get the first news resource + val newsResource = runBlocking { + newsRepository.getNewsResources().first().first() + } + + // Get its first topic and follow it + val topic = newsResource.topics.first() + onNodeWithText(topic.name).performClick() + + // Get the news feed and scroll to the news resource + // Note: Possible flakiness. If the content of the news resource is long then the topic + // tag might not be visible meaning it cannot be clicked + onNodeWithTag("forYou:feed") + .performScrollToNode(hasTestTag("newsResourceCard:${newsResource.id}")) + .fetchSemanticsNode() + .apply { + val newsResourceCardNode = onNodeWithTag("newsResourceCard:${newsResource.id}") + .fetchSemanticsNode() + config[ScrollBy].action?.invoke( + 0f, + // to ensure the bottom of the card is visible, + // manually scroll the difference between the height of + // the scrolling node and the height of the card + (newsResourceCardNode.size.height - size.height).coerceAtLeast(0).toFloat(), + ) + } + + // Click the first topic tag + onAllNodesWithTag("topicTag:${topic.id}", useUnmergedTree = true) + .onFirst() + .performClick() + + // Verify that we're on the correct topic details screen + onNodeWithTag("topic:${topic.id}").assertExists() } } } diff --git a/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt b/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt similarity index 70% rename from app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt rename to app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt index 1560a74eb..c2c74458d 100644 --- a/app/src/androidTest/java/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt +++ b/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppStateTest.kt @@ -16,15 +16,11 @@ package com.google.samples.apps.nowinandroid.ui -import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi -import androidx.compose.material3.windowsizeclass.WindowSizeClass import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.remember import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.test.junit4.createComposeRule -import androidx.compose.ui.unit.DpSize -import androidx.compose.ui.unit.dp import androidx.navigation.NavHostController import androidx.navigation.compose.ComposeNavigator import androidx.navigation.compose.composable @@ -34,14 +30,15 @@ import com.google.samples.apps.nowinandroid.core.data.repository.CompositeUserNe import com.google.samples.apps.nowinandroid.core.testing.repository.TestNewsRepository import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserDataRepository import com.google.samples.apps.nowinandroid.core.testing.util.TestNetworkMonitor +import com.google.samples.apps.nowinandroid.core.testing.util.TestTimeZoneMonitor import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch import kotlinx.coroutines.test.UnconfinedTestDispatcher import kotlinx.coroutines.test.runTest +import kotlinx.datetime.TimeZone import org.junit.Rule import org.junit.Test import kotlin.test.assertEquals -import kotlin.test.assertFalse import kotlin.test.assertTrue /** @@ -50,7 +47,6 @@ import kotlin.test.assertTrue * Note: This could become an unit test if Robolectric is added to the project and the Context * is faked. */ -@OptIn(ExperimentalMaterial3WindowSizeClassApi::class) class NiaAppStateTest { @get:Rule @@ -59,6 +55,8 @@ class NiaAppStateTest { // Create the test dependencies. private val networkMonitor = TestNetworkMonitor() + private val timeZoneMonitor = TestTimeZoneMonitor() + private val userNewsResourceRepository = CompositeUserNewsResourceRepository(TestNewsRepository(), TestUserDataRepository()) @@ -75,9 +73,9 @@ class NiaAppStateTest { NiaAppState( navController = navController, coroutineScope = backgroundScope, - windowSizeClass = getCompactWindowClass(), networkMonitor = networkMonitor, userNewsResourceRepository = userNewsResourceRepository, + timeZoneMonitor = timeZoneMonitor, ) } @@ -97,9 +95,9 @@ class NiaAppStateTest { fun niaAppState_destinations() = runTest { composeTestRule.setContent { state = rememberNiaAppState( - windowSizeClass = getCompactWindowClass(), networkMonitor = networkMonitor, userNewsResourceRepository = userNewsResourceRepository, + timeZoneMonitor = timeZoneMonitor, ) } @@ -110,80 +108,50 @@ class NiaAppStateTest { } @Test - fun niaAppState_showBottomBar_compact() = runTest { + fun niaAppState_whenNetworkMonitorIsOffline_StateIsOffline() = runTest(UnconfinedTestDispatcher()) { composeTestRule.setContent { state = NiaAppState( navController = NavHostController(LocalContext.current), coroutineScope = backgroundScope, - windowSizeClass = getCompactWindowClass(), networkMonitor = networkMonitor, userNewsResourceRepository = userNewsResourceRepository, + timeZoneMonitor = timeZoneMonitor, ) } - assertTrue(state.shouldShowBottomBar) - assertFalse(state.shouldShowNavRail) - } - - @Test - fun niaAppState_showNavRail_medium() = runTest { - composeTestRule.setContent { - state = NiaAppState( - navController = NavHostController(LocalContext.current), - coroutineScope = backgroundScope, - windowSizeClass = WindowSizeClass.calculateFromSize(DpSize(800.dp, 800.dp)), - networkMonitor = networkMonitor, - userNewsResourceRepository = userNewsResourceRepository, - ) - } - - assertTrue(state.shouldShowNavRail) - assertFalse(state.shouldShowBottomBar) - } - - @Test - fun niaAppState_showNavRail_large() = runTest { - composeTestRule.setContent { - state = NiaAppState( - navController = NavHostController(LocalContext.current), - coroutineScope = backgroundScope, - windowSizeClass = WindowSizeClass.calculateFromSize(DpSize(900.dp, 1200.dp)), - networkMonitor = networkMonitor, - userNewsResourceRepository = userNewsResourceRepository, - ) - } - - assertTrue(state.shouldShowNavRail) - assertFalse(state.shouldShowBottomBar) + backgroundScope.launch { state.isOffline.collect() } + networkMonitor.setConnected(false) + assertEquals( + true, + state.isOffline.value, + ) } @Test - fun stateIsOfflineWhenNetworkMonitorIsOffline() = runTest(UnconfinedTestDispatcher()) { + fun niaAppState_differentTZ_withTimeZoneMonitorChange() = runTest(UnconfinedTestDispatcher()) { composeTestRule.setContent { state = NiaAppState( navController = NavHostController(LocalContext.current), coroutineScope = backgroundScope, - windowSizeClass = WindowSizeClass.calculateFromSize(DpSize(900.dp, 1200.dp)), networkMonitor = networkMonitor, userNewsResourceRepository = userNewsResourceRepository, + timeZoneMonitor = timeZoneMonitor, ) } - - backgroundScope.launch { state.isOffline.collect() } - networkMonitor.setConnected(false) + val changedTz = TimeZone.of("Europe/Prague") + backgroundScope.launch { state.currentTimeZone.collect() } + timeZoneMonitor.setTimeZone(changedTz) assertEquals( - true, - state.isOffline.value, + changedTz, + state.currentTimeZone.value, ) } - - private fun getCompactWindowClass() = WindowSizeClass.calculateFromSize(DpSize(500.dp, 300.dp)) } @Composable private fun rememberTestNavController(): TestNavHostController { val context = LocalContext.current - return remember { + return remember { TestNavHostController(context).apply { navigatorProvider.addNavigator(ComposeNavigator()) graph = createGraph(startDestination = "a") { diff --git a/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/UiTestExtensions.kt b/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/UiTestExtensions.kt new file mode 100644 index 000000000..bdc09885d --- /dev/null +++ b/app/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/ui/UiTestExtensions.kt @@ -0,0 +1,26 @@ +/* + * Copyright 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.ui + +import androidx.annotation.StringRes +import androidx.compose.ui.test.junit4.AndroidComposeTestRule +import kotlin.properties.ReadOnlyProperty + +fun AndroidComposeTestRule<*, *>.stringResource( + @StringRes resId: Int, +): ReadOnlyProperty = + ReadOnlyProperty { _, _ -> activity.getString(resId) } diff --git a/app/src/benchmark/res/values-night/colors.xml b/app/src/benchmark/res/values-night/colors.xml new file mode 100644 index 000000000..cbf22c766 --- /dev/null +++ b/app/src/benchmark/res/values-night/colors.xml @@ -0,0 +1,22 @@ + + + + + #FFFFFF + #FF006780 + diff --git a/app/src/benchmark/res/values/colors.xml b/app/src/benchmark/res/values/colors.xml new file mode 100644 index 000000000..a98c6d8f6 --- /dev/null +++ b/app/src/benchmark/res/values/colors.xml @@ -0,0 +1,22 @@ + + + + + #000000 + #FF006780 + diff --git a/sync/work/src/demo/AndroidManifest.xml b/app/src/debug/res/values-night/colors.xml similarity index 61% rename from sync/work/src/demo/AndroidManifest.xml rename to app/src/debug/res/values-night/colors.xml index 8dc32c86f..daa017e4a 100644 --- a/sync/work/src/demo/AndroidManifest.xml +++ b/app/src/debug/res/values-night/colors.xml @@ -1,6 +1,6 @@ - - - - - - - + + + #FFFFFF + #FFA23F16 + diff --git a/app/src/debug/res/values/colors.xml b/app/src/debug/res/values/colors.xml new file mode 100644 index 000000000..487a7820b --- /dev/null +++ b/app/src/debug/res/values/colors.xml @@ -0,0 +1,22 @@ + + + + + #000000 + #FFA23F16 + diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0b0482c13..5b22f9865 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -20,11 +20,13 @@ + + - + + + + + + + @@ -56,6 +62,11 @@ + + + diff --git a/app/src/main/baseline-prof.txt b/app/src/main/baseline-prof.txt deleted file mode 100644 index 9aae59d60..000000000 --- a/app/src/main/baseline-prof.txt +++ /dev/null @@ -1,14250 +0,0 @@ -HPLandroidx/compose/animation/FlingCalculator$FlingInfo;->(FFJ)V -HPLandroidx/compose/animation/FlingCalculator;->flingInfo(F)Landroidx/compose/animation/FlingCalculator$FlingInfo; -HPLandroidx/compose/animation/FlingCalculator;->getSplineDeceleration(F)D -HPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;->getValueFromNanos(FFJ)F -HPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;->getVelocityFromNanos(FJ)F -HPLandroidx/compose/animation/core/DecayAnimation;->getValueFromNanos(J)Ljava/lang/Object; -HPLandroidx/compose/animation/core/DecayAnimation;->getVelocityVectorFromNanos(J)Landroidx/compose/animation/core/AnimationVector; -HPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HPLandroidx/compose/animation/core/VectorizedFloatDecaySpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; -HPLandroidx/compose/animation/core/VectorizedFloatDecaySpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; -HPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->consumePostScroll-OMhpSzk(JJI)V -HPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->consumePreScroll-OzD1aCk(J)J -HPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->isEnabled()Z -HPLandroidx/compose/foundation/ScrollKt$scroll$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HPLandroidx/compose/foundation/gestures/DefaultFlingBehavior$performFling$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HPLandroidx/compose/foundation/gestures/DefaultScrollableState$scrollScope$1;->scrollBy(F)F -HPLandroidx/compose/foundation/gestures/ScrollingLogic$doFlingAnimation$2$outerScopeScroll$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HPLandroidx/compose/foundation/gestures/ScrollingLogic$doFlingAnimation$2$scope$1;->scrollBy(F)F -HPLandroidx/compose/foundation/gestures/ScrollingLogic;->dispatchScroll-3eAAhYA(Landroidx/compose/foundation/gestures/ScrollScope;JI)J -HPLandroidx/compose/foundation/gestures/ScrollingLogic;->toFloat-k-4lQ0M(J)F -HPLandroidx/compose/foundation/gestures/ScrollingLogic;->toOffset-tuRUvjQ(F)J -HPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;->createItem-HK0c1C0(ILjava/lang/Object;Ljava/util/List;)Landroidx/compose/foundation/lazy/LazyMeasuredItem; -HPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HPLandroidx/compose/foundation/lazy/LazyMeasuredItem;->(ILjava/util/List;ZLandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/ui/unit/LayoutDirection;ZIILandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;IJLjava/lang/Object;)V -HPLandroidx/compose/foundation/lazy/LazyMeasuredItem;->position(III)Landroidx/compose/foundation/lazy/LazyListPositionedItem; -HPLandroidx/compose/foundation/lazy/grid/LazyGridScopeImpl$DefaultSpan$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HPLandroidx/compose/foundation/lazy/grid/LazyGridState$scrollableState$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HPLandroidx/compose/foundation/lazy/grid/LazyGridState;->isVertical$foundation_release()Z -HPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->getContentType(Ljava/lang/Object;)Ljava/lang/Object; -HPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;->getSlotsToRetain(Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;)V -HPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->run()V -HPLandroidx/compose/material/ripple/RippleHostView;->updateRippleProperties-biQXAtU(JIJF)V -HPLandroidx/compose/material3/AndroidMenu_androidKt;->DropdownMenu-ILWXrKs(ZLkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;JLandroidx/compose/ui/window/PopupProperties;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V -HPLandroidx/compose/material3/ButtonKt;->TextButton(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/ButtonColors;Landroidx/compose/material3/ButtonElevation;Landroidx/compose/foundation/BorderStroke;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V -HPLandroidx/compose/material3/CardElevation;->animateElevation(ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/AnimationState; -HPLandroidx/compose/material3/CardKt$Card$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HPLandroidx/compose/material3/CardKt;->Card(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/CardColors;Landroidx/compose/material3/CardElevation;Landroidx/compose/foundation/BorderStroke;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V -HPLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HPLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$2$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HPLandroidx/compose/runtime/SlotWriter;->slot(II)Ljava/lang/Object; -HPLandroidx/compose/ui/ComposedModifierKt$materialize$result$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HPLandroidx/compose/ui/geometry/MutableRect;->intersect(FFFF)V -HPLandroidx/compose/ui/geometry/MutableRect;->isEmpty()Z -HPLandroidx/compose/ui/geometry/Offset;->minus-MK-Hz9U(JJ)J -HPLandroidx/compose/ui/geometry/Offset;->times-tuRUvjQ(FJ)J -HPLandroidx/compose/ui/graphics/Matrix;->map-impl([FLandroidx/compose/ui/geometry/MutableRect;)V -HPLandroidx/compose/ui/graphics/RectHelper_androidKt;->toAndroidRect(Landroidx/compose/ui/geometry/Rect;)Landroid/graphics/Rect; -HPLandroidx/compose/ui/input/pointer/MotionEventAdapter;->convertToPointerInputEvent$ui_release(Landroid/view/MotionEvent;Landroidx/compose/ui/input/pointer/PositionCalculator;)Landroidx/compose/ui/input/pointer/PointerInputEvent; -HPLandroidx/compose/ui/input/pointer/Node;->buildCache(Ljava/util/Map;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/input/pointer/InternalPointerEvent;Z)Z -HPLandroidx/compose/ui/input/pointer/Node;->dispatchMainEventPass(Ljava/util/Map;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/input/pointer/InternalPointerEvent;Z)Z -HPLandroidx/compose/ui/input/pointer/PointerInputChange;->(JJJZFJJZZIJ)V -HPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer;->produce(Landroidx/compose/ui/input/pointer/PointerInputEvent;Landroidx/compose/ui/input/pointer/PositionCalculator;)Landroidx/compose/ui/input/pointer/InternalPointerEvent; -HPLandroidx/compose/ui/input/pointer/PointerInputEventProcessor;->process-BIzXfog(Landroidx/compose/ui/input/pointer/PointerInputEvent;Landroidx/compose/ui/input/pointer/PositionCalculator;Z)I -HPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->dispatchPointerEvent(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;)V -HPLandroidx/compose/ui/layout/LayoutCoordinatesKt;->boundsInRoot(Landroidx/compose/ui/node/NodeCoordinator;)Landroidx/compose/ui/geometry/Rect; -HPLandroidx/compose/ui/layout/LayoutCoordinatesKt;->findRootCoordinates(Landroidx/compose/ui/node/NodeCoordinator;)Landroidx/compose/ui/layout/LayoutCoordinates; -HPLandroidx/compose/ui/node/LayoutNode;->(IZ)V -HPLandroidx/compose/ui/node/LayoutNode;->forceRemeasure()V -HPLandroidx/compose/ui/node/LayoutNode;->move$ui_release(III)V -HPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->measureAndLayout-0kLqBqw(Landroidx/compose/ui/node/LayoutNode;J)V -HPLandroidx/compose/ui/node/NodeCoordinator;->findCommonAncestor$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)Landroidx/compose/ui/node/NodeCoordinator; -HPLandroidx/compose/ui/node/NodeCoordinator;->fromParentPosition-MK-Hz9U(J)J -HPLandroidx/compose/ui/node/NodeCoordinator;->getParentLayoutCoordinates()Landroidx/compose/ui/node/NodeCoordinator; -HPLandroidx/compose/ui/node/NodeCoordinator;->hitTest-YqVAtuI(Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V -HPLandroidx/compose/ui/node/NodeCoordinator;->isTransparent()Z -HPLandroidx/compose/ui/platform/AndroidComposeView;->handleMotionEvent-8iAsVTc(Landroid/view/MotionEvent;)I -HPLandroidx/compose/ui/platform/AndroidComposeView;->localToScreen-MK-Hz9U(J)J -HPLandroidx/compose/ui/platform/AndroidComposeView;->measureAndLayout-0kLqBqw(Landroidx/compose/ui/node/LayoutNode;J)V -HPLandroidx/compose/ui/platform/AndroidComposeView;->recalculateWindowPosition()V -HPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Api24Impl;->addSetProgressAction(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;Landroidx/compose/ui/semantics/SemanticsNode;)V -HPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider;->createAccessibilityNodeInfo(I)Landroid/view/accessibility/AccessibilityNodeInfo; -HPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getIterableTextForAccessibility(Landroidx/compose/ui/semantics/SemanticsNode;)Ljava/lang/String; -HPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->getAllUncoveredSemanticsNodesToMap$findAllSemanticNodesRecursive(Landroid/graphics/Region;Landroidx/compose/ui/semantics/SemanticsNode;Ljava/util/LinkedHashMap;Landroidx/compose/ui/semantics/SemanticsNode;)V -HPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->isTextField(Landroidx/compose/ui/semantics/SemanticsNode;)Z -HPLandroidx/compose/ui/platform/CalculateMatrixToWindowApi29;->calculateMatrixToWindow-EL8BTi8(Landroid/view/View;[F)V -HPLandroidx/compose/ui/platform/RenderNodeLayer;->mapBounds(Landroidx/compose/ui/geometry/MutableRect;Z)V -HPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt;->setCollectionInfo(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;Landroidx/compose/ui/semantics/SemanticsNode;)V -HPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt;->setCollectionItemInfo(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;Landroidx/compose/ui/semantics/SemanticsNode;)V -HPLandroidx/compose/ui/semantics/NodeLocationHolder;->(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutNode;)V -HPLandroidx/compose/ui/semantics/NodeLocationHolder;->compareTo(Landroidx/compose/ui/semantics/NodeLocationHolder;)I -HPLandroidx/compose/ui/semantics/SemanticsNode$emitFakeNodes$fakeNode$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HPLandroidx/compose/ui/semantics/SemanticsNode;->(Landroidx/compose/ui/node/SemanticsModifierNode;Z)V -HPLandroidx/compose/ui/semantics/SemanticsNode;->fakeSemanticsNode-ypyhhiA(Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/semantics/SemanticsNode; -HPLandroidx/compose/ui/semantics/SemanticsNode;->findCoordinatorToGetBounds$ui_release()Landroidx/compose/ui/node/NodeCoordinator; -HPLandroidx/compose/ui/semantics/SemanticsNode;->getConfig()Landroidx/compose/ui/semantics/SemanticsConfiguration; -HPLandroidx/compose/ui/semantics/SemanticsNode;->getParent()Landroidx/compose/ui/semantics/SemanticsNode; -HPLandroidx/compose/ui/semantics/SemanticsNodeKt;->getOuterMergingSemantics(Landroidx/compose/ui/node/LayoutNode;)Landroidx/compose/ui/node/SemanticsModifierNode; -HPLandroidx/compose/ui/semantics/SemanticsSortKt;->findCoordinatorToGetBounds(Landroidx/compose/ui/node/LayoutNode;)Landroidx/compose/ui/node/NodeCoordinator; -HPLandroidx/compose/ui/semantics/SemanticsSortKt;->findOneLayerOfSemanticsWrappersSortedByBounds(Landroidx/compose/ui/node/LayoutNode;Ljava/util/List;)V -HPLandroidx/compose/ui/text/platform/AndroidAccessibilitySpannableString_androidKt;->toAccessibilitySpannableString(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;)Landroid/text/SpannableString; -HPLandroidx/compose/ui/unit/Density;->toSize-XkaWNTQ(J)J -HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->(Landroid/view/accessibility/AccessibilityNodeInfo;)V -HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->addAction(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;)V -HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->extrasIntList(Ljava/lang/String;)Ljava/util/ArrayList; -HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->getText()Ljava/lang/CharSequence; -HPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setStateDescription(Ljava/lang/CharSequence;)V -HPLandroidx/emoji2/text/MetadataRepo;->(Landroid/graphics/Typeface;Landroidx/emoji2/text/flatbuffer/MetadataList;)V -HPLandroidx/emoji2/text/flatbuffer/Table;->__reset(ILjava/nio/ByteBuffer;)V -HPLcoil/network/CacheResponse;->(Lokio/RealBufferedSource;)V -HPLcom/caverock/androidsvg/NumberParser;->parseNumber(IILjava/lang/String;)F -HPLcom/caverock/androidsvg/SVG$Style;->getDefaultStyle()Lcom/caverock/androidsvg/SVG$Style; -HPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;->__fetchRelationshiptopicsAscomGoogleSamplesAppsNowinandroidCoreDatabaseModelTopicEntity(Landroidx/collection/ArrayMap;)V -HPLcom/google/samples/apps/nowinandroid/core/designsystem/component/ButtonKt$NiaTextButton$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HPLcom/google/samples/apps/nowinandroid/core/designsystem/component/ButtonKt;->access$NiaButtonContent(Landroidx/compose/foundation/layout/RowScope;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V -HPLcom/google/samples/apps/nowinandroid/core/designsystem/component/TagKt;->NiaTopicTag(ZZLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;III)V -HPLcom/google/samples/apps/nowinandroid/core/ui/NewsFeedKt$newsFeed$$inlined$items$default$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HPLcom/google/samples/apps/nowinandroid/core/ui/NewsFeedKt$newsFeed$$inlined$items$default$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HPLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt$NewsResourceCardExpanded$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HPLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt;->NewsResourceTopics(Ljava/util/List;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V -HPLcom/google/samples/apps/nowinandroid/feature/interests/InterestsItemKt;->InterestContent(Ljava/lang/String;Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V -HPLcom/google/samples/apps/nowinandroid/feature/interests/InterestsItemKt;->InterestsItem-eKw1uXw(Ljava/lang/String;ZLjava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Ljava/lang/String;FLandroidx/compose/runtime/Composer;II)V -HPLj$/time/chrono/r;->Z(Ljava/util/HashMap;Lj$/time/format/E;)Lj$/time/chrono/b; -HPLj$/time/format/D;->d(Lj$/time/temporal/t;)Ljava/lang/Object; -HPLj$/time/format/DateTimeFormatter;->f(Ljava/lang/CharSequence;)Lj$/time/temporal/TemporalAccessor; -HPLj$/time/format/x;->r()V -HPLkotlinx/serialization/json/internal/AbstractJsonLexer;->peekNextToken()B -HPLkotlinx/serialization/json/internal/AbstractJsonLexer;->skipWhitespaces()I -HPLkotlinx/serialization/json/internal/ReaderJsonLexer;->canConsumeValue()Z -HPLkotlinx/serialization/json/internal/ReaderJsonLexer;->prefetchOrEof(I)I -HPLokhttp3/internal/http2/Hpack$Reader;->readByteString()Lokio/ByteString; -HPLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->data(IILokio/BufferedSource;Z)V -HPLokhttp3/internal/http2/Http2ExchangeCodec;->writeRequestHeaders(Lokhttp3/Request;)V -HPLokio/Buffer;->indexOf(BJJ)J -HPLokio/InputStreamSource;->read(Lokio/Buffer;J)J -HPLokio/RealBufferedSource;->request(J)Z -HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;->(Landroidx/activity/ComponentActivity;)V -HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda1;->(Landroidx/activity/ComponentActivity;)V -HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;->(Landroidx/activity/ComponentActivity;)V -HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;->onContextAvailable()V -HSPLandroidx/activity/ComponentActivity$1;->(Landroidx/activity/ComponentActivity;)V -HSPLandroidx/activity/ComponentActivity$2;->()V -HSPLandroidx/activity/ComponentActivity$3;->(Landroidx/activity/ComponentActivity;)V -HSPLandroidx/activity/ComponentActivity$3;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V -HSPLandroidx/activity/ComponentActivity$4;->(Landroidx/activity/ComponentActivity;)V -HSPLandroidx/activity/ComponentActivity$4;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V -HSPLandroidx/activity/ComponentActivity$5;->(Landroidx/activity/ComponentActivity;)V -HSPLandroidx/activity/ComponentActivity$5;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V -HSPLandroidx/activity/ComponentActivity$Api33Impl;->getOnBackInvokedDispatcher(Landroid/app/Activity;)Landroid/window/OnBackInvokedDispatcher; -HSPLandroidx/activity/ComponentActivity;->()V -HSPLandroidx/activity/ComponentActivity;->addOnContextAvailableListener(Landroidx/activity/contextaware/OnContextAvailableListener;)V -HSPLandroidx/activity/ComponentActivity;->getDefaultViewModelCreationExtras()Landroidx/lifecycle/viewmodel/CreationExtras; -HSPLandroidx/activity/ComponentActivity;->getDefaultViewModelProviderFactory()Landroidx/lifecycle/ViewModelProvider$Factory; -HSPLandroidx/activity/ComponentActivity;->getLifecycle()Landroidx/lifecycle/Lifecycle; -HSPLandroidx/activity/ComponentActivity;->getOnBackPressedDispatcher()Landroidx/activity/OnBackPressedDispatcher; -HSPLandroidx/activity/ComponentActivity;->getSavedStateRegistry()Landroidx/savedstate/SavedStateRegistry; -HSPLandroidx/activity/ComponentActivity;->getViewModelStore()Landroidx/lifecycle/ViewModelStore; -HSPLandroidx/activity/ComponentActivity;->initViewTreeOwners()V -HSPLandroidx/activity/ComponentActivity;->onCreate(Landroid/os/Bundle;)V -HSPLandroidx/activity/ComponentActivity;->reportFullyDrawn()V -HSPLandroidx/activity/ComponentActivity;->setContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V -HSPLandroidx/activity/OnBackPressedCallback;->(Z)V -HSPLandroidx/activity/OnBackPressedDispatcher$$ExternalSyntheticLambda0;->(Landroidx/activity/OnBackPressedDispatcher;)V -HSPLandroidx/activity/OnBackPressedDispatcher$$ExternalSyntheticLambda0;->accept(Ljava/lang/Object;)V -HSPLandroidx/activity/OnBackPressedDispatcher$$ExternalSyntheticLambda1;->(Landroidx/activity/OnBackPressedDispatcher;)V -HSPLandroidx/activity/OnBackPressedDispatcher$Api33Impl$$ExternalSyntheticLambda0;->(Ljava/lang/Runnable;)V -HSPLandroidx/activity/OnBackPressedDispatcher$Api33Impl;->createOnBackInvokedCallback(Ljava/lang/Runnable;)Landroid/window/OnBackInvokedCallback; -HSPLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;->(Landroidx/activity/OnBackPressedDispatcher;Landroidx/lifecycle/Lifecycle;Landroidx/activity/OnBackPressedCallback;)V -HSPLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V -HSPLandroidx/activity/OnBackPressedDispatcher$OnBackPressedCancellable;->(Landroidx/activity/OnBackPressedDispatcher;Landroidx/activity/OnBackPressedCallback;)V -HSPLandroidx/activity/OnBackPressedDispatcher;->(Ljava/lang/Runnable;)V -HSPLandroidx/activity/OnBackPressedDispatcher;->addCallback(Landroidx/lifecycle/LifecycleOwner;Landroidx/activity/OnBackPressedCallback;)V -HSPLandroidx/activity/OnBackPressedDispatcher;->updateBackInvokedCallbackState()V -HSPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$1;->()V -HSPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$1;->()V -HSPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$2;->()V -HSPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$2;->()V -HSPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/activity/compose/ComponentActivityKt;->()V -HSPLandroidx/activity/compose/LocalOnBackPressedDispatcherOwner$LocalOnBackPressedDispatcherOwner$1;->()V -HSPLandroidx/activity/compose/LocalOnBackPressedDispatcherOwner$LocalOnBackPressedDispatcherOwner$1;->()V -HSPLandroidx/activity/compose/LocalOnBackPressedDispatcherOwner$LocalOnBackPressedDispatcherOwner$1;->invoke()Ljava/lang/Object; -HSPLandroidx/activity/compose/LocalOnBackPressedDispatcherOwner;->()V -HSPLandroidx/activity/contextaware/ContextAwareHelper;->()V -HSPLandroidx/activity/result/ActivityResult$$ExternalSyntheticOutline0;->m(Ljava/lang/String;)Ljava/lang/StringBuilder; -HSPLandroidx/activity/result/ActivityResultRegistry;->()V -HSPLandroidx/appcompat/R$bool;->stringResource(ILandroidx/compose/runtime/Composer;I)Ljava/lang/String; -HSPLandroidx/appcompat/R$style;->build(Lkotlin/collections/builders/SetBuilder;)Lkotlin/collections/builders/SetBuilder; -HSPLandroidx/appcompat/resources/R$drawable;->get(Landroid/view/View;)Landroidx/lifecycle/LifecycleOwner; -HSPLandroidx/appcompat/view/SupportMenuInflater$$ExternalSyntheticOutline0;->m(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; -HSPLandroidx/appcompat/widget/AppCompatTextHelper$Api28Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Typeface;IZ)Landroid/graphics/Typeface; -HSPLandroidx/arch/core/executor/ArchTaskExecutor$2;->()V -HSPLandroidx/arch/core/executor/ArchTaskExecutor$2;->execute(Ljava/lang/Runnable;)V -HSPLandroidx/arch/core/executor/ArchTaskExecutor;->()V -HSPLandroidx/arch/core/executor/ArchTaskExecutor;->()V -HSPLandroidx/arch/core/executor/ArchTaskExecutor;->getInstance()Landroidx/arch/core/executor/ArchTaskExecutor; -HSPLandroidx/arch/core/executor/ArchTaskExecutor;->isMainThread()Z -HSPLandroidx/arch/core/executor/ArchTaskExecutor;->postToMainThread(Ljava/lang/Runnable;)V -HSPLandroidx/arch/core/executor/DefaultTaskExecutor$$ExternalSyntheticApiModelOutline0;->m(Landroid/os/Looper;)Landroid/os/Handler; -HSPLandroidx/arch/core/executor/DefaultTaskExecutor$1;->()V -HSPLandroidx/arch/core/executor/DefaultTaskExecutor$1;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread; -HSPLandroidx/arch/core/executor/DefaultTaskExecutor;->()V -HSPLandroidx/arch/core/executor/DefaultTaskExecutor;->createAsync(Landroid/os/Looper;)Landroid/os/Handler; -HSPLandroidx/arch/core/executor/TaskExecutor;->()V -HSPLandroidx/arch/core/internal/FastSafeIterableMap;->()V -HSPLandroidx/arch/core/internal/FastSafeIterableMap;->get(Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry; -HSPLandroidx/arch/core/internal/FastSafeIterableMap;->putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/arch/core/internal/FastSafeIterableMap;->remove(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/arch/core/internal/SafeIterableMap$AscendingIterator;->(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;)V -HSPLandroidx/arch/core/internal/SafeIterableMap$AscendingIterator;->forward(Landroidx/arch/core/internal/SafeIterableMap$Entry;)Landroidx/arch/core/internal/SafeIterableMap$Entry; -HSPLandroidx/arch/core/internal/SafeIterableMap$Entry;->(Ljava/lang/Object;Ljava/lang/Object;)V -HSPLandroidx/arch/core/internal/SafeIterableMap$Entry;->getKey()Ljava/lang/Object; -HSPLandroidx/arch/core/internal/SafeIterableMap$Entry;->getValue()Ljava/lang/Object; -HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->(Landroidx/arch/core/internal/SafeIterableMap;)V -HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->hasNext()Z -HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->next()Ljava/lang/Object; -HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->supportRemove(Landroidx/arch/core/internal/SafeIterableMap$Entry;)V -HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;)V -HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->hasNext()Z -HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->next()Ljava/lang/Object; -HSPLandroidx/arch/core/internal/SafeIterableMap;->()V -HSPLandroidx/arch/core/internal/SafeIterableMap;->get(Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry; -HSPLandroidx/arch/core/internal/SafeIterableMap;->iterator()Ljava/util/Iterator; -HSPLandroidx/arch/core/internal/SafeIterableMap;->putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/arch/core/internal/SafeIterableMap;->remove(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/collection/ArrayMap$KeyIterator;->(Landroidx/collection/ArrayMap;)V -HSPLandroidx/collection/ArrayMap$KeyIterator;->elementAt(I)Ljava/lang/Object; -HSPLandroidx/collection/ArrayMap$KeySet;->(Landroidx/collection/ArrayMap;)V -HSPLandroidx/collection/ArrayMap$KeySet;->isEmpty()Z -HSPLandroidx/collection/ArrayMap$KeySet;->iterator()Ljava/util/Iterator; -HSPLandroidx/collection/ArrayMap;->()V -HSPLandroidx/collection/ArrayMap;->keySet()Ljava/util/Set; -HSPLandroidx/collection/ArraySet;->()V -HSPLandroidx/collection/ArraySet;->()V -HSPLandroidx/collection/ArraySet;->(I)V -HSPLandroidx/collection/IndexBasedArrayIterator;->(I)V -HSPLandroidx/collection/IndexBasedArrayIterator;->hasNext()Z -HSPLandroidx/collection/IndexBasedArrayIterator;->next()Ljava/lang/Object; -HSPLandroidx/collection/LruCache;->(I)V -HSPLandroidx/collection/LruCache;->get(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/collection/SimpleArrayMap;->()V -HSPLandroidx/collection/SimpleArrayMap;->allocArrays(I)V -HSPLandroidx/collection/SimpleArrayMap;->freeArrays([I[Ljava/lang/Object;I)V -HSPLandroidx/collection/SimpleArrayMap;->getOrDefault(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/collection/SimpleArrayMap;->indexOf(ILjava/lang/Object;)I -HSPLandroidx/collection/SimpleArrayMap;->indexOfKey(Ljava/lang/Object;)I -HSPLandroidx/collection/SimpleArrayMap;->isEmpty()Z -HSPLandroidx/collection/SimpleArrayMap;->keyAt(I)Ljava/lang/Object; -HSPLandroidx/collection/SimpleArrayMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/collection/SparseArrayCompat;->()V -HSPLandroidx/collection/SparseArrayCompat;->()V -HSPLandroidx/collection/SparseArrayCompat;->get(ILjava/lang/Integer;)Ljava/lang/Object; -HSPLandroidx/collection/SparseArrayCompat;->put(ILjava/lang/Object;)V -HSPLandroidx/collection/SparseArrayCompat;->size()I -HSPLandroidx/collection/SparseArrayCompat;->valueAt(I)Ljava/lang/Object; -HSPLandroidx/collection/SparseArrayKt$valueIterator$1;->(Landroidx/collection/SparseArrayCompat;)V -HSPLandroidx/collection/SparseArrayKt$valueIterator$1;->hasNext()Z -HSPLandroidx/collection/SparseArrayKt$valueIterator$1;->next()Ljava/lang/Object; -HSPLandroidx/compose/animation/AnimatedEnterExitMeasurePolicy$measure$1;->(Ljava/util/ArrayList;)V -HSPLandroidx/compose/animation/AnimatedEnterExitMeasurePolicy$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/AnimatedEnterExitMeasurePolicy;->(Landroidx/compose/animation/AnimatedVisibilityScopeImpl;)V -HSPLandroidx/compose/animation/AnimatedEnterExitMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; -HSPLandroidx/compose/animation/AnimatedVisibilityKt$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/ComposerImpl;Landroidx/compose/ui/platform/ViewConfiguration;Landroidx/compose/ui/node/ComposeUiNode$Companion$SetViewConfiguration$1;Landroidx/compose/runtime/ComposerImpl;)Landroidx/compose/runtime/SkippableUpdater; -HSPLandroidx/compose/animation/AnimatedVisibilityKt$$ExternalSyntheticOutline1;->m(ILandroidx/compose/runtime/internal/ComposableLambdaImpl;Landroidx/compose/runtime/SkippableUpdater;Landroidx/compose/runtime/ComposerImpl;II)V -HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1$1;->(Landroidx/compose/animation/core/Transition;)V -HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1$2;->(Landroidx/compose/runtime/MutableState;)V -HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$2;->(Landroidx/compose/animation/core/Transition;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function3;I)V -HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$1;->()V -HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$1;->()V -HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$2;->(ZLandroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Ljava/lang/String;Lkotlin/jvm/functions/Function3;II)V -HSPLandroidx/compose/animation/AnimatedVisibilityKt;->AnimatedEnterExitImpl(Landroidx/compose/animation/core/Transition;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V -HSPLandroidx/compose/animation/AnimatedVisibilityKt;->AnimatedVisibility(ZLandroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Ljava/lang/String;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V -HSPLandroidx/compose/animation/AnimatedVisibilityKt;->targetEnterExit(Landroidx/compose/animation/core/Transition;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/EnterExitState; -HSPLandroidx/compose/animation/AnimatedVisibilityScopeImpl;->(Landroidx/compose/animation/core/Transition;)V -HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;->()V -HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;->()V -HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$2;->(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)V -HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/ColorVectorConverterKt;->()V -HSPLandroidx/compose/animation/ColorVectorConverterKt;->access$multiplyColumn(IFFF[F)F -HSPLandroidx/compose/animation/CrossfadeKt$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/ComposerImpl;ZZZZ)V -HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$2;->(Ljava/lang/Object;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/core/FiniteAnimationSpec;Lkotlin/jvm/functions/Function3;II)V -HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$3;->()V -HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$3;->()V -HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$$ExternalSyntheticOutline0;->m(ILandroidx/compose/runtime/internal/ComposableLambdaImpl;Landroidx/compose/runtime/SkippableUpdater;Landroidx/compose/runtime/Composer;II)V -HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$1$1;->(Landroidx/compose/animation/core/Transition$TransitionAnimationState;)V -HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1;->(Landroidx/compose/animation/core/Transition;ILandroidx/compose/animation/core/FiniteAnimationSpec;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;)V -HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$7;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/core/FiniteAnimationSpec;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;II)V -HSPLandroidx/compose/animation/CrossfadeKt;->Crossfade(Landroidx/compose/animation/core/Transition;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/core/FiniteAnimationSpec;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V -HSPLandroidx/compose/animation/CrossfadeKt;->Crossfade(Ljava/lang/Object;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/core/FiniteAnimationSpec;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V -HSPLandroidx/compose/animation/EnterExitState;->()V -HSPLandroidx/compose/animation/EnterExitState;->(ILjava/lang/String;)V -HSPLandroidx/compose/animation/EnterExitTransitionKt$TransformOriginVectorConverter$1;->()V -HSPLandroidx/compose/animation/EnterExitTransitionKt$TransformOriginVectorConverter$1;->()V -HSPLandroidx/compose/animation/EnterExitTransitionKt$TransformOriginVectorConverter$2;->()V -HSPLandroidx/compose/animation/EnterExitTransitionKt$TransformOriginVectorConverter$2;->()V -HSPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$2$1;->(Landroidx/compose/runtime/State;)V -HSPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$alpha$2;->(Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;)V -HSPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$alpha$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/EnterExitTransitionKt$shrinkExpand$1$$ExternalSyntheticOutline0;->m(Ljava/lang/Number;Landroidx/compose/ui/Modifier;Ljava/lang/String;Landroidx/compose/runtime/Composer;I)Z -HSPLandroidx/compose/animation/EnterExitTransitionKt$shrinkExpand$1;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;)V -HSPLandroidx/compose/animation/EnterExitTransitionKt$shrinkExpand$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/EnterExitTransitionKt$slideInOut$1;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;)V -HSPLandroidx/compose/animation/EnterExitTransitionKt$slideInOut$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/EnterExitTransitionKt$slideInVertically$2;->(Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/animation/EnterExitTransitionKt$slideInVertically$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/EnterExitTransitionKt$slideOutVertically$2;->(Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/animation/EnterExitTransitionKt$slideOutVertically$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/EnterExitTransitionKt;->()V -HSPLandroidx/compose/animation/EnterExitTransitionKt;->fadeIn$default()Landroidx/compose/animation/EnterTransitionImpl; -HSPLandroidx/compose/animation/EnterExitTransitionKt;->fadeOut$default()Landroidx/compose/animation/ExitTransitionImpl; -HSPLandroidx/compose/animation/EnterTransition;->()V -HSPLandroidx/compose/animation/EnterTransition;->()V -HSPLandroidx/compose/animation/EnterTransition;->plus(Landroidx/compose/animation/EnterTransitionImpl;)Landroidx/compose/animation/EnterTransitionImpl; -HSPLandroidx/compose/animation/EnterTransitionImpl;->(Landroidx/compose/animation/TransitionData;)V -HSPLandroidx/compose/animation/EnterTransitionImpl;->getData$animation_release()Landroidx/compose/animation/TransitionData; -HSPLandroidx/compose/animation/ExitTransition;->()V -HSPLandroidx/compose/animation/ExitTransition;->()V -HSPLandroidx/compose/animation/ExitTransition;->plus(Landroidx/compose/animation/ExitTransitionImpl;)Landroidx/compose/animation/ExitTransitionImpl; -HSPLandroidx/compose/animation/ExitTransitionImpl;->(Landroidx/compose/animation/TransitionData;)V -HSPLandroidx/compose/animation/ExitTransitionImpl;->getData$animation_release()Landroidx/compose/animation/TransitionData; -HSPLandroidx/compose/animation/Fade;->(FLandroidx/compose/animation/core/FiniteAnimationSpec;)V -HSPLandroidx/compose/animation/FlingCalculator;->(FLandroidx/compose/ui/unit/Density;)V -HSPLandroidx/compose/animation/FlingCalculatorKt;->()V -HSPLandroidx/compose/animation/LayoutModifierWithPassThroughIntrinsics;->()V -HSPLandroidx/compose/animation/SingleValueAnimationKt;->()V -HSPLandroidx/compose/animation/SingleValueAnimationKt;->animateColorAsState-KTwxG1Y(JLandroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/runtime/Composer;)Landroidx/compose/animation/core/AnimationState; -HSPLandroidx/compose/animation/Slide;->(Landroidx/compose/animation/core/FiniteAnimationSpec;Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/animation/Slide;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/animation/SlideModifier$measure$1$slideOffset$1;->(Landroidx/compose/animation/SlideModifier;J)V -HSPLandroidx/compose/animation/SlideModifier$measure$1$slideOffset$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/SlideModifier$measure$1;->(Landroidx/compose/animation/SlideModifier;Landroidx/compose/ui/layout/Placeable;J)V -HSPLandroidx/compose/animation/SlideModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/SlideModifier$transitionSpec$1;->(Landroidx/compose/animation/SlideModifier;)V -HSPLandroidx/compose/animation/SlideModifier$transitionSpec$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/SlideModifier;->(Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;)V -HSPLandroidx/compose/animation/SlideModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; -HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;->(Landroidx/compose/ui/unit/Density;)V -HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;->()V -HSPLandroidx/compose/animation/TransitionData;->(Landroidx/compose/animation/Fade;Landroidx/compose/animation/Slide;Landroidx/compose/animation/ChangeSize;)V -HSPLandroidx/compose/animation/TransitionData;->(Landroidx/compose/animation/Fade;Landroidx/compose/animation/Slide;Landroidx/compose/animation/ChangeSize;I)V -HSPLandroidx/compose/animation/core/Animatable$runAnimation$2$1;->(Landroidx/compose/animation/core/Animatable;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/Ref$BooleanRef;)V -HSPLandroidx/compose/animation/core/Animatable$runAnimation$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;->(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;Landroidx/compose/animation/core/Animation;JLkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/core/Animatable$snapTo$2;->(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/animation/core/Animatable$snapTo$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/core/Animatable$snapTo$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/core/Animatable;->(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Ljava/lang/String;)V -HSPLandroidx/compose/animation/core/Animatable;->(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverterImpl;)V -HSPLandroidx/compose/animation/core/Animatable;->access$clampToBounds(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/core/Animatable;->animateTo$default(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationSpec;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLandroidx/compose/animation/core/Animatable;->getValue()Ljava/lang/Object; -HSPLandroidx/compose/animation/core/Animatable;->snapTo(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLandroidx/compose/animation/core/AnimatableKt;->Animatable$default(F)Landroidx/compose/animation/core/Animatable; -HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2;->(Lkotlinx/coroutines/channels/Channel;Ljava/lang/Object;)V -HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;->(Ljava/lang/Object;Landroidx/compose/animation/core/Animatable;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;->(Lkotlinx/coroutines/channels/Channel;Landroidx/compose/animation/core/Animatable;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/core/AnimateAsStateKt;->()V -HSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateFloatAsState(FLandroidx/compose/animation/core/TweenSpec;Landroidx/compose/runtime/Composer;)Landroidx/compose/animation/core/AnimationState; -HSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateValueAsState(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/animation/core/AnimationSpec;Ljava/lang/Float;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/animation/core/AnimationState; -HSPLandroidx/compose/animation/core/Animation;->isFinishedFromNanos(J)Z -HSPLandroidx/compose/animation/core/AnimationEndReason$EnumUnboxingSharedUtility;->()V -HSPLandroidx/compose/animation/core/AnimationEndReason$EnumUnboxingSharedUtility;->ordinal(I)I -HSPLandroidx/compose/animation/core/AnimationEndReason$EnumUnboxingSharedUtility;->values(I)[I -HSPLandroidx/compose/animation/core/AnimationResult;->(Landroidx/compose/animation/core/AnimationState;I)V -HSPLandroidx/compose/animation/core/AnimationScope;->(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/animation/core/AnimationVector;JLjava/lang/Object;JLkotlin/jvm/functions/Function0;)V -HSPLandroidx/compose/animation/core/AnimationScope;->getValue()Ljava/lang/Object; -HSPLandroidx/compose/animation/core/AnimationSpecKt;->spring$default(FLjava/lang/Object;I)Landroidx/compose/animation/core/SpringSpec; -HSPLandroidx/compose/animation/core/AnimationSpecKt;->tween$default(IILandroidx/compose/animation/core/Easing;I)Landroidx/compose/animation/core/TweenSpec; -HSPLandroidx/compose/animation/core/AnimationState;->(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;I)V -HSPLandroidx/compose/animation/core/AnimationState;->(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;JJZ)V -HSPLandroidx/compose/animation/core/AnimationState;->getValue()Ljava/lang/Object; -HSPLandroidx/compose/animation/core/AnimationVector1D;->(F)V -HSPLandroidx/compose/animation/core/AnimationVector1D;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/animation/core/AnimationVector1D;->get$animation_core_release(I)F -HSPLandroidx/compose/animation/core/AnimationVector1D;->getSize$animation_core_release()I -HSPLandroidx/compose/animation/core/AnimationVector1D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector; -HSPLandroidx/compose/animation/core/AnimationVector1D;->reset$animation_core_release()V -HSPLandroidx/compose/animation/core/AnimationVector1D;->set$animation_core_release(IF)V -HSPLandroidx/compose/animation/core/AnimationVector2D;->(FF)V -HSPLandroidx/compose/animation/core/AnimationVector2D;->get$animation_core_release(I)F -HSPLandroidx/compose/animation/core/AnimationVector2D;->getSize$animation_core_release()I -HSPLandroidx/compose/animation/core/AnimationVector2D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector; -HSPLandroidx/compose/animation/core/AnimationVector2D;->set$animation_core_release(IF)V -HSPLandroidx/compose/animation/core/AnimationVector4D;->(FFFF)V -HSPLandroidx/compose/animation/core/AnimationVector4D;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/animation/core/AnimationVector4D;->get$animation_core_release(I)F -HSPLandroidx/compose/animation/core/AnimationVector4D;->getSize$animation_core_release()I -HSPLandroidx/compose/animation/core/AnimationVector4D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector; -HSPLandroidx/compose/animation/core/AnimationVector4D;->reset$animation_core_release()V -HSPLandroidx/compose/animation/core/AnimationVector4D;->set$animation_core_release(IF)V -HSPLandroidx/compose/animation/core/AnimationVector;->()V -HSPLandroidx/compose/animation/core/AnimationVectorsKt;->copy(Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; -HSPLandroidx/compose/animation/core/AnimationVectorsKt;->newInstance(Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; -HSPLandroidx/compose/animation/core/ComplexDouble;->(DD)V -HSPLandroidx/compose/animation/core/ComplexDoubleKt;->complexSqrt(D)Landroidx/compose/animation/core/ComplexDouble; -HSPLandroidx/compose/animation/core/CubicBezierEasing;->(FF)V -HSPLandroidx/compose/animation/core/CubicBezierEasing;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/animation/core/CubicBezierEasing;->transform(F)F -HSPLandroidx/compose/animation/core/DecayAnimationSpecImpl;->(Landroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;)V -HSPLandroidx/compose/animation/core/EasingKt$LinearEasing$1;->()V -HSPLandroidx/compose/animation/core/EasingKt$LinearEasing$1;->()V -HSPLandroidx/compose/animation/core/EasingKt$LinearEasing$1;->transform(F)F -HSPLandroidx/compose/animation/core/EasingKt;->()V -HSPLandroidx/compose/animation/core/FloatSpringSpec;->(FFF)V -HSPLandroidx/compose/animation/core/FloatSpringSpec;->(FFI)V -HSPLandroidx/compose/animation/core/FloatSpringSpec;->getDurationNanos(FFF)J -HSPLandroidx/compose/animation/core/FloatSpringSpec;->getEndVelocity(FFF)F -HSPLandroidx/compose/animation/core/FloatSpringSpec;->getValueFromNanos(JFFF)F -HSPLandroidx/compose/animation/core/FloatSpringSpec;->getVelocityFromNanos(JFFF)F -HSPLandroidx/compose/animation/core/FloatTweenSpec;->(IILandroidx/compose/animation/core/Easing;)V -HSPLandroidx/compose/animation/core/FloatTweenSpec;->getValueFromNanos(JFFF)F -HSPLandroidx/compose/animation/core/FloatTweenSpec;->getVelocityFromNanos(JFFF)F -HSPLandroidx/compose/animation/core/InfiniteAnimationPolicyKt;->withInfiniteAnimationFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/jvm/internal/ContinuationImpl;)Ljava/lang/Object; -HSPLandroidx/compose/animation/core/InfiniteRepeatableSpec;->(Landroidx/compose/animation/core/DurationBasedAnimationSpec;IJ)V -HSPLandroidx/compose/animation/core/InfiniteRepeatableSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedAnimationSpec; -HSPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->(Landroidx/compose/animation/core/InfiniteTransition;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/animation/core/AnimationSpec;)V -HSPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->getValue()Ljava/lang/Object; -HSPLandroidx/compose/animation/core/InfiniteTransition$run$1$1;->(Landroidx/compose/animation/core/InfiniteTransition;Lkotlin/jvm/internal/Ref$FloatRef;Lkotlinx/coroutines/CoroutineScope;)V -HSPLandroidx/compose/animation/core/InfiniteTransition$run$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/core/InfiniteTransition$run$1;->(Landroidx/compose/animation/core/InfiniteTransition;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/animation/core/InfiniteTransition$run$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/animation/core/InfiniteTransition$run$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/core/InfiniteTransition$run$2;->(Landroidx/compose/animation/core/InfiniteTransition;I)V -HSPLandroidx/compose/animation/core/InfiniteTransition;->()V -HSPLandroidx/compose/animation/core/InfiniteTransition;->run$animation_core_release(Landroidx/compose/runtime/Composer;I)V -HSPLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$1;->(Ljava/lang/Object;Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;Ljava/lang/Object;Landroidx/compose/animation/core/InfiniteRepeatableSpec;)V -HSPLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$2$invoke$$inlined$onDispose$1;->(Landroidx/compose/animation/core/InfiniteTransition;Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;)V -HSPLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$2;->(Landroidx/compose/animation/core/InfiniteTransition;Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;)V -HSPLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/core/InfiniteTransitionKt;->animateValue(Landroidx/compose/animation/core/InfiniteTransition;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/animation/core/InfiniteRepeatableSpec;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState; -HSPLandroidx/compose/animation/core/KeyframesSpec$KeyframeEntity;->(Landroidx/compose/ui/graphics/Color;)V -HSPLandroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;->()V -HSPLandroidx/compose/animation/core/KeyframesSpec;->(Landroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;)V -HSPLandroidx/compose/animation/core/KeyframesSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec; -HSPLandroidx/compose/animation/core/KeyframesSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedKeyframesSpec; -HSPLandroidx/compose/animation/core/MutableTransitionState;->(Ljava/lang/Object;)V -HSPLandroidx/compose/animation/core/MutatorMutex$Mutator;->(ILkotlinx/coroutines/Job;)V -HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->(ILandroidx/compose/animation/core/MutatorMutex;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/core/MutatorMutex;->()V -HSPLandroidx/compose/animation/core/SpringSimulation;->()V -HSPLandroidx/compose/animation/core/SpringSimulation;->updateValues-IJZedt4$animation_core_release(FFJ)J -HSPLandroidx/compose/animation/core/SpringSpec;->(FFLjava/lang/Object;)V -HSPLandroidx/compose/animation/core/SpringSpec;->(Ljava/lang/Object;I)V -HSPLandroidx/compose/animation/core/SpringSpec;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/animation/core/SpringSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedAnimationSpec; -HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$4;->(Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$6$1;->(Landroidx/compose/animation/core/AnimationState;)V -HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$6;->(Lkotlin/jvm/internal/Ref$ObjectRef;Ljava/lang/Object;Landroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationState;FLkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$6;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$9;->(Lkotlin/jvm/internal/Ref$ObjectRef;FLandroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$9;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/core/SuspendAnimationKt$callWithFrameNanos$2;->(Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/animation/core/SuspendAnimationKt$callWithFrameNanos$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/core/SuspendAnimationKt;->animate(Landroidx/compose/animation/core/AnimationState;Landroidx/compose/animation/core/Animation;JLkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLandroidx/compose/animation/core/SuspendAnimationKt;->doAnimationFrameWithScale(Landroidx/compose/animation/core/AnimationScope;JFLandroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/animation/core/SuspendAnimationKt;->getDurationScale(Lkotlin/coroutines/CoroutineContext;)F -HSPLandroidx/compose/animation/core/SuspendAnimationKt;->updateState(Landroidx/compose/animation/core/AnimationScope;Landroidx/compose/animation/core/AnimationState;)V -HSPLandroidx/compose/animation/core/TargetBasedAnimation;->(Landroidx/compose/animation/core/AnimationSpec;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Ljava/lang/Object;)V -HSPLandroidx/compose/animation/core/TargetBasedAnimation;->(Landroidx/compose/animation/core/AnimationSpec;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;)V -HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getDurationNanos()J -HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getTargetValue()Ljava/lang/Object; -HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getTypeConverter()Landroidx/compose/animation/core/TwoWayConverter; -HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getValueFromNanos(J)Ljava/lang/Object; -HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getVelocityVectorFromNanos(J)Landroidx/compose/animation/core/AnimationVector; -HSPLandroidx/compose/animation/core/TargetBasedAnimation;->isInfinite()Z -HSPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->(Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/core/Transition$TransitionAnimationState;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->getValue()Ljava/lang/Object; -HSPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->updateAnimationStates(Landroidx/compose/animation/core/Transition$Segment;)V -HSPLandroidx/compose/animation/core/Transition$DeferredAnimation;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/TwoWayConverterImpl;Ljava/lang/String;)V -HSPLandroidx/compose/animation/core/Transition$DeferredAnimation;->animate(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData; -HSPLandroidx/compose/animation/core/Transition$Segment;->isTransitioningTo(Ljava/lang/Object;Ljava/lang/Object;)Z -HSPLandroidx/compose/animation/core/Transition$SegmentImpl;->(Ljava/lang/Object;Ljava/lang/Object;)V -HSPLandroidx/compose/animation/core/Transition$SegmentImpl;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/animation/core/Transition$SegmentImpl;->getInitialState()Ljava/lang/Object; -HSPLandroidx/compose/animation/core/Transition$SegmentImpl;->getTargetState()Ljava/lang/Object; -HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/String;)V -HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->getAnimation()Landroidx/compose/animation/core/TargetBasedAnimation; -HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->getAnimationSpec()Landroidx/compose/animation/core/FiniteAnimationSpec; -HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->getValue()Ljava/lang/Object; -HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->updateAnimation$default(Landroidx/compose/animation/core/Transition$TransitionAnimationState;Ljava/lang/Object;ZI)V -HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->updateTargetValue$animation_core_release(Ljava/lang/Object;Landroidx/compose/animation/core/FiniteAnimationSpec;)V -HSPLandroidx/compose/animation/core/Transition$animateTo$1$1$1;->(Landroidx/compose/animation/core/Transition;F)V -HSPLandroidx/compose/animation/core/Transition$animateTo$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/core/Transition$animateTo$1$1;->(Landroidx/compose/animation/core/Transition;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/animation/core/Transition$animateTo$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/animation/core/Transition$animateTo$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/core/Transition$animateTo$2;->(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;I)V -HSPLandroidx/compose/animation/core/Transition$animateTo$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/core/Transition$totalDurationNanos$2;->(Landroidx/compose/animation/core/Transition;)V -HSPLandroidx/compose/animation/core/Transition$updateTarget$2;->(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;I)V -HSPLandroidx/compose/animation/core/Transition;->(Landroidx/compose/animation/core/MutableTransitionState;Ljava/lang/String;)V -HSPLandroidx/compose/animation/core/Transition;->animateTo$animation_core_release(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)V -HSPLandroidx/compose/animation/core/Transition;->getCurrentState()Ljava/lang/Object; -HSPLandroidx/compose/animation/core/Transition;->getSegment()Landroidx/compose/animation/core/Transition$Segment; -HSPLandroidx/compose/animation/core/Transition;->getTargetState()Ljava/lang/Object; -HSPLandroidx/compose/animation/core/Transition;->isSeeking()Z -HSPLandroidx/compose/animation/core/Transition;->onFrame$animation_core_release(FJ)V -HSPLandroidx/compose/animation/core/Transition;->onTransitionEnd$animation_core_release()V -HSPLandroidx/compose/animation/core/Transition;->updateTarget$animation_core_release(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)V -HSPLandroidx/compose/animation/core/TransitionKt$createChildTransitionInternal$1$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/Transition;)V -HSPLandroidx/compose/animation/core/TransitionKt$createChildTransitionInternal$1$1;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/Transition;)V -HSPLandroidx/compose/animation/core/TransitionKt$createChildTransitionInternal$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/core/TransitionKt$createDeferredAnimation$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/Transition$DeferredAnimation;)V -HSPLandroidx/compose/animation/core/TransitionKt$createDeferredAnimation$1;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/Transition$DeferredAnimation;)V -HSPLandroidx/compose/animation/core/TransitionKt$createDeferredAnimation$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/core/TransitionKt$createTransitionAnimation$1$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/Transition$TransitionAnimationState;)V -HSPLandroidx/compose/animation/core/TransitionKt$createTransitionAnimation$1$1;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/Transition$TransitionAnimationState;)V -HSPLandroidx/compose/animation/core/TransitionKt$createTransitionAnimation$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/animation/core/Transition;)V -HSPLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1;->(Landroidx/compose/animation/core/Transition;)V -HSPLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/core/TransitionKt;->createDeferredAnimation(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/TwoWayConverterImpl;Ljava/lang/String;Landroidx/compose/runtime/Composer;)Landroidx/compose/animation/core/Transition$DeferredAnimation; -HSPLandroidx/compose/animation/core/TransitionKt;->createTransitionAnimation(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/animation/core/TwoWayConverterImpl;Ljava/lang/String;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/Transition$TransitionAnimationState; -HSPLandroidx/compose/animation/core/TransitionKt;->updateTransition(Ljava/lang/Object;Ljava/lang/String;Landroidx/compose/runtime/Composer;II)Landroidx/compose/animation/core/Transition; -HSPLandroidx/compose/animation/core/TweenSpec;->(IILandroidx/compose/animation/core/Easing;)V -HSPLandroidx/compose/animation/core/TweenSpec;->(ILandroidx/compose/animation/core/Easing;I)V -HSPLandroidx/compose/animation/core/TweenSpec;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/animation/core/TweenSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedAnimationSpec; -HSPLandroidx/compose/animation/core/TweenSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec; -HSPLandroidx/compose/animation/core/TwoWayConverterImpl;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/animation/core/TwoWayConverterImpl;->getConvertFromVector()Lkotlin/jvm/functions/Function1; -HSPLandroidx/compose/animation/core/TwoWayConverterImpl;->getConvertToVector()Lkotlin/jvm/functions/Function1; -HSPLandroidx/compose/animation/core/VectorConvertersKt$DpOffsetToVector$1;->()V -HSPLandroidx/compose/animation/core/VectorConvertersKt$DpOffsetToVector$1;->()V -HSPLandroidx/compose/animation/core/VectorConvertersKt$DpOffsetToVector$2;->()V -HSPLandroidx/compose/animation/core/VectorConvertersKt$DpOffsetToVector$2;->()V -HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$1;->()V -HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$1;->()V -HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$2;->()V -HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$2;->()V -HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$1;->()V -HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$1;->()V -HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$2;->()V -HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$2;->()V -HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$1;->()V -HSPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$1;->()V -HSPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$2;->()V -HSPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$2;->()V -HSPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$1;->()V -HSPLandroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$1;->()V -HSPLandroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$2;->()V -HSPLandroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$2;->()V -HSPLandroidx/compose/animation/core/VectorConvertersKt$IntToVector$1;->()V -HSPLandroidx/compose/animation/core/VectorConvertersKt$IntToVector$1;->()V -HSPLandroidx/compose/animation/core/VectorConvertersKt$IntToVector$2;->()V -HSPLandroidx/compose/animation/core/VectorConvertersKt$IntToVector$2;->()V -HSPLandroidx/compose/animation/core/VectorConvertersKt$OffsetToVector$1;->()V -HSPLandroidx/compose/animation/core/VectorConvertersKt$OffsetToVector$1;->()V -HSPLandroidx/compose/animation/core/VectorConvertersKt$OffsetToVector$2;->()V -HSPLandroidx/compose/animation/core/VectorConvertersKt$OffsetToVector$2;->()V -HSPLandroidx/compose/animation/core/VectorConvertersKt$RectToVector$1;->()V -HSPLandroidx/compose/animation/core/VectorConvertersKt$RectToVector$1;->()V -HSPLandroidx/compose/animation/core/VectorConvertersKt$RectToVector$2;->()V -HSPLandroidx/compose/animation/core/VectorConvertersKt$RectToVector$2;->()V -HSPLandroidx/compose/animation/core/VectorConvertersKt$SizeToVector$1;->()V -HSPLandroidx/compose/animation/core/VectorConvertersKt$SizeToVector$1;->()V -HSPLandroidx/compose/animation/core/VectorConvertersKt$SizeToVector$2;->()V -HSPLandroidx/compose/animation/core/VectorConvertersKt$SizeToVector$2;->()V -HSPLandroidx/compose/animation/core/VectorConvertersKt;->()V -HSPLandroidx/compose/animation/core/VectorizedAnimationSpec;->getEndVelocity(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; -HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$1;->(FFLandroidx/compose/animation/core/AnimationVector;)V -HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$1;->get(I)Landroidx/compose/animation/core/FloatAnimationSpec; -HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$2;->(FF)V -HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$2;->get(I)Landroidx/compose/animation/core/FloatAnimationSpec; -HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt;->getValueFromMillis(Landroidx/compose/animation/core/VectorizedAnimationSpec;JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; -HSPLandroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J -HSPLandroidx/compose/animation/core/VectorizedFiniteAnimationSpec;->isInfinite()Z -HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec$1;->(Landroidx/compose/animation/core/FloatAnimationSpec;)V -HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec$1;->get(I)Landroidx/compose/animation/core/FloatAnimationSpec; -HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->(Landroidx/compose/animation/core/Animations;)V -HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->(Landroidx/compose/animation/core/FloatAnimationSpec;)V -HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J -HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getEndVelocity(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; -HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; -HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; -HSPLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;->(Landroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec;IJ)V -HSPLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J -HSPLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; -HSPLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; -HSPLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;->repetitionPlayTimeNanos(J)J -HSPLandroidx/compose/animation/core/VectorizedKeyframesSpec;->(Ljava/util/LinkedHashMap;I)V -HSPLandroidx/compose/animation/core/VectorizedKeyframesSpec;->getDelayMillis()I -HSPLandroidx/compose/animation/core/VectorizedKeyframesSpec;->getDurationMillis()I -HSPLandroidx/compose/animation/core/VectorizedKeyframesSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; -HSPLandroidx/compose/animation/core/VectorizedKeyframesSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; -HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->(FFLandroidx/compose/animation/core/AnimationVector;)V -HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J -HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->getEndVelocity(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; -HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; -HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; -HSPLandroidx/compose/animation/core/VectorizedTweenSpec;->(IILandroidx/compose/animation/core/Easing;)V -HSPLandroidx/compose/animation/core/VectorizedTweenSpec;->getDelayMillis()I -HSPLandroidx/compose/animation/core/VectorizedTweenSpec;->getDurationMillis()I -HSPLandroidx/compose/animation/core/VectorizedTweenSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; -HSPLandroidx/compose/animation/core/VectorizedTweenSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; -HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;->()V -HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;->getVisibilityThreshold()J -HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1$1;->(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;->(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)V -HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->(Landroid/content/Context;Landroidx/compose/foundation/OverscrollConfiguration;)V -HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->animateToRelease()V -HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->getEffectModifier()Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->invalidateOverscroll()V -HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->setEnabled(Z)V -HSPLandroidx/compose/foundation/AndroidOverscrollKt$NoOpOverscrollEffect$1;->()V -HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1$1;->(Landroidx/compose/ui/layout/Placeable;I)V -HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1;->()V -HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1;->()V -HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2$1;->(Landroidx/compose/ui/layout/Placeable;I)V -HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2;->()V -HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2;->()V -HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/AndroidOverscrollKt;->()V -HSPLandroidx/compose/foundation/Api31Impl$$ExternalSyntheticApiModelOutline1;->m(Landroid/widget/EdgeEffect;)F -HSPLandroidx/compose/foundation/Api31Impl;->()V -HSPLandroidx/compose/foundation/Api31Impl;->()V -HSPLandroidx/compose/foundation/Api31Impl;->create(Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/widget/EdgeEffect; -HSPLandroidx/compose/foundation/Api31Impl;->getDistance(Landroid/widget/EdgeEffect;)F -HSPLandroidx/compose/foundation/Background;->(Landroidx/compose/ui/graphics/Color;Landroidx/compose/ui/graphics/Shape;)V -HSPLandroidx/compose/foundation/Background;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V -HSPLandroidx/compose/foundation/Background;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/foundation/BackgroundKt;->background-bw27NRU(Landroidx/compose/ui/Modifier;JLandroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/foundation/CanvasKt;->Canvas(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V -HSPLandroidx/compose/foundation/ClickableKt$PressedInteractionSourceDisposableEffect$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/runtime/MutableState;Ljava/util/Map;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V -HSPLandroidx/compose/foundation/ClickableKt$PressedInteractionSourceDisposableEffect$1$invoke$$inlined$onDispose$1;->dispose()V -HSPLandroidx/compose/foundation/ClickableKt$PressedInteractionSourceDisposableEffect$1;->(Landroidx/compose/runtime/MutableState;Ljava/util/Map;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V -HSPLandroidx/compose/foundation/ClickableKt$PressedInteractionSourceDisposableEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/ClickableKt$clickable$4$1$1;->(Landroidx/compose/runtime/MutableState;)V -HSPLandroidx/compose/foundation/ClickableKt$clickable$4$1$1;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V -HSPLandroidx/compose/foundation/ClickableKt$clickable$4$delayPressInteraction$1$1;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/Clickable_androidKt$isComposeRootInScrollableContainer$1;)V -HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$1;->(ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$2;->(Landroidx/compose/runtime/State;Z)V -HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1;->(Landroidx/compose/runtime/MutableState;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/ClickableKt$clickable$4;->(Landroidx/compose/foundation/Indication;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/ui/semantics/Role;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Z)V -HSPLandroidx/compose/foundation/ClickableKt$clickable$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/ClickableKt$genericClickableWithoutGesture$clickSemantics$1$1;->(Lkotlin/jvm/functions/Function0;)V -HSPLandroidx/compose/foundation/ClickableKt$genericClickableWithoutGesture$clickSemantics$1;->(Landroidx/compose/ui/semantics/Role;Ljava/lang/String;ZLkotlin/jvm/functions/Function0;)V -HSPLandroidx/compose/foundation/ClickableKt$genericClickableWithoutGesture$clickSemantics$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/ClickableKt$genericClickableWithoutGesture$detectPressAndClickFromKey$1;->(ZLjava/util/Map;Landroidx/compose/runtime/MutableState;Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function0;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V -HSPLandroidx/compose/foundation/ClickableKt;->PressedInteractionSourceDisposableEffect(Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Ljava/util/Map;Landroidx/compose/runtime/Composer;I)V -HSPLandroidx/compose/foundation/ClickableKt;->clickable-O2vRcR0$default(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/Indication;ZLandroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;I)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/foundation/ClickableKt;->clickable-O2vRcR0(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/Indication;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/foundation/Clickable_androidKt$isComposeRootInScrollableContainer$1;->(Landroid/view/View;)V -HSPLandroidx/compose/foundation/Clickable_androidKt;->()V -HSPLandroidx/compose/foundation/ClipScrollableContainerKt$HorizontalScrollableClipModifier$1;->()V -HSPLandroidx/compose/foundation/ClipScrollableContainerKt$HorizontalScrollableClipModifier$1;->createOutline-Pq9zytI(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Landroidx/compose/ui/graphics/Outline; -HSPLandroidx/compose/foundation/ClipScrollableContainerKt$VerticalScrollableClipModifier$1;->()V -HSPLandroidx/compose/foundation/ClipScrollableContainerKt$VerticalScrollableClipModifier$1;->createOutline-Pq9zytI(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Landroidx/compose/ui/graphics/Outline; -HSPLandroidx/compose/foundation/ClipScrollableContainerKt;->()V -HSPLandroidx/compose/foundation/ClipScrollableContainerKt;->clipScrollableContainer(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/Orientation;)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/foundation/DarkThemeKt;->isSystemInDarkTheme(Landroidx/compose/runtime/Composer;)Z -HSPLandroidx/compose/foundation/DrawOverscrollModifier;->(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)V -HSPLandroidx/compose/foundation/DrawOverscrollModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V -HSPLandroidx/compose/foundation/DrawOverscrollModifier;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/foundation/EdgeEffectCompat;->create(Landroid/content/Context;)Landroid/widget/EdgeEffect; -HSPLandroidx/compose/foundation/EdgeEffectCompat;->getDistanceCompat(Landroid/widget/EdgeEffect;)F -HSPLandroidx/compose/foundation/FocusableKt$focusGroup$1;->()V -HSPLandroidx/compose/foundation/FocusableKt$focusGroup$1;->()V -HSPLandroidx/compose/foundation/FocusableKt$focusGroup$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/FocusableKt$focusable$2$1$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V -HSPLandroidx/compose/foundation/FocusableKt$focusable$2$1$1$invoke$$inlined$onDispose$1;->dispose()V -HSPLandroidx/compose/foundation/FocusableKt$focusable$2$1$1;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V -HSPLandroidx/compose/foundation/FocusableKt$focusable$2$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/FocusableKt$focusable$2$2$1;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/foundation/FocusableKt$focusable$2$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/foundation/FocusableKt$focusable$2$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/FocusableKt$focusable$2$2$invoke$$inlined$onDispose$1;->()V -HSPLandroidx/compose/foundation/FocusableKt$focusable$2$2$invoke$$inlined$onDispose$1;->dispose()V -HSPLandroidx/compose/foundation/FocusableKt$focusable$2$2;->(ZLkotlinx/coroutines/CoroutineScope;Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V -HSPLandroidx/compose/foundation/FocusableKt$focusable$2$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/FocusableKt$focusable$2$3$1;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/ui/focus/FocusRequester;)V -HSPLandroidx/compose/foundation/FocusableKt$focusable$2$3;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/ui/focus/FocusRequester;)V -HSPLandroidx/compose/foundation/FocusableKt$focusable$2$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/FocusableKt$focusable$2$4$1;->(Landroidx/compose/runtime/MutableState;)V -HSPLandroidx/compose/foundation/FocusableKt$focusable$2$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/FocusableKt$focusable$2$5$3;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/foundation/FocusableKt$focusable$2$5$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/foundation/FocusableKt$focusable$2$5$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/FocusableKt$focusable$2$5;->(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/relocation/BringIntoViewRequester;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V -HSPLandroidx/compose/foundation/FocusableKt$focusable$2$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/FocusableKt$focusable$2;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;Z)V -HSPLandroidx/compose/foundation/FocusableKt$focusable$2;->invoke$lambda-5(Landroidx/compose/runtime/MutableState;)Z -HSPLandroidx/compose/foundation/FocusableKt$focusable$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/FocusableKt$focusableInNonTouchMode$2$1;->(Landroidx/compose/ui/input/InputModeManager;)V -HSPLandroidx/compose/foundation/FocusableKt$focusableInNonTouchMode$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/FocusableKt$focusableInNonTouchMode$2;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;Z)V -HSPLandroidx/compose/foundation/FocusableKt$focusableInNonTouchMode$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/FocusableKt;->()V -HSPLandroidx/compose/foundation/FocusedBoundsKt$ModifierLocalFocusedBoundsObserver$1;->()V -HSPLandroidx/compose/foundation/FocusedBoundsKt$ModifierLocalFocusedBoundsObserver$1;->()V -HSPLandroidx/compose/foundation/FocusedBoundsKt$ModifierLocalFocusedBoundsObserver$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/foundation/FocusedBoundsKt$onFocusedBoundsChanged$2;->(Landroidx/compose/foundation/gestures/ContentInViewModifier$modifier$1;)V -HSPLandroidx/compose/foundation/FocusedBoundsKt$onFocusedBoundsChanged$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/FocusedBoundsKt;->()V -HSPLandroidx/compose/foundation/FocusedBoundsObserverModifier;->(Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/foundation/FocusedBoundsObserverModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal; -HSPLandroidx/compose/foundation/FocusedBoundsObserverModifier;->getValue()Ljava/lang/Object; -HSPLandroidx/compose/foundation/FocusedBoundsObserverModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V -HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$1$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V -HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$1$1$invoke$$inlined$onDispose$1;->dispose()V -HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$1$1;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V -HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$2$1;->(ZLandroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$3$1;->(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$3$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$3$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$3;->(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/HoverableKt$hoverable$2$invoke$emitExit$1;->(Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/foundation/HoverableKt$hoverable$2;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;Z)V -HSPLandroidx/compose/foundation/HoverableKt$hoverable$2;->access$invoke$emitExit(Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/HoverableKt$hoverable$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/IndicationKt$LocalIndication$1;->()V -HSPLandroidx/compose/foundation/IndicationKt$LocalIndication$1;->()V -HSPLandroidx/compose/foundation/IndicationKt$indication$2;->(Landroidx/compose/foundation/Indication;Landroidx/compose/foundation/interaction/InteractionSource;)V -HSPLandroidx/compose/foundation/IndicationKt$indication$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/IndicationKt;->()V -HSPLandroidx/compose/foundation/IndicationKt;->indication(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/foundation/Indication;)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/foundation/IndicationModifier;->(Landroidx/compose/foundation/IndicationInstance;)V -HSPLandroidx/compose/foundation/IndicationModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V -HSPLandroidx/compose/foundation/MutatorMutex;->()V -HSPLandroidx/compose/foundation/NoIndication$NoIndicationInstance;->()V -HSPLandroidx/compose/foundation/NoIndication$NoIndicationInstance;->()V -HSPLandroidx/compose/foundation/NoIndication$NoIndicationInstance;->drawIndication(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V -HSPLandroidx/compose/foundation/NoIndication;->()V -HSPLandroidx/compose/foundation/NoIndication;->()V -HSPLandroidx/compose/foundation/NoIndication;->rememberUpdatedInstance(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/IndicationInstance; -HSPLandroidx/compose/foundation/OverscrollConfiguration;->()V -HSPLandroidx/compose/foundation/OverscrollConfiguration;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/foundation/OverscrollConfigurationKt$LocalOverscrollConfiguration$1;->()V -HSPLandroidx/compose/foundation/OverscrollConfigurationKt$LocalOverscrollConfiguration$1;->()V -HSPLandroidx/compose/foundation/OverscrollConfigurationKt$LocalOverscrollConfiguration$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/foundation/OverscrollConfigurationKt;->()V -HSPLandroidx/compose/foundation/OverscrollKt;->overscroll(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/OverscrollEffect;)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/foundation/PinnableParentConsumer;->(Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/foundation/PinnableParentConsumer;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/foundation/PinnableParentConsumer;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V -HSPLandroidx/compose/foundation/gestures/AndroidConfig;->()V -HSPLandroidx/compose/foundation/gestures/AndroidConfig;->()V -HSPLandroidx/compose/foundation/gestures/AndroidScrollable_androidKt;->hasFontAttributes(Landroidx/compose/ui/text/SpanStyle;)Z -HSPLandroidx/compose/foundation/gestures/ContentInViewModifier$modifier$1;->(Landroidx/compose/foundation/gestures/ContentInViewModifier;)V -HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/gestures/ScrollableState;Z)V -HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V -HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->onRemeasured-ozmzZPI(J)V -HSPLandroidx/compose/foundation/gestures/DefaultFlingBehavior;->(Landroidx/compose/animation/core/DecayAnimationSpec;)V -HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scrollScope$1;->(Landroidx/compose/foundation/gestures/DefaultScrollableState;)V -HSPLandroidx/compose/foundation/gestures/DefaultScrollableState;->(Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/foundation/gestures/DefaultScrollableState;->isScrollInProgress()Z -HSPLandroidx/compose/foundation/gestures/DragLogic;->(Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V -HSPLandroidx/compose/foundation/gestures/DraggableKt$awaitDownAndSlop$1;->(Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$6;->(Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$1$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V -HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$1$1;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V -HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$2;->(Lkotlinx/coroutines/channels/Channel;Landroidx/compose/foundation/gestures/DraggableState;Landroidx/compose/runtime/State;Landroidx/compose/foundation/gestures/Orientation;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$3$1$1;->(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/foundation/gestures/Orientation;Lkotlinx/coroutines/channels/Channel;ZLkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$3$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$3$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$3$1;->(Landroidx/compose/ui/input/pointer/PointerInputScope;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/foundation/gestures/Orientation;Lkotlinx/coroutines/channels/Channel;ZLkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$3$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$3$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$3;->(ZLandroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/foundation/gestures/Orientation;Lkotlinx/coroutines/channels/Channel;ZLkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9;->(Landroidx/compose/foundation/gestures/DraggableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;ZZ)V -HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$9;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/gestures/DraggableKt;->access$awaitDownAndSlop(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/ui/input/pointer/util/VelocityTracker;Landroidx/compose/foundation/gestures/Orientation;Lkotlin/coroutines/Continuation;)Ljava/io/Serializable; -HSPLandroidx/compose/foundation/gestures/DraggableKt;->draggable(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/DraggableState;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Z)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/foundation/gestures/ForEachGestureKt$forEachGesture$1;->(Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/foundation/gestures/ForEachGestureKt$forEachGesture$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/gestures/ForEachGestureKt;->forEachGesture(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;->()V -HSPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;->()V -HSPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal; -HSPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;->getValue()Ljava/lang/Object; -HSPLandroidx/compose/foundation/gestures/Orientation;->()V -HSPLandroidx/compose/foundation/gestures/Orientation;->(ILjava/lang/String;)V -HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl;->(Landroidx/compose/ui/input/pointer/PointerInputScope;)V -HSPLandroidx/compose/foundation/gestures/ScrollDraggableState;->(Landroidx/compose/runtime/MutableState;)V -HSPLandroidx/compose/foundation/gestures/ScrollableDefaults;->flingBehavior(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/gestures/DefaultFlingBehavior; -HSPLandroidx/compose/foundation/gestures/ScrollableDefaults;->overscrollEffect(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/OverscrollEffect; -HSPLandroidx/compose/foundation/gestures/ScrollableKt$ModifierLocalScrollableContainer$1;->()V -HSPLandroidx/compose/foundation/gestures/ScrollableKt$ModifierLocalScrollableContainer$1;->()V -HSPLandroidx/compose/foundation/gestures/ScrollableKt$ModifierLocalScrollableContainer$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/foundation/gestures/ScrollableKt$NoOpScrollScope$1;->()V -HSPLandroidx/compose/foundation/gestures/ScrollableKt$awaitScrollEvent$1;->(Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1$1;->(Landroidx/compose/foundation/gestures/ScrollConfig;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1;->(Landroidx/compose/foundation/gestures/ScrollConfig;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$1;->()V -HSPLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$1;->()V -HSPLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$2$1;->(Landroidx/compose/runtime/MutableState;)V -HSPLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$3$1;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/foundation/gestures/ScrollableKt$scrollable$2;->(Landroidx/compose/foundation/OverscrollEffect;Landroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;ZZ)V -HSPLandroidx/compose/foundation/gestures/ScrollableKt$scrollable$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/gestures/ScrollableKt$scrollableNestedScrollConnection$1;->(Landroidx/compose/runtime/MutableState;Z)V -HSPLandroidx/compose/foundation/gestures/ScrollableKt;->()V -HSPLandroidx/compose/foundation/gestures/ScrollableKt;->access$awaitScrollEvent(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/gestures/ScrollableKt;->scrollable(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/OverscrollEffect;ZZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl;)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/foundation/gestures/ScrollingLogic;->(Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/runtime/MutableState;Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/OverscrollEffect;)V -HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$NoPressGesture$1;->(Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$awaitFirstDownOnPass$1;->(Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$awaitFirstDownOnPass$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1;->(Lkotlin/jvm/functions/Function3;Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;->(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;->(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->()V -HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->awaitFirstDownOnPass(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Landroidx/compose/ui/input/pointer/PointerEventPass;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;->()V -HSPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;->getInteractions()Lkotlinx/coroutines/flow/Flow; -HSPLandroidx/compose/foundation/layout/AddedInsets;->(Landroidx/compose/foundation/layout/PaddingValuesInsets;Landroidx/compose/foundation/layout/WindowInsets;)V -HSPLandroidx/compose/foundation/layout/AddedInsets;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/foundation/layout/AddedInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I -HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->(ILjava/lang/String;)V -HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I -HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getInsets$foundation_layout_release()Landroidx/core/graphics/Insets; -HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I -HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I -HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getTop(Landroidx/compose/ui/unit/Density;)I -HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->update$foundation_layout_release(Landroidx/core/view/WindowInsetsCompat;I)V -HSPLandroidx/compose/foundation/layout/Arrangement$Bottom$1;->()V -HSPLandroidx/compose/foundation/layout/Arrangement$Center$1;->()V -HSPLandroidx/compose/foundation/layout/Arrangement$Center$1;->arrange(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V -HSPLandroidx/compose/foundation/layout/Arrangement$Center$1;->getSpacing-D9Ej5fM()F -HSPLandroidx/compose/foundation/layout/Arrangement$End$1;->()V -HSPLandroidx/compose/foundation/layout/Arrangement$End$1;->arrange(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V -HSPLandroidx/compose/foundation/layout/Arrangement$Horizontal;->getSpacing-D9Ej5fM()F -HSPLandroidx/compose/foundation/layout/Arrangement$SpaceAround$1;->()V -HSPLandroidx/compose/foundation/layout/Arrangement$SpaceBetween$1;->()V -HSPLandroidx/compose/foundation/layout/Arrangement$SpaceEvenly$1;->()V -HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->(F)V -HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->arrange(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V -HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->arrange(Landroidx/compose/ui/unit/Density;I[I[I)V -HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->getSpacing-D9Ej5fM()F -HSPLandroidx/compose/foundation/layout/Arrangement$Start$1;->()V -HSPLandroidx/compose/foundation/layout/Arrangement$Start$1;->arrange(ILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;[I[I)V -HSPLandroidx/compose/foundation/layout/Arrangement$Top$1;->()V -HSPLandroidx/compose/foundation/layout/Arrangement$Top$1;->arrange(Landroidx/compose/ui/unit/Density;I[I[I)V -HSPLandroidx/compose/foundation/layout/Arrangement$spacedBy$1;->()V -HSPLandroidx/compose/foundation/layout/Arrangement$spacedBy$1;->()V -HSPLandroidx/compose/foundation/layout/Arrangement$spacedBy$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/layout/Arrangement;->()V -HSPLandroidx/compose/foundation/layout/Arrangement;->placeCenter$foundation_layout_release(I[I[IZ)V -HSPLandroidx/compose/foundation/layout/Arrangement;->placeLeftOrTop$foundation_layout_release([I[IZ)V -HSPLandroidx/compose/foundation/layout/Arrangement;->placeRightOrBottom$foundation_layout_release(I[I[IZ)V -HSPLandroidx/compose/foundation/layout/BoxChildData;->()V -HSPLandroidx/compose/foundation/layout/BoxChildData;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/foundation/layout/BoxChildData;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1$measure$1;->()V -HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1$measure$1;->()V -HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;->()V -HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;->()V -HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; -HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$1;->()V -HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$1;->()V -HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$2;->(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/Measurable;Landroidx/compose/ui/layout/MeasureScope;IILandroidx/compose/ui/Alignment;)V -HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$5;->([Landroidx/compose/ui/layout/Placeable;Ljava/util/List;Landroidx/compose/ui/layout/MeasureScope;Lkotlin/jvm/internal/Ref$IntRef;Lkotlin/jvm/internal/Ref$IntRef;Landroidx/compose/ui/Alignment;)V -HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1;->(Landroidx/compose/ui/BiasAlignment;Z)V -HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; -HSPLandroidx/compose/foundation/layout/BoxKt;->()V -HSPLandroidx/compose/foundation/layout/BoxKt;->Box(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V -HSPLandroidx/compose/foundation/layout/BoxKt;->access$placeInBox(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/Measurable;Landroidx/compose/ui/unit/LayoutDirection;IILandroidx/compose/ui/Alignment;)V -HSPLandroidx/compose/foundation/layout/BoxKt;->rememberBoxMeasurePolicy(Landroidx/compose/ui/BiasAlignment;ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/ui/layout/MeasurePolicy; -HSPLandroidx/compose/foundation/layout/ColumnKt$DefaultColumnMeasurePolicy$1;->()V -HSPLandroidx/compose/foundation/layout/ColumnKt$DefaultColumnMeasurePolicy$1;->()V -HSPLandroidx/compose/foundation/layout/ColumnKt$DefaultColumnMeasurePolicy$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/io/Serializable;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/layout/ColumnKt;->()V -HSPLandroidx/compose/foundation/layout/ColumnKt;->columnMeasurePolicy(Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/BiasAlignment$Horizontal;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/layout/MeasurePolicy; -HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$CenterCrossAxisAlignment;->()V -HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$CenterCrossAxisAlignment;->()V -HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$EndCrossAxisAlignment;->()V -HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$EndCrossAxisAlignment;->()V -HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$HorizontalCrossAxisAlignment;->(Landroidx/compose/ui/Alignment$Horizontal;)V -HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$HorizontalCrossAxisAlignment;->align$foundation_layout_release(ILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/layout/Placeable;)I -HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$StartCrossAxisAlignment;->()V -HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$StartCrossAxisAlignment;->()V -HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment;->(Landroidx/compose/ui/BiasAlignment$Vertical;)V -HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment;->align$foundation_layout_release(ILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/layout/Placeable;)I -HSPLandroidx/compose/foundation/layout/CrossAxisAlignment;->()V -HSPLandroidx/compose/foundation/layout/CrossAxisAlignment;->()V -HSPLandroidx/compose/foundation/layout/DerivedHeightModifier$measure$1;->()V -HSPLandroidx/compose/foundation/layout/DerivedHeightModifier$measure$1;->()V -HSPLandroidx/compose/foundation/layout/DerivedHeightModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/layout/DerivedHeightModifier;->(Landroidx/compose/foundation/layout/UnionInsets;Lkotlin/jvm/functions/Function2;)V -HSPLandroidx/compose/foundation/layout/DerivedHeightModifier;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/foundation/layout/DerivedHeightModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; -HSPLandroidx/compose/foundation/layout/DerivedHeightModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V -HSPLandroidx/compose/foundation/layout/ExcludeInsets;->(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)V -HSPLandroidx/compose/foundation/layout/ExcludeInsets;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/foundation/layout/ExcludeInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I -HSPLandroidx/compose/foundation/layout/ExcludeInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I -HSPLandroidx/compose/foundation/layout/ExcludeInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I -HSPLandroidx/compose/foundation/layout/ExcludeInsets;->getTop(Landroidx/compose/ui/unit/Density;)I -HSPLandroidx/compose/foundation/layout/FillModifier$measure$1;->(Landroidx/compose/ui/layout/Placeable;)V -HSPLandroidx/compose/foundation/layout/FillModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/layout/FillModifier;->(IFLkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/foundation/layout/FillModifier;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/foundation/layout/FillModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; -HSPLandroidx/compose/foundation/layout/FixedIntInsets;->()V -HSPLandroidx/compose/foundation/layout/FixedIntInsets;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/foundation/layout/FixedIntInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I -HSPLandroidx/compose/foundation/layout/FixedIntInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I -HSPLandroidx/compose/foundation/layout/FixedIntInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I -HSPLandroidx/compose/foundation/layout/FixedIntInsets;->getTop(Landroidx/compose/ui/unit/Density;)I -HSPLandroidx/compose/foundation/layout/InsetsListener;->(Landroidx/compose/foundation/layout/WindowInsetsHolder;)V -HSPLandroidx/compose/foundation/layout/InsetsListener;->onApplyWindowInsets(Landroid/view/View;Landroidx/core/view/WindowInsetsCompat;)Landroidx/core/view/WindowInsetsCompat; -HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier$measure$1;->(IILandroidx/compose/ui/layout/Placeable;)V -HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->(Landroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal; -HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->getValue()Ljava/lang/Object; -HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; -HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V -HSPLandroidx/compose/foundation/layout/InsetsPaddingValues;->(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/ui/layout/SubcomposeMeasureScope;)V -HSPLandroidx/compose/foundation/layout/InsetsPaddingValues;->calculateLeftPadding-u2uoSUM(Landroidx/compose/ui/unit/LayoutDirection;)F -HSPLandroidx/compose/foundation/layout/InsetsPaddingValues;->calculateRightPadding-u2uoSUM(Landroidx/compose/ui/unit/LayoutDirection;)F -HSPLandroidx/compose/foundation/layout/InsetsPaddingValues;->calculateTopPadding-D9Ej5fM()F -HSPLandroidx/compose/foundation/layout/InsetsValues;->(IIII)V -HSPLandroidx/compose/foundation/layout/InsetsValues;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/foundation/layout/LayoutWeightImpl;->(Z)V -HSPLandroidx/compose/foundation/layout/LayoutWeightImpl;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/foundation/layout/LayoutWeightImpl;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/layout/LimitInsets;->(Landroidx/compose/foundation/layout/WindowInsets;I)V -HSPLandroidx/compose/foundation/layout/LimitInsets;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/foundation/layout/LimitInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I -HSPLandroidx/compose/foundation/layout/LimitInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I -HSPLandroidx/compose/foundation/layout/LimitInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I -HSPLandroidx/compose/foundation/layout/LimitInsets;->getTop(Landroidx/compose/ui/unit/Density;)I -HSPLandroidx/compose/foundation/layout/OrientationIndependentConstraints$$ExternalSyntheticOutline0;->m(III)I -HSPLandroidx/compose/foundation/layout/PaddingKt;->PaddingValues-YgX7TsA$default(FI)Landroidx/compose/foundation/layout/PaddingValuesImpl; -HSPLandroidx/compose/foundation/layout/PaddingKt;->calculateEndPadding(Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/ui/unit/LayoutDirection;)F -HSPLandroidx/compose/foundation/layout/PaddingKt;->calculateStartPadding(Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/ui/unit/LayoutDirection;)F -HSPLandroidx/compose/foundation/layout/PaddingKt;->padding(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/PaddingValues;)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/foundation/layout/PaddingKt;->padding-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/foundation/layout/PaddingKt;->padding-VpY3zN4$default(Landroidx/compose/ui/Modifier;FFI)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/foundation/layout/PaddingKt;->padding-qDBjuR0$default(Landroidx/compose/ui/Modifier;FFFFI)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/foundation/layout/PaddingModifier$measure$1;->(Landroidx/compose/foundation/layout/PaddingModifier;Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/MeasureScope;)V -HSPLandroidx/compose/foundation/layout/PaddingModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/layout/PaddingModifier;->(FFFF)V -HSPLandroidx/compose/foundation/layout/PaddingModifier;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/foundation/layout/PaddingModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; -HSPLandroidx/compose/foundation/layout/PaddingValuesConsumingModifier;->(Landroidx/compose/foundation/layout/PaddingValues;)V -HSPLandroidx/compose/foundation/layout/PaddingValuesConsumingModifier;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/foundation/layout/PaddingValuesConsumingModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal; -HSPLandroidx/compose/foundation/layout/PaddingValuesConsumingModifier;->getValue()Ljava/lang/Object; -HSPLandroidx/compose/foundation/layout/PaddingValuesConsumingModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V -HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->(FFFF)V -HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->calculateBottomPadding-D9Ej5fM()F -HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->calculateLeftPadding-u2uoSUM(Landroidx/compose/ui/unit/LayoutDirection;)F -HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->calculateRightPadding-u2uoSUM(Landroidx/compose/ui/unit/LayoutDirection;)F -HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->calculateTopPadding-D9Ej5fM()F -HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/foundation/layout/PaddingValuesInsets;->(Landroidx/compose/foundation/layout/PaddingValues;)V -HSPLandroidx/compose/foundation/layout/PaddingValuesInsets;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/foundation/layout/PaddingValuesInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I -HSPLandroidx/compose/foundation/layout/PaddingValuesModifier$measure$2;->(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/foundation/layout/PaddingValuesModifier;)V -HSPLandroidx/compose/foundation/layout/PaddingValuesModifier$measure$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/layout/PaddingValuesModifier;->(Landroidx/compose/foundation/layout/PaddingValues;)V -HSPLandroidx/compose/foundation/layout/PaddingValuesModifier;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/foundation/layout/PaddingValuesModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; -HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1$measure$4;->(Ljava/util/List;[Landroidx/compose/ui/layout/Placeable;Lkotlin/jvm/functions/Function5;ILandroidx/compose/ui/layout/MeasureScope;[II[Landroidx/compose/foundation/layout/RowColumnParentData;Landroidx/compose/foundation/layout/CrossAxisAlignment;ILkotlin/jvm/internal/Ref$IntRef;)V -HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1$measure$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;->(FLandroidx/compose/foundation/layout/CrossAxisAlignment;ILkotlin/jvm/functions/Function5;)V -HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; -HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->getData(Landroidx/compose/ui/layout/IntrinsicMeasurable;)Landroidx/compose/foundation/layout/RowColumnParentData; -HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->getWeight(Landroidx/compose/foundation/layout/RowColumnParentData;)F -HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->rowColumnMeasurePolicy-TDGSqEk(FLandroidx/compose/foundation/layout/CrossAxisAlignment;ILkotlin/jvm/functions/Function5;)Landroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1; -HSPLandroidx/compose/foundation/layout/RowColumnParentData;->(I)V -HSPLandroidx/compose/foundation/layout/RowColumnParentData;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;->()V -HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;->()V -HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/io/Serializable;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;->(Landroidx/compose/foundation/layout/Arrangement$Horizontal;)V -HSPLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/io/Serializable;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/layout/RowKt;->()V -HSPLandroidx/compose/foundation/layout/RowKt;->rowMeasurePolicy(Landroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/ui/BiasAlignment$Vertical;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/layout/MeasurePolicy; -HSPLandroidx/compose/foundation/layout/RowScopeInstance;->()V -HSPLandroidx/compose/foundation/layout/RowScopeInstance;->()V -HSPLandroidx/compose/foundation/layout/RowScopeInstance;->weight(Landroidx/compose/ui/Modifier;Z)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/foundation/layout/SizeKt$createFillHeightModifier$1;->(F)V -HSPLandroidx/compose/foundation/layout/SizeKt$createFillSizeModifier$1;->(F)V -HSPLandroidx/compose/foundation/layout/SizeKt$createFillWidthModifier$1;->(F)V -HSPLandroidx/compose/foundation/layout/SizeKt$createWrapContentSizeModifier$1;->(Landroidx/compose/ui/Alignment;)V -HSPLandroidx/compose/foundation/layout/SizeKt$createWrapContentSizeModifier$2;->(Landroidx/compose/ui/Alignment;Z)V -HSPLandroidx/compose/foundation/layout/SizeKt;->()V -HSPLandroidx/compose/foundation/layout/SizeKt;->createWrapContentSizeModifier(Landroidx/compose/ui/Alignment;Z)Landroidx/compose/foundation/layout/WrapContentModifier; -HSPLandroidx/compose/foundation/layout/SizeKt;->fillMaxSize$default(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/foundation/layout/SizeKt;->fillMaxWidth$default(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/foundation/layout/SizeKt;->height-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/foundation/layout/SizeKt;->heightIn-VpY3zN4$default(Landroidx/compose/ui/Modifier;FFI)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/foundation/layout/SizeKt;->size-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/foundation/layout/SizeKt;->sizeIn-qDBjuR0$default(Landroidx/compose/ui/Modifier;FFFFI)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/foundation/layout/SizeKt;->width-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/foundation/layout/SizeModifier$measure$1;->(Landroidx/compose/ui/layout/Placeable;)V -HSPLandroidx/compose/foundation/layout/SizeModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/layout/SizeModifier;->(FFFFI)V -HSPLandroidx/compose/foundation/layout/SizeModifier;->(FFFFZ)V -HSPLandroidx/compose/foundation/layout/SizeModifier;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/foundation/layout/SizeModifier;->getTargetConstraints-OenEA2s(Landroidx/compose/ui/unit/Density;)J -HSPLandroidx/compose/foundation/layout/SizeModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; -HSPLandroidx/compose/foundation/layout/SpacerKt$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/Composer;Landroidx/compose/ui/platform/ViewConfiguration;Landroidx/compose/ui/node/ComposeUiNode$Companion$SetViewConfiguration$1;Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/SkippableUpdater; -HSPLandroidx/compose/foundation/layout/SpacerKt;->Spacer(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V -HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy$measure$1$1;->()V -HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy$measure$1$1;->()V -HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy$measure$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy;->()V -HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy;->()V -HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; -HSPLandroidx/compose/foundation/layout/UnionInsets;->(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)V -HSPLandroidx/compose/foundation/layout/UnionInsets;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/foundation/layout/UnionInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I -HSPLandroidx/compose/foundation/layout/UnionInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I -HSPLandroidx/compose/foundation/layout/UnionInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I -HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsModifier$measure$1;->(Landroidx/compose/ui/layout/Placeable;)V -HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsModifier;->(FF)V -HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; -HSPLandroidx/compose/foundation/layout/ValueInsets;->(Landroidx/compose/foundation/layout/InsetsValues;Ljava/lang/String;)V -HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/foundation/layout/WindowInsetsHolder;Landroid/view/View;)V -HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1$invoke$$inlined$onDispose$1;->dispose()V -HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1;->(Landroidx/compose/foundation/layout/WindowInsetsHolder;Landroid/view/View;)V -HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;->()V -HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;->access$systemInsets(ILjava/lang/String;)Landroidx/compose/foundation/layout/AndroidWindowInsets; -HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;->access$valueInsetsIgnoringVisibility(ILjava/lang/String;)Landroidx/compose/foundation/layout/ValueInsets; -HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;->current(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/layout/WindowInsetsHolder; -HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->()V -HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->(Landroid/view/View;)V -HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->update(Landroidx/core/view/WindowInsetsCompat;I)V -HSPLandroidx/compose/foundation/layout/WindowInsetsKt;->union(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)Landroidx/compose/foundation/layout/UnionInsets; -HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1;->()V -HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1;->()V -HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;->()V -HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;->windowInsetsPadding(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/WindowInsets;)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/foundation/layout/WindowInsetsSizeKt$windowInsetsBottomHeight$2;->()V -HSPLandroidx/compose/foundation/layout/WindowInsetsSizeKt$windowInsetsBottomHeight$2;->()V -HSPLandroidx/compose/foundation/layout/WindowInsetsSizeKt$windowInsetsBottomHeight$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/layout/WindowInsetsSizeKt;->windowInsetsBottomHeight(Landroidx/compose/foundation/layout/UnionInsets;)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/foundation/layout/WrapContentModifier;->(IZLkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/foundation/lazy/AwaitFirstLayoutModifier;->()V -HSPLandroidx/compose/foundation/lazy/AwaitFirstLayoutModifier;->onGloballyPositioned(Landroidx/compose/ui/node/NodeCoordinator;)V -HSPLandroidx/compose/foundation/lazy/grid/ComposableSingletons$LazyGridItemProviderKt$lambda-1$1;->()V -HSPLandroidx/compose/foundation/lazy/grid/ComposableSingletons$LazyGridItemProviderKt$lambda-1$1;->()V -HSPLandroidx/compose/foundation/lazy/grid/ComposableSingletons$LazyGridItemProviderKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/grid/ComposableSingletons$LazyGridItemProviderKt;->()V -HSPLandroidx/compose/foundation/lazy/grid/EmptyLazyGridLayoutInfo;->()V -HSPLandroidx/compose/foundation/lazy/grid/EmptyLazyGridLayoutInfo;->()V -HSPLandroidx/compose/foundation/lazy/grid/GridCells$Adaptive;->(F)V -HSPLandroidx/compose/foundation/lazy/grid/GridCells$Adaptive;->calculateCrossAxisCellSizes(Landroidx/compose/ui/unit/Density;II)Ljava/util/ArrayList; -HSPLandroidx/compose/foundation/lazy/grid/GridCells$Adaptive;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/foundation/lazy/grid/GridCells$Fixed;->()V -HSPLandroidx/compose/foundation/lazy/grid/GridCells$Fixed;->calculateCrossAxisCellSizes(Landroidx/compose/ui/unit/Density;II)Ljava/util/ArrayList; -HSPLandroidx/compose/foundation/lazy/grid/GridCells$Fixed;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/foundation/lazy/grid/GridItemSpan;->(J)V -HSPLandroidx/compose/foundation/lazy/grid/ItemIndex;->(I)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridDslKt$rememberColumnWidthSums$1$1;->(Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/lazy/grid/GridCells;Landroidx/compose/foundation/layout/Arrangement$Horizontal;)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridDslKt$rememberColumnWidthSums$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/grid/LazyGridDslKt$rememberRowHeightSums$1$1;->(Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/lazy/grid/GridCells;Landroidx/compose/foundation/layout/Arrangement$Vertical;)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridDslKt$rememberRowHeightSums$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/grid/LazyGridDslKt;->LazyHorizontalGrid(IILandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/lazy/grid/GridCells;Landroidx/compose/foundation/lazy/grid/LazyGridState;Landroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;ZZ)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridDslKt;->LazyVerticalGrid(IILandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/lazy/grid/GridCells;Landroidx/compose/foundation/lazy/grid/LazyGridState;Landroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;ZZ)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridDslKt;->access$calculateCellsCrossAxisSizeImpl(III)Ljava/util/ArrayList; -HSPLandroidx/compose/foundation/lazy/grid/LazyGridIntervalContent;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridIntervalContent;->getKey()Lkotlin/jvm/functions/Function1; -HSPLandroidx/compose/foundation/lazy/grid/LazyGridIntervalContent;->getType()Lkotlin/jvm/functions/Function1; -HSPLandroidx/compose/foundation/lazy/grid/LazyGridItemPlacementAnimator;->(Lkotlinx/coroutines/CoroutineScope;Z)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridItemProviderImpl;->(Landroidx/compose/foundation/lazy/layout/MutableIntervalList;ZLkotlin/ranges/IntRange;)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridItemProviderImpl;->Item(ILandroidx/compose/runtime/Composer;I)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridItemProviderImpl;->getContentType(I)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/grid/LazyGridItemProviderImpl;->getHasCustomSpans()Z -HSPLandroidx/compose/foundation/lazy/grid/LazyGridItemProviderImpl;->getItemCount()I -HSPLandroidx/compose/foundation/lazy/grid/LazyGridItemProviderImpl;->getKey(I)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/grid/LazyGridItemProviderImpl;->getKeyToIndexMap()Ljava/util/Map; -HSPLandroidx/compose/foundation/lazy/grid/LazyGridItemProviderImpl;->getSpan-_-orMbw(I)J -HSPLandroidx/compose/foundation/lazy/grid/LazyGridItemProviderImpl;->getSpanLayoutProvider()Landroidx/compose/foundation/lazy/grid/LazyGridSpanLayoutProvider; -HSPLandroidx/compose/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$1$1;->(Landroidx/compose/runtime/DerivedSnapshotState;)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$1$1;->Item(ILandroidx/compose/runtime/Composer;I)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$1$1;->getContentType(I)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$1$1;->getItemCount()I -HSPLandroidx/compose/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$1$1;->getKey(I)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$1$1;->getKeyToIndexMap()Ljava/util/Map; -HSPLandroidx/compose/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$1$1;->getSpanLayoutProvider()Landroidx/compose/foundation/lazy/grid/LazyGridSpanLayoutProvider; -HSPLandroidx/compose/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$1$itemProviderState$1;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$1$itemProviderState$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$nearestItemsRangeState$1$1;->(Landroidx/compose/foundation/lazy/grid/LazyGridState;)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$nearestItemsRangeState$1$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$nearestItemsRangeState$2;->()V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$nearestItemsRangeState$2;->()V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$nearestItemsRangeState$2;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$nearestItemsRangeState$3;->()V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$nearestItemsRangeState$3;->()V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$nearestItemsRangeState$3;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/grid/LazyGridItemScopeImpl;->()V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridItemScopeImpl;->()V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridKt$ScrollPositionUpdater$1;->(Landroidx/compose/foundation/lazy/grid/LazyGridItemProvider;Landroidx/compose/foundation/lazy/grid/LazyGridState;I)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$1;->(Landroidx/compose/foundation/lazy/grid/LazyGridSpanLayoutProvider;Landroidx/compose/foundation/lazy/grid/LazyMeasuredLineProvider;)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$3;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;JII)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$measuredItemProvider$1;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;ZZIILandroidx/compose/foundation/lazy/grid/LazyGridItemPlacementAnimator;J)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$measuredItemProvider$1;->createItem-PU_OBEw(ILjava/lang/Object;IILjava/util/List;)Landroidx/compose/foundation/lazy/grid/LazyMeasuredItem; -HSPLandroidx/compose/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$measuredLineProvider$1;->(ZLjava/util/List;Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;I)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$measuredLineProvider$1;->createLine-H9FfpSk(I[Landroidx/compose/foundation/lazy/grid/LazyMeasuredItem;Ljava/util/List;I)Landroidx/compose/foundation/lazy/grid/LazyMeasuredLine; -HSPLandroidx/compose/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1;->(ZLandroidx/compose/foundation/layout/PaddingValues;ZLandroidx/compose/foundation/lazy/grid/LazyGridState;Landroidx/compose/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$1$1;Lkotlin/jvm/functions/Function2;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/foundation/lazy/grid/LazyGridItemPlacementAnimator;Landroidx/compose/foundation/OverscrollEffect;)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/grid/LazyGridKt;->LazyGrid(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/grid/LazyGridState;Lkotlin/jvm/functions/Function2;Landroidx/compose/foundation/layout/PaddingValues;ZZLandroidx/compose/foundation/gestures/FlingBehavior;ZLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;III)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridKt;->ScrollPositionUpdater(Landroidx/compose/foundation/lazy/grid/LazyGridItemProvider;Landroidx/compose/foundation/lazy/grid/LazyGridState;Landroidx/compose/runtime/Composer;I)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridMeasureKt$measureLazyGrid$3;->(Ljava/util/ArrayList;)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridMeasureKt$measureLazyGrid$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/grid/LazyGridMeasureResult;->(Landroidx/compose/foundation/lazy/grid/LazyMeasuredLine;IZFLandroidx/compose/ui/layout/MeasureResult;Ljava/util/List;ILandroidx/compose/foundation/gestures/Orientation;)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridMeasureResult;->getAlignmentLines()Ljava/util/Map; -HSPLandroidx/compose/foundation/lazy/grid/LazyGridMeasureResult;->getHeight()I -HSPLandroidx/compose/foundation/lazy/grid/LazyGridMeasureResult;->getWidth()I -HSPLandroidx/compose/foundation/lazy/grid/LazyGridMeasureResult;->placeChildren()V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridPlaceableWrapper;->(Landroidx/compose/ui/layout/Placeable;Ljava/lang/Object;)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridPositionedItem;->(JJILjava/lang/Object;IIJIIIIZLjava/util/ArrayList;Landroidx/compose/foundation/lazy/grid/LazyGridItemPlacementAnimator;J)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridPositionedItem;->getAnimationSpec(I)Landroidx/compose/animation/core/FiniteAnimationSpec; -HSPLandroidx/compose/foundation/lazy/grid/LazyGridScopeImpl$DefaultSpan$1;->()V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridScopeImpl$DefaultSpan$1;->()V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridScopeImpl$item$2$1;->(Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridScopeImpl$item$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/grid/LazyGridScopeImpl$item$3;->(Ljava/lang/Object;)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridScopeImpl$item$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/grid/LazyGridScopeImpl$item$4;->(Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridScopeImpl$item$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/grid/LazyGridScopeImpl;->()V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridScopeImpl;->item(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridScopeImpl;->items(ILcom/google/samples/apps/nowinandroid/core/ui/NewsFeedKt$newsFeed$$inlined$items$default$2;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridScrollPosition;->(II)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridScrollPosition;->update-yO3Fmg4(II)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridSpanLayoutProvider$Bucket;->(II)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridSpanLayoutProvider$LazyGridItemSpanScopeImpl;->()V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridSpanLayoutProvider$LazyGridItemSpanScopeImpl;->()V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridSpanLayoutProvider$LazyGridItemSpanScopeImpl;->getMaxLineSpan()I -HSPLandroidx/compose/foundation/lazy/grid/LazyGridSpanLayoutProvider$LineConfiguration;->(ILjava/util/List;)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridSpanLayoutProvider;->(Landroidx/compose/foundation/lazy/grid/LazyGridItemProvider;)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridSpanLayoutProvider;->getBucketSize()I -HSPLandroidx/compose/foundation/lazy/grid/LazyGridSpanLayoutProvider;->getLineConfiguration(I)Landroidx/compose/foundation/lazy/grid/LazyGridSpanLayoutProvider$LineConfiguration; -HSPLandroidx/compose/foundation/lazy/grid/LazyGridSpanLayoutProvider;->getLineIndexOfItem--_Ze7BM(I)I -HSPLandroidx/compose/foundation/lazy/grid/LazyGridSpanLayoutProvider;->getTotalSize()I -HSPLandroidx/compose/foundation/lazy/grid/LazyGridSpanLayoutProvider;->spanOf(I)I -HSPLandroidx/compose/foundation/lazy/grid/LazyGridState$Companion$Saver$1;->()V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridState$Companion$Saver$1;->()V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridState$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/grid/LazyGridState$Companion$Saver$2;->()V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridState$Companion$Saver$2;->()V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridState$prefetchInfoRetriever$2;->()V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridState$prefetchInfoRetriever$2;->()V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridState$remeasurementModifier$1;->(Landroidx/compose/foundation/lazy/grid/LazyGridState;)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridState$remeasurementModifier$1;->onRemeasurementAvailable(Landroidx/compose/ui/layout/Remeasurement;)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridState$scrollableState$1;->(Landroidx/compose/foundation/lazy/grid/LazyGridState;)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridState;->()V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridState;->(II)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridState;->getFirstVisibleItemIndex()I -HSPLandroidx/compose/foundation/lazy/grid/LazyGridState;->isScrollInProgress()Z -HSPLandroidx/compose/foundation/lazy/grid/LazyGridState;->updateScrollPositionIfTheFirstItemWasMoved$foundation_release(Landroidx/compose/foundation/lazy/grid/LazyGridItemProvider;)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridStateKt$rememberLazyGridState$1$1;->(II)V -HSPLandroidx/compose/foundation/lazy/grid/LazyGridStateKt$rememberLazyGridState$1$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/grid/LazyGridStateKt;->rememberLazyGridState(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/lazy/grid/LazyGridState; -HSPLandroidx/compose/foundation/lazy/grid/LazyMeasuredItem;->(ILjava/lang/Object;ZIIZLandroidx/compose/ui/unit/LayoutDirection;IILjava/util/List;Landroidx/compose/foundation/lazy/grid/LazyGridItemPlacementAnimator;J)V -HSPLandroidx/compose/foundation/lazy/grid/LazyMeasuredItem;->position(IIIIIII)Landroidx/compose/foundation/lazy/grid/LazyGridPositionedItem; -HSPLandroidx/compose/foundation/lazy/grid/LazyMeasuredItemProvider;->(Landroidx/compose/foundation/lazy/grid/LazyGridItemProvider;Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;ILandroidx/compose/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$measuredItemProvider$1;)V -HSPLandroidx/compose/foundation/lazy/grid/LazyMeasuredItemProvider;->getAndMeasure-ednRnyU(IIJ)Landroidx/compose/foundation/lazy/grid/LazyMeasuredItem; -HSPLandroidx/compose/foundation/lazy/grid/LazyMeasuredLine;->(I[Landroidx/compose/foundation/lazy/grid/LazyMeasuredItem;Ljava/util/List;ZILandroidx/compose/ui/unit/LayoutDirection;II)V -HSPLandroidx/compose/foundation/lazy/grid/LazyMeasuredLine;->position(III)Ljava/util/ArrayList; -HSPLandroidx/compose/foundation/lazy/grid/LazyMeasuredLineProvider;->(ZLjava/util/List;IIILandroidx/compose/foundation/lazy/grid/LazyMeasuredItemProvider;Landroidx/compose/foundation/lazy/grid/LazyGridSpanLayoutProvider;Landroidx/compose/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$measuredLineProvider$1;)V -HSPLandroidx/compose/foundation/lazy/grid/LazyMeasuredLineProvider;->childConstraints-JhjzzOo$foundation_release(II)J -HSPLandroidx/compose/foundation/lazy/grid/LazyMeasuredLineProvider;->getAndMeasure-bKFJvoY(I)Landroidx/compose/foundation/lazy/grid/LazyMeasuredLine; -HSPLandroidx/compose/foundation/lazy/grid/LazySemanticsKt$rememberLazyGridSemanticState$1$1$scrollAxisRange$1;->(Landroidx/compose/foundation/lazy/grid/LazyGridState;)V -HSPLandroidx/compose/foundation/lazy/grid/LazySemanticsKt$rememberLazyGridSemanticState$1$1$scrollAxisRange$2;->(Landroidx/compose/foundation/lazy/grid/LazyGridState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;)V -HSPLandroidx/compose/foundation/lazy/grid/LazySemanticsKt$rememberLazyGridSemanticState$1$1;->(ZLandroidx/compose/foundation/lazy/grid/LazyGridState;Landroidx/compose/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$1$1;)V -HSPLandroidx/compose/foundation/lazy/grid/LazySemanticsKt$rememberLazyGridSemanticState$1$1;->collectionInfo()Landroidx/compose/ui/semantics/CollectionInfo; -HSPLandroidx/compose/foundation/lazy/grid/LazySemanticsKt$rememberLazyGridSemanticState$1$1;->scrollAxisRange()Landroidx/compose/ui/semantics/ScrollAxisRange; -HSPLandroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider$Item$1;->(Landroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider;II)V -HSPLandroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider;->(Landroidx/compose/runtime/DerivedSnapshotState;)V -HSPLandroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider;->Item(ILandroidx/compose/runtime/Composer;I)V -HSPLandroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider;->getContentType(I)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider;->getItemCount()I -HSPLandroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider;->getKey(I)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider;->getKeyToIndexMap()Ljava/util/Map; -HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion$CREATOR$1;->()V -HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->()V -HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->(I)V -HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->hashCode()I -HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider$generateKeyToIndexMap$1$1;->(IILjava/util/HashMap;)V -HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider$generateKeyToIndexMap$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider;->(Landroidx/compose/foundation/lazy/layout/MutableIntervalList;Landroidx/compose/runtime/internal/ComposableLambdaImpl;Lkotlin/ranges/IntRange;)V -HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider;->Item(ILandroidx/compose/runtime/Composer;I)V -HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider;->getContentType(I)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider;->getItemCount()I -HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider;->getKey(I)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;->(IILandroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent;)V -HSPLandroidx/compose/foundation/lazy/layout/IntervalListKt;->access$binarySearch(ILandroidx/compose/runtime/collection/MutableVector;)I -HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$1;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;I)V -HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2$invoke$$inlined$onDispose$1;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;)V -HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;)V -HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;)V -HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;ILjava/lang/Object;Ljava/lang/Object;)V -HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->(Landroidx/compose/runtime/saveable/SaveableStateHolder;Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1$itemContentFactory$1$1;)V -HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->getContent(ILjava/lang/Object;)Lkotlin/jvm/functions/Function2; -HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemProviderKt;->findIndexByKey(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Ljava/lang/Object;I)I -HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;)V -HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1$2$1;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Lkotlin/jvm/functions/Function2;)V -HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1$itemContentFactory$1$1;->(Landroidx/compose/runtime/State;)V -HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1$itemContentFactory$1$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;ILandroidx/compose/runtime/MutableState;)V -HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt;->LazyLayout(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V -HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/ui/layout/SubcomposeMeasureScope;)V -HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; -HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->layout(IILjava/util/Map;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult; -HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->measure-0kLqBqw(JI)Ljava/util/List; -HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->roundToPx-0680j_4(F)I -HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;->()V -HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroid/view/View;)V -HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->onAbandoned()V -HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->onRemembered()V -HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher_androidKt;->LazyLayoutPrefetcher(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/runtime/Composer;I)V -HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$indexForKeyMapping$1;ZLandroidx/compose/ui/semantics/ScrollAxisRange;Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollByAction$1;Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollToIndexAction$1;Landroidx/compose/ui/semantics/CollectionInfo;)V -HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$indexForKeyMapping$1;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;)V -HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollByAction$1;->(ZLkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;)V -HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollToIndexAction$1;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;)V -HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt;->lazyLayoutSemantics(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1$1;->(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V -HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1$2;->(Landroidx/compose/runtime/MutableState;)V -HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1;->(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt;->rememberLazyNearestItemsRangeState(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState; -HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;->(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V -HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;->()V -HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;->()V -HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$2;->(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V -HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Ljava/lang/Object;)V -HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1;->(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Ljava/lang/Object;)V -HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2;->(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;I)V -HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->(Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/util/Map;)V -HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->SaveableStateProvider(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V -HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->canBeSaved(Ljava/lang/Object;)Z -HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->performSave()Ljava/util/Map; -HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->registerProvider(Ljava/lang/String;Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1;)Landroidx/compose/runtime/saveable/SaveableStateRegistry$Entry; -HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$1;->(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Lkotlin/jvm/functions/Function3;I)V -HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$holder$1;->(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V -HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$holder$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt;->LazySaveableStateHolderProvider(Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V -HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->()V -HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->addInterval(ILandroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent;)V -HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->checkIndexBounds(I)V -HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->forEach(IILandroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider$generateKeyToIndexMap$1$1;)V -HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->get(I)Landroidx/compose/foundation/lazy/layout/IntervalList$Interval; -HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->getSize()I -HSPLandroidx/compose/foundation/lazy/layout/PinnableParentKt$ModifierLocalPinnableParent$1;->()V -HSPLandroidx/compose/foundation/lazy/layout/PinnableParentKt$ModifierLocalPinnableParent$1;->()V -HSPLandroidx/compose/foundation/lazy/layout/PinnableParentKt$ModifierLocalPinnableParent$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/foundation/lazy/layout/PinnableParentKt;->()V -HSPLandroidx/compose/foundation/relocation/AndroidBringIntoViewParent;->(Landroid/view/View;)V -HSPLandroidx/compose/foundation/relocation/BringIntoViewChildModifier;->(Landroidx/compose/foundation/relocation/AndroidBringIntoViewParent;)V -HSPLandroidx/compose/foundation/relocation/BringIntoViewChildModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V -HSPLandroidx/compose/foundation/relocation/BringIntoViewChildModifier;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V -HSPLandroidx/compose/foundation/relocation/BringIntoViewKt$ModifierLocalBringIntoViewParent$1;->()V -HSPLandroidx/compose/foundation/relocation/BringIntoViewKt$ModifierLocalBringIntoViewParent$1;->()V -HSPLandroidx/compose/foundation/relocation/BringIntoViewKt$ModifierLocalBringIntoViewParent$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/foundation/relocation/BringIntoViewKt;->()V -HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;->()V -HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$2$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/foundation/relocation/BringIntoViewRequester;Landroidx/compose/foundation/relocation/BringIntoViewRequesterModifier;)V -HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$2$1$invoke$$inlined$onDispose$1;->dispose()V -HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$2$1;->(Landroidx/compose/foundation/relocation/BringIntoViewRequester;Landroidx/compose/foundation/relocation/BringIntoViewRequesterModifier;)V -HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$2;->(Landroidx/compose/foundation/relocation/BringIntoViewRequester;)V -HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterModifier;->(Landroidx/compose/foundation/relocation/AndroidBringIntoViewParent;)V -HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderKt$bringIntoViewResponder$2;->(Landroidx/compose/foundation/relocation/BringIntoViewResponder;)V -HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderKt$bringIntoViewResponder$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderModifier;->(Landroidx/compose/foundation/relocation/AndroidBringIntoViewParent;)V -HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal; -HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderModifier;->getValue()Ljava/lang/Object; -HSPLandroidx/compose/foundation/relocation/BringIntoViewResponder_androidKt;->rememberDefaultBringIntoViewParent(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/relocation/AndroidBringIntoViewParent; -HSPLandroidx/compose/foundation/selection/SelectableGroupKt$selectableGroup$1;->()V -HSPLandroidx/compose/foundation/selection/SelectableGroupKt$selectableGroup$1;->()V -HSPLandroidx/compose/foundation/selection/SelectableGroupKt$selectableGroup$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/selection/SelectableGroupKt;->selectableGroup(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/foundation/selection/SelectableKt$selectable$4$1;->(Z)V -HSPLandroidx/compose/foundation/selection/SelectableKt$selectable$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/selection/SelectableKt;->selectable-O2vRcR0(Landroidx/compose/ui/Modifier;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/Indication;ZLandroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/foundation/selection/ToggleableKt$toggleable$2;->(ZZLandroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/foundation/selection/ToggleableKt$toggleable$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/selection/ToggleableKt$toggleable$4$1;->(Lkotlin/jvm/functions/Function1;Z)V -HSPLandroidx/compose/foundation/selection/ToggleableKt$triStateToggleable$4$1;->(Landroidx/compose/ui/state/ToggleableState;)V -HSPLandroidx/compose/foundation/selection/ToggleableKt$triStateToggleable$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/shape/CornerBasedShape;->(Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;)V -HSPLandroidx/compose/foundation/shape/CornerBasedShape;->createOutline-Pq9zytI(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Landroidx/compose/ui/graphics/Outline; -HSPLandroidx/compose/foundation/shape/DpCornerSize;->(F)V -HSPLandroidx/compose/foundation/shape/DpCornerSize;->toPx-TmRCtEA(JLandroidx/compose/ui/unit/Density;)F -HSPLandroidx/compose/foundation/shape/PercentCornerSize;->(F)V -HSPLandroidx/compose/foundation/shape/PercentCornerSize;->toPx-TmRCtEA(JLandroidx/compose/ui/unit/Density;)F -HSPLandroidx/compose/foundation/shape/RoundedCornerShape;->(Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;)V -HSPLandroidx/compose/foundation/shape/RoundedCornerShape;->createOutline-LjSzlW0(JFFFFLandroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/graphics/Outline; -HSPLandroidx/compose/foundation/shape/RoundedCornerShape;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;->()V -HSPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;->RoundedCornerShape-0680j_4(F)Landroidx/compose/foundation/shape/RoundedCornerShape; -HSPLandroidx/compose/foundation/text/BasicTextKt$BasicText-BpD7jsM$$inlined$Layout$1;->(Landroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;)V -HSPLandroidx/compose/foundation/text/BasicTextKt$BasicText-BpD7jsM$$inlined$Layout$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/foundation/text/BasicTextKt;->BasicText-BpD7jsM(Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function1;IZILandroidx/compose/runtime/Composer;II)V -HSPLandroidx/compose/foundation/text/TextController$coreModifiers$1;->(Landroidx/compose/foundation/text/TextController;)V -HSPLandroidx/compose/foundation/text/TextController$coreModifiers$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/text/TextController$createSemanticsModifierFor$1$1;->(Landroidx/compose/foundation/text/TextController;)V -HSPLandroidx/compose/foundation/text/TextController$createSemanticsModifierFor$1;->(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/foundation/text/TextController;)V -HSPLandroidx/compose/foundation/text/TextController$createSemanticsModifierFor$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/text/TextController$drawTextAndSelectionBehind$1;->(Landroidx/compose/foundation/text/TextController;)V -HSPLandroidx/compose/foundation/text/TextController$drawTextAndSelectionBehind$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/text/TextController$measurePolicy$1$measure$2;->(Ljava/util/ArrayList;)V -HSPLandroidx/compose/foundation/text/TextController$measurePolicy$1$measure$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/foundation/text/TextController$measurePolicy$1;->(Landroidx/compose/foundation/text/TextController;)V -HSPLandroidx/compose/foundation/text/TextController$measurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; -HSPLandroidx/compose/foundation/text/TextController;->(Landroidx/compose/foundation/text/TextState;)V -HSPLandroidx/compose/foundation/text/TextController;->onAbandoned()V -HSPLandroidx/compose/foundation/text/TextController;->onForgotten()V -HSPLandroidx/compose/foundation/text/TextController;->onRemembered()V -HSPLandroidx/compose/foundation/text/TextDelegate;->(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;IZILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;)V -HSPLandroidx/compose/foundation/text/TextDelegate;->layout-NN6Ew-U(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/text/TextLayoutResult;)Landroidx/compose/ui/text/TextLayoutResult; -HSPLandroidx/compose/foundation/text/TextDelegate;->layoutIntrinsics(Landroidx/compose/ui/unit/LayoutDirection;)V -HSPLandroidx/compose/foundation/text/TextState$onTextLayout$1;->()V -HSPLandroidx/compose/foundation/text/TextState$onTextLayout$1;->()V -HSPLandroidx/compose/foundation/text/TextState;->(Landroidx/compose/foundation/text/TextDelegate;J)V -HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt$LocalSelectionRegistrar$1;->()V -HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt$LocalSelectionRegistrar$1;->()V -HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt$LocalSelectionRegistrar$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt;->()V -HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt;->hasSelection(Landroidx/compose/foundation/text/selection/SelectionRegistrar;J)Z -HSPLandroidx/compose/foundation/text/selection/TextSelectionColors;->(JJ)V -HSPLandroidx/compose/foundation/text/selection/TextSelectionColors;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/foundation/text/selection/TextSelectionColorsKt$LocalTextSelectionColors$1;->()V -HSPLandroidx/compose/foundation/text/selection/TextSelectionColorsKt$LocalTextSelectionColors$1;->()V -HSPLandroidx/compose/foundation/text/selection/TextSelectionColorsKt;->()V -HSPLandroidx/compose/material/icons/rounded/SearchKt;->getSearch()V -HSPLandroidx/compose/material/icons/rounded/SettingsKt;->getSettings()Landroidx/compose/ui/graphics/vector/ImageVector; -HSPLandroidx/compose/material/icons/rounded/ShortTextKt;->getShortText()V -HSPLandroidx/compose/material/icons/rounded/TagKt;->getTag()V -HSPLandroidx/compose/material/icons/rounded/ViewDayKt;->getViewDay()V -HSPLandroidx/compose/material/icons/rounded/VolumeOffKt;->getVolumeOff()V -HSPLandroidx/compose/material/icons/rounded/VolumeUpKt;->getVolumeUp()V -HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance$onInvalidateRipple$1;->(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)V -HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->(ZFLandroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;Landroidx/compose/material/ripple/RippleContainer;)V -HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->dispose()V -HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->drawIndication(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V -HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->onAbandoned()V -HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->onForgotten()V -HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->onRemembered()V -HSPLandroidx/compose/material/ripple/PlatformRipple;->(ZFLandroidx/compose/runtime/MutableState;)V -HSPLandroidx/compose/material/ripple/PlatformRipple;->rememberUpdatedRippleInstance-942rkJo(Landroidx/compose/foundation/interaction/InteractionSource;ZFLandroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/Composer;)Landroidx/compose/material/ripple/RippleIndicationInstance; -HSPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1$invokeSuspend$$inlined$collect$1;->(Landroidx/compose/material/ripple/RippleIndicationInstance;Lkotlinx/coroutines/CoroutineScope;)V -HSPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1;->(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/material/ripple/RippleIndicationInstance;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material/ripple/Ripple;->(ZFLandroidx/compose/runtime/MutableState;)V -HSPLandroidx/compose/material/ripple/Ripple;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/material/ripple/Ripple;->rememberUpdatedInstance(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/IndicationInstance; -HSPLandroidx/compose/material/ripple/RippleAlpha;->(FFFF)V -HSPLandroidx/compose/material/ripple/RippleAlpha;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/material/ripple/RippleAnimationKt;->()V -HSPLandroidx/compose/material/ripple/RippleAnimationKt;->getRippleEndRadius-cSwnlzA(Landroidx/compose/ui/unit/Density;ZJ)F -HSPLandroidx/compose/material/ripple/RippleContainer;->(Landroid/content/Context;)V -HSPLandroidx/compose/material/ripple/RippleHostMap;->()V -HSPLandroidx/compose/material/ripple/RippleHostView;->()V -HSPLandroidx/compose/material/ripple/RippleHostView;->(Landroid/content/Context;)V -HSPLandroidx/compose/material/ripple/RippleHostView;->refreshDrawableState()V -HSPLandroidx/compose/material/ripple/RippleIndicationInstance;->(Landroidx/compose/runtime/MutableState;Z)V -HSPLandroidx/compose/material/ripple/RippleIndicationInstance;->drawStateLayer-H2RKhps(Landroidx/compose/ui/graphics/drawscope/DrawScope;FJ)V -HSPLandroidx/compose/material/ripple/RippleKt;->()V -HSPLandroidx/compose/material/ripple/RippleKt;->rememberRipple-9IZ8Weo(ZFLandroidx/compose/runtime/Composer;II)Landroidx/compose/material/ripple/PlatformRipple; -HSPLandroidx/compose/material/ripple/RippleThemeKt$LocalRippleTheme$1;->()V -HSPLandroidx/compose/material/ripple/RippleThemeKt$LocalRippleTheme$1;->()V -HSPLandroidx/compose/material/ripple/RippleThemeKt;->()V -HSPLandroidx/compose/material/ripple/StateLayer;->(Landroidx/compose/runtime/MutableState;Z)V -HSPLandroidx/compose/material3/AlertDialogKt$AlertDialogContent$1$$ExternalSyntheticOutline0;->m(JLandroidx/compose/runtime/DynamicProvidableCompositionLocal;)Landroidx/compose/runtime/ProvidedValue; -HSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$1$1;->(Landroidx/compose/material3/TopAppBarScrollBehavior;F)V -HSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$1$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$2;->(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;ZLkotlin/jvm/functions/Function2;Landroidx/compose/runtime/internal/ComposableLambdaImpl;ILandroidx/compose/material3/TopAppBarScrollBehavior;)V -HSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$3;->(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Landroidx/compose/material3/TopAppBarScrollBehavior;II)V -HSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$actionsRow$1;->(Lkotlin/jvm/functions/Function3;I)V -HSPLandroidx/compose/material3/AppBarKt$SingleRowTopAppBar$actionsRow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/AppBarKt$TopAppBarLayout$1$3$1;->(JFLkotlin/jvm/functions/Function2;I)V -HSPLandroidx/compose/material3/AppBarKt$TopAppBarLayout$1$3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/AppBarKt$TopAppBarLayout$2$measure$1;->(Landroidx/compose/ui/layout/Placeable;ILandroidx/compose/ui/layout/Placeable;Landroidx/compose/foundation/layout/Arrangement$Horizontal;JLandroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/foundation/layout/Arrangement$Vertical;II)V -HSPLandroidx/compose/material3/AppBarKt$TopAppBarLayout$2$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/AppBarKt$TopAppBarLayout$2;->(FLandroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/foundation/layout/Arrangement$Vertical;I)V -HSPLandroidx/compose/material3/AppBarKt$TopAppBarLayout$2;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; -HSPLandroidx/compose/material3/AppBarKt;->()V -HSPLandroidx/compose/material3/AppBarKt;->CenterAlignedTopAppBar(Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;II)V -HSPLandroidx/compose/material3/AppBarKt;->SingleRowTopAppBar(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarColors;Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;II)V -HSPLandroidx/compose/material3/AppBarKt;->access$TopAppBarLayout-kXwM9vE(Landroidx/compose/ui/Modifier;FJJJLkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/TextStyle;FLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;IZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V -HSPLandroidx/compose/material3/ButtonColors;->(JJJJ)V -HSPLandroidx/compose/material3/ButtonDefaults;->()V -HSPLandroidx/compose/material3/ButtonDefaults;->buttonColors-ro_MJ88(JJJJLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/ButtonColors; -HSPLandroidx/compose/material3/ButtonElevation$animateElevation$1$1$1;->(Landroidx/compose/runtime/snapshots/SnapshotStateList;)V -HSPLandroidx/compose/material3/ButtonElevation$animateElevation$1$1;->(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/snapshots/SnapshotStateList;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/material3/ButtonElevation$animateElevation$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/material3/ButtonElevation$animateElevation$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/ButtonElevation$animateElevation$2;->(Landroidx/compose/animation/core/Animatable;FLkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/material3/ButtonElevation$animateElevation$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/material3/ButtonElevation$animateElevation$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/ButtonElevation;->(FFFFF)V -HSPLandroidx/compose/material3/ButtonElevation;->animateElevation(ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/AnimationState; -HSPLandroidx/compose/material3/ButtonKt$Button$2$1$1;->(Landroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function3;I)V -HSPLandroidx/compose/material3/ButtonKt$Button$2$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/ButtonKt$Button$2$1;->(Landroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function3;I)V -HSPLandroidx/compose/material3/ButtonKt$Button$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/ButtonKt$Button$2;->(JLandroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function3;I)V -HSPLandroidx/compose/material3/ButtonKt$Button$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/ButtonKt$Button$3;->(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/ButtonColors;Landroidx/compose/material3/ButtonElevation;Landroidx/compose/foundation/BorderStroke;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;II)V -HSPLandroidx/compose/material3/ButtonKt;->Button(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/ButtonColors;Landroidx/compose/material3/ButtonElevation;Landroidx/compose/foundation/BorderStroke;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V -HSPLandroidx/compose/material3/ColorResourceHelper;->()V -HSPLandroidx/compose/material3/ColorResourceHelper;->()V -HSPLandroidx/compose/material3/ColorResourceHelper;->getColor-WaAFU9c(Landroid/content/Context;I)J -HSPLandroidx/compose/material3/ColorScheme$$ExternalSyntheticOutline0;->m(JLandroidx/compose/runtime/StructuralEqualityPolicy;)Landroidx/compose/runtime/ParcelableSnapshotMutableState; -HSPLandroidx/compose/material3/ColorScheme;->(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJ)V -HSPLandroidx/compose/material3/ColorScheme;->getBackground-0d7_KjU()J -HSPLandroidx/compose/material3/ColorScheme;->getError-0d7_KjU()J -HSPLandroidx/compose/material3/ColorScheme;->getErrorContainer-0d7_KjU()J -HSPLandroidx/compose/material3/ColorScheme;->getInverseOnSurface-0d7_KjU()J -HSPLandroidx/compose/material3/ColorScheme;->getInversePrimary-0d7_KjU()J -HSPLandroidx/compose/material3/ColorScheme;->getInverseSurface-0d7_KjU()J -HSPLandroidx/compose/material3/ColorScheme;->getOnBackground-0d7_KjU()J -HSPLandroidx/compose/material3/ColorScheme;->getOnError-0d7_KjU()J -HSPLandroidx/compose/material3/ColorScheme;->getOnErrorContainer-0d7_KjU()J -HSPLandroidx/compose/material3/ColorScheme;->getOnPrimary-0d7_KjU()J -HSPLandroidx/compose/material3/ColorScheme;->getOnPrimaryContainer-0d7_KjU()J -HSPLandroidx/compose/material3/ColorScheme;->getOnSecondary-0d7_KjU()J -HSPLandroidx/compose/material3/ColorScheme;->getOnSecondaryContainer-0d7_KjU()J -HSPLandroidx/compose/material3/ColorScheme;->getOnSurface-0d7_KjU()J -HSPLandroidx/compose/material3/ColorScheme;->getOnSurfaceVariant-0d7_KjU()J -HSPLandroidx/compose/material3/ColorScheme;->getOnTertiary-0d7_KjU()J -HSPLandroidx/compose/material3/ColorScheme;->getOnTertiaryContainer-0d7_KjU()J -HSPLandroidx/compose/material3/ColorScheme;->getPrimary-0d7_KjU()J -HSPLandroidx/compose/material3/ColorScheme;->getPrimaryContainer-0d7_KjU()J -HSPLandroidx/compose/material3/ColorScheme;->getSecondary-0d7_KjU()J -HSPLandroidx/compose/material3/ColorScheme;->getSecondaryContainer-0d7_KjU()J -HSPLandroidx/compose/material3/ColorScheme;->getSurface-0d7_KjU()J -HSPLandroidx/compose/material3/ColorScheme;->getSurfaceTint-0d7_KjU()J -HSPLandroidx/compose/material3/ColorScheme;->getSurfaceVariant-0d7_KjU()J -HSPLandroidx/compose/material3/ColorScheme;->getTertiary-0d7_KjU()J -HSPLandroidx/compose/material3/ColorScheme;->getTertiaryContainer-0d7_KjU()J -HSPLandroidx/compose/material3/ColorSchemeKt$LocalColorScheme$1;->()V -HSPLandroidx/compose/material3/ColorSchemeKt$LocalColorScheme$1;->()V -HSPLandroidx/compose/material3/ColorSchemeKt;->()V -HSPLandroidx/compose/material3/ColorSchemeKt;->contentColorFor-4WTKRHQ(Landroidx/compose/material3/ColorScheme;J)J -HSPLandroidx/compose/material3/ColorSchemeKt;->contentColorFor-ek8zF_U(JLandroidx/compose/runtime/Composer;I)J -HSPLandroidx/compose/material3/ColorSchemeKt;->darkColorScheme-G1PFc-w$default(JJJJJJJJJJJJJJJJJJJJJJJJJJI)Landroidx/compose/material3/ColorScheme; -HSPLandroidx/compose/material3/ColorSchemeKt;->fromToken(Landroidx/compose/material3/ColorScheme;I)J -HSPLandroidx/compose/material3/ColorSchemeKt;->lightColorScheme-G1PFc-w$default(JJJJJJJJJJJJJJJJJJJJJJJJJJI)Landroidx/compose/material3/ColorScheme; -HSPLandroidx/compose/material3/ColorSchemeKt;->surfaceColorAtElevation-3ABfNKs(Landroidx/compose/material3/ColorScheme;F)J -HSPLandroidx/compose/material3/ColorSchemeKt;->toColor(ILandroidx/compose/runtime/Composer;)J -HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-1$1;->()V -HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-1$1;->()V -HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-10$1;->()V -HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-10$1;->()V -HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-11$1;->()V -HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-11$1;->()V -HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-12$1;->()V -HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-12$1;->()V -HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-2$1;->()V -HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-2$1;->()V -HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-3$1;->()V -HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-3$1;->()V -HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-4$1;->()V -HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-4$1;->()V -HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-5$1;->()V -HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-5$1;->()V -HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-5$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-6$1;->()V -HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-6$1;->()V -HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-7$1;->()V -HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-7$1;->()V -HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-8$1;->()V -HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-8$1;->()V -HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-9$1;->()V -HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-9$1;->()V -HSPLandroidx/compose/material3/ComposableSingletons$AppBarKt;->()V -HSPLandroidx/compose/material3/ComposableSingletons$ScaffoldKt$lambda-1$1;->()V -HSPLandroidx/compose/material3/ComposableSingletons$ScaffoldKt$lambda-1$1;->()V -HSPLandroidx/compose/material3/ComposableSingletons$ScaffoldKt$lambda-2$1;->()V -HSPLandroidx/compose/material3/ComposableSingletons$ScaffoldKt$lambda-2$1;->()V -HSPLandroidx/compose/material3/ComposableSingletons$ScaffoldKt$lambda-3$1;->()V -HSPLandroidx/compose/material3/ComposableSingletons$ScaffoldKt$lambda-3$1;->()V -HSPLandroidx/compose/material3/ComposableSingletons$ScaffoldKt$lambda-4$1;->()V -HSPLandroidx/compose/material3/ComposableSingletons$ScaffoldKt$lambda-4$1;->()V -HSPLandroidx/compose/material3/ComposableSingletons$ScaffoldKt$lambda-4$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/ComposableSingletons$ScaffoldKt;->()V -HSPLandroidx/compose/material3/ComposableSingletons$SnackbarHostKt$lambda-1$1;->()V -HSPLandroidx/compose/material3/ComposableSingletons$SnackbarHostKt$lambda-1$1;->()V -HSPLandroidx/compose/material3/ComposableSingletons$SnackbarHostKt;->()V -HSPLandroidx/compose/material3/ContentColorKt$LocalContentColor$1;->()V -HSPLandroidx/compose/material3/ContentColorKt$LocalContentColor$1;->()V -HSPLandroidx/compose/material3/ContentColorKt;->()V -HSPLandroidx/compose/material3/FabPosition;->(I)V -HSPLandroidx/compose/material3/FadeInFadeOutState;->()V -HSPLandroidx/compose/material3/IconButtonColors;->(JJJJ)V -HSPLandroidx/compose/material3/IconButtonKt$IconButton$3;->(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/material3/IconButtonColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function2;II)V -HSPLandroidx/compose/material3/IconButtonKt;->IconButton(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/material3/IconButtonColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V -HSPLandroidx/compose/material3/IconKt$Icon$1;->(Landroidx/compose/ui/graphics/vector/ImageVector;Ljava/lang/String;Landroidx/compose/ui/Modifier;JII)V -HSPLandroidx/compose/material3/IconKt$Icon$3;->(Landroidx/compose/ui/graphics/painter/Painter;Ljava/lang/String;Landroidx/compose/ui/Modifier;JII)V -HSPLandroidx/compose/material3/IconKt$Icon$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/IconKt$Icon$semantics$1$1;->(Ljava/lang/String;)V -HSPLandroidx/compose/material3/IconKt$Icon$semantics$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/IconKt;->()V -HSPLandroidx/compose/material3/IconKt;->Icon-ww6aTOc(Landroidx/compose/ui/graphics/painter/Painter;Ljava/lang/String;Landroidx/compose/ui/Modifier;JLandroidx/compose/runtime/Composer;II)V -HSPLandroidx/compose/material3/IconKt;->Icon-ww6aTOc(Landroidx/compose/ui/graphics/vector/ImageVector;Ljava/lang/String;Landroidx/compose/ui/Modifier;JLandroidx/compose/runtime/Composer;II)V -HSPLandroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Landroidx/compose/material3/MappedInteractionSource;)V -HSPLandroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Landroidx/compose/material3/MappedInteractionSource;)V -HSPLandroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLandroidx/compose/material3/MappedInteractionSource;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;J)V -HSPLandroidx/compose/material3/MappedInteractionSource;->getInteractions()Lkotlinx/coroutines/flow/Flow; -HSPLandroidx/compose/material3/MaterialRippleTheme;->()V -HSPLandroidx/compose/material3/MaterialRippleTheme;->()V -HSPLandroidx/compose/material3/MaterialRippleTheme;->defaultColor-WaAFU9c(Landroidx/compose/runtime/Composer;)J -HSPLandroidx/compose/material3/MaterialRippleTheme;->rippleAlpha(Landroidx/compose/runtime/Composer;)Landroidx/compose/material/ripple/RippleAlpha; -HSPLandroidx/compose/material3/MaterialThemeKt$MaterialTheme$1;->(Landroidx/compose/material3/Typography;Lkotlin/jvm/functions/Function2;I)V -HSPLandroidx/compose/material3/MaterialThemeKt$MaterialTheme$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/MaterialThemeKt$MaterialTheme$2;->(Landroidx/compose/material3/ColorScheme;Landroidx/compose/material3/Shapes;Landroidx/compose/material3/Typography;Lkotlin/jvm/functions/Function2;II)V -HSPLandroidx/compose/material3/MaterialThemeKt;->()V -HSPLandroidx/compose/material3/MaterialThemeKt;->MaterialTheme(Landroidx/compose/material3/ColorScheme;Landroidx/compose/material3/Shapes;Landroidx/compose/material3/Typography;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V -HSPLandroidx/compose/material3/MinimumTouchTargetModifier$measure$1;->(IILandroidx/compose/ui/layout/Placeable;)V -HSPLandroidx/compose/material3/MinimumTouchTargetModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/MinimumTouchTargetModifier;->(J)V -HSPLandroidx/compose/material3/MinimumTouchTargetModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; -HSPLandroidx/compose/material3/NavigationBarDefaults;->()V -HSPLandroidx/compose/material3/NavigationBarItemColors;->(JJJJJ)V -HSPLandroidx/compose/material3/NavigationBarKt$NavigationBar$1;->(Landroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function3;I)V -HSPLandroidx/compose/material3/NavigationBarKt$NavigationBar$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/NavigationBarKt$NavigationBar$2;->(Landroidx/compose/ui/Modifier;JJFLandroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function3;II)V -HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$2$1;->(Landroidx/compose/runtime/MutableState;)V -HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$3$indicator$1;->(Landroidx/compose/material3/NavigationBarItemColors;Landroidx/compose/animation/core/AnimationState;)V -HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$3$indicator$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$3$indicatorRipple$1;->(Landroidx/compose/material3/MappedInteractionSource;)V -HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$3$indicatorRipple$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$4;->(Landroidx/compose/foundation/layout/RowScope;ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function2;ZLandroidx/compose/material3/NavigationBarItemColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;II)V -HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1$1;->()V -HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1$1;->()V -HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1;->(Landroidx/compose/material3/NavigationBarItemColors;ZILkotlin/jvm/functions/Function2;ZLkotlin/jvm/functions/Function2;)V -HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledLabel$1$1$1;->(Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;I)V -HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledLabel$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledLabel$1$1;->(Landroidx/compose/material3/NavigationBarItemColors;ZILkotlin/jvm/functions/Function2;)V -HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledLabel$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItemBaselineLayout$2;->(FLkotlin/jvm/functions/Function2;Z)V -HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItemBaselineLayout$2;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; -HSPLandroidx/compose/material3/NavigationBarKt$placeLabelAndIcon$1;->(Landroidx/compose/ui/layout/Placeable;ZFLandroidx/compose/ui/layout/Placeable;IIILandroidx/compose/ui/layout/Placeable;IILandroidx/compose/ui/layout/Placeable;IIILandroidx/compose/ui/layout/MeasureScope;)V -HSPLandroidx/compose/material3/NavigationBarKt$placeLabelAndIcon$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/NavigationBarKt;->()V -HSPLandroidx/compose/material3/NavigationBarKt;->NavigationBar-HsRjFd4(Landroidx/compose/ui/Modifier;JJFLandroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V -HSPLandroidx/compose/material3/NavigationBarKt;->NavigationBarItem(Landroidx/compose/foundation/layout/RowScope;ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function2;ZLandroidx/compose/material3/NavigationBarItemColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/Composer;II)V -HSPLandroidx/compose/material3/NavigationBarKt;->NavigationBarItemBaselineLayout(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;ZFLandroidx/compose/runtime/Composer;I)V -HSPLandroidx/compose/material3/ScaffoldKt$LocalFabPlacement$1;->()V -HSPLandroidx/compose/material3/ScaffoldKt$LocalFabPlacement$1;->()V -HSPLandroidx/compose/material3/ScaffoldKt$Scaffold$1;->(IILandroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;)V -HSPLandroidx/compose/material3/ScaffoldKt$Scaffold$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/ScaffoldKt$Scaffold$2;->(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;IJJLandroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function3;II)V -HSPLandroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1$1$bodyContentPlaceables$1;->(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/ui/layout/SubcomposeMeasureScope;Ljava/util/ArrayList;ILjava/util/ArrayList;Ljava/lang/Integer;Lkotlin/jvm/functions/Function3;I)V -HSPLandroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1$1$bodyContentPlaceables$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1$1$bottomBarPlaceables$1;->(Landroidx/compose/material3/FabPlacement;Lkotlin/jvm/functions/Function2;I)V -HSPLandroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1$1$bottomBarPlaceables$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1$1;->(Landroidx/compose/ui/layout/SubcomposeMeasureScope;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;IILandroidx/compose/foundation/layout/WindowInsets;JLkotlin/jvm/functions/Function2;ILkotlin/jvm/functions/Function3;I)V -HSPLandroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1;->(IILandroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;)V -HSPLandroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/ScaffoldKt;->()V -HSPLandroidx/compose/material3/ScaffoldKt;->Scaffold-TvnljyQ(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;IJJLandroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V -HSPLandroidx/compose/material3/ScaffoldKt;->access$ScaffoldLayout-FMILGgc(ILkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V -HSPLandroidx/compose/material3/ScaffoldLayoutContent;->()V -HSPLandroidx/compose/material3/ScaffoldLayoutContent;->(ILjava/lang/String;)V -HSPLandroidx/compose/material3/ShapeDefaults;->()V -HSPLandroidx/compose/material3/Shapes;->(I)V -HSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;->()V -HSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;->()V -HSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/material3/ShapesKt;->()V -HSPLandroidx/compose/material3/ShapesKt;->toShape(ILandroidx/compose/runtime/Composer;)Landroidx/compose/ui/graphics/Shape; -HSPLandroidx/compose/material3/SnackbarHostKt$FadeInFadeOutWithScale$3;->(Landroidx/compose/material3/SnackbarData;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;II)V -HSPLandroidx/compose/material3/SnackbarHostKt$SnackbarHost$1;->(Landroidx/compose/material3/SnackbarData;Landroidx/compose/ui/platform/AccessibilityManager;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/material3/SnackbarHostKt$SnackbarHost$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/material3/SnackbarHostKt$SnackbarHost$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/SnackbarHostKt$SnackbarHost$2;->(Landroidx/compose/material3/SnackbarHostState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;II)V -HSPLandroidx/compose/material3/SnackbarHostKt;->FadeInFadeOutWithScale(Landroidx/compose/material3/SnackbarData;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V -HSPLandroidx/compose/material3/SnackbarHostKt;->SnackbarHost(Landroidx/compose/material3/SnackbarHostState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V -HSPLandroidx/compose/material3/SnackbarHostState;->()V -HSPLandroidx/compose/material3/SurfaceKt$LocalAbsoluteTonalElevation$1;->()V -HSPLandroidx/compose/material3/SurfaceKt$LocalAbsoluteTonalElevation$1;->()V -HSPLandroidx/compose/material3/SurfaceKt$LocalAbsoluteTonalElevation$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/material3/SurfaceKt$Surface$1$1;->()V -HSPLandroidx/compose/material3/SurfaceKt$Surface$1$1;->()V -HSPLandroidx/compose/material3/SurfaceKt$Surface$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/SurfaceKt$Surface$1$2;->(Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/material3/SurfaceKt$Surface$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/SurfaceKt$Surface$1;->(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JFILandroidx/compose/foundation/BorderStroke;FLandroidx/compose/runtime/internal/ComposableLambdaImpl;)V -HSPLandroidx/compose/material3/SurfaceKt$Surface$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/SurfaceKt$Surface$3;->(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JFILandroidx/compose/foundation/BorderStroke;FLandroidx/compose/foundation/interaction/MutableInteractionSource;ZLkotlin/jvm/functions/Function0;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V -HSPLandroidx/compose/material3/SurfaceKt$Surface$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/SurfaceKt$Surface$5;->(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JFILandroidx/compose/foundation/BorderStroke;FZLandroidx/compose/foundation/interaction/MutableInteractionSource;ZLkotlin/jvm/functions/Function0;Landroidx/compose/runtime/internal/ComposableLambdaImpl;I)V -HSPLandroidx/compose/material3/SurfaceKt$Surface$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/SurfaceKt;->()V -HSPLandroidx/compose/material3/SurfaceKt;->Surface-T9BRK9s(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JJFFLandroidx/compose/runtime/internal/ComposableLambdaImpl;Landroidx/compose/runtime/Composer;II)V -HSPLandroidx/compose/material3/SurfaceKt;->Surface-d85dljk(ZLkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;JFFLandroidx/compose/foundation/BorderStroke;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/internal/ComposableLambdaImpl;Landroidx/compose/runtime/Composer;III)V -HSPLandroidx/compose/material3/SurfaceKt;->Surface-o_FOJdg(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;JJFFLandroidx/compose/foundation/BorderStroke;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/internal/ComposableLambdaImpl;Landroidx/compose/runtime/Composer;I)V -HSPLandroidx/compose/material3/SurfaceKt;->access$surface-8ww4TTg(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JLandroidx/compose/foundation/BorderStroke;F)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/material3/SurfaceKt;->access$surfaceColorAtElevation-CLU3JFs(JFLandroidx/compose/runtime/Composer;I)J -HSPLandroidx/compose/material3/SystemBarsDefaultInsets_androidKt;->getSystemBarsForVisualComponents(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/layout/AndroidWindowInsets; -HSPLandroidx/compose/material3/TextKt$LocalTextStyle$1;->()V -HSPLandroidx/compose/material3/TextKt$LocalTextStyle$1;->()V -HSPLandroidx/compose/material3/TextKt$LocalTextStyle$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/material3/TextKt$ProvideTextStyle$1;->(Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;I)V -HSPLandroidx/compose/material3/TextKt$Text$1;->()V -HSPLandroidx/compose/material3/TextKt$Text$1;->()V -HSPLandroidx/compose/material3/TextKt$Text$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/TextKt$Text$2;->(Ljava/lang/String;Landroidx/compose/ui/Modifier;JJLandroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontFamily;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/text/style/TextAlign;JIZILkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/TextStyle;III)V -HSPLandroidx/compose/material3/TextKt$Text$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/TextKt;->()V -HSPLandroidx/compose/material3/TextKt;->ProvideTextStyle(Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V -HSPLandroidx/compose/material3/TextKt;->Text-fLXpl1I(Ljava/lang/String;Landroidx/compose/ui/Modifier;JJLandroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontFamily;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/text/style/TextAlign;JIZILkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/runtime/Composer;III)V -HSPLandroidx/compose/material3/TonalPalette;->(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ)V -HSPLandroidx/compose/material3/TopAppBarColors;->(JJJJJ)V -HSPLandroidx/compose/material3/TopAppBarDefaults;->centerAlignedTopAppBarColors-zjMxDiM(JLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/TopAppBarColors; -HSPLandroidx/compose/material3/TouchTargetKt$LocalMinimumTouchTargetEnforcement$1;->()V -HSPLandroidx/compose/material3/TouchTargetKt$LocalMinimumTouchTargetEnforcement$1;->()V -HSPLandroidx/compose/material3/TouchTargetKt$LocalMinimumTouchTargetEnforcement$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/material3/TouchTargetKt$minimumTouchTargetSize$2;->()V -HSPLandroidx/compose/material3/TouchTargetKt$minimumTouchTargetSize$2;->()V -HSPLandroidx/compose/material3/TouchTargetKt$minimumTouchTargetSize$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/material3/TouchTargetKt;->()V -HSPLandroidx/compose/material3/TouchTargetKt;->minimumTouchTargetSize(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/material3/Typography;->(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/TextStyle;)V -HSPLandroidx/compose/material3/TypographyKt$LocalTypography$1;->()V -HSPLandroidx/compose/material3/TypographyKt$LocalTypography$1;->()V -HSPLandroidx/compose/material3/TypographyKt;->()V -HSPLandroidx/compose/material3/TypographyKt;->fromToken(Landroidx/compose/material3/Typography;I)Landroidx/compose/ui/text/TextStyle; -HSPLandroidx/compose/material3/tokens/ColorDarkTokens;->()V -HSPLandroidx/compose/material3/tokens/ColorLightTokens;->()V -HSPLandroidx/compose/material3/tokens/ElevationTokens;->()V -HSPLandroidx/compose/material3/tokens/FilledButtonTokens;->()V -HSPLandroidx/compose/material3/tokens/IconButtonTokens;->()V -HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->()V -HSPLandroidx/compose/material3/tokens/PaletteTokens;->()V -HSPLandroidx/compose/material3/tokens/ShapeTokens;->()V -HSPLandroidx/compose/material3/tokens/TopAppBarSmallCenteredTokens;->()V -HSPLandroidx/compose/material3/tokens/TopAppBarSmallTokens;->()V -HSPLandroidx/compose/material3/windowsizeclass/WindowSizeClass;->(II)V -HSPLandroidx/compose/material3/windowsizeclass/WindowSizeClass;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/runtime/AbstractApplier;->(Ljava/lang/Object;)V -HSPLandroidx/compose/runtime/AbstractApplier;->clear()V -HSPLandroidx/compose/runtime/AbstractApplier;->down(Ljava/lang/Object;)V -HSPLandroidx/compose/runtime/AbstractApplier;->getCurrent()Ljava/lang/Object; -HSPLandroidx/compose/runtime/AbstractApplier;->up()V -HSPLandroidx/compose/runtime/ActualAndroid_androidKt$DefaultMonotonicFrameClock$2;->()V -HSPLandroidx/compose/runtime/ActualAndroid_androidKt$DefaultMonotonicFrameClock$2;->()V -HSPLandroidx/compose/runtime/ActualAndroid_androidKt;->()V -HSPLandroidx/compose/runtime/Anchor;->(I)V -HSPLandroidx/compose/runtime/Anchor;->getValid()Z -HSPLandroidx/compose/runtime/Applier;->onEndChanges()V -HSPLandroidx/compose/runtime/BroadcastFrameClock$FrameAwaiter;->(Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/CancellableContinuationImpl;)V -HSPLandroidx/compose/runtime/BroadcastFrameClock$withFrameNanos$2$1;->(Landroidx/compose/runtime/BroadcastFrameClock;Lkotlin/jvm/internal/Ref$ObjectRef;)V -HSPLandroidx/compose/runtime/BroadcastFrameClock$withFrameNanos$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/BroadcastFrameClock;->(Landroidx/compose/runtime/Recomposer$broadcastFrameClock$1;)V -HSPLandroidx/compose/runtime/BroadcastFrameClock;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/BroadcastFrameClock;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; -HSPLandroidx/compose/runtime/BroadcastFrameClock;->getHasAwaiters()Z -HSPLandroidx/compose/runtime/BroadcastFrameClock;->sendFrame(J)V -HSPLandroidx/compose/runtime/BroadcastFrameClock;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-1$1;->()V -HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-1$1;->()V -HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-2$1;->()V -HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-2$1;->()V -HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt;->()V -HSPLandroidx/compose/runtime/ComposablesKt;->rememberCompositionContext(Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/CompositionContext; -HSPLandroidx/compose/runtime/Composer$Companion$Empty$1;->()V -HSPLandroidx/compose/runtime/Composer$Companion;->()V -HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->(Landroidx/compose/runtime/ComposerImpl$CompositionContextImpl;)V -HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->onAbandoned()V -HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->onForgotten()V -HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->onRemembered()V -HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->(Landroidx/compose/runtime/ComposerImpl;IZ)V -HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->composeInitial$runtime_release(Landroidx/compose/runtime/ControlledComposition;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V -HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->dispose()V -HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->doneComposing$runtime_release()V -HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCollectingParameterInformation$runtime_release()Z -HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCompositionLocalScope$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap; -HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCompoundHashKey$runtime_release()I -HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getEffectCoroutineContext$runtime_release()Lkotlin/coroutines/CoroutineContext; -HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->invalidate$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V -HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->registerComposer$runtime_release(Landroidx/compose/runtime/ComposerImpl;)V -HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->startComposing$runtime_release()V -HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->unregisterComposer$runtime_release(Landroidx/compose/runtime/Composer;)V -HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->unregisterComposition$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V -HSPLandroidx/compose/runtime/ComposerImpl$apply$operation$1$$ExternalSyntheticOutline0;->m(Landroidx/compose/runtime/Applier;Ljava/lang/String;Landroidx/compose/runtime/SlotWriter;Ljava/lang/String;Landroidx/compose/runtime/RememberManager;Ljava/lang/String;)V -HSPLandroidx/compose/runtime/ComposerImpl$apply$operation$1;->(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V -HSPLandroidx/compose/runtime/ComposerImpl$apply$operation$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/ComposerImpl$createNode$2;->(Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Anchor;I)V -HSPLandroidx/compose/runtime/ComposerImpl$createNode$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/ComposerImpl$createNode$3;->(ILandroidx/compose/runtime/Anchor;)V -HSPLandroidx/compose/runtime/ComposerImpl$createNode$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/ComposerImpl$doCompose$2$3;->(Landroidx/compose/runtime/ComposerImpl;)V -HSPLandroidx/compose/runtime/ComposerImpl$doCompose$2$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/ComposerImpl$doCompose$2$4;->(Landroidx/compose/runtime/ComposerImpl;)V -HSPLandroidx/compose/runtime/ComposerImpl$doCompose$2$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/ComposerImpl$doCompose$2$5;->(Landroidx/compose/runtime/internal/ComposableLambdaImpl;Landroidx/compose/runtime/ComposerImpl;Ljava/lang/Object;)V -HSPLandroidx/compose/runtime/ComposerImpl$doCompose$2$5;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/runtime/ComposerImpl$doCompose$lambda-37$$inlined$sortBy$1;->()V -HSPLandroidx/compose/runtime/ComposerImpl$doCompose$lambda-37$$inlined$sortBy$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I -HSPLandroidx/compose/runtime/ComposerImpl$endRestartGroup$1$1;->(Landroidx/compose/runtime/RecomposeScopeImpl$end$1$2;Landroidx/compose/runtime/ComposerImpl;)V -HSPLandroidx/compose/runtime/ComposerImpl$endRestartGroup$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/ComposerImpl$realizeDowns$1;->([Ljava/lang/Object;)V -HSPLandroidx/compose/runtime/ComposerImpl$realizeDowns$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/ComposerImpl$realizeMovement$1;->(II)V -HSPLandroidx/compose/runtime/ComposerImpl$realizeMovement$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/ComposerImpl$realizeOperationLocation$2;->(I)V -HSPLandroidx/compose/runtime/ComposerImpl$realizeOperationLocation$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/ComposerImpl$realizeUps$1;->(I)V -HSPLandroidx/compose/runtime/ComposerImpl$realizeUps$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/ComposerImpl$recordInsert$1;->(Landroidx/compose/runtime/SlotTable;Landroidx/compose/runtime/Anchor;)V -HSPLandroidx/compose/runtime/ComposerImpl$recordInsert$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/ComposerImpl$recordInsert$2;->(Landroidx/compose/runtime/SlotTable;Landroidx/compose/runtime/Anchor;Ljava/util/ArrayList;)V -HSPLandroidx/compose/runtime/ComposerImpl$recordInsert$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/ComposerImpl$recordSideEffect$1;->(Lkotlin/jvm/functions/Function0;)V -HSPLandroidx/compose/runtime/ComposerImpl$recordSideEffect$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/ComposerImpl$recordSlotEditing$1;->(Landroidx/compose/runtime/Anchor;)V -HSPLandroidx/compose/runtime/ComposerImpl$recordSlotEditing$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/ComposerImpl$start$2;->(I)V -HSPLandroidx/compose/runtime/ComposerImpl$start$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/ComposerImpl$startProviders$currentProviders$1;->([Landroidx/compose/runtime/ProvidedValue;Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;)V -HSPLandroidx/compose/runtime/ComposerImpl$startProviders$currentProviders$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/ComposerImpl$startReaderGroup$1;->(Ljava/lang/Object;)V -HSPLandroidx/compose/runtime/ComposerImpl$startReaderGroup$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/ComposerImpl$updateValue$1;->(Ljava/lang/Object;)V -HSPLandroidx/compose/runtime/ComposerImpl$updateValue$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/ComposerImpl$updateValue$2;->(ILjava/lang/Object;)V -HSPLandroidx/compose/runtime/ComposerImpl$updateValue$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/ComposerImpl;->(Landroidx/compose/runtime/AbstractApplier;Landroidx/compose/runtime/CompositionContext;Landroidx/compose/runtime/SlotTable;Ljava/util/HashSet;Ljava/util/ArrayList;Ljava/util/ArrayList;Landroidx/compose/runtime/ControlledComposition;)V -HSPLandroidx/compose/runtime/ComposerImpl;->apply(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V -HSPLandroidx/compose/runtime/ComposerImpl;->buildContext()Landroidx/compose/runtime/ComposerImpl$CompositionContextImpl; -HSPLandroidx/compose/runtime/ComposerImpl;->changed(F)Z -HSPLandroidx/compose/runtime/ComposerImpl;->changed(I)Z -HSPLandroidx/compose/runtime/ComposerImpl;->changed(J)Z -HSPLandroidx/compose/runtime/ComposerImpl;->changed(Ljava/lang/Object;)Z -HSPLandroidx/compose/runtime/ComposerImpl;->changed(Z)Z -HSPLandroidx/compose/runtime/ComposerImpl;->cleanUpCompose()V -HSPLandroidx/compose/runtime/ComposerImpl;->composeContent$runtime_release(Landroidx/compose/runtime/collection/IdentityArrayMap;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V -HSPLandroidx/compose/runtime/ComposerImpl;->compoundKeyOf(III)I -HSPLandroidx/compose/runtime/ComposerImpl;->consume(Landroidx/compose/runtime/ProvidableCompositionLocal;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/ComposerImpl;->createNode(Lkotlin/jvm/functions/Function0;)V -HSPLandroidx/compose/runtime/ComposerImpl;->currentCompositionLocalScope(Ljava/lang/Integer;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap; -HSPLandroidx/compose/runtime/ComposerImpl;->disableReusing()V -HSPLandroidx/compose/runtime/ComposerImpl;->dispose$runtime_release()V -HSPLandroidx/compose/runtime/ComposerImpl;->doCompose(Landroidx/compose/runtime/collection/IdentityArrayMap;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V -HSPLandroidx/compose/runtime/ComposerImpl;->doRecordDownsFor(II)V -HSPLandroidx/compose/runtime/ComposerImpl;->enableReusing()V -HSPLandroidx/compose/runtime/ComposerImpl;->endDefaults()V -HSPLandroidx/compose/runtime/ComposerImpl;->endMovableGroup()V -HSPLandroidx/compose/runtime/ComposerImpl;->endNode()V -HSPLandroidx/compose/runtime/ComposerImpl;->endProviders()V -HSPLandroidx/compose/runtime/ComposerImpl;->endRestartGroup()Landroidx/compose/runtime/RecomposeScopeImpl; -HSPLandroidx/compose/runtime/ComposerImpl;->endReusableGroup()V -HSPLandroidx/compose/runtime/ComposerImpl;->endRoot()V -HSPLandroidx/compose/runtime/ComposerImpl;->getApplier()Landroidx/compose/runtime/Applier; -HSPLandroidx/compose/runtime/ComposerImpl;->getApplyCoroutineContext()Lkotlin/coroutines/CoroutineContext; -HSPLandroidx/compose/runtime/ComposerImpl;->getCompoundKeyHash()I -HSPLandroidx/compose/runtime/ComposerImpl;->getCurrentRecomposeScope$runtime_release()Landroidx/compose/runtime/RecomposeScopeImpl; -HSPLandroidx/compose/runtime/ComposerImpl;->getDefaultsInvalid()Z -HSPLandroidx/compose/runtime/ComposerImpl;->getInserting()Z -HSPLandroidx/compose/runtime/ComposerImpl;->getRecomposeScope()Landroidx/compose/runtime/RecomposeScopeImpl; -HSPLandroidx/compose/runtime/ComposerImpl;->getSkipping()Z -HSPLandroidx/compose/runtime/ComposerImpl;->nextSlot()Ljava/lang/Object; -HSPLandroidx/compose/runtime/ComposerImpl;->realizeDowns$1()V -HSPLandroidx/compose/runtime/ComposerImpl;->realizeUps()V -HSPLandroidx/compose/runtime/ComposerImpl;->recompose$runtime_release(Landroidx/compose/runtime/collection/IdentityArrayMap;)Z -HSPLandroidx/compose/runtime/ComposerImpl;->recomposeToGroupEnd()V -HSPLandroidx/compose/runtime/ComposerImpl;->record(Lkotlin/jvm/functions/Function3;)V -HSPLandroidx/compose/runtime/ComposerImpl;->recordDelete()V -HSPLandroidx/compose/runtime/ComposerImpl;->recordRemoveNode(II)V -HSPLandroidx/compose/runtime/ComposerImpl;->recordSideEffect(Lkotlin/jvm/functions/Function0;)V -HSPLandroidx/compose/runtime/ComposerImpl;->recordSlotEditing()V -HSPLandroidx/compose/runtime/ComposerImpl;->recordSlotTableOperation(ZLkotlin/jvm/functions/Function3;)V -HSPLandroidx/compose/runtime/ComposerImpl;->recordUp()V -HSPLandroidx/compose/runtime/ComposerImpl;->recordUpsAndDowns(III)V -HSPLandroidx/compose/runtime/ComposerImpl;->recordUsed(Landroidx/compose/runtime/RecomposeScope;)V -HSPLandroidx/compose/runtime/ComposerImpl;->rememberedValue()Ljava/lang/Object; -HSPLandroidx/compose/runtime/ComposerImpl;->reportAllMovableContent()V -HSPLandroidx/compose/runtime/ComposerImpl;->reportFreeMovableContent$reportGroup(Landroidx/compose/runtime/ComposerImpl;IZI)I -HSPLandroidx/compose/runtime/ComposerImpl;->skipReaderToGroupEnd()V -HSPLandroidx/compose/runtime/ComposerImpl;->skipToGroupEnd()V -HSPLandroidx/compose/runtime/ComposerImpl;->startDefaults()V -HSPLandroidx/compose/runtime/ComposerImpl;->startGroup(ILandroidx/compose/runtime/OpaqueKey;)V -HSPLandroidx/compose/runtime/ComposerImpl;->startMovableGroup(ILjava/lang/Object;)V -HSPLandroidx/compose/runtime/ComposerImpl;->startNode()V -HSPLandroidx/compose/runtime/ComposerImpl;->startProviders([Landroidx/compose/runtime/ProvidedValue;)V -HSPLandroidx/compose/runtime/ComposerImpl;->startRestartGroup(I)Landroidx/compose/runtime/ComposerImpl; -HSPLandroidx/compose/runtime/ComposerImpl;->startReusableGroup(Ljava/lang/Object;)V -HSPLandroidx/compose/runtime/ComposerImpl;->startReusableNode()V -HSPLandroidx/compose/runtime/ComposerImpl;->startRoot()V -HSPLandroidx/compose/runtime/ComposerImpl;->tryImminentInvalidation$runtime_release(Landroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)Z -HSPLandroidx/compose/runtime/ComposerImpl;->updateCompoundKeyWhenWeExitGroupKeyHash(I)V -HSPLandroidx/compose/runtime/ComposerImpl;->updateNodeCount(II)V -HSPLandroidx/compose/runtime/ComposerImpl;->updateNodeCountOverrides(II)V -HSPLandroidx/compose/runtime/ComposerImpl;->updateProviderMapGroup(Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap; -HSPLandroidx/compose/runtime/ComposerImpl;->updateRememberedValue(Ljava/lang/Object;)V -HSPLandroidx/compose/runtime/ComposerImpl;->useNode()V -HSPLandroidx/compose/runtime/ComposerKt$endGroupInstance$1;->()V -HSPLandroidx/compose/runtime/ComposerKt$endGroupInstance$1;->()V -HSPLandroidx/compose/runtime/ComposerKt$endGroupInstance$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/ComposerKt$removeCurrentGroupInstance$1;->()V -HSPLandroidx/compose/runtime/ComposerKt$removeCurrentGroupInstance$1;->()V -HSPLandroidx/compose/runtime/ComposerKt$removeCurrentGroupInstance$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/ComposerKt$startRootGroup$1;->()V -HSPLandroidx/compose/runtime/ComposerKt$startRootGroup$1;->()V -HSPLandroidx/compose/runtime/ComposerKt$startRootGroup$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/ComposerKt;->()V -HSPLandroidx/compose/runtime/ComposerKt;->access$removeRange(IILjava/util/ArrayList;)V -HSPLandroidx/compose/runtime/ComposerKt;->findLocation(ILjava/util/List;)I -HSPLandroidx/compose/runtime/ComposerKt;->removeCurrentGroup(Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V -HSPLandroidx/compose/runtime/ComposerKt;->runtimeCheck(Z)V -HSPLandroidx/compose/runtime/CompositionContext;->()V -HSPLandroidx/compose/runtime/CompositionContext;->doneComposing$runtime_release()V -HSPLandroidx/compose/runtime/CompositionContext;->getCompositionLocalScope$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap; -HSPLandroidx/compose/runtime/CompositionContext;->registerComposer$runtime_release(Landroidx/compose/runtime/ComposerImpl;)V -HSPLandroidx/compose/runtime/CompositionContext;->startComposing$runtime_release()V -HSPLandroidx/compose/runtime/CompositionContextKt;->()V -HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->(Ljava/util/HashSet;)V -HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchAbandons()V -HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchRememberObservers()V -HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchSideEffects()V -HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->forgetting(Landroidx/compose/runtime/RememberObserver;)V -HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->remembering(Landroidx/compose/runtime/RememberObserver;)V -HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->sideEffect(Lkotlin/jvm/functions/Function0;)V -HSPLandroidx/compose/runtime/CompositionImpl;->(Landroidx/compose/runtime/CompositionContext;Landroidx/compose/runtime/AbstractApplier;)V -HSPLandroidx/compose/runtime/CompositionImpl;->applyChanges()V -HSPLandroidx/compose/runtime/CompositionImpl;->applyLateChanges()V -HSPLandroidx/compose/runtime/CompositionImpl;->changesApplied()V -HSPLandroidx/compose/runtime/CompositionImpl;->cleanUpDerivedStateObservations()V -HSPLandroidx/compose/runtime/CompositionImpl;->composeContent(Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V -HSPLandroidx/compose/runtime/CompositionImpl;->dispose()V -HSPLandroidx/compose/runtime/CompositionImpl;->drainPendingModificationsForCompositionLocked()V -HSPLandroidx/compose/runtime/CompositionImpl;->drainPendingModificationsLocked()V -HSPLandroidx/compose/runtime/CompositionImpl;->getHasInvalidations()Z -HSPLandroidx/compose/runtime/CompositionImpl;->invalidate$enumunboxing$(Landroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)I -HSPLandroidx/compose/runtime/CompositionImpl;->invalidateChecked$enumunboxing$(Landroidx/compose/runtime/RecomposeScopeImpl;Landroidx/compose/runtime/Anchor;Ljava/lang/Object;)I -HSPLandroidx/compose/runtime/CompositionImpl;->invalidateScopeOfLocked(Ljava/lang/Object;)V -HSPLandroidx/compose/runtime/CompositionImpl;->isComposing()Z -HSPLandroidx/compose/runtime/CompositionImpl;->isDisposed()Z -HSPLandroidx/compose/runtime/CompositionImpl;->observesAnyOf(Landroidx/compose/runtime/collection/IdentityArraySet;)Z -HSPLandroidx/compose/runtime/CompositionImpl;->prepareCompose(Landroidx/compose/runtime/Recomposer$performRecompose$1$1;)V -HSPLandroidx/compose/runtime/CompositionImpl;->recompose()Z -HSPLandroidx/compose/runtime/CompositionImpl;->recordModificationsOf(Ljava/util/Set;)V -HSPLandroidx/compose/runtime/CompositionImpl;->recordReadOf(Ljava/lang/Object;)V -HSPLandroidx/compose/runtime/CompositionImpl;->recordWriteOf(Ljava/lang/Object;)V -HSPLandroidx/compose/runtime/CompositionImpl;->setContent(Lkotlin/jvm/functions/Function2;)V -HSPLandroidx/compose/runtime/CompositionKt;->()V -HSPLandroidx/compose/runtime/CompositionKt;->Composition(Landroidx/compose/runtime/AbstractApplier;Landroidx/compose/runtime/CompositionContext;)Landroidx/compose/runtime/CompositionImpl; -HSPLandroidx/compose/runtime/CompositionLocal;->(Lkotlin/jvm/functions/Function0;)V -HSPLandroidx/compose/runtime/CompositionLocalKt;->CompositionLocalProvider([Landroidx/compose/runtime/ProvidedValue;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V -HSPLandroidx/compose/runtime/CompositionLocalKt;->compositionLocalOf$default(Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/DynamicProvidableCompositionLocal; -HSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->(Lkotlinx/coroutines/internal/ContextScope;)V -HSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->onAbandoned()V -HSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->onForgotten()V -HSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->onRemembered()V -HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->()V -HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->()V -HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V -HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord; -HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->readableHash(Landroidx/compose/runtime/DerivedState;Landroidx/compose/runtime/snapshots/Snapshot;)I -HSPLandroidx/compose/runtime/DerivedSnapshotState$currentRecord$result$1$result$1;->(Landroidx/compose/runtime/DerivedSnapshotState;Landroidx/compose/runtime/collection/IdentityArrayMap;I)V -HSPLandroidx/compose/runtime/DerivedSnapshotState$currentRecord$result$1$result$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/DerivedSnapshotState;->(Lkotlin/jvm/functions/Function0;)V -HSPLandroidx/compose/runtime/DerivedSnapshotState;->currentRecord(Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord;Landroidx/compose/runtime/snapshots/Snapshot;ZLkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord; -HSPLandroidx/compose/runtime/DerivedSnapshotState;->getCurrentValue()Ljava/lang/Object; -HSPLandroidx/compose/runtime/DerivedSnapshotState;->getDependencies()[Ljava/lang/Object; -HSPLandroidx/compose/runtime/DerivedSnapshotState;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord; -HSPLandroidx/compose/runtime/DerivedSnapshotState;->getPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy; -HSPLandroidx/compose/runtime/DerivedSnapshotState;->getValue()Ljava/lang/Object; -HSPLandroidx/compose/runtime/DerivedSnapshotState;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V -HSPLandroidx/compose/runtime/DisposableEffectImpl;->(Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/runtime/DisposableEffectImpl;->onAbandoned()V -HSPLandroidx/compose/runtime/DisposableEffectImpl;->onForgotten()V -HSPLandroidx/compose/runtime/DisposableEffectImpl;->onRemembered()V -HSPLandroidx/compose/runtime/DisposableEffectScope;->()V -HSPLandroidx/compose/runtime/DynamicProvidableCompositionLocal;->(Landroidx/compose/runtime/SnapshotMutationPolicy;Lkotlin/jvm/functions/Function0;)V -HSPLandroidx/compose/runtime/DynamicProvidableCompositionLocal;->provided$runtime_release(Ljava/lang/Object;Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/State; -HSPLandroidx/compose/runtime/EffectsKt;->()V -HSPLandroidx/compose/runtime/EffectsKt;->DisposableEffect(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;)V -HSPLandroidx/compose/runtime/EffectsKt;->DisposableEffect(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V -HSPLandroidx/compose/runtime/EffectsKt;->LaunchedEffect(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V -HSPLandroidx/compose/runtime/EffectsKt;->LaunchedEffect(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V -HSPLandroidx/compose/runtime/EffectsKt;->LaunchedEffect([Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;)V -HSPLandroidx/compose/runtime/EffectsKt;->SideEffect(Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;)V -HSPLandroidx/compose/runtime/EffectsKt;->createCompositionCoroutineScope(Landroidx/compose/runtime/Composer;)Lkotlinx/coroutines/internal/ContextScope; -HSPLandroidx/compose/runtime/GroupInfo;->(III)V -HSPLandroidx/compose/runtime/IntStack;->()V -HSPLandroidx/compose/runtime/IntStack;->pop()I -HSPLandroidx/compose/runtime/IntStack;->push(I)V -HSPLandroidx/compose/runtime/Invalidation;->(Landroidx/compose/runtime/RecomposeScopeImpl;ILandroidx/compose/runtime/collection/IdentityArraySet;)V -HSPLandroidx/compose/runtime/KeyInfo;->(IIILjava/lang/Object;)V -HSPLandroidx/compose/runtime/Latch;->()V -HSPLandroidx/compose/runtime/LaunchedEffectImpl;->(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;)V -HSPLandroidx/compose/runtime/LaunchedEffectImpl;->onAbandoned()V -HSPLandroidx/compose/runtime/LaunchedEffectImpl;->onForgotten()V -HSPLandroidx/compose/runtime/LaunchedEffectImpl;->onRemembered()V -HSPLandroidx/compose/runtime/LazyValueHolder;->(Lkotlin/jvm/functions/Function0;)V -HSPLandroidx/compose/runtime/LazyValueHolder;->getValue()Ljava/lang/Object; -HSPLandroidx/compose/runtime/MonotonicFrameClock$Key;->()V -HSPLandroidx/compose/runtime/MonotonicFrameClock$Key;->()V -HSPLandroidx/compose/runtime/MonotonicFrameClock;->getKey()Lkotlin/coroutines/CoroutineContext$Key; -HSPLandroidx/compose/runtime/MonotonicFrameClockKt;->getMonotonicFrameClock(Lkotlin/coroutines/CoroutineContext;)Landroidx/compose/runtime/MonotonicFrameClock; -HSPLandroidx/compose/runtime/MonotonicFrameClockKt;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/NeverEqualPolicy;->()V -HSPLandroidx/compose/runtime/NeverEqualPolicy;->()V -HSPLandroidx/compose/runtime/NeverEqualPolicy;->equivalent(Ljava/lang/Object;Ljava/lang/Object;)Z -HSPLandroidx/compose/runtime/OpaqueKey;->(Ljava/lang/String;)V -HSPLandroidx/compose/runtime/OpaqueKey;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/runtime/OpaqueKey;->hashCode()I -HSPLandroidx/compose/runtime/ParcelableSnapshotMutableState$Companion$CREATOR$1;->()V -HSPLandroidx/compose/runtime/ParcelableSnapshotMutableState;->()V -HSPLandroidx/compose/runtime/ParcelableSnapshotMutableState;->(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)V -HSPLandroidx/compose/runtime/PausableMonotonicFrameClock$withFrameNanos$1;->(Landroidx/compose/runtime/PausableMonotonicFrameClock;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/runtime/PausableMonotonicFrameClock$withFrameNanos$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->(Landroidx/compose/runtime/MonotonicFrameClock;)V -HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; -HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; -HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/Pending$keyMap$2;->(Landroidx/compose/runtime/Pending;)V -HSPLandroidx/compose/runtime/Pending$keyMap$2;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/runtime/Pending;->(ILjava/util/ArrayList;)V -HSPLandroidx/compose/runtime/Pending;->nodePositionOf(Landroidx/compose/runtime/KeyInfo;)I -HSPLandroidx/compose/runtime/Pending;->updateNodeCount(II)Z -HSPLandroidx/compose/runtime/PrioritySet;->(I)V -HSPLandroidx/compose/runtime/PrioritySet;->add(I)V -HSPLandroidx/compose/runtime/PrioritySet;->takeMax()I -HSPLandroidx/compose/runtime/ProduceStateScopeImpl;->(Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/CoroutineContext;)V -HSPLandroidx/compose/runtime/ProduceStateScopeImpl;->setValue(Ljava/lang/Object;)V -HSPLandroidx/compose/runtime/ProvidableCompositionLocal;->(Lkotlin/jvm/functions/Function0;)V -HSPLandroidx/compose/runtime/ProvidableCompositionLocal;->provides(Ljava/lang/Object;)Landroidx/compose/runtime/ProvidedValue; -HSPLandroidx/compose/runtime/ProvidedValue;->(Landroidx/compose/runtime/CompositionLocal;Ljava/lang/Object;Z)V -HSPLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;->(Landroidx/compose/runtime/RecomposeScopeImpl;ILandroidx/compose/runtime/collection/IdentityArrayIntMap;)V -HSPLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/RecomposeScopeImpl;->(Landroidx/compose/runtime/CompositionImpl;)V -HSPLandroidx/compose/runtime/RecomposeScopeImpl;->invalidate()V -HSPLandroidx/compose/runtime/Recomposer$Companion;->()V -HSPLandroidx/compose/runtime/Recomposer$RecomposerInfoImpl;->()V -HSPLandroidx/compose/runtime/Recomposer$State;->()V -HSPLandroidx/compose/runtime/Recomposer$State;->(ILjava/lang/String;)V -HSPLandroidx/compose/runtime/Recomposer$broadcastFrameClock$1;->(Landroidx/compose/runtime/Recomposer;)V -HSPLandroidx/compose/runtime/Recomposer$broadcastFrameClock$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/runtime/Recomposer$effectJob$1$1;->(Landroidx/compose/runtime/Recomposer;)V -HSPLandroidx/compose/runtime/Recomposer$join$2;->(Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/runtime/Recomposer$join$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/runtime/Recomposer$join$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/Recomposer$join$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/Recomposer$performRecompose$1$1;->(Landroidx/compose/runtime/ControlledComposition;Landroidx/compose/runtime/collection/IdentityArraySet;)V -HSPLandroidx/compose/runtime/Recomposer$performRecompose$1$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/runtime/Recomposer$readObserverOf$1;->(Landroidx/compose/runtime/ControlledComposition;)V -HSPLandroidx/compose/runtime/Recomposer$readObserverOf$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$2;->(Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/MonotonicFrameClock;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;->(Landroidx/compose/runtime/Recomposer;)V -HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->(Landroidx/compose/runtime/Recomposer;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/MonotonicFrameClock;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$2;->(Landroidx/compose/runtime/Recomposer;Ljava/util/List;Ljava/util/List;Ljava/util/Set;Ljava/util/List;Ljava/util/Set;)V -HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->(Landroidx/compose/runtime/Recomposer;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->access$invokeSuspend$fillToInsert(Ljava/util/List;Landroidx/compose/runtime/Recomposer;)V -HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/Recomposer$writeObserverOf$1;->(Landroidx/compose/runtime/ControlledComposition;Landroidx/compose/runtime/collection/IdentityArraySet;)V -HSPLandroidx/compose/runtime/Recomposer$writeObserverOf$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/Recomposer;->()V -HSPLandroidx/compose/runtime/Recomposer;->(Lkotlin/coroutines/CoroutineContext;)V -HSPLandroidx/compose/runtime/Recomposer;->access$performRecompose(Landroidx/compose/runtime/Recomposer;Landroidx/compose/runtime/ControlledComposition;Landroidx/compose/runtime/collection/IdentityArraySet;)Landroidx/compose/runtime/ControlledComposition; -HSPLandroidx/compose/runtime/Recomposer;->access$recordComposerModificationsLocked(Landroidx/compose/runtime/Recomposer;)V -HSPLandroidx/compose/runtime/Recomposer;->applyAndCheck(Landroidx/compose/runtime/snapshots/MutableSnapshot;)V -HSPLandroidx/compose/runtime/Recomposer;->composeInitial$runtime_release(Landroidx/compose/runtime/ControlledComposition;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V -HSPLandroidx/compose/runtime/Recomposer;->deriveStateLocked()Lkotlinx/coroutines/CancellableContinuation; -HSPLandroidx/compose/runtime/Recomposer;->getCollectingParameterInformation$runtime_release()Z -HSPLandroidx/compose/runtime/Recomposer;->getCompoundHashKey$runtime_release()I -HSPLandroidx/compose/runtime/Recomposer;->getEffectCoroutineContext$runtime_release()Lkotlin/coroutines/CoroutineContext; -HSPLandroidx/compose/runtime/Recomposer;->getHasSchedulingWork()Z -HSPLandroidx/compose/runtime/Recomposer;->invalidate$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V -HSPLandroidx/compose/runtime/Recomposer;->performInitialMovableContentInserts(Landroidx/compose/runtime/ControlledComposition;)V -HSPLandroidx/compose/runtime/Recomposer;->unregisterComposition$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V -HSPLandroidx/compose/runtime/ReferentialEqualityPolicy;->()V -HSPLandroidx/compose/runtime/ReferentialEqualityPolicy;->()V -HSPLandroidx/compose/runtime/SkippableUpdater;->(Landroidx/compose/runtime/Composer;)V -HSPLandroidx/compose/runtime/SlotReader;->(Landroidx/compose/runtime/SlotTable;)V -HSPLandroidx/compose/runtime/SlotReader;->anchor(I)Landroidx/compose/runtime/Anchor; -HSPLandroidx/compose/runtime/SlotReader;->aux([II)Ljava/lang/Object; -HSPLandroidx/compose/runtime/SlotReader;->close()V -HSPLandroidx/compose/runtime/SlotReader;->endGroup()V -HSPLandroidx/compose/runtime/SlotReader;->getGroupAux()Ljava/lang/Object; -HSPLandroidx/compose/runtime/SlotReader;->getGroupKey()I -HSPLandroidx/compose/runtime/SlotReader;->groupGet(II)Ljava/lang/Object; -HSPLandroidx/compose/runtime/SlotReader;->groupSize(I)I -HSPLandroidx/compose/runtime/SlotReader;->isNode(I)Z -HSPLandroidx/compose/runtime/SlotReader;->node(I)Ljava/lang/Object; -HSPLandroidx/compose/runtime/SlotReader;->nodeCount(I)I -HSPLandroidx/compose/runtime/SlotReader;->objectKey([II)Ljava/lang/Object; -HSPLandroidx/compose/runtime/SlotReader;->parent(I)I -HSPLandroidx/compose/runtime/SlotReader;->reposition(I)V -HSPLandroidx/compose/runtime/SlotReader;->skipGroup()I -HSPLandroidx/compose/runtime/SlotReader;->skipToGroupEnd()V -HSPLandroidx/compose/runtime/SlotReader;->startGroup()V -HSPLandroidx/compose/runtime/SlotTable;->()V -HSPLandroidx/compose/runtime/SlotTable;->anchorIndex(Landroidx/compose/runtime/Anchor;)I -HSPLandroidx/compose/runtime/SlotTable;->openReader()Landroidx/compose/runtime/SlotReader; -HSPLandroidx/compose/runtime/SlotTable;->openWriter()Landroidx/compose/runtime/SlotWriter; -HSPLandroidx/compose/runtime/SlotTable;->ownsAnchor(Landroidx/compose/runtime/Anchor;)Z -HSPLandroidx/compose/runtime/SlotTableKt;->access$containsMark([II)Z -HSPLandroidx/compose/runtime/SlotTableKt;->access$groupSize([II)I -HSPLandroidx/compose/runtime/SlotTableKt;->access$hasAux([II)Z -HSPLandroidx/compose/runtime/SlotTableKt;->access$isNode([II)Z -HSPLandroidx/compose/runtime/SlotTableKt;->access$locationOf(Ljava/util/ArrayList;II)I -HSPLandroidx/compose/runtime/SlotTableKt;->access$nodeCount([II)I -HSPLandroidx/compose/runtime/SlotTableKt;->access$slotAnchor([II)I -HSPLandroidx/compose/runtime/SlotTableKt;->access$updateGroupSize(II[I)V -HSPLandroidx/compose/runtime/SlotTableKt;->access$updateNodeCount(II[I)V -HSPLandroidx/compose/runtime/SlotTableKt;->countOneBits(I)I -HSPLandroidx/compose/runtime/SlotTableKt;->search(Ljava/util/ArrayList;II)I -HSPLandroidx/compose/runtime/SlotWriter$Companion;->()V -HSPLandroidx/compose/runtime/SlotWriter$Companion;->access$moveGroup(Landroidx/compose/runtime/SlotWriter;ILandroidx/compose/runtime/SlotWriter;ZZ)Ljava/util/List; -HSPLandroidx/compose/runtime/SlotWriter$groupSlots$1;->(IILandroidx/compose/runtime/SlotWriter;)V -HSPLandroidx/compose/runtime/SlotWriter$groupSlots$1;->hasNext()Z -HSPLandroidx/compose/runtime/SlotWriter$groupSlots$1;->next()Ljava/lang/Object; -HSPLandroidx/compose/runtime/SlotWriter;->()V -HSPLandroidx/compose/runtime/SlotWriter;->(Landroidx/compose/runtime/SlotTable;)V -HSPLandroidx/compose/runtime/SlotWriter;->advanceBy(I)V -HSPLandroidx/compose/runtime/SlotWriter;->anchor(I)Landroidx/compose/runtime/Anchor; -HSPLandroidx/compose/runtime/SlotWriter;->anchorIndex(Landroidx/compose/runtime/Anchor;)I -HSPLandroidx/compose/runtime/SlotWriter;->auxIndex([II)I -HSPLandroidx/compose/runtime/SlotWriter;->beginInsert()V -HSPLandroidx/compose/runtime/SlotWriter;->close()V -HSPLandroidx/compose/runtime/SlotWriter;->dataIndex([II)I -HSPLandroidx/compose/runtime/SlotWriter;->dataIndexToDataAddress(I)I -HSPLandroidx/compose/runtime/SlotWriter;->endGroup()V -HSPLandroidx/compose/runtime/SlotWriter;->endInsert()V -HSPLandroidx/compose/runtime/SlotWriter;->ensureStarted(I)V -HSPLandroidx/compose/runtime/SlotWriter;->fixParentAnchorsFor(III)V -HSPLandroidx/compose/runtime/SlotWriter;->getSize$runtime_release()I -HSPLandroidx/compose/runtime/SlotWriter;->groupIndexToAddress(I)I -HSPLandroidx/compose/runtime/SlotWriter;->groupSize(I)I -HSPLandroidx/compose/runtime/SlotWriter;->markGroup$default(Landroidx/compose/runtime/SlotWriter;)V -HSPLandroidx/compose/runtime/SlotWriter;->moveFrom(Landroidx/compose/runtime/SlotTable;I)V -HSPLandroidx/compose/runtime/SlotWriter;->node(I)Ljava/lang/Object; -HSPLandroidx/compose/runtime/SlotWriter;->parent(I)I -HSPLandroidx/compose/runtime/SlotWriter;->parent([II)I -HSPLandroidx/compose/runtime/SlotWriter;->recalculateMarks()V -HSPLandroidx/compose/runtime/SlotWriter;->removeGroup()Z -HSPLandroidx/compose/runtime/SlotWriter;->removeGroups(II)Z -HSPLandroidx/compose/runtime/SlotWriter;->removeSlots(III)V -HSPLandroidx/compose/runtime/SlotWriter;->skipGroup()I -HSPLandroidx/compose/runtime/SlotWriter;->skipToGroupEnd()V -HSPLandroidx/compose/runtime/SlotWriter;->slotIndex([II)I -HSPLandroidx/compose/runtime/SlotWriter;->startGroup()V -HSPLandroidx/compose/runtime/SlotWriter;->startGroup(ILjava/lang/Object;ZLjava/lang/Object;)V -HSPLandroidx/compose/runtime/SlotWriter;->update(Ljava/lang/Object;)V -HSPLandroidx/compose/runtime/SlotWriter;->updateAux(Ljava/lang/Object;)V -HSPLandroidx/compose/runtime/SlotWriter;->updateContainsMark(I)V -HSPLandroidx/compose/runtime/SlotWriter;->updateNodeOfGroup(ILjava/lang/Object;)V -HSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->(Ljava/lang/Object;)V -HSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord; -HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)V -HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord; -HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->getValue()Ljava/lang/Object; -HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V -HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->setValue(Ljava/lang/Object;)V -HSPLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;->()V -HSPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3;->(Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$5;->(Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$5;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$5;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1$1;->(Landroidx/compose/runtime/ProduceStateScope;)V -HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;->(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$readObserver$1;->(Ljava/util/LinkedHashSet;)V -HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$readObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$unregisterApplyObserver$1;->(Lkotlinx/coroutines/channels/AbstractChannel;)V -HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$unregisterApplyObserver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->(Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/SnapshotThreadLocal;->()V -HSPLandroidx/compose/runtime/Stack;->()V -HSPLandroidx/compose/runtime/Stack;->pop()Ljava/lang/Object; -HSPLandroidx/compose/runtime/Stack;->push(Ljava/lang/Object;)V -HSPLandroidx/compose/runtime/StaticProvidableCompositionLocal;->(Lkotlin/jvm/functions/Function0;)V -HSPLandroidx/compose/runtime/StaticProvidableCompositionLocal;->provided$runtime_release(Ljava/lang/Object;Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/State; -HSPLandroidx/compose/runtime/StaticValueHolder;->(Ljava/lang/Object;)V -HSPLandroidx/compose/runtime/StaticValueHolder;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/runtime/StaticValueHolder;->getValue()Ljava/lang/Object; -HSPLandroidx/compose/runtime/StructuralEqualityPolicy;->()V -HSPLandroidx/compose/runtime/StructuralEqualityPolicy;->()V -HSPLandroidx/compose/runtime/StructuralEqualityPolicy;->equivalent(Ljava/lang/Object;Ljava/lang/Object;)Z -HSPLandroidx/compose/runtime/Updater;->set-impl(Landroidx/compose/runtime/Composer;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V -HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->()V -HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->add(ILjava/lang/Object;)I -HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->()V -HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->find(Ljava/lang/Object;)I -HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->get(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->set(Ljava/lang/Object;Ljava/lang/Object;)V -HSPLandroidx/compose/runtime/collection/IdentityArraySet;->()V -HSPLandroidx/compose/runtime/collection/IdentityArraySet;->add(Ljava/lang/Object;)Z -HSPLandroidx/compose/runtime/collection/IdentityArraySet;->clear()V -HSPLandroidx/compose/runtime/collection/IdentityArraySet;->contains(Ljava/lang/Object;)Z -HSPLandroidx/compose/runtime/collection/IdentityArraySet;->find(Ljava/lang/Object;)I -HSPLandroidx/compose/runtime/collection/IdentityArraySet;->get(I)Ljava/lang/Object; -HSPLandroidx/compose/runtime/collection/IdentityArraySet;->isEmpty()Z -HSPLandroidx/compose/runtime/collection/IdentityArraySet;->remove(Ljava/lang/Object;)Z -HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->()V -HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->add(Ljava/lang/Object;Ljava/lang/Object;)V -HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->find(Ljava/lang/Object;)I -HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->remove(Ljava/lang/Object;Ljava/lang/Object;)Z -HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->removeScope(Ljava/lang/Object;)V -HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->scopeSetAt(I)Landroidx/compose/runtime/collection/IdentityArraySet; -HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->(Landroidx/compose/runtime/collection/MutableVector;)V -HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->get(I)Ljava/lang/Object; -HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->indexOf(Ljava/lang/Object;)I -HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->isEmpty()Z -HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->iterator()Ljava/util/Iterator; -HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->size()I -HSPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;->(ILjava/util/List;)V -HSPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;->hasNext()Z -HSPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;->next()Ljava/lang/Object; -HSPLandroidx/compose/runtime/collection/MutableVector;->([Ljava/lang/Object;)V -HSPLandroidx/compose/runtime/collection/MutableVector;->add(ILjava/lang/Object;)V -HSPLandroidx/compose/runtime/collection/MutableVector;->addAll(ILandroidx/compose/runtime/collection/MutableVector;)V -HSPLandroidx/compose/runtime/collection/MutableVector;->asMutableList()Ljava/util/List; -HSPLandroidx/compose/runtime/collection/MutableVector;->clear()V -HSPLandroidx/compose/runtime/collection/MutableVector;->contains(Ljava/lang/Object;)Z -HSPLandroidx/compose/runtime/collection/MutableVector;->ensureCapacity(I)V -HSPLandroidx/compose/runtime/collection/MutableVector;->isEmpty()Z -HSPLandroidx/compose/runtime/collection/MutableVector;->isNotEmpty()Z -HSPLandroidx/compose/runtime/collection/MutableVector;->remove(Ljava/lang/Object;)Z -HSPLandroidx/compose/runtime/collection/MutableVector;->removeAt(I)Ljava/lang/Object; -HSPLandroidx/compose/runtime/collection/MutableVector;->removeRange(II)V -HSPLandroidx/compose/runtime/collection/MutableVector;->sortWith(Ljava/util/Comparator;)V -HSPLandroidx/compose/runtime/collection/MutableVectorKt;->access$checkIndex(ILjava/util/List;)V -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/ExtensionsKt;->persistentHashMapOf()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap; -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractListIterator;->(II)V -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractListIterator;->hasNext()Z -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;->()V -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;->iterator()Ljava/util/Iterator; -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/BufferIterator;->(II[Ljava/lang/Object;)V -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/BufferIterator;->next()Ljava/lang/Object; -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->()V -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->([Ljava/lang/Object;)V -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->add(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList; -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->addAll(Ljava/util/Collection;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList; -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->get(I)Ljava/lang/Object; -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->getSize()I -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->listIterator(I)Ljava/util/ListIterator; -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->set(ILjava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList; -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/MapEntry;->(Ljava/lang/Object;Ljava/lang/Object;)V -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/MapEntry;->getKey()Ljava/lang/Object; -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/MapEntry;->getValue()Ljava/lang/Object; -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->()V -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->builder()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder; -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->containsKey(Ljava/lang/Object;)Z -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->put(Ljava/lang/Object;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap; -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;[Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;)V -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->ensureNextEntryIsReady()V -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->hasNext()Z -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->moveToNextNodeWithData(I)I -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->next()Ljava/lang/Object; -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;)V -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->build$1()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap; -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->putAll(Ljava/util/Map;)V -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->setSize(I)V -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntries;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;)V -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntries;->getSize()I -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntries;->iterator()Ljava/util/Iterator; -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntriesIterator;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;)V -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->()V -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->(II[Ljava/lang/Object;Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/MutabilityOwnership;)V -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->bufferMoveEntryToNode(IIILjava/lang/Object;Ljava/lang/Object;ILandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/MutabilityOwnership;)[Ljava/lang/Object; -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->containsKey(IILjava/lang/Object;)Z -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->elementsIdentityEquals(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;)Z -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->entryKeyIndex$runtime_release(I)I -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->get(IILjava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->hasEntryAt$runtime_release(I)Z -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->hasNodeAt(I)Z -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->makeNode(ILjava/lang/Object;Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;ILandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/MutabilityOwnership;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->mutablePut(ILjava/lang/Object;Ljava/lang/Object;ILandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->mutablePutAll(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;ILandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->nodeAtIndex$runtime_release(I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->nodeIndex$runtime_release(I)I -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->put(IILjava/lang/Object;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult; -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->valueAtKeyIndex(I)Ljava/lang/Object; -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->()V -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeEntriesIterator;->()V -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeEntriesIterator;->next()Ljava/lang/Object; -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKt;->access$insertEntryAtIndex([Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object; -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;->()V -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;->(Ljava/lang/Object;Ljava/lang/Object;)V -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->()V -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->(Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;)V -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->add(Landroidx/compose/runtime/Recomposer$RecomposerInfoImpl;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet; -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->getSize()I -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;->(I)V -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/EndOfChain;->()V -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/EndOfChain;->()V -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/ListImplementation;->checkElementIndex$runtime_release(II)V -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/ListImplementation;->checkPositionIndex$runtime_release(II)V -HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/MutabilityOwnership;->()V -HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$1;->(Landroidx/compose/runtime/internal/ComposableLambdaImpl;Ljava/lang/Object;I)V -HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$2;->(Landroidx/compose/runtime/internal/ComposableLambdaImpl;Ljava/lang/Object;Ljava/lang/Object;I)V -HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->(IZ)V -HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object; -HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object; -HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->trackRead(Landroidx/compose/runtime/Composer;)V -HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->update(Lkotlin/jvm/internal/Lambda;)V -HSPLandroidx/compose/runtime/internal/ComposableLambdaKt;->bitsForSlot(II)I -HSPLandroidx/compose/runtime/internal/ComposableLambdaKt;->composableLambda(Landroidx/compose/runtime/Composer;ILkotlin/jvm/internal/Lambda;)Landroidx/compose/runtime/internal/ComposableLambdaImpl; -HSPLandroidx/compose/runtime/internal/ComposableLambdaKt;->composableLambdaInstance(ILkotlin/jvm/internal/Lambda;Z)Landroidx/compose/runtime/internal/ComposableLambdaImpl; -HSPLandroidx/compose/runtime/internal/ComposableLambdaKt;->replacableWith(Landroidx/compose/runtime/RecomposeScope;Landroidx/compose/runtime/RecomposeScope;)Z -HSPLandroidx/compose/runtime/internal/ThreadMap;->(I[J[Ljava/lang/Object;)V -HSPLandroidx/compose/runtime/internal/ThreadMap;->find(J)I -HSPLandroidx/compose/runtime/internal/ThreadMap;->newWith(JLjava/lang/Object;)Landroidx/compose/runtime/internal/ThreadMap; -HSPLandroidx/compose/runtime/internal/ThreadMapKt;->()V -HSPLandroidx/compose/runtime/saveable/ListSaverKt$listSaver$1;->(Lkotlin/jvm/functions/Function2;)V -HSPLandroidx/compose/runtime/saveable/ListSaverKt$listSaver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/runtime/saveable/SaveableStateRegistry$Entry;)V -HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$invoke$$inlined$onDispose$1;->dispose()V -HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1$1$1;->(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V -HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1$1$1;->canBeSaved(Ljava/lang/Object;)Z -HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1;->(Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V -HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1;->(Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/lang/String;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;)V -HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/saveable/RememberSaveableKt;->rememberSaveable([Ljava/lang/Object;Landroidx/compose/runtime/saveable/SaverKt$Saver$1;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)Ljava/lang/Object; -HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$1;->()V -HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$1;->()V -HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$2;->()V -HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$2;->()V -HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder$registry$1;->(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)V -HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder$registry$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;->(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;)V -HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;)V -HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1;->(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;)V -HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->()V -HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->(I)V -HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->(Ljava/util/Map;)V -HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->SaveableStateProvider(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V -HSPLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;->()V -HSPLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;->()V -HSPLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/runtime/saveable/SaveableStateHolderKt;->rememberSaveableStateHolder(Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/saveable/SaveableStateHolderImpl; -HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;->(Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl;Ljava/lang/String;Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1;)V -HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;->unregister()V -HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->(Ljava/util/Map;Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->canBeSaved(Ljava/lang/Object;)Z -HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->performSave()Ljava/util/Map; -HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->registerProvider(Ljava/lang/String;Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1;)Landroidx/compose/runtime/saveable/SaveableStateRegistry$Entry; -HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryKt$LocalSaveableStateRegistry$1;->()V -HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryKt$LocalSaveableStateRegistry$1;->()V -HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryKt;->()V -HSPLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$1;->()V -HSPLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$1;->()V -HSPLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$2;->()V -HSPLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$2;->()V -HSPLandroidx/compose/runtime/saveable/SaverKt$Saver$1;->(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/runtime/saveable/SaverKt$Saver$1;->save(Landroidx/compose/runtime/saveable/SaverScope;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/saveable/SaverKt;->()V -HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedMutableSnapshot$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedMutableSnapshot$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedSnapshot$1;->(Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedSnapshot$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)V -HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->dispose()V -HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->notifyObjectsInitialized$runtime_release()V -HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->takeNestedMutableSnapshot(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/MutableSnapshot; -HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->takeNestedSnapshot(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/Snapshot; -HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->advance$runtime_release()V -HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->apply()Landroidx/compose/runtime/snapshots/SnapshotApplyResult; -HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->closeLocked$runtime_release()V -HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->dispose()V -HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getModified$runtime_release()Ljava/util/Set; -HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getReadObserver$runtime_release()Lkotlin/jvm/functions/Function1; -HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getReadOnly()Z -HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getWriteObserver$runtime_release()Lkotlin/jvm/functions/Function1; -HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->innerApplyLocked$runtime_release(ILjava/util/HashMap;Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/SnapshotApplyResult; -HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->nestedActivated$runtime_release(Landroidx/compose/runtime/snapshots/Snapshot;)V -HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->nestedDeactivated$runtime_release(Landroidx/compose/runtime/snapshots/Snapshot;)V -HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->notifyObjectsInitialized$runtime_release()V -HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordModified$runtime_release(Landroidx/compose/runtime/snapshots/StateObject;)V -HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPrevious$runtime_release(I)V -HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->releasePinnedSnapshotsForCloseLocked$runtime_release()V -HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->setModified(Ljava/util/HashSet;)V -HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->takeNestedMutableSnapshot(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/MutableSnapshot; -HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->takeNestedSnapshot(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/Snapshot; -HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->validateNotAppliedOrPinned$runtime_release()V -HSPLandroidx/compose/runtime/snapshots/NestedMutableSnapshot;->(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/snapshots/MutableSnapshot;)V -HSPLandroidx/compose/runtime/snapshots/NestedMutableSnapshot;->apply()Landroidx/compose/runtime/snapshots/SnapshotApplyResult; -HSPLandroidx/compose/runtime/snapshots/NestedMutableSnapshot;->dispose()V -HSPLandroidx/compose/runtime/snapshots/NestedReadonlySnapshot;->(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/snapshots/Snapshot;)V -HSPLandroidx/compose/runtime/snapshots/NestedReadonlySnapshot;->dispose()V -HSPLandroidx/compose/runtime/snapshots/NestedReadonlySnapshot;->getReadObserver$runtime_release()Lkotlin/jvm/functions/Function1; -HSPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->dispose()V -HSPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->getReadObserver$runtime_release()Lkotlin/jvm/functions/Function1; -HSPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->nestedDeactivated$runtime_release(Landroidx/compose/runtime/snapshots/Snapshot;)V -HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion$registerApplyObserver$2;->(Lkotlin/jvm/functions/Function2;)V -HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->observe(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/snapshots/Snapshot;->(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)V -HSPLandroidx/compose/runtime/snapshots/Snapshot;->closeAndReleasePinning$runtime_release()V -HSPLandroidx/compose/runtime/snapshots/Snapshot;->closeLocked$runtime_release()V -HSPLandroidx/compose/runtime/snapshots/Snapshot;->dispose()V -HSPLandroidx/compose/runtime/snapshots/Snapshot;->getId()I -HSPLandroidx/compose/runtime/snapshots/Snapshot;->getInvalid$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotIdSet; -HSPLandroidx/compose/runtime/snapshots/Snapshot;->makeCurrent()Landroidx/compose/runtime/snapshots/Snapshot; -HSPLandroidx/compose/runtime/snapshots/Snapshot;->releasePinnedSnapshotsForCloseLocked$runtime_release()V -HSPLandroidx/compose/runtime/snapshots/Snapshot;->restoreCurrent(Landroidx/compose/runtime/snapshots/Snapshot;)V -HSPLandroidx/compose/runtime/snapshots/Snapshot;->setId$runtime_release(I)V -HSPLandroidx/compose/runtime/snapshots/Snapshot;->setInvalid$runtime_release(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V -HSPLandroidx/compose/runtime/snapshots/SnapshotApplyResult$Success;->()V -HSPLandroidx/compose/runtime/snapshots/SnapshotApplyResult$Success;->()V -HSPLandroidx/compose/runtime/snapshots/SnapshotApplyResult;->()V -HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->()V -HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->add(I)I -HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->swap(II)V -HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;->(Landroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->()V -HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->(JJI[I)V -HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->andNot(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/SnapshotIdSet; -HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->clear(I)Landroidx/compose/runtime/snapshots/SnapshotIdSet; -HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->get(I)Z -HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->iterator()Ljava/util/Iterator; -HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->or(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/SnapshotIdSet; -HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->set(I)Landroidx/compose/runtime/snapshots/SnapshotIdSet; -HSPLandroidx/compose/runtime/snapshots/SnapshotKt$advanceGlobalSnapshot$2;->()V -HSPLandroidx/compose/runtime/snapshots/SnapshotKt$advanceGlobalSnapshot$2;->()V -HSPLandroidx/compose/runtime/snapshots/SnapshotKt$advanceGlobalSnapshot$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1;->()V -HSPLandroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1;->()V -HSPLandroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedWriteObserver$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedWriteObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/snapshots/SnapshotKt$takeNewSnapshot$1;->(Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/runtime/snapshots/SnapshotKt$takeNewSnapshot$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->()V -HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$advanceGlobalSnapshot()V -HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$mergedWriteObserver(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1; -HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$optimisticMerges(Landroidx/compose/runtime/snapshots/MutableSnapshot;Landroidx/compose/runtime/snapshots/MutableSnapshot;Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Ljava/util/HashMap; -HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$validateOpen(Landroidx/compose/runtime/snapshots/Snapshot;)V -HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->addRange(IILandroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/SnapshotIdSet; -HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->advanceGlobalSnapshot(Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->createTransparentSnapshotWithNoParentReadObserver(Landroidx/compose/runtime/snapshots/Snapshot;Lkotlin/jvm/functions/Function1;Z)Landroidx/compose/runtime/snapshots/Snapshot; -HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->current(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord; -HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->mergedReadObserver(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Z)Lkotlin/jvm/functions/Function1; -HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->newOverwritableRecord(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;)Landroidx/compose/runtime/snapshots/StateRecord; -HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->newWritableRecord(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord; -HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->notifyWrite(Landroidx/compose/runtime/snapshots/Snapshot;Landroidx/compose/runtime/snapshots/StateObject;)V -HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->overwritableRecord(Landroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;Landroidx/compose/runtime/snapshots/StateObject;Landroidx/compose/runtime/snapshots/Snapshot;Landroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;)Landroidx/compose/runtime/snapshots/StateRecord; -HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->releasePinningLocked(I)V -HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->takeNewGlobalSnapshot(Landroidx/compose/runtime/snapshots/Snapshot;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->writableRecord(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord; -HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;)V -HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V -HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord; -HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->setList$runtime_release(Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;)V -HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->()V -HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->add(Ljava/lang/Object;)Z -HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->addAll(Ljava/util/Collection;)Z -HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->get(I)Ljava/lang/Object; -HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord; -HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->getModification$runtime_release()I -HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->getReadable$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord; -HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->isEmpty()Z -HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->listIterator()Ljava/util/ListIterator; -HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V -HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->set(ILjava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->size()I -HSPLandroidx/compose/runtime/snapshots/SnapshotStateListKt;->()V -HSPLandroidx/compose/runtime/snapshots/SnapshotStateListKt;->access$validateRange(II)V -HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateEnterObserver$1;->(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;)V -HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateEnterObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateExitObserver$1;->(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;)V -HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateExitObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->(Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->access$clearObsoleteStateReads(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;Ljava/lang/Object;)V -HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->recordRead(Ljava/lang/Object;)V -HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->removeScopeIf()V -HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1$2;->(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)V -HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1$2;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1;->(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)V -HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$observeReads$1$1;->(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;Lkotlin/jvm/functions/Function0;)V -HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$observeReads$1$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$readObserver$1;->(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)V -HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$readObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->(Landroidx/compose/ui/platform/AndroidComposeView$snapshotObserver$1;)V -HSPLandroidx/compose/runtime/snapshots/StateListIterator;->(Landroidx/compose/runtime/snapshots/SnapshotStateList;I)V -HSPLandroidx/compose/runtime/snapshots/StateListIterator;->hasNext()Z -HSPLandroidx/compose/runtime/snapshots/StateListIterator;->next()Ljava/lang/Object; -HSPLandroidx/compose/runtime/snapshots/StateListIterator;->validateModification()V -HSPLandroidx/compose/runtime/snapshots/StateRecord;->()V -HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->(Landroidx/compose/runtime/snapshots/MutableSnapshot;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ZZ)V -HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->apply()Landroidx/compose/runtime/snapshots/SnapshotApplyResult; -HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->dispose()V -HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getCurrentSnapshot()Landroidx/compose/runtime/snapshots/MutableSnapshot; -HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getReadOnly()Z -HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->notifyObjectsInitialized$runtime_release()V -HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->recordModified$runtime_release(Landroidx/compose/runtime/snapshots/StateObject;)V -HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->takeNestedMutableSnapshot(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/MutableSnapshot; -HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->takeNestedSnapshot(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/Snapshot; -HSPLandroidx/compose/runtime/snapshots/TransparentObserverSnapshot;->(Landroidx/compose/runtime/snapshots/Snapshot;Lkotlin/jvm/functions/Function1;Z)V -HSPLandroidx/compose/runtime/snapshots/TransparentObserverSnapshot;->dispose()V -HSPLandroidx/compose/runtime/snapshots/TransparentObserverSnapshot;->getCurrentSnapshot()Landroidx/compose/runtime/snapshots/Snapshot; -HSPLandroidx/compose/runtime/snapshots/TransparentObserverSnapshot;->getId()I -HSPLandroidx/compose/runtime/snapshots/TransparentObserverSnapshot;->getInvalid$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotIdSet; -HSPLandroidx/compose/runtime/snapshots/TransparentObserverSnapshot;->getReadObserver$runtime_release()Lkotlin/jvm/functions/Function1; -HSPLandroidx/compose/runtime/tooling/InspectionTablesKt$LocalInspectionTables$1;->()V -HSPLandroidx/compose/runtime/tooling/InspectionTablesKt$LocalInspectionTables$1;->()V -HSPLandroidx/compose/runtime/tooling/InspectionTablesKt$LocalInspectionTables$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/runtime/tooling/InspectionTablesKt;->()V -HSPLandroidx/compose/runtime/tracing/TracingInitializer$create$1;->()V -HSPLandroidx/compose/runtime/tracing/TracingInitializer$create$1;->isTraceInProgress()Z -HSPLandroidx/compose/runtime/tracing/TracingInitializer;->()V -HSPLandroidx/compose/runtime/tracing/TracingInitializer;->create(Landroid/content/Context;)Ljava/lang/Object; -HSPLandroidx/compose/runtime/tracing/TracingInitializer;->dependencies()Ljava/util/List; -HSPLandroidx/compose/ui/Alignment$Companion;->()V -HSPLandroidx/compose/ui/BiasAlignment$Horizontal;->(F)V -HSPLandroidx/compose/ui/BiasAlignment$Horizontal;->align(IILandroidx/compose/ui/unit/LayoutDirection;)I -HSPLandroidx/compose/ui/BiasAlignment$Horizontal;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/BiasAlignment$Vertical;->(F)V -HSPLandroidx/compose/ui/BiasAlignment$Vertical;->align(II)I -HSPLandroidx/compose/ui/BiasAlignment$Vertical;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/BiasAlignment;->(FF)V -HSPLandroidx/compose/ui/BiasAlignment;->align-KFBX0sM(JJLandroidx/compose/ui/unit/LayoutDirection;)J -HSPLandroidx/compose/ui/BiasAlignment;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/CombinedModifier;->(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;)V -HSPLandroidx/compose/ui/CombinedModifier;->all(Lkotlin/jvm/functions/Function1;)Z -HSPLandroidx/compose/ui/CombinedModifier;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/CombinedModifier;->foldIn(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; -HSPLandroidx/compose/ui/ComposedModifier;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;)V -HSPLandroidx/compose/ui/ComposedModifierKt$materialize$1;->()V -HSPLandroidx/compose/ui/ComposedModifierKt$materialize$1;->()V -HSPLandroidx/compose/ui/ComposedModifierKt$materialize$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/ComposedModifierKt$materialize$result$1;->(Landroidx/compose/runtime/Composer;)V -HSPLandroidx/compose/ui/ComposedModifierKt;->composed(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/ui/ComposedModifierKt;->materialize(Landroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/ui/Modifier$Companion;->()V -HSPLandroidx/compose/ui/Modifier$Companion;->()V -HSPLandroidx/compose/ui/Modifier$Companion;->all(Lkotlin/jvm/functions/Function1;)Z -HSPLandroidx/compose/ui/Modifier$Companion;->then(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/ui/Modifier$Element;->all(Lkotlin/jvm/functions/Function1;)Z -HSPLandroidx/compose/ui/Modifier$Element;->foldIn(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; -HSPLandroidx/compose/ui/Modifier$Node;->()V -HSPLandroidx/compose/ui/Modifier$Node;->detach$ui_release()V -HSPLandroidx/compose/ui/Modifier$Node;->getNode()Landroidx/compose/ui/Modifier$Node; -HSPLandroidx/compose/ui/Modifier$Node;->onAttach()V -HSPLandroidx/compose/ui/Modifier$Node;->onDetach()V -HSPLandroidx/compose/ui/Modifier;->then(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/ui/MotionDurationScale$Key;->()V -HSPLandroidx/compose/ui/MotionDurationScale$Key;->()V -HSPLandroidx/compose/ui/MotionDurationScale;->getKey()Lkotlin/coroutines/CoroutineContext$Key; -HSPLandroidx/compose/ui/ZIndexModifier$measure$1;->(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/ZIndexModifier;)V -HSPLandroidx/compose/ui/ZIndexModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/ZIndexModifier;->()V -HSPLandroidx/compose/ui/ZIndexModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; -HSPLandroidx/compose/ui/autofill/AndroidAutofill$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;)V -HSPLandroidx/compose/ui/autofill/AndroidAutofill;->(Landroid/view/View;Landroidx/compose/ui/autofill/AutofillTree;)V -HSPLandroidx/compose/ui/autofill/AutofillCallback;->()V -HSPLandroidx/compose/ui/autofill/AutofillCallback;->()V -HSPLandroidx/compose/ui/autofill/AutofillCallback;->register(Landroidx/compose/ui/autofill/AndroidAutofill;)V -HSPLandroidx/compose/ui/autofill/AutofillTree;->()V -HSPLandroidx/compose/ui/draw/AlphaKt;->alpha(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/ui/draw/CacheDrawScope$onDrawBehind$1;->(Lcom/google/samples/apps/nowinandroid/core/designsystem/component/BackgroundKt$NiaGradientBackground$1$1$1$1;)V -HSPLandroidx/compose/ui/draw/CacheDrawScope$onDrawBehind$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/draw/CacheDrawScope;->()V -HSPLandroidx/compose/ui/draw/CacheDrawScope;->getSize-NH-jbRc()J -HSPLandroidx/compose/ui/draw/ClipKt;->clip(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/ui/draw/ClipKt;->clipToBounds(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/ui/draw/DrawBackgroundModifier;->(Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/ui/draw/DrawBackgroundModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V -HSPLandroidx/compose/ui/draw/DrawBackgroundModifier;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/draw/DrawContentCacheModifier;->(Landroidx/compose/ui/draw/CacheDrawScope;Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/ui/draw/DrawContentCacheModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V -HSPLandroidx/compose/ui/draw/DrawContentCacheModifier;->onBuildCache(Landroidx/compose/ui/node/BackwardsCompatNode;)V -HSPLandroidx/compose/ui/draw/DrawModifierKt$drawWithCache$2;->(Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/ui/draw/DrawModifierKt$drawWithCache$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/draw/DrawModifierKt;->drawBehind(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/ui/draw/DrawResult;->(Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/ui/draw/EmptyBuildDrawCacheParams;->()V -HSPLandroidx/compose/ui/draw/EmptyBuildDrawCacheParams;->()V -HSPLandroidx/compose/ui/draw/PainterModifier$measure$1;->(Landroidx/compose/ui/layout/Placeable;)V -HSPLandroidx/compose/ui/draw/PainterModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/draw/PainterModifier;->(Landroidx/compose/ui/graphics/painter/Painter;ZLandroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;)V -HSPLandroidx/compose/ui/draw/PainterModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V -HSPLandroidx/compose/ui/draw/PainterModifier;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/draw/PainterModifier;->getUseIntrinsicSize()Z -HSPLandroidx/compose/ui/draw/PainterModifier;->hasSpecifiedAndFiniteHeight-uvyYCjk(J)Z -HSPLandroidx/compose/ui/draw/PainterModifier;->hasSpecifiedAndFiniteWidth-uvyYCjk(J)Z -HSPLandroidx/compose/ui/draw/PainterModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; -HSPLandroidx/compose/ui/draw/PainterModifier;->modifyConstraints-ZezNO4M(J)J -HSPLandroidx/compose/ui/draw/PainterModifierKt;->paint$default(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/painter/Painter;Landroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;I)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/ui/draw/ShadowKt$shadow$2$1;->(FLandroidx/compose/ui/graphics/Shape;ZJJ)V -HSPLandroidx/compose/ui/draw/ShadowKt$shadow$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/focus/FocusChangedModifierKt$onFocusChanged$2$1$1;->(Landroidx/compose/runtime/MutableState;Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/ui/focus/FocusChangedModifierKt$onFocusChanged$2$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/focus/FocusChangedModifierKt$onFocusChanged$2;->(Landroidx/compose/foundation/FocusableKt$focusable$2$5;)V -HSPLandroidx/compose/ui/focus/FocusChangedModifierKt$onFocusChanged$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/focus/FocusEventModifierKt$ModifierLocalFocusEvent$1;->()V -HSPLandroidx/compose/ui/focus/FocusEventModifierKt$ModifierLocalFocusEvent$1;->()V -HSPLandroidx/compose/ui/focus/FocusEventModifierKt$ModifierLocalFocusEvent$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/ui/focus/FocusEventModifierKt$onFocusEvent$2$1$1;->(Landroidx/compose/ui/focus/FocusEventModifierLocal;)V -HSPLandroidx/compose/ui/focus/FocusEventModifierKt$onFocusEvent$2$1$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/ui/focus/FocusEventModifierKt$onFocusEvent$2;->(Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/ui/focus/FocusEventModifierKt$onFocusEvent$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/focus/FocusEventModifierKt;->()V -HSPLandroidx/compose/ui/focus/FocusEventModifierLocal;->(Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/ui/focus/FocusEventModifierLocal;->addFocusModifier(Landroidx/compose/ui/focus/FocusModifier;)V -HSPLandroidx/compose/ui/focus/FocusEventModifierLocal;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal; -HSPLandroidx/compose/ui/focus/FocusEventModifierLocal;->getValue()Ljava/lang/Object; -HSPLandroidx/compose/ui/focus/FocusEventModifierLocal;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V -HSPLandroidx/compose/ui/focus/FocusEventModifierLocal;->propagateFocusEvent()V -HSPLandroidx/compose/ui/focus/FocusEventModifierLocal;->removeFocusModifier(Landroidx/compose/ui/focus/FocusModifier;)V -HSPLandroidx/compose/ui/focus/FocusManagerImpl;->()V -HSPLandroidx/compose/ui/focus/FocusManagerKt;->updateProperties(Landroidx/compose/ui/focus/FocusModifier;)V -HSPLandroidx/compose/ui/focus/FocusModifier$Companion$RefreshFocusProperties$1;->()V -HSPLandroidx/compose/ui/focus/FocusModifier$Companion$RefreshFocusProperties$1;->()V -HSPLandroidx/compose/ui/focus/FocusModifier;->(I)V -HSPLandroidx/compose/ui/focus/FocusModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal; -HSPLandroidx/compose/ui/focus/FocusModifier;->getValue()Ljava/lang/Object; -HSPLandroidx/compose/ui/focus/FocusModifier;->isValid()Z -HSPLandroidx/compose/ui/focus/FocusModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V -HSPLandroidx/compose/ui/focus/FocusModifier;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V -HSPLandroidx/compose/ui/focus/FocusModifier;->setFocusState(Landroidx/compose/ui/focus/FocusStateImpl;)V -HSPLandroidx/compose/ui/focus/FocusModifierKt$ModifierLocalParentFocusModifier$1;->()V -HSPLandroidx/compose/ui/focus/FocusModifierKt$ModifierLocalParentFocusModifier$1;->()V -HSPLandroidx/compose/ui/focus/FocusModifierKt$ModifierLocalParentFocusModifier$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/ui/focus/FocusModifierKt$ResetFocusModifierLocals$1;->()V -HSPLandroidx/compose/ui/focus/FocusModifierKt$ResetFocusModifierLocals$1;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal; -HSPLandroidx/compose/ui/focus/FocusModifierKt$ResetFocusModifierLocals$1;->getValue()Ljava/lang/Object; -HSPLandroidx/compose/ui/focus/FocusModifierKt$ResetFocusModifierLocals$2;->()V -HSPLandroidx/compose/ui/focus/FocusModifierKt$ResetFocusModifierLocals$2;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal; -HSPLandroidx/compose/ui/focus/FocusModifierKt$ResetFocusModifierLocals$2;->getValue()Ljava/lang/Object; -HSPLandroidx/compose/ui/focus/FocusModifierKt$ResetFocusModifierLocals$3;->()V -HSPLandroidx/compose/ui/focus/FocusModifierKt$ResetFocusModifierLocals$3;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal; -HSPLandroidx/compose/ui/focus/FocusModifierKt$ResetFocusModifierLocals$3;->getValue()Ljava/lang/Object; -HSPLandroidx/compose/ui/focus/FocusModifierKt$focusTarget$2$1$1;->(Landroidx/compose/ui/focus/FocusModifier;)V -HSPLandroidx/compose/ui/focus/FocusModifierKt$focusTarget$2$1$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/ui/focus/FocusModifierKt$focusTarget$2;->()V -HSPLandroidx/compose/ui/focus/FocusModifierKt$focusTarget$2;->()V -HSPLandroidx/compose/ui/focus/FocusModifierKt$focusTarget$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/focus/FocusModifierKt;->()V -HSPLandroidx/compose/ui/focus/FocusPropertiesImpl$enter$1;->()V -HSPLandroidx/compose/ui/focus/FocusPropertiesImpl$enter$1;->()V -HSPLandroidx/compose/ui/focus/FocusPropertiesImpl$exit$1;->()V -HSPLandroidx/compose/ui/focus/FocusPropertiesImpl$exit$1;->()V -HSPLandroidx/compose/ui/focus/FocusPropertiesImpl;->()V -HSPLandroidx/compose/ui/focus/FocusPropertiesImpl;->setCanFocus(Z)V -HSPLandroidx/compose/ui/focus/FocusPropertiesImpl;->setNext(Landroidx/compose/ui/focus/FocusRequester;)V -HSPLandroidx/compose/ui/focus/FocusPropertiesKt$ModifierLocalFocusProperties$1;->()V -HSPLandroidx/compose/ui/focus/FocusPropertiesKt$ModifierLocalFocusProperties$1;->()V -HSPLandroidx/compose/ui/focus/FocusPropertiesKt$ModifierLocalFocusProperties$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/ui/focus/FocusPropertiesKt$clear$1;->()V -HSPLandroidx/compose/ui/focus/FocusPropertiesKt$clear$1;->()V -HSPLandroidx/compose/ui/focus/FocusPropertiesKt$clear$2;->()V -HSPLandroidx/compose/ui/focus/FocusPropertiesKt$clear$2;->()V -HSPLandroidx/compose/ui/focus/FocusPropertiesKt$refreshFocusProperties$1;->(Landroidx/compose/ui/focus/FocusModifier;)V -HSPLandroidx/compose/ui/focus/FocusPropertiesKt$refreshFocusProperties$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/ui/focus/FocusPropertiesKt;->()V -HSPLandroidx/compose/ui/focus/FocusPropertiesKt;->refreshFocusProperties(Landroidx/compose/ui/focus/FocusModifier;)V -HSPLandroidx/compose/ui/focus/FocusPropertiesModifier;->(Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/ui/focus/FocusPropertiesModifier;->calculateProperties(Landroidx/compose/ui/focus/FocusPropertiesImpl;)V -HSPLandroidx/compose/ui/focus/FocusPropertiesModifier;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/focus/FocusPropertiesModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal; -HSPLandroidx/compose/ui/focus/FocusPropertiesModifier;->getValue()Ljava/lang/Object; -HSPLandroidx/compose/ui/focus/FocusPropertiesModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V -HSPLandroidx/compose/ui/focus/FocusRequester;->()V -HSPLandroidx/compose/ui/focus/FocusRequester;->()V -HSPLandroidx/compose/ui/focus/FocusRequesterModifierKt$ModifierLocalFocusRequester$1;->()V -HSPLandroidx/compose/ui/focus/FocusRequesterModifierKt$ModifierLocalFocusRequester$1;->()V -HSPLandroidx/compose/ui/focus/FocusRequesterModifierKt$ModifierLocalFocusRequester$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/ui/focus/FocusRequesterModifierKt$focusRequester$2;->(Landroidx/compose/ui/focus/FocusRequester;)V -HSPLandroidx/compose/ui/focus/FocusRequesterModifierKt$focusRequester$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/focus/FocusRequesterModifierKt;->()V -HSPLandroidx/compose/ui/focus/FocusRequesterModifierLocal;->(Landroidx/compose/ui/focus/FocusRequester;)V -HSPLandroidx/compose/ui/focus/FocusRequesterModifierLocal;->addFocusModifier(Landroidx/compose/ui/focus/FocusModifier;)V -HSPLandroidx/compose/ui/focus/FocusRequesterModifierLocal;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal; -HSPLandroidx/compose/ui/focus/FocusRequesterModifierLocal;->getValue()Ljava/lang/Object; -HSPLandroidx/compose/ui/focus/FocusRequesterModifierLocal;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V -HSPLandroidx/compose/ui/focus/FocusRequesterModifierLocal;->removeFocusModifier(Landroidx/compose/ui/focus/FocusModifier;)V -HSPLandroidx/compose/ui/focus/FocusStateImpl;->()V -HSPLandroidx/compose/ui/focus/FocusStateImpl;->(ILjava/lang/String;)V -HSPLandroidx/compose/ui/focus/FocusStateImpl;->isFocused()Z -HSPLandroidx/compose/ui/focus/FocusTransactionsKt;->activateNode(Landroidx/compose/ui/focus/FocusModifier;)V -HSPLandroidx/compose/ui/focus/FocusTransactionsKt;->deactivateNode(Landroidx/compose/ui/focus/FocusModifier;)V -HSPLandroidx/compose/ui/geometry/CornerRadius;->()V -HSPLandroidx/compose/ui/geometry/CornerRadius;->getX-impl(J)F -HSPLandroidx/compose/ui/geometry/CornerRadius;->getY-impl(J)F -HSPLandroidx/compose/ui/geometry/CornerRadiusKt;->CornerRadius(FF)J -HSPLandroidx/compose/ui/geometry/Offset;->()V -HSPLandroidx/compose/ui/geometry/Offset;->(J)V -HSPLandroidx/compose/ui/geometry/Offset;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/geometry/Offset;->getDistance-impl(J)F -HSPLandroidx/compose/ui/geometry/Offset;->getX-impl(J)F -HSPLandroidx/compose/ui/geometry/Offset;->getY-impl(J)F -HSPLandroidx/compose/ui/geometry/OffsetKt;->Offset(FF)J -HSPLandroidx/compose/ui/geometry/Rect;->()V -HSPLandroidx/compose/ui/geometry/Rect;->(FFFF)V -HSPLandroidx/compose/ui/geometry/RectKt;->Rect-tz77jQw(JJ)Landroidx/compose/ui/geometry/Rect; -HSPLandroidx/compose/ui/geometry/RoundRect;->()V -HSPLandroidx/compose/ui/geometry/RoundRect;->(FFFFJJJJ)V -HSPLandroidx/compose/ui/geometry/RoundRectKt;->RoundRect-gG7oq9Y(FFFFJ)Landroidx/compose/ui/geometry/RoundRect; -HSPLandroidx/compose/ui/geometry/RoundRectKt;->isSimple(Landroidx/compose/ui/geometry/RoundRect;)Z -HSPLandroidx/compose/ui/geometry/Size;->()V -HSPLandroidx/compose/ui/geometry/Size;->(J)V -HSPLandroidx/compose/ui/geometry/Size;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/geometry/Size;->equals-impl0(JJ)Z -HSPLandroidx/compose/ui/geometry/Size;->getHeight-impl(J)F -HSPLandroidx/compose/ui/geometry/Size;->getMinDimension-impl(J)F -HSPLandroidx/compose/ui/geometry/Size;->getWidth-impl(J)F -HSPLandroidx/compose/ui/geometry/Size;->isEmpty-impl(J)Z -HSPLandroidx/compose/ui/geometry/SizeKt;->Size(FF)J -HSPLandroidx/compose/ui/geometry/SizeKt;->getCenter-uvyYCjk(J)J -HSPLandroidx/compose/ui/graphics/AndroidBlendMode_androidKt;->toAndroidBlendMode-s9anfk8(I)Landroid/graphics/BlendMode; -HSPLandroidx/compose/ui/graphics/AndroidCanvas;->()V -HSPLandroidx/compose/ui/graphics/AndroidCanvas;->concat-58bKbWc([F)V -HSPLandroidx/compose/ui/graphics/AndroidCanvas;->disableZ()V -HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawCircle-9KIMszo(FJLandroidx/compose/ui/graphics/Paint;)V -HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawImageRect-HPBpro0(Landroidx/compose/ui/graphics/ImageBitmap;JJJJLandroidx/compose/ui/graphics/Paint;)V -HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawLine-Wko1d7g(JJLandroidx/compose/ui/graphics/Paint;)V -HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawPath(Landroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/Paint;)V -HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawRect(FFFFLandroidx/compose/ui/graphics/Paint;)V -HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawRoundRect(FFFFFFLandroidx/compose/ui/graphics/Paint;)V -HSPLandroidx/compose/ui/graphics/AndroidCanvas;->enableZ()V -HSPLandroidx/compose/ui/graphics/AndroidCanvas;->restore()V -HSPLandroidx/compose/ui/graphics/AndroidCanvas;->rotate(F)V -HSPLandroidx/compose/ui/graphics/AndroidCanvas;->save()V -HSPLandroidx/compose/ui/graphics/AndroidCanvas;->setInternalCanvas(Landroid/graphics/Canvas;)V -HSPLandroidx/compose/ui/graphics/AndroidCanvas;->translate(FF)V -HSPLandroidx/compose/ui/graphics/AndroidCanvas_androidKt;->()V -HSPLandroidx/compose/ui/graphics/AndroidImageBitmap;->(Landroid/graphics/Bitmap;)V -HSPLandroidx/compose/ui/graphics/AndroidImageBitmap;->getHeight()I -HSPLandroidx/compose/ui/graphics/AndroidImageBitmap;->getWidth()I -HSPLandroidx/compose/ui/graphics/AndroidImageBitmap_androidKt;->toBitmapConfig-1JJdX4A(I)Landroid/graphics/Bitmap$Config; -HSPLandroidx/compose/ui/graphics/AndroidMatrixConversions_androidKt;->setFrom-tU-YjHk(Landroid/graphics/Matrix;[F)V -HSPLandroidx/compose/ui/graphics/AndroidPaint;->()V -HSPLandroidx/compose/ui/graphics/AndroidPaint;->asFrameworkPaint()Landroid/graphics/Paint; -HSPLandroidx/compose/ui/graphics/AndroidPaint;->getAlpha()F -HSPLandroidx/compose/ui/graphics/AndroidPaint;->getBlendMode-0nO6VwU()I -HSPLandroidx/compose/ui/graphics/AndroidPaint;->getColor-0d7_KjU()J -HSPLandroidx/compose/ui/graphics/AndroidPaint;->getColorFilter()Landroidx/compose/ui/graphics/ColorFilter; -HSPLandroidx/compose/ui/graphics/AndroidPaint;->getFilterQuality-f-v9h1I()I -HSPLandroidx/compose/ui/graphics/AndroidPaint;->getShader()Landroid/graphics/Shader; -HSPLandroidx/compose/ui/graphics/AndroidPaint;->getStrokeCap-KaPHkGw()I -HSPLandroidx/compose/ui/graphics/AndroidPaint;->getStrokeJoin-LxFBmk8()I -HSPLandroidx/compose/ui/graphics/AndroidPaint;->getStrokeMiterLimit()F -HSPLandroidx/compose/ui/graphics/AndroidPaint;->getStrokeWidth()F -HSPLandroidx/compose/ui/graphics/AndroidPaint;->setAlpha(F)V -HSPLandroidx/compose/ui/graphics/AndroidPaint;->setBlendMode-s9anfk8(I)V -HSPLandroidx/compose/ui/graphics/AndroidPaint;->setColor-8_81llA(J)V -HSPLandroidx/compose/ui/graphics/AndroidPaint;->setColorFilter(Landroidx/compose/ui/graphics/ColorFilter;)V -HSPLandroidx/compose/ui/graphics/AndroidPaint;->setShader(Landroid/graphics/Shader;)V -HSPLandroidx/compose/ui/graphics/AndroidPaint;->setStrokeCap-BeK7IIE(I)V -HSPLandroidx/compose/ui/graphics/AndroidPaint;->setStrokeWidth(F)V -HSPLandroidx/compose/ui/graphics/AndroidPaint;->setStyle-k9PVt8s(I)V -HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt$WhenMappings;->()V -HSPLandroidx/compose/ui/graphics/AndroidPath;->(I)V -HSPLandroidx/compose/ui/graphics/AndroidPath;->(Landroid/graphics/Path;)V -HSPLandroidx/compose/ui/graphics/AndroidPath;->addPath-Uv8p0NA(Landroidx/compose/ui/graphics/Path;J)V -HSPLandroidx/compose/ui/graphics/AndroidPath;->close()V -HSPLandroidx/compose/ui/graphics/AndroidPath;->cubicTo(FFFFFF)V -HSPLandroidx/compose/ui/graphics/AndroidPath;->lineTo(FF)V -HSPLandroidx/compose/ui/graphics/AndroidPath;->moveTo(FF)V -HSPLandroidx/compose/ui/graphics/AndroidPath;->relativeCubicTo(FFFFFF)V -HSPLandroidx/compose/ui/graphics/AndroidPath;->relativeLineTo(FF)V -HSPLandroidx/compose/ui/graphics/AndroidPath;->relativeMoveTo(FF)V -HSPLandroidx/compose/ui/graphics/AndroidPath;->reset()V -HSPLandroidx/compose/ui/graphics/AndroidPath_androidKt;->()V -HSPLandroidx/compose/ui/graphics/AndroidPath_androidKt;->Path()Landroidx/compose/ui/graphics/AndroidPath; -HSPLandroidx/compose/ui/graphics/Api26Bitmap$$ExternalSyntheticApiModelOutline0;->m(IILandroid/graphics/Bitmap$Config;ZLandroid/graphics/ColorSpace;)Landroid/graphics/Bitmap; -HSPLandroidx/compose/ui/graphics/Api26Bitmap;->createBitmap-x__-hDU$ui_graphics_release(IIIZLandroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroid/graphics/Bitmap; -HSPLandroidx/compose/ui/graphics/Api26Bitmap;->toFrameworkColorSpace$ui_graphics_release(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroid/graphics/ColorSpace; -HSPLandroidx/compose/ui/graphics/BlendMode;->(I)V -HSPLandroidx/compose/ui/graphics/BlendMode;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/graphics/BlendModeColorFilterHelper;->()V -HSPLandroidx/compose/ui/graphics/BlendModeColorFilterHelper;->()V -HSPLandroidx/compose/ui/graphics/BlendModeColorFilterHelper;->BlendModeColorFilter-xETnrds(JI)Landroid/graphics/BlendModeColorFilter; -HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier$measure$1;->(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/graphics/BlockGraphicsLayerModifier;)V -HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier;->(Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; -HSPLandroidx/compose/ui/graphics/Brush$Companion;->()V -HSPLandroidx/compose/ui/graphics/Brush$Companion;->linearGradient-mHitzGk$default([Lkotlin/Pair;JJ)Landroidx/compose/ui/graphics/LinearGradient; -HSPLandroidx/compose/ui/graphics/Brush;->()V -HSPLandroidx/compose/ui/graphics/Brush;->()V -HSPLandroidx/compose/ui/graphics/CanvasHolder;->()V -HSPLandroidx/compose/ui/graphics/CanvasUtils;->enableZ(Landroid/graphics/Canvas;Z)V -HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Canvas;)V -HSPLandroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline1;->m(Landroid/graphics/Canvas;)V -HSPLandroidx/compose/ui/graphics/CanvasZHelper;->()V -HSPLandroidx/compose/ui/graphics/CanvasZHelper;->()V -HSPLandroidx/compose/ui/graphics/CanvasZHelper;->enableZ(Landroid/graphics/Canvas;Z)V -HSPLandroidx/compose/ui/graphics/Color;->()V -HSPLandroidx/compose/ui/graphics/Color;->(J)V -HSPLandroidx/compose/ui/graphics/Color;->convert-vNxB06k(JLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J -HSPLandroidx/compose/ui/graphics/Color;->copy-wmQWz5c$default(JF)J -HSPLandroidx/compose/ui/graphics/Color;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/graphics/Color;->equals-impl0(JJ)Z -HSPLandroidx/compose/ui/graphics/Color;->getAlpha-impl(J)F -HSPLandroidx/compose/ui/graphics/Color;->getBlue-impl(J)F -HSPLandroidx/compose/ui/graphics/Color;->getColorSpace-impl(J)Landroidx/compose/ui/graphics/colorspace/ColorSpace; -HSPLandroidx/compose/ui/graphics/Color;->getGreen-impl(J)F -HSPLandroidx/compose/ui/graphics/Color;->getRed-impl(J)F -HSPLandroidx/compose/ui/graphics/ColorFilter;->(Landroid/graphics/ColorFilter;)V -HSPLandroidx/compose/ui/graphics/ColorKt;->Color$default(III)J -HSPLandroidx/compose/ui/graphics/ColorKt;->Color(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J -HSPLandroidx/compose/ui/graphics/ColorKt;->Color(I)J -HSPLandroidx/compose/ui/graphics/ColorKt;->Color(J)J -HSPLandroidx/compose/ui/graphics/ColorKt;->compositeOver--OWjLjI(JJ)J -HSPLandroidx/compose/ui/graphics/ColorKt;->getComponents-8_81llA(J)[F -HSPLandroidx/compose/ui/graphics/ColorKt;->toArgb-8_81llA(J)I -HSPLandroidx/compose/ui/graphics/Float16$Companion;->()V -HSPLandroidx/compose/ui/graphics/Float16;->()V -HSPLandroidx/compose/ui/graphics/Float16;->constructor-impl(F)S -HSPLandroidx/compose/ui/graphics/Float16;->toFloat-impl(S)F -HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierKt;->graphicsLayer(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierKt;->graphicsLayer-pANQ8Wg$default(Landroidx/compose/ui/Modifier;FFFLandroidx/compose/ui/graphics/Shape;ZI)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/ui/graphics/GraphicsLayerScopeKt;->()V -HSPLandroidx/compose/ui/graphics/LinearGradient;->(Ljava/util/ArrayList;Ljava/util/ArrayList;JJI)V -HSPLandroidx/compose/ui/graphics/LinearGradient;->createShader-uvyYCjk(J)Landroid/graphics/Shader; -HSPLandroidx/compose/ui/graphics/Matrix;->constructor-impl$default()[F -HSPLandroidx/compose/ui/graphics/Matrix;->map-MK-Hz9U([FJ)J -HSPLandroidx/compose/ui/graphics/Matrix;->reset-impl([F)V -HSPLandroidx/compose/ui/graphics/Matrix;->translate-impl$default([FFF)V -HSPLandroidx/compose/ui/graphics/Outline$Rectangle;->(Landroidx/compose/ui/geometry/Rect;)V -HSPLandroidx/compose/ui/graphics/Outline$Rounded;->(Landroidx/compose/ui/geometry/RoundRect;)V -HSPLandroidx/compose/ui/graphics/Outline;->()V -HSPLandroidx/compose/ui/graphics/PathFillType;->(I)V -HSPLandroidx/compose/ui/graphics/PathFillType;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1;->()V -HSPLandroidx/compose/ui/graphics/RectangleShapeKt;->()V -HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->()V -HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getDensity()F -HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setAlpha(F)V -HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setAmbientShadowColor-8_81llA(J)V -HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setCameraDistance(F)V -HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setClip(Z)V -HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setRenderEffect()V -HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setRotationX(F)V -HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setRotationY(F)V -HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setRotationZ(F)V -HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setScaleX(F)V -HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setScaleY(F)V -HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setShadowElevation(F)V -HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setShape(Landroidx/compose/ui/graphics/Shape;)V -HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setSpotShadowColor-8_81llA(J)V -HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setTransformOrigin-__ExYCQ(J)V -HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setTranslationX(F)V -HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setTranslationY(F)V -HSPLandroidx/compose/ui/graphics/ShaderBrush;->()V -HSPLandroidx/compose/ui/graphics/ShaderBrush;->applyTo-Pq9zytI(FJLandroidx/compose/ui/graphics/Paint;)V -HSPLandroidx/compose/ui/graphics/Shadow;->()V -HSPLandroidx/compose/ui/graphics/Shadow;->(JJF)V -HSPLandroidx/compose/ui/graphics/Shadow;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1;->(Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)V -HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$measure$1;->(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)V -HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZJJ)V -HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; -HSPLandroidx/compose/ui/graphics/SolidColor;->(J)V -HSPLandroidx/compose/ui/graphics/SolidColor;->applyTo-Pq9zytI(FJLandroidx/compose/ui/graphics/Paint;)V -HSPLandroidx/compose/ui/graphics/SolidColor;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/graphics/StrokeCap;->(I)V -HSPLandroidx/compose/ui/graphics/StrokeCap;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/graphics/StrokeJoin;->(I)V -HSPLandroidx/compose/ui/graphics/StrokeJoin;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/graphics/TransformOrigin;->()V -HSPLandroidx/compose/ui/graphics/TransformOrigin;->getPivotFractionY-impl(J)F -HSPLandroidx/compose/ui/graphics/TransformOriginKt;->TransformOrigin(FF)J -HSPLandroidx/compose/ui/graphics/WrapperVerificationHelperMethods$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Paint;Landroid/graphics/BlendMode;)V -HSPLandroidx/compose/ui/graphics/WrapperVerificationHelperMethods;->()V -HSPLandroidx/compose/ui/graphics/WrapperVerificationHelperMethods;->()V -HSPLandroidx/compose/ui/graphics/WrapperVerificationHelperMethods;->setBlendMode-GB0RdKg(Landroid/graphics/Paint;I)V -HSPLandroidx/compose/ui/graphics/colorspace/Adaptation$Companion$Bradford$1;->([F)V -HSPLandroidx/compose/ui/graphics/colorspace/Adaptation;->()V -HSPLandroidx/compose/ui/graphics/colorspace/Adaptation;->([F)V -HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->()V -HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->equals-impl0(JJ)Z -HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->(Ljava/lang/String;JI)V -HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->isSrgb()Z -HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->adapt$default(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroidx/compose/ui/graphics/colorspace/ColorSpace; -HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->chromaticAdaptation([F[F[F)[F -HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->compare(Landroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/WhitePoint;)Z -HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->connect-YBCOT_4$default(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I)Landroidx/compose/ui/graphics/colorspace/Connector; -HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->inverse3x3([F)[F -HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->mul3x3([F[F)[F -HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->mul3x3Diag([F[F)[F -HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->mul3x3Float3([F[F)V -HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces$ExtendedSrgb$1;->()V -HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces$ExtendedSrgb$1;->()V -HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces$ExtendedSrgb$2;->()V -HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces$ExtendedSrgb$2;->()V -HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->()V -HSPLandroidx/compose/ui/graphics/colorspace/Connector;->(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I)V -HSPLandroidx/compose/ui/graphics/colorspace/Connector;->(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;[F)V -HSPLandroidx/compose/ui/graphics/colorspace/Connector;->transform([F)V -HSPLandroidx/compose/ui/graphics/colorspace/Illuminant;->()V -HSPLandroidx/compose/ui/graphics/colorspace/Lab;->()V -HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->()V -HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->()V -HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->fromXyz([F)[F -HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->getMaxValue(I)F -HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->getMinValue(I)F -HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->toXyz([F)[F -HSPLandroidx/compose/ui/graphics/colorspace/Rgb$1;->(Landroidx/compose/ui/graphics/colorspace/TransferParameters;)V -HSPLandroidx/compose/ui/graphics/colorspace/Rgb$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/graphics/colorspace/Rgb$3;->(Landroidx/compose/ui/graphics/colorspace/TransferParameters;)V -HSPLandroidx/compose/ui/graphics/colorspace/Rgb$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/graphics/colorspace/Rgb$5;->(D)V -HSPLandroidx/compose/ui/graphics/colorspace/Rgb$6;->(D)V -HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion$DoubleIdentity$1;->()V -HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion$DoubleIdentity$1;->()V -HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion$DoubleIdentity$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->area([F)F -HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->compare(DLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Z -HSPLandroidx/compose/ui/graphics/colorspace/Rgb$eotf$1;->(Landroidx/compose/ui/graphics/colorspace/Rgb;)V -HSPLandroidx/compose/ui/graphics/colorspace/Rgb$eotf$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/graphics/colorspace/Rgb$oetf$1;->(Landroidx/compose/ui/graphics/colorspace/Rgb;)V -HSPLandroidx/compose/ui/graphics/colorspace/Rgb$oetf$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;DFFI)V -HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/TransferParameters;I)V -HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;[FLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;FFLandroidx/compose/ui/graphics/colorspace/TransferParameters;I)V -HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->fromXyz([F)[F -HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getMaxValue(I)F -HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getMinValue(I)F -HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->isSrgb()Z -HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->toXyz([F)[F -HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->(DDDDD)V -HSPLandroidx/compose/ui/graphics/colorspace/WhitePoint;->(FF)V -HSPLandroidx/compose/ui/graphics/colorspace/WhitePoint;->toXyz$ui_graphics_release()[F -HSPLandroidx/compose/ui/graphics/colorspace/Xyz;->()V -HSPLandroidx/compose/ui/graphics/colorspace/Xyz;->clamp(F)F -HSPLandroidx/compose/ui/graphics/colorspace/Xyz;->fromXyz([F)[F -HSPLandroidx/compose/ui/graphics/colorspace/Xyz;->getMaxValue(I)F -HSPLandroidx/compose/ui/graphics/colorspace/Xyz;->getMinValue(I)F -HSPLandroidx/compose/ui/graphics/colorspace/Xyz;->toXyz([F)[F -HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->()V -HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;)V -HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->getCanvas()Landroidx/compose/ui/graphics/Canvas; -HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->getSize-NH-jbRc()J -HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->setSize-uvyYCjk(J)V -HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->()V -HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-2qPWKa0$default(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;JLandroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;I)Landroidx/compose/ui/graphics/Paint; -HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-swdJneE$default(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;Landroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;I)Landroidx/compose/ui/graphics/Paint; -HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-swdJneE(Landroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;II)Landroidx/compose/ui/graphics/Paint; -HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawCircle-VaOC9Bg(JFJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V -HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawImage-AZ2fEMs(Landroidx/compose/ui/graphics/ImageBitmap;JJJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;II)V -HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawLine-NGM6Ib0(JJJFILandroidx/compose/ui/graphics/AndroidPathEffect;FLandroidx/compose/ui/graphics/ColorFilter;I)V -HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawPath-GBMwjPU(Landroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V -HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRect-AsUm42w(Landroidx/compose/ui/graphics/Brush;JJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V -HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRect-n-J9OG0(JJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V -HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRoundRect-u-Aw5IA(JJJJLandroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;I)V -HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getDensity()F -HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getDrawContext()Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1; -HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->modulate-5vOe2sY(FJ)J -HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->selectPaint(Landroidx/compose/ui/graphics/drawscope/DrawStyle;)Landroidx/compose/ui/graphics/Paint; -HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->(Landroidx/compose/ui/graphics/drawscope/DrawContext;)V -HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->inset(FFFF)V -HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->rotate-Uv8p0NA(FJ)V -HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->transform-58bKbWc([F)V -HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->translate(FF)V -HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt;->()V -HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawCircle-VaOC9Bg$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;JFJLandroidx/compose/ui/graphics/drawscope/DrawStyle;I)V -HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawImage-AZ2fEMs$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/ImageBitmap;JJJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;III)V -HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawPath-GBMwjPU$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/drawscope/Stroke;I)V -HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawRect-AsUm42w$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/Brush;JJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;I)V -HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawRect-n-J9OG0$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;JJFLandroidx/compose/ui/graphics/ColorFilter;I)V -HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->getCenter-F1C5BW0()J -HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->getSize-NH-jbRc()J -HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->offsetSize-PENXr5M(JJ)J -HSPLandroidx/compose/ui/graphics/drawscope/DrawStyle;->()V -HSPLandroidx/compose/ui/graphics/drawscope/EmptyCanvas;->()V -HSPLandroidx/compose/ui/graphics/drawscope/Fill;->()V -HSPLandroidx/compose/ui/graphics/drawscope/Fill;->()V -HSPLandroidx/compose/ui/graphics/painter/Painter;->()V -HSPLandroidx/compose/ui/graphics/painter/Painter;->draw-x_KDEd0(Landroidx/compose/ui/graphics/drawscope/DrawScope;JFLandroidx/compose/ui/graphics/ColorFilter;)V -HSPLandroidx/compose/ui/graphics/vector/DrawCache;->()V -HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->()V -HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->draw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V -HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->getInvalidateListener$ui_release()Lkotlin/jvm/functions/Function0; -HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->remove(II)V -HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setInvalidateListener$ui_release(Lkotlin/jvm/functions/Function0;)V -HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->(Ljava/lang/String;FFFFFFFLjava/util/List;I)V -HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->(Ljava/lang/String;)V -HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->(Ljava/lang/String;FFFFJIZ)V -HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->addPath-oIyEayM$default(Landroidx/compose/ui/graphics/vector/ImageVector$Builder;Ljava/util/ArrayList;Landroidx/compose/ui/graphics/SolidColor;)V -HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->addPath-oIyEayM(FFFFFFFIIILandroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Brush;Ljava/lang/String;Ljava/util/List;)V -HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->build()Landroidx/compose/ui/graphics/vector/ImageVector; -HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->ensureNotConsumed()V -HSPLandroidx/compose/ui/graphics/vector/ImageVector;->(Ljava/lang/String;FFFFLandroidx/compose/ui/graphics/vector/VectorGroup;JIZ)V -HSPLandroidx/compose/ui/graphics/vector/ImageVector;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->()V -HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->addNode(Landroidx/compose/ui/graphics/vector/PathNode;)V -HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->close()V -HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->curveTo(FFFFFF)V -HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->curveToRelative(FFFFFF)V -HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->horizontalLineTo(F)V -HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->horizontalLineToRelative(F)V -HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->lineTo(FF)V -HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->lineToRelative(FF)V -HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->moveTo(FF)V -HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->reflectiveCurveTo(FFFF)V -HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->reflectiveCurveToRelative(FFFF)V -HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->verticalLineTo(F)V -HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->verticalLineToRelative(F)V -HSPLandroidx/compose/ui/graphics/vector/PathComponent$pathMeasure$2;->()V -HSPLandroidx/compose/ui/graphics/vector/PathComponent$pathMeasure$2;->()V -HSPLandroidx/compose/ui/graphics/vector/PathComponent;->()V -HSPLandroidx/compose/ui/graphics/vector/PathComponent;->draw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V -HSPLandroidx/compose/ui/graphics/vector/PathComponent;->updateRenderPath()V -HSPLandroidx/compose/ui/graphics/vector/PathNode$Close;->()V -HSPLandroidx/compose/ui/graphics/vector/PathNode$Close;->()V -HSPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->(FFFFFF)V -HSPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/graphics/vector/PathNode$HorizontalTo;->(F)V -HSPLandroidx/compose/ui/graphics/vector/PathNode$HorizontalTo;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/graphics/vector/PathNode$LineTo;->(FF)V -HSPLandroidx/compose/ui/graphics/vector/PathNode$LineTo;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/graphics/vector/PathNode$MoveTo;->(FF)V -HSPLandroidx/compose/ui/graphics/vector/PathNode$MoveTo;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo;->(FFFF)V -HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeArcTo;->(FFFZZFF)V -HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->(FFFFFF)V -HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeHorizontalTo;->(F)V -HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo;->(FF)V -HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeMoveTo;->(FF)V -HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo;->(FFFF)V -HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeVerticalTo;->(F)V -HSPLandroidx/compose/ui/graphics/vector/PathNode$VerticalTo;->(F)V -HSPLandroidx/compose/ui/graphics/vector/PathNode$VerticalTo;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/graphics/vector/PathNode;->(ZZI)V -HSPLandroidx/compose/ui/graphics/vector/PathParser$PathPoint;->(I)V -HSPLandroidx/compose/ui/graphics/vector/PathParser$PathPoint;->reset()V -HSPLandroidx/compose/ui/graphics/vector/PathParser;->()V -HSPLandroidx/compose/ui/graphics/vector/PathParser;->addNode(C[F)V -HSPLandroidx/compose/ui/graphics/vector/PathParser;->drawArc(Landroidx/compose/ui/graphics/Path;DDDDDDDZZ)V -HSPLandroidx/compose/ui/graphics/vector/PathParser;->toPath(Landroidx/compose/ui/graphics/Path;)V -HSPLandroidx/compose/ui/graphics/vector/VNode;->()V -HSPLandroidx/compose/ui/graphics/vector/VNode;->getInvalidateListener$ui_release()Lkotlin/jvm/functions/Function0; -HSPLandroidx/compose/ui/graphics/vector/VNode;->invalidate()V -HSPLandroidx/compose/ui/graphics/vector/VNode;->setInvalidateListener$ui_release(Lkotlin/jvm/functions/Function0;)V -HSPLandroidx/compose/ui/graphics/vector/VectorApplier;->(Landroidx/compose/ui/graphics/vector/GroupComponent;)V -HSPLandroidx/compose/ui/graphics/vector/VectorApplier;->asGroup(Landroidx/compose/ui/graphics/vector/VNode;)Landroidx/compose/ui/graphics/vector/GroupComponent; -HSPLandroidx/compose/ui/graphics/vector/VectorApplier;->insertBottomUp(ILjava/lang/Object;)V -HSPLandroidx/compose/ui/graphics/vector/VectorApplier;->insertTopDown(ILjava/lang/Object;)V -HSPLandroidx/compose/ui/graphics/vector/VectorApplier;->onClear()V -HSPLandroidx/compose/ui/graphics/vector/VectorComponent$drawVectorBlock$1;->(Landroidx/compose/ui/graphics/vector/VectorComponent;)V -HSPLandroidx/compose/ui/graphics/vector/VectorComponent$drawVectorBlock$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/graphics/vector/VectorComponent$invalidateCallback$1;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorComponent$invalidateCallback$1;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorComponent$root$1$1;->(Landroidx/compose/ui/graphics/vector/VectorComponent;)V -HSPLandroidx/compose/ui/graphics/vector/VectorComponent$root$1$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->draw(Landroidx/compose/ui/graphics/drawscope/DrawScope;FLandroidx/compose/ui/graphics/ColorFilter;)V -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$10;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$10;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$10;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$11;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$11;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$11;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$12;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$12;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$12;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$13;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$13;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$13;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$14;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$14;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$14;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$2;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$2;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$3;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$3;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$4;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$4;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$5;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$5;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$6;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$6;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$7;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$7;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$7;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$8;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$8;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$8;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$9;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$9;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$9;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path-9cdaXJ4$$inlined$ComposeNode$1;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path-9cdaXJ4$$inlined$ComposeNode$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt;->Path-9cdaXJ4(Ljava/util/List;ILjava/lang/String;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Brush;FFIIFFFFLandroidx/compose/runtime/Composer;III)V -HSPLandroidx/compose/ui/graphics/vector/VectorGroup;->(Ljava/lang/String;FFFFFFFLjava/util/List;Ljava/util/List;)V -HSPLandroidx/compose/ui/graphics/vector/VectorGroup;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/graphics/vector/VectorKt;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorKt;->addPathNodes(Ljava/lang/String;)Ljava/util/List; -HSPLandroidx/compose/ui/graphics/vector/VectorNode;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2$invoke$$inlined$onDispose$1;->(Landroidx/compose/runtime/Composition;)V -HSPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2$invoke$$inlined$onDispose$1;->dispose()V -HSPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2;->(Landroidx/compose/runtime/Composition;)V -HSPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/graphics/vector/VectorPainter$composeVector$1;->(Lkotlin/jvm/functions/Function4;Landroidx/compose/ui/graphics/vector/VectorPainter;)V -HSPLandroidx/compose/ui/graphics/vector/VectorPainter$composeVector$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/graphics/vector/VectorPainter$vector$1$1;->(Landroidx/compose/ui/graphics/vector/VectorPainter;)V -HSPLandroidx/compose/ui/graphics/vector/VectorPainter$vector$1$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->RenderVector$ui_release(Ljava/lang/String;FFLkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;I)V -HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->applyColorFilter(Landroidx/compose/ui/graphics/ColorFilter;)Z -HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->getIntrinsicSize-NH-jbRc()J -HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->onDraw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V -HSPLandroidx/compose/ui/graphics/vector/VectorPainterKt$rememberVectorPainter$3;->(Landroidx/compose/ui/graphics/vector/ImageVector;)V -HSPLandroidx/compose/ui/graphics/vector/VectorPainterKt$rememberVectorPainter$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/graphics/vector/VectorPainterKt;->RenderVectorGroup(Landroidx/compose/ui/graphics/vector/VectorGroup;Ljava/util/Map;Landroidx/compose/runtime/Composer;II)V -HSPLandroidx/compose/ui/graphics/vector/VectorPainterKt;->rememberVectorPainter(Landroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/graphics/vector/VectorPainter; -HSPLandroidx/compose/ui/graphics/vector/VectorPath;->(Ljava/lang/String;Ljava/util/List;ILandroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Brush;FFIIFFFF)V -HSPLandroidx/compose/ui/graphics/vector/VectorPath;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/graphics/vector/VectorProperty$Fill;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorProperty$Fill;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorProperty$FillAlpha;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorProperty$FillAlpha;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorProperty$PathData;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorProperty$PathData;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorProperty$Stroke;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorProperty$Stroke;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeAlpha;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeAlpha;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeLineWidth;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeLineWidth;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathEnd;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathEnd;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathOffset;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathOffset;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathStart;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathStart;->()V -HSPLandroidx/compose/ui/graphics/vector/VectorProperty;->()V -HSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->(Landroid/content/res/XmlResourceParser;)V -HSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getNamedComplexColor(Landroid/content/res/TypedArray;Landroid/content/res/Resources$Theme;Ljava/lang/String;I)Landroidx/core/content/res/ComplexColorCompat; -HSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getNamedFloat(Landroid/content/res/TypedArray;Ljava/lang/String;IF)F -HSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getNamedInt(Landroid/content/res/TypedArray;Ljava/lang/String;II)I -HSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->getString(Landroid/content/res/TypedArray;I)Ljava/lang/String; -HSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->obtainAttributes(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;Landroid/util/AttributeSet;[I)Landroid/content/res/TypedArray; -HSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorParser;->updateConfig(I)V -HSPLandroidx/compose/ui/graphics/vector/compat/AndroidVectorResources;->()V -HSPLandroidx/compose/ui/graphics/vector/compat/XmlVectorParser_androidKt;->obtainBrushFromComplexColor(Landroidx/core/content/res/ComplexColorCompat;)Landroidx/compose/ui/graphics/Brush; -HSPLandroidx/compose/ui/hapticfeedback/PlatformHapticFeedback;->(Landroid/view/View;)V -HSPLandroidx/compose/ui/hapticfeedback/PlatformHapticFeedback;->asExternalModel(Lcom/google/samples/apps/nowinandroid/core/database/model/TopicEntity;)Lcom/google/samples/apps/nowinandroid/core/model/data/Topic; -HSPLandroidx/compose/ui/input/InputMode;->(I)V -HSPLandroidx/compose/ui/input/InputMode;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/input/InputModeManagerImpl;->(ILandroidx/compose/ui/platform/AndroidComposeView$_inputModeManager$1;)V -HSPLandroidx/compose/ui/input/InputModeManagerImpl;->getInputMode-aOaMEAU()I -HSPLandroidx/compose/ui/input/focus/FocusAwareInputModifier;->(Landroidx/compose/ui/input/rotary/RotaryInputModifierKt$focusAwareCallback$1;Landroidx/compose/ui/modifier/ProvidableModifierLocal;)V -HSPLandroidx/compose/ui/input/focus/FocusAwareInputModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal; -HSPLandroidx/compose/ui/input/focus/FocusAwareInputModifier;->getValue()Ljava/lang/Object; -HSPLandroidx/compose/ui/input/focus/FocusAwareInputModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V -HSPLandroidx/compose/ui/input/key/KeyInputModifier;->(Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/ui/input/key/KeyInputModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal; -HSPLandroidx/compose/ui/input/key/KeyInputModifier;->getValue()Ljava/lang/Object; -HSPLandroidx/compose/ui/input/key/KeyInputModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V -HSPLandroidx/compose/ui/input/key/KeyInputModifier;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V -HSPLandroidx/compose/ui/input/key/KeyInputModifierKt$ModifierLocalKeyInput$1;->()V -HSPLandroidx/compose/ui/input/key/KeyInputModifierKt$ModifierLocalKeyInput$1;->()V -HSPLandroidx/compose/ui/input/key/KeyInputModifierKt$ModifierLocalKeyInput$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/ui/input/key/KeyInputModifierKt;->()V -HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher$calculateNestedScrollScope$1;->(Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V -HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->()V -HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierKt$nestedScroll$2;->(Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V -HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierKt$nestedScroll$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal$1;->(Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;)V -HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;->(Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V -HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal; -HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;->getParent()Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal; -HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;->getValue()Ljava/lang/Object; -HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V -HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocalKt$ModifierLocalNestedScroll$1;->()V -HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocalKt$ModifierLocalNestedScroll$1;->()V -HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocalKt$ModifierLocalNestedScroll$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocalKt;->()V -HSPLandroidx/compose/ui/input/pointer/AwaitPointerEventScope;->awaitPointerEvent$default(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/jvm/internal/BaseContinuationImpl;)Ljava/lang/Object; -HSPLandroidx/compose/ui/input/pointer/HitPathTracker;->(Landroidx/compose/ui/node/InnerNodeCoordinator;)V -HSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;->()V -HSPLandroidx/compose/ui/input/pointer/NodeParent;->()V -HSPLandroidx/compose/ui/input/pointer/PointerEvent;->(Ljava/util/List;)V -HSPLandroidx/compose/ui/input/pointer/PointerEvent;->(Ljava/util/List;Landroidx/compose/ui/input/pointer/InternalPointerEvent;)V -HSPLandroidx/compose/ui/input/pointer/PointerEventPass;->()V -HSPLandroidx/compose/ui/input/pointer/PointerEventPass;->(ILjava/lang/String;)V -HSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer;->()V -HSPLandroidx/compose/ui/input/pointer/PointerInputEventProcessor;->(Landroidx/compose/ui/node/LayoutNode;)V -HSPLandroidx/compose/ui/input/pointer/PointerInputFilter;->()V -HSPLandroidx/compose/ui/input/pointer/PointerInputFilter;->getSize-YbymL2g()J -HSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->(I)V -HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;->(Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;Lkotlinx/coroutines/CancellableContinuationImpl;)V -HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;->awaitPointerEvent(Landroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/jvm/internal/BaseContinuationImpl;)Ljava/lang/Object; -HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;->getContext()Lkotlin/coroutines/CoroutineContext; -HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;->resumeWith(Ljava/lang/Object;)V -HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$awaitPointerEventScope$2$2;->(Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;)V -HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$awaitPointerEventScope$2$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->(Landroidx/compose/ui/platform/ViewConfiguration;Landroidx/compose/ui/unit/Density;)V -HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->awaitPointerEventScope(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->getPointerInputFilter()Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter; -HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$2$2$1;->(Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$2$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$2$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$2;->(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V -HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$4$2$1;->(Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$4$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$4$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$4;->(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V -HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$6$2$1;->(Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$6$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$6$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$6;->([Ljava/lang/Object;Landroidx/compose/foundation/gestures/DraggableKt$draggable$9$3;)V -HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;->()V -HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;->pointerInput(Landroidx/compose/ui/Modifier;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;->pointerInput(Landroidx/compose/ui/Modifier;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker;->()V -HSPLandroidx/compose/ui/input/rotary/RotaryInputModifierKt$ModifierLocalRotaryScrollParent$1;->()V -HSPLandroidx/compose/ui/input/rotary/RotaryInputModifierKt$ModifierLocalRotaryScrollParent$1;->()V -HSPLandroidx/compose/ui/input/rotary/RotaryInputModifierKt$ModifierLocalRotaryScrollParent$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/ui/input/rotary/RotaryInputModifierKt$focusAwareCallback$1;->()V -HSPLandroidx/compose/ui/input/rotary/RotaryInputModifierKt;->()V -HSPLandroidx/compose/ui/layout/AlignmentLine;->(Lkotlin/jvm/functions/Function2;)V -HSPLandroidx/compose/ui/layout/AlignmentLineKt$FirstBaseline$1;->()V -HSPLandroidx/compose/ui/layout/AlignmentLineKt$FirstBaseline$1;->()V -HSPLandroidx/compose/ui/layout/AlignmentLineKt$LastBaseline$1;->()V -HSPLandroidx/compose/ui/layout/AlignmentLineKt$LastBaseline$1;->()V -HSPLandroidx/compose/ui/layout/AlignmentLineKt;->()V -HSPLandroidx/compose/ui/layout/BeyondBoundsLayoutKt$ModifierLocalBeyondBoundsLayout$1;->()V -HSPLandroidx/compose/ui/layout/BeyondBoundsLayoutKt$ModifierLocalBeyondBoundsLayout$1;->()V -HSPLandroidx/compose/ui/layout/BeyondBoundsLayoutKt$ModifierLocalBeyondBoundsLayout$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/ui/layout/BeyondBoundsLayoutKt;->()V -HSPLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt$lambda-1$1;->()V -HSPLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt$lambda-1$1;->()V -HSPLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt;->()V -HSPLandroidx/compose/ui/layout/ContentScale$Companion$Crop$1;->()V -HSPLandroidx/compose/ui/layout/ContentScale$Companion$Fit$1;->()V -HSPLandroidx/compose/ui/layout/ContentScale$Companion$Fit$1;->computeScaleFactor-H7hwNQA(JJ)J -HSPLandroidx/compose/ui/layout/ContentScale$Companion$Inside$1;->()V -HSPLandroidx/compose/ui/layout/ContentScale$Companion;->()V -HSPLandroidx/compose/ui/layout/FixedScale;->()V -HSPLandroidx/compose/ui/layout/HorizontalAlignmentLine;->(Lkotlin/jvm/functions/Function2;)V -HSPLandroidx/compose/ui/layout/LayoutId;->(Ljava/lang/String;)V -HSPLandroidx/compose/ui/layout/LayoutId;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/layout/LayoutId;->getLayoutId()Ljava/lang/Object; -HSPLandroidx/compose/ui/layout/LayoutId;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/layout/LayoutIdKt;->getLayoutId(Landroidx/compose/ui/layout/Measurable;)Ljava/lang/Object; -HSPLandroidx/compose/ui/layout/LayoutKt$materializerOf$1;->(Landroidx/compose/ui/Modifier;)V -HSPLandroidx/compose/ui/layout/LayoutKt$materializerOf$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/layout/LayoutKt;->materializerOf(Landroidx/compose/ui/Modifier;)Landroidx/compose/runtime/internal/ComposableLambdaImpl; -HSPLandroidx/compose/ui/layout/LayoutModifierImpl;->(Lkotlin/jvm/functions/Function3;)V -HSPLandroidx/compose/ui/layout/LayoutModifierImpl;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/layout/LayoutModifierImpl;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; -HSPLandroidx/compose/ui/layout/LayoutModifierKt;->layout(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->(Ljava/lang/Object;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V -HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)V -HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->getDensity()F -HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; -HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->subcompose(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/util/List; -HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure$1;->(Landroidx/compose/ui/layout/MeasureResult;Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;I)V -HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure$1;->getAlignmentLines()Ljava/util/Map; -HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure$1;->getHeight()I -HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure$1;->getWidth()I -HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure$1;->placeChildren()V -HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1;->(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;Lkotlin/jvm/functions/Function2;Ljava/lang/String;)V -HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; -HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$subcompose$2$1$1;->(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;Lkotlin/jvm/functions/Function2;)V -HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$subcompose$2$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;)V -HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->disposeOrReuseStartingFromIndex(I)V -HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->makeSureStateIsConsistent()V -HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->subcompose(Landroidx/compose/ui/node/LayoutNode;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V -HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->takeNodeFromReusables(Ljava/lang/Object;)Landroidx/compose/ui/node/LayoutNode; -HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->(IILjava/util/Map;Landroidx/compose/ui/layout/MeasureScope;Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->getAlignmentLines()Ljava/util/Map; -HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->getHeight()I -HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->getWidth()I -HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->placeChildren()V -HSPLandroidx/compose/ui/layout/MeasureScope;->layout(IILjava/util/Map;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult; -HSPLandroidx/compose/ui/layout/NoOpSubcomposeSlotReusePolicy;->()V -HSPLandroidx/compose/ui/layout/NoOpSubcomposeSlotReusePolicy;->()V -HSPLandroidx/compose/ui/layout/OnGloballyPositionedModifierImpl;->(Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/ui/layout/OnGloballyPositionedModifierImpl;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/layout/OnGloballyPositionedModifierImpl;->onGloballyPositioned(Landroidx/compose/ui/node/NodeCoordinator;)V -HSPLandroidx/compose/ui/layout/OnRemeasuredModifierKt;->onSizeChanged(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/ui/layout/OnSizeChangedModifier;->(Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/ui/layout/OnSizeChangedModifier;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/layout/OnSizeChangedModifier;->onRemeasured-ozmzZPI(J)V -HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;->(I)V -HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;->access$configureForPlacingForAlignment(Landroidx/compose/ui/layout/Placeable$PlacementScope$Companion;Landroidx/compose/ui/node/LookaheadCapablePlaceable;)Z -HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;->getParentLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; -HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->()V -HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->()V -HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->place$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;II)V -HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->place(Landroidx/compose/ui/layout/Placeable;IIF)V -HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->place-70tqf50(Landroidx/compose/ui/layout/Placeable;JF)V -HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeRelative$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;II)V -HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeRelativeWithLayer$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;II)V -HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeRelativeWithLayer-aW-9-wM$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;J)V -HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;IILkotlin/jvm/functions/Function1;I)V -HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer-aW-9-wM$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;J)V -HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer-aW-9-wM(Landroidx/compose/ui/layout/Placeable;JFLkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/ui/layout/Placeable;->()V -HSPLandroidx/compose/ui/layout/Placeable;->getApparentToRealOffset-nOcc-ac()J -HSPLandroidx/compose/ui/layout/Placeable;->getMeasuredHeight()I -HSPLandroidx/compose/ui/layout/Placeable;->getMeasuredWidth()I -HSPLandroidx/compose/ui/layout/Placeable;->recalculateWidthAndHeight()V -HSPLandroidx/compose/ui/layout/Placeable;->setMeasuredSize-ozmzZPI(J)V -HSPLandroidx/compose/ui/layout/Placeable;->setMeasurementConstraints-BRTryo0(J)V -HSPLandroidx/compose/ui/layout/PlaceableKt$DefaultLayerBlock$1;->()V -HSPLandroidx/compose/ui/layout/PlaceableKt$DefaultLayerBlock$1;->()V -HSPLandroidx/compose/ui/layout/PlaceableKt$DefaultLayerBlock$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/layout/PlaceableKt;->()V -HSPLandroidx/compose/ui/layout/RootMeasurePolicy$measure$2;->(Landroidx/compose/ui/layout/Placeable;)V -HSPLandroidx/compose/ui/layout/RootMeasurePolicy$measure$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/layout/RootMeasurePolicy;->()V -HSPLandroidx/compose/ui/layout/RootMeasurePolicy;->()V -HSPLandroidx/compose/ui/layout/RootMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; -HSPLandroidx/compose/ui/layout/ScaleFactor;->()V -HSPLandroidx/compose/ui/layout/ScaleFactorKt;->ScaleFactor(FF)J -HSPLandroidx/compose/ui/layout/ScaleFactorKt;->times-UQTWf7w(JJ)J -HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$$inlined$ComposeNode$1;->(Landroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;)V -HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$$inlined$ComposeNode$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$4;->(Landroidx/compose/ui/layout/SubcomposeLayoutState;)V -HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$4;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/runtime/State;)V -HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1$invoke$$inlined$onDispose$1;->dispose()V -HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1;->(Landroidx/compose/runtime/MutableState;)V -HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$6;->(Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;II)V -HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt;->SubcomposeLayout(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V -HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt;->SubcomposeLayout(Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V -HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setCompositionContext$1;->(Landroidx/compose/ui/layout/SubcomposeLayoutState;)V -HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setCompositionContext$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setMeasurePolicy$1;->(Landroidx/compose/ui/layout/SubcomposeLayoutState;)V -HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setMeasurePolicy$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1;->(Landroidx/compose/ui/layout/SubcomposeLayoutState;)V -HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->()V -HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->(Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;)V -HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->getState()Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState; -HSPLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;->(I)V -HSPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;->(Landroidx/compose/ui/modifier/ModifierLocalProvider;)V -HSPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;->contains$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Z -HSPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;->get$ui_release(Landroidx/compose/ui/modifier/ProvidableModifierLocal;)Ljava/lang/Object; -HSPLandroidx/compose/ui/modifier/EmptyMap;->()V -HSPLandroidx/compose/ui/modifier/EmptyMap;->()V -HSPLandroidx/compose/ui/modifier/EmptyMap;->contains$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Z -HSPLandroidx/compose/ui/modifier/ModifierLocal;->(Lkotlin/jvm/functions/Function0;)V -HSPLandroidx/compose/ui/modifier/ModifierLocalKt;->modifierLocalOf(Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/modifier/ProvidableModifierLocal; -HSPLandroidx/compose/ui/modifier/ModifierLocalManager$invalidate$1;->(Landroidx/compose/ui/modifier/ModifierLocalManager;)V -HSPLandroidx/compose/ui/modifier/ModifierLocalManager$invalidate$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/ui/modifier/ModifierLocalManager;->(Landroidx/compose/ui/node/Owner;)V -HSPLandroidx/compose/ui/modifier/ModifierLocalManager;->invalidate()V -HSPLandroidx/compose/ui/modifier/ModifierLocalManager;->invalidateConsumersOfNodeForKey(Landroidx/compose/ui/Modifier$Node;Landroidx/compose/ui/modifier/ModifierLocal;Ljava/util/HashSet;)V -HSPLandroidx/compose/ui/modifier/ModifierLocalMap;->()V -HSPLandroidx/compose/ui/modifier/ProvidableModifierLocal;->(Lkotlin/jvm/functions/Function0;)V -HSPLandroidx/compose/ui/node/AlignmentLines$recalculate$1;->(Landroidx/compose/ui/node/AlignmentLines;)V -HSPLandroidx/compose/ui/node/AlignmentLines$recalculate$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/node/AlignmentLines;->(Landroidx/compose/ui/node/AlignmentLinesOwner;)V -HSPLandroidx/compose/ui/node/AlignmentLines;->access$addAlignmentLine(Landroidx/compose/ui/node/AlignmentLines;Landroidx/compose/ui/layout/AlignmentLine;ILandroidx/compose/ui/node/NodeCoordinator;)V -HSPLandroidx/compose/ui/node/AlignmentLines;->getQueried$ui_release()Z -HSPLandroidx/compose/ui/node/AlignmentLines;->getRequired$ui_release()Z -HSPLandroidx/compose/ui/node/AlignmentLines;->onAlignmentsChanged()V -HSPLandroidx/compose/ui/node/AlignmentLines;->recalculate()V -HSPLandroidx/compose/ui/node/AlignmentLines;->recalculateQueryOwner()V -HSPLandroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$1;->(Landroidx/compose/ui/node/BackwardsCompatNode;)V -HSPLandroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$4;->(Landroidx/compose/ui/node/BackwardsCompatNode;)V -HSPLandroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$4;->onLayoutComplete()V -HSPLandroidx/compose/ui/node/BackwardsCompatNode$updateDrawCache$1;->(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/node/BackwardsCompatNode;)V -HSPLandroidx/compose/ui/node/BackwardsCompatNode$updateDrawCache$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/ui/node/BackwardsCompatNode$updateModifierLocalConsumer$1;->(Landroidx/compose/ui/node/BackwardsCompatNode;)V -HSPLandroidx/compose/ui/node/BackwardsCompatNode$updateModifierLocalConsumer$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/ui/node/BackwardsCompatNode;->(Landroidx/compose/ui/Modifier$Element;)V -HSPLandroidx/compose/ui/node/BackwardsCompatNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V -HSPLandroidx/compose/ui/node/BackwardsCompatNode;->getProvidedValues()Landroidx/compose/ui/modifier/ModifierLocalMap; -HSPLandroidx/compose/ui/node/BackwardsCompatNode;->getSemanticsConfiguration()Landroidx/compose/ui/semantics/SemanticsConfiguration; -HSPLandroidx/compose/ui/node/BackwardsCompatNode;->getSize-NH-jbRc()J -HSPLandroidx/compose/ui/node/BackwardsCompatNode;->initializeModifier(Z)V -HSPLandroidx/compose/ui/node/BackwardsCompatNode;->isValid()Z -HSPLandroidx/compose/ui/node/BackwardsCompatNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; -HSPLandroidx/compose/ui/node/BackwardsCompatNode;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onAttach()V -HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onDetach()V -HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onMeasureResultChanged()V -HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onPlaced(Landroidx/compose/ui/node/NodeCoordinator;)V -HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onRemeasured-ozmzZPI(J)V -HSPLandroidx/compose/ui/node/BackwardsCompatNode;->uninitializeModifier()V -HSPLandroidx/compose/ui/node/BackwardsCompatNode;->updateModifierLocalConsumer()V -HSPLandroidx/compose/ui/node/BackwardsCompatNode;->updateModifierLocalProvider(Landroidx/compose/ui/modifier/ModifierLocalProvider;)V -HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$DetachedModifierLocalReadScope$1;->()V -HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$DetachedModifierLocalReadScope$1;->getCurrent(Landroidx/compose/ui/modifier/ProvidableModifierLocal;)Ljava/lang/Object; -HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;->()V -HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;->()V -HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$updateModifierLocalConsumer$1;->()V -HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$updateModifierLocalConsumer$1;->()V -HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$updateModifierLocalConsumer$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt;->()V -HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1;->()V -HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1;->()V -HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetLayoutDirection$1;->()V -HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetLayoutDirection$1;->()V -HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetLayoutDirection$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetMeasurePolicy$1;->()V -HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetMeasurePolicy$1;->()V -HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetMeasurePolicy$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetModifier$1;->()V -HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetModifier$1;->()V -HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetModifier$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetViewConfiguration$1;->()V -HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetViewConfiguration$1;->()V -HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetViewConfiguration$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->()V -HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->()V -HSPLandroidx/compose/ui/node/ComposeUiNode;->()V -HSPLandroidx/compose/ui/node/DelegatableNodeKt;->access$addLayoutNodeChildren(Landroidx/compose/runtime/collection/MutableVector;Landroidx/compose/ui/Modifier$Node;)V -HSPLandroidx/compose/ui/node/DelegatableNodeKt;->requireCoordinator-64DMado(Landroidx/compose/ui/node/DelegatableNode;I)Landroidx/compose/ui/node/NodeCoordinator; -HSPLandroidx/compose/ui/node/DelegatableNodeKt;->requireLayoutNode(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/node/LayoutNode; -HSPLandroidx/compose/ui/node/DelegatableNodeKt;->requireOwner(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/node/Owner; -HSPLandroidx/compose/ui/node/DepthSortedSet$DepthComparator$1;->()V -HSPLandroidx/compose/ui/node/DepthSortedSet$DepthComparator$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I -HSPLandroidx/compose/ui/node/DepthSortedSet$mapOfOriginalDepth$2;->()V -HSPLandroidx/compose/ui/node/DepthSortedSet$mapOfOriginalDepth$2;->()V -HSPLandroidx/compose/ui/node/DepthSortedSet;->()V -HSPLandroidx/compose/ui/node/DepthSortedSet;->add(Landroidx/compose/ui/node/LayoutNode;)V -HSPLandroidx/compose/ui/node/DepthSortedSet;->remove(Landroidx/compose/ui/node/LayoutNode;)Z -HSPLandroidx/compose/ui/node/HitTestResult;->()V -HSPLandroidx/compose/ui/node/InnerNodeCoordinator$tail$1;->()V -HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->()V -HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->(Landroidx/compose/ui/node/LayoutNode;)V -HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->calculateAlignmentLine(Landroidx/compose/ui/layout/AlignmentLine;)I -HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->getTail()Landroidx/compose/ui/Modifier$Node; -HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable; -HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->performDraw(Landroidx/compose/ui/graphics/Canvas;)V -HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/ui/node/IntrinsicsPolicy;->(Landroidx/compose/ui/node/LayoutNode;)V -HSPLandroidx/compose/ui/node/LayerPositionalProperties;->()V -HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->()V -HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutModifierNode;)V -HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->calculateAlignmentLine(Landroidx/compose/ui/layout/AlignmentLine;)I -HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable; -HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->onLayoutModifierNodeChanged()V -HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->performDraw(Landroidx/compose/ui/graphics/Canvas;)V -HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinatorKt;->access$calculateAlignmentAndPlaceChildAsNeeded(Landroidx/compose/ui/node/LookaheadCapablePlaceable;Landroidx/compose/ui/layout/AlignmentLine;)I -HSPLandroidx/compose/ui/node/LayoutNode$$ExternalSyntheticLambda0;->()V -HSPLandroidx/compose/ui/node/LayoutNode$$ExternalSyntheticLambda0;->compare(Ljava/lang/Object;Ljava/lang/Object;)I -HSPLandroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;->()V -HSPLandroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;->()V -HSPLandroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/ui/node/LayoutNode$Companion$DummyViewConfiguration$1;->()V -HSPLandroidx/compose/ui/node/LayoutNode$Companion$ErrorMeasurePolicy$1;->()V -HSPLandroidx/compose/ui/node/LayoutNode$NoIntrinsicsMeasurePolicy;->(Ljava/lang/String;)V -HSPLandroidx/compose/ui/node/LayoutNode$WhenMappings;->()V -HSPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;->(Landroidx/compose/ui/node/LayoutNode;)V -HSPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/ui/node/LayoutNode;->()V -HSPLandroidx/compose/ui/node/LayoutNode;->(IZI)V -HSPLandroidx/compose/ui/node/LayoutNode;->attach$ui_release(Landroidx/compose/ui/node/Owner;)V -HSPLandroidx/compose/ui/node/LayoutNode;->clearSubtreeIntrinsicsUsage$ui_release()V -HSPLandroidx/compose/ui/node/LayoutNode;->clearSubtreePlacementIntrinsicsUsage()V -HSPLandroidx/compose/ui/node/LayoutNode;->detach$ui_release()V -HSPLandroidx/compose/ui/node/LayoutNode;->draw$ui_release(Landroidx/compose/ui/graphics/Canvas;)V -HSPLandroidx/compose/ui/node/LayoutNode;->getChildMeasurables$ui_release()Ljava/util/List; -HSPLandroidx/compose/ui/node/LayoutNode;->getChildren$ui_release()Ljava/util/List; -HSPLandroidx/compose/ui/node/LayoutNode;->getFoldedChildren$ui_release()Ljava/util/List; -HSPLandroidx/compose/ui/node/LayoutNode;->getZSortedChildren()Landroidx/compose/runtime/collection/MutableVector; -HSPLandroidx/compose/ui/node/LayoutNode;->get_children$ui_release()Landroidx/compose/runtime/collection/MutableVector; -HSPLandroidx/compose/ui/node/LayoutNode;->insertAt$ui_release(ILandroidx/compose/ui/node/LayoutNode;)V -HSPLandroidx/compose/ui/node/LayoutNode;->invalidateLayer$ui_release()V -HSPLandroidx/compose/ui/node/LayoutNode;->invalidateLayers$ui_release()V -HSPLandroidx/compose/ui/node/LayoutNode;->invalidateMeasurements$ui_release()V -HSPLandroidx/compose/ui/node/LayoutNode;->invalidateUnfoldedVirtualChildren()V -HSPLandroidx/compose/ui/node/LayoutNode;->isAttached()Z -HSPLandroidx/compose/ui/node/LayoutNode;->isValid()Z -HSPLandroidx/compose/ui/node/LayoutNode;->markNodeAndSubtreeAsPlaced()V -HSPLandroidx/compose/ui/node/LayoutNode;->onChildRemoved(Landroidx/compose/ui/node/LayoutNode;)V -HSPLandroidx/compose/ui/node/LayoutNode;->onZSortedChildrenInvalidated$ui_release()V -HSPLandroidx/compose/ui/node/LayoutNode;->remeasure-_Sx5XlM$ui_release(Landroidx/compose/ui/unit/Constraints;)Z -HSPLandroidx/compose/ui/node/LayoutNode;->removeAll$ui_release()V -HSPLandroidx/compose/ui/node/LayoutNode;->removeAt$ui_release(II)V -HSPLandroidx/compose/ui/node/LayoutNode;->replace$ui_release()V -HSPLandroidx/compose/ui/node/LayoutNode;->requestRelayout$ui_release(Z)V -HSPLandroidx/compose/ui/node/LayoutNode;->requestRemeasure$ui_release(Z)V -HSPLandroidx/compose/ui/node/LayoutNode;->rescheduleRemeasureOrRelayout$ui_release(Landroidx/compose/ui/node/LayoutNode;)V -HSPLandroidx/compose/ui/node/LayoutNode;->resetSubtreeIntrinsicsUsage$ui_release()V -HSPLandroidx/compose/ui/node/LayoutNode;->setDensity(Landroidx/compose/ui/unit/Density;)V -HSPLandroidx/compose/ui/node/LayoutNode;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V -HSPLandroidx/compose/ui/node/LayoutNode;->setMeasurePolicy(Landroidx/compose/ui/layout/MeasurePolicy;)V -HSPLandroidx/compose/ui/node/LayoutNode;->setViewConfiguration(Landroidx/compose/ui/platform/ViewConfiguration;)V -HSPLandroidx/compose/ui/node/LayoutNode;->shouldInvalidateParentLayer()Z -HSPLandroidx/compose/ui/node/LayoutNodeAlignmentLines;->(Landroidx/compose/ui/node/AlignmentLinesOwner;)V -HSPLandroidx/compose/ui/node/LayoutNodeAlignmentLines;->calculatePositionInParent-R5De75A(Landroidx/compose/ui/node/NodeCoordinator;J)J -HSPLandroidx/compose/ui/node/LayoutNodeAlignmentLines;->getAlignmentLinesMap(Landroidx/compose/ui/node/NodeCoordinator;)Ljava/util/Map; -HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->()V -HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->draw-x_KDEd0$ui_release(Landroidx/compose/ui/graphics/Canvas;JLandroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/node/DrawModifierNode;)V -HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawCircle-VaOC9Bg(JFJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V -HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawContent()V -HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawImage-AZ2fEMs(Landroidx/compose/ui/graphics/ImageBitmap;JJJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;II)V -HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawLine-NGM6Ib0(JJJFILandroidx/compose/ui/graphics/AndroidPathEffect;FLandroidx/compose/ui/graphics/ColorFilter;I)V -HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRect-AsUm42w(Landroidx/compose/ui/graphics/Brush;JJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V -HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRect-n-J9OG0(JJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V -HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRoundRect-u-Aw5IA(JJJJLandroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;I)V -HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getCenter-F1C5BW0()J -HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getDrawContext()Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1; -HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; -HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getSize-NH-jbRc()J -HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->roundToPx-0680j_4(F)I -HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->toPx-0680j_4(F)F -HSPLandroidx/compose/ui/node/LayoutNodeKt;->requireOwner(Landroidx/compose/ui/node/LayoutNode;)Landroidx/compose/ui/node/Owner; -HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$childMeasurables$1;->()V -HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$childMeasurables$1;->()V -HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$childMeasurables$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1;->(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;Landroidx/compose/ui/node/LayoutNode;)V -HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1;->(Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;JF)V -HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)V -HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->forEachChildAlignmentLinesOwner(Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->get(Landroidx/compose/ui/layout/AlignmentLine;)I -HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getAlignmentLines()Landroidx/compose/ui/node/AlignmentLines; -HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getInnerCoordinator()Landroidx/compose/ui/node/InnerNodeCoordinator; -HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getMeasuredWidth()I -HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getParentAlignmentLinesOwner()Landroidx/compose/ui/node/AlignmentLinesOwner; -HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getParentData()Ljava/lang/Object; -HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->isPlaced()Z -HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->layoutChildren()V -HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable; -HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->notifyChildrenUsingCoordinatesWhilePlacing()V -HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->placeOuterCoordinator-f8xVGno(JFLkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->remeasure-BRTryo0(J)Z -HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->requestMeasure()V -HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;->(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;J)V -HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->(Landroidx/compose/ui/node/LayoutNode;)V -HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getOuterCoordinator()Landroidx/compose/ui/node/NodeCoordinator; -HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->isOutMostLookaheadRoot(Landroidx/compose/ui/node/LayoutNode;)Z -HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegateKt;->access$updateChildMeasurables(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/runtime/collection/MutableVector;Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->()V -HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->get(Landroidx/compose/ui/layout/AlignmentLine;)I -HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->invalidateAlignmentLinesFromPositionChange(Landroidx/compose/ui/node/NodeCoordinator;)V -HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->(Landroidx/compose/ui/node/LayoutNode;)V -HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->callOnLayoutCompletedListeners()V -HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->dispatchOnPositionedCallbacks(Z)V -HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->doRemeasure-sdFAvZA(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/unit/Constraints;)Z -HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->forceMeasureTheSubtree(Landroidx/compose/ui/node/LayoutNode;)V -HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->measureAndLayout(Landroidx/compose/ui/platform/AndroidComposeView$resendMotionEventOnLayout$1;)Z -HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->measureOnly()V -HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->recurseRemeasure(Landroidx/compose/ui/node/LayoutNode;)V -HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->remeasureAndRelayoutIfNeeded(Landroidx/compose/ui/node/LayoutNode;)Z -HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->remeasureOnly(Landroidx/compose/ui/node/LayoutNode;)V -HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->requestRelayout(Landroidx/compose/ui/node/LayoutNode;Z)Z -HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->requestRemeasure(Landroidx/compose/ui/node/LayoutNode;Z)Z -HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->updateRootConstraints-BRTryo0(J)V -HSPLandroidx/compose/ui/node/MutableVectorWithMutationTracking;->(Landroidx/compose/runtime/collection/MutableVector;Landroidx/compose/ui/node/LayoutNode$_foldedChildren$1;)V -HSPLandroidx/compose/ui/node/NodeChain;->(Landroidx/compose/ui/node/LayoutNode;)V -HSPLandroidx/compose/ui/node/NodeChain;->attach()V -HSPLandroidx/compose/ui/node/NodeChain;->createAndInsertNodeAsParent(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node; -HSPLandroidx/compose/ui/node/NodeChain;->updateNodeAndReplaceIfNeeded(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node; -HSPLandroidx/compose/ui/node/NodeChainKt$SentinelHead$1;->()V -HSPLandroidx/compose/ui/node/NodeChainKt;->()V -HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$PointerInputSource$1;->()V -HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$SemanticsSource$1;->()V -HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayer$1;->()V -HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayer$1;->()V -HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayer$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayerParams$1;->()V -HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayerParams$1;->()V -HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayerParams$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/node/NodeCoordinator$invalidateParentLayer$1;->(Landroidx/compose/ui/node/NodeCoordinator;)V -HSPLandroidx/compose/ui/node/NodeCoordinator$invalidateParentLayer$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/ui/node/NodeCoordinator$invoke$1;->(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/graphics/Canvas;)V -HSPLandroidx/compose/ui/node/NodeCoordinator$invoke$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/ui/node/NodeCoordinator$updateLayerParameters$1;->(Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/ui/node/NodeCoordinator$updateLayerParameters$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/ui/node/NodeCoordinator;->()V -HSPLandroidx/compose/ui/node/NodeCoordinator;->(Landroidx/compose/ui/node/LayoutNode;)V -HSPLandroidx/compose/ui/node/NodeCoordinator;->draw(Landroidx/compose/ui/graphics/Canvas;)V -HSPLandroidx/compose/ui/node/NodeCoordinator;->drawContainedDrawModifiers(Landroidx/compose/ui/graphics/Canvas;)V -HSPLandroidx/compose/ui/node/NodeCoordinator;->getChild()Landroidx/compose/ui/node/LookaheadCapablePlaceable; -HSPLandroidx/compose/ui/node/NodeCoordinator;->getCoordinates()Landroidx/compose/ui/layout/LayoutCoordinates; -HSPLandroidx/compose/ui/node/NodeCoordinator;->getDensity()F -HSPLandroidx/compose/ui/node/NodeCoordinator;->getFontScale()F -HSPLandroidx/compose/ui/node/NodeCoordinator;->getHasMeasureResult()Z -HSPLandroidx/compose/ui/node/NodeCoordinator;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; -HSPLandroidx/compose/ui/node/NodeCoordinator;->getLayoutNode()Landroidx/compose/ui/node/LayoutNode; -HSPLandroidx/compose/ui/node/NodeCoordinator;->getMeasureResult$ui_release()Landroidx/compose/ui/layout/MeasureResult; -HSPLandroidx/compose/ui/node/NodeCoordinator;->getParent()Landroidx/compose/ui/node/LookaheadCapablePlaceable; -HSPLandroidx/compose/ui/node/NodeCoordinator;->getParentData()Ljava/lang/Object; -HSPLandroidx/compose/ui/node/NodeCoordinator;->getPosition-nOcc-ac()J -HSPLandroidx/compose/ui/node/NodeCoordinator;->getSize-YbymL2g()J -HSPLandroidx/compose/ui/node/NodeCoordinator;->headNode(Z)Landroidx/compose/ui/Modifier$Node; -HSPLandroidx/compose/ui/node/NodeCoordinator;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/node/NodeCoordinator;->isValid()Z -HSPLandroidx/compose/ui/node/NodeCoordinator;->onLayerBlockUpdated(Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/ui/node/NodeCoordinator;->onLayoutModifierNodeChanged()V -HSPLandroidx/compose/ui/node/NodeCoordinator;->onMeasured()V -HSPLandroidx/compose/ui/node/NodeCoordinator;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/ui/node/NodeCoordinator;->replace$ui_release()V -HSPLandroidx/compose/ui/node/NodeCoordinator;->setMeasureResult$ui_release(Landroidx/compose/ui/layout/MeasureResult;)V -HSPLandroidx/compose/ui/node/NodeCoordinator;->toParentPosition-MK-Hz9U(J)J -HSPLandroidx/compose/ui/node/NodeCoordinator;->updateLayerParameters()V -HSPLandroidx/compose/ui/node/NodeKindKt;->calculateNodeKindSetFrom(Landroidx/compose/ui/Modifier$Element;)I -HSPLandroidx/compose/ui/node/NodeKindKt;->getIncludeSelfInTraversal-H91voCI(I)Z -HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;->()V -HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;->()V -HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I -HSPLandroidx/compose/ui/node/OnPositionedDispatcher;->()V -HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayout$1;->()V -HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayout$1;->()V -HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayoutModifier$1;->()V -HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayoutModifier$1;->()V -HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayoutModifier$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingMeasure$1;->()V -HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingMeasure$1;->()V -HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingMeasure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->(Landroidx/compose/ui/platform/AndroidComposeView$snapshotObserver$1;)V -HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeReads$ui_release(Landroidx/compose/ui/node/OwnerScope;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V -HSPLandroidx/compose/ui/node/TreeSet;->(Landroidx/compose/ui/node/DepthSortedSet$DepthComparator$1;)V -HSPLandroidx/compose/ui/node/UiApplier;->(Landroidx/compose/ui/node/LayoutNode;)V -HSPLandroidx/compose/ui/node/UiApplier;->insertBottomUp(ILjava/lang/Object;)V -HSPLandroidx/compose/ui/node/UiApplier;->insertTopDown(ILjava/lang/Object;)V -HSPLandroidx/compose/ui/node/UiApplier;->onClear()V -HSPLandroidx/compose/ui/node/UiApplier;->onEndChanges()V -HSPLandroidx/compose/ui/node/UiApplier;->remove(II)V -HSPLandroidx/compose/ui/platform/AbstractComposeView$ensureCompositionCreated$1;->(Landroidx/compose/ui/platform/AbstractComposeView;)V -HSPLandroidx/compose/ui/platform/AbstractComposeView$ensureCompositionCreated$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/platform/AbstractComposeView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V -HSPLandroidx/compose/ui/platform/AbstractComposeView;->addView(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V -HSPLandroidx/compose/ui/platform/AbstractComposeView;->addView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V -HSPLandroidx/compose/ui/platform/AbstractComposeView;->checkAddView()V -HSPLandroidx/compose/ui/platform/AbstractComposeView;->ensureCompositionCreated()V -HSPLandroidx/compose/ui/platform/AbstractComposeView;->internalOnLayout$ui_release(ZIIII)V -HSPLandroidx/compose/ui/platform/AbstractComposeView;->internalOnMeasure$ui_release(II)V -HSPLandroidx/compose/ui/platform/AbstractComposeView;->isAlive(Landroidx/compose/runtime/CompositionContext;)Z -HSPLandroidx/compose/ui/platform/AbstractComposeView;->onAttachedToWindow()V -HSPLandroidx/compose/ui/platform/AbstractComposeView;->onLayout(ZIIII)V -HSPLandroidx/compose/ui/platform/AbstractComposeView;->onMeasure(II)V -HSPLandroidx/compose/ui/platform/AbstractComposeView;->onRtlPropertiesChanged(I)V -HSPLandroidx/compose/ui/platform/AbstractComposeView;->resolveParentCompositionContext()Landroidx/compose/runtime/CompositionContext; -HSPLandroidx/compose/ui/platform/AbstractComposeView;->setParentCompositionContext(Landroidx/compose/runtime/CompositionContext;)V -HSPLandroidx/compose/ui/platform/AbstractComposeView;->setParentContext(Landroidx/compose/runtime/CompositionContext;)V -HSPLandroidx/compose/ui/platform/AbstractComposeView;->setPreviousAttachedWindowToken(Landroid/os/IBinder;)V -HSPLandroidx/compose/ui/platform/AndroidAccessibilityManager;->(Landroid/content/Context;)V -HSPLandroidx/compose/ui/platform/AndroidClipboardManager;->(Landroid/content/Context;)V -HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda0;->(Landroidx/compose/ui/platform/AndroidComposeView;)V -HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda0;->onGlobalLayout()V -HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda1;->(Landroidx/compose/ui/platform/AndroidComposeView;)V -HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda2;->(Landroidx/compose/ui/platform/AndroidComposeView;)V -HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda2;->onTouchModeChanged(Z)V -HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda3;->(Landroidx/compose/ui/platform/AndroidComposeView;)V -HSPLandroidx/compose/ui/platform/AndroidComposeView$Companion;->()V -HSPLandroidx/compose/ui/platform/AndroidComposeView$Companion;->access$getIsShowingLayoutBounds()Z -HSPLandroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;->(Landroidx/lifecycle/LifecycleOwner;Landroidx/savedstate/SavedStateRegistryOwner;)V -HSPLandroidx/compose/ui/platform/AndroidComposeView$_inputModeManager$1;->(Landroidx/compose/ui/platform/AndroidComposeView;)V -HSPLandroidx/compose/ui/platform/AndroidComposeView$configurationChangeObserver$1;->()V -HSPLandroidx/compose/ui/platform/AndroidComposeView$configurationChangeObserver$1;->()V -HSPLandroidx/compose/ui/platform/AndroidComposeView$keyInputModifier$1;->(Landroidx/compose/ui/platform/AndroidComposeView;)V -HSPLandroidx/compose/ui/platform/AndroidComposeView$pointerIconService$1;->(Landroidx/compose/ui/platform/AndroidComposeView;)V -HSPLandroidx/compose/ui/platform/AndroidComposeView$resendMotionEventOnLayout$1;->(Landroidx/compose/ui/platform/AndroidComposeView;)V -HSPLandroidx/compose/ui/platform/AndroidComposeView$resendMotionEventOnLayout$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/ui/platform/AndroidComposeView$resendMotionEventRunnable$1;->(Landroidx/compose/ui/platform/AndroidComposeView;)V -HSPLandroidx/compose/ui/platform/AndroidComposeView$rotaryInputModifier$1;->()V -HSPLandroidx/compose/ui/platform/AndroidComposeView$rotaryInputModifier$1;->()V -HSPLandroidx/compose/ui/platform/AndroidComposeView$semanticsModifier$1;->()V -HSPLandroidx/compose/ui/platform/AndroidComposeView$semanticsModifier$1;->()V -HSPLandroidx/compose/ui/platform/AndroidComposeView$semanticsModifier$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/platform/AndroidComposeView$snapshotObserver$1;->(Landroidx/compose/ui/platform/AndroidComposeView;)V -HSPLandroidx/compose/ui/platform/AndroidComposeView$snapshotObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/platform/AndroidComposeView;->()V -HSPLandroidx/compose/ui/platform/AndroidComposeView;->(Landroid/content/Context;)V -HSPLandroidx/compose/ui/platform/AndroidComposeView;->convertMeasureSpec(I)Lkotlin/Pair; -HSPLandroidx/compose/ui/platform/AndroidComposeView;->createLayer(Landroidx/compose/ui/node/NodeCoordinator$invalidateParentLayer$1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/node/OwnedLayer; -HSPLandroidx/compose/ui/platform/AndroidComposeView;->dispatchDraw(Landroid/graphics/Canvas;)V -HSPLandroidx/compose/ui/platform/AndroidComposeView;->forceMeasureTheSubtree(Landroidx/compose/ui/node/LayoutNode;)V -HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAccessibilityManager()Landroidx/compose/ui/platform/AccessibilityManager; -HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAccessibilityManager()Landroidx/compose/ui/platform/AndroidAccessibilityManager; -HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAutofill()Landroidx/compose/ui/autofill/Autofill; -HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAutofillTree()Landroidx/compose/ui/autofill/AutofillTree; -HSPLandroidx/compose/ui/platform/AndroidComposeView;->getClipboardManager()Landroidx/compose/ui/platform/AndroidClipboardManager; -HSPLandroidx/compose/ui/platform/AndroidComposeView;->getClipboardManager()Landroidx/compose/ui/platform/ClipboardManager; -HSPLandroidx/compose/ui/platform/AndroidComposeView;->getDensity()Landroidx/compose/ui/unit/Density; -HSPLandroidx/compose/ui/platform/AndroidComposeView;->getFocusManager()Landroidx/compose/ui/focus/FocusManager; -HSPLandroidx/compose/ui/platform/AndroidComposeView;->getFontFamilyResolver()Landroidx/compose/ui/text/font/FontFamily$Resolver; -HSPLandroidx/compose/ui/platform/AndroidComposeView;->getFontLoader()Landroidx/compose/ui/text/font/Font$ResourceLoader; -HSPLandroidx/compose/ui/platform/AndroidComposeView;->getHapticFeedBack()Landroidx/compose/ui/hapticfeedback/HapticFeedback; -HSPLandroidx/compose/ui/platform/AndroidComposeView;->getInputModeManager()Landroidx/compose/ui/input/InputModeManager; -HSPLandroidx/compose/ui/platform/AndroidComposeView;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; -HSPLandroidx/compose/ui/platform/AndroidComposeView;->getModifierLocalManager()Landroidx/compose/ui/modifier/ModifierLocalManager; -HSPLandroidx/compose/ui/platform/AndroidComposeView;->getPointerIconService()Landroidx/compose/ui/input/pointer/PointerIconService; -HSPLandroidx/compose/ui/platform/AndroidComposeView;->getRoot()Landroidx/compose/ui/node/LayoutNode; -HSPLandroidx/compose/ui/platform/AndroidComposeView;->getSemanticsOwner()Landroidx/compose/ui/semantics/SemanticsOwner; -HSPLandroidx/compose/ui/platform/AndroidComposeView;->getSharedDrawScope()Landroidx/compose/ui/node/LayoutNodeDrawScope; -HSPLandroidx/compose/ui/platform/AndroidComposeView;->getShowLayoutBounds()Z -HSPLandroidx/compose/ui/platform/AndroidComposeView;->getSnapshotObserver()Landroidx/compose/ui/node/OwnerSnapshotObserver; -HSPLandroidx/compose/ui/platform/AndroidComposeView;->getTextInputService()Landroidx/compose/ui/text/input/TextInputService; -HSPLandroidx/compose/ui/platform/AndroidComposeView;->getTextToolbar()Landroidx/compose/ui/platform/TextToolbar; -HSPLandroidx/compose/ui/platform/AndroidComposeView;->getView()Landroid/view/View; -HSPLandroidx/compose/ui/platform/AndroidComposeView;->getViewConfiguration()Landroidx/compose/ui/platform/ViewConfiguration; -HSPLandroidx/compose/ui/platform/AndroidComposeView;->getViewTreeOwners()Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners; -HSPLandroidx/compose/ui/platform/AndroidComposeView;->getWindowInfo()Landroidx/compose/ui/platform/WindowInfo; -HSPLandroidx/compose/ui/platform/AndroidComposeView;->invalidateLayers(Landroidx/compose/ui/node/LayoutNode;)V -HSPLandroidx/compose/ui/platform/AndroidComposeView;->invalidateLayoutNodeMeasurement(Landroidx/compose/ui/node/LayoutNode;)V -HSPLandroidx/compose/ui/platform/AndroidComposeView;->measureAndLayout(Z)V -HSPLandroidx/compose/ui/platform/AndroidComposeView;->notifyLayerIsDirty$ui_release(Landroidx/compose/ui/node/OwnedLayer;Z)V -HSPLandroidx/compose/ui/platform/AndroidComposeView;->onAttach(Landroidx/compose/ui/node/LayoutNode;)V -HSPLandroidx/compose/ui/platform/AndroidComposeView;->onAttachedToWindow()V -HSPLandroidx/compose/ui/platform/AndroidComposeView;->onDetach(Landroidx/compose/ui/node/LayoutNode;)V -HSPLandroidx/compose/ui/platform/AndroidComposeView;->onDraw(Landroid/graphics/Canvas;)V -HSPLandroidx/compose/ui/platform/AndroidComposeView;->onEndApplyChanges()V -HSPLandroidx/compose/ui/platform/AndroidComposeView;->onLayout(ZIIII)V -HSPLandroidx/compose/ui/platform/AndroidComposeView;->onLayoutChange(Landroidx/compose/ui/node/LayoutNode;)V -HSPLandroidx/compose/ui/platform/AndroidComposeView;->onMeasure(II)V -HSPLandroidx/compose/ui/platform/AndroidComposeView;->onRequestMeasure(Landroidx/compose/ui/node/LayoutNode;ZZ)V -HSPLandroidx/compose/ui/platform/AndroidComposeView;->onRequestRelayout(Landroidx/compose/ui/node/LayoutNode;ZZ)V -HSPLandroidx/compose/ui/platform/AndroidComposeView;->onResume(Landroidx/lifecycle/LifecycleOwner;)V -HSPLandroidx/compose/ui/platform/AndroidComposeView;->onRtlPropertiesChanged(I)V -HSPLandroidx/compose/ui/platform/AndroidComposeView;->onSemanticsChange()V -HSPLandroidx/compose/ui/platform/AndroidComposeView;->onWindowFocusChanged(Z)V -HSPLandroidx/compose/ui/platform/AndroidComposeView;->registerOnEndApplyChangesListener(Lkotlin/jvm/functions/Function0;)V -HSPLandroidx/compose/ui/platform/AndroidComposeView;->registerOnLayoutCompletedListener(Landroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$4;)V -HSPLandroidx/compose/ui/platform/AndroidComposeView;->requestOnPositionedCallback(Landroidx/compose/ui/node/LayoutNode;)V -HSPLandroidx/compose/ui/platform/AndroidComposeView;->scheduleMeasureAndLayout(Landroidx/compose/ui/node/LayoutNode;)V -HSPLandroidx/compose/ui/platform/AndroidComposeView;->setConfigurationChangeObserver(Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/ui/platform/AndroidComposeView;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V -HSPLandroidx/compose/ui/platform/AndroidComposeView;->setOnViewTreeOwnersAvailable(Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/ui/platform/AndroidComposeView;->setShowLayoutBounds(Z)V -HSPLandroidx/compose/ui/platform/AndroidComposeView;->setViewTreeOwners(Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;)V -HSPLandroidx/compose/ui/platform/AndroidComposeView;->updatePositionCacheAndDispatch()V -HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda0;->(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V -HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;->(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V -HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;->onViewAttachedToWindow(Landroid/view/View;)V -HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider;->(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V -HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$SemanticsNodeCopy;->(Landroidx/compose/ui/semantics/SemanticsNode;Ljava/util/Map;)V -HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1;->(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sendScrollEventIfNeededLambda$1;->(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V -HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->()V -HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->(Landroidx/compose/ui/platform/AndroidComposeView;)V -HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->boundsUpdatesEventLoop(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->isAccessibilityEnabled()Z -HSPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;)V -HSPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;->()V -HSPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;->()V -HSPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;->disallowForceDark(Landroid/view/View;)V -HSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;I)V -HSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO$$ExternalSyntheticApiModelOutline1;->m(Landroid/view/View;Z)V -HSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;->()V -HSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;->()V -HSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;->focusable(Landroid/view/View;IZ)V -HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalConfiguration$1;->()V -HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalConfiguration$1;->()V -HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalContext$1;->()V -HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalContext$1;->()V -HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalImageVectorCache$1;->()V -HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalImageVectorCache$1;->()V -HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalLifecycleOwner$1;->()V -HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalLifecycleOwner$1;->()V -HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalSavedStateRegistryOwner$1;->()V -HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalSavedStateRegistryOwner$1;->()V -HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalView$1;->()V -HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalView$1;->()V -HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$1$1;->(Landroidx/compose/runtime/MutableState;)V -HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2$invoke$$inlined$onDispose$1;->(Landroidx/compose/ui/platform/DisposableSaveableStateRegistry;)V -HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2;->(Landroidx/compose/ui/platform/DisposableSaveableStateRegistry;)V -HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$3;->(Landroidx/compose/ui/platform/AndroidComposeView;Landroidx/compose/ui/platform/AndroidUriHandler;Lkotlin/jvm/functions/Function2;I)V -HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$4;->(Landroidx/compose/ui/platform/AndroidComposeView;Lkotlin/jvm/functions/Function2;I)V -HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1$invoke$$inlined$onDispose$1;->(Landroid/content/Context;Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;)V -HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1;->(Landroid/content/Context;Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;)V -HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;->(Landroid/content/res/Configuration;Landroidx/compose/ui/res/ImageVectorCache;)V -HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->()V -HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->ProvideAndroidCompositionLocals(Landroidx/compose/ui/platform/AndroidComposeView;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V -HSPLandroidx/compose/ui/platform/AndroidFontResourceLoader;->(Landroid/content/Context;)V -HSPLandroidx/compose/ui/platform/AndroidTextToolbar;->(Landroid/view/View;)V -HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion$Main$2;->()V -HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion$Main$2;->()V -HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion$Main$2;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion$currentThread$1;->()V -HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;->(Landroidx/compose/ui/platform/AndroidUiDispatcher;)V -HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;->doFrame(J)V -HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;->run()V -HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->()V -HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->(Landroid/view/Choreographer;Landroid/os/Handler;)V -HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$performTrampolineDispatch(Landroidx/compose/ui/platform/AndroidUiDispatcher;)V -HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V -HSPLandroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$1;->(Landroidx/compose/ui/platform/AndroidUiDispatcher;Landroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1;)V -HSPLandroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1;->(Lkotlinx/coroutines/CancellableContinuationImpl;Landroidx/compose/ui/platform/AndroidUiFrameClock;Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1;->doFrame(J)V -HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->(Landroid/view/Choreographer;)V -HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; -HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; -HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; -HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLandroidx/compose/ui/platform/AndroidUriHandler;->(Landroid/content/Context;)V -HSPLandroidx/compose/ui/platform/AndroidViewConfiguration;->(Landroid/view/ViewConfiguration;)V -HSPLandroidx/compose/ui/platform/CalculateMatrixToWindowApi29;->()V -HSPLandroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt$lambda-1$1;->()V -HSPLandroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt$lambda-1$1;->()V -HSPLandroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt;->()V -HSPLandroidx/compose/ui/platform/ComposeView$Content$1;->(Landroidx/compose/ui/platform/ComposeView;I)V -HSPLandroidx/compose/ui/platform/ComposeView;->(Landroid/content/Context;)V -HSPLandroidx/compose/ui/platform/ComposeView;->Content(Landroidx/compose/runtime/Composer;I)V -HSPLandroidx/compose/ui/platform/ComposeView;->getShouldCreateCompositionOnAttachedToWindow()Z -HSPLandroidx/compose/ui/platform/ComposeView;->setContent(Lkotlin/jvm/functions/Function2;)V -HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalAccessibilityManager$1;->()V -HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalAccessibilityManager$1;->()V -HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalAutofill$1;->()V -HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalAutofill$1;->()V -HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalAutofillTree$1;->()V -HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalAutofillTree$1;->()V -HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalClipboardManager$1;->()V -HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalClipboardManager$1;->()V -HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalDensity$1;->()V -HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalDensity$1;->()V -HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalFocusManager$1;->()V -HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalFocusManager$1;->()V -HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalFontFamilyResolver$1;->()V -HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalFontFamilyResolver$1;->()V -HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalFontLoader$1;->()V -HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalFontLoader$1;->()V -HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalHapticFeedback$1;->()V -HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalHapticFeedback$1;->()V -HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalInputModeManager$1;->()V -HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalInputModeManager$1;->()V -HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalLayoutDirection$1;->()V -HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalLayoutDirection$1;->()V -HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalPointerIconService$1;->()V -HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalPointerIconService$1;->()V -HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalTextInputService$1;->()V -HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalTextInputService$1;->()V -HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalTextToolbar$1;->()V -HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalTextToolbar$1;->()V -HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalUriHandler$1;->()V -HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalUriHandler$1;->()V -HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalViewConfiguration$1;->()V -HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalViewConfiguration$1;->()V -HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalWindowInfo$1;->()V -HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalWindowInfo$1;->()V -HSPLandroidx/compose/ui/platform/CompositionLocalsKt$ProvideCommonCompositionLocals$1;->(Landroidx/compose/ui/node/Owner;Landroidx/compose/ui/platform/UriHandler;Lkotlin/jvm/functions/Function2;I)V -HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->()V -HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->ProvideCommonCompositionLocals(Landroidx/compose/ui/node/Owner;Landroidx/compose/ui/platform/UriHandler;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V -HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->(Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl;Landroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;)V -HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->canBeSaved(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object; -HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->registerProvider(Ljava/lang/String;Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1;)Landroidx/compose/runtime/saveable/SaveableStateRegistry$Entry; -HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;->(ZLandroidx/savedstate/SavedStateRegistry;Ljava/lang/String;)V -HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$registered$1;->(Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl;)V -HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$saveableStateRegistry$1;->()V -HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$saveableStateRegistry$1;->()V -HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$saveableStateRegistry$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt;->()V -HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt;->canBeSavedToBundle(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;->(Lkotlinx/coroutines/channels/Channel;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$2;->(Lkotlinx/coroutines/channels/AbstractChannel;)V -HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/platform/GlobalSnapshotManager;->()V -HSPLandroidx/compose/ui/platform/InfiniteAnimationPolicy$Key;->()V -HSPLandroidx/compose/ui/platform/InfiniteAnimationPolicy$Key;->()V -HSPLandroidx/compose/ui/platform/InspectableModifier$End;->()V -HSPLandroidx/compose/ui/platform/InspectableModifier;->()V -HSPLandroidx/compose/ui/platform/InspectableValueKt$NoInspectorInfo$1;->()V -HSPLandroidx/compose/ui/platform/InspectableValueKt$NoInspectorInfo$1;->()V -HSPLandroidx/compose/ui/platform/InspectableValueKt;->inspectableWrapper(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/ui/platform/InspectionModeKt$LocalInspectionMode$1;->()V -HSPLandroidx/compose/ui/platform/InspectionModeKt$LocalInspectionMode$1;->()V -HSPLandroidx/compose/ui/platform/InspectionModeKt$LocalInspectionMode$1;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/ui/platform/InspectionModeKt;->()V -HSPLandroidx/compose/ui/platform/InspectorValueInfo;->(Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/ui/platform/LayerMatrixCache;->(Lkotlin/jvm/functions/Function2;)V -HSPLandroidx/compose/ui/platform/LayerMatrixCache;->calculateMatrix-GrdbGEg(Ljava/lang/Object;)[F -HSPLandroidx/compose/ui/platform/LayerMatrixCache;->invalidate()V -HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->()V -HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; -HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; -HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->getScaleFactor()F -HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; -HSPLandroidx/compose/ui/platform/OutlineResolver;->(Landroidx/compose/ui/unit/Density;)V -HSPLandroidx/compose/ui/platform/OutlineResolver;->getOutline()Landroid/graphics/Outline; -HSPLandroidx/compose/ui/platform/OutlineResolver;->update(Landroidx/compose/ui/graphics/Shape;FZFLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Z -HSPLandroidx/compose/ui/platform/OutlineResolver;->updateCache()V -HSPLandroidx/compose/ui/platform/RenderNodeApi29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Canvas;Landroid/graphics/RenderNode;)V -HSPLandroidx/compose/ui/platform/RenderNodeApi29;->(Landroidx/compose/ui/platform/AndroidComposeView;)V -HSPLandroidx/compose/ui/platform/RenderNodeApi29;->drawInto(Landroid/graphics/Canvas;)V -HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getAlpha()F -HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getClipToOutline()Z -HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getElevation()F -HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getHasDisplayList()Z -HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getHeight()I -HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getLeft()I -HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getMatrix(Landroid/graphics/Matrix;)V -HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getTop()I -HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getWidth()I -HSPLandroidx/compose/ui/platform/RenderNodeApi29;->offsetLeftAndRight(I)V -HSPLandroidx/compose/ui/platform/RenderNodeApi29;->offsetTopAndBottom(I)V -HSPLandroidx/compose/ui/platform/RenderNodeApi29;->record(Landroidx/compose/ui/graphics/CanvasHolder;Landroidx/compose/ui/graphics/Path;Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setAlpha(F)V -HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setAmbientShadowColor(I)V -HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setCameraDistance(F)V -HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setClipToBounds(Z)V -HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setClipToOutline(Z)V -HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setElevation(F)V -HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setHasOverlappingRendering()Z -HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setOutline(Landroid/graphics/Outline;)V -HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setPivotX(F)V -HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setPivotY(F)V -HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setPosition(IIII)Z -HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setRenderEffect()V -HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setRotationX(F)V -HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setRotationY(F)V -HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setRotationZ(F)V -HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setScaleX(F)V -HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setScaleY(F)V -HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setSpotShadowColor(I)V -HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setTranslationX(F)V -HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setTranslationY(F)V -HSPLandroidx/compose/ui/platform/RenderNodeApi29VerificationHelper$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)V -HSPLandroidx/compose/ui/platform/RenderNodeApi29VerificationHelper;->()V -HSPLandroidx/compose/ui/platform/RenderNodeApi29VerificationHelper;->()V -HSPLandroidx/compose/ui/platform/RenderNodeApi29VerificationHelper;->setRenderEffect(Landroid/graphics/RenderNode;Landroidx/compose/ui/graphics/RenderEffect;)V -HSPLandroidx/compose/ui/platform/RenderNodeLayer$Companion$getMatrix$1;->()V -HSPLandroidx/compose/ui/platform/RenderNodeLayer$Companion$getMatrix$1;->()V -HSPLandroidx/compose/ui/platform/RenderNodeLayer$Companion$getMatrix$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/platform/RenderNodeLayer;->(Landroidx/compose/ui/platform/AndroidComposeView;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/node/NodeCoordinator$invalidateParentLayer$1;)V -HSPLandroidx/compose/ui/platform/RenderNodeLayer;->drawLayer(Landroidx/compose/ui/graphics/Canvas;)V -HSPLandroidx/compose/ui/platform/RenderNodeLayer;->invalidate()V -HSPLandroidx/compose/ui/platform/RenderNodeLayer;->mapOffset-8S9VItk(JZ)J -HSPLandroidx/compose/ui/platform/RenderNodeLayer;->move--gyyYBs(J)V -HSPLandroidx/compose/ui/platform/RenderNodeLayer;->resize-ozmzZPI(J)V -HSPLandroidx/compose/ui/platform/RenderNodeLayer;->setDirty(Z)V -HSPLandroidx/compose/ui/platform/RenderNodeLayer;->updateDisplayList()V -HSPLandroidx/compose/ui/platform/RenderNodeLayer;->updateLayerProperties-NHXXZp8(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZJJLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)V -HSPLandroidx/compose/ui/platform/TestTagKt$testTag$1;->(Ljava/lang/String;)V -HSPLandroidx/compose/ui/platform/TestTagKt$testTag$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/platform/TestTagKt;->testTag(Landroidx/compose/ui/Modifier;Ljava/lang/String;)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$1;->(Landroidx/compose/ui/platform/AbstractComposeView;Landroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$listener$1;Landroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$poolingContainerListener$1;)V -HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$listener$1;->(Landroidx/compose/ui/platform/AbstractComposeView;)V -HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$listener$1;->onViewAttachedToWindow(Landroid/view/View;)V -HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$poolingContainerListener$1;->()V -HSPLandroidx/compose/ui/platform/ViewConfiguration;->getMinimumTouchTargetSize-MYxV2XQ()J -HSPLandroidx/compose/ui/platform/ViewLayer$Companion$OutlineProvider$1;->()V -HSPLandroidx/compose/ui/platform/ViewLayer;->()V -HSPLandroidx/compose/ui/platform/WeakCache;->()V -HSPLandroidx/compose/ui/platform/WindowInfoImpl;->()V -HSPLandroidx/compose/ui/platform/WindowInfoImpl;->()V -HSPLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion$LifecycleAware$1;->()V -HSPLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion$LifecycleAware$1;->()V -HSPLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion$LifecycleAware$1;->createRecomposer(Landroid/view/View;)Landroidx/compose/runtime/Recomposer; -HSPLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion;->()V -HSPLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion;->()V -HSPLandroidx/compose/ui/platform/WindowRecomposerFactory;->()V -HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$1;->(Lkotlinx/coroutines/StandaloneCoroutine;)V -HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$1;->onViewAttachedToWindow(Landroid/view/View;)V -HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;->(Landroidx/compose/runtime/Recomposer;Landroid/view/View;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy;->()V -HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;->(Landroid/view/View;Landroidx/compose/runtime/Recomposer;)V -HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;->onViewAttachedToWindow(Landroid/view/View;)V -HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$WhenMappings;->()V -HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1$1;->(Landroidx/compose/ui/platform/MotionDurationScaleImpl;)V -HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;->(Lkotlinx/coroutines/flow/StateFlow;Landroidx/compose/ui/platform/MotionDurationScaleImpl;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->(Lkotlin/jvm/internal/Ref$ObjectRef;Landroidx/compose/runtime/Recomposer;Landroidx/lifecycle/LifecycleOwner;Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;Landroid/view/View;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;->(Lkotlinx/coroutines/internal/ContextScope;Landroidx/compose/runtime/PausableMonotonicFrameClock;Landroidx/compose/runtime/Recomposer;Lkotlin/jvm/internal/Ref$ObjectRef;Landroid/view/View;)V -HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V -HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->(Landroid/content/ContentResolver;Landroid/net/Uri;Landroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$contentObserver$1;Lkotlinx/coroutines/channels/Channel;Landroid/content/Context;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$contentObserver$1;->(Lkotlinx/coroutines/channels/AbstractChannel;Landroid/os/Handler;)V -HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->()V -HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->access$getAnimationScaleFlowFor(Landroid/content/Context;)Lkotlinx/coroutines/flow/StateFlow; -HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->getCompositionContext(Landroid/view/View;)Landroidx/compose/runtime/CompositionContext; -HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;->(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$2;->(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$3;->(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/jvm/functions/Function2;)V -HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1;->(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/jvm/functions/Function2;)V -HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1;->(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/jvm/functions/Function2;)V -HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/platform/WrappedComposition;->(Landroidx/compose/ui/platform/AndroidComposeView;Landroidx/compose/runtime/CompositionImpl;)V -HSPLandroidx/compose/ui/platform/WrappedComposition;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V -HSPLandroidx/compose/ui/platform/WrappedComposition;->setContent(Lkotlin/jvm/functions/Function2;)V -HSPLandroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/ViewParent;Landroid/view/View;Landroid/view/View;)V -HSPLandroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;->()V -HSPLandroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;->()V -HSPLandroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;->onDescendantInvalidated(Landroidx/compose/ui/platform/AndroidComposeView;)V -HSPLandroidx/compose/ui/platform/WrapperVerificationHelperMethods$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;)Ljava/util/Map; -HSPLandroidx/compose/ui/platform/WrapperVerificationHelperMethods;->()V -HSPLandroidx/compose/ui/platform/WrapperVerificationHelperMethods;->()V -HSPLandroidx/compose/ui/platform/WrapperVerificationHelperMethods;->attributeSourceResourceMap(Landroid/view/View;)Ljava/util/Map; -HSPLandroidx/compose/ui/platform/Wrapper_androidKt;->()V -HSPLandroidx/compose/ui/platform/Wrapper_androidKt;->setContent(Landroidx/compose/ui/platform/AbstractComposeView;Landroidx/compose/runtime/CompositionContext;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)Landroidx/compose/runtime/Composition; -HSPLandroidx/compose/ui/res/ImageVectorCache$ImageVectorEntry;->(Landroidx/compose/ui/graphics/vector/ImageVector;I)V -HSPLandroidx/compose/ui/res/ImageVectorCache$Key;->(ILandroid/content/res/Resources$Theme;)V -HSPLandroidx/compose/ui/res/ImageVectorCache$Key;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/res/ImageVectorCache$Key;->hashCode()I -HSPLandroidx/compose/ui/res/ImageVectorCache;->()V -HSPLandroidx/compose/ui/res/PainterResources_androidKt;->painterResource(ILandroidx/compose/runtime/Composer;)Landroidx/compose/ui/graphics/painter/Painter; -HSPLandroidx/compose/ui/res/Resources_androidKt;->resources(Landroidx/compose/runtime/Composer;)Landroid/content/res/Resources; -HSPLandroidx/compose/ui/semantics/AccessibilityAction;->(Ljava/lang/String;Lkotlin/Function;)V -HSPLandroidx/compose/ui/semantics/AccessibilityAction;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/semantics/CollectionInfo;->(II)V -HSPLandroidx/compose/ui/semantics/Role;->(I)V -HSPLandroidx/compose/ui/semantics/Role;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/semantics/ScrollAxisRange;->(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Z)V -HSPLandroidx/compose/ui/semantics/SemanticsActions;->()V -HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->()V -HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->contains(Landroidx/compose/ui/semantics/SemanticsPropertyKey;)Z -HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->set(Landroidx/compose/ui/semantics/SemanticsPropertyKey;Ljava/lang/Object;)V -HSPLandroidx/compose/ui/semantics/SemanticsModifierCore;->()V -HSPLandroidx/compose/ui/semantics/SemanticsModifierCore;->(ZZLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V -HSPLandroidx/compose/ui/semantics/SemanticsModifierCore;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/semantics/SemanticsModifierCore;->getSemanticsConfiguration()Landroidx/compose/ui/semantics/SemanticsConfiguration; -HSPLandroidx/compose/ui/semantics/SemanticsModifierKt;->clearAndSetSemantics(Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/ui/semantics/SemanticsModifierKt;->semantics(Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; -HSPLandroidx/compose/ui/semantics/SemanticsNode;->(Landroidx/compose/ui/node/SemanticsModifierNode;ZLandroidx/compose/ui/node/LayoutNode;)V -HSPLandroidx/compose/ui/semantics/SemanticsNode;->getChildren(Z)Ljava/util/List; -HSPLandroidx/compose/ui/semantics/SemanticsNode;->isMergingSemanticsOfDescendants()Z -HSPLandroidx/compose/ui/semantics/SemanticsNode;->unmergedChildren$ui_release(ZZ)Ljava/util/List; -HSPLandroidx/compose/ui/semantics/SemanticsNodeKt;->findOneLayerOfSemanticsWrappers(Landroidx/compose/ui/node/LayoutNode;Ljava/util/List;)V -HSPLandroidx/compose/ui/semantics/SemanticsNodeKt;->getOuterSemantics(Landroidx/compose/ui/node/LayoutNode;)Landroidx/compose/ui/node/SemanticsModifierNode; -HSPLandroidx/compose/ui/semantics/SemanticsOwner;->(Landroidx/compose/ui/node/LayoutNode;)V -HSPLandroidx/compose/ui/semantics/SemanticsOwner;->getUnmergedRootSemanticsNode()Landroidx/compose/ui/semantics/SemanticsNode; -HSPLandroidx/compose/ui/semantics/SemanticsProperties$ContentDescription$1;->()V -HSPLandroidx/compose/ui/semantics/SemanticsProperties$ContentDescription$1;->()V -HSPLandroidx/compose/ui/semantics/SemanticsProperties$InvisibleToUser$1;->()V -HSPLandroidx/compose/ui/semantics/SemanticsProperties$InvisibleToUser$1;->()V -HSPLandroidx/compose/ui/semantics/SemanticsProperties$IsDialog$1;->()V -HSPLandroidx/compose/ui/semantics/SemanticsProperties$IsDialog$1;->()V -HSPLandroidx/compose/ui/semantics/SemanticsProperties$IsPopup$1;->()V -HSPLandroidx/compose/ui/semantics/SemanticsProperties$IsPopup$1;->()V -HSPLandroidx/compose/ui/semantics/SemanticsProperties$PaneTitle$1;->()V -HSPLandroidx/compose/ui/semantics/SemanticsProperties$PaneTitle$1;->()V -HSPLandroidx/compose/ui/semantics/SemanticsProperties$Role$1;->()V -HSPLandroidx/compose/ui/semantics/SemanticsProperties$Role$1;->()V -HSPLandroidx/compose/ui/semantics/SemanticsProperties$TestTag$1;->()V -HSPLandroidx/compose/ui/semantics/SemanticsProperties$TestTag$1;->()V -HSPLandroidx/compose/ui/semantics/SemanticsProperties$Text$1;->()V -HSPLandroidx/compose/ui/semantics/SemanticsProperties$Text$1;->()V -HSPLandroidx/compose/ui/semantics/SemanticsProperties;->()V -HSPLandroidx/compose/ui/semantics/SemanticsPropertiesAndroid$TestTagsAsResourceId$1;->()V -HSPLandroidx/compose/ui/semantics/SemanticsPropertiesAndroid$TestTagsAsResourceId$1;->()V -HSPLandroidx/compose/ui/semantics/SemanticsPropertiesAndroid;->()V -HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt$ActionPropertyKey$1;->()V -HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt$ActionPropertyKey$1;->()V -HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->()V -HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setContentDescription(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;)V -HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setRole-kuIjeqM(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;I)V -HSPLandroidx/compose/ui/semantics/SemanticsProperties_androidKt;->()V -HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey$1;->()V -HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey$1;->()V -HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey;->(Ljava/lang/String;Lkotlin/jvm/functions/Function2;)V -HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey;->setValue(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Lkotlin/reflect/KProperty;Ljava/lang/Object;)V -HSPLandroidx/compose/ui/state/ToggleableState;->()V -HSPLandroidx/compose/ui/state/ToggleableState;->(ILjava/lang/String;)V -HSPLandroidx/compose/ui/text/AndroidParagraph$wordBoundary$2;->(Landroidx/compose/ui/text/AndroidParagraph;)V -HSPLandroidx/compose/ui/text/AndroidParagraph;->(Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;IZJ)V -HSPLandroidx/compose/ui/text/AndroidParagraph;->constructTextLayout(IILandroid/text/TextUtils$TruncateAt;IIIII)Landroidx/compose/ui/text/android/TextLayout; -HSPLandroidx/compose/ui/text/AndroidParagraph;->getFirstBaseline()F -HSPLandroidx/compose/ui/text/AndroidParagraph;->getHeight()F -HSPLandroidx/compose/ui/text/AndroidParagraph;->getLastBaseline()F -HSPLandroidx/compose/ui/text/AndroidParagraph;->getPlaceholderRects()Ljava/util/List; -HSPLandroidx/compose/ui/text/AndroidParagraph;->getWidth()F -HSPLandroidx/compose/ui/text/AndroidParagraph;->paint(Landroidx/compose/ui/graphics/Canvas;)V -HSPLandroidx/compose/ui/text/AndroidParagraph;->paint-RPmYEkk(Landroidx/compose/ui/graphics/Canvas;JLandroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/style/TextDecoration;)V -HSPLandroidx/compose/ui/text/AnnotatedString$Range;->(IILjava/lang/Object;)V -HSPLandroidx/compose/ui/text/AnnotatedString$Range;->(Ljava/lang/Object;IILjava/lang/String;)V -HSPLandroidx/compose/ui/text/AnnotatedString$special$$inlined$sortedBy$1;->()V -HSPLandroidx/compose/ui/text/AnnotatedString;->(Ljava/lang/String;Ljava/util/List;I)V -HSPLandroidx/compose/ui/text/AnnotatedString;->(Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/List;)V -HSPLandroidx/compose/ui/text/AnnotatedString;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/text/AnnotatedStringKt;->()V -HSPLandroidx/compose/ui/text/MultiParagraph;->(Landroidx/compose/ui/text/MultiParagraphIntrinsics;JIZ)V -HSPLandroidx/compose/ui/text/MultiParagraph;->paint-RPmYEkk(Landroidx/compose/ui/graphics/Canvas;JLandroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/style/TextDecoration;)V -HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics$maxIntrinsicWidth$2;->(Landroidx/compose/ui/text/MultiParagraphIntrinsics;)V -HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics$maxIntrinsicWidth$2;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics$minIntrinsicWidth$2;->(Landroidx/compose/ui/text/MultiParagraphIntrinsics;)V -HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;->(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;)V -HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;->getHasStaleResolvedFonts()Z -HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;->getMaxIntrinsicWidth()F -HSPLandroidx/compose/ui/text/ParagraphInfo;->(Landroidx/compose/ui/text/AndroidParagraph;IIIIFF)V -HSPLandroidx/compose/ui/text/ParagraphIntrinsicInfo;->(Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;II)V -HSPLandroidx/compose/ui/text/ParagraphStyle;->(Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;)V -HSPLandroidx/compose/ui/text/ParagraphStyle;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/text/ParagraphStyle;->merge(Landroidx/compose/ui/text/ParagraphStyle;)Landroidx/compose/ui/text/ParagraphStyle; -HSPLandroidx/compose/ui/text/ParagraphStyleKt;->()V -HSPLandroidx/compose/ui/text/SpanStyle;->(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;I)V -HSPLandroidx/compose/ui/text/SpanStyle;->(Landroidx/compose/ui/text/style/TextForegroundStyle;JLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontSynthesis;Landroidx/compose/ui/text/font/FontFamily;Ljava/lang/String;JLandroidx/compose/ui/text/style/BaselineShift;Landroidx/compose/ui/text/style/TextGeometricTransform;Landroidx/compose/ui/text/intl/LocaleList;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/Shadow;)V -HSPLandroidx/compose/ui/text/SpanStyle;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/text/SpanStyle;->getColor-0d7_KjU()J -HSPLandroidx/compose/ui/text/SpanStyle;->hasSameLayoutAffectingAttributes$ui_text_release(Landroidx/compose/ui/text/SpanStyle;)Z -HSPLandroidx/compose/ui/text/SpanStyle;->merge(Landroidx/compose/ui/text/SpanStyle;)Landroidx/compose/ui/text/SpanStyle; -HSPLandroidx/compose/ui/text/SpanStyleKt$resolveSpanStyleDefaults$1;->()V -HSPLandroidx/compose/ui/text/SpanStyleKt$resolveSpanStyleDefaults$1;->()V -HSPLandroidx/compose/ui/text/SpanStyleKt;->()V -HSPLandroidx/compose/ui/text/TextLayoutInput;->(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;IZILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/text/font/FontFamily$Resolver;J)V -HSPLandroidx/compose/ui/text/TextLayoutInput;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/text/TextLayoutResult;->(Landroidx/compose/ui/text/TextLayoutInput;Landroidx/compose/ui/text/MultiParagraph;J)V -HSPLandroidx/compose/ui/text/TextLayoutResult;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/text/TextRange;->()V -HSPLandroidx/compose/ui/text/TextRange;->getEnd-impl(J)I -HSPLandroidx/compose/ui/text/TextRangeKt;->TextRange(II)J -HSPLandroidx/compose/ui/text/TextRangeKt;->constrain-8ffj60Q(IJ)J -HSPLandroidx/compose/ui/text/TextStyle;->()V -HSPLandroidx/compose/ui/text/TextStyle;->(JJLandroidx/compose/ui/text/font/FontWeight;Landroidx/compose/ui/text/font/FontStyle;Landroidx/compose/ui/text/font/FontFamily;JLandroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/text/style/TextAlign;JI)V -HSPLandroidx/compose/ui/text/TextStyle;->(Landroidx/compose/ui/text/SpanStyle;Landroidx/compose/ui/text/ParagraphStyle;)V -HSPLandroidx/compose/ui/text/TextStyle;->(Landroidx/compose/ui/text/SpanStyle;Landroidx/compose/ui/text/ParagraphStyle;Landroidx/compose/ui/text/PlatformTextStyle;)V -HSPLandroidx/compose/ui/text/TextStyle;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/text/TextStyle;->merge(Landroidx/compose/ui/text/TextStyle;)Landroidx/compose/ui/text/TextStyle; -HSPLandroidx/compose/ui/text/android/BoringLayoutFactory33;->isBoring(Ljava/lang/CharSequence;Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;)Landroid/text/BoringLayout$Metrics; -HSPLandroidx/compose/ui/text/android/LayoutIntrinsics$boringMetrics$2;->(ILandroidx/compose/ui/text/platform/AndroidTextPaint;Ljava/lang/CharSequence;)V -HSPLandroidx/compose/ui/text/android/LayoutIntrinsics$boringMetrics$2;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/ui/text/android/LayoutIntrinsics$maxIntrinsicWidth$2;->(Landroidx/compose/ui/text/android/LayoutIntrinsics;Ljava/lang/CharSequence;Landroidx/compose/ui/text/platform/AndroidTextPaint;)V -HSPLandroidx/compose/ui/text/android/LayoutIntrinsics$maxIntrinsicWidth$2;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/ui/text/android/LayoutIntrinsics$minIntrinsicWidth$2;->(Ljava/lang/CharSequence;Landroidx/compose/ui/text/platform/AndroidTextPaint;)V -HSPLandroidx/compose/ui/text/android/LayoutIntrinsics;->(ILandroidx/compose/ui/text/platform/AndroidTextPaint;Ljava/lang/CharSequence;)V -HSPLandroidx/compose/ui/text/android/StaticLayoutFactory23;->()V -HSPLandroidx/compose/ui/text/android/StaticLayoutFactory23;->create(Landroidx/compose/ui/text/android/StaticLayoutParams;)Landroid/text/StaticLayout; -HSPLandroidx/compose/ui/text/android/StaticLayoutFactory26$$ExternalSyntheticApiModelOutline0;->m(Landroid/text/StaticLayout$Builder;I)V -HSPLandroidx/compose/ui/text/android/StaticLayoutFactory26;->setJustificationMode(Landroid/text/StaticLayout$Builder;I)V -HSPLandroidx/compose/ui/text/android/StaticLayoutFactory28$$ExternalSyntheticApiModelOutline0;->m(Landroid/text/StaticLayout$Builder;Z)V -HSPLandroidx/compose/ui/text/android/StaticLayoutFactory28;->setUseLineSpacingFromFallbacks(Landroid/text/StaticLayout$Builder;Z)V -HSPLandroidx/compose/ui/text/android/StaticLayoutFactory33;->setLineBreakConfig(Landroid/text/StaticLayout$Builder;II)V -HSPLandroidx/compose/ui/text/android/StaticLayoutFactory;->()V -HSPLandroidx/compose/ui/text/android/StaticLayoutFactory;->create(Ljava/lang/CharSequence;IILandroidx/compose/ui/text/platform/AndroidTextPaint;ILandroid/text/TextDirectionHeuristic;Landroid/text/Layout$Alignment;ILandroid/text/TextUtils$TruncateAt;IFFIZZIIII[I[I)Landroid/text/StaticLayout; -HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->(Ljava/lang/CharSequence;IILandroidx/compose/ui/text/platform/AndroidTextPaint;ILandroid/text/TextDirectionHeuristic;Landroid/text/Layout$Alignment;ILandroid/text/TextUtils$TruncateAt;IFFIZZIIII[I[I)V -HSPLandroidx/compose/ui/text/android/TextAlignmentAdapter;->()V -HSPLandroidx/compose/ui/text/android/TextAndroidCanvas;->()V -HSPLandroidx/compose/ui/text/android/TextAndroidCanvas;->drawTextRun(Ljava/lang/CharSequence;IIIIFFZLandroid/graphics/Paint;)V -HSPLandroidx/compose/ui/text/android/TextAndroidCanvas;->getClipBounds(Landroid/graphics/Rect;)Z -HSPLandroidx/compose/ui/text/android/TextLayout$layoutHelper$2;->(Landroidx/compose/ui/text/android/TextLayout;)V -HSPLandroidx/compose/ui/text/android/TextLayout;->(Ljava/lang/CharSequence;FLandroidx/compose/ui/text/platform/AndroidTextPaint;ILandroid/text/TextUtils$TruncateAt;IIIIIIILandroidx/compose/ui/text/android/LayoutIntrinsics;)V -HSPLandroidx/compose/ui/text/android/TextLayout;->getHeight()I -HSPLandroidx/compose/ui/text/android/TextLayout;->getLineBaseline(I)F -HSPLandroidx/compose/ui/text/android/TextLayout;->getText()Ljava/lang/CharSequence; -HSPLandroidx/compose/ui/text/android/TextLayoutKt;->()V -HSPLandroidx/compose/ui/text/android/TextLayoutKt;->getTextDirectionHeuristic(I)Landroid/text/TextDirectionHeuristic; -HSPLandroidx/compose/ui/text/android/style/IndentationFixSpanKt;->getEllipsizedLeftPadding(Landroid/text/Layout;ILandroid/graphics/Paint;)F -HSPLandroidx/compose/ui/text/android/style/IndentationFixSpanKt;->getEllipsizedRightPadding(Landroid/text/Layout;ILandroid/graphics/Paint;)F -HSPLandroidx/compose/ui/text/android/style/LetterSpacingSpanPx;->(F)V -HSPLandroidx/compose/ui/text/android/style/LetterSpacingSpanPx;->updateDrawState(Landroid/text/TextPaint;)V -HSPLandroidx/compose/ui/text/android/style/LetterSpacingSpanPx;->updateMeasureState(Landroid/text/TextPaint;)V -HSPLandroidx/compose/ui/text/android/style/LineHeightSpan;->(F)V -HSPLandroidx/compose/ui/text/android/style/LineHeightSpan;->chooseHeight(Ljava/lang/CharSequence;IIIILandroid/graphics/Paint$FontMetricsInt;)V -HSPLandroidx/compose/ui/text/caches/LruCache;->()V -HSPLandroidx/compose/ui/text/caches/LruCache;->get(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/text/caches/LruCache;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/text/caches/LruCache;->size()I -HSPLandroidx/compose/ui/text/caches/SimpleArrayMap;->(I)V -HSPLandroidx/compose/ui/text/font/AndroidFontLoader;->(Landroid/content/Context;)V -HSPLandroidx/compose/ui/text/font/AndroidFontLoader;->getCacheKey()V -HSPLandroidx/compose/ui/text/font/AndroidFontResolveInterceptor;->(I)V -HSPLandroidx/compose/ui/text/font/AndroidFontResolveInterceptor;->interceptFontWeight(Landroidx/compose/ui/text/font/FontWeight;)Landroidx/compose/ui/text/font/FontWeight; -HSPLandroidx/compose/ui/text/font/AndroidFontResolveInterceptor_androidKt;->AndroidFontResolveInterceptor(Landroid/content/Context;)Landroidx/compose/ui/text/font/AndroidFontResolveInterceptor; -HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache;->()V -HSPLandroidx/compose/ui/text/font/DefaultFontFamily;->()V -HSPLandroidx/compose/ui/text/font/FontFamily;->()V -HSPLandroidx/compose/ui/text/font/FontFamily;->()V -HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl$createDefaultTypeface$1;->(Landroidx/compose/ui/text/font/FontFamilyResolverImpl;)V -HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl$resolve$result$1;->(Landroidx/compose/ui/text/font/FontFamilyResolverImpl;Landroidx/compose/ui/text/font/TypefaceRequest;)V -HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl$resolve$result$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->(Landroidx/compose/ui/text/font/AndroidFontLoader;Landroidx/compose/ui/text/font/AndroidFontResolveInterceptor;)V -HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->resolve(Landroidx/compose/ui/text/font/TypefaceRequest;)Landroidx/compose/ui/text/font/TypefaceResult; -HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->resolve-DPcqOEQ(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;II)Landroidx/compose/ui/text/font/TypefaceResult; -HSPLandroidx/compose/ui/text/font/FontFamilyResolverKt;->()V -HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter$special$$inlined$CoroutineExceptionHandler$1;->()V -HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;->()V -HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;->(Landroidx/compose/ui/text/font/AsyncTypefaceCache;)V -HSPLandroidx/compose/ui/text/font/FontStyle;->(I)V -HSPLandroidx/compose/ui/text/font/FontSynthesis;->(I)V -HSPLandroidx/compose/ui/text/font/FontWeight;->()V -HSPLandroidx/compose/ui/text/font/FontWeight;->(I)V -HSPLandroidx/compose/ui/text/font/FontWeight;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/text/font/GenericFontFamily;->(Ljava/lang/String;Ljava/lang/String;)V -HSPLandroidx/compose/ui/text/font/PlatformFontFamilyTypefaceAdapter;->()V -HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion$Default$1;->()V -HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion;->()V -HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion;->()V -HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor;->()V -HSPLandroidx/compose/ui/text/font/SystemFontFamily;->()V -HSPLandroidx/compose/ui/text/font/TypefaceRequest;->(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;IILjava/lang/Object;)V -HSPLandroidx/compose/ui/text/font/TypefaceRequest;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/text/font/TypefaceRequest;->hashCode()I -HSPLandroidx/compose/ui/text/font/TypefaceRequestCache$runCached$currentTypefaceResult$1;->(Landroidx/compose/ui/text/font/TypefaceRequestCache;Landroidx/compose/ui/text/font/TypefaceRequest;)V -HSPLandroidx/compose/ui/text/font/TypefaceRequestCache;->()V -HSPLandroidx/compose/ui/text/font/TypefaceResult$Immutable;->(Ljava/lang/Object;Z)V -HSPLandroidx/compose/ui/text/font/TypefaceResult$Immutable;->getCacheable()Z -HSPLandroidx/compose/ui/text/font/TypefaceResult$Immutable;->getValue()Ljava/lang/Object; -HSPLandroidx/compose/ui/text/input/InputMethodManagerImpl$imm$2;->(Landroid/content/Context;)V -HSPLandroidx/compose/ui/text/input/InputMethodManagerImpl;->(Landroid/content/Context;)V -HSPLandroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$1;->()V -HSPLandroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$1;->()V -HSPLandroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$2;->()V -HSPLandroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$2;->()V -HSPLandroidx/compose/ui/text/input/TextFieldValue;->()V -HSPLandroidx/compose/ui/text/input/TextFieldValue;->(Landroidx/compose/ui/text/AnnotatedString;JLandroidx/compose/ui/text/TextRange;)V -HSPLandroidx/compose/ui/text/input/TextInputService;->(Landroidx/compose/ui/text/input/PlatformTextInputService;)V -HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$baseInputConnection$2;->(Landroidx/compose/ui/text/input/TextInputServiceAndroid;)V -HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$textInputCommandEventLoop$1;->(Landroidx/compose/ui/text/input/TextInputServiceAndroid;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->(Landroid/view/View;)V -HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->textInputCommandEventLoop(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLandroidx/compose/ui/text/intl/AndroidLocale;->(Ljava/util/Locale;)V -HSPLandroidx/compose/ui/text/intl/AndroidLocale;->toLanguageTag()Ljava/lang/String; -HSPLandroidx/compose/ui/text/intl/Locale;->(Landroidx/compose/ui/text/intl/PlatformLocale;)V -HSPLandroidx/compose/ui/text/intl/Locale;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/text/intl/LocaleList$Companion;->getCurrent()Landroidx/compose/ui/text/intl/LocaleList; -HSPLandroidx/compose/ui/text/intl/LocaleList;->(Ljava/util/ArrayList;)V -HSPLandroidx/compose/ui/text/intl/LocaleList;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1;->(Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;)V -HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily$Resolver;Landroidx/compose/ui/unit/Density;Ljava/lang/String;Ljava/util/List;Ljava/util/ArrayList;)V -HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getHasStaleResolvedFonts()Z -HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getMaxIntrinsicWidth()F -HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->(F)V -HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setBrush-12SF9DM(Landroidx/compose/ui/graphics/Brush;JF)V -HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setColor-8_81llA(J)V -HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setShadow(Landroidx/compose/ui/graphics/Shadow;)V -HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setTextDecoration(Landroidx/compose/ui/text/style/TextDecoration;)V -HSPLandroidx/compose/ui/text/platform/SynchronizedObject;->()V -HSPLandroidx/compose/ui/text/platform/TypefaceDirtyTracker;->(Landroidx/compose/runtime/State;)V -HSPLandroidx/compose/ui/text/platform/extensions/SpanRange;->(IILandroid/text/style/MetricAffectingSpan;)V -HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt$setFontAttributes$1;->(Landroid/text/SpannableString;Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1;)V -HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->resolveLineHeightInPx-o2QH7mI(JFLandroidx/compose/ui/unit/Density;)F -HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setBackground-RPmYEkk(Landroid/text/SpannableString;JII)V -HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setColor-RPmYEkk(Landroid/text/SpannableString;JII)V -HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setFontSize-KmRG4DE(Landroid/text/SpannableString;JLandroidx/compose/ui/unit/Density;II)V -HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setSpan(Landroid/text/Spannable;Ljava/lang/Object;II)V -HSPLandroidx/compose/ui/text/style/BaselineShift;->(F)V -HSPLandroidx/compose/ui/text/style/ColorStyle;->(J)V -HSPLandroidx/compose/ui/text/style/ColorStyle;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/text/style/ColorStyle;->getAlpha()F -HSPLandroidx/compose/ui/text/style/ColorStyle;->getBrush()Landroidx/compose/ui/graphics/Brush; -HSPLandroidx/compose/ui/text/style/ColorStyle;->getColor-0d7_KjU()J -HSPLandroidx/compose/ui/text/style/Hyphens;->()V -HSPLandroidx/compose/ui/text/style/Hyphens;->()V -HSPLandroidx/compose/ui/text/style/LineBreak$Strategy;->(I)V -HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;->(I)V -HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak;->(I)V -HSPLandroidx/compose/ui/text/style/LineBreak;->()V -HSPLandroidx/compose/ui/text/style/LineBreak;->()V -HSPLandroidx/compose/ui/text/style/TextAlign;->(I)V -HSPLandroidx/compose/ui/text/style/TextAlign;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/text/style/TextDecoration;->()V -HSPLandroidx/compose/ui/text/style/TextDecoration;->(I)V -HSPLandroidx/compose/ui/text/style/TextDecoration;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/text/style/TextDirection;->(I)V -HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->()V -HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->()V -HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->getAlpha()F -HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->getBrush()Landroidx/compose/ui/graphics/Brush; -HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->getColor-0d7_KjU()J -HSPLandroidx/compose/ui/text/style/TextForegroundStyle$merge$2;->(Landroidx/compose/ui/text/style/TextForegroundStyle;)V -HSPLandroidx/compose/ui/text/style/TextForegroundStyle$merge$2;->invoke()Ljava/lang/Object; -HSPLandroidx/compose/ui/text/style/TextForegroundStyle;->merge(Landroidx/compose/ui/text/style/TextForegroundStyle;)Landroidx/compose/ui/text/style/TextForegroundStyle; -HSPLandroidx/compose/ui/text/style/TextForegroundStyle;->takeOrElse(Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/text/style/TextForegroundStyle; -HSPLandroidx/compose/ui/text/style/TextGeometricTransform;->()V -HSPLandroidx/compose/ui/text/style/TextGeometricTransform;->(FF)V -HSPLandroidx/compose/ui/text/style/TextGeometricTransform;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/text/style/TextIndent;->()V -HSPLandroidx/compose/ui/text/style/TextIndent;->(JJ)V -HSPLandroidx/compose/ui/unit/AndroidDensity_androidKt;->Density(Landroid/content/Context;)Landroidx/compose/ui/unit/DensityImpl; -HSPLandroidx/compose/ui/unit/AndroidDensity_androidKt;->getSafeDrawing(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/layout/UnionInsets; -HSPLandroidx/compose/ui/unit/AndroidDensity_androidKt;->toInsetsValues(Landroidx/core/graphics/Insets;)Landroidx/compose/foundation/layout/InsetsValues; -HSPLandroidx/compose/ui/unit/Constraints$Companion;->bitsNeedForSize(I)I -HSPLandroidx/compose/ui/unit/Constraints$Companion;->createConstraints-Zbe2FdA$ui_unit_release(IIII)J -HSPLandroidx/compose/ui/unit/Constraints$Companion;->fixed-JhjzzOo(II)J -HSPLandroidx/compose/ui/unit/Constraints$Companion;->fixedHeight-OenEA2s(I)J -HSPLandroidx/compose/ui/unit/Constraints$Companion;->fixedWidth-OenEA2s(I)J -HSPLandroidx/compose/ui/unit/Constraints;->()V -HSPLandroidx/compose/ui/unit/Constraints;->(J)V -HSPLandroidx/compose/ui/unit/Constraints;->copy-Zbe2FdA$default(JIIIII)J -HSPLandroidx/compose/ui/unit/Constraints;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/unit/Constraints;->equals-impl0(JJ)Z -HSPLandroidx/compose/ui/unit/Constraints;->getHasBoundedHeight-impl(J)Z -HSPLandroidx/compose/ui/unit/Constraints;->getHasBoundedWidth-impl(J)Z -HSPLandroidx/compose/ui/unit/Constraints;->getHasFixedHeight-impl(J)Z -HSPLandroidx/compose/ui/unit/Constraints;->getHasFixedWidth-impl(J)Z -HSPLandroidx/compose/ui/unit/Constraints;->getMaxHeight-impl(J)I -HSPLandroidx/compose/ui/unit/Constraints;->getMaxWidth-impl(J)I -HSPLandroidx/compose/ui/unit/Constraints;->getMinHeight-impl(J)I -HSPLandroidx/compose/ui/unit/Constraints;->getMinWidth-impl(J)I -HSPLandroidx/compose/ui/unit/Density;->roundToPx-0680j_4(F)I -HSPLandroidx/compose/ui/unit/Density;->toDp-GaN1DYA(J)F -HSPLandroidx/compose/ui/unit/Density;->toDp-u2uoSUM(F)F -HSPLandroidx/compose/ui/unit/Density;->toDp-u2uoSUM(I)F -HSPLandroidx/compose/ui/unit/Density;->toDpSize-k-rfVVM(J)J -HSPLandroidx/compose/ui/unit/Density;->toPx--R2X_6o(J)F -HSPLandroidx/compose/ui/unit/Density;->toPx-0680j_4(F)F -HSPLandroidx/compose/ui/unit/DensityImpl;->(FF)V -HSPLandroidx/compose/ui/unit/DensityImpl;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/unit/DensityImpl;->getDensity()F -HSPLandroidx/compose/ui/unit/DensityImpl;->getFontScale()F -HSPLandroidx/compose/ui/unit/Dp;->(F)V -HSPLandroidx/compose/ui/unit/Dp;->compareTo(Ljava/lang/Object;)I -HSPLandroidx/compose/ui/unit/Dp;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/unit/Dp;->equals-impl0(FF)Z -HSPLandroidx/compose/ui/unit/DpKt;->DpOffset-YgX7TsA(FF)J -HSPLandroidx/compose/ui/unit/DpKt;->DpSize-YgX7TsA(FF)J -HSPLandroidx/compose/ui/unit/DpOffset;->()V -HSPLandroidx/compose/ui/unit/DpSize;->()V -HSPLandroidx/compose/ui/unit/DpSize;->getHeight-D9Ej5fM(J)F -HSPLandroidx/compose/ui/unit/DpSize;->getWidth-D9Ej5fM(J)F -HSPLandroidx/compose/ui/unit/IntOffset$Companion;->()V -HSPLandroidx/compose/ui/unit/IntOffset;->()V -HSPLandroidx/compose/ui/unit/IntOffset;->(J)V -HSPLandroidx/compose/ui/unit/IntOffset;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/unit/IntOffset;->equals-impl0(JJ)Z -HSPLandroidx/compose/ui/unit/IntOffset;->getY-impl(J)I -HSPLandroidx/compose/ui/unit/IntOffsetKt;->IntOffset(II)J -HSPLandroidx/compose/ui/unit/IntSize$Companion;->()V -HSPLandroidx/compose/ui/unit/IntSize;->()V -HSPLandroidx/compose/ui/unit/IntSize;->(J)V -HSPLandroidx/compose/ui/unit/IntSize;->equals(Ljava/lang/Object;)Z -HSPLandroidx/compose/ui/unit/IntSize;->equals-impl0(JJ)Z -HSPLandroidx/compose/ui/unit/IntSize;->getHeight-impl(J)I -HSPLandroidx/compose/ui/unit/IntSizeKt;->IntSize(II)J -HSPLandroidx/compose/ui/unit/IntSizeKt;->toSize-ozmzZPI(J)J -HSPLandroidx/compose/ui/unit/LayoutDirection;->()V -HSPLandroidx/compose/ui/unit/LayoutDirection;->(ILjava/lang/String;)V -HSPLandroidx/compose/ui/unit/TextUnit;->()V -HSPLandroidx/compose/ui/unit/TextUnit;->equals-impl0(JJ)Z -HSPLandroidx/compose/ui/unit/TextUnit;->getType-UIouoOA(J)J -HSPLandroidx/compose/ui/unit/TextUnit;->getValue-impl(J)F -HSPLandroidx/compose/ui/unit/TextUnitKt;->getSp(D)J -HSPLandroidx/compose/ui/unit/TextUnitKt;->getSp(I)J -HSPLandroidx/compose/ui/unit/TextUnitKt;->isUnspecified--R2X_6o(J)Z -HSPLandroidx/compose/ui/unit/TextUnitKt;->pack(FJ)J -HSPLandroidx/compose/ui/unit/TextUnitType;->(J)V -HSPLandroidx/compose/ui/unit/TextUnitType;->equals-impl0(JJ)Z -HSPLandroidx/compose/ui/util/MathHelpersKt;->lerp(FFF)F -HSPLandroidx/core/R$id;->ceilToIntPx(F)I -HSPLandroidx/core/app/ComponentActivity;->()V -HSPLandroidx/core/app/ComponentActivity;->onCreate(Landroid/os/Bundle;)V -HSPLandroidx/core/app/CoreComponentFactory;->()V -HSPLandroidx/core/app/CoreComponentFactory;->checkCompatWrapper(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/core/app/CoreComponentFactory;->instantiateActivity(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/app/Activity; -HSPLandroidx/core/app/CoreComponentFactory;->instantiateApplication(Ljava/lang/ClassLoader;Ljava/lang/String;)Landroid/app/Application; -HSPLandroidx/core/app/CoreComponentFactory;->instantiateProvider(Ljava/lang/ClassLoader;Ljava/lang/String;)Landroid/content/ContentProvider; -HSPLandroidx/core/app/CoreComponentFactory;->instantiateService(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/app/Service; -HSPLandroidx/core/content/ContextCompat$Api23Impl;->getSystemService(Landroid/content/Context;Ljava/lang/Class;)Ljava/lang/Object; -HSPLandroidx/core/content/ContextCompat;->()V -HSPLandroidx/core/content/PermissionChecker;->createZeroVectorFrom(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;)Landroidx/compose/animation/core/AnimationVector; -HSPLandroidx/core/content/res/CamUtils;->()V -HSPLandroidx/core/content/res/ComplexColorCompat;->(Landroid/graphics/Shader;Landroid/content/res/ColorStateList;I)V -HSPLandroidx/core/content/res/TypedArrayUtils;->getNamedComplexColor(Landroid/content/res/TypedArray;Lorg/xmlpull/v1/XmlPullParser;Landroid/content/res/Resources$Theme;Ljava/lang/String;I)Landroidx/core/content/res/ComplexColorCompat; -HSPLandroidx/core/content/res/TypedArrayUtils;->getNamedFloat(Landroid/content/res/TypedArray;Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;IF)F -HSPLandroidx/core/content/res/TypedArrayUtils;->getNamedInt(Landroid/content/res/TypedArray;Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;II)I -HSPLandroidx/core/content/res/TypedArrayUtils;->hasAttribute(Lorg/xmlpull/v1/XmlPullParser;Ljava/lang/String;)Z -HSPLandroidx/core/content/res/TypedArrayUtils;->obtainAttributes(Landroid/content/res/Resources;Landroid/content/res/Resources$Theme;Landroid/util/AttributeSet;[I)Landroid/content/res/TypedArray; -HSPLandroidx/core/graphics/Insets;->()V -HSPLandroidx/core/graphics/Insets;->(IIII)V -HSPLandroidx/core/graphics/Insets;->equals(Ljava/lang/Object;)Z -HSPLandroidx/core/graphics/Insets;->of(IIII)Landroidx/core/graphics/Insets; -HSPLandroidx/core/graphics/Insets;->toCompatInsets(Landroid/graphics/Insets;)Landroidx/core/graphics/Insets; -HSPLandroidx/core/math/MathUtils;->systemProp$default(Ljava/lang/String;IIII)I -HSPLandroidx/core/math/MathUtils;->systemProp(Ljava/lang/String;JJJ)J -HSPLandroidx/core/net/ConnectivityManagerCompat$Api16Impl;->isActiveNetworkMetered(Landroid/net/ConnectivityManager;)Z -HSPLandroidx/core/os/BuildCompat;->isAtLeastS()Z -HSPLandroidx/core/os/BuildCompat;->isAtLeastT()Z -HSPLandroidx/core/os/HandlerCompat;->createAsync(Landroid/os/Looper;)Landroid/os/Handler; -HSPLandroidx/core/splashscreen/SplashScreen$Impl$$ExternalSyntheticLambda0;->()V -HSPLandroidx/core/splashscreen/SplashScreen$Impl31$hierarchyListener$1;->(Landroidx/core/splashscreen/SplashScreen$Impl31;Landroid/app/Activity;)V -HSPLandroidx/core/splashscreen/SplashScreen$Impl31$setKeepOnScreenCondition$1;->(Landroidx/core/splashscreen/SplashScreen$Impl31;Landroid/view/View;)V -HSPLandroidx/core/splashscreen/SplashScreen$Impl31$setKeepOnScreenCondition$1;->onPreDraw()Z -HSPLandroidx/core/splashscreen/SplashScreen$Impl31;->(Landroid/app/Activity;)V -HSPLandroidx/core/splashscreen/SplashScreen$Impl31;->install()V -HSPLandroidx/core/splashscreen/SplashScreen$Impl31;->setKeepOnScreenCondition(Lcom/google/samples/apps/nowinandroid/MainActivity$onCreate$2;)V -HSPLandroidx/core/splashscreen/SplashScreen$Impl;->(Landroid/app/Activity;)V -HSPLandroidx/core/splashscreen/SplashScreen$Impl;->setPostSplashScreenTheme(Landroid/content/res/Resources$Theme;Landroid/util/TypedValue;)V -HSPLandroidx/core/util/DebugUtils;->access$lowestBitOf(J)I -HSPLandroidx/core/util/DebugUtils;->binarySearch([II)I -HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->(Landroidx/core/view/AccessibilityDelegateCompat;)V -HSPLandroidx/core/view/AccessibilityDelegateCompat;->()V -HSPLandroidx/core/view/AccessibilityDelegateCompat;->()V -HSPLandroidx/core/view/AccessibilityDelegateCompat;->(Landroid/view/View$AccessibilityDelegate;)V -HSPLandroidx/core/view/DisplayCutoutCompat$Api30Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/DisplayCutout;)Landroid/graphics/Insets; -HSPLandroidx/core/view/DisplayCutoutCompat$Api30Impl;->getWaterfallInsets(Landroid/view/DisplayCutout;)Landroid/graphics/Insets; -HSPLandroidx/core/view/DisplayCutoutCompat;->(Landroid/view/DisplayCutout;)V -HSPLandroidx/core/view/MenuHostHelper;->(Ljava/lang/Runnable;)V -HSPLandroidx/core/view/OneShotPreDrawListener;->(Landroid/view/View;Ljava/lang/Runnable;)V -HSPLandroidx/core/view/OneShotPreDrawListener;->add(Landroid/view/View;Ljava/lang/Runnable;)V -HSPLandroidx/core/view/OneShotPreDrawListener;->onPreDraw()Z -HSPLandroidx/core/view/OneShotPreDrawListener;->removeListener()V -HSPLandroidx/core/view/ViewCompat$$ExternalSyntheticLambda0;->()V -HSPLandroidx/core/view/ViewCompat$AccessibilityPaneVisibilityManager;->()V -HSPLandroidx/core/view/ViewCompat$Api19Impl;->isAttachedToWindow(Landroid/view/View;)Z -HSPLandroidx/core/view/ViewCompat$Api21Impl$1;->(Landroid/view/View;Landroidx/core/view/OnApplyWindowInsetsListener;)V -HSPLandroidx/core/view/ViewCompat$Api21Impl$1;->onApplyWindowInsets(Landroid/view/View;Landroid/view/WindowInsets;)Landroid/view/WindowInsets; -HSPLandroidx/core/view/ViewCompat$Api21Impl;->setOnApplyWindowInsetsListener(Landroid/view/View;Landroidx/core/view/OnApplyWindowInsetsListener;)V -HSPLandroidx/core/view/ViewCompat$Api23Impl;->getRootWindowInsets(Landroid/view/View;)Landroidx/core/view/WindowInsetsCompat; -HSPLandroidx/core/view/ViewCompat;->()V -HSPLandroidx/core/view/ViewCompat;->setAccessibilityDelegate(Landroid/view/View;Landroidx/core/view/AccessibilityDelegateCompat;)V -HSPLandroidx/core/view/ViewCompat;->setWindowInsetsAnimationCallback(Landroid/view/View;Landroidx/compose/foundation/layout/InsetsListener;)V -HSPLandroidx/core/view/WindowCompat$Api30Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/Window;Z)V -HSPLandroidx/core/view/WindowCompat$Api30Impl;->setDecorFitsSystemWindows(Landroid/view/Window;Z)V -HSPLandroidx/core/view/WindowInsetsAnimationCompat$Callback;->(I)V -HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;Landroidx/core/view/WindowInsetsAnimationCompat$Impl30$ProxyCallback;)V -HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30$ProxyCallback;->(Landroidx/compose/foundation/layout/InsetsListener;)V -HSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl29;->()V -HSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl29;->build()Landroidx/core/view/WindowInsetsCompat; -HSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl30;->()V -HSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl;->()V -HSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl;->(Landroidx/core/view/WindowInsetsCompat;)V -HSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl;->applyInsetTypes()V -HSPLandroidx/core/view/WindowInsetsCompat$Impl20;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V -HSPLandroidx/core/view/WindowInsetsCompat$Impl20;->setOverriddenInsets([Landroidx/core/graphics/Insets;)V -HSPLandroidx/core/view/WindowInsetsCompat$Impl20;->setRootWindowInsets(Landroidx/core/view/WindowInsetsCompat;)V -HSPLandroidx/core/view/WindowInsetsCompat$Impl21;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V -HSPLandroidx/core/view/WindowInsetsCompat$Impl21;->consumeStableInsets()Landroidx/core/view/WindowInsetsCompat; -HSPLandroidx/core/view/WindowInsetsCompat$Impl21;->consumeSystemWindowInsets()Landroidx/core/view/WindowInsetsCompat; -HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsets;)Landroid/view/DisplayCutout; -HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline1;->m(Landroid/view/WindowInsets;)Landroid/view/WindowInsets; -HSPLandroidx/core/view/WindowInsetsCompat$Impl28;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V -HSPLandroidx/core/view/WindowInsetsCompat$Impl28;->consumeDisplayCutout()Landroidx/core/view/WindowInsetsCompat; -HSPLandroidx/core/view/WindowInsetsCompat$Impl28;->getDisplayCutout()Landroidx/core/view/DisplayCutoutCompat; -HSPLandroidx/core/view/WindowInsetsCompat$Impl29;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V -HSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsets;I)Z -HSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline1;->m(Landroid/view/WindowInsets;I)Landroid/graphics/Insets; -HSPLandroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline2;->m(Landroid/view/WindowInsets;I)Landroid/graphics/Insets; -HSPLandroidx/core/view/WindowInsetsCompat$Impl30;->()V -HSPLandroidx/core/view/WindowInsetsCompat$Impl30;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V -HSPLandroidx/core/view/WindowInsetsCompat$Impl30;->copyRootViewBounds(Landroid/view/View;)V -HSPLandroidx/core/view/WindowInsetsCompat$Impl30;->getInsets(I)Landroidx/core/graphics/Insets; -HSPLandroidx/core/view/WindowInsetsCompat$Impl30;->getInsetsIgnoringVisibility(I)Landroidx/core/graphics/Insets; -HSPLandroidx/core/view/WindowInsetsCompat$Impl30;->isVisible(I)Z -HSPLandroidx/core/view/WindowInsetsCompat$Impl;->()V -HSPLandroidx/core/view/WindowInsetsCompat$Impl;->(Landroidx/core/view/WindowInsetsCompat;)V -HSPLandroidx/core/view/WindowInsetsCompat$TypeImpl30;->toPlatformType(I)I -HSPLandroidx/core/view/WindowInsetsCompat;->()V -HSPLandroidx/core/view/WindowInsetsCompat;->()V -HSPLandroidx/core/view/WindowInsetsCompat;->(Landroid/view/WindowInsets;)V -HSPLandroidx/core/view/WindowInsetsCompat;->getInsets(I)Landroidx/core/graphics/Insets; -HSPLandroidx/core/view/WindowInsetsCompat;->getInsetsIgnoringVisibility(I)Landroidx/core/graphics/Insets; -HSPLandroidx/core/view/WindowInsetsCompat;->toWindowInsets()Landroid/view/WindowInsets; -HSPLandroidx/core/view/WindowInsetsCompat;->toWindowInsetsCompat(Landroid/view/View;Landroid/view/WindowInsets;)Landroidx/core/view/WindowInsetsCompat; -HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/Window;)Landroid/view/WindowInsetsController; -HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->(Landroid/view/Window;)V -HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->setAppearanceLightNavigationBars(Z)V -HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->setAppearanceLightStatusBars(Z)V -HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl;->()V -HSPLandroidx/core/view/WindowInsetsControllerCompat;->(Landroid/view/Window;)V -HSPLandroidx/core/view/accessibility/AccessibilityNodeProviderCompat;->(Landroid/view/accessibility/AccessibilityNodeProvider;)V -HSPLandroidx/customview/poolingcontainer/PoolingContainer;->getPoolingContainerListenerHolder(Landroid/view/View;)Landroidx/customview/poolingcontainer/PoolingContainerListenerHolder; -HSPLandroidx/customview/poolingcontainer/PoolingContainerListenerHolder;->()V -HSPLandroidx/datastore/core/Data;->(ILjava/lang/Object;)V -HSPLandroidx/datastore/core/Data;->checkHashCode()V -HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$getInitializer$1;->(Ljava/util/List;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$getInitializer$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$getInitializer$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$getInitializer$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$1;->(Landroidx/datastore/core/DataMigrationInitializer$Companion;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2$1$1;->(Landroidx/datastore/core/DataMigration;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2;->(Ljava/util/List;Ljava/util/List;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/datastore/core/DataMigrationInitializer$Companion;->()V -HSPLandroidx/datastore/core/DataMigrationInitializer$Companion;->access$runMigrations(Landroidx/datastore/core/DataMigrationInitializer$Companion;Ljava/util/List;Landroidx/datastore/core/InitializerApi;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLandroidx/datastore/core/DataMigrationInitializer;->()V -HSPLandroidx/datastore/core/SimpleActor$1;->(Landroidx/datastore/core/SingleProcessDataStore$actor$1;Landroidx/datastore/core/SimpleActor;)V -HSPLandroidx/datastore/core/SimpleActor$offer$2;->(Landroidx/datastore/core/SimpleActor;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/datastore/core/SimpleActor$offer$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/datastore/core/SimpleActor$offer$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/datastore/core/SimpleActor;->(Lkotlinx/coroutines/CoroutineScope;Landroidx/datastore/core/SingleProcessDataStore$actor$1;Landroidx/datastore/core/SingleProcessDataStore$actor$3;)V -HSPLandroidx/datastore/core/SimpleActor;->offer(Landroidx/datastore/core/SingleProcessDataStore$Message;)V -HSPLandroidx/datastore/core/SingleProcessDataStore$Message$Read;->(Landroidx/datastore/core/State;)V -HSPLandroidx/datastore/core/SingleProcessDataStore$Message$Update;->(Lkotlin/jvm/functions/Function2;Lkotlinx/coroutines/CompletableDeferredImpl;Landroidx/datastore/core/State;Lkotlin/coroutines/CoroutineContext;)V -HSPLandroidx/datastore/core/SingleProcessDataStore$Message;->()V -HSPLandroidx/datastore/core/SingleProcessDataStore$UncloseableOutputStream;->(Ljava/io/FileOutputStream;)V -HSPLandroidx/datastore/core/SingleProcessDataStore$UncloseableOutputStream;->write([BII)V -HSPLandroidx/datastore/core/SingleProcessDataStore$actor$1;->(Landroidx/datastore/core/SingleProcessDataStore;)V -HSPLandroidx/datastore/core/SingleProcessDataStore$actor$2;->()V -HSPLandroidx/datastore/core/SingleProcessDataStore$actor$2;->()V -HSPLandroidx/datastore/core/SingleProcessDataStore$actor$3;->(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/datastore/core/SingleProcessDataStore$actor$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/datastore/core/SingleProcessDataStore$actor$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/datastore/core/SingleProcessDataStore$actor$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/datastore/core/SingleProcessDataStore$data$1$1;->(Landroidx/datastore/core/State;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/datastore/core/SingleProcessDataStore$data$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/datastore/core/SingleProcessDataStore$data$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/datastore/core/SingleProcessDataStore$data$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2$1;->(Landroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V -HSPLandroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLandroidx/datastore/core/SingleProcessDataStore$data$1;->(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/datastore/core/SingleProcessDataStore$data$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/datastore/core/SingleProcessDataStore$data$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/datastore/core/SingleProcessDataStore$data$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/datastore/core/SingleProcessDataStore$file$2;->(Landroidx/datastore/core/SingleProcessDataStore;)V -HSPLandroidx/datastore/core/SingleProcessDataStore$file$2;->invoke()Ljava/lang/Object; -HSPLandroidx/datastore/core/SingleProcessDataStore$handleUpdate$1;->(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/datastore/core/SingleProcessDataStore$readAndInit$1;->(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1$updateData$1;->(Landroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1;->(Lkotlinx/coroutines/sync/Mutex;Lkotlin/jvm/internal/Ref$BooleanRef;Lkotlin/jvm/internal/Ref$ObjectRef;Landroidx/datastore/core/SingleProcessDataStore;)V -HSPLandroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1;->updateData(Landroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLandroidx/datastore/core/SingleProcessDataStore$readAndInitOrPropagateFailure$1;->(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/datastore/core/SingleProcessDataStore$readData$1;->(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/datastore/core/SingleProcessDataStore$readDataOrHandleCorruption$1;->(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/datastore/core/SingleProcessDataStore$transformAndWrite$1;->(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/datastore/core/SingleProcessDataStore$transformAndWrite$newData$1;->(Ljava/lang/Object;Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function2;)V -HSPLandroidx/datastore/core/SingleProcessDataStore$transformAndWrite$newData$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/datastore/core/SingleProcessDataStore$transformAndWrite$newData$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/datastore/core/SingleProcessDataStore$transformAndWrite$newData$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/datastore/core/SingleProcessDataStore$writeData$1;->(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/datastore/core/SingleProcessDataStore;->()V -HSPLandroidx/datastore/core/SingleProcessDataStore;->(Lcom/google/samples/apps/nowinandroid/core/datastore/di/DataStoreModule$providesUserPreferencesDataStore$1;Lcom/google/samples/apps/nowinandroid/core/datastore/UserPreferencesSerializer;Ljava/util/List;Landroidx/datastore/core/handlers/NoOpCorruptionHandler;Lkotlinx/coroutines/CoroutineScope;)V -HSPLandroidx/datastore/core/SingleProcessDataStore;->access$handleUpdate(Landroidx/datastore/core/SingleProcessDataStore;Landroidx/datastore/core/SingleProcessDataStore$Message$Update;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLandroidx/datastore/core/SingleProcessDataStore;->getData()Lkotlinx/coroutines/flow/SafeFlow; -HSPLandroidx/datastore/core/SingleProcessDataStore;->getFile()Ljava/io/File; -HSPLandroidx/datastore/core/SingleProcessDataStore;->readAndInit(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLandroidx/datastore/core/SingleProcessDataStore;->readAndInitOrPropagateFailure(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLandroidx/datastore/core/SingleProcessDataStore;->readData(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLandroidx/datastore/core/SingleProcessDataStore;->readDataOrHandleCorruption(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLandroidx/datastore/core/SingleProcessDataStore;->transformAndWrite(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; -HSPLandroidx/datastore/core/SingleProcessDataStore;->updateData(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLandroidx/datastore/core/SingleProcessDataStore;->writeData$datastore_core(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLandroidx/datastore/core/State;->()V -HSPLandroidx/datastore/core/UnInitialized;->()V -HSPLandroidx/datastore/core/UnInitialized;->()V -HSPLandroidx/datastore/core/handlers/NoOpCorruptionHandler;->()V -HSPLandroidx/emoji2/text/ConcurrencyHelpers$Handler28Impl;->createAsync(Landroid/os/Looper;)Landroid/os/Handler; -HSPLandroidx/emoji2/text/DefaultGlyphChecker;->()V -HSPLandroidx/emoji2/text/DefaultGlyphChecker;->()V -HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19;->(Landroidx/emoji2/text/EmojiCompat;)V -HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal;->(Landroidx/emoji2/text/EmojiCompat;)V -HSPLandroidx/emoji2/text/EmojiCompat$Config;->(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoader;)V -HSPLandroidx/emoji2/text/EmojiCompat;->()V -HSPLandroidx/emoji2/text/EmojiCompat;->(Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultConfig;)V -HSPLandroidx/emoji2/text/EmojiCompat;->getLoadState()I -HSPLandroidx/emoji2/text/EmojiCompatInitializer$1;->(Landroidx/emoji2/text/EmojiCompatInitializer;Landroidx/lifecycle/Lifecycle;)V -HSPLandroidx/emoji2/text/EmojiCompatInitializer$1;->onResume(Landroidx/lifecycle/LifecycleOwner;)V -HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultConfig;->(Landroid/content/Context;)V -HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader;->(Landroid/content/Context;)V -HSPLandroidx/emoji2/text/EmojiCompatInitializer$LoadEmojiCompatRunnable;->()V -HSPLandroidx/emoji2/text/EmojiCompatInitializer;->()V -HSPLandroidx/emoji2/text/EmojiCompatInitializer;->create(Landroid/content/Context;)Ljava/lang/Boolean; -HSPLandroidx/emoji2/text/EmojiCompatInitializer;->create(Landroid/content/Context;)Ljava/lang/Object; -HSPLandroidx/emoji2/text/EmojiCompatInitializer;->dependencies()Ljava/util/List; -HSPLandroidx/hilt/navigation/compose/HiltViewModelKt;->createHiltViewModelFactory(Landroidx/lifecycle/ViewModelStoreOwner;Landroidx/compose/runtime/Composer;)Ldagger/hilt/android/internal/lifecycle/HiltViewModelFactory; -HSPLandroidx/hilt/work/HiltWorkerFactory;->(Ljava/util/Map;)V -HSPLandroidx/hilt/work/HiltWorkerFactory;->createWorker(Landroid/content/Context;Ljava/lang/String;Landroidx/work/WorkerParameters;)Landroidx/work/ListenableWorker; -HSPLandroidx/lifecycle/AbstractSavedStateViewModelFactory;->()V -HSPLandroidx/lifecycle/AbstractSavedStateViewModelFactory;->create(Ljava/lang/Class;Landroidx/lifecycle/viewmodel/MutableCreationExtras;)Landroidx/lifecycle/ViewModel; -HSPLandroidx/lifecycle/CloseableCoroutineScope;->(Lkotlin/coroutines/CoroutineContext;)V -HSPLandroidx/lifecycle/CloseableCoroutineScope;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext; -HSPLandroidx/lifecycle/DefaultLifecycleObserver;->onCreate()V -HSPLandroidx/lifecycle/DefaultLifecycleObserver;->onResume(Landroidx/lifecycle/LifecycleOwner;)V -HSPLandroidx/lifecycle/DefaultLifecycleObserver;->onStart()V -HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->()V -HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V -HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityResumed(Landroid/app/Activity;)V -HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityStarted(Landroid/app/Activity;)V -HSPLandroidx/lifecycle/FlowLiveDataConversions$asFlow$1$$ExternalSyntheticLambda0;->(Lkotlinx/coroutines/channels/ProducerScope;)V -HSPLandroidx/lifecycle/FlowLiveDataConversions$asFlow$1$$ExternalSyntheticLambda0;->onChanged(Ljava/lang/Object;)V -HSPLandroidx/lifecycle/FlowLiveDataConversions$asFlow$1$1;->(Landroidx/lifecycle/LiveData;Landroidx/lifecycle/Observer;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/lifecycle/FlowLiveDataConversions$asFlow$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/lifecycle/FlowLiveDataConversions$asFlow$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/lifecycle/FlowLiveDataConversions$asFlow$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/lifecycle/FlowLiveDataConversions$asFlow$1$2;->(Landroidx/lifecycle/LiveData;Landroidx/lifecycle/Observer;)V -HSPLandroidx/lifecycle/FlowLiveDataConversions$asFlow$1;->(Landroidx/lifecycle/LiveData;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/lifecycle/FlowLiveDataConversions$asFlow$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/lifecycle/FlowLiveDataConversions$asFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/lifecycle/FlowLiveDataConversions$asFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/lifecycle/FullLifecycleObserverAdapter$1;->()V -HSPLandroidx/lifecycle/FullLifecycleObserverAdapter;->(Landroidx/lifecycle/FullLifecycleObserver;Landroidx/lifecycle/LifecycleEventObserver;)V -HSPLandroidx/lifecycle/FullLifecycleObserverAdapter;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V -HSPLandroidx/lifecycle/LegacySavedStateHandleController;->attachHandleIfNeeded(Landroidx/lifecycle/ViewModel;Landroidx/savedstate/SavedStateRegistry;Landroidx/lifecycle/Lifecycle;)V -HSPLandroidx/lifecycle/Lifecycle$1;->()V -HSPLandroidx/lifecycle/Lifecycle$Event;->()V -HSPLandroidx/lifecycle/Lifecycle$Event;->(ILjava/lang/String;)V -HSPLandroidx/lifecycle/Lifecycle$Event;->getTargetState()Landroidx/lifecycle/Lifecycle$State; -HSPLandroidx/lifecycle/Lifecycle$Event;->values()[Landroidx/lifecycle/Lifecycle$Event; -HSPLandroidx/lifecycle/Lifecycle$State;->()V -HSPLandroidx/lifecycle/Lifecycle$State;->(ILjava/lang/String;)V -HSPLandroidx/lifecycle/Lifecycle$State;->isAtLeast(Landroidx/lifecycle/Lifecycle$State;)Z -HSPLandroidx/lifecycle/Lifecycle$State;->values()[Landroidx/lifecycle/Lifecycle$State; -HSPLandroidx/lifecycle/Lifecycle;->()V -HSPLandroidx/lifecycle/LifecycleCoroutineScope;->()V -HSPLandroidx/lifecycle/LifecycleCoroutineScopeImpl$register$1;->(Landroidx/lifecycle/LifecycleCoroutineScopeImpl;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/lifecycle/LifecycleCoroutineScopeImpl$register$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/lifecycle/LifecycleCoroutineScopeImpl$register$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/lifecycle/LifecycleCoroutineScopeImpl;->(Landroidx/lifecycle/Lifecycle;Lkotlin/coroutines/CoroutineContext;)V -HSPLandroidx/lifecycle/LifecycleCoroutineScopeImpl;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext; -HSPLandroidx/lifecycle/LifecycleCoroutineScopeImpl;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V -HSPLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;->()V -HSPLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V -HSPLandroidx/lifecycle/LifecycleDispatcher;->()V -HSPLandroidx/lifecycle/LifecycleRegistry$ObserverWithState;->(Landroidx/lifecycle/LifecycleObserver;Landroidx/lifecycle/Lifecycle$State;)V -HSPLandroidx/lifecycle/LifecycleRegistry$ObserverWithState;->dispatchEvent(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V -HSPLandroidx/lifecycle/LifecycleRegistry;->(Landroidx/lifecycle/LifecycleOwner;)V -HSPLandroidx/lifecycle/LifecycleRegistry;->addObserver(Landroidx/lifecycle/LifecycleObserver;)V -HSPLandroidx/lifecycle/LifecycleRegistry;->calculateTargetState(Landroidx/lifecycle/LifecycleObserver;)Landroidx/lifecycle/Lifecycle$State; -HSPLandroidx/lifecycle/LifecycleRegistry;->enforceMainThreadIfNeeded(Ljava/lang/String;)V -HSPLandroidx/lifecycle/LifecycleRegistry;->getCurrentState()Landroidx/lifecycle/Lifecycle$State; -HSPLandroidx/lifecycle/LifecycleRegistry;->handleLifecycleEvent(Landroidx/lifecycle/Lifecycle$Event;)V -HSPLandroidx/lifecycle/LifecycleRegistry;->moveToState(Landroidx/lifecycle/Lifecycle$State;)V -HSPLandroidx/lifecycle/LifecycleRegistry;->removeObserver(Landroidx/lifecycle/LifecycleObserver;)V -HSPLandroidx/lifecycle/LifecycleRegistry;->setCurrentState(Landroidx/lifecycle/Lifecycle$State;)V -HSPLandroidx/lifecycle/LifecycleRegistry;->sync()V -HSPLandroidx/lifecycle/Lifecycling;->()V -HSPLandroidx/lifecycle/LiveData$1;->(Landroidx/lifecycle/LiveData;)V -HSPLandroidx/lifecycle/LiveData$1;->run()V -HSPLandroidx/lifecycle/LiveData$AlwaysActiveObserver;->(Landroidx/lifecycle/LiveData;Landroidx/lifecycle/Observer;)V -HSPLandroidx/lifecycle/LiveData$AlwaysActiveObserver;->shouldBeActive()Z -HSPLandroidx/lifecycle/LiveData$ObserverWrapper;->(Landroidx/lifecycle/LiveData;Landroidx/lifecycle/Observer;)V -HSPLandroidx/lifecycle/LiveData$ObserverWrapper;->activeStateChanged(Z)V -HSPLandroidx/lifecycle/LiveData;->()V -HSPLandroidx/lifecycle/LiveData;->()V -HSPLandroidx/lifecycle/LiveData;->assertMainThread(Ljava/lang/String;)V -HSPLandroidx/lifecycle/LiveData;->considerNotify(Landroidx/lifecycle/LiveData$ObserverWrapper;)V -HSPLandroidx/lifecycle/LiveData;->dispatchingValue(Landroidx/lifecycle/LiveData$ObserverWrapper;)V -HSPLandroidx/lifecycle/LiveData;->observeForever(Landroidx/lifecycle/Observer;)V -HSPLandroidx/lifecycle/LiveData;->postValue(Ljava/lang/Object;)V -HSPLandroidx/lifecycle/LiveData;->setValue(Ljava/lang/Object;)V -HSPLandroidx/lifecycle/MediatorLiveData$Source;->(Landroidx/lifecycle/LiveData;Landroidx/lifecycle/Observer;)V -HSPLandroidx/lifecycle/MediatorLiveData$Source;->onChanged(Ljava/lang/Object;)V -HSPLandroidx/lifecycle/MediatorLiveData;->()V -HSPLandroidx/lifecycle/MediatorLiveData;->addSource(Landroidx/lifecycle/LiveData;Landroidx/lifecycle/Observer;)V -HSPLandroidx/lifecycle/MediatorLiveData;->onActive()V -HSPLandroidx/lifecycle/MutableLiveData;->()V -HSPLandroidx/lifecycle/MutableLiveData;->postValue(Ljava/lang/Object;)V -HSPLandroidx/lifecycle/MutableLiveData;->setValue(Ljava/lang/Object;)V -HSPLandroidx/lifecycle/ProcessLifecycleInitializer;->()V -HSPLandroidx/lifecycle/ProcessLifecycleInitializer;->create(Landroid/content/Context;)Ljava/lang/Object; -HSPLandroidx/lifecycle/ProcessLifecycleInitializer;->dependencies()Ljava/util/List; -HSPLandroidx/lifecycle/ProcessLifecycleOwner$1;->(Landroidx/lifecycle/ProcessLifecycleOwner;)V -HSPLandroidx/lifecycle/ProcessLifecycleOwner$2;->(Landroidx/lifecycle/ProcessLifecycleOwner;)V -HSPLandroidx/lifecycle/ProcessLifecycleOwner$3$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/Activity;Landroidx/lifecycle/ProcessLifecycleOwner$3$1;)V -HSPLandroidx/lifecycle/ProcessLifecycleOwner$3$1;->(Landroidx/lifecycle/ProcessLifecycleOwner$3;)V -HSPLandroidx/lifecycle/ProcessLifecycleOwner$3$1;->onActivityPostResumed(Landroid/app/Activity;)V -HSPLandroidx/lifecycle/ProcessLifecycleOwner$3$1;->onActivityPostStarted(Landroid/app/Activity;)V -HSPLandroidx/lifecycle/ProcessLifecycleOwner$3;->(Landroidx/lifecycle/ProcessLifecycleOwner;)V -HSPLandroidx/lifecycle/ProcessLifecycleOwner$3;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V -HSPLandroidx/lifecycle/ProcessLifecycleOwner$3;->onActivityPreCreated(Landroid/app/Activity;Landroid/os/Bundle;)V -HSPLandroidx/lifecycle/ProcessLifecycleOwner;->()V -HSPLandroidx/lifecycle/ProcessLifecycleOwner;->()V -HSPLandroidx/lifecycle/ProcessLifecycleOwner;->activityResumed()V -HSPLandroidx/lifecycle/ProcessLifecycleOwner;->getLifecycle()Landroidx/lifecycle/Lifecycle; -HSPLandroidx/lifecycle/RepeatOnLifecycleKt$repeatOnLifecycle$3$1$1$1$1$1$1;->(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/lifecycle/RepeatOnLifecycleKt$repeatOnLifecycle$3$1$1$1$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/lifecycle/RepeatOnLifecycleKt$repeatOnLifecycle$3$1$1$1$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/lifecycle/RepeatOnLifecycleKt$repeatOnLifecycle$3$1$1$1$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/lifecycle/RepeatOnLifecycleKt$repeatOnLifecycle$3$1$1$1$1;->(Lkotlinx/coroutines/sync/Mutex;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/lifecycle/RepeatOnLifecycleKt$repeatOnLifecycle$3$1$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/lifecycle/RepeatOnLifecycleKt$repeatOnLifecycle$3$1$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/lifecycle/RepeatOnLifecycleKt$repeatOnLifecycle$3$1$1$1;->(Landroidx/lifecycle/Lifecycle$Event;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/CoroutineScope;Landroidx/lifecycle/Lifecycle$Event;Lkotlinx/coroutines/CancellableContinuationImpl;Lkotlinx/coroutines/sync/MutexImpl;Lkotlin/jvm/functions/Function2;)V -HSPLandroidx/lifecycle/RepeatOnLifecycleKt$repeatOnLifecycle$3$1$1$1;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V -HSPLandroidx/lifecycle/RepeatOnLifecycleKt$repeatOnLifecycle$3$1;->(Landroidx/lifecycle/Lifecycle;Landroidx/lifecycle/Lifecycle$State;Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/lifecycle/RepeatOnLifecycleKt$repeatOnLifecycle$3$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/lifecycle/RepeatOnLifecycleKt$repeatOnLifecycle$3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/lifecycle/RepeatOnLifecycleKt$repeatOnLifecycle$3$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/lifecycle/RepeatOnLifecycleKt$repeatOnLifecycle$3;->(Landroidx/lifecycle/Lifecycle;Landroidx/lifecycle/Lifecycle$State;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/lifecycle/RepeatOnLifecycleKt$repeatOnLifecycle$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/lifecycle/RepeatOnLifecycleKt$repeatOnLifecycle$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/lifecycle/RepeatOnLifecycleKt$repeatOnLifecycle$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/lifecycle/RepeatOnLifecycleKt;->repeatOnLifecycle(Landroidx/lifecycle/Lifecycle;Landroidx/lifecycle/Lifecycle$State;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/Activity;Landroidx/lifecycle/ReportFragment$LifecycleCallbacks;)V -HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->()V -HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V -HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostCreated(Landroid/app/Activity;Landroid/os/Bundle;)V -HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostResumed(Landroid/app/Activity;)V -HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostStarted(Landroid/app/Activity;)V -HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityResumed(Landroid/app/Activity;)V -HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityStarted(Landroid/app/Activity;)V -HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->registerIn(Landroid/app/Activity;)V -HSPLandroidx/lifecycle/ReportFragment;->()V -HSPLandroidx/lifecycle/ReportFragment;->dispatch(Landroid/app/Activity;Landroidx/lifecycle/Lifecycle$Event;)V -HSPLandroidx/lifecycle/ReportFragment;->dispatch(Landroidx/lifecycle/Lifecycle$Event;)V -HSPLandroidx/lifecycle/ReportFragment;->injectIfNeededIn(Landroid/app/Activity;)V -HSPLandroidx/lifecycle/ReportFragment;->onActivityCreated(Landroid/os/Bundle;)V -HSPLandroidx/lifecycle/ReportFragment;->onResume()V -HSPLandroidx/lifecycle/ReportFragment;->onStart()V -HSPLandroidx/lifecycle/SavedStateHandle$$ExternalSyntheticLambda0;->(Landroidx/lifecycle/SavedStateHandle;)V -HSPLandroidx/lifecycle/SavedStateHandle$Companion;->createHandle(Landroid/os/Bundle;Landroid/os/Bundle;)Landroidx/lifecycle/SavedStateHandle; -HSPLandroidx/lifecycle/SavedStateHandle;->()V -HSPLandroidx/lifecycle/SavedStateHandle;->()V -HSPLandroidx/lifecycle/SavedStateHandle;->set(Ljava/lang/Object;Ljava/lang/String;)V -HSPLandroidx/lifecycle/SavedStateHandleAttacher;->(Landroidx/lifecycle/SavedStateHandlesProvider;)V -HSPLandroidx/lifecycle/SavedStateHandleAttacher;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V -HSPLandroidx/lifecycle/SavedStateHandleSupport$DEFAULT_ARGS_KEY$1;->()V -HSPLandroidx/lifecycle/SavedStateHandleSupport$SAVED_STATE_REGISTRY_OWNER_KEY$1;->()V -HSPLandroidx/lifecycle/SavedStateHandleSupport$VIEW_MODEL_STORE_OWNER_KEY$1;->()V -HSPLandroidx/lifecycle/SavedStateHandleSupport$savedStateHandlesVM$1$1;->()V -HSPLandroidx/lifecycle/SavedStateHandleSupport$savedStateHandlesVM$1$1;->()V -HSPLandroidx/lifecycle/SavedStateHandleSupport$savedStateHandlesVM$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/lifecycle/SavedStateHandleSupport;->()V -HSPLandroidx/lifecycle/SavedStateHandleSupport;->createSavedStateHandle(Landroidx/lifecycle/viewmodel/MutableCreationExtras;)Landroidx/lifecycle/SavedStateHandle; -HSPLandroidx/lifecycle/SavedStateHandleSupport;->enableSavedStateHandles(Landroidx/savedstate/SavedStateRegistryOwner;)V -HSPLandroidx/lifecycle/SavedStateHandleSupport;->getSavedStateHandlesVM(Landroidx/lifecycle/ViewModelStoreOwner;)Landroidx/lifecycle/SavedStateHandlesVM; -HSPLandroidx/lifecycle/SavedStateHandlesProvider$viewModel$2;->(Landroidx/lifecycle/ViewModelStoreOwner;)V -HSPLandroidx/lifecycle/SavedStateHandlesProvider$viewModel$2;->invoke()Ljava/lang/Object; -HSPLandroidx/lifecycle/SavedStateHandlesProvider;->(Landroidx/savedstate/SavedStateRegistry;Landroidx/lifecycle/ViewModelStoreOwner;)V -HSPLandroidx/lifecycle/SavedStateHandlesVM;->()V -HSPLandroidx/lifecycle/SavedStateViewModelFactory;->(Landroid/app/Application;Landroidx/savedstate/SavedStateRegistryOwner;Landroid/os/Bundle;)V -HSPLandroidx/lifecycle/SavedStateViewModelFactory;->create(Ljava/lang/Class;Landroidx/lifecycle/viewmodel/MutableCreationExtras;)Landroidx/lifecycle/ViewModel; -HSPLandroidx/lifecycle/SavedStateViewModelFactory;->onRequery(Landroidx/lifecycle/ViewModel;)V -HSPLandroidx/lifecycle/SavedStateViewModelFactoryKt;->()V -HSPLandroidx/lifecycle/SavedStateViewModelFactoryKt;->findMatchingConstructor(Ljava/lang/Class;Ljava/util/List;)Ljava/lang/reflect/Constructor; -HSPLandroidx/lifecycle/SavedStateViewModelFactoryKt;->newInstance(Ljava/lang/Class;Ljava/lang/reflect/Constructor;[Ljava/lang/Object;)Landroidx/lifecycle/ViewModel; -HSPLandroidx/lifecycle/Transformations$1;->(Landroidx/lifecycle/MediatorLiveData;Lcom/google/samples/apps/nowinandroid/sync/status/WorkManagerSyncStatusMonitor$$ExternalSyntheticLambda0;)V -HSPLandroidx/lifecycle/Transformations$1;->onChanged(Ljava/lang/Object;)V -HSPLandroidx/lifecycle/ViewModel;->()V -HSPLandroidx/lifecycle/ViewModel;->setTagIfAbsent(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object; -HSPLandroidx/lifecycle/ViewModelKt;->getViewModelScope(Landroidx/lifecycle/ViewModel;)Lkotlinx/coroutines/CoroutineScope; -HSPLandroidx/lifecycle/ViewModelLazy;->(Lkotlin/jvm/internal/ClassReference;Lcom/google/samples/apps/nowinandroid/MainActivity$special$$inlined$viewModels$default$2;Lcom/google/samples/apps/nowinandroid/MainActivity$special$$inlined$viewModels$default$1;Lcom/google/samples/apps/nowinandroid/MainActivity$special$$inlined$viewModels$default$3;)V -HSPLandroidx/lifecycle/ViewModelLazy;->getValue()Ljava/lang/Object; -HSPLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory$Companion$ApplicationKeyImpl;->()V -HSPLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory$Companion$ApplicationKeyImpl;->()V -HSPLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory;->(Landroid/app/Application;)V -HSPLandroidx/lifecycle/ViewModelProvider$Factory;->create(Ljava/lang/Class;Landroidx/lifecycle/viewmodel/MutableCreationExtras;)Landroidx/lifecycle/ViewModel; -HSPLandroidx/lifecycle/ViewModelProvider$NewInstanceFactory$Companion$ViewModelKeyImpl;->()V -HSPLandroidx/lifecycle/ViewModelProvider$NewInstanceFactory$Companion$ViewModelKeyImpl;->()V -HSPLandroidx/lifecycle/ViewModelProvider$NewInstanceFactory;->()V -HSPLandroidx/lifecycle/ViewModelProvider$OnRequeryFactory;->()V -HSPLandroidx/lifecycle/ViewModelProvider;->(Landroidx/lifecycle/ViewModelStore;Landroidx/lifecycle/ViewModelProvider$Factory;I)V -HSPLandroidx/lifecycle/ViewModelProvider;->(Landroidx/lifecycle/ViewModelStore;Landroidx/lifecycle/ViewModelProvider$Factory;Landroidx/lifecycle/viewmodel/CreationExtras;)V -HSPLandroidx/lifecycle/ViewModelProvider;->(Landroidx/lifecycle/ViewModelStoreOwner;Landroidx/lifecycle/ViewModelProvider$Factory;)V -HSPLandroidx/lifecycle/ViewModelProvider;->get(Ljava/lang/Class;)Landroidx/lifecycle/ViewModel; -HSPLandroidx/lifecycle/ViewModelProvider;->get(Ljava/lang/Class;Ljava/lang/String;)Landroidx/lifecycle/ViewModel; -HSPLandroidx/lifecycle/ViewModelStore;->()V -HSPLandroidx/lifecycle/compose/FlowExtKt$collectAsStateWithLifecycle$1$1$1;->(Landroidx/compose/runtime/ProduceStateScope;)V -HSPLandroidx/lifecycle/compose/FlowExtKt$collectAsStateWithLifecycle$1$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLandroidx/lifecycle/compose/FlowExtKt$collectAsStateWithLifecycle$1$1;->(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/flow/Flow;Landroidx/compose/runtime/ProduceStateScope;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/lifecycle/compose/FlowExtKt$collectAsStateWithLifecycle$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/lifecycle/compose/FlowExtKt$collectAsStateWithLifecycle$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/lifecycle/compose/FlowExtKt$collectAsStateWithLifecycle$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/lifecycle/compose/FlowExtKt$collectAsStateWithLifecycle$1;->(Landroidx/lifecycle/Lifecycle;Landroidx/lifecycle/Lifecycle$State;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/lifecycle/compose/FlowExtKt$collectAsStateWithLifecycle$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/lifecycle/compose/FlowExtKt$collectAsStateWithLifecycle$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/lifecycle/compose/FlowExtKt$collectAsStateWithLifecycle$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/lifecycle/compose/FlowExtKt;->collectAsStateWithLifecycle(Lkotlinx/coroutines/flow/ReadonlyStateFlow;Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/MutableState; -HSPLandroidx/lifecycle/runtime/R$id;->hasSpan(Landroid/text/Spanned;Ljava/lang/Class;)Z -HSPLandroidx/lifecycle/viewmodel/CreationExtras$Empty;->()V -HSPLandroidx/lifecycle/viewmodel/CreationExtras$Empty;->()V -HSPLandroidx/lifecycle/viewmodel/CreationExtras;->()V -HSPLandroidx/lifecycle/viewmodel/InitializerViewModelFactory;->([Landroidx/lifecycle/viewmodel/ViewModelInitializer;)V -HSPLandroidx/lifecycle/viewmodel/InitializerViewModelFactory;->create(Ljava/lang/Class;Landroidx/lifecycle/viewmodel/MutableCreationExtras;)Landroidx/lifecycle/ViewModel; -HSPLandroidx/lifecycle/viewmodel/MutableCreationExtras;->(I)V -HSPLandroidx/lifecycle/viewmodel/MutableCreationExtras;->(Landroidx/lifecycle/viewmodel/CreationExtras;)V -HSPLandroidx/lifecycle/viewmodel/ViewModelInitializer;->(Ljava/lang/Class;)V -HSPLandroidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner$LocalViewModelStoreOwner$1;->()V -HSPLandroidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner$LocalViewModelStoreOwner$1;->()V -HSPLandroidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner$LocalViewModelStoreOwner$1;->invoke()Ljava/lang/Object; -HSPLandroidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner;->()V -HSPLandroidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner;->getCurrent(Landroidx/compose/runtime/Composer;)Landroidx/lifecycle/ViewModelStoreOwner; -HSPLandroidx/lifecycle/viewmodel/compose/ViewModelKt;->get(Landroidx/lifecycle/ViewModelStoreOwner;Ljava/lang/Class;Ljava/lang/String;Landroidx/lifecycle/ViewModelProvider$Factory;Landroidx/lifecycle/viewmodel/CreationExtras;)Landroidx/lifecycle/ViewModel; -HSPLandroidx/lifecycle/viewmodel/compose/ViewModelKt;->viewModel(Ljava/lang/Class;Landroidx/lifecycle/ViewModelStoreOwner;Ldagger/hilt/android/internal/lifecycle/HiltViewModelFactory;Landroidx/compose/runtime/Composer;)Landroidx/lifecycle/ViewModel; -HSPLandroidx/metrics/performance/DelegatingFrameMetricsListener;->(Ljava/util/ArrayList;)V -HSPLandroidx/metrics/performance/DelegatingFrameMetricsListener;->onFrameMetricsAvailable(Landroid/view/Window;Landroid/view/FrameMetrics;I)V -HSPLandroidx/metrics/performance/FrameData;->(Ljava/util/ArrayList;)V -HSPLandroidx/metrics/performance/FrameDataApi24;->(Ljava/util/ArrayList;)V -HSPLandroidx/metrics/performance/FrameDataApi31;->(Ljava/util/ArrayList;)V -HSPLandroidx/metrics/performance/FrameDataApi31;->toString()Ljava/lang/String; -HSPLandroidx/metrics/performance/JankStats;->(Landroid/view/Window;)V -HSPLandroidx/metrics/performance/JankStatsApi16Impl$onFrameListenerDelegate$1;->(Landroidx/metrics/performance/JankStats;Landroidx/metrics/performance/JankStatsApi16Impl;)V -HSPLandroidx/metrics/performance/JankStatsApi16Impl;->(Landroidx/metrics/performance/JankStats;Landroid/view/View;)V -HSPLandroidx/metrics/performance/JankStatsApi22Impl;->(Landroidx/metrics/performance/JankStats;Landroid/view/View;)V -HSPLandroidx/metrics/performance/JankStatsApi24Impl$$ExternalSyntheticLambda0;->(Landroidx/metrics/performance/JankStatsApi24Impl;Landroidx/metrics/performance/JankStats;)V -HSPLandroidx/metrics/performance/JankStatsApi24Impl$$ExternalSyntheticLambda0;->onFrameMetricsAvailable(Landroid/view/Window;Landroid/view/FrameMetrics;I)V -HSPLandroidx/metrics/performance/JankStatsApi24Impl;->(Landroidx/metrics/performance/JankStats;Landroid/view/View;Landroid/view/Window;)V -HSPLandroidx/metrics/performance/JankStatsApi24Impl;->getOrCreateFrameMetricsListenerDelegator(Landroid/view/Window;)Landroidx/metrics/performance/DelegatingFrameMetricsListener; -HSPLandroidx/metrics/performance/JankStatsApi24Impl;->setupFrameTimer(Z)V -HSPLandroidx/metrics/performance/JankStatsApi26Impl;->(Landroidx/metrics/performance/JankStats;Landroid/view/View;Landroid/view/Window;)V -HSPLandroidx/metrics/performance/JankStatsApi26Impl;->getFrameStartTime$metrics_performance_release(Landroid/view/FrameMetrics;)J -HSPLandroidx/metrics/performance/JankStatsApi31Impl;->(Landroidx/metrics/performance/JankStats;Landroid/view/View;Landroid/view/Window;)V -HSPLandroidx/metrics/performance/JankStatsApi31Impl;->getExpectedFrameDuration(Landroid/view/FrameMetrics;)J -HSPLandroidx/metrics/performance/JankStatsApi31Impl;->getFrameData$metrics_performance_release(JJLandroid/view/FrameMetrics;)Landroidx/metrics/performance/FrameDataApi24; -HSPLandroidx/metrics/performance/JankStatsBaseImpl;->(Landroidx/metrics/performance/JankStats;)V -HSPLandroidx/metrics/performance/OnFrameListenerDelegate;->()V -HSPLandroidx/metrics/performance/PerformanceMetricsState$Holder;->()V -HSPLandroidx/metrics/performance/PerformanceMetricsState$StateData;->(JLandroidx/metrics/performance/StateInfo;)V -HSPLandroidx/metrics/performance/PerformanceMetricsState;->()V -HSPLandroidx/metrics/performance/PerformanceMetricsState;->addFrameState(JJLjava/util/ArrayList;Ljava/util/ArrayList;)V -HSPLandroidx/metrics/performance/PerformanceMetricsState;->cleanupSingleFrameStates$metrics_performance_release()V -HSPLandroidx/metrics/performance/PerformanceMetricsState;->getIntervalStates$metrics_performance_release(JJLjava/util/ArrayList;)V -HSPLandroidx/metrics/performance/PerformanceMetricsState;->markStateForRemoval(Ljava/lang/String;Ljava/util/ArrayList;J)V -HSPLandroidx/metrics/performance/PerformanceMetricsState;->putState(Ljava/lang/String;Ljava/lang/String;)V -HSPLandroidx/metrics/performance/StateInfo;->()V -HSPLandroidx/metrics/performance/StateInfo;->(Ljava/lang/String;Ljava/lang/String;)V -HSPLandroidx/metrics/performance/StateInfo;->toString()Ljava/lang/String; -HSPLandroidx/navigation/ActivityNavigator$hostActivity$1;->()V -HSPLandroidx/navigation/ActivityNavigator$hostActivity$1;->()V -HSPLandroidx/navigation/ActivityNavigator;->(Landroid/content/Context;)V -HSPLandroidx/navigation/NamedNavArgument;->(Landroidx/navigation/NavArgument;)V -HSPLandroidx/navigation/NavArgument$Builder;->()V -HSPLandroidx/navigation/NavArgument;->(Landroidx/navigation/NavType;)V -HSPLandroidx/navigation/NavArgument;->equals(Ljava/lang/Object;)Z -HSPLandroidx/navigation/NavArgument;->hashCode()I -HSPLandroidx/navigation/NavArgumentBuilder;->()V -HSPLandroidx/navigation/NavBackStackEntry$Companion;->()V -HSPLandroidx/navigation/NavBackStackEntry$Companion;->create$default(Landroid/content/Context;Landroidx/navigation/NavDestination;Landroid/os/Bundle;Landroidx/lifecycle/Lifecycle$State;Landroidx/navigation/NavControllerViewModel;)Landroidx/navigation/NavBackStackEntry; -HSPLandroidx/navigation/NavBackStackEntry$defaultFactory$2;->(Landroidx/navigation/NavBackStackEntry;)V -HSPLandroidx/navigation/NavBackStackEntry$defaultFactory$2;->invoke()Ljava/lang/Object; -HSPLandroidx/navigation/NavBackStackEntry$savedStateHandle$2;->(Landroidx/navigation/NavBackStackEntry;)V -HSPLandroidx/navigation/NavBackStackEntry;->()V -HSPLandroidx/navigation/NavBackStackEntry;->(Landroid/content/Context;Landroidx/navigation/NavDestination;Landroid/os/Bundle;Landroidx/lifecycle/Lifecycle$State;Landroidx/navigation/NavViewModelStoreProvider;Ljava/lang/String;Landroid/os/Bundle;)V -HSPLandroidx/navigation/NavBackStackEntry;->equals(Ljava/lang/Object;)Z -HSPLandroidx/navigation/NavBackStackEntry;->getDefaultViewModelCreationExtras()Landroidx/lifecycle/viewmodel/CreationExtras; -HSPLandroidx/navigation/NavBackStackEntry;->getDefaultViewModelProviderFactory()Landroidx/lifecycle/ViewModelProvider$Factory; -HSPLandroidx/navigation/NavBackStackEntry;->getLifecycle()Landroidx/lifecycle/Lifecycle; -HSPLandroidx/navigation/NavBackStackEntry;->getSavedStateRegistry()Landroidx/savedstate/SavedStateRegistry; -HSPLandroidx/navigation/NavBackStackEntry;->getViewModelStore()Landroidx/lifecycle/ViewModelStore; -HSPLandroidx/navigation/NavBackStackEntry;->hashCode()I -HSPLandroidx/navigation/NavBackStackEntry;->setMaxLifecycle(Landroidx/lifecycle/Lifecycle$State;)V -HSPLandroidx/navigation/NavBackStackEntry;->updateState()V -HSPLandroidx/navigation/NavController$$ExternalSyntheticLambda0;->(Landroidx/navigation/NavController;)V -HSPLandroidx/navigation/NavController$$ExternalSyntheticLambda0;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V -HSPLandroidx/navigation/NavController$NavControllerNavigatorState;->(Landroidx/navigation/NavController;Landroidx/navigation/Navigator;)V -HSPLandroidx/navigation/NavController$NavControllerNavigatorState;->addInternal(Landroidx/navigation/NavBackStackEntry;)V -HSPLandroidx/navigation/NavController$NavControllerNavigatorState;->createBackStackEntry(Landroidx/navigation/NavDestination;Landroid/os/Bundle;)Landroidx/navigation/NavBackStackEntry; -HSPLandroidx/navigation/NavController$NavControllerNavigatorState;->markTransitionComplete(Landroidx/navigation/NavBackStackEntry;)V -HSPLandroidx/navigation/NavController$NavControllerNavigatorState;->push(Landroidx/navigation/NavBackStackEntry;)V -HSPLandroidx/navigation/NavController$activity$1;->()V -HSPLandroidx/navigation/NavController$activity$1;->()V -HSPLandroidx/navigation/NavController$navInflater$2;->(Landroidx/navigation/NavController;)V -HSPLandroidx/navigation/NavController$navigate$4;->(Lkotlin/jvm/internal/Ref$BooleanRef;Landroidx/navigation/NavController;Landroidx/navigation/NavDestination;Landroid/os/Bundle;)V -HSPLandroidx/navigation/NavController$navigate$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/navigation/NavController$onBackPressedCallback$1;->(Landroidx/navigation/NavController;)V -HSPLandroidx/navigation/NavController;->(Landroid/content/Context;)V -HSPLandroidx/navigation/NavController;->addEntryToBackStack(Landroidx/navigation/NavDestination;Landroid/os/Bundle;Landroidx/navigation/NavBackStackEntry;Ljava/util/List;)V -HSPLandroidx/navigation/NavController;->dispatchOnDestinationChanged()Z -HSPLandroidx/navigation/NavController;->findDestination(I)Landroidx/navigation/NavDestination; -HSPLandroidx/navigation/NavController;->getBackStackEntry(I)Landroidx/navigation/NavBackStackEntry; -HSPLandroidx/navigation/NavController;->getHostLifecycleState$navigation_runtime_release()Landroidx/lifecycle/Lifecycle$State; -HSPLandroidx/navigation/NavController;->linkChildToParent(Landroidx/navigation/NavBackStackEntry;Landroidx/navigation/NavBackStackEntry;)V -HSPLandroidx/navigation/NavController;->navigate(Landroidx/navigation/NavDestination;Landroid/os/Bundle;Landroidx/navigation/NavOptions;Landroidx/navigation/Navigator$Extras;)V -HSPLandroidx/navigation/NavController;->populateVisibleEntries$navigation_runtime_release()Ljava/util/ArrayList; -HSPLandroidx/navigation/NavController;->updateBackStackLifecycle$navigation_runtime_release()V -HSPLandroidx/navigation/NavController;->updateOnBackPressedCallbackEnabled()V -HSPLandroidx/navigation/NavControllerViewModel$Companion$FACTORY$1;->()V -HSPLandroidx/navigation/NavControllerViewModel$Companion$FACTORY$1;->create(Ljava/lang/Class;)Landroidx/lifecycle/ViewModel; -HSPLandroidx/navigation/NavControllerViewModel;->()V -HSPLandroidx/navigation/NavControllerViewModel;->()V -HSPLandroidx/navigation/NavControllerViewModel;->getViewModelStore(Ljava/lang/String;)Landroidx/lifecycle/ViewModelStore; -HSPLandroidx/navigation/NavDeepLink$mimeTypePattern$2;->(Landroidx/navigation/NavDeepLink;)V -HSPLandroidx/navigation/NavDeepLink$pattern$2;->(Landroidx/navigation/NavDeepLink;)V -HSPLandroidx/navigation/NavDeepLink;->()V -HSPLandroidx/navigation/NavDeepLink;->(Ljava/lang/String;)V -HSPLandroidx/navigation/NavDeepLink;->buildPathRegex(Ljava/lang/String;Ljava/lang/StringBuilder;Ljava/util/regex/Pattern;)Z -HSPLandroidx/navigation/NavDeepLink;->equals(Ljava/lang/Object;)Z -HSPLandroidx/navigation/NavDeepLink;->hashCode()I -HSPLandroidx/navigation/NavDeepLinkRequest;->(Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;)V -HSPLandroidx/navigation/NavDestination$$ExternalSyntheticOutline0;->m(Ljava/lang/String;II)I -HSPLandroidx/navigation/NavDestination$Companion$hierarchy$1;->()V -HSPLandroidx/navigation/NavDestination$Companion$hierarchy$1;->()V -HSPLandroidx/navigation/NavDestination$Companion$hierarchy$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/navigation/NavDestination$Companion;->createRoute(Ljava/lang/String;)Ljava/lang/String; -HSPLandroidx/navigation/NavDestination;->()V -HSPLandroidx/navigation/NavDestination;->(Landroidx/navigation/Navigator;)V -HSPLandroidx/navigation/NavDestination;->addDeepLink(Landroidx/navigation/NavDeepLink;)V -HSPLandroidx/navigation/NavDestination;->addInDefaultArgs(Landroid/os/Bundle;)Landroid/os/Bundle; -HSPLandroidx/navigation/NavDestination;->equals(Ljava/lang/Object;)Z -HSPLandroidx/navigation/NavDestination;->getArguments()Ljava/util/Map; -HSPLandroidx/navigation/NavDestination;->hashCode()I -HSPLandroidx/navigation/NavDestination;->matchDeepLink(Landroidx/navigation/NavDeepLinkRequest;)Landroidx/navigation/NavDestination$DeepLinkMatch; -HSPLandroidx/navigation/NavDestination;->setRoute(Ljava/lang/String;)V -HSPLandroidx/navigation/NavDestinationBuilder;->(Landroidx/navigation/Navigator;Ljava/lang/String;)V -HSPLandroidx/navigation/NavGraph$iterator$1;->(Landroidx/navigation/NavGraph;)V -HSPLandroidx/navigation/NavGraph$iterator$1;->hasNext()Z -HSPLandroidx/navigation/NavGraph$iterator$1;->next()Ljava/lang/Object; -HSPLandroidx/navigation/NavGraph;->(Landroidx/navigation/Navigator;)V -HSPLandroidx/navigation/NavGraph;->equals(Ljava/lang/Object;)Z -HSPLandroidx/navigation/NavGraph;->findNode(Ljava/lang/String;Z)Landroidx/navigation/NavDestination; -HSPLandroidx/navigation/NavGraph;->hashCode()I -HSPLandroidx/navigation/NavGraph;->matchDeepLink(Landroidx/navigation/NavDeepLinkRequest;)Landroidx/navigation/NavDestination$DeepLinkMatch; -HSPLandroidx/navigation/NavGraph;->setStartDestinationRoute(Ljava/lang/String;)V -HSPLandroidx/navigation/NavGraphBuilder;->(Landroidx/navigation/NavigatorProvider;Ljava/lang/String;Ljava/lang/String;)V -HSPLandroidx/navigation/NavGraphBuilder;->build()Landroidx/navigation/NavGraph; -HSPLandroidx/navigation/NavGraphNavigator;->(Landroidx/navigation/NavigatorProvider;)V -HSPLandroidx/navigation/NavGraphNavigator;->createDestination()Landroidx/navigation/NavDestination; -HSPLandroidx/navigation/NavGraphNavigator;->navigate(Ljava/util/List;Landroidx/navigation/NavOptions;Landroidx/navigation/Navigator$Extras;)V -HSPLandroidx/navigation/NavHostController;->(Landroid/content/Context;)V -HSPLandroidx/navigation/NavType$Companion$BoolArrayType$1;->()V -HSPLandroidx/navigation/NavType$Companion$BoolType$1;->()V -HSPLandroidx/navigation/NavType$Companion$FloatArrayType$1;->()V -HSPLandroidx/navigation/NavType$Companion$FloatType$1;->()V -HSPLandroidx/navigation/NavType$Companion$IntArrayType$1;->()V -HSPLandroidx/navigation/NavType$Companion$IntType$1;->()V -HSPLandroidx/navigation/NavType$Companion$LongArrayType$1;->()V -HSPLandroidx/navigation/NavType$Companion$LongType$1;->()V -HSPLandroidx/navigation/NavType$Companion$StringArrayType$1;->()V -HSPLandroidx/navigation/NavType$Companion$StringType$1;->()V -HSPLandroidx/navigation/NavType;->()V -HSPLandroidx/navigation/NavType;->(Z)V -HSPLandroidx/navigation/Navigator;->()V -HSPLandroidx/navigation/Navigator;->getState()Landroidx/navigation/NavigatorState; -HSPLandroidx/navigation/NavigatorProvider$Companion;->getNameForNavigator$navigation_common_release(Ljava/lang/Class;)Ljava/lang/String; -HSPLandroidx/navigation/NavigatorProvider$Companion;->validateName$navigation_common_release(Ljava/lang/String;)Z -HSPLandroidx/navigation/NavigatorProvider;->()V -HSPLandroidx/navigation/NavigatorProvider;->()V -HSPLandroidx/navigation/NavigatorProvider;->addNavigator(Landroidx/navigation/Navigator;)V -HSPLandroidx/navigation/NavigatorProvider;->getNavigator(Ljava/lang/String;)Landroidx/navigation/Navigator; -HSPLandroidx/navigation/NavigatorState;->()V -HSPLandroidx/navigation/NavigatorState;->markTransitionComplete(Landroidx/navigation/NavBackStackEntry;)V -HSPLandroidx/navigation/NavigatorState;->push(Landroidx/navigation/NavBackStackEntry;)V -HSPLandroidx/navigation/compose/BackStackEntryIdViewModel;->(Landroidx/lifecycle/SavedStateHandle;)V -HSPLandroidx/navigation/compose/ComposeNavigator$Destination;->(Landroidx/navigation/compose/ComposeNavigator;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V -HSPLandroidx/navigation/compose/ComposeNavigator;->()V -HSPLandroidx/navigation/compose/ComposeNavigator;->navigate(Ljava/util/List;Landroidx/navigation/NavOptions;Landroidx/navigation/Navigator$Extras;)V -HSPLandroidx/navigation/compose/DialogHostKt$DialogHost$2;->(Landroidx/navigation/compose/DialogNavigator;I)V -HSPLandroidx/navigation/compose/DialogHostKt;->DialogHost(Landroidx/navigation/compose/DialogNavigator;Landroidx/compose/runtime/Composer;I)V -HSPLandroidx/navigation/compose/DialogHostKt;->PopulateVisibleList(Ljava/util/List;Ljava/util/Collection;Landroidx/compose/runtime/Composer;I)V -HSPLandroidx/navigation/compose/DialogNavigator;->()V -HSPLandroidx/navigation/compose/NavBackStackEntryProviderKt$LocalOwnersProvider$1;->(Landroidx/compose/runtime/saveable/SaveableStateHolder;Lkotlin/jvm/functions/Function2;I)V -HSPLandroidx/navigation/compose/NavBackStackEntryProviderKt$LocalOwnersProvider$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/navigation/compose/NavBackStackEntryProviderKt$SaveableStateProvider$1;->(Landroidx/compose/runtime/saveable/SaveableStateHolder;Lkotlin/jvm/functions/Function2;I)V -HSPLandroidx/navigation/compose/NavBackStackEntryProviderKt;->LocalOwnersProvider(Landroidx/navigation/NavBackStackEntry;Landroidx/compose/runtime/saveable/SaveableStateHolder;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V -HSPLandroidx/navigation/compose/NavBackStackEntryProviderKt;->access$SaveableStateProvider(Landroidx/compose/runtime/saveable/SaveableStateHolder;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V -HSPLandroidx/navigation/compose/NavGraphBuilderKt;->composable$default(Landroidx/navigation/NavGraphBuilder;Ljava/lang/String;Ljava/util/List;Landroidx/compose/runtime/internal/ComposableLambdaImpl;I)V -HSPLandroidx/navigation/compose/NavHostControllerKt$NavControllerSaver$1;->()V -HSPLandroidx/navigation/compose/NavHostControllerKt$NavControllerSaver$1;->()V -HSPLandroidx/navigation/compose/NavHostControllerKt$NavControllerSaver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/navigation/compose/NavHostControllerKt$NavControllerSaver$2;->(Landroid/content/Context;)V -HSPLandroidx/navigation/compose/NavHostControllerKt$rememberNavController$1;->(Landroid/content/Context;)V -HSPLandroidx/navigation/compose/NavHostControllerKt$rememberNavController$1;->invoke()Ljava/lang/Object; -HSPLandroidx/navigation/compose/NavHostKt$NavHost$3$invoke$$inlined$onDispose$1;->(Landroidx/navigation/NavHostController;)V -HSPLandroidx/navigation/compose/NavHostKt$NavHost$3$invoke$$inlined$onDispose$1;->dispose()V -HSPLandroidx/navigation/compose/NavHostKt$NavHost$3;->(Landroidx/navigation/NavHostController;)V -HSPLandroidx/navigation/compose/NavHostKt$NavHost$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/navigation/compose/NavHostKt$NavHost$4$1$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/runtime/State;Landroidx/navigation/compose/ComposeNavigator;)V -HSPLandroidx/navigation/compose/NavHostKt$NavHost$4$1$1;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/State;Landroidx/navigation/compose/ComposeNavigator;)V -HSPLandroidx/navigation/compose/NavHostKt$NavHost$4$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/navigation/compose/NavHostKt$NavHost$4$2;->(Landroidx/navigation/NavBackStackEntry;)V -HSPLandroidx/navigation/compose/NavHostKt$NavHost$4$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/navigation/compose/NavHostKt$NavHost$4;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;Landroidx/navigation/compose/ComposeNavigator;Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)V -HSPLandroidx/navigation/compose/NavHostKt$NavHost$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/navigation/compose/NavHostKt$NavHost$5;->(Landroidx/navigation/NavHostController;Landroidx/navigation/NavGraph;Landroidx/compose/ui/Modifier;II)V -HSPLandroidx/navigation/compose/NavHostKt$NavHost$lambda-4$$inlined$map$1$2$1;->(Landroidx/navigation/compose/NavHostKt$NavHost$lambda-4$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/navigation/compose/NavHostKt$NavHost$lambda-4$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V -HSPLandroidx/navigation/compose/NavHostKt$NavHost$lambda-4$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLandroidx/navigation/compose/NavHostKt$NavHost$lambda-4$$inlined$map$1;->(Lkotlinx/coroutines/flow/ReadonlyStateFlow;)V -HSPLandroidx/navigation/compose/NavHostKt$NavHost$lambda-4$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLandroidx/navigation/compose/NavHostKt;->NavHost(Landroidx/navigation/NavHostController;Landroidx/navigation/NavGraph;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V -HSPLandroidx/navigation/compose/NavHostKt;->NavHost(Landroidx/navigation/NavHostController;Ljava/lang/String;Landroidx/compose/ui/Modifier;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V -HSPLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0;->(Landroidx/profileinstaller/ProfileInstallerInitializer;Landroid/content/Context;)V -HSPLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0;->run()V -HSPLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda1;->(Landroid/content/Context;)V -HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl$$ExternalSyntheticLambda0;->(Ljava/lang/Runnable;)V -HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl$$ExternalSyntheticLambda0;->doFrame(J)V -HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl;->postFrameCallback(Ljava/lang/Runnable;)V -HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Handler28Impl;->createAsync(Landroid/os/Looper;)Landroid/os/Handler; -HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Result;->()V -HSPLandroidx/profileinstaller/ProfileInstallerInitializer;->()V -HSPLandroidx/profileinstaller/ProfileInstallerInitializer;->create(Landroid/content/Context;)Ljava/lang/Object; -HSPLandroidx/profileinstaller/ProfileInstallerInitializer;->dependencies()Ljava/util/List; -HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1$1$1;->(Landroidx/room/RoomDatabase;Landroidx/room/CoroutinesRoom$Companion$createFlow$1$1$observer$1;Lkotlinx/coroutines/channels/Channel;Ljava/util/concurrent/Callable;Lkotlinx/coroutines/channels/Channel;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1$1$observer$1;->([Ljava/lang/String;Lkotlinx/coroutines/channels/AbstractChannel;)V -HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1$1;->(ZLandroidx/room/RoomDatabase;Lkotlinx/coroutines/flow/FlowCollector;[Ljava/lang/String;Ljava/util/concurrent/Callable;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1;->(ZLandroidx/room/RoomDatabase;[Ljava/lang/String;Ljava/util/concurrent/Callable;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/room/CoroutinesRoom$Companion$execute$2;->(Ljava/util/concurrent/Callable;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/room/CoroutinesRoom$Companion$execute$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/room/CoroutinesRoom$Companion$execute$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/room/CoroutinesRoom;->createFlow(Landroidx/room/RoomDatabase;Z[Ljava/lang/String;Ljava/util/concurrent/Callable;)Lkotlinx/coroutines/flow/SafeFlow; -HSPLandroidx/room/CoroutinesRoom;->execute(Landroidx/room/RoomDatabase;Ljava/util/concurrent/Callable;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLandroidx/room/CoroutinesRoomKt;->getQueryDispatcher(Landroidx/room/RoomDatabase;)Lkotlinx/coroutines/CoroutineDispatcher; -HSPLandroidx/room/CoroutinesRoomKt;->getTransactionDispatcher(Landroidx/room/RoomDatabase;)Lkotlinx/coroutines/CoroutineDispatcher; -HSPLandroidx/room/DatabaseConfiguration;->(Landroid/content/Context;Ljava/lang/String;Landroidx/sqlite/db/SupportSQLiteOpenHelper$Factory;Landroidx/room/RoomDatabase$MigrationContainer;Ljava/util/ArrayList;ZILjava/util/concurrent/Executor;Ljava/util/concurrent/Executor;ZZLjava/util/LinkedHashSet;Ljava/util/ArrayList;Ljava/util/ArrayList;)V -HSPLandroidx/room/EntityDeletionOrUpdateAdapter;->(Landroidx/room/RoomDatabase;)V -HSPLandroidx/room/EntityInsertionAdapter;->(Landroidx/room/RoomDatabase;)V -HSPLandroidx/room/EntityInsertionAdapter;->insert(Ljava/lang/Object;)V -HSPLandroidx/room/EntityInsertionAdapter;->insertAndReturnIdsList(Ljava/util/List;)Lkotlin/collections/builders/ListBuilder; -HSPLandroidx/room/EntityUpsertionAdapter;->(Landroidx/room/EntityInsertionAdapter;Landroidx/room/EntityDeletionOrUpdateAdapter;)V -HSPLandroidx/room/EntityUpsertionAdapter;->upsert(Ljava/util/List;)V -HSPLandroidx/room/InvalidationLiveDataContainer;->(Landroidx/room/RoomDatabase;)V -HSPLandroidx/room/InvalidationTracker$Companion;->getTriggerName$room_runtime_release(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; -HSPLandroidx/room/InvalidationTracker$ObservedTableTracker;->(I)V -HSPLandroidx/room/InvalidationTracker$ObservedTableTracker;->getTablesToSync()[I -HSPLandroidx/room/InvalidationTracker$Observer;->([Ljava/lang/String;)V -HSPLandroidx/room/InvalidationTracker$ObserverWrapper;->(Landroidx/room/InvalidationTracker$Observer;[I[Ljava/lang/String;)V -HSPLandroidx/room/InvalidationTracker$ObserverWrapper;->notifyByTableInvalidStatus$room_runtime_release(Ljava/util/Set;)V -HSPLandroidx/room/InvalidationTracker$WeakObserver;->(Landroidx/room/InvalidationTracker;Landroidx/room/RoomTrackingLiveData$observer$1;)V -HSPLandroidx/room/InvalidationTracker$WeakObserver;->onInvalidated(Ljava/util/Set;)V -HSPLandroidx/room/InvalidationTracker$refreshRunnable$1;->(Landroidx/room/InvalidationTracker;)V -HSPLandroidx/room/InvalidationTracker$refreshRunnable$1;->checkUpdatedTable()Lkotlin/collections/builders/SetBuilder; -HSPLandroidx/room/InvalidationTracker$refreshRunnable$1;->run()V -HSPLandroidx/room/InvalidationTracker;->()V -HSPLandroidx/room/InvalidationTracker;->(Landroidx/room/RoomDatabase;Ljava/util/HashMap;Ljava/util/HashMap;[Ljava/lang/String;)V -HSPLandroidx/room/InvalidationTracker;->addObserver(Landroidx/room/InvalidationTracker$Observer;)V -HSPLandroidx/room/InvalidationTracker;->ensureInitialization$room_runtime_release()Z -HSPLandroidx/room/InvalidationTracker;->resolveViews([Ljava/lang/String;)[Ljava/lang/String; -HSPLandroidx/room/InvalidationTracker;->startTrackingTable(Landroidx/sqlite/db/SupportSQLiteDatabase;I)V -HSPLandroidx/room/InvalidationTracker;->syncTriggers$room_runtime_release(Landroidx/sqlite/db/SupportSQLiteDatabase;)V -HSPLandroidx/room/Room;->databaseBuilder(Landroid/content/Context;Ljava/lang/Class;Ljava/lang/String;)Landroidx/room/RoomDatabase$Builder; -HSPLandroidx/room/RoomDatabase$Builder;->(Landroid/content/Context;Ljava/lang/Class;Ljava/lang/String;)V -HSPLandroidx/room/RoomDatabase$Builder;->addMigrations([Landroidx/room/migration/Migration;)V -HSPLandroidx/room/RoomDatabase$Builder;->build()Landroidx/room/RoomDatabase; -HSPLandroidx/room/RoomDatabase$Callback;->()V -HSPLandroidx/room/RoomDatabase$MigrationContainer;->()V -HSPLandroidx/room/RoomDatabase$MigrationContainer;->addMigrations([Landroidx/room/migration/Migration;)V -HSPLandroidx/room/RoomDatabase;->()V -HSPLandroidx/room/RoomDatabase;->assertNotMainThread()V -HSPLandroidx/room/RoomDatabase;->assertNotSuspendingTransaction()V -HSPLandroidx/room/RoomDatabase;->beginTransaction()V -HSPLandroidx/room/RoomDatabase;->compileStatement(Ljava/lang/String;)Landroidx/sqlite/db/SupportSQLiteStatement; -HSPLandroidx/room/RoomDatabase;->getAutoMigrations(Ljava/util/LinkedHashMap;)Ljava/util/List; -HSPLandroidx/room/RoomDatabase;->getOpenHelper()Landroidx/sqlite/db/SupportSQLiteOpenHelper; -HSPLandroidx/room/RoomDatabase;->getRequiredAutoMigrationSpecs()Ljava/util/Set; -HSPLandroidx/room/RoomDatabase;->getRequiredTypeConverters()Ljava/util/Map; -HSPLandroidx/room/RoomDatabase;->inTransaction()Z -HSPLandroidx/room/RoomDatabase;->init(Landroidx/room/DatabaseConfiguration;)V -HSPLandroidx/room/RoomDatabase;->internalEndTransaction()V -HSPLandroidx/room/RoomDatabase;->internalInitInvalidationTracker(Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase;)V -HSPLandroidx/room/RoomDatabase;->isOpen()Z -HSPLandroidx/room/RoomDatabase;->query(Landroidx/sqlite/db/SupportSQLiteQuery;Landroid/os/CancellationSignal;)Landroid/database/Cursor; -HSPLandroidx/room/RoomDatabase;->setTransactionSuccessful()V -HSPLandroidx/room/RoomDatabase;->unwrapOpenHelper(Ljava/lang/Class;Landroidx/sqlite/db/SupportSQLiteOpenHelper;)Ljava/lang/Object; -HSPLandroidx/room/RoomOpenHelper$Delegate;->()V -HSPLandroidx/room/RoomOpenHelper;->(Landroidx/room/DatabaseConfiguration;Landroidx/room/RoomOpenHelper$Delegate;Ljava/lang/String;Ljava/lang/String;)V -HSPLandroidx/room/RoomOpenHelper;->onConfigure(Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase;)V -HSPLandroidx/room/RoomOpenHelper;->onCreate(Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase;)V -HSPLandroidx/room/RoomOpenHelper;->onOpen(Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase;)V -HSPLandroidx/room/RoomOpenHelper;->updateIdentity(Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase;)V -HSPLandroidx/room/RoomSQLiteQuery;->()V -HSPLandroidx/room/RoomSQLiteQuery;->(I)V -HSPLandroidx/room/RoomSQLiteQuery;->acquire(ILjava/lang/String;)Landroidx/room/RoomSQLiteQuery; -HSPLandroidx/room/RoomSQLiteQuery;->bindLong(JI)V -HSPLandroidx/room/RoomSQLiteQuery;->bindString(ILjava/lang/String;)V -HSPLandroidx/room/RoomSQLiteQuery;->bindTo(Landroidx/sqlite/db/SupportSQLiteProgram;)V -HSPLandroidx/room/RoomSQLiteQuery;->getSql()Ljava/lang/String; -HSPLandroidx/room/RoomSQLiteQuery;->release()V -HSPLandroidx/room/RoomTrackingLiveData$$ExternalSyntheticLambda0;->(Landroidx/room/RoomTrackingLiveData;)V -HSPLandroidx/room/RoomTrackingLiveData$$ExternalSyntheticLambda0;->run()V -HSPLandroidx/room/RoomTrackingLiveData$$ExternalSyntheticLambda1;->(Landroidx/room/RoomTrackingLiveData;)V -HSPLandroidx/room/RoomTrackingLiveData$$ExternalSyntheticLambda1;->run()V -HSPLandroidx/room/RoomTrackingLiveData$observer$1;->([Ljava/lang/String;Landroidx/room/RoomTrackingLiveData;)V -HSPLandroidx/room/RoomTrackingLiveData$observer$1;->onInvalidated(Ljava/util/Set;)V -HSPLandroidx/room/RoomTrackingLiveData;->(Landroidx/room/RoomDatabase;Landroidx/room/InvalidationLiveDataContainer;Landroidx/work/impl/model/WorkSpecDao_Impl$13;[Ljava/lang/String;)V -HSPLandroidx/room/RoomTrackingLiveData;->onActive()V -HSPLandroidx/room/SharedSQLiteStatement$stmt$2;->(Landroidx/room/SharedSQLiteStatement;)V -HSPLandroidx/room/SharedSQLiteStatement$stmt$2;->invoke()Ljava/lang/Object; -HSPLandroidx/room/SharedSQLiteStatement;->(Landroidx/room/RoomDatabase;)V -HSPLandroidx/room/SharedSQLiteStatement;->acquire()Landroidx/sqlite/db/SupportSQLiteStatement; -HSPLandroidx/room/SharedSQLiteStatement;->release(Landroidx/sqlite/db/SupportSQLiteStatement;)V -HSPLandroidx/room/TransactionElement$Key;->()V -HSPLandroidx/room/TransactionElement;->()V -HSPLandroidx/room/TransactionExecutor$$ExternalSyntheticLambda0;->(Ljava/lang/Runnable;Landroidx/room/TransactionExecutor;)V -HSPLandroidx/room/TransactionExecutor$$ExternalSyntheticLambda0;->run()V -HSPLandroidx/room/TransactionExecutor;->(Ljava/util/concurrent/Executor;)V -HSPLandroidx/room/TransactionExecutor;->execute(Ljava/lang/Runnable;)V -HSPLandroidx/room/TransactionExecutor;->scheduleNext()V -HSPLandroidx/room/migration/Migration;->(II)V -HSPLandroidx/room/util/CursorUtil;->getColumnIndex(Landroid/database/Cursor;Ljava/lang/String;)I -HSPLandroidx/room/util/CursorUtil;->getColumnIndexOrThrow(Landroid/database/Cursor;Ljava/lang/String;)I -HSPLandroidx/room/util/DBUtil;->query(Landroidx/room/RoomDatabase;Landroidx/room/RoomSQLiteQuery;Z)Landroid/database/Cursor; -HSPLandroidx/room/util/StringUtil;->appendPlaceholders(ILjava/lang/StringBuilder;)V -HSPLandroidx/savedstate/R$id;->Constraints$default(III)J -HSPLandroidx/savedstate/R$id;->Constraints(IIII)J -HSPLandroidx/savedstate/R$id;->colors-zjMxDiM(JJJJJLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/NavigationBarItemColors; -HSPLandroidx/savedstate/R$id;->constrain-4WqzIAM(JJ)J -HSPLandroidx/savedstate/R$id;->constrain-N9IONVI(JJ)J -HSPLandroidx/savedstate/R$id;->constrainHeight-K40F9xA(JI)I -HSPLandroidx/savedstate/R$id;->constrainWidth-K40F9xA(JI)I -HSPLandroidx/savedstate/R$id;->offset-NN6Ew-U(IIJ)J -HSPLandroidx/savedstate/Recreator;->(Landroidx/savedstate/SavedStateRegistryOwner;)V -HSPLandroidx/savedstate/Recreator;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V -HSPLandroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0;->(Landroidx/savedstate/SavedStateRegistry;)V -HSPLandroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V -HSPLandroidx/savedstate/SavedStateRegistry;->()V -HSPLandroidx/savedstate/SavedStateRegistry;->consumeRestoredStateForKey(Ljava/lang/String;)Landroid/os/Bundle; -HSPLandroidx/savedstate/SavedStateRegistry;->getSavedStateProvider()Landroidx/savedstate/SavedStateRegistry$SavedStateProvider; -HSPLandroidx/savedstate/SavedStateRegistry;->registerSavedStateProvider(Ljava/lang/String;Landroidx/savedstate/SavedStateRegistry$SavedStateProvider;)V -HSPLandroidx/savedstate/SavedStateRegistryController;->(Landroidx/savedstate/SavedStateRegistryOwner;)V -HSPLandroidx/savedstate/SavedStateRegistryController;->performAttach()V -HSPLandroidx/savedstate/SavedStateRegistryController;->performRestore(Landroid/os/Bundle;)V -HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$1;->()V -HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$1;->()V -HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$2;->()V -HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$2;->()V -HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner;->get(Landroid/view/View;)Landroidx/savedstate/SavedStateRegistryOwner; -HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner;->set(Landroid/view/View;Landroidx/savedstate/SavedStateRegistryOwner;)V -HSPLandroidx/sqlite/db/SimpleSQLiteQuery;->(Ljava/lang/String;)V -HSPLandroidx/sqlite/db/SimpleSQLiteQuery;->bindTo(Landroidx/sqlite/db/SupportSQLiteProgram;)V -HSPLandroidx/sqlite/db/SimpleSQLiteQuery;->getSql()Ljava/lang/String; -HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;->(I)V -HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;->(Landroid/content/Context;Ljava/lang/String;Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;Z)V -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$$ExternalSyntheticLambda1;->(Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase$query$cursorFactory$1;)V -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$$ExternalSyntheticLambda1;->newCursor(Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteCursorDriver;Ljava/lang/String;Landroid/database/sqlite/SQLiteQuery;)Landroid/database/Cursor; -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$query$cursorFactory$1;->(Landroidx/sqlite/db/SupportSQLiteQuery;)V -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$query$cursorFactory$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->()V -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->(Landroid/database/sqlite/SQLiteDatabase;)V -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->beginTransaction()V -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->beginTransactionNonExclusive()V -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->compileStatement(Ljava/lang/String;)Landroidx/sqlite/db/SupportSQLiteStatement; -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->endTransaction()V -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->execSQL(Ljava/lang/String;)V -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->inTransaction()Z -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->isOpen()Z -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->isWriteAheadLoggingEnabled()Z -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->query(Landroidx/sqlite/db/SupportSQLiteQuery;)Landroid/database/Cursor; -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->query(Ljava/lang/String;)Landroid/database/Cursor; -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->setTransactionSuccessful()V -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;->()V -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper$$ExternalSyntheticLambda0;->(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;)V -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper$Companion;->getWrappedDb(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;Landroid/database/sqlite/SQLiteDatabase;)Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase; -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->(Landroid/content/Context;Ljava/lang/String;Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;Z)V -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->getSupportDatabase(Z)Landroidx/sqlite/db/SupportSQLiteDatabase; -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->getWrappedDb(Landroid/database/sqlite/SQLiteDatabase;)Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase; -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->getWritableOrReadableDatabase(Z)Landroid/database/sqlite/SQLiteDatabase; -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->innerGetDatabase(Z)Landroid/database/sqlite/SQLiteDatabase; -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->onConfigure(Landroid/database/sqlite/SQLiteDatabase;)V -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->onCreate(Landroid/database/sqlite/SQLiteDatabase;)V -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->onOpen(Landroid/database/sqlite/SQLiteDatabase;)V -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$lazyDelegate$1;->(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)V -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$lazyDelegate$1;->invoke()Ljava/lang/Object; -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->(Landroid/content/Context;Ljava/lang/String;Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;ZZ)V -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->getWritableDatabase()Landroidx/sqlite/db/SupportSQLiteDatabase; -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->setWriteAheadLoggingEnabled(Z)V -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelperFactory;->()V -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelperFactory;->create(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;)Landroidx/sqlite/db/SupportSQLiteOpenHelper; -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteProgram;->(Landroid/database/sqlite/SQLiteProgram;)V -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteProgram;->bindBlob(I[B)V -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteProgram;->bindLong(JI)V -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteProgram;->bindNull(I)V -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteProgram;->bindString(ILjava/lang/String;)V -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteStatement;->(Landroid/database/sqlite/SQLiteStatement;)V -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteStatement;->executeInsert()J -HSPLandroidx/sqlite/db/framework/FrameworkSQLiteStatement;->executeUpdateDelete()I -HSPLandroidx/sqlite/util/ProcessLock;->()V -HSPLandroidx/sqlite/util/ProcessLock;->(Ljava/lang/String;Ljava/io/File;Z)V -HSPLandroidx/sqlite/util/ProcessLock;->lock(Z)V -HSPLandroidx/sqlite/util/ProcessLock;->unlock()V -HSPLandroidx/startup/AppInitializer;->()V -HSPLandroidx/startup/AppInitializer;->(Landroid/content/Context;)V -HSPLandroidx/startup/AppInitializer;->discoverAndInitialize(Landroid/os/Bundle;)V -HSPLandroidx/startup/AppInitializer;->doInitialize(Ljava/lang/Class;Ljava/util/HashSet;)Ljava/lang/Object; -HSPLandroidx/startup/AppInitializer;->getInstance(Landroid/content/Context;)Landroidx/startup/AppInitializer; -HSPLandroidx/startup/InitializationProvider;->()V -HSPLandroidx/startup/InitializationProvider;->onCreate()Z -HSPLandroidx/startup/StartupLogger;->dynamicTonalPalette(Landroid/content/Context;)Landroidx/compose/material3/TonalPalette; -HSPLandroidx/tracing/Trace;->beginAsyncSection()V -HSPLandroidx/tracing/Trace;->endAsyncSection(ILjava/lang/String;)V -HSPLandroidx/tracing/Trace;->isEnabled()Z -HSPLandroidx/tracing/TraceApi29Impl$$ExternalSyntheticApiModelOutline0;->m()V -HSPLandroidx/tracing/TraceApi29Impl$$ExternalSyntheticApiModelOutline1;->m(ILjava/lang/String;)V -HSPLandroidx/tracing/TraceApi29Impl$$ExternalSyntheticApiModelOutline2;->m()Z -HSPLandroidx/tracing/TraceApi29Impl;->isEnabled()Z -HSPLandroidx/tracing/perfetto/Tracing;->()V -HSPLandroidx/window/core/Bounds;->(Landroid/graphics/Rect;)V -HSPLandroidx/window/layout/ActivityCompatHelperApi30;->currentWindowBounds(Lcom/google/samples/apps/nowinandroid/MainActivity;)Landroid/graphics/Rect; -HSPLandroidx/window/layout/WindowMetrics;->(Landroid/graphics/Rect;)V -HSPLandroidx/window/layout/WindowMetricsCalculator$Companion;->()V -HSPLandroidx/window/layout/WindowMetricsCalculator$Companion;->()V -HSPLandroidx/window/layout/WindowMetricsCalculator;->()V -HSPLandroidx/window/layout/WindowMetricsCalculatorCompat;->()V -HSPLandroidx/window/layout/WindowMetricsCalculatorCompat;->()V -HSPLandroidx/window/layout/WindowMetricsCalculatorCompat;->computeCurrentWindowMetrics(Lcom/google/samples/apps/nowinandroid/MainActivity;)Landroidx/window/layout/WindowMetrics; -HSPLandroidx/work/Configuration$1;->(Z)V -HSPLandroidx/work/Configuration$1;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread; -HSPLandroidx/work/Configuration$Builder;->()V -HSPLandroidx/work/Configuration;->(Landroidx/work/Configuration$Builder;)V -HSPLandroidx/work/Configuration;->createDefaultExecutor(Z)Ljava/util/concurrent/ExecutorService; -HSPLandroidx/work/Constraints$Builder;->()V -HSPLandroidx/work/Constraints;->()V -HSPLandroidx/work/Constraints;->()V -HSPLandroidx/work/Constraints;->(Landroidx/work/Constraints$Builder;)V -HSPLandroidx/work/Constraints;->(Landroidx/work/Constraints;)V -HSPLandroidx/work/Constraints;->equals(Ljava/lang/Object;)Z -HSPLandroidx/work/Constraints;->hashCode()I -HSPLandroidx/work/ContentUriTriggers;->()V -HSPLandroidx/work/ContentUriTriggers;->hashCode()I -HSPLandroidx/work/CoroutineWorker$1;->(Landroidx/work/CoroutineWorker;)V -HSPLandroidx/work/CoroutineWorker$1;->run()V -HSPLandroidx/work/CoroutineWorker$startWork$1;->(Landroidx/work/CoroutineWorker;Lkotlin/coroutines/Continuation;)V -HSPLandroidx/work/CoroutineWorker$startWork$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLandroidx/work/CoroutineWorker$startWork$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/work/CoroutineWorker;->(Landroid/content/Context;Landroidx/work/WorkerParameters;)V -HSPLandroidx/work/CoroutineWorker;->startWork()Landroidx/work/impl/utils/futures/SettableFuture; -HSPLandroidx/work/Data$Builder;->()V -HSPLandroidx/work/Data$Builder;->putAll(Ljava/util/HashMap;)V -HSPLandroidx/work/Data;->()V -HSPLandroidx/work/Data;->(Landroidx/work/Data;)V -HSPLandroidx/work/Data;->(Ljava/util/HashMap;)V -HSPLandroidx/work/Data;->fromByteArray([B)Landroidx/work/Data; -HSPLandroidx/work/Data;->hashCode()I -HSPLandroidx/work/Data;->toByteArrayInternal(Landroidx/work/Data;)[B -HSPLandroidx/work/Data;->toString()Ljava/lang/String; -HSPLandroidx/work/InputMerger;->()V -HSPLandroidx/work/InputMerger;->()V -HSPLandroidx/work/InputMergerFactory$1;->()V -HSPLandroidx/work/InputMergerFactory;->()V -HSPLandroidx/work/ListenableWorker$Result$Failure;->()V -HSPLandroidx/work/ListenableWorker$Result$Success;->()V -HSPLandroidx/work/ListenableWorker$Result$Success;->(Landroidx/work/Data;)V -HSPLandroidx/work/ListenableWorker$Result$Success;->toString()Ljava/lang/String; -HSPLandroidx/work/ListenableWorker$Result;->()V -HSPLandroidx/work/ListenableWorker;->(Landroid/content/Context;Landroidx/work/WorkerParameters;)V -HSPLandroidx/work/ListenableWorker;->isRunInForeground()Z -HSPLandroidx/work/Logger$LogcatLogger;->(I)V -HSPLandroidx/work/Logger$LogcatLogger;->debug(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Throwable;)V -HSPLandroidx/work/Logger$LogcatLogger;->info(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Throwable;)V -HSPLandroidx/work/Logger;->()V -HSPLandroidx/work/Logger;->get()Landroidx/work/Logger; -HSPLandroidx/work/Logger;->tagWithPrefix(Ljava/lang/String;)Ljava/lang/String; -HSPLandroidx/work/NetworkType;->()V -HSPLandroidx/work/NetworkType;->(ILjava/lang/String;)V -HSPLandroidx/work/OneTimeWorkRequest$Builder;->(Ljava/lang/Class;)V -HSPLandroidx/work/OneTimeWorkRequest;->(Landroidx/work/OneTimeWorkRequest$Builder;)V -HSPLandroidx/work/Operation$State$IN_PROGRESS;->()V -HSPLandroidx/work/Operation$State$SUCCESS;->()V -HSPLandroidx/work/Operation$State;->()V -HSPLandroidx/work/Operation;->()V -HSPLandroidx/work/OverwritingInputMerger;->()V -HSPLandroidx/work/OverwritingInputMerger;->merge(Ljava/util/ArrayList;)Landroidx/work/Data; -HSPLandroidx/work/WorkInfo$State;->()V -HSPLandroidx/work/WorkInfo$State;->(ILjava/lang/String;)V -HSPLandroidx/work/WorkInfo;->(Ljava/util/UUID;Landroidx/work/WorkInfo$State;Landroidx/work/Data;Ljava/util/List;Landroidx/work/Data;I)V -HSPLandroidx/work/WorkInfo;->equals(Ljava/lang/Object;)Z -HSPLandroidx/work/WorkManager;->()V -HSPLandroidx/work/WorkManagerInitializer;->()V -HSPLandroidx/work/WorkManagerInitializer;->()V -HSPLandroidx/work/WorkManagerInitializer;->create(Landroid/content/Context;)Ljava/lang/Object; -HSPLandroidx/work/WorkManagerInitializer;->dependencies()Ljava/util/List; -HSPLandroidx/work/WorkRequest$Builder;->(Ljava/lang/Class;)V -HSPLandroidx/work/WorkRequest$Builder;->build()Landroidx/work/OneTimeWorkRequest; -HSPLandroidx/work/WorkRequest;->(Ljava/util/UUID;Landroidx/work/impl/model/WorkSpec;Ljava/util/HashSet;)V -HSPLandroidx/work/WorkerFactory$1;->()V -HSPLandroidx/work/WorkerFactory$1;->createWorker(Landroid/content/Context;Ljava/lang/String;Landroidx/work/WorkerParameters;)Landroidx/work/ListenableWorker; -HSPLandroidx/work/WorkerFactory;->()V -HSPLandroidx/work/WorkerFactory;->()V -HSPLandroidx/work/WorkerFactory;->createWorkerWithDefaultFallback(Landroid/content/Context;Ljava/lang/String;Landroidx/work/WorkerParameters;)Landroidx/work/ListenableWorker; -HSPLandroidx/work/WorkerParameters$RuntimeExtras;->()V -HSPLandroidx/work/WorkerParameters;->(Ljava/util/UUID;Landroidx/work/Data;Ljava/util/List;Ljava/util/concurrent/ExecutorService;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;Landroidx/work/WorkerFactory$1;Landroidx/work/impl/utils/WorkForegroundUpdater;)V -HSPLandroidx/work/impl/DefaultRunnableScheduler;->()V -HSPLandroidx/work/impl/OperationImpl;->()V -HSPLandroidx/work/impl/OperationImpl;->setState(Landroidx/work/Operation$State;)V -HSPLandroidx/work/impl/Processor$FutureListener;->(Landroidx/work/impl/ExecutionListener;Ljava/lang/String;Landroidx/work/impl/utils/futures/SettableFuture;)V -HSPLandroidx/work/impl/Processor$FutureListener;->run()V -HSPLandroidx/work/impl/Processor;->()V -HSPLandroidx/work/impl/Processor;->(Landroid/content/Context;Landroidx/work/Configuration;Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;Landroidx/work/impl/WorkDatabase;Ljava/util/List;)V -HSPLandroidx/work/impl/Processor;->addExecutionListener(Landroidx/work/impl/ExecutionListener;)V -HSPLandroidx/work/impl/Processor;->interrupt(Ljava/lang/String;Landroidx/work/impl/WorkerWrapper;)Z -HSPLandroidx/work/impl/Processor;->isEnqueued(Ljava/lang/String;)Z -HSPLandroidx/work/impl/Processor;->onExecuted(Ljava/lang/String;Z)V -HSPLandroidx/work/impl/Processor;->startWork(Ljava/lang/String;Landroidx/work/WorkerParameters$RuntimeExtras;)Z -HSPLandroidx/work/impl/Processor;->stopWork(Ljava/lang/String;)Z -HSPLandroidx/work/impl/Schedulers;->()V -HSPLandroidx/work/impl/Schedulers;->schedule(Landroidx/work/Configuration;Landroidx/work/impl/WorkDatabase;Ljava/util/List;)V -HSPLandroidx/work/impl/WorkContinuationImpl;->()V -HSPLandroidx/work/impl/WorkContinuationImpl;->(Landroidx/work/impl/WorkManagerImpl;Ljava/lang/String;Ljava/util/List;)V -HSPLandroidx/work/impl/WorkContinuationImpl;->enqueue()Landroidx/work/Operation; -HSPLandroidx/work/impl/WorkContinuationImpl;->hasCycles(Landroidx/work/impl/WorkContinuationImpl;Ljava/util/HashSet;)Z -HSPLandroidx/work/impl/WorkContinuationImpl;->prerequisitesFor(Landroidx/work/impl/WorkContinuationImpl;)Ljava/util/HashSet; -HSPLandroidx/work/impl/WorkDatabase$1;->(Landroid/content/Context;)V -HSPLandroidx/work/impl/WorkDatabase$1;->create(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;)Landroidx/sqlite/db/SupportSQLiteOpenHelper; -HSPLandroidx/work/impl/WorkDatabase$2;->()V -HSPLandroidx/work/impl/WorkDatabase$2;->onOpen(Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase;)V -HSPLandroidx/work/impl/WorkDatabase;->()V -HSPLandroidx/work/impl/WorkDatabase;->()V -HSPLandroidx/work/impl/WorkDatabaseMigrations$1;->()V -HSPLandroidx/work/impl/WorkDatabaseMigrations$2;->()V -HSPLandroidx/work/impl/WorkDatabaseMigrations$3;->()V -HSPLandroidx/work/impl/WorkDatabaseMigrations$4;->()V -HSPLandroidx/work/impl/WorkDatabaseMigrations$5;->()V -HSPLandroidx/work/impl/WorkDatabaseMigrations$6;->()V -HSPLandroidx/work/impl/WorkDatabaseMigrations$7;->()V -HSPLandroidx/work/impl/WorkDatabaseMigrations$RescheduleMigration;->(Landroid/content/Context;II)V -HSPLandroidx/work/impl/WorkDatabaseMigrations$WorkMigration9To10;->(Landroid/content/Context;)V -HSPLandroidx/work/impl/WorkDatabaseMigrations;->()V -HSPLandroidx/work/impl/WorkDatabasePathHelper;->()V -HSPLandroidx/work/impl/WorkDatabasePathHelper;->migrateDatabase(Landroid/content/Context;)V -HSPLandroidx/work/impl/WorkDatabase_Impl$1;->(Landroidx/work/impl/WorkDatabase_Impl;)V -HSPLandroidx/work/impl/WorkDatabase_Impl$1;->onOpen(Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase;)V -HSPLandroidx/work/impl/WorkDatabase_Impl;->()V -HSPLandroidx/work/impl/WorkDatabase_Impl;->createInvalidationTracker()Landroidx/room/InvalidationTracker; -HSPLandroidx/work/impl/WorkDatabase_Impl;->createOpenHelper(Landroidx/room/DatabaseConfiguration;)Landroidx/sqlite/db/SupportSQLiteOpenHelper; -HSPLandroidx/work/impl/WorkDatabase_Impl;->dependencyDao()Landroidx/work/impl/model/DependencyDao; -HSPLandroidx/work/impl/WorkDatabase_Impl;->preferenceDao()Landroidx/work/impl/model/PreferenceDao; -HSPLandroidx/work/impl/WorkDatabase_Impl;->systemIdInfoDao()Landroidx/work/impl/model/SystemIdInfoDao; -HSPLandroidx/work/impl/WorkDatabase_Impl;->workNameDao()Landroidx/work/impl/model/WorkNameDao; -HSPLandroidx/work/impl/WorkDatabase_Impl;->workProgressDao()Landroidx/work/impl/model/WorkProgressDao; -HSPLandroidx/work/impl/WorkDatabase_Impl;->workSpecDao()Landroidx/work/impl/model/WorkSpecDao; -HSPLandroidx/work/impl/WorkDatabase_Impl;->workTagDao()Landroidx/work/impl/model/WorkTagDao; -HSPLandroidx/work/impl/WorkManagerImpl;->()V -HSPLandroidx/work/impl/WorkManagerImpl;->(Landroid/content/Context;Landroidx/work/Configuration;Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;)V -HSPLandroidx/work/impl/WorkManagerImpl;->getInstance(Landroid/content/Context;)Landroidx/work/impl/WorkManagerImpl; -HSPLandroidx/work/impl/WorkManagerImpl;->initialize(Landroid/content/Context;Landroidx/work/Configuration;)V -HSPLandroidx/work/impl/WorkManagerImpl;->onForceStopRunnableCompleted()V -HSPLandroidx/work/impl/WorkManagerImpl;->rescheduleEligibleWork()V -HSPLandroidx/work/impl/WorkManagerImpl;->startWork(Ljava/lang/String;Landroidx/work/WorkerParameters$RuntimeExtras;)V -HSPLandroidx/work/impl/WorkManagerImpl;->stopWork(Ljava/lang/String;)V -HSPLandroidx/work/impl/WorkerWrapper$1;->(Landroidx/work/impl/WorkerWrapper;Landroidx/work/impl/utils/futures/SettableFuture;Landroidx/work/impl/utils/futures/SettableFuture;)V -HSPLandroidx/work/impl/WorkerWrapper$1;->run()V -HSPLandroidx/work/impl/WorkerWrapper$2;->(Landroidx/work/impl/WorkerWrapper;Landroidx/work/impl/utils/futures/SettableFuture;Ljava/lang/String;)V -HSPLandroidx/work/impl/WorkerWrapper$2;->run()V -HSPLandroidx/work/impl/WorkerWrapper$Builder;->(Landroid/content/Context;Landroidx/work/Configuration;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;Landroidx/work/impl/foreground/ForegroundProcessor;Landroidx/work/impl/WorkDatabase;Ljava/lang/String;)V -HSPLandroidx/work/impl/WorkerWrapper;->()V -HSPLandroidx/work/impl/WorkerWrapper;->(Landroidx/work/impl/WorkerWrapper$Builder;)V -HSPLandroidx/work/impl/WorkerWrapper;->handleResult(Landroidx/work/ListenableWorker$Result;)V -HSPLandroidx/work/impl/WorkerWrapper;->onWorkFinished()V -HSPLandroidx/work/impl/WorkerWrapper;->resolve(Z)V -HSPLandroidx/work/impl/WorkerWrapper;->run()V -HSPLandroidx/work/impl/WorkerWrapper;->tryCheckForInterruptionAndResolve()Z -HSPLandroidx/work/impl/background/greedy/DelayedWorkTracker;->()V -HSPLandroidx/work/impl/background/greedy/DelayedWorkTracker;->(Landroidx/work/impl/background/greedy/GreedyScheduler;Landroidx/work/impl/DefaultRunnableScheduler;)V -HSPLandroidx/work/impl/background/greedy/GreedyScheduler;->()V -HSPLandroidx/work/impl/background/greedy/GreedyScheduler;->(Landroid/content/Context;Landroidx/work/Configuration;Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;Landroidx/work/impl/WorkManagerImpl;)V -HSPLandroidx/work/impl/background/greedy/GreedyScheduler;->cancel(Ljava/lang/String;)V -HSPLandroidx/work/impl/background/greedy/GreedyScheduler;->hasLimitedSchedulingSlots()Z -HSPLandroidx/work/impl/background/greedy/GreedyScheduler;->onAllConstraintsMet(Ljava/util/List;)V -HSPLandroidx/work/impl/background/greedy/GreedyScheduler;->onExecuted(Ljava/lang/String;Z)V -HSPLandroidx/work/impl/background/greedy/GreedyScheduler;->schedule([Landroidx/work/impl/model/WorkSpec;)V -HSPLandroidx/work/impl/background/systemjob/SystemJobInfoConverter$$ExternalSyntheticApiModelOutline1;->m(Landroid/app/job/JobInfo$Builder;Z)V -HSPLandroidx/work/impl/background/systemjob/SystemJobInfoConverter$$ExternalSyntheticApiModelOutline2;->m(Landroid/app/job/JobInfo$Builder;Z)V -HSPLandroidx/work/impl/background/systemjob/SystemJobInfoConverter$$ExternalSyntheticApiModelOutline3;->m(Landroid/app/job/JobInfo$Builder;)V -HSPLandroidx/work/impl/background/systemjob/SystemJobInfoConverter;->()V -HSPLandroidx/work/impl/background/systemjob/SystemJobInfoConverter;->(Landroid/content/Context;)V -HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->()V -HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->(Landroid/content/Context;Landroidx/work/impl/WorkManagerImpl;)V -HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->cancel(Ljava/lang/String;)V -HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->getPendingJobs(Landroid/content/Context;Landroid/app/job/JobScheduler;)Ljava/util/ArrayList; -HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->hasLimitedSchedulingSlots()Z -HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->schedule([Landroidx/work/impl/model/WorkSpec;)V -HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->scheduleInternal(Landroidx/work/impl/model/WorkSpec;I)V -HSPLandroidx/work/impl/background/systemjob/SystemJobService$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/job/JobParameters;)V -HSPLandroidx/work/impl/background/systemjob/SystemJobService;->()V -HSPLandroidx/work/impl/background/systemjob/SystemJobService;->()V -HSPLandroidx/work/impl/background/systemjob/SystemJobService;->onCreate()V -HSPLandroidx/work/impl/background/systemjob/SystemJobService;->onDestroy()V -HSPLandroidx/work/impl/background/systemjob/SystemJobService;->onExecuted(Ljava/lang/String;Z)V -HSPLandroidx/work/impl/background/systemjob/SystemJobService;->onStartJob(Landroid/app/job/JobParameters;)Z -HSPLandroidx/work/impl/constraints/NetworkState;->(ZZZZ)V -HSPLandroidx/work/impl/constraints/NetworkState;->equals(Ljava/lang/Object;)Z -HSPLandroidx/work/impl/constraints/NetworkState;->toString()Ljava/lang/String; -HSPLandroidx/work/impl/constraints/WorkConstraintsTracker;->()V -HSPLandroidx/work/impl/constraints/WorkConstraintsTracker;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;Landroidx/work/impl/constraints/WorkConstraintsCallback;)V -HSPLandroidx/work/impl/constraints/WorkConstraintsTracker;->areAllConstraintsMet(Ljava/lang/String;)Z -HSPLandroidx/work/impl/constraints/WorkConstraintsTracker;->replace(Ljava/util/Collection;)V -HSPLandroidx/work/impl/constraints/controllers/BatteryChargingController;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)V -HSPLandroidx/work/impl/constraints/controllers/BatteryChargingController;->hasConstraint(Landroidx/work/impl/model/WorkSpec;)Z -HSPLandroidx/work/impl/constraints/controllers/BatteryNotLowController;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)V -HSPLandroidx/work/impl/constraints/controllers/BatteryNotLowController;->hasConstraint(Landroidx/work/impl/model/WorkSpec;)Z -HSPLandroidx/work/impl/constraints/controllers/ConstraintController;->(Landroidx/work/impl/constraints/trackers/ConstraintTracker;)V -HSPLandroidx/work/impl/constraints/controllers/ConstraintController;->onConstraintChanged(Ljava/lang/Object;)V -HSPLandroidx/work/impl/constraints/controllers/ConstraintController;->replace(Ljava/util/Collection;)V -HSPLandroidx/work/impl/constraints/controllers/ConstraintController;->updateCallback(Landroidx/work/impl/constraints/controllers/ConstraintController$OnConstraintUpdatedCallback;Ljava/lang/Object;)V -HSPLandroidx/work/impl/constraints/controllers/NetworkConnectedController;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)V -HSPLandroidx/work/impl/constraints/controllers/NetworkConnectedController;->hasConstraint(Landroidx/work/impl/model/WorkSpec;)Z -HSPLandroidx/work/impl/constraints/controllers/NetworkConnectedController;->isConstrained(Ljava/lang/Object;)Z -HSPLandroidx/work/impl/constraints/controllers/NetworkMeteredController;->()V -HSPLandroidx/work/impl/constraints/controllers/NetworkMeteredController;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)V -HSPLandroidx/work/impl/constraints/controllers/NetworkMeteredController;->hasConstraint(Landroidx/work/impl/model/WorkSpec;)Z -HSPLandroidx/work/impl/constraints/controllers/NetworkNotRoamingController;->()V -HSPLandroidx/work/impl/constraints/controllers/NetworkNotRoamingController;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)V -HSPLandroidx/work/impl/constraints/controllers/NetworkNotRoamingController;->hasConstraint(Landroidx/work/impl/model/WorkSpec;)Z -HSPLandroidx/work/impl/constraints/controllers/NetworkUnmeteredController;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)V -HSPLandroidx/work/impl/constraints/controllers/NetworkUnmeteredController;->hasConstraint(Landroidx/work/impl/model/WorkSpec;)Z -HSPLandroidx/work/impl/constraints/controllers/StorageNotLowController;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)V -HSPLandroidx/work/impl/constraints/controllers/StorageNotLowController;->hasConstraint(Landroidx/work/impl/model/WorkSpec;)Z -HSPLandroidx/work/impl/constraints/trackers/BatteryChargingTracker;->()V -HSPLandroidx/work/impl/constraints/trackers/BatteryChargingTracker;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)V -HSPLandroidx/work/impl/constraints/trackers/BatteryNotLowTracker;->()V -HSPLandroidx/work/impl/constraints/trackers/BatteryNotLowTracker;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)V -HSPLandroidx/work/impl/constraints/trackers/BroadcastReceiverConstraintTracker$1;->(Landroidx/work/impl/constraints/trackers/BroadcastReceiverConstraintTracker;)V -HSPLandroidx/work/impl/constraints/trackers/BroadcastReceiverConstraintTracker;->()V -HSPLandroidx/work/impl/constraints/trackers/BroadcastReceiverConstraintTracker;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)V -HSPLandroidx/work/impl/constraints/trackers/ConstraintTracker;->()V -HSPLandroidx/work/impl/constraints/trackers/ConstraintTracker;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)V -HSPLandroidx/work/impl/constraints/trackers/ConstraintTracker;->setState(Ljava/lang/Object;)V -HSPLandroidx/work/impl/constraints/trackers/NetworkStateTracker$NetworkStateCallback;->(Landroidx/work/impl/constraints/trackers/NetworkStateTracker;)V -HSPLandroidx/work/impl/constraints/trackers/NetworkStateTracker$NetworkStateCallback;->onCapabilitiesChanged(Landroid/net/Network;Landroid/net/NetworkCapabilities;)V -HSPLandroidx/work/impl/constraints/trackers/NetworkStateTracker;->()V -HSPLandroidx/work/impl/constraints/trackers/NetworkStateTracker;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)V -HSPLandroidx/work/impl/constraints/trackers/NetworkStateTracker;->getActiveNetworkState()Landroidx/work/impl/constraints/NetworkState; -HSPLandroidx/work/impl/constraints/trackers/NetworkStateTracker;->getInitialState()Ljava/lang/Object; -HSPLandroidx/work/impl/constraints/trackers/NetworkStateTracker;->startTracking()V -HSPLandroidx/work/impl/constraints/trackers/NetworkStateTracker;->stopTracking()V -HSPLandroidx/work/impl/constraints/trackers/StorageNotLowTracker;->()V -HSPLandroidx/work/impl/constraints/trackers/StorageNotLowTracker;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)V -HSPLandroidx/work/impl/constraints/trackers/Trackers;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)V -HSPLandroidx/work/impl/constraints/trackers/Trackers;->getInstance(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)Landroidx/work/impl/constraints/trackers/Trackers; -HSPLandroidx/work/impl/model/DependencyDao_Impl$1;->(Landroidx/room/RoomDatabase;)V -HSPLandroidx/work/impl/model/DependencyDao_Impl;->(Landroidx/room/RoomDatabase;)V -HSPLandroidx/work/impl/model/DependencyDao_Impl;->getDependentWorkIds(Ljava/lang/String;)Ljava/util/ArrayList; -HSPLandroidx/work/impl/model/Preference;->(Ljava/lang/String;J)V -HSPLandroidx/work/impl/model/PreferenceDao_Impl$1;->(Landroidx/room/RoomDatabase;)V -HSPLandroidx/work/impl/model/PreferenceDao_Impl$1;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Ljava/lang/Object;)V -HSPLandroidx/work/impl/model/PreferenceDao_Impl$1;->createQuery()Ljava/lang/String; -HSPLandroidx/work/impl/model/PreferenceDao_Impl;->(Landroidx/room/RoomDatabase;)V -HSPLandroidx/work/impl/model/PreferenceDao_Impl;->getLongValue(Ljava/lang/String;)Ljava/lang/Long; -HSPLandroidx/work/impl/model/PreferenceDao_Impl;->insertPreference(Landroidx/work/impl/model/Preference;)V -HSPLandroidx/work/impl/model/SystemIdInfo;->(ILjava/lang/String;)V -HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl$1;->(Landroidx/room/RoomDatabase;)V -HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl$1;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Ljava/lang/Object;)V -HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl$1;->createQuery()Ljava/lang/String; -HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl$2;->(Landroidx/room/RoomDatabase;)V -HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl;->(Landroidx/room/RoomDatabase;)V -HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl;->getSystemIdInfo(Ljava/lang/String;)Landroidx/work/impl/model/SystemIdInfo; -HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl;->insertSystemIdInfo(Landroidx/work/impl/model/SystemIdInfo;)V -HSPLandroidx/work/impl/model/WorkName;->(Ljava/lang/String;Ljava/lang/String;)V -HSPLandroidx/work/impl/model/WorkNameDao_Impl$1;->(Landroidx/room/RoomDatabase;)V -HSPLandroidx/work/impl/model/WorkNameDao_Impl$1;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Ljava/lang/Object;)V -HSPLandroidx/work/impl/model/WorkNameDao_Impl$1;->createQuery()Ljava/lang/String; -HSPLandroidx/work/impl/model/WorkNameDao_Impl;->(Landroidx/room/RoomDatabase;)V -HSPLandroidx/work/impl/model/WorkProgressDao_Impl$1;->(Landroidx/room/RoomDatabase;)V -HSPLandroidx/work/impl/model/WorkProgressDao_Impl$2;->(Landroidx/room/RoomDatabase;)V -HSPLandroidx/work/impl/model/WorkProgressDao_Impl$2;->createQuery()Ljava/lang/String; -HSPLandroidx/work/impl/model/WorkProgressDao_Impl$3;->(Landroidx/room/RoomDatabase;)V -HSPLandroidx/work/impl/model/WorkProgressDao_Impl$3;->createQuery()Ljava/lang/String; -HSPLandroidx/work/impl/model/WorkProgressDao_Impl;->(Landroidx/room/RoomDatabase;)V -HSPLandroidx/work/impl/model/WorkProgressDao_Impl;->delete(Ljava/lang/String;)V -HSPLandroidx/work/impl/model/WorkProgressDao_Impl;->deleteAll()V -HSPLandroidx/work/impl/model/WorkSpec$1;->()V -HSPLandroidx/work/impl/model/WorkSpec$1;->apply(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/work/impl/model/WorkSpec$WorkInfoPojo;->()V -HSPLandroidx/work/impl/model/WorkSpec;->()V -HSPLandroidx/work/impl/model/WorkSpec;->(Landroidx/work/impl/model/WorkSpec;)V -HSPLandroidx/work/impl/model/WorkSpec;->(Ljava/lang/String;Ljava/lang/String;)V -HSPLandroidx/work/impl/model/WorkSpec;->calculateNextRunTime()J -HSPLandroidx/work/impl/model/WorkSpec;->hasConstraints()Z -HSPLandroidx/work/impl/model/WorkSpec;->hashCode()I -HSPLandroidx/work/impl/model/WorkSpec;->isPeriodic()Z -HSPLandroidx/work/impl/model/WorkSpecDao_Impl$13;->(Landroidx/work/impl/model/WorkSpecDao_Impl;Landroidx/room/RoomSQLiteQuery;)V -HSPLandroidx/work/impl/model/WorkSpecDao_Impl$13;->call()Ljava/lang/Object; -HSPLandroidx/work/impl/model/WorkSpecDao_Impl$1;->(Landroidx/room/RoomDatabase;)V -HSPLandroidx/work/impl/model/WorkSpecDao_Impl$1;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Ljava/lang/Object;)V -HSPLandroidx/work/impl/model/WorkSpecDao_Impl$1;->createQuery()Ljava/lang/String; -HSPLandroidx/work/impl/model/WorkSpecDao_Impl$2;->(Landroidx/room/RoomDatabase;)V -HSPLandroidx/work/impl/model/WorkSpecDao_Impl$3;->(Landroidx/room/RoomDatabase;)V -HSPLandroidx/work/impl/model/WorkSpecDao_Impl$3;->createQuery()Ljava/lang/String; -HSPLandroidx/work/impl/model/WorkSpecDao_Impl$4;->(Landroidx/room/RoomDatabase;)V -HSPLandroidx/work/impl/model/WorkSpecDao_Impl$5;->(Landroidx/room/RoomDatabase;)V -HSPLandroidx/work/impl/model/WorkSpecDao_Impl$5;->createQuery()Ljava/lang/String; -HSPLandroidx/work/impl/model/WorkSpecDao_Impl$6;->(Landroidx/room/RoomDatabase;)V -HSPLandroidx/work/impl/model/WorkSpecDao_Impl$7;->(Landroidx/room/RoomDatabase;)V -HSPLandroidx/work/impl/model/WorkSpecDao_Impl$7;->createQuery()Ljava/lang/String; -HSPLandroidx/work/impl/model/WorkSpecDao_Impl$8;->(Landroidx/room/RoomDatabase;)V -HSPLandroidx/work/impl/model/WorkSpecDao_Impl$8;->createQuery()Ljava/lang/String; -HSPLandroidx/work/impl/model/WorkSpecDao_Impl$9;->(Landroidx/room/RoomDatabase;)V -HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->(Landroidx/room/RoomDatabase;)V -HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->__fetchRelationshipWorkProgressAsandroidxWorkData(Landroidx/collection/ArrayMap;)V -HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->__fetchRelationshipWorkTagAsjavaLangString(Landroidx/collection/ArrayMap;)V -HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->getAllEligibleWorkSpecsForScheduling()Ljava/util/ArrayList; -HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->getEligibleWorkForScheduling(I)Ljava/util/ArrayList; -HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->getRunningWork()Ljava/util/ArrayList; -HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->getState(Ljava/lang/String;)Landroidx/work/WorkInfo$State; -HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->getWorkSpec(Ljava/lang/String;)Landroidx/work/impl/model/WorkSpec; -HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->getWorkSpecIdAndStatesForName(Ljava/lang/String;)Ljava/util/ArrayList; -HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->incrementWorkSpecRunAttemptCount(Ljava/lang/String;)I -HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->markWorkSpecScheduled(Ljava/lang/String;J)I -HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->setOutput(Ljava/lang/String;Landroidx/work/Data;)V -HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->setState(Landroidx/work/WorkInfo$State;[Ljava/lang/String;)I -HSPLandroidx/work/impl/model/WorkTag;->(Ljava/lang/String;Ljava/lang/String;)V -HSPLandroidx/work/impl/model/WorkTagDao_Impl$1;->(Landroidx/room/RoomDatabase;)V -HSPLandroidx/work/impl/model/WorkTagDao_Impl$1;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Ljava/lang/Object;)V -HSPLandroidx/work/impl/model/WorkTagDao_Impl$1;->createQuery()Ljava/lang/String; -HSPLandroidx/work/impl/model/WorkTagDao_Impl;->(Landroidx/room/RoomDatabase;)V -HSPLandroidx/work/impl/model/WorkTagDao_Impl;->getTagsForWorkSpecId(Ljava/lang/String;)Ljava/util/ArrayList; -HSPLandroidx/work/impl/model/WorkTypeConverters;->byteArrayToContentUriTriggers([B)Landroidx/work/ContentUriTriggers; -HSPLandroidx/work/impl/model/WorkTypeConverters;->intToBackoffPolicy(I)I -HSPLandroidx/work/impl/model/WorkTypeConverters;->intToNetworkType(I)Landroidx/work/NetworkType; -HSPLandroidx/work/impl/model/WorkTypeConverters;->intToOutOfQuotaPolicy(I)I -HSPLandroidx/work/impl/model/WorkTypeConverters;->intToState(I)Landroidx/work/WorkInfo$State; -HSPLandroidx/work/impl/model/WorkTypeConverters;->stateToInt(Landroidx/work/WorkInfo$State;)I -HSPLandroidx/work/impl/utils/EnqueueRunnable;->()V -HSPLandroidx/work/impl/utils/EnqueueRunnable;->(Landroidx/work/impl/WorkContinuationImpl;)V -HSPLandroidx/work/impl/utils/EnqueueRunnable;->processContinuation(Landroidx/work/impl/WorkContinuationImpl;)Z -HSPLandroidx/work/impl/utils/EnqueueRunnable;->run()V -HSPLandroidx/work/impl/utils/ForceStopRunnable;->()V -HSPLandroidx/work/impl/utils/ForceStopRunnable;->(Landroid/content/Context;Landroidx/work/impl/WorkManagerImpl;)V -HSPLandroidx/work/impl/utils/ForceStopRunnable;->forceStopRunnable()V -HSPLandroidx/work/impl/utils/ForceStopRunnable;->multiProcessChecks()Z -HSPLandroidx/work/impl/utils/ForceStopRunnable;->run()V -HSPLandroidx/work/impl/utils/LiveDataUtils$1$1;->(Landroidx/work/impl/utils/LiveDataUtils$1;Ljava/lang/Object;)V -HSPLandroidx/work/impl/utils/LiveDataUtils$1$1;->run()V -HSPLandroidx/work/impl/utils/LiveDataUtils$1;->(Landroidx/work/impl/utils/taskexecutor/TaskExecutor;Ljava/lang/Object;Landroidx/work/impl/model/WorkSpec$1;Landroidx/lifecycle/MediatorLiveData;)V -HSPLandroidx/work/impl/utils/LiveDataUtils$1;->onChanged(Ljava/lang/Object;)V -HSPLandroidx/work/impl/utils/PackageManagerHelper;->()V -HSPLandroidx/work/impl/utils/PackageManagerHelper;->setComponentEnabled(Landroid/content/Context;Ljava/lang/Class;Z)V -HSPLandroidx/work/impl/utils/PreferenceUtils;->(Landroidx/work/impl/WorkDatabase;)V -HSPLandroidx/work/impl/utils/ProcessUtils$$ExternalSyntheticApiModelOutline0;->m()Ljava/lang/String; -HSPLandroidx/work/impl/utils/ProcessUtils;->()V -HSPLandroidx/work/impl/utils/ProcessUtils;->isDefaultProcess(Landroid/content/Context;Landroidx/work/Configuration;)Z -HSPLandroidx/work/impl/utils/SerialExecutor$Task;->(Landroidx/work/impl/utils/SerialExecutor;Ljava/lang/Runnable;)V -HSPLandroidx/work/impl/utils/SerialExecutor$Task;->run()V -HSPLandroidx/work/impl/utils/SerialExecutor;->(Ljava/util/concurrent/ExecutorService;)V -HSPLandroidx/work/impl/utils/SerialExecutor;->execute(Ljava/lang/Runnable;)V -HSPLandroidx/work/impl/utils/SerialExecutor;->scheduleNext()V -HSPLandroidx/work/impl/utils/StartWorkRunnable;->(Landroidx/work/impl/WorkManagerImpl;Ljava/lang/String;Landroidx/work/WorkerParameters$RuntimeExtras;)V -HSPLandroidx/work/impl/utils/StartWorkRunnable;->run()V -HSPLandroidx/work/impl/utils/StopWorkRunnable;->()V -HSPLandroidx/work/impl/utils/StopWorkRunnable;->(Landroidx/work/impl/WorkManagerImpl;Ljava/lang/String;Z)V -HSPLandroidx/work/impl/utils/StopWorkRunnable;->run()V -HSPLandroidx/work/impl/utils/WorkForegroundRunnable;->()V -HSPLandroidx/work/impl/utils/WorkForegroundRunnable;->(Landroid/content/Context;Landroidx/work/impl/model/WorkSpec;Landroidx/work/ListenableWorker;Landroidx/work/ForegroundUpdater;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)V -HSPLandroidx/work/impl/utils/WorkForegroundRunnable;->run()V -HSPLandroidx/work/impl/utils/WorkForegroundUpdater;->()V -HSPLandroidx/work/impl/utils/WorkForegroundUpdater;->(Landroidx/work/impl/WorkDatabase;Landroidx/work/impl/foreground/ForegroundProcessor;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)V -HSPLandroidx/work/impl/utils/WorkProgressUpdater;->()V -HSPLandroidx/work/impl/utils/futures/AbstractFuture$AtomicHelper;->()V -HSPLandroidx/work/impl/utils/futures/AbstractFuture$Listener;->()V -HSPLandroidx/work/impl/utils/futures/AbstractFuture$Listener;->(Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)V -HSPLandroidx/work/impl/utils/futures/AbstractFuture$SafeAtomicHelper;->(Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;)V -HSPLandroidx/work/impl/utils/futures/AbstractFuture$SafeAtomicHelper;->casListeners(Landroidx/work/impl/utils/futures/AbstractFuture;Landroidx/work/impl/utils/futures/AbstractFuture$Listener;Landroidx/work/impl/utils/futures/AbstractFuture$Listener;)Z -HSPLandroidx/work/impl/utils/futures/AbstractFuture$SafeAtomicHelper;->casValue(Landroidx/work/impl/utils/futures/AbstractFuture;Ljava/lang/Object;Ljava/lang/Object;)Z -HSPLandroidx/work/impl/utils/futures/AbstractFuture$SafeAtomicHelper;->casWaiters(Landroidx/work/impl/utils/futures/AbstractFuture;Landroidx/work/impl/utils/futures/AbstractFuture$Waiter;Landroidx/work/impl/utils/futures/AbstractFuture$Waiter;)Z -HSPLandroidx/work/impl/utils/futures/AbstractFuture$SetFuture;->(Landroidx/work/impl/utils/futures/AbstractFuture;Lcom/google/common/util/concurrent/ListenableFuture;)V -HSPLandroidx/work/impl/utils/futures/AbstractFuture$Waiter;->()V -HSPLandroidx/work/impl/utils/futures/AbstractFuture$Waiter;->(I)V -HSPLandroidx/work/impl/utils/futures/AbstractFuture;->()V -HSPLandroidx/work/impl/utils/futures/AbstractFuture;->()V -HSPLandroidx/work/impl/utils/futures/AbstractFuture;->addListener(Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)V -HSPLandroidx/work/impl/utils/futures/AbstractFuture;->complete(Landroidx/work/impl/utils/futures/AbstractFuture;)V -HSPLandroidx/work/impl/utils/futures/AbstractFuture;->executeListener(Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)V -HSPLandroidx/work/impl/utils/futures/AbstractFuture;->get()Ljava/lang/Object; -HSPLandroidx/work/impl/utils/futures/AbstractFuture;->getDoneValue(Ljava/lang/Object;)Ljava/lang/Object; -HSPLandroidx/work/impl/utils/futures/AbstractFuture;->getFutureValue(Lcom/google/common/util/concurrent/ListenableFuture;)Ljava/lang/Object; -HSPLandroidx/work/impl/utils/futures/AbstractFuture;->isDone()Z -HSPLandroidx/work/impl/utils/futures/DirectExecutor;->()V -HSPLandroidx/work/impl/utils/futures/DirectExecutor;->()V -HSPLandroidx/work/impl/utils/futures/SettableFuture;->()V -HSPLandroidx/work/impl/utils/futures/SettableFuture;->set(Ljava/lang/Object;)Z -HSPLandroidx/work/impl/utils/futures/SettableFuture;->setFuture(Lcom/google/common/util/concurrent/ListenableFuture;)Z -HSPLandroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor$1;->(Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;)V -HSPLandroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor$1;->execute(Ljava/lang/Runnable;)V -HSPLandroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;->(Ljava/util/concurrent/ExecutorService;)V -HSPLandroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;->executeOnBackgroundThread(Ljava/lang/Runnable;)V -HSPLcoil/Coil;->()V -HSPLcoil/Coil;->()V -HSPLcoil/ComponentRegistry$Builder;->()V -HSPLcoil/ComponentRegistry$Builder;->(Lcoil/ComponentRegistry;)V -HSPLcoil/ComponentRegistry$Builder;->add(Lcoil/fetch/Fetcher$Factory;Ljava/lang/Class;)V -HSPLcoil/ComponentRegistry$Builder;->add(Lcoil/map/Mapper;Ljava/lang/Class;)V -HSPLcoil/ComponentRegistry$Builder;->build()Lcoil/ComponentRegistry; -HSPLcoil/ComponentRegistry;->(Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;Ljava/util/List;)V -HSPLcoil/EventListener$Companion$NONE$1;->()V -HSPLcoil/EventListener$Companion$NONE$1;->fetchStart()V -HSPLcoil/EventListener$Companion$NONE$1;->keyEnd()V -HSPLcoil/EventListener$Companion$NONE$1;->keyStart()V -HSPLcoil/EventListener$Companion$NONE$1;->mapEnd()V -HSPLcoil/EventListener$Companion$NONE$1;->mapStart()V -HSPLcoil/EventListener$Companion$NONE$1;->onStart()V -HSPLcoil/EventListener$Companion$NONE$1;->resolveSizeEnd()V -HSPLcoil/EventListener$Companion$NONE$1;->resolveSizeStart()V -HSPLcoil/EventListener$Factory$$ExternalSyntheticLambda0;->()V -HSPLcoil/EventListener$Factory;->()V -HSPLcoil/EventListener;->()V -HSPLcoil/ImageLoader$Builder$build$1;->(Lcoil/ImageLoader$Builder;)V -HSPLcoil/ImageLoader$Builder$build$1;->invoke()Ljava/lang/Object; -HSPLcoil/ImageLoader$Builder$build$2;->(Lcoil/ImageLoader$Builder;)V -HSPLcoil/ImageLoader$Builder$build$2;->invoke()Ljava/lang/Object; -HSPLcoil/ImageLoader$Builder$build$3;->()V -HSPLcoil/ImageLoader$Builder$build$3;->()V -HSPLcoil/ImageLoader$Builder$build$3;->invoke()Ljava/lang/Object; -HSPLcoil/ImageLoader$Builder;->(Landroid/content/Context;)V -HSPLcoil/ImageLoader$Builder;->build()Lcoil/RealImageLoader; -HSPLcoil/RealImageLoader$execute$2$job$1;->(Lcoil/RealImageLoader;Lcoil/request/ImageRequest;Lkotlin/coroutines/Continuation;)V -HSPLcoil/RealImageLoader$execute$2$job$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLcoil/RealImageLoader$execute$2$job$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcoil/RealImageLoader$execute$2;->(Lcoil/RealImageLoader;Lcoil/request/ImageRequest;Lkotlin/coroutines/Continuation;)V -HSPLcoil/RealImageLoader$execute$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLcoil/RealImageLoader$execute$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcoil/RealImageLoader$execute$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcoil/RealImageLoader$executeMain$1;->(Lcoil/RealImageLoader;Lkotlin/coroutines/Continuation;)V -HSPLcoil/RealImageLoader$executeMain$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcoil/RealImageLoader$executeMain$result$1;->(Lcoil/request/ImageRequest;Lcoil/RealImageLoader;Lcoil/size/Size;Lcoil/EventListener;Landroid/graphics/Bitmap;Lkotlin/coroutines/Continuation;)V -HSPLcoil/RealImageLoader$executeMain$result$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLcoil/RealImageLoader$executeMain$result$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcoil/RealImageLoader$executeMain$result$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcoil/RealImageLoader$special$$inlined$CoroutineExceptionHandler$1;->(Lcoil/RealImageLoader;)V -HSPLcoil/RealImageLoader;->(Landroid/content/Context;Lcoil/request/DefaultRequestOptions;Lkotlin/SynchronizedLazyImpl;Lkotlin/SynchronizedLazyImpl;Lkotlin/SynchronizedLazyImpl;Lcoil/ComponentRegistry;Lcoil/util/ImageLoaderOptions;)V -HSPLcoil/RealImageLoader;->access$executeMain(Lcoil/RealImageLoader;Lcoil/request/ImageRequest;ILkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcoil/RealImageLoader;->execute(Lcoil/request/ImageRequest;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcoil/RealImageLoader;->getComponents()Lcoil/ComponentRegistry; -HSPLcoil/RealImageLoader;->getMemoryCache()Lcoil/memory/MemoryCache; -HSPLcoil/base/R$id;->yield(Lkotlin/coroutines/jvm/internal/ContinuationImpl;)Ljava/lang/Object; -HSPLcoil/compose/AsyncImageKt$AsyncImage$2;->(Ljava/lang/Object;Ljava/lang/String;Lcoil/ImageLoader;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;IIII)V -HSPLcoil/compose/AsyncImageKt$Content$$inlined$Layout$1;->(Landroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;)V -HSPLcoil/compose/AsyncImageKt$Content$$inlined$Layout$1;->invoke()Ljava/lang/Object; -HSPLcoil/compose/AsyncImageKt$Content$1$measure$1;->()V -HSPLcoil/compose/AsyncImageKt$Content$1$measure$1;->()V -HSPLcoil/compose/AsyncImageKt$Content$1$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcoil/compose/AsyncImageKt$Content$1;->()V -HSPLcoil/compose/AsyncImageKt$Content$1;->()V -HSPLcoil/compose/AsyncImageKt$Content$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; -HSPLcoil/compose/AsyncImageKt;->AsyncImage-MvsnxeU(Ljava/lang/Object;Ljava/lang/String;Lcoil/ImageLoader;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;ILandroidx/compose/runtime/Composer;III)V -HSPLcoil/compose/AsyncImageKt;->AsyncImage-Q4Kwu38(Ljava/lang/Object;Ljava/lang/String;Lcoil/ImageLoader;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/painter/Painter;Landroidx/compose/ui/graphics/painter/Painter;Landroidx/compose/ui/graphics/painter/Painter;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;ILandroidx/compose/runtime/Composer;III)V -HSPLcoil/compose/AsyncImageKt;->Content(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/painter/Painter;Ljava/lang/String;Landroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;Landroidx/compose/runtime/Composer;I)V -HSPLcoil/compose/AsyncImagePainter$Companion$DefaultTransform$1;->()V -HSPLcoil/compose/AsyncImagePainter$Companion$DefaultTransform$1;->()V -HSPLcoil/compose/AsyncImagePainter$State$Empty;->()V -HSPLcoil/compose/AsyncImagePainter$State$Empty;->()V -HSPLcoil/compose/AsyncImagePainter$State$Empty;->getPainter()Landroidx/compose/ui/graphics/painter/Painter; -HSPLcoil/compose/AsyncImagePainter$State$Loading;->(Landroidx/compose/ui/graphics/painter/Painter;)V -HSPLcoil/compose/AsyncImagePainter$State$Loading;->getPainter()Landroidx/compose/ui/graphics/painter/Painter; -HSPLcoil/compose/AsyncImagePainter$State;->()V -HSPLcoil/compose/AsyncImagePainter$onRemembered$1$1;->(Lcoil/compose/AsyncImagePainter;)V -HSPLcoil/compose/AsyncImagePainter$onRemembered$1$1;->invoke()Ljava/lang/Object; -HSPLcoil/compose/AsyncImagePainter$onRemembered$1$2;->(Lcoil/compose/AsyncImagePainter;Lkotlin/coroutines/Continuation;)V -HSPLcoil/compose/AsyncImagePainter$onRemembered$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLcoil/compose/AsyncImagePainter$onRemembered$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcoil/compose/AsyncImagePainter$onRemembered$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcoil/compose/AsyncImagePainter$onRemembered$1$3;->(Lcoil/compose/AsyncImagePainter;)V -HSPLcoil/compose/AsyncImagePainter$onRemembered$1;->(Lcoil/compose/AsyncImagePainter;Lkotlin/coroutines/Continuation;)V -HSPLcoil/compose/AsyncImagePainter$onRemembered$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLcoil/compose/AsyncImagePainter$onRemembered$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcoil/compose/AsyncImagePainter$updateRequest$$inlined$target$default$1;->(Lcoil/compose/AsyncImagePainter;)V -HSPLcoil/compose/AsyncImagePainter$updateRequest$$inlined$target$default$1;->onStart(Landroid/graphics/drawable/Drawable;)V -HSPLcoil/compose/AsyncImagePainter;->(Lcoil/request/ImageRequest;Lcoil/ImageLoader;)V -HSPLcoil/compose/AsyncImagePainter;->applyColorFilter(Landroidx/compose/ui/graphics/ColorFilter;)Z -HSPLcoil/compose/AsyncImagePainter;->getIntrinsicSize-NH-jbRc()J -HSPLcoil/compose/AsyncImagePainter;->onDraw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V -HSPLcoil/compose/AsyncImagePainter;->onRemembered()V -HSPLcoil/compose/AsyncImagePainter;->updateState(Lcoil/compose/AsyncImagePainter$State;)V -HSPLcoil/compose/ConstraintsSizeResolver$measure$1;->(Landroidx/compose/ui/layout/Placeable;)V -HSPLcoil/compose/ConstraintsSizeResolver$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcoil/compose/ConstraintsSizeResolver$size$$inlined$mapNotNull$1$2$1;->(Lcoil/compose/ConstraintsSizeResolver$size$$inlined$mapNotNull$1$2;Lkotlin/coroutines/Continuation;)V -HSPLcoil/compose/ConstraintsSizeResolver$size$$inlined$mapNotNull$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V -HSPLcoil/compose/ConstraintsSizeResolver$size$$inlined$mapNotNull$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcoil/compose/ConstraintsSizeResolver$size$$inlined$mapNotNull$1;->(Lkotlinx/coroutines/flow/StateFlowImpl;)V -HSPLcoil/compose/ConstraintsSizeResolver$size$$inlined$mapNotNull$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcoil/compose/ConstraintsSizeResolver;->()V -HSPLcoil/compose/ConstraintsSizeResolver;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; -HSPLcoil/compose/ConstraintsSizeResolver;->size(Lcoil/RealImageLoader$executeMain$1;)Ljava/lang/Object; -HSPLcoil/compose/ContentPainterModifier$measure$1;->(Landroidx/compose/ui/layout/Placeable;)V -HSPLcoil/compose/ContentPainterModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcoil/compose/ContentPainterModifier;->(Landroidx/compose/ui/graphics/painter/Painter;Landroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;)V -HSPLcoil/compose/ContentPainterModifier;->calculateScaledSize-E7KxVPU(J)J -HSPLcoil/compose/ContentPainterModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V -HSPLcoil/compose/ContentPainterModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; -HSPLcoil/compose/ContentPainterModifier;->modifyConstraints-ZezNO4M(J)J -HSPLcoil/compose/ImageLoaderProvidableCompositionLocal$1;->()V -HSPLcoil/compose/ImageLoaderProvidableCompositionLocal$1;->()V -HSPLcoil/compose/ImageLoaderProvidableCompositionLocal$1;->invoke()Ljava/lang/Object; -HSPLcoil/compose/ImageLoaderProvidableCompositionLocal;->getCurrent(Landroidx/compose/runtime/StaticProvidableCompositionLocal;Landroidx/compose/runtime/Composer;)Lcoil/ImageLoader; -HSPLcoil/compose/LocalImageLoaderKt;->()V -HSPLcoil/compose/SingletonAsyncImageKt;->AsyncImage-ylYTKUw(Ljava/lang/Object;Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/painter/Painter;Landroidx/compose/ui/graphics/painter/Painter;Landroidx/compose/ui/graphics/painter/Painter;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;ILandroidx/compose/runtime/Composer;III)V -HSPLcoil/compose/UtilsKt$transformOf$1;->(Landroidx/compose/ui/graphics/painter/Painter;Landroidx/compose/ui/graphics/painter/Painter;Landroidx/compose/ui/graphics/painter/Painter;)V -HSPLcoil/compose/UtilsKt$transformOf$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcoil/compose/UtilsKt;->()V -HSPLcoil/compose/UtilsKt;->requestOf(Ljava/lang/Object;Landroidx/compose/runtime/Composer;)Lcoil/request/ImageRequest; -HSPLcoil/decode/BitmapFactoryDecoder$Factory;->(II)V -HSPLcoil/decode/SvgDecoder$Factory;->(I)V -HSPLcoil/disk/DiskCache$Builder;->()V -HSPLcoil/disk/DiskCache$Builder;->build()Lcoil/disk/RealDiskCache; -HSPLcoil/disk/DiskLruCache$fileSystem$1;->(Lokio/JvmSystemFileSystem;)V -HSPLcoil/disk/DiskLruCache$fileSystem$1;->sink(Lokio/Path;)Lokio/Sink; -HSPLcoil/disk/DiskLruCache$newJournalWriter$faultHidingSink$1;->(Lcoil/disk/DiskLruCache;)V -HSPLcoil/disk/DiskLruCache;->()V -HSPLcoil/disk/DiskLruCache;->(Lokio/JvmSystemFileSystem;Lokio/Path;Lkotlinx/coroutines/scheduling/DefaultIoScheduler;J)V -HSPLcoil/disk/DiskLruCache;->checkNotClosed()V -HSPLcoil/disk/DiskLruCache;->get(Ljava/lang/String;)Lcoil/disk/DiskLruCache$Snapshot; -HSPLcoil/disk/DiskLruCache;->initialize()V -HSPLcoil/disk/DiskLruCache;->newJournalWriter()Lokio/RealBufferedSink; -HSPLcoil/disk/DiskLruCache;->validateKey(Ljava/lang/String;)V -HSPLcoil/disk/DiskLruCache;->writeJournal()V -HSPLcoil/disk/FaultHidingSink;->(Lokio/Sink;Lcoil/disk/DiskLruCache$newJournalWriter$faultHidingSink$1;)V -HSPLcoil/disk/RealDiskCache;->(JLokio/Path;Lokio/JvmSystemFileSystem;Lkotlinx/coroutines/scheduling/DefaultIoScheduler;)V -HSPLcoil/disk/RealDiskCache;->get(Ljava/lang/String;)Lcoil/disk/RealDiskCache$RealSnapshot; -HSPLcoil/fetch/AssetUriFetcher$Factory;->()V -HSPLcoil/fetch/BitmapFetcher$Factory;->()V -HSPLcoil/fetch/ByteBufferFetcher$Factory;->()V -HSPLcoil/fetch/ContentUriFetcher$Factory;->()V -HSPLcoil/fetch/DrawableFetcher$Factory;->()V -HSPLcoil/fetch/FileFetcher$Factory;->()V -HSPLcoil/fetch/HttpUriFetcher$Factory;->(Lkotlin/SynchronizedLazyImpl;Lkotlin/SynchronizedLazyImpl;Z)V -HSPLcoil/fetch/HttpUriFetcher$Factory;->create(Ljava/lang/Object;Lcoil/request/Options;)Lcoil/fetch/Fetcher; -HSPLcoil/fetch/HttpUriFetcher$executeNetworkRequest$1;->(Lcoil/fetch/HttpUriFetcher;Lkotlin/coroutines/Continuation;)V -HSPLcoil/fetch/HttpUriFetcher$fetch$1;->(Lcoil/fetch/HttpUriFetcher;Lkotlin/coroutines/Continuation;)V -HSPLcoil/fetch/HttpUriFetcher;->()V -HSPLcoil/fetch/HttpUriFetcher;->(Ljava/lang/String;Lcoil/request/Options;Lkotlin/Lazy;Lkotlin/Lazy;Z)V -HSPLcoil/fetch/HttpUriFetcher;->executeNetworkRequest(Lokhttp3/Request;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcoil/fetch/HttpUriFetcher;->fetch(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcoil/fetch/HttpUriFetcher;->newRequest()Lokhttp3/Request; -HSPLcoil/fetch/ResourceUriFetcher$Factory;->()V -HSPLcoil/intercept/EngineInterceptor$execute$1;->(Lcoil/intercept/EngineInterceptor;Lkotlin/coroutines/Continuation;)V -HSPLcoil/intercept/EngineInterceptor$fetch$1;->(Lcoil/intercept/EngineInterceptor;Lkotlin/coroutines/Continuation;)V -HSPLcoil/intercept/EngineInterceptor$intercept$1;->(Lcoil/intercept/EngineInterceptor;Lkotlin/coroutines/Continuation;)V -HSPLcoil/intercept/EngineInterceptor$intercept$2;->(Lcoil/intercept/EngineInterceptor;Lcoil/request/ImageRequest;Ljava/lang/Object;Lcoil/request/Options;Lcoil/EventListener;Lcoil/memory/MemoryCache$Key;Lcoil/intercept/Interceptor$Chain;Lkotlin/coroutines/Continuation;)V -HSPLcoil/intercept/EngineInterceptor$intercept$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLcoil/intercept/EngineInterceptor$intercept$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcoil/intercept/EngineInterceptor;->(Lcoil/ImageLoader;Lcoil/request/RequestService;)V -HSPLcoil/intercept/EngineInterceptor;->access$execute(Lcoil/intercept/EngineInterceptor;Lcoil/request/ImageRequest;Ljava/lang/Object;Lcoil/request/Options;Lcoil/EventListener;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcoil/intercept/EngineInterceptor;->fetch(Lcoil/ComponentRegistry;Lcoil/request/ImageRequest;Ljava/lang/Object;Lcoil/request/Options;Lcoil/EventListener;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcoil/intercept/EngineInterceptor;->intercept(Lcoil/intercept/RealInterceptorChain;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcoil/intercept/RealInterceptorChain$proceed$1;->(Lcoil/intercept/RealInterceptorChain;Lkotlin/coroutines/Continuation;)V -HSPLcoil/intercept/RealInterceptorChain;->(Lcoil/request/ImageRequest;Ljava/util/List;ILcoil/request/ImageRequest;Lcoil/size/Size;Lcoil/EventListener;Z)V -HSPLcoil/intercept/RealInterceptorChain;->proceed(Lcoil/request/ImageRequest;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcoil/key/FileKeyer;->(Z)V -HSPLcoil/key/UriKeyer;->()V -HSPLcoil/key/UriKeyer;->key(Ljava/lang/Object;Lcoil/request/Options;)Ljava/lang/String; -HSPLcoil/map/ByteArrayMapper;->()V -HSPLcoil/map/FileUriMapper;->()V -HSPLcoil/map/FileUriMapper;->map(Ljava/lang/Object;Lcoil/request/Options;)Ljava/lang/Object; -HSPLcoil/map/HttpUrlMapper;->()V -HSPLcoil/map/ResourceIntMapper;->()V -HSPLcoil/map/ResourceUriMapper;->()V -HSPLcoil/map/ResourceUriMapper;->map(Ljava/lang/Object;Lcoil/request/Options;)Ljava/lang/Object; -HSPLcoil/map/StringMapper;->()V -HSPLcoil/map/StringMapper;->map(Ljava/lang/Object;Lcoil/request/Options;)Ljava/lang/Object; -HSPLcoil/memory/MemoryCache$Key$Companion$CREATOR$1;->()V -HSPLcoil/memory/MemoryCache$Key;->()V -HSPLcoil/memory/MemoryCache$Key;->(Ljava/lang/String;Ljava/util/Map;)V -HSPLcoil/memory/MemoryCache$Key;->hashCode()I -HSPLcoil/memory/MemoryCacheService;->(Lcoil/ImageLoader;Lcoil/request/RequestService;)V -HSPLcoil/memory/MemoryCacheService;->getCacheValue$enumunboxing$(Lcoil/request/ImageRequest;Lcoil/memory/MemoryCache$Key;Lcoil/size/Size;I)Lcoil/memory/MemoryCache$Value; -HSPLcoil/memory/MemoryCacheService;->newCacheKey(Lcoil/request/ImageRequest;Ljava/lang/Object;Lcoil/request/Options;Lcoil/EventListener;)Lcoil/memory/MemoryCache$Key; -HSPLcoil/memory/RealMemoryCache;->(Lcoil/memory/StrongMemoryCache;Lcoil/memory/WeakMemoryCache;)V -HSPLcoil/memory/RealMemoryCache;->get(Lcoil/memory/MemoryCache$Key;)Lcoil/memory/MemoryCache$Value; -HSPLcoil/memory/RealStrongMemoryCache$cache$1;->(ILcoil/memory/RealStrongMemoryCache;)V -HSPLcoil/memory/RealStrongMemoryCache;->(ILcoil/memory/WeakMemoryCache;)V -HSPLcoil/memory/RealStrongMemoryCache;->get(Lcoil/memory/MemoryCache$Key;)Lcoil/memory/MemoryCache$Value; -HSPLcoil/memory/RealWeakMemoryCache;->()V -HSPLcoil/memory/RealWeakMemoryCache;->get(Lcoil/memory/MemoryCache$Key;)Lcoil/memory/MemoryCache$Value; -HSPLcoil/network/CacheStrategy$Factory;->(Lokhttp3/Request;Lcoil/network/CacheResponse;)V -HSPLcoil/network/CacheStrategy$Factory;->compute()Lcoil/network/CacheStrategy; -HSPLcoil/network/CacheStrategy;->(Lokhttp3/Request;Lcoil/network/CacheResponse;)V -HSPLcoil/network/EmptyNetworkObserver;->listSaver(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/saveable/SaverKt$Saver$1; -HSPLcoil/network/RealNetworkObserver$networkCallback$1;->(Lcoil/network/RealNetworkObserver;)V -HSPLcoil/network/RealNetworkObserver$networkCallback$1;->onAvailable(Landroid/net/Network;)V -HSPLcoil/network/RealNetworkObserver;->(Landroid/net/ConnectivityManager;Lcoil/network/NetworkObserver$Listener;)V -HSPLcoil/network/RealNetworkObserver;->access$onConnectivityChange(Lcoil/network/RealNetworkObserver;Landroid/net/Network;Z)V -HSPLcoil/network/RealNetworkObserver;->isOnline()Z -HSPLcoil/request/BaseRequestDelegate;->(Landroidx/lifecycle/Lifecycle;Lkotlinx/coroutines/Job;)V -HSPLcoil/request/BaseRequestDelegate;->start()V -HSPLcoil/request/CachePolicy$EnumUnboxingLocalUtility;->getReadEnabled(I)Z -HSPLcoil/request/DefaultRequestOptions;->(I)V -HSPLcoil/request/DefinedRequestOptions;->(Landroidx/lifecycle/Lifecycle;Lcoil/size/SizeResolver;ILkotlinx/coroutines/CoroutineDispatcher;Lkotlinx/coroutines/CoroutineDispatcher;Lkotlinx/coroutines/CoroutineDispatcher;Lkotlinx/coroutines/CoroutineDispatcher;Lcoil/transition/Transition$Factory;ILandroid/graphics/Bitmap$Config;Ljava/lang/Boolean;Ljava/lang/Boolean;III)V -HSPLcoil/request/ImageRequest$Builder;->(Landroid/content/Context;)V -HSPLcoil/request/ImageRequest$Builder;->(Lcoil/request/ImageRequest;Landroid/content/Context;)V -HSPLcoil/request/ImageRequest$Builder;->build()Lcoil/request/ImageRequest; -HSPLcoil/request/ImageRequest;->(Landroid/content/Context;Ljava/lang/Object;Lcoil/target/Target;Lcoil/request/ImageRequest$Listener;Lcoil/memory/MemoryCache$Key;Ljava/lang/String;Landroid/graphics/Bitmap$Config;Landroid/graphics/ColorSpace;ILkotlin/Pair;Lcoil/decode/Decoder$Factory;Ljava/util/List;Lcoil/transition/Transition$Factory;Lokhttp3/Headers;Lcoil/request/Tags;ZZZZIIILkotlinx/coroutines/CoroutineDispatcher;Lkotlinx/coroutines/CoroutineDispatcher;Lkotlinx/coroutines/CoroutineDispatcher;Lkotlinx/coroutines/CoroutineDispatcher;Landroidx/lifecycle/Lifecycle;Lcoil/size/SizeResolver;ILcoil/request/Parameters;Lcoil/memory/MemoryCache$Key;Ljava/lang/Integer;Landroid/graphics/drawable/Drawable;Ljava/lang/Integer;Landroid/graphics/drawable/Drawable;Ljava/lang/Integer;Landroid/graphics/drawable/Drawable;Lcoil/request/DefinedRequestOptions;Lcoil/request/DefaultRequestOptions;)V -HSPLcoil/request/ImageRequest;->equals(Ljava/lang/Object;)Z -HSPLcoil/request/ImageRequest;->newBuilder$default(Lcoil/request/ImageRequest;)Lcoil/request/ImageRequest$Builder; -HSPLcoil/request/NullRequestData;->()V -HSPLcoil/request/NullRequestData;->()V -HSPLcoil/request/Options;->(Landroid/content/Context;Landroid/graphics/Bitmap$Config;Landroid/graphics/ColorSpace;Lcoil/size/Size;IZZZLjava/lang/String;Lokhttp3/Headers;Lcoil/request/Tags;Lcoil/request/Parameters;III)V -HSPLcoil/request/Parameters$Builder;->(Lcoil/request/Parameters;)V -HSPLcoil/request/Parameters;->()V -HSPLcoil/request/Parameters;->()V -HSPLcoil/request/Parameters;->(Ljava/util/Map;)V -HSPLcoil/request/RequestDelegate;->()V -HSPLcoil/request/RequestDelegate;->(I)V -HSPLcoil/request/RequestDelegate;->assertActive()V -HSPLcoil/request/RequestService;->(Lcoil/ImageLoader;Lcoil/util/SystemCallbacks;)V -HSPLcoil/request/RequestService;->isConfigValidForHardware(Lcoil/request/ImageRequest;Landroid/graphics/Bitmap$Config;)Z -HSPLcoil/request/RequestService;->options(Lcoil/request/ImageRequest;Lcoil/size/Size;)Lcoil/request/Options; -HSPLcoil/request/Tags;->()V -HSPLcoil/request/Tags;->(Ljava/util/Map;)V -HSPLcoil/size/Dimension$Pixels;->(I)V -HSPLcoil/size/Dimension$Pixels;->equals(Ljava/lang/Object;)Z -HSPLcoil/size/Dimension$Undefined;->()V -HSPLcoil/size/Dimension$Undefined;->()V -HSPLcoil/size/Dimension;->()V -HSPLcoil/size/DisplaySizeResolver;->(Landroid/content/Context;)V -HSPLcoil/size/Size;->()V -HSPLcoil/size/Size;->(Lcoil/size/Dimension;Lcoil/size/Dimension;)V -HSPLcoil/transition/NoneTransition$Factory;->()V -HSPLcoil/transition/Transition$Factory;->()V -HSPLcoil/util/-Bitmaps;->isHardware(Landroid/graphics/Bitmap$Config;)Z -HSPLcoil/util/-Collections;->toImmutableList(Ljava/util/ArrayList;)Ljava/util/List; -HSPLcoil/util/-Collections;->toImmutableMap(Ljava/util/Map;)Ljava/util/Map; -HSPLcoil/util/-HardwareBitmaps;->()V -HSPLcoil/util/-Requests;->()V -HSPLcoil/util/-Requests;->getAllowInexactSize(Lcoil/request/ImageRequest;)Z -HSPLcoil/util/-Requests;->getDrawableCompat(Lcoil/request/ImageRequest;Landroid/graphics/drawable/Drawable;Ljava/lang/Integer;Landroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable; -HSPLcoil/util/-Utils;->()V -HSPLcoil/util/ContinuationCallback;->(Lokhttp3/Call;Lkotlinx/coroutines/CancellableContinuationImpl;)V -HSPLcoil/util/HardwareBitmapService;->()V -HSPLcoil/util/ImageLoaderOptions;->()V -HSPLcoil/util/ImmutableHardwareBitmapService;->(Z)V -HSPLcoil/util/ImmutableHardwareBitmapService;->allowHardwareMainThread(Lcoil/size/Size;)Z -HSPLcoil/util/ImmutableHardwareBitmapService;->allowHardwareWorkerThread()Z -HSPLcoil/util/SingletonDiskCache;->()V -HSPLcoil/util/SingletonDiskCache;->()V -HSPLcoil/util/SystemCallbacks;->(Lcoil/RealImageLoader;Landroid/content/Context;Z)V -HSPLcoil/util/SystemCallbacks;->onConnectivityChange(Z)V -HSPLcom/google/accompanist/systemuicontroller/AndroidSystemUiController;->(Landroid/view/View;Landroid/view/Window;)V -HSPLcom/google/accompanist/systemuicontroller/AndroidSystemUiController;->setNavigationBarDarkContentEnabled(Z)V -HSPLcom/google/accompanist/systemuicontroller/AndroidSystemUiController;->setStatusBarDarkContentEnabled(Z)V -HSPLcom/google/accompanist/systemuicontroller/SystemUiController;->setSystemBarsDarkContentEnabled(Z)V -HSPLcom/google/accompanist/systemuicontroller/SystemUiControllerKt;->()V -HSPLcom/google/protobuf/AbstractMessageLite$Builder;->()V -HSPLcom/google/protobuf/AbstractMessageLite;->()V -HSPLcom/google/protobuf/AbstractMessageLite;->addAll(Ljava/util/ArrayList;Lcom/google/protobuf/Internal$ProtobufList;)V -HSPLcom/google/protobuf/AbstractProtobufList;->()V -HSPLcom/google/protobuf/AbstractProtobufList;->hashCode()I -HSPLcom/google/protobuf/AbstractProtobufList;->isModifiable()Z -HSPLcom/google/protobuf/AbstractProtobufList;->makeImmutable()V -HSPLcom/google/protobuf/Android;->()V -HSPLcom/google/protobuf/Android;->isOnAndroidDevice()Z -HSPLcom/google/protobuf/ByteOutput;->()V -HSPLcom/google/protobuf/ByteString$LeafByteString;->()V -HSPLcom/google/protobuf/ByteString$LiteralByteString;->([B)V -HSPLcom/google/protobuf/ByteString$SystemByteArrayCopier;->()V -HSPLcom/google/protobuf/ByteString;->()V -HSPLcom/google/protobuf/ByteString;->()V -HSPLcom/google/protobuf/CodedInputStream$ArrayDecoder;->([BIIZ)V -HSPLcom/google/protobuf/CodedInputStream$ArrayDecoder;->pushLimit(I)I -HSPLcom/google/protobuf/CodedInputStream;->()V -HSPLcom/google/protobuf/CodedOutputStream$AbstractBufferedEncoder;->(I)V -HSPLcom/google/protobuf/CodedOutputStream$AbstractBufferedEncoder;->bufferTag(II)V -HSPLcom/google/protobuf/CodedOutputStream$AbstractBufferedEncoder;->bufferUInt32NoTag(I)V -HSPLcom/google/protobuf/CodedOutputStream$OutputStreamEncoder;->(Landroidx/datastore/core/SingleProcessDataStore$UncloseableOutputStream;I)V -HSPLcom/google/protobuf/CodedOutputStream$OutputStreamEncoder;->doFlush()V -HSPLcom/google/protobuf/CodedOutputStream$OutputStreamEncoder;->flushIfNotAvailable(I)V -HSPLcom/google/protobuf/CodedOutputStream$OutputStreamEncoder;->writeBool(IZ)V -HSPLcom/google/protobuf/CodedOutputStream$OutputStreamEncoder;->writeInt32(II)V -HSPLcom/google/protobuf/CodedOutputStream;->()V -HSPLcom/google/protobuf/CodedOutputStream;->()V -HSPLcom/google/protobuf/CodedOutputStream;->computeBoolSize(I)I -HSPLcom/google/protobuf/CodedOutputStream;->computeInt32Size(II)I -HSPLcom/google/protobuf/CodedOutputStream;->computeInt32SizeNoTag(I)I -HSPLcom/google/protobuf/CodedOutputStream;->computeTagSize(I)I -HSPLcom/google/protobuf/CodedOutputStream;->computeUInt32SizeNoTag(I)I -HSPLcom/google/protobuf/CodedOutputStreamWriter;->(Lcom/google/protobuf/CodedOutputStream;)V -HSPLcom/google/protobuf/CodedOutputStreamWriter;->writeBool(IZ)V -HSPLcom/google/protobuf/CodedOutputStreamWriter;->writeInt32(II)V -HSPLcom/google/protobuf/FieldType;->()V -HSPLcom/google/protobuf/FieldType;->(Ljava/lang/String;IIILcom/google/protobuf/JavaType;)V -HSPLcom/google/protobuf/FieldType;->id()I -HSPLcom/google/protobuf/FieldType;->values()[Lcom/google/protobuf/FieldType; -HSPLcom/google/protobuf/GeneratedMessageInfoFactory;->()V -HSPLcom/google/protobuf/GeneratedMessageInfoFactory;->()V -HSPLcom/google/protobuf/GeneratedMessageInfoFactory;->isSupported(Ljava/lang/Class;)Z -HSPLcom/google/protobuf/GeneratedMessageInfoFactory;->messageInfoFor(Ljava/lang/Class;)Lcom/google/protobuf/MessageInfo; -HSPLcom/google/protobuf/GeneratedMessageLite$Builder;->(Lcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;)V -HSPLcom/google/protobuf/GeneratedMessageLite$Builder;->buildPartial()Lcom/google/protobuf/GeneratedMessageLite; -HSPLcom/google/protobuf/GeneratedMessageLite$Builder;->copyOnWrite()V -HSPLcom/google/protobuf/GeneratedMessageLite$Builder;->mergeFrom(Lcom/google/protobuf/GeneratedMessageLite;)V -HSPLcom/google/protobuf/GeneratedMessageLite$Builder;->mergeFromInstance(Lcom/google/protobuf/GeneratedMessageLite;Ljava/lang/Object;)V -HSPLcom/google/protobuf/GeneratedMessageLite$MethodToInvoke;->()V -HSPLcom/google/protobuf/GeneratedMessageLite$MethodToInvoke;->(ILjava/lang/String;)V -HSPLcom/google/protobuf/GeneratedMessageLite;->()V -HSPLcom/google/protobuf/GeneratedMessageLite;->()V -HSPLcom/google/protobuf/GeneratedMessageLite;->clearMemoizedHashCode()V -HSPLcom/google/protobuf/GeneratedMessageLite;->clearMemoizedSerializedSize()V -HSPLcom/google/protobuf/GeneratedMessageLite;->equals(Ljava/lang/Object;)Z -HSPLcom/google/protobuf/GeneratedMessageLite;->getDefaultInstance(Ljava/lang/Class;)Lcom/google/protobuf/GeneratedMessageLite; -HSPLcom/google/protobuf/GeneratedMessageLite;->getMemoizedSerializedSize()I -HSPLcom/google/protobuf/GeneratedMessageLite;->getSerializedSize(Lcom/google/protobuf/Schema;)I -HSPLcom/google/protobuf/GeneratedMessageLite;->hashCode()I -HSPLcom/google/protobuf/GeneratedMessageLite;->isInitialized(Lcom/google/protobuf/GeneratedMessageLite;Z)Z -HSPLcom/google/protobuf/GeneratedMessageLite;->isMutable()Z -HSPLcom/google/protobuf/GeneratedMessageLite;->markImmutable()V -HSPLcom/google/protobuf/GeneratedMessageLite;->registerDefaultInstance(Lcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;)V -HSPLcom/google/protobuf/GeneratedMessageLite;->setMemoizedSerializedSize(I)V -HSPLcom/google/protobuf/GeneratedMessageLite;->toBuilder$1()Lcom/google/protobuf/GeneratedMessageLite$Builder; -HSPLcom/google/protobuf/GeneratedMessageLite;->writeTo(Lcom/google/protobuf/CodedOutputStream;)V -HSPLcom/google/protobuf/IntArrayList;->()V -HSPLcom/google/protobuf/IntArrayList;->([II)V -HSPLcom/google/protobuf/IntArrayList;->hashCode()I -HSPLcom/google/protobuf/IntArrayList;->size()I -HSPLcom/google/protobuf/Internal;->()V -HSPLcom/google/protobuf/JavaType;->()V -HSPLcom/google/protobuf/JavaType;->(Ljava/lang/String;ILjava/lang/Class;Ljava/io/Serializable;)V -HSPLcom/google/protobuf/ListFieldSchema$ListFieldSchemaFull;->()V -HSPLcom/google/protobuf/ListFieldSchema$ListFieldSchemaFull;->()V -HSPLcom/google/protobuf/ListFieldSchema$ListFieldSchemaLite;->()V -HSPLcom/google/protobuf/ListFieldSchema$ListFieldSchemaLite;->makeImmutableListAt(JLjava/lang/Object;)V -HSPLcom/google/protobuf/ListFieldSchema$ListFieldSchemaLite;->mergeListsAt(JLjava/lang/Object;Ljava/lang/Object;)V -HSPLcom/google/protobuf/ListFieldSchema;->()V -HSPLcom/google/protobuf/ListFieldSchema;->()V -HSPLcom/google/protobuf/ManifestSchemaFactory$1;->()V -HSPLcom/google/protobuf/ManifestSchemaFactory$CompositeMessageInfoFactory;->([Lcom/google/protobuf/MessageInfoFactory;)V -HSPLcom/google/protobuf/ManifestSchemaFactory$CompositeMessageInfoFactory;->messageInfoFor(Ljava/lang/Class;)Lcom/google/protobuf/MessageInfo; -HSPLcom/google/protobuf/ManifestSchemaFactory;->()V -HSPLcom/google/protobuf/ManifestSchemaFactory;->()V -HSPLcom/google/protobuf/MapEntryLite$Metadata;->(Lcom/google/protobuf/WireFormat$FieldType$1;Lcom/google/protobuf/WireFormat$FieldType;Ljava/lang/Boolean;)V -HSPLcom/google/protobuf/MapEntryLite;->(Lcom/google/protobuf/WireFormat$FieldType$1;Lcom/google/protobuf/WireFormat$FieldType;Ljava/lang/Boolean;)V -HSPLcom/google/protobuf/MapFieldLite;->()V -HSPLcom/google/protobuf/MapFieldLite;->()V -HSPLcom/google/protobuf/MapFieldLite;->entrySet()Ljava/util/Set; -HSPLcom/google/protobuf/MapFieldLite;->hashCode()I -HSPLcom/google/protobuf/MapFieldSchemaLite;->()V -HSPLcom/google/protobuf/MapFieldSchemaLite;->forMapData(Ljava/lang/Object;)Lcom/google/protobuf/MapFieldLite; -HSPLcom/google/protobuf/MapFieldSchemaLite;->forMapMetadata(Ljava/lang/Object;)Lcom/google/protobuf/MapEntryLite$Metadata; -HSPLcom/google/protobuf/MapFieldSchemaLite;->getSerializedSize(Ljava/lang/Object;ILjava/lang/Object;)I -HSPLcom/google/protobuf/MapFieldSchemaLite;->mergeFrom(Ljava/lang/Object;Ljava/lang/Object;)Lcom/google/protobuf/MapFieldLite; -HSPLcom/google/protobuf/MapFieldSchemaLite;->toImmutable(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/protobuf/MapFieldSchemas;->()V -HSPLcom/google/protobuf/MessageSchema;->()V -HSPLcom/google/protobuf/MessageSchema;->([I[Ljava/lang/Object;IILcom/google/protobuf/MessageLite;Z[IIILcom/google/protobuf/NewInstanceSchema;Lcom/google/protobuf/ListFieldSchema;Lcom/google/protobuf/UnknownFieldSchema;Lcom/google/protobuf/ExtensionSchema;Lcom/google/protobuf/MapFieldSchema;)V -HSPLcom/google/protobuf/MessageSchema;->arePresentForEquals(Ljava/lang/Object;ILjava/lang/Object;)Z -HSPLcom/google/protobuf/MessageSchema;->checkMutable(Ljava/lang/Object;)V -HSPLcom/google/protobuf/MessageSchema;->equals(Ljava/lang/Object;Ljava/lang/Object;)Z -HSPLcom/google/protobuf/MessageSchema;->getMapFieldDefaultEntry(I)Ljava/lang/Object; -HSPLcom/google/protobuf/MessageSchema;->getSerializedSize(Ljava/lang/Object;)I -HSPLcom/google/protobuf/MessageSchema;->getSerializedSizeProto3(Ljava/lang/Object;)I -HSPLcom/google/protobuf/MessageSchema;->hashCode(Ljava/lang/Object;)I -HSPLcom/google/protobuf/MessageSchema;->isFieldPresent(ILjava/lang/Object;)Z -HSPLcom/google/protobuf/MessageSchema;->isMutable(Ljava/lang/Object;)Z -HSPLcom/google/protobuf/MessageSchema;->listAt(JLjava/lang/Object;)Ljava/util/List; -HSPLcom/google/protobuf/MessageSchema;->makeImmutable(Ljava/lang/Object;)V -HSPLcom/google/protobuf/MessageSchema;->mergeFrom(Ljava/lang/Object;Ljava/lang/Object;)V -HSPLcom/google/protobuf/MessageSchema;->newSchema(Lcom/google/protobuf/MessageInfo;Lcom/google/protobuf/NewInstanceSchema;Lcom/google/protobuf/ListFieldSchema;Lcom/google/protobuf/UnknownFieldSchema;Lcom/google/protobuf/ExtensionSchema;Lcom/google/protobuf/MapFieldSchema;)Lcom/google/protobuf/MessageSchema; -HSPLcom/google/protobuf/MessageSchema;->newSchemaForRawMessageInfo(Lcom/google/protobuf/RawMessageInfo;Lcom/google/protobuf/NewInstanceSchema;Lcom/google/protobuf/ListFieldSchema;Lcom/google/protobuf/UnknownFieldSchema;Lcom/google/protobuf/ExtensionSchema;Lcom/google/protobuf/MapFieldSchema;)Lcom/google/protobuf/MessageSchema; -HSPLcom/google/protobuf/MessageSchema;->reflectField(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/reflect/Field; -HSPLcom/google/protobuf/MessageSchema;->setFieldPresent(ILjava/lang/Object;)V -HSPLcom/google/protobuf/MessageSchema;->typeAndOffsetAt(I)I -HSPLcom/google/protobuf/MessageSchema;->writeMapHelper(Lcom/google/protobuf/CodedOutputStreamWriter;ILjava/lang/Object;I)V -HSPLcom/google/protobuf/MessageSchema;->writeTo(Ljava/lang/Object;Lcom/google/protobuf/CodedOutputStreamWriter;)V -HSPLcom/google/protobuf/NewInstanceSchemaLite;->()V -HSPLcom/google/protobuf/NewInstanceSchemas;->()V -HSPLcom/google/protobuf/Protobuf;->()V -HSPLcom/google/protobuf/Protobuf;->()V -HSPLcom/google/protobuf/Protobuf;->schemaFor(Ljava/lang/Class;)Lcom/google/protobuf/Schema; -HSPLcom/google/protobuf/ProtobufArrayList;->()V -HSPLcom/google/protobuf/ProtobufArrayList;->(I[Ljava/lang/Object;)V -HSPLcom/google/protobuf/ProtobufArrayList;->mutableCopyWithCapacity(I)Lcom/google/protobuf/Internal$ProtobufList; -HSPLcom/google/protobuf/ProtobufArrayList;->size()I -HSPLcom/google/protobuf/RawMessageInfo;->(Lcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;[Ljava/lang/Object;)V -HSPLcom/google/protobuf/RawMessageInfo;->getDefaultInstance()Lcom/google/protobuf/MessageLite; -HSPLcom/google/protobuf/RawMessageInfo;->getObjects()[Ljava/lang/Object; -HSPLcom/google/protobuf/RawMessageInfo;->getStringInfo()Ljava/lang/String; -HSPLcom/google/protobuf/RawMessageInfo;->getSyntax$enumunboxing$()I -HSPLcom/google/protobuf/RawMessageInfo;->isMessageSetWireFormat()Z -HSPLcom/google/protobuf/SchemaUtil;->()V -HSPLcom/google/protobuf/SchemaUtil;->computeSizeInt32ListNoTag(Ljava/util/List;)I -HSPLcom/google/protobuf/SchemaUtil;->computeSizeStringList(ILjava/util/List;)I -HSPLcom/google/protobuf/SchemaUtil;->getUnknownFieldSetSchema(Z)Lcom/google/protobuf/UnknownFieldSchema; -HSPLcom/google/protobuf/SchemaUtil;->safeEquals(Ljava/lang/Object;Ljava/lang/Object;)Z -HSPLcom/google/protobuf/SchemaUtil;->writeInt32List(ILjava/util/List;Lcom/google/protobuf/CodedOutputStreamWriter;Z)V -HSPLcom/google/protobuf/SchemaUtil;->writeStringList(ILjava/util/List;Lcom/google/protobuf/CodedOutputStreamWriter;)V -HSPLcom/google/protobuf/UnknownFieldSchema;->()V -HSPLcom/google/protobuf/UnknownFieldSetLite;->()V -HSPLcom/google/protobuf/UnknownFieldSetLite;->(I[I[Ljava/lang/Object;Z)V -HSPLcom/google/protobuf/UnknownFieldSetLite;->equals(Ljava/lang/Object;)Z -HSPLcom/google/protobuf/UnknownFieldSetLite;->getSerializedSize()I -HSPLcom/google/protobuf/UnknownFieldSetLite;->hashCode()I -HSPLcom/google/protobuf/UnknownFieldSetLite;->writeTo(Lcom/google/protobuf/CodedOutputStreamWriter;)V -HSPLcom/google/protobuf/UnknownFieldSetLiteSchema;->()V -HSPLcom/google/protobuf/UnknownFieldSetLiteSchema;->getFromMessage(Ljava/lang/Object;)Lcom/google/protobuf/UnknownFieldSetLite; -HSPLcom/google/protobuf/UnknownFieldSetLiteSchema;->getSerializedSize(Ljava/lang/Object;)I -HSPLcom/google/protobuf/UnknownFieldSetLiteSchema;->makeImmutable(Ljava/lang/Object;)V -HSPLcom/google/protobuf/UnknownFieldSetLiteSchema;->merge(Ljava/lang/Object;Ljava/lang/Object;)Lcom/google/protobuf/UnknownFieldSetLite; -HSPLcom/google/protobuf/UnknownFieldSetLiteSchema;->setToMessage(Ljava/lang/Object;Ljava/lang/Object;)V -HSPLcom/google/protobuf/UnknownFieldSetLiteSchema;->writeTo(Ljava/lang/Object;Lcom/google/protobuf/CodedOutputStreamWriter;)V -HSPLcom/google/protobuf/UnsafeUtil$1;->()V -HSPLcom/google/protobuf/UnsafeUtil$1;->run()Ljava/lang/Object; -HSPLcom/google/protobuf/UnsafeUtil$1;->run()Lsun/misc/Unsafe; -HSPLcom/google/protobuf/UnsafeUtil$Android64MemoryAccessor;->(Lsun/misc/Unsafe;)V -HSPLcom/google/protobuf/UnsafeUtil$Android64MemoryAccessor;->getBoolean(JLjava/lang/Object;)Z -HSPLcom/google/protobuf/UnsafeUtil$Android64MemoryAccessor;->putBoolean(Ljava/lang/Object;JZ)V -HSPLcom/google/protobuf/UnsafeUtil$Android64MemoryAccessor;->putByte(Ljava/lang/Object;JB)V -HSPLcom/google/protobuf/UnsafeUtil$Android64MemoryAccessor;->supportsUnsafeByteBufferOperations()Z -HSPLcom/google/protobuf/UnsafeUtil$MemoryAccessor;->(Lsun/misc/Unsafe;)V -HSPLcom/google/protobuf/UnsafeUtil$MemoryAccessor;->arrayBaseOffset(Ljava/lang/Class;)I -HSPLcom/google/protobuf/UnsafeUtil$MemoryAccessor;->arrayIndexScale(Ljava/lang/Class;)I -HSPLcom/google/protobuf/UnsafeUtil$MemoryAccessor;->getInt(JLjava/lang/Object;)I -HSPLcom/google/protobuf/UnsafeUtil$MemoryAccessor;->getObject(JLjava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/protobuf/UnsafeUtil$MemoryAccessor;->objectFieldOffset(Ljava/lang/reflect/Field;)J -HSPLcom/google/protobuf/UnsafeUtil$MemoryAccessor;->putInt(IJLjava/lang/Object;)V -HSPLcom/google/protobuf/UnsafeUtil$MemoryAccessor;->putObject(JLjava/lang/Object;Ljava/lang/Object;)V -HSPLcom/google/protobuf/UnsafeUtil$MemoryAccessor;->supportsUnsafeArrayOperations()Z -HSPLcom/google/protobuf/UnsafeUtil;->()V -HSPLcom/google/protobuf/UnsafeUtil;->arrayBaseOffset(Ljava/lang/Class;)I -HSPLcom/google/protobuf/UnsafeUtil;->arrayIndexScale(Ljava/lang/Class;)V -HSPLcom/google/protobuf/UnsafeUtil;->bufferAddressField()Ljava/lang/reflect/Field; -HSPLcom/google/protobuf/UnsafeUtil;->determineAndroidSupportByAddressSize(Ljava/lang/Class;)Z -HSPLcom/google/protobuf/UnsafeUtil;->getBoolean(JLjava/lang/Object;)Z -HSPLcom/google/protobuf/UnsafeUtil;->getByteLittleEndian(JLjava/lang/Object;)B -HSPLcom/google/protobuf/UnsafeUtil;->getInt(JLjava/lang/Object;)I -HSPLcom/google/protobuf/UnsafeUtil;->getObject(JLjava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/protobuf/UnsafeUtil;->getUnsafe()Lsun/misc/Unsafe; -HSPLcom/google/protobuf/UnsafeUtil;->putByte([BJB)V -HSPLcom/google/protobuf/UnsafeUtil;->putByteLittleEndian(Ljava/lang/Object;JB)V -HSPLcom/google/protobuf/UnsafeUtil;->putInt(IJLjava/lang/Object;)V -HSPLcom/google/protobuf/UnsafeUtil;->putObject(JLjava/lang/Object;Ljava/lang/Object;)V -HSPLcom/google/protobuf/WireFormat$FieldType$1;->()V -HSPLcom/google/protobuf/WireFormat$FieldType$2;->(Lcom/google/protobuf/WireFormat$JavaType;)V -HSPLcom/google/protobuf/WireFormat$FieldType$3;->(Lcom/google/protobuf/WireFormat$JavaType;)V -HSPLcom/google/protobuf/WireFormat$FieldType$4;->(Lcom/google/protobuf/WireFormat$JavaType;)V -HSPLcom/google/protobuf/WireFormat$FieldType;->()V -HSPLcom/google/protobuf/WireFormat$FieldType;->(Ljava/lang/String;ILcom/google/protobuf/WireFormat$JavaType;I)V -HSPLcom/google/protobuf/WireFormat$JavaType;->()V -HSPLcom/google/protobuf/WireFormat$JavaType;->(Ljava/lang/String;ILjava/io/Serializable;)V -HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ActivityCBuilder;->(Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$SingletonCImpl;Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ActivityRetainedCImpl;)V -HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ActivityCImpl$SwitchingProvider;->(Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ActivityCImpl;)V -HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ActivityCImpl$SwitchingProvider;->get()Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ActivityCImpl;->(Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$SingletonCImpl;Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ActivityRetainedCImpl;Landroid/app/Activity;)V -HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ActivityCImpl;->getHiltInternalFactoryFactory()Ldagger/hilt/android/internal/lifecycle/DefaultViewModelFactories$InternalFactoryFactory; -HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ActivityCImpl;->getViewModelComponentBuilder()Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ViewModelCBuilder; -HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ActivityCImpl;->getViewModelKeys()Ljava/util/Set; -HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ActivityCImpl;->injectMainActivity(Lcom/google/samples/apps/nowinandroid/MainActivity;)V -HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ActivityRetainedCBuilder;->(Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$SingletonCImpl;)V -HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ActivityRetainedCImpl$SwitchingProvider;->()V -HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ActivityRetainedCImpl;->(Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$SingletonCImpl;)V -HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ActivityRetainedCImpl;->activityComponentBuilder()Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ActivityCBuilder; -HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$SingletonCImpl$SwitchingProvider$1;->(Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$SingletonCImpl$SwitchingProvider;)V -HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$SingletonCImpl$SwitchingProvider$1;->create(Landroid/content/Context;Landroidx/work/WorkerParameters;)Lcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker; -HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$SingletonCImpl$SwitchingProvider;->(Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$SingletonCImpl;I)V -HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$SingletonCImpl$SwitchingProvider;->get()Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$SingletonCImpl;->(Ldagger/hilt/android/internal/modules/ApplicationContextModule;)V -HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$SingletonCImpl;->access$1500(Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$SingletonCImpl;)Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository; -HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$SingletonCImpl;->access$1600(Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$SingletonCImpl;)Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository; -HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$SingletonCImpl;->hiltWorkerFactory()Landroidx/hilt/work/HiltWorkerFactory; -HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$SingletonCImpl;->injectNiaApplication()V -HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$SingletonCImpl;->retainedComponentBuilder()Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ActivityRetainedCBuilder; -HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ViewModelCBuilder;->(Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$SingletonCImpl;Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ActivityRetainedCImpl;)V -HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ViewModelCImpl$SwitchingProvider;->(Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$SingletonCImpl;Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ViewModelCImpl;I)V -HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ViewModelCImpl$SwitchingProvider;->get()Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ViewModelCImpl;->(Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$SingletonCImpl;Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ActivityRetainedCImpl;Landroidx/lifecycle/SavedStateHandle;)V -HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ViewModelCImpl;->access$1800(Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ViewModelCImpl;)Lcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCase; -HSPLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ViewModelCImpl;->getHiltViewModelMap()Ljava/util/Map; -HSPLcom/google/samples/apps/nowinandroid/Hilt_MainActivity$1;->(Lcom/google/samples/apps/nowinandroid/Hilt_MainActivity;)V -HSPLcom/google/samples/apps/nowinandroid/Hilt_MainActivity$1;->onContextAvailable()V -HSPLcom/google/samples/apps/nowinandroid/Hilt_MainActivity;->()V -HSPLcom/google/samples/apps/nowinandroid/Hilt_MainActivity;->generatedComponent()Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/Hilt_MainActivity;->getDefaultViewModelProviderFactory()Landroidx/lifecycle/ViewModelProvider$Factory; -HSPLcom/google/samples/apps/nowinandroid/Hilt_NiaApplication$1;->(Lcom/google/samples/apps/nowinandroid/Hilt_NiaApplication;)V -HSPLcom/google/samples/apps/nowinandroid/Hilt_NiaApplication;->()V -HSPLcom/google/samples/apps/nowinandroid/Hilt_NiaApplication;->generatedComponent()Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/Hilt_NiaApplication;->onCreate()V -HSPLcom/google/samples/apps/nowinandroid/MainActivity$onCreate$1$1$1;->(Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/MainActivity$onCreate$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLcom/google/samples/apps/nowinandroid/MainActivity$onCreate$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/MainActivity$onCreate$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/MainActivity$onCreate$1$1;->(Lcom/google/samples/apps/nowinandroid/MainActivity;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/MainActivity$onCreate$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLcom/google/samples/apps/nowinandroid/MainActivity$onCreate$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/MainActivity$onCreate$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/MainActivity$onCreate$1;->(Lcom/google/samples/apps/nowinandroid/MainActivity;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/MainActivity$onCreate$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLcom/google/samples/apps/nowinandroid/MainActivity$onCreate$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/MainActivity$onCreate$2;->(Landroidx/compose/runtime/ParcelableSnapshotMutableState;)V -HSPLcom/google/samples/apps/nowinandroid/MainActivity$onCreate$2;->shouldKeepOnScreen()Z -HSPLcom/google/samples/apps/nowinandroid/MainActivity$onCreate$3$1$1$invoke$$inlined$onDispose$1;->()V -HSPLcom/google/samples/apps/nowinandroid/MainActivity$onCreate$3$1$1;->(Lcom/google/accompanist/systemuicontroller/AndroidSystemUiController;Z)V -HSPLcom/google/samples/apps/nowinandroid/MainActivity$onCreate$3$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/MainActivity$onCreate$3$2;->(Lcom/google/samples/apps/nowinandroid/MainActivity;)V -HSPLcom/google/samples/apps/nowinandroid/MainActivity$onCreate$3$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/MainActivity$onCreate$3;->(Landroidx/compose/runtime/ParcelableSnapshotMutableState;Lcom/google/samples/apps/nowinandroid/MainActivity;)V -HSPLcom/google/samples/apps/nowinandroid/MainActivity$onCreate$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/MainActivity$special$$inlined$viewModels$default$1;->(Landroidx/activity/ComponentActivity;)V -HSPLcom/google/samples/apps/nowinandroid/MainActivity$special$$inlined$viewModels$default$1;->invoke()Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/MainActivity$special$$inlined$viewModels$default$2;->(Landroidx/activity/ComponentActivity;)V -HSPLcom/google/samples/apps/nowinandroid/MainActivity$special$$inlined$viewModels$default$2;->invoke()Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/MainActivity$special$$inlined$viewModels$default$3;->(Landroidx/activity/ComponentActivity;)V -HSPLcom/google/samples/apps/nowinandroid/MainActivity$special$$inlined$viewModels$default$3;->invoke()Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/MainActivity;->()V -HSPLcom/google/samples/apps/nowinandroid/MainActivity;->onCreate(Landroid/os/Bundle;)V -HSPLcom/google/samples/apps/nowinandroid/MainActivity;->onResume()V -HSPLcom/google/samples/apps/nowinandroid/MainActivityUiState$Loading;->()V -HSPLcom/google/samples/apps/nowinandroid/MainActivityUiState$Loading;->()V -HSPLcom/google/samples/apps/nowinandroid/MainActivityUiState$Success;->(Lcom/google/samples/apps/nowinandroid/core/model/data/UserData;)V -HSPLcom/google/samples/apps/nowinandroid/MainActivityUiState$Success;->equals(Ljava/lang/Object;)Z -HSPLcom/google/samples/apps/nowinandroid/MainActivityViewModel$special$$inlined$map$1$2$1;->(Lcom/google/samples/apps/nowinandroid/MainActivityViewModel$special$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/MainActivityViewModel$special$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V -HSPLcom/google/samples/apps/nowinandroid/MainActivityViewModel$special$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/MainActivityViewModel$special$$inlined$map$1;->(Lcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$special$$inlined$map$1;)V -HSPLcom/google/samples/apps/nowinandroid/MainActivityViewModel$special$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/MainActivityViewModel;->(Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository;)V -HSPLcom/google/samples/apps/nowinandroid/NiaApplication;->()V -HSPLcom/google/samples/apps/nowinandroid/NiaApplication;->newImageLoader()Lcoil/RealImageLoader; -HSPLcom/google/samples/apps/nowinandroid/NiaApplication;->onCreate()V -HSPLcom/google/samples/apps/nowinandroid/NiaApplication_HiltComponents$ActivityC;->()V -HSPLcom/google/samples/apps/nowinandroid/NiaApplication_HiltComponents$ActivityRetainedC;->()V -HSPLcom/google/samples/apps/nowinandroid/NiaApplication_HiltComponents$SingletonC;->()V -HSPLcom/google/samples/apps/nowinandroid/NiaApplication_HiltComponents$ViewModelC;->()V -HSPLcom/google/samples/apps/nowinandroid/core/data/SyncUtilitiesKt$changeListSync$1;->(Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/core/data/SyncUtilitiesKt$changeListSync$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/SyncUtilitiesKt$changeListSync$2$4;->(ILkotlin/jvm/functions/Function2;)V -HSPLcom/google/samples/apps/nowinandroid/core/data/SyncUtilitiesKt$changeListSync$2$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/SyncUtilitiesKt$changeListSync$2;->(Lcom/google/samples/apps/nowinandroid/core/data/Synchronizer;Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;)V -HSPLcom/google/samples/apps/nowinandroid/core/data/SyncUtilitiesKt$changeListSync$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/SyncUtilitiesKt$changeListSync$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/SyncUtilitiesKt$suspendRunCatching$1;->(Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/core/data/SyncUtilitiesKt$suspendRunCatching$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/SyncUtilitiesKt;->changeListSync(Lcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker;Lkotlin/coroutines/Continuation;Lkotlin/jvm/internal/PropertyReference1Impl;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/SyncUtilitiesKt;->suspendRunCatching(Lcom/google/samples/apps/nowinandroid/core/data/SyncUtilitiesKt$changeListSync$2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$syncWith$2;->()V -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$syncWith$2;->()V -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$syncWith$2;->get(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$syncWith$3;->(Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository;Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$syncWith$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$syncWith$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$syncWith$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$syncWith$4;->()V -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$syncWith$4;->()V -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$syncWith$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$syncWith$5;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao;)V -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$syncWith$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$syncWith$6;->(Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository;Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$syncWith$6;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$syncWith$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$syncWith$6;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao;Lcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao;Lcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource;)V -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository;->syncWith(Lcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository$getTopics$$inlined$map$1$2$1;->(Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository$getTopics$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository$getTopics$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository$getTopics$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository$getTopics$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository$getTopics$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository$getTopics$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository$syncWith$2;->()V -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository$syncWith$2;->()V -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository$syncWith$2;->get(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository$syncWith$3;->(Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository;Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository$syncWith$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository$syncWith$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository$syncWith$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository$syncWith$4;->()V -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository$syncWith$4;->()V -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository$syncWith$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository$syncWith$5;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao;)V -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository$syncWith$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository$syncWith$6;->(Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository;Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository$syncWith$6;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository$syncWith$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository$syncWith$6;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao;Lcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource;)V -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository;->syncWith(Lcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository;->(Lcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource;)V -HSPLcom/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor$isOnline$1$1;->(Landroid/net/ConnectivityManager;Lcom/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor$isOnline$1$callback$1;)V -HSPLcom/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor$isOnline$1$callback$1;->(Lkotlinx/coroutines/channels/ProducerScope;Lcom/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor;Landroid/net/ConnectivityManager;)V -HSPLcom/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor$isOnline$1$callback$1;->onAvailable(Landroid/net/Network;)V -HSPLcom/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor$isOnline$1$callback$1;->onCapabilitiesChanged(Landroid/net/Network;Landroid/net/NetworkCapabilities;)V -HSPLcom/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor$isOnline$1;->(Lcom/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor;Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor$isOnline$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLcom/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor$isOnline$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor$isOnline$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor;->(Landroid/content/Context;)V -HSPLcom/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor;->access$isCurrentlyConnected(Lcom/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor;Landroid/net/ConnectivityManager;)Z -HSPLcom/google/samples/apps/nowinandroid/core/database/DatabaseMigrations$Schema11to12;->()V -HSPLcom/google/samples/apps/nowinandroid/core/database/DatabaseMigrations$Schema2to3;->()V -HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase;->()V -HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_AutoMigration_10_11_Impl;->()V -HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_AutoMigration_11_12_Impl;->()V -HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_AutoMigration_1_2_Impl;->()V -HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_AutoMigration_2_3_Impl;->()V -HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_AutoMigration_3_4_Impl;->()V -HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_AutoMigration_4_5_Impl;->()V -HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_AutoMigration_5_6_Impl;->()V -HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_AutoMigration_6_7_Impl;->()V -HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_AutoMigration_7_8_Impl;->()V -HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_AutoMigration_8_9_Impl;->()V -HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_AutoMigration_9_10_Impl;->()V -HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_Impl$1;->(Lcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_Impl;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_Impl$1;->createAllTables(Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_Impl$1;->onCreate(Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_Impl$1;->onOpen(Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_Impl;->()V -HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_Impl;->createInvalidationTracker()Landroidx/room/InvalidationTracker; -HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_Impl;->createOpenHelper(Landroidx/room/DatabaseConfiguration;)Landroidx/sqlite/db/SupportSQLiteOpenHelper; -HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_Impl;->getAutoMigrations(Ljava/util/LinkedHashMap;)Ljava/util/List; -HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_Impl;->getRequiredAutoMigrationSpecs()Ljava/util/Set; -HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_Impl;->getRequiredTypeConverters()Ljava/util/Map; -HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_Impl;->newsResourceDao()Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao; -HSPLcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_Impl;->topicDao()Lcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao; -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$12;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;Ljava/util/List;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$12;->call()Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$1;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;Landroidx/room/RoomDatabase;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$2;->(Landroidx/room/RoomDatabase;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$2;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Ljava/lang/Object;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$2;->createQuery()Ljava/lang/String; -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$3;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;Landroidx/room/RoomDatabase;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$4;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;Landroidx/room/RoomDatabase;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$4;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Ljava/lang/Object;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$4;->createQuery()Ljava/lang/String; -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$5;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;Landroidx/room/RoomDatabase;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$7;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;Ljava/util/ArrayList;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$7;->call()Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$9;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;Ljava/util/ArrayList;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$9;->call()Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;->(Landroidx/room/RoomDatabase;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;->deleteNewsResources(Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;->insertOrIgnoreTopicCrossRefEntities(Ljava/util/ArrayList;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;->upsertNewsResources(Ljava/util/ArrayList;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl$11;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl;Ljava/util/List;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl$11;->call()Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl$1;->(Landroidx/room/RoomDatabase;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl$1;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Ljava/lang/Object;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl$1;->createQuery()Ljava/lang/String; -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl$2;->(Landroidx/room/RoomDatabase;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl$3;->(Landroidx/room/RoomDatabase;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl$3;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Ljava/lang/Object;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl$3;->createQuery()Ljava/lang/String; -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl$4;->(Landroidx/room/RoomDatabase;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl$5;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl;Ljava/util/ArrayList;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl$5;->call()Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl$7;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl;Ljava/util/ArrayList;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl$7;->call()Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl$9;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl;Landroidx/room/RoomSQLiteQuery;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl$9;->call()Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl;->(Landroidx/room/RoomDatabase;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl;->deleteTopics(Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl;->getTopicEntities()Lkotlinx/coroutines/flow/SafeFlow; -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl;->insertOrIgnoreTopics(Ljava/util/ArrayList;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl;->upsertTopics(Ljava/util/ArrayList;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/database/model/NewsResourceEntity;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlinx/datetime/Instant;Lcom/google/samples/apps/nowinandroid/core/model/data/NewsResourceType;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/model/NewsResourceTopicCrossRef;->(Ljava/lang/String;Ljava/lang/String;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/model/NewsResourceTopicCrossRef;->hashCode()I -HSPLcom/google/samples/apps/nowinandroid/core/database/model/TopicEntity;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V -HSPLcom/google/samples/apps/nowinandroid/core/database/util/InstantConverter;->()V -HSPLcom/google/samples/apps/nowinandroid/core/database/util/InstantConverter;->instantToLong(Lkotlinx/datetime/Instant;)Ljava/lang/Long; -HSPLcom/google/samples/apps/nowinandroid/core/database/util/NewsResourceTypeConverter;->()V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/ChangeListVersions;->(II)V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/DarkThemeConfigProto;->()V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/DarkThemeConfigProto;->(IILjava/lang/String;)V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/DarkThemeConfigProto;->values()[Lcom/google/samples/apps/nowinandroid/core/datastore/DarkThemeConfigProto; -HSPLcom/google/samples/apps/nowinandroid/core/datastore/IntToStringIdsMigration;->()V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/IntToStringIdsMigration;->()V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/IntToStringIdsMigration;->cleanUp()Lkotlin/Unit; -HSPLcom/google/samples/apps/nowinandroid/core/datastore/IntToStringIdsMigration;->migrate(Ljava/lang/Object;)Lcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences; -HSPLcom/google/samples/apps/nowinandroid/core/datastore/IntToStringIdsMigration;->shouldMigrate(Ljava/lang/Object;)Ljava/lang/Boolean; -HSPLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$WhenMappings;->()V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$getChangeListVersions$$inlined$map$1$2$1;->(Lcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$getChangeListVersions$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$getChangeListVersions$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$getChangeListVersions$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$getChangeListVersions$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$getChangeListVersions$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$getChangeListVersions$1;->(Lcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource;Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$special$$inlined$map$1$2$1;->(Lcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$special$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$special$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$special$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$special$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$special$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$special$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$updateChangeListVersion$1;->(Lcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource;Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$updateChangeListVersion$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$updateChangeListVersion$2;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$updateChangeListVersion$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$updateChangeListVersion$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$updateChangeListVersion$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource;->(Landroidx/datastore/core/DataStore;)V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource;->getChangeListVersions(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource;->updateChangeListVersion(Lcom/google/samples/apps/nowinandroid/core/data/SyncUtilitiesKt$changeListSync$2$4;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/datastore/ThemeBrandProto;->()V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/ThemeBrandProto;->(IILjava/lang/String;)V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/ThemeBrandProto;->values()[Lcom/google/samples/apps/nowinandroid/core/datastore/ThemeBrandProto; -HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences$BookmarkedNewsResourceIdsDefaultEntryHolder;->()V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences$Builder;->()V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences$FollowedAuthorIdsDefaultEntryHolder;->()V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences$FollowedTopicIdsDefaultEntryHolder;->()V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->()V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->()V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->access$000()Lcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences; -HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->access$1400(Lcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;)V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->access$1500(Lcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;)V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->access$1900(Lcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;Ljava/util/ArrayList;)V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->access$2000(Lcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;)V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->access$2400(Lcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;Ljava/util/ArrayList;)V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->access$2500(Lcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;)V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->access$400(Lcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;)V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->access$500(Lcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;I)V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->access$900(Lcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;I)V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->dynamicMethod(Lcom/google/protobuf/GeneratedMessageLite$MethodToInvoke;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->getBookmarkedNewsResourceIdsMap()Ljava/util/Map; -HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->getDarkThemeConfig()Lcom/google/samples/apps/nowinandroid/core/datastore/DarkThemeConfigProto; -HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->getDefaultInstance()Lcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences; -HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->getDeprecatedFollowedAuthorIdsList()Ljava/util/List; -HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->getDeprecatedFollowedTopicIdsList()Ljava/util/List; -HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->getDeprecatedIntFollowedAuthorIdsList()Ljava/util/List; -HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->getDeprecatedIntFollowedTopicIdsList()Ljava/util/List; -HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->getFollowedTopicIdsMap()Ljava/util/Map; -HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->getHasDoneIntToStringIdMigration()Z -HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->getNewsResourceChangeListVersion()I -HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->getShouldHideOnboarding()Z -HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->getThemeBrand()Lcom/google/samples/apps/nowinandroid/core/datastore/ThemeBrandProto; -HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->getTopicChangeListVersion()I -HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferencesSerializer;->()V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferencesSerializer;->getDefaultValue()Lcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences; -HSPLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferencesSerializer;->writeTo(Ljava/lang/Object;Landroidx/datastore/core/SingleProcessDataStore$UncloseableOutputStream;)Lkotlin/Unit; -HSPLcom/google/samples/apps/nowinandroid/core/datastore/di/DataStoreModule$providesUserPreferencesDataStore$1;->(Landroid/content/Context;)V -HSPLcom/google/samples/apps/nowinandroid/core/datastore/di/DataStoreModule$providesUserPreferencesDataStore$1;->invoke()Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/BackgroundKt$NiaBackground$1$1;->(ILkotlin/jvm/functions/Function2;)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/BackgroundKt$NiaBackground$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/BackgroundKt$NiaBackground$1;->(ILkotlin/jvm/functions/Function2;)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/BackgroundKt$NiaBackground$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/BackgroundKt$NiaBackground$2;->(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;II)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/BackgroundKt$NiaGradientBackground$1$1$1$1;->(Landroidx/compose/ui/graphics/LinearGradient;Landroidx/compose/ui/graphics/LinearGradient;)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/BackgroundKt$NiaGradientBackground$1$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/BackgroundKt$NiaGradientBackground$1$1$1;->(Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/BackgroundKt$NiaGradientBackground$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/BackgroundKt$NiaGradientBackground$1;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;Lkotlin/jvm/functions/Function2;I)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/BackgroundKt$NiaGradientBackground$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/BackgroundKt;->NiaBackground(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/BackgroundKt;->NiaGradientBackground-eopBjH0(Landroidx/compose/ui/Modifier;JJLkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/ButtonKt$NiaFilledButton$1$1;->(Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/RowScope;II)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/ButtonKt$NiaFilledButton$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/ButtonKt$NiaFilledButton$1;->(Lkotlin/jvm/functions/Function3;I)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/ButtonKt$NiaFilledButton$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/ButtonKt$NiaFilledButton$2;->(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZZLandroidx/compose/material3/ButtonColors;Landroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function3;II)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/ButtonKt;->NiaFilledButton(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZZLandroidx/compose/material3/ButtonColors;Landroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheelKt$NiaLoadingWheel$1$1$1;->(Ljava/util/List;ILkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheelKt$NiaLoadingWheel$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheelKt$NiaLoadingWheel$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheelKt$NiaLoadingWheel$1;->(Ljava/util/List;Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheelKt$NiaLoadingWheel$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheelKt$NiaLoadingWheel$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheelKt$NiaLoadingWheel$2$1;->(Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheelKt$NiaLoadingWheel$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheelKt$NiaLoadingWheel$3$1;->(Ljava/lang/String;)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheelKt$NiaLoadingWheel$3$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheelKt$NiaLoadingWheel$4;->(Ljava/util/ArrayList;Ljava/util/ArrayList;)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheelKt$NiaLoadingWheel$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheelKt$NiaLoadingWheel$5;->(Ljava/lang/String;Landroidx/compose/ui/Modifier;II)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheelKt$NiaLoadingWheel$colorAnimValues$1$1$1;->(JJ)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheelKt$NiaLoadingWheel$colorAnimValues$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheelKt$NiaOverlayLoadingWheel$1;->(ILjava/lang/String;)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheelKt$NiaOverlayLoadingWheel$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheelKt$NiaOverlayLoadingWheel$2;->(Ljava/lang/String;Landroidx/compose/ui/Modifier;II)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheelKt;->NiaLoadingWheel(Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheelKt;->NiaOverlayLoadingWheel(Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/NavigationKt$NiaNavigationBar$1;->(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;II)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/NavigationKt$NiaNavigationBarItem$1;->(Landroidx/compose/foundation/layout/RowScope;ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;ZLkotlin/jvm/functions/Function2;ZII)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/NavigationKt;->NiaNavigationBar(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/NavigationKt;->NiaNavigationBarItem(Landroidx/compose/foundation/layout/RowScope;ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;ZLkotlin/jvm/functions/Function2;ZLandroidx/compose/runtime/Composer;II)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/NiaButtonDefaults;->()V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/NiaButtonDefaults;->buttonContentPadding(ZZZ)Landroidx/compose/foundation/layout/PaddingValuesImpl; -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/NiaNavigationDefaults;->navigationContentColor-WaAFU9c(Landroidx/compose/runtime/Composer;)J -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/NiaNavigationDefaults;->navigationIndicatorColor-WaAFU9c(Landroidx/compose/runtime/Composer;)J -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/NiaNavigationDefaults;->navigationSelectedItemColor-WaAFU9c(Landroidx/compose/runtime/Composer;)J -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/NiaToggleButtonDefaults;->()V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/ToggleButtonKt$NiaToggleButton$1$1;->(Lkotlin/jvm/functions/Function1;Z)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/ToggleButtonKt$NiaToggleButton$2$1;->(Lkotlin/jvm/functions/Function1;Z)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/ToggleButtonKt$NiaToggleButton$3$1;->(ZJJF)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/ToggleButtonKt$NiaToggleButton$3$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/ToggleButtonKt$NiaToggleButton$4$1$1;->(ZLkotlin/jvm/functions/Function2;ILkotlin/jvm/functions/Function2;)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/ToggleButtonKt$NiaToggleButton$4$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/ToggleButtonKt$NiaToggleButton$4;->(FZJJLkotlin/jvm/functions/Function2;ILkotlin/jvm/functions/Function2;)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/ToggleButtonKt$NiaToggleButton$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/ToggleButtonKt$NiaToggleButton$5;->(ZLkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;FFJJJJIII)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/ToggleButtonKt;->NiaToggleButton-QtvoJqo(ZLkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;FFJJJJLandroidx/compose/runtime/Composer;III)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/TopAppBarKt$NiaTopAppBar$8;->(II)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/TopAppBarKt$NiaTopAppBar$8;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/TopAppBarKt$NiaTopAppBar$9$1;->(Landroidx/compose/ui/graphics/vector/ImageVector;Ljava/lang/String;I)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/TopAppBarKt$NiaTopAppBar$9$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/TopAppBarKt$NiaTopAppBar$9;->(Lkotlin/jvm/functions/Function0;ILandroidx/compose/ui/graphics/vector/ImageVector;Ljava/lang/String;)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/TopAppBarKt$NiaTopAppBar$9;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/component/TopAppBarKt;->NiaTopAppBar(ILandroidx/compose/ui/graphics/vector/ImageVector;Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/material3/TopAppBarColors;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/icon/Icon$DrawableResourceIcon;->(I)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/icon/Icon$ImageVectorIcon;->(Landroidx/compose/ui/graphics/vector/ImageVector;)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/icon/Icon;->()V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/icon/NiaIcons;->()V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/theme/BackgroundKt$LocalBackgroundTheme$1;->()V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/theme/BackgroundKt$LocalBackgroundTheme$1;->()V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/theme/BackgroundKt;->()V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/theme/BackgroundTheme;->(JF)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/theme/BackgroundTheme;->(JI)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/theme/ColorKt;->()V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/theme/GradientColors;->()V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/theme/GradientColors;->(JJJJ)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/theme/GradientKt$LocalGradientColors$1;->()V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/theme/GradientKt$LocalGradientColors$1;->()V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/theme/GradientKt;->()V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/theme/ThemeKt$NiaTheme$2;->(Landroidx/compose/material3/ColorScheme;Lkotlin/jvm/functions/Function2;I)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/theme/ThemeKt$NiaTheme$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/theme/ThemeKt$NiaTheme$3;->(ZZZLkotlin/jvm/functions/Function2;II)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/theme/ThemeKt;->()V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/theme/ThemeKt;->NiaTheme(ZZLkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/theme/ThemeKt;->NiaTheme(ZZZLkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V -HSPLcom/google/samples/apps/nowinandroid/core/designsystem/theme/TypeKt;->()V -HSPLcom/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCase$invoke$1$WhenMappings;->()V -HSPLcom/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCase$invoke$1;->(ILkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCase$invoke$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCase$invoke$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCase;->(Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository;Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository;)V -HSPLcom/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCase;->invoke$enumunboxing$(I)Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$unsafeFlow$1; -HSPLcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCase$special$$inlined$map$1;->(Lcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$special$$inlined$map$1;)V -HSPLcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCase;->(Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository;Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository;)V -HSPLcom/google/samples/apps/nowinandroid/core/domain/model/FollowableTopic;->(Lcom/google/samples/apps/nowinandroid/core/model/data/Topic;Z)V -HSPLcom/google/samples/apps/nowinandroid/core/domain/model/FollowableTopic;->equals(Ljava/lang/Object;)Z -HSPLcom/google/samples/apps/nowinandroid/core/model/data/DarkThemeConfig;->()V -HSPLcom/google/samples/apps/nowinandroid/core/model/data/DarkThemeConfig;->(ILjava/lang/String;)V -HSPLcom/google/samples/apps/nowinandroid/core/model/data/NewsResourceType;->()V -HSPLcom/google/samples/apps/nowinandroid/core/model/data/NewsResourceType;->(Ljava/lang/String;ILjava/lang/String;)V -HSPLcom/google/samples/apps/nowinandroid/core/model/data/NewsResourceType;->values()[Lcom/google/samples/apps/nowinandroid/core/model/data/NewsResourceType; -HSPLcom/google/samples/apps/nowinandroid/core/model/data/NewsResourceTypeKt;->asNewsResourceType(Ljava/lang/String;)Lcom/google/samples/apps/nowinandroid/core/model/data/NewsResourceType; -HSPLcom/google/samples/apps/nowinandroid/core/model/data/ThemeBrand;->()V -HSPLcom/google/samples/apps/nowinandroid/core/model/data/ThemeBrand;->(ILjava/lang/String;)V -HSPLcom/google/samples/apps/nowinandroid/core/model/data/Topic;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V -HSPLcom/google/samples/apps/nowinandroid/core/model/data/Topic;->equals(Ljava/lang/Object;)Z -HSPLcom/google/samples/apps/nowinandroid/core/model/data/UserData;->(Ljava/util/Set;Ljava/util/Set;Lcom/google/samples/apps/nowinandroid/core/model/data/ThemeBrand;Lcom/google/samples/apps/nowinandroid/core/model/data/DarkThemeConfig;Z)V -HSPLcom/google/samples/apps/nowinandroid/core/model/data/UserData;->equals(Ljava/lang/Object;)Z -HSPLcom/google/samples/apps/nowinandroid/core/network/di/NetworkModule$providesFakeAssetManager$1;->(Landroid/content/res/AssetManager;)V -HSPLcom/google/samples/apps/nowinandroid/core/network/di/NetworkModule$providesFakeAssetManager$1;->open(Ljava/lang/String;)Ljava/io/InputStream; -HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getNewsResourceChangeList$1;->(Lcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource;Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getNewsResourceChangeList$2;->()V -HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getNewsResourceChangeList$2;->()V -HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getNewsResourceChangeList$2;->get(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getNewsResources$2;->(Lcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource;Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getNewsResources$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getNewsResources$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getNewsResources$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getTopicChangeList$1;->(Lcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource;Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getTopicChangeList$2;->()V -HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getTopicChangeList$2;->()V -HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getTopicChangeList$2;->get(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getTopics$2;->(Lcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource;Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getTopics$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getTopics$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getTopics$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource;->(Lkotlinx/coroutines/scheduling/DefaultIoScheduler;Lkotlinx/serialization/json/Json;Lcom/google/samples/apps/nowinandroid/core/network/fake/FakeAssetManager;)V -HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource;->getNewsResourceChangeList(Lkotlin/coroutines/Continuation;)Ljava/io/Serializable; -HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource;->getNewsResources(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource;->getTopicChangeList(Lkotlin/coroutines/Continuation;)Ljava/io/Serializable; -HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource;->getTopics(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSourceKt;->access$mapToChangeList(Ljava/util/List;Lkotlin/jvm/internal/PropertyReference1Impl;)Ljava/util/ArrayList; -HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkChangeList$Companion;->()V -HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkChangeList;->()V -HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkChangeList;->(Ljava/lang/String;I)V -HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkNewsResource$$serializer;->()V -HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkNewsResource$$serializer;->()V -HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkNewsResource$$serializer;->childSerializers()[Lkotlinx/serialization/KSerializer; -HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkNewsResource$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; -HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkNewsResource$$serializer;->typeParametersSerializers()V -HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkNewsResource$Companion;->()V -HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkNewsResource$Companion;->serializer()Lkotlinx/serialization/KSerializer; -HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkNewsResource;->()V -HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkNewsResource;->(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlinx/datetime/Instant;Lcom/google/samples/apps/nowinandroid/core/model/data/NewsResourceType;Ljava/util/List;)V -HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkTopic$$serializer;->()V -HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkTopic$$serializer;->()V -HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkTopic$$serializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkTopic$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; -HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkTopic$Companion;->()V -HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkTopic$Companion;->serializer()Lkotlinx/serialization/KSerializer; -HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkTopic;->()V -HSPLcom/google/samples/apps/nowinandroid/core/network/model/NetworkTopic;->(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V -HSPLcom/google/samples/apps/nowinandroid/core/network/model/util/InstantSerializer;->()V -HSPLcom/google/samples/apps/nowinandroid/core/network/model/util/InstantSerializer;->()V -HSPLcom/google/samples/apps/nowinandroid/core/network/model/util/InstantSerializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/network/model/util/InstantSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; -HSPLcom/google/samples/apps/nowinandroid/core/network/model/util/NewsResourceTypeSerializer;->()V -HSPLcom/google/samples/apps/nowinandroid/core/network/model/util/NewsResourceTypeSerializer;->()V -HSPLcom/google/samples/apps/nowinandroid/core/network/model/util/NewsResourceTypeSerializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/network/model/util/NewsResourceTypeSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; -HSPLcom/google/samples/apps/nowinandroid/core/ui/JankStatsExtensionsKt$TrackDisposableJank$1;->(Lkotlin/jvm/functions/Function2;Landroidx/metrics/performance/PerformanceMetricsState$Holder;)V -HSPLcom/google/samples/apps/nowinandroid/core/ui/JankStatsExtensionsKt$TrackDisposableJank$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/ui/JankStatsExtensionsKt$TrackJank$1;->(Lkotlin/jvm/functions/Function3;Landroidx/metrics/performance/PerformanceMetricsState$Holder;Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/core/ui/JankStatsExtensionsKt$TrackJank$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLcom/google/samples/apps/nowinandroid/core/ui/JankStatsExtensionsKt$TrackJank$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/ui/JankStatsExtensionsKt$TrackScrollJank$1$1;->(Landroidx/compose/foundation/gestures/ScrollableState;)V -HSPLcom/google/samples/apps/nowinandroid/core/ui/JankStatsExtensionsKt$TrackScrollJank$1$1;->invoke()Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/ui/JankStatsExtensionsKt$TrackScrollJank$1$2;->(Landroidx/metrics/performance/PerformanceMetricsState$Holder;Ljava/lang/String;)V -HSPLcom/google/samples/apps/nowinandroid/core/ui/JankStatsExtensionsKt$TrackScrollJank$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/ui/JankStatsExtensionsKt$TrackScrollJank$1;->(Landroidx/compose/foundation/gestures/ScrollableState;Ljava/lang/String;Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/core/ui/JankStatsExtensionsKt$TrackScrollJank$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/ui/JankStatsExtensionsKt$TrackScrollJank$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/core/ui/JankStatsExtensionsKt;->TrackDisposableJank([Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V -HSPLcom/google/samples/apps/nowinandroid/core/ui/JankStatsExtensionsKt;->TrackJank([Ljava/lang/Object;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V -HSPLcom/google/samples/apps/nowinandroid/core/ui/JankStatsExtensionsKt;->TrackScrollJank(Landroidx/compose/foundation/gestures/ScrollableState;Ljava/lang/String;Landroidx/compose/runtime/Composer;I)V -HSPLcom/google/samples/apps/nowinandroid/core/ui/JankStatsExtensionsKt;->rememberMetricsStateHolder(Landroidx/compose/runtime/Composer;)Landroidx/metrics/performance/PerformanceMetricsState$Holder; -HSPLcom/google/samples/apps/nowinandroid/core/ui/NewsFeedKt$newsFeed$$inlined$items$default$2;->(Ljava/util/List;)V -HSPLcom/google/samples/apps/nowinandroid/core/ui/NewsFeedKt$newsFeed$$inlined$items$default$4;->(Ljava/util/List;)V -HSPLcom/google/samples/apps/nowinandroid/core/ui/NewsFeedKt$newsFeed$$inlined$items$default$5;->(Ljava/util/List;Lkotlin/jvm/functions/Function2;)V -HSPLcom/google/samples/apps/nowinandroid/core/ui/NewsFeedKt;->newsFeed(Landroidx/compose/foundation/lazy/grid/LazyGridScope;Lcom/google/samples/apps/nowinandroid/core/ui/NewsFeedUiState;Lkotlin/jvm/functions/Function2;)V -HSPLcom/google/samples/apps/nowinandroid/core/ui/NewsFeedUiState$Loading;->()V -HSPLcom/google/samples/apps/nowinandroid/core/ui/NewsFeedUiState$Loading;->()V -HSPLcom/google/samples/apps/nowinandroid/core/ui/NewsFeedUiState$Success;->(Ljava/util/List;)V -HSPLcom/google/samples/apps/nowinandroid/core/ui/NewsFeedUiState$Success;->equals(Ljava/lang/Object;)Z -HSPLcom/google/samples/apps/nowinandroid/di/JankStatsModule$providesOnFrameListener$1;->()V -HSPLcom/google/samples/apps/nowinandroid/di/JankStatsModule$providesOnFrameListener$1;->()V -HSPLcom/google/samples/apps/nowinandroid/di/JankStatsModule$providesOnFrameListener$1;->onFrame(Landroidx/metrics/performance/FrameData;)V -HSPLcom/google/samples/apps/nowinandroid/feature/bookmarks/navigation/ComposableSingletons$BookmarksNavigationKt$lambda-1$1;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/bookmarks/navigation/ComposableSingletons$BookmarksNavigationKt$lambda-1$1;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/bookmarks/navigation/ComposableSingletons$BookmarksNavigationKt;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-1$1;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-1$1;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-10$1;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-10$1;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-11$1;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-11$1;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-12$1;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-12$1;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-13$1;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-13$1;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-2$1;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-2$1;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-3$1;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-3$1;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-4$1;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-4$1;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-5$1;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-5$1;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-6$1;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-6$1;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-7$1;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-7$1;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-8$1;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-8$1;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-9$1;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-9$1;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouRoute$1;->(Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel;)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouRoute$2;->(Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel;)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouRoute$3;->(Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel;)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouRoute$4;->(Landroidx/compose/ui/Modifier;Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel;II)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouRoute$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$1$invokeSuspend$$inlined$doOnPreDraw$1;->(Landroid/view/View;Landroid/app/Activity;)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$1$invokeSuspend$$inlined$doOnPreDraw$1;->run()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$1;->(Landroid/view/View;Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$2$1$1;->(Landroidx/compose/ui/layout/Placeable;)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$2$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$2$1;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$2$1;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$2$2;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$2$2;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$2$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$2;->(Lcom/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Lcom/google/samples/apps/nowinandroid/core/ui/NewsFeedUiState;Lkotlin/jvm/functions/Function2;)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$3;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$3;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$4;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$4;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$SingleTopicButton$1$1$1;->(Lkotlin/jvm/functions/Function2;Ljava/lang/String;Z)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$SingleTopicButton$1$2$1$1$1;->(Ljava/lang/String;Lkotlin/jvm/functions/Function2;)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$SingleTopicButton$1$2$1$2;->(ILjava/lang/String;)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$SingleTopicButton$1$2$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$SingleTopicButton$1$2$1$3;->(ILjava/lang/String;)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$SingleTopicButton$1$2;->(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function2;Z)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$SingleTopicButton$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$SingleTopicButton$2;->(ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function2;Z)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$TopicIcon$1;->(Ljava/lang/String;Landroidx/compose/ui/Modifier;II)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$TopicSelection$1$2$invoke$$inlined$items$default$4;->(Ljava/util/List;)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$TopicSelection$1$2$invoke$$inlined$items$default$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$TopicSelection$1$2$invoke$$inlined$items$default$5;->(Ljava/util/List;Lkotlin/jvm/functions/Function2;I)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$TopicSelection$1$2$invoke$$inlined$items$default$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$TopicSelection$1$2;->(Lcom/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState$Shown;Lkotlin/jvm/functions/Function2;I)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$TopicSelection$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$onboarding$1;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$onboarding$1;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$onboarding$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$onboarding$2;->(Landroidx/compose/ui/Modifier;Lcom/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$onboarding$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt;->ForYouRoute(Landroidx/compose/ui/Modifier;Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel;Landroidx/compose/runtime/Composer;II)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt;->ForYouScreen(ZLcom/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState;Lcom/google/samples/apps/nowinandroid/core/ui/NewsFeedUiState;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt;->TopicIcon(Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt;->access$SingleTopicButton(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt;->access$TopicSelection(Lcom/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState$Shown;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$onboardingUiState$1;->(Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$onboardingUiState$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$onboardingUiState$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$special$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$special$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$special$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$special$$inlined$map$1$2$1;->(Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$special$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$special$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$special$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$special$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$special$$inlined$map$1;->(Lcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$special$$inlined$map$1;)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$special$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$special$$inlined$map$2$2$1;->(Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$special$$inlined$map$2$2;Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$special$$inlined$map$2$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel;)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$special$$inlined$map$2$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$special$$inlined$map$2;->(Lcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$special$$inlined$map$1;Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel;)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$special$$inlined$map$2;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel;->(Lcom/google/samples/apps/nowinandroid/sync/status/WorkManagerSyncStatusMonitor;Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository;Lcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCase;Lcom/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCase;)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState$LoadFailed;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState$LoadFailed;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState$Loading;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState$Loading;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState$NotShown;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState$NotShown;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState$Shown;->(Ljava/util/List;)V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState$Shown;->equals(Ljava/lang/Object;)Z -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/navigation/ComposableSingletons$ForYouNavigationKt$lambda-1$1;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/navigation/ComposableSingletons$ForYouNavigationKt$lambda-1$1;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/navigation/ComposableSingletons$ForYouNavigationKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/feature/foryou/navigation/ComposableSingletons$ForYouNavigationKt;->()V -HSPLcom/google/samples/apps/nowinandroid/feature/interests/navigation/InterestsNavigationKt$interestsGraph$1$1;->(Lcom/google/samples/apps/nowinandroid/navigation/NiaNavHostKt$NiaNavHost$1$1;)V -HSPLcom/google/samples/apps/nowinandroid/feature/topic/navigation/TopicNavigationKt$topicScreen$2;->(Lkotlin/jvm/functions/Function0;)V -HSPLcom/google/samples/apps/nowinandroid/navigation/NiaNavHostKt$NiaNavHost$1$1;->(Landroidx/navigation/NavHostController;)V -HSPLcom/google/samples/apps/nowinandroid/navigation/NiaNavHostKt$NiaNavHost$1$2;->(Lkotlin/jvm/functions/Function0;)V -HSPLcom/google/samples/apps/nowinandroid/navigation/NiaNavHostKt$NiaNavHost$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/navigation/NiaNavHostKt$NiaNavHost$1;->(Landroidx/navigation/NavHostController;Lkotlin/jvm/functions/Function0;)V -HSPLcom/google/samples/apps/nowinandroid/navigation/NiaNavHostKt$NiaNavHost$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/navigation/NiaNavHostKt;->NiaNavHost(Landroidx/navigation/NavHostController;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;Ljava/lang/String;Landroidx/compose/runtime/Composer;II)V -HSPLcom/google/samples/apps/nowinandroid/navigation/TopLevelDestination;->()V -HSPLcom/google/samples/apps/nowinandroid/navigation/TopLevelDestination;->(Ljava/lang/String;ILcom/google/samples/apps/nowinandroid/core/designsystem/icon/Icon;Lcom/google/samples/apps/nowinandroid/core/designsystem/icon/Icon;II)V -HSPLcom/google/samples/apps/nowinandroid/navigation/TopLevelDestination;->values()[Lcom/google/samples/apps/nowinandroid/navigation/TopLevelDestination; -HSPLcom/google/samples/apps/nowinandroid/sync/initializers/Sync;->()V -HSPLcom/google/samples/apps/nowinandroid/sync/initializers/Sync;->()V -HSPLcom/google/samples/apps/nowinandroid/sync/initializers/SyncInitializer;->()V -HSPLcom/google/samples/apps/nowinandroid/sync/initializers/SyncInitializer;->create(Landroid/content/Context;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/sync/initializers/SyncInitializer;->dependencies()Ljava/util/List; -HSPLcom/google/samples/apps/nowinandroid/sync/status/WorkManagerSyncStatusMonitor$$ExternalSyntheticLambda0;->()V -HSPLcom/google/samples/apps/nowinandroid/sync/status/WorkManagerSyncStatusMonitor$$ExternalSyntheticLambda0;->apply(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/sync/status/WorkManagerSyncStatusMonitor$isSyncing$1;->()V -HSPLcom/google/samples/apps/nowinandroid/sync/status/WorkManagerSyncStatusMonitor$isSyncing$1;->()V -HSPLcom/google/samples/apps/nowinandroid/sync/status/WorkManagerSyncStatusMonitor$isSyncing$1;->get(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/sync/status/WorkManagerSyncStatusMonitor;->(Landroid/content/Context;)V -HSPLcom/google/samples/apps/nowinandroid/sync/workers/DelegatingWorker;->(Landroid/content/Context;Landroidx/work/WorkerParameters;)V -HSPLcom/google/samples/apps/nowinandroid/sync/workers/DelegatingWorker;->doWork(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker$doWork$1;->(Lcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker;Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker$doWork$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker$doWork$2$1$syncedSuccessfully$1;->(Lcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker;Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker$doWork$2$1$syncedSuccessfully$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker$doWork$2$1$syncedSuccessfully$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker$doWork$2$1$syncedSuccessfully$2;->(Lcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker;Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker$doWork$2$1$syncedSuccessfully$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker$doWork$2$1$syncedSuccessfully$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker$doWork$2;->(Lcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker;Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker$doWork$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker$doWork$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker;->(Landroid/content/Context;Landroidx/work/WorkerParameters;Lcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource;Lcom/google/samples/apps/nowinandroid/core/data/repository/TopicsRepository;Lcom/google/samples/apps/nowinandroid/core/data/repository/NewsRepository;Lkotlinx/coroutines/CoroutineDispatcher;)V -HSPLcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker;->doWork(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/ui/ComposableSingletons$NiaAppKt$lambda-1$1;->()V -HSPLcom/google/samples/apps/nowinandroid/ui/ComposableSingletons$NiaAppKt$lambda-1$1;->()V -HSPLcom/google/samples/apps/nowinandroid/ui/ComposableSingletons$NiaAppKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/ui/ComposableSingletons$NiaAppKt$lambda-2$1;->()V -HSPLcom/google/samples/apps/nowinandroid/ui/ComposableSingletons$NiaAppKt$lambda-2$1;->()V -HSPLcom/google/samples/apps/nowinandroid/ui/ComposableSingletons$NiaAppKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/ui/ComposableSingletons$NiaAppKt;->()V -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaApp$1$1;->()V -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaApp$1$1;->()V -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaApp$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaApp$1$2$1$1;->(Lcom/google/samples/apps/nowinandroid/ui/NiaAppState;)V -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaApp$1$2;->(Lcom/google/samples/apps/nowinandroid/ui/NiaAppState;I)V -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaApp$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaApp$1$3$1;->(Lcom/google/samples/apps/nowinandroid/ui/NiaAppState;)V -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaApp$1$3;->(Lcom/google/samples/apps/nowinandroid/ui/NiaAppState;I)V -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaApp$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaApp$1$4;->(Landroidx/compose/material3/SnackbarHostState;)V -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaApp$1$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaApp$1$5$1$1;->(Landroidx/compose/material3/SnackbarHostState;Ljava/lang/String;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaApp$1$5$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaApp$1$5$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaApp$1$5$3$2$1;->(Lcom/google/samples/apps/nowinandroid/ui/NiaAppState;)V -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaApp$1$5;->(Lcom/google/samples/apps/nowinandroid/ui/NiaAppState;Landroidx/compose/material3/SnackbarHostState;I)V -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaApp$1$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaApp$1;->(Lcom/google/samples/apps/nowinandroid/ui/NiaAppState;I)V -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaApp$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaApp$2;->(Landroidx/compose/material3/windowsizeclass/WindowSizeClass;Lcom/google/samples/apps/nowinandroid/core/data/util/NetworkMonitor;Lcom/google/samples/apps/nowinandroid/ui/NiaAppState;II)V -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaBottomBar$1$1$1$1;->(Lkotlin/jvm/functions/Function1;Lcom/google/samples/apps/nowinandroid/navigation/TopLevelDestination;)V -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaBottomBar$1$1$2;->(ZLcom/google/samples/apps/nowinandroid/navigation/TopLevelDestination;)V -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaBottomBar$1$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaBottomBar$1$1$3;->(Lcom/google/samples/apps/nowinandroid/navigation/TopLevelDestination;)V -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaBottomBar$1$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaBottomBar$1;->(Ljava/util/List;Landroidx/navigation/NavDestination;Lkotlin/jvm/functions/Function1;I)V -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaBottomBar$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$WhenMappings;->()V -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt;->NiaApp(Landroidx/compose/material3/windowsizeclass/WindowSizeClass;Lcom/google/samples/apps/nowinandroid/core/data/util/NetworkMonitor;Lcom/google/samples/apps/nowinandroid/ui/NiaAppState;Landroidx/compose/runtime/Composer;II)V -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt;->access$NiaBottomBar(Ljava/util/List;Lkotlin/jvm/functions/Function1;Landroidx/navigation/NavDestination;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppKt;->access$isTopLevelDestinationInHierarchy(Landroidx/navigation/NavDestination;Lcom/google/samples/apps/nowinandroid/navigation/TopLevelDestination;)Z -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppState$special$$inlined$map$1$2$1;->(Lcom/google/samples/apps/nowinandroid/ui/NiaAppState$special$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppState$special$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppState$special$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppState$special$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppState$special$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppState;->(Landroidx/navigation/NavHostController;Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/material3/windowsizeclass/WindowSizeClass;Lcom/google/samples/apps/nowinandroid/core/data/util/NetworkMonitor;)V -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppState;->getCurrentDestination(Landroidx/compose/runtime/Composer;I)Landroidx/navigation/NavDestination; -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppState;->getCurrentTopLevelDestination(Landroidx/compose/runtime/Composer;I)Lcom/google/samples/apps/nowinandroid/navigation/TopLevelDestination; -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppStateKt$NavigationTrackingSideEffect$1$invoke$$inlined$onDispose$1;->(Landroidx/navigation/NavHostController;Lcom/google/samples/apps/nowinandroid/ui/NiaAppStateKt$NavigationTrackingSideEffect$1$listener$1;)V -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppStateKt$NavigationTrackingSideEffect$1$listener$1;->(Landroidx/metrics/performance/PerformanceMetricsState$Holder;)V -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppStateKt$NavigationTrackingSideEffect$1$listener$1;->onDestinationChanged(Landroidx/navigation/NavController;Landroidx/navigation/NavDestination;)V -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppStateKt$NavigationTrackingSideEffect$1;->(Landroidx/navigation/NavHostController;)V -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppStateKt$NavigationTrackingSideEffect$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLcom/google/samples/apps/nowinandroid/ui/NiaAppStateKt;->NavigationTrackingSideEffect(Landroidx/navigation/NavHostController;Landroidx/compose/runtime/Composer;I)V -HSPLdagger/hilt/EntryPoints;->get(Ljava/lang/Class;Ljava/lang/Object;)Ljava/lang/Object; -HSPLdagger/hilt/android/EntryPointAccessors;->fromApplication(Landroid/content/Context;Ljava/lang/Class;)Ljava/lang/Object; -HSPLdagger/hilt/android/internal/lifecycle/DefaultViewModelFactories$InternalFactoryFactory;->(Ljava/util/Set;Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ViewModelCBuilder;)V -HSPLdagger/hilt/android/internal/lifecycle/HiltViewModelFactory$1$$ExternalSyntheticLambda0;->(Ldagger/hilt/android/internal/lifecycle/RetainedLifecycleImpl;)V -HSPLdagger/hilt/android/internal/lifecycle/HiltViewModelFactory$1;->(Ldagger/hilt/android/internal/builders/ViewModelComponentBuilder;)V -HSPLdagger/hilt/android/internal/lifecycle/HiltViewModelFactory$1;->create(Ljava/lang/String;Ljava/lang/Class;Landroidx/lifecycle/SavedStateHandle;)Landroidx/lifecycle/ViewModel; -HSPLdagger/hilt/android/internal/lifecycle/HiltViewModelFactory;->(Ljava/util/Set;Landroidx/lifecycle/ViewModelProvider$Factory;Ldagger/hilt/android/internal/builders/ViewModelComponentBuilder;)V -HSPLdagger/hilt/android/internal/lifecycle/HiltViewModelFactory;->create(Ljava/lang/Class;Landroidx/lifecycle/viewmodel/MutableCreationExtras;)Landroidx/lifecycle/ViewModel; -HSPLdagger/hilt/android/internal/lifecycle/HiltViewModelFactory;->createInternal(Landroid/app/Activity;Landroidx/lifecycle/SavedStateViewModelFactory;)Ldagger/hilt/android/internal/lifecycle/HiltViewModelFactory; -HSPLdagger/hilt/android/internal/lifecycle/RetainedLifecycleImpl;->()V -HSPLdagger/hilt/android/internal/managers/ActivityComponentManager;->(Landroid/app/Activity;)V -HSPLdagger/hilt/android/internal/managers/ActivityComponentManager;->createComponent()Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ActivityCImpl; -HSPLdagger/hilt/android/internal/managers/ActivityComponentManager;->generatedComponent()Ljava/lang/Object; -HSPLdagger/hilt/android/internal/managers/ActivityRetainedComponentManager$1;->(Landroid/content/Context;)V -HSPLdagger/hilt/android/internal/managers/ActivityRetainedComponentManager$1;->create(Ljava/lang/Class;)Landroidx/lifecycle/ViewModel; -HSPLdagger/hilt/android/internal/managers/ActivityRetainedComponentManager$ActivityRetainedComponentViewModel;->(Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ActivityRetainedCImpl;)V -HSPLdagger/hilt/android/internal/managers/ActivityRetainedComponentManager;->(Landroidx/activity/ComponentActivity;)V -HSPLdagger/hilt/android/internal/managers/ActivityRetainedComponentManager;->generatedComponent()Ljava/lang/Object; -HSPLdagger/hilt/android/internal/managers/ApplicationComponentManager;->(Lcom/google/samples/apps/nowinandroid/Hilt_NiaApplication$1;)V -HSPLdagger/hilt/android/internal/managers/ApplicationComponentManager;->generatedComponent()Ljava/lang/Object; -HSPLdagger/hilt/android/internal/modules/ApplicationContextModule;->(Lcom/google/samples/apps/nowinandroid/Hilt_NiaApplication;)V -HSPLdagger/internal/DoubleCheck;->()V -HSPLdagger/internal/DoubleCheck;->(Ljavax/inject/Provider;)V -HSPLdagger/internal/DoubleCheck;->get()Ljava/lang/Object; -HSPLdagger/internal/DoubleCheck;->provider(Ljavax/inject/Provider;)Ljavax/inject/Provider; -HSPLdagger/internal/DoubleCheck;->reentrantCheck(Ljava/lang/Object;Ljava/lang/Object;)V -HSPLdagger/internal/MapBuilder;->()V -HSPLdagger/internal/Preconditions;->checkNotNullFromProvides(Ljava/lang/Object;)V -HSPLdagger/internal/SingleCheck;->()V -HSPLdagger/internal/SingleCheck;->(Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$SingletonCImpl$SwitchingProvider;)V -HSPLdagger/internal/SingleCheck;->get()Ljava/lang/Object; -HSPLj$/lang/a;->a(JJ)J -HSPLj$/lang/a;->c(JJ)J -HSPLj$/lang/a;->e(JJ)J -HSPLj$/lang/a;->g([Ljava/lang/Object;)Ljava/util/List; -HSPLj$/sun/misc/a;->a(Lsun/misc/Unsafe;Ljava/lang/Object;JLjava/lang/Object;)Z -HSPLj$/sun/misc/b;->()V -HSPLj$/sun/misc/b;->(Lsun/misc/Unsafe;)V -HSPLj$/sun/misc/b;->a(Ljava/lang/Class;)I -HSPLj$/sun/misc/b;->b(Ljava/lang/Class;)I -HSPLj$/sun/misc/b;->c(Ljava/lang/Object;JII)Z -HSPLj$/sun/misc/b;->d(Ljava/lang/Object;JJJ)Z -HSPLj$/sun/misc/b;->e(Ljava/lang/Object;JLjava/lang/Object;)Z -HSPLj$/sun/misc/b;->g(Ljava/lang/Object;J)Ljava/lang/Object; -HSPLj$/sun/misc/b;->h()Lj$/sun/misc/b; -HSPLj$/sun/misc/b;->i()Ljava/lang/reflect/Field; -HSPLj$/sun/misc/b;->j(Ljava/lang/Class;Ljava/lang/String;)J -HSPLj$/sun/misc/b;->k(Ljava/lang/reflect/Field;)J -HSPLj$/time/Instant;->()V -HSPLj$/time/Instant;->(JI)V -HSPLj$/time/Instant;->ofEpochSecond(JJ)Lj$/time/Instant; -HSPLj$/time/Instant;->toEpochMilli()J -HSPLj$/time/Instant;->w(JI)Lj$/time/Instant; -HSPLj$/time/LocalDateTime;->()V -HSPLj$/time/LocalDateTime;->(Lj$/time/h;Lj$/time/l;)V -HSPLj$/time/LocalDateTime;->H(Lj$/time/ZoneId;)Lj$/time/chrono/ChronoZonedDateTime; -HSPLj$/time/LocalDateTime;->atZone(Lj$/time/ZoneId;)Lj$/time/ZonedDateTime; -HSPLj$/time/LocalDateTime;->b0(Lj$/time/h;Lj$/time/l;)Lj$/time/LocalDateTime; -HSPLj$/time/LocalDateTime;->h0()Lj$/time/h; -HSPLj$/time/LocalDateTime;->j(Lj$/time/temporal/q;)Z -HSPLj$/time/LocalDateTime;->l()Lj$/time/l; -HSPLj$/time/LocalDateTime;->n()Lj$/time/chrono/b; -HSPLj$/time/OffsetDateTime;->()V -HSPLj$/time/OffsetDateTime;->(Lj$/time/LocalDateTime;Lj$/time/ZoneOffset;)V -HSPLj$/time/OffsetDateTime;->B(Lj$/time/LocalDateTime;Lj$/time/ZoneOffset;)Lj$/time/OffsetDateTime; -HSPLj$/time/OffsetDateTime;->parse(Ljava/lang/CharSequence;)Lj$/time/OffsetDateTime; -HSPLj$/time/OffsetDateTime;->toInstant()Lj$/time/Instant; -HSPLj$/time/OffsetDateTime;->w(Lj$/time/temporal/TemporalAccessor;)Lj$/time/OffsetDateTime; -HSPLj$/time/ZoneId;->()V -HSPLj$/time/ZoneId;->()V -HSPLj$/time/ZoneOffset;->()V -HSPLj$/time/ZoneOffset;->(I)V -HSPLj$/time/ZoneOffset;->W(Lj$/time/temporal/TemporalAccessor;)Lj$/time/ZoneOffset; -HSPLj$/time/ZoneOffset;->Z()I -HSPLj$/time/ZoneOffset;->b0(I)Lj$/time/ZoneOffset; -HSPLj$/time/ZonedDateTime;->(Lj$/time/LocalDateTime;Lj$/time/ZoneId;Lj$/time/ZoneOffset;)V -HSPLj$/time/ZonedDateTime;->K(Lj$/time/LocalDateTime;Lj$/time/ZoneId;Lj$/time/ZoneOffset;)Lj$/time/ZonedDateTime; -HSPLj$/time/ZonedDateTime;->l()Lj$/time/l; -HSPLj$/time/ZonedDateTime;->n()Lj$/time/chrono/b; -HSPLj$/time/ZonedDateTime;->o()Lj$/time/ZoneOffset; -HSPLj$/time/chrono/ChronoLocalDateTime;->v(Lj$/time/ZoneOffset;)J -HSPLj$/time/chrono/ChronoZonedDateTime;->Y()J -HSPLj$/time/chrono/a;->()V -HSPLj$/time/chrono/a;->()V -HSPLj$/time/chrono/a;->D(Ljava/util/HashMap;Lj$/time/format/E;)Lj$/time/chrono/b; -HSPLj$/time/chrono/a;->equals(Ljava/lang/Object;)Z -HSPLj$/time/chrono/b;->j(Lj$/time/temporal/q;)Z -HSPLj$/time/chrono/r;->()V -HSPLj$/time/chrono/r;->()V -HSPLj$/time/chrono/r;->D(Ljava/util/HashMap;Lj$/time/format/E;)Lj$/time/chrono/b; -HSPLj$/time/chrono/r;->W(Ljava/util/HashMap;Lj$/time/format/E;)V -HSPLj$/time/chrono/r;->X(J)Z -HSPLj$/time/chrono/r;->a0(Ljava/util/HashMap;Lj$/time/format/E;)Lj$/time/chrono/b; -HSPLj$/time/e;->()V -HSPLj$/time/e;->(JI)V -HSPLj$/time/e;->K(J)Lj$/time/e; -HSPLj$/time/e;->R(JJ)Lj$/time/e; -HSPLj$/time/e;->w(JI)Lj$/time/e; -HSPLj$/time/format/A;->(Ljava/util/Map;)V -HSPLj$/time/format/B;->()V -HSPLj$/time/format/B;->()V -HSPLj$/time/format/B;->a()Ljava/util/Comparator; -HSPLj$/time/format/C;->()V -HSPLj$/time/format/C;->()V -HSPLj$/time/format/C;->a(C)I -HSPLj$/time/format/D;->()V -HSPLj$/time/format/D;->A(Lj$/time/chrono/b;)V -HSPLj$/time/format/D;->p(Lj$/time/temporal/TemporalAccessor;)V -HSPLj$/time/format/D;->r()V -HSPLj$/time/format/D;->u(JJJJ)V -HSPLj$/time/format/D;->z(Lj$/time/l;Lj$/time/s;)V -HSPLj$/time/format/DateTimeFormatter;->()V -HSPLj$/time/format/DateTimeFormatter;->(Lj$/time/format/f;Ljava/util/Locale;Lj$/time/format/C;Lj$/time/format/E;Ljava/util/Set;Lj$/time/chrono/k;Lj$/time/ZoneId;)V -HSPLj$/time/format/DateTimeFormatter;->a()Lj$/time/chrono/k; -HSPLj$/time/format/DateTimeFormatter;->b()Lj$/time/format/C; -HSPLj$/time/format/DateTimeFormatter;->d()Lj$/time/ZoneId; -HSPLj$/time/format/DateTimeFormatter;->e(Ljava/lang/CharSequence;Lj$/time/i;)Ljava/lang/Object; -HSPLj$/time/format/DateTimeFormatter;->g()Lj$/time/format/f; -HSPLj$/time/format/E;->()V -HSPLj$/time/format/E;->(Ljava/lang/String;I)V -HSPLj$/time/format/G;->()V -HSPLj$/time/format/G;->(Ljava/lang/String;II)V -HSPLj$/time/format/a;->()V -HSPLj$/time/format/b;->(Lj$/time/format/A;)V -HSPLj$/time/format/c;->()V -HSPLj$/time/format/c;->compare(Ljava/lang/Object;Ljava/lang/Object;)I -HSPLj$/time/format/e;->(C)V -HSPLj$/time/format/e;->B(Lj$/time/format/x;Ljava/lang/CharSequence;I)I -HSPLj$/time/format/f;->(Ljava/util/ArrayList;Z)V -HSPLj$/time/format/f;->([Lj$/time/format/g;Z)V -HSPLj$/time/format/f;->B(Lj$/time/format/x;Ljava/lang/CharSequence;I)I -HSPLj$/time/format/f;->a()Lj$/time/format/f; -HSPLj$/time/format/h;->(Lj$/time/temporal/a;IIZ)V -HSPLj$/time/format/h;->(Lj$/time/temporal/q;IIZI)V -HSPLj$/time/format/i;->()V -HSPLj$/time/format/j;->(Ljava/lang/Object;I)V -HSPLj$/time/format/k;->()V -HSPLj$/time/format/k;->(Lj$/time/temporal/q;III)V -HSPLj$/time/format/k;->(Lj$/time/temporal/q;IIII)V -HSPLj$/time/format/k;->a(Lj$/time/format/k;)I -HSPLj$/time/format/k;->d(Lj$/time/format/x;JII)I -HSPLj$/time/format/k;->e()Lj$/time/format/k; -HSPLj$/time/format/k;->f(I)Lj$/time/format/k; -HSPLj$/time/format/l;->()V -HSPLj$/time/format/l;->(Ljava/lang/String;Ljava/lang/String;)V -HSPLj$/time/format/l;->B(Lj$/time/format/x;Ljava/lang/CharSequence;I)I -HSPLj$/time/format/r;->()V -HSPLj$/time/format/r;->(Ljava/lang/String;I)V -HSPLj$/time/format/r;->B(Lj$/time/format/x;Ljava/lang/CharSequence;I)I -HSPLj$/time/format/s;->(Lj$/time/temporal/q;Lj$/time/format/G;Lj$/time/format/B;)V -HSPLj$/time/format/u;->(Lj$/time/temporal/t;Ljava/lang/String;)V -HSPLj$/time/format/w;->()V -HSPLj$/time/format/w;->()V -HSPLj$/time/format/w;->(Lj$/time/format/w;)V -HSPLj$/time/format/w;->a(Lj$/time/format/DateTimeFormatter;)V -HSPLj$/time/format/w;->b(Lj$/time/temporal/a;IIZ)V -HSPLj$/time/format/w;->c()V -HSPLj$/time/format/w;->d(Lj$/time/format/g;)I -HSPLj$/time/format/w;->e(C)V -HSPLj$/time/format/w;->f(Ljava/lang/String;)V -HSPLj$/time/format/w;->g(Ljava/lang/String;Ljava/lang/String;)V -HSPLj$/time/format/w;->h()V -HSPLj$/time/format/w;->j(Lj$/time/temporal/a;Ljava/util/HashMap;)V -HSPLj$/time/format/w;->k(Lj$/time/format/k;)V -HSPLj$/time/format/w;->l(Lj$/time/temporal/q;I)V -HSPLj$/time/format/w;->m(Lj$/time/temporal/q;III)Lj$/time/format/w; -HSPLj$/time/format/w;->n()V -HSPLj$/time/format/w;->o()V -HSPLj$/time/format/w;->p()V -HSPLj$/time/format/w;->q()V -HSPLj$/time/format/w;->r()V -HSPLj$/time/format/w;->s()V -HSPLj$/time/format/w;->t()V -HSPLj$/time/format/w;->v(Lj$/time/format/E;Lj$/time/chrono/r;)Lj$/time/format/DateTimeFormatter; -HSPLj$/time/format/w;->w(Ljava/util/Locale;Lj$/time/format/E;Lj$/time/chrono/r;)Lj$/time/format/DateTimeFormatter; -HSPLj$/time/format/x;->(Lj$/time/format/DateTimeFormatter;)V -HSPLj$/time/format/x;->e()Lj$/time/format/D; -HSPLj$/time/format/x;->f(Z)V -HSPLj$/time/format/x;->g()Lj$/time/format/C; -HSPLj$/time/format/x;->h()Lj$/time/chrono/k; -HSPLj$/time/format/x;->l()Z -HSPLj$/time/format/x;->m(Z)V -HSPLj$/time/format/x;->o(Lj$/time/temporal/q;JII)I -HSPLj$/time/format/x;->q(Z)V -HSPLj$/time/format/x;->s(Ljava/lang/CharSequence;ILjava/lang/CharSequence;II)Z -HSPLj$/time/format/x;->t(Lj$/time/format/E;Ljava/util/Set;)Lj$/time/temporal/TemporalAccessor; -HSPLj$/time/h;->()V -HSPLj$/time/h;->(III)V -HSPLj$/time/h;->B(III)Lj$/time/h; -HSPLj$/time/h;->K(Lj$/time/temporal/TemporalAccessor;)Lj$/time/h; -HSPLj$/time/h;->M()J -HSPLj$/time/h;->N(Lj$/time/l;)Lj$/time/chrono/ChronoLocalDateTime; -HSPLj$/time/h;->d(Lj$/time/temporal/t;)Ljava/lang/Object; -HSPLj$/time/h;->f0(III)Lj$/time/h; -HSPLj$/time/h;->g()Lj$/time/chrono/k; -HSPLj$/time/h;->j(Lj$/time/temporal/q;)Z -HSPLj$/time/h;->y()Z -HSPLj$/time/i;->(I)V -HSPLj$/time/i;->a(Lj$/time/temporal/TemporalAccessor;)Ljava/lang/Object; -HSPLj$/time/l;->()V -HSPLj$/time/l;->(IIII)V -HSPLj$/time/l;->B(IIII)Lj$/time/l; -HSPLj$/time/l;->W()I -HSPLj$/time/l;->b0(IIII)Lj$/time/l; -HSPLj$/time/l;->j(Lj$/time/temporal/q;)Z -HSPLj$/time/l;->l0()I -HSPLj$/time/s;->()V -HSPLj$/time/s;->(III)V -HSPLj$/time/temporal/a;->()V -HSPLj$/time/temporal/a;->(Ljava/lang/String;ILjava/lang/String;Lj$/time/temporal/w;)V -HSPLj$/time/temporal/a;->(Ljava/lang/String;ILjava/lang/String;Lj$/time/temporal/w;I)V -HSPLj$/time/temporal/a;->K()Lj$/time/temporal/w; -HSPLj$/time/temporal/a;->Z(J)I -HSPLj$/time/temporal/a;->a0(J)V -HSPLj$/time/temporal/a;->isDateBased()Z -HSPLj$/time/temporal/a;->isTimeBased()Z -HSPLj$/time/temporal/b;->()V -HSPLj$/time/temporal/b;->(Ljava/lang/String;ILjava/lang/String;)V -HSPLj$/time/temporal/d;->()V -HSPLj$/time/temporal/e;->()V -HSPLj$/time/temporal/f;->()V -HSPLj$/time/temporal/g;->()V -HSPLj$/time/temporal/h;->()V -HSPLj$/time/temporal/h;->(Ljava/lang/String;I)V -HSPLj$/time/temporal/i;->()V -HSPLj$/time/temporal/i;->(Ljava/lang/String;ILjava/lang/String;)V -HSPLj$/time/temporal/j;->()V -HSPLj$/time/temporal/k;->()V -HSPLj$/time/temporal/k;->(Ljava/lang/String;ILjava/lang/String;J)V -HSPLj$/time/temporal/l;->()V -HSPLj$/time/temporal/q;->P(Ljava/util/HashMap;Lj$/time/temporal/TemporalAccessor;Lj$/time/format/E;)Lj$/time/temporal/TemporalAccessor; -HSPLj$/time/temporal/r;->(I)V -HSPLj$/time/temporal/s;->()V -HSPLj$/time/temporal/s;->a()Lj$/time/temporal/t; -HSPLj$/time/temporal/s;->b()Lj$/time/temporal/t; -HSPLj$/time/temporal/s;->c()Lj$/time/temporal/t; -HSPLj$/time/temporal/s;->d()Lj$/time/temporal/t; -HSPLj$/time/temporal/s;->e()Lj$/time/temporal/t; -HSPLj$/time/temporal/s;->f()Lj$/time/temporal/t; -HSPLj$/time/temporal/s;->g()Lj$/time/temporal/t; -HSPLj$/time/temporal/w;->(JJJJ)V -HSPLj$/time/temporal/w;->a(JLj$/time/temporal/q;)I -HSPLj$/time/temporal/w;->b(JLj$/time/temporal/q;)V -HSPLj$/time/temporal/w;->d()J -HSPLj$/time/temporal/w;->e()J -HSPLj$/time/temporal/w;->g()Z -HSPLj$/time/temporal/w;->h()Z -HSPLj$/time/temporal/w;->i(J)Z -HSPLj$/time/temporal/w;->j(JJ)Lj$/time/temporal/w; -HSPLj$/time/temporal/w;->k(JJJ)Lj$/time/temporal/w; -HSPLj$/time/temporal/w;->l(JJ)Lj$/time/temporal/w; -HSPLj$/util/DesugarTimeZone;->getTimeZone(Ljava/lang/String;)Ljava/util/TimeZone; -HSPLj$/util/concurrent/ConcurrentHashMap;->()V -HSPLj$/util/concurrent/ConcurrentHashMap;->()V -HSPLj$/util/concurrent/ConcurrentHashMap;->(I)V -HSPLj$/util/concurrent/ConcurrentHashMap;->(II)V -HSPLj$/util/concurrent/ConcurrentHashMap;->a(JI)V -HSPLj$/util/concurrent/ConcurrentHashMap;->b([Lj$/util/concurrent/l;ILj$/util/concurrent/l;)Z -HSPLj$/util/concurrent/ConcurrentHashMap;->f()[Lj$/util/concurrent/l; -HSPLj$/util/concurrent/ConcurrentHashMap;->g(Ljava/lang/Object;Ljava/lang/Object;Z)Ljava/lang/Object; -HSPLj$/util/concurrent/ConcurrentHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object; -HSPLj$/util/concurrent/ConcurrentHashMap;->j(I)I -HSPLj$/util/concurrent/ConcurrentHashMap;->l([Lj$/util/concurrent/l;I)Lj$/util/concurrent/l; -HSPLj$/util/concurrent/ConcurrentHashMap;->m(I)I -HSPLj$/util/concurrent/ConcurrentHashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLj$/util/concurrent/ConcurrentHashMap;->putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLj$/util/concurrent/l;->(ILjava/lang/Object;Ljava/lang/Object;)V -HSPLkotlin/LazyKt__LazyJVMKt;->lazy(ILkotlin/jvm/functions/Function0;)Lkotlin/Lazy; -HSPLkotlin/Pair;->(Ljava/lang/Object;Ljava/lang/Object;)V -HSPLkotlin/Result$Failure;->(Ljava/lang/Throwable;)V -HSPLkotlin/Result;->(Ljava/lang/Object;)V -HSPLkotlin/Result;->exceptionOrNull-impl(Ljava/lang/Object;)Ljava/lang/Throwable; -HSPLkotlin/ResultKt;->createFailure(Ljava/lang/Throwable;)Lkotlin/Result$Failure; -HSPLkotlin/ResultKt;->throwOnFailure(Ljava/lang/Object;)V -HSPLkotlin/SafePublicationLazyImpl;->()V -HSPLkotlin/SafePublicationLazyImpl;->(Lkotlin/jvm/functions/Function0;)V -HSPLkotlin/SafePublicationLazyImpl;->getValue()Ljava/lang/Object; -HSPLkotlin/SynchronizedLazyImpl;->(Lkotlin/jvm/functions/Function0;)V -HSPLkotlin/SynchronizedLazyImpl;->getValue()Ljava/lang/Object; -HSPLkotlin/TuplesKt;->toCanonicalHost(Ljava/lang/String;)Ljava/lang/String; -HSPLkotlin/UNINITIALIZED_VALUE;->()V -HSPLkotlin/UNINITIALIZED_VALUE;->()V -HSPLkotlin/Unit;->()V -HSPLkotlin/Unit;->()V -HSPLkotlin/UnsafeLazyImpl;->(Lkotlin/jvm/functions/Function0;)V -HSPLkotlin/UnsafeLazyImpl;->getValue()Ljava/lang/Object; -HSPLkotlin/UnsignedKt;->ulongToDouble(J)D -HSPLkotlin/collections/AbstractCollection;->()V -HSPLkotlin/collections/AbstractCollection;->isEmpty()Z -HSPLkotlin/collections/AbstractCollection;->size()I -HSPLkotlin/collections/AbstractList;->()V -HSPLkotlin/collections/AbstractList;->equals(Ljava/lang/Object;)Z -HSPLkotlin/collections/AbstractMap;->()V -HSPLkotlin/collections/AbstractMap;->entrySet()Ljava/util/Set; -HSPLkotlin/collections/AbstractMap;->equals(Ljava/lang/Object;)Z -HSPLkotlin/collections/AbstractMap;->size()I -HSPLkotlin/collections/AbstractMutableList;->()V -HSPLkotlin/collections/AbstractMutableList;->size()I -HSPLkotlin/collections/AbstractMutableSet;->()V -HSPLkotlin/collections/AbstractMutableSet;->size()I -HSPLkotlin/collections/AbstractSet;->()V -HSPLkotlin/collections/AbstractSet;->equals(Ljava/lang/Object;)Z -HSPLkotlin/collections/ArrayAsCollection;->([Ljava/lang/Object;Z)V -HSPLkotlin/collections/ArrayAsCollection;->toArray()[Ljava/lang/Object; -HSPLkotlin/collections/ArrayDeque;->()V -HSPLkotlin/collections/ArrayDeque;->()V -HSPLkotlin/collections/ArrayDeque;->addAll(Ljava/util/Collection;)Z -HSPLkotlin/collections/ArrayDeque;->addFirst(Ljava/lang/Object;)V -HSPLkotlin/collections/ArrayDeque;->addLast(Ljava/lang/Object;)V -HSPLkotlin/collections/ArrayDeque;->contains(Ljava/lang/Object;)Z -HSPLkotlin/collections/ArrayDeque;->copyCollectionElements(ILjava/util/Collection;)V -HSPLkotlin/collections/ArrayDeque;->ensureCapacity(I)V -HSPLkotlin/collections/ArrayDeque;->first()Ljava/lang/Object; -HSPLkotlin/collections/ArrayDeque;->get(I)Ljava/lang/Object; -HSPLkotlin/collections/ArrayDeque;->getSize()I -HSPLkotlin/collections/ArrayDeque;->incremented(I)I -HSPLkotlin/collections/ArrayDeque;->indexOf(Ljava/lang/Object;)I -HSPLkotlin/collections/ArrayDeque;->isEmpty()Z -HSPLkotlin/collections/ArrayDeque;->last()Ljava/lang/Object; -HSPLkotlin/collections/ArrayDeque;->lastOrNull()Ljava/lang/Object; -HSPLkotlin/collections/ArrayDeque;->positiveMod(I)I -HSPLkotlin/collections/ArrayDeque;->removeFirst()Ljava/lang/Object; -HSPLkotlin/collections/ArrayDeque;->toArray()[Ljava/lang/Object; -HSPLkotlin/collections/ArrayDeque;->toArray([Ljava/lang/Object;)[Ljava/lang/Object; -HSPLkotlin/collections/ArraysKt__ArraysKt;->copyOfRangeToIndexCheck(II)V -HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->asList([Ljava/lang/Object;)Ljava/util/List; -HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto$default([I[III)V -HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto$default([Ljava/lang/Object;[Ljava/lang/Object;IIII)V -HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto(III[B[B)V -HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto(III[I[I)V -HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto([Ljava/lang/Object;[Ljava/lang/Object;III)V -HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyOfRange([BII)[B -HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyOfRange([FII)[F -HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->fill$default([Ljava/lang/Object;Lkotlinx/coroutines/internal/Symbol;)V -HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->fill(II[Ljava/lang/Object;)V -HSPLkotlin/collections/ArraysKt___ArraysKt;->filterNotNull([Ljava/lang/Object;)Ljava/util/ArrayList; -HSPLkotlin/collections/ArraysKt___ArraysKt;->firstOrNull([Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlin/collections/ArraysKt___ArraysKt;->toList([Ljava/lang/Object;)Ljava/util/List; -HSPLkotlin/collections/CollectionsKt__CollectionsKt;->binarySearch$default(Ljava/util/ArrayList;Ljava/lang/Comparable;)I -HSPLkotlin/collections/CollectionsKt__CollectionsKt;->build(Lkotlin/collections/builders/ListBuilder;)Lkotlin/collections/builders/ListBuilder; -HSPLkotlin/collections/CollectionsKt__CollectionsKt;->getLastIndex(Ljava/util/List;)I -HSPLkotlin/collections/CollectionsKt__CollectionsKt;->listOf(Ljava/lang/Object;)Ljava/util/List; -HSPLkotlin/collections/CollectionsKt__CollectionsKt;->listOf([Ljava/lang/Object;)Ljava/util/List; -HSPLkotlin/collections/CollectionsKt__CollectionsKt;->mutableListOf([Ljava/lang/Object;)Ljava/util/ArrayList; -HSPLkotlin/collections/CollectionsKt__CollectionsKt;->optimizeReadOnlyList(Ljava/util/List;)Ljava/util/List; -HSPLkotlin/collections/CollectionsKt__CollectionsKt;->rangeCheck$CollectionsKt__CollectionsKt(III)V -HSPLkotlin/collections/CollectionsKt__IteratorsJVMKt;->collectionSizeOrDefault(Ljava/lang/Iterable;I)I -HSPLkotlin/collections/CollectionsKt__IteratorsJVMKt;->flatten(Ljava/util/Collection;)Ljava/util/ArrayList; -HSPLkotlin/collections/CollectionsKt__MutableCollectionsJVMKt;->sort(Ljava/util/List;)V -HSPLkotlin/collections/CollectionsKt__ReversedViewsKt;->addAll(Ljava/lang/Iterable;Ljava/util/Collection;)V -HSPLkotlin/collections/CollectionsKt__ReversedViewsKt;->removeLast(Ljava/util/ArrayList;)V -HSPLkotlin/collections/CollectionsKt___CollectionsKt$asSequence$$inlined$Sequence$1;->(Ljava/lang/Iterable;)V -HSPLkotlin/collections/CollectionsKt___CollectionsKt$asSequence$$inlined$Sequence$1;->iterator()Ljava/util/Iterator; -HSPLkotlin/collections/CollectionsKt___CollectionsKt;->asSequence(Ljava/lang/Iterable;)Lkotlin/collections/CollectionsKt___CollectionsKt$asSequence$$inlined$Sequence$1; -HSPLkotlin/collections/CollectionsKt___CollectionsKt;->filterNotNull(Ljava/util/List;)Ljava/util/ArrayList; -HSPLkotlin/collections/CollectionsKt___CollectionsKt;->first(Ljava/util/List;)Ljava/lang/Object; -HSPLkotlin/collections/CollectionsKt___CollectionsKt;->last(Ljava/util/List;)Ljava/lang/Object; -HSPLkotlin/collections/CollectionsKt___CollectionsKt;->lastOrNull(Ljava/util/List;)Ljava/lang/Object; -HSPLkotlin/collections/CollectionsKt___CollectionsKt;->maxOrNull(Ljava/util/ArrayList;)Ljava/lang/Comparable; -HSPLkotlin/collections/CollectionsKt___CollectionsKt;->plus(Ljava/lang/Iterable;Ljava/util/List;)Ljava/util/ArrayList; -HSPLkotlin/collections/CollectionsKt___CollectionsKt;->plus(Ljava/util/Collection;Ljava/lang/Object;)Ljava/util/ArrayList; -HSPLkotlin/collections/CollectionsKt___CollectionsKt;->reversed(Ljava/util/AbstractList;)Ljava/util/List; -HSPLkotlin/collections/CollectionsKt___CollectionsKt;->sortedWith(Ljava/lang/Iterable;Ljava/util/Comparator;)Ljava/util/List; -HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toIntArray(Ljava/util/ArrayList;)[I -HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toList(Ljava/lang/Iterable;)Ljava/util/List; -HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toMutableList(Ljava/lang/Iterable;)Ljava/util/List; -HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toMutableList(Ljava/util/Collection;)Ljava/util/ArrayList; -HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toSet(Ljava/lang/Iterable;)Ljava/util/Set; -HSPLkotlin/collections/EmptyIterator;->()V -HSPLkotlin/collections/EmptyIterator;->()V -HSPLkotlin/collections/EmptyIterator;->hasNext()Z -HSPLkotlin/collections/EmptyIterator;->hasPrevious()Z -HSPLkotlin/collections/EmptyList;->()V -HSPLkotlin/collections/EmptyList;->()V -HSPLkotlin/collections/EmptyList;->equals(Ljava/lang/Object;)Z -HSPLkotlin/collections/EmptyList;->isEmpty()Z -HSPLkotlin/collections/EmptyList;->iterator()Ljava/util/Iterator; -HSPLkotlin/collections/EmptyList;->listIterator(I)Ljava/util/ListIterator; -HSPLkotlin/collections/EmptyList;->size()I -HSPLkotlin/collections/EmptyList;->toArray()[Ljava/lang/Object; -HSPLkotlin/collections/EmptyMap;->()V -HSPLkotlin/collections/EmptyMap;->()V -HSPLkotlin/collections/EmptyMap;->containsKey(Ljava/lang/Object;)Z -HSPLkotlin/collections/EmptyMap;->entrySet()Ljava/util/Set; -HSPLkotlin/collections/EmptyMap;->get(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlin/collections/EmptyMap;->hashCode()I -HSPLkotlin/collections/EmptyMap;->isEmpty()Z -HSPLkotlin/collections/EmptyMap;->keySet()Ljava/util/Set; -HSPLkotlin/collections/EmptyMap;->size()I -HSPLkotlin/collections/EmptySet;->()V -HSPLkotlin/collections/EmptySet;->()V -HSPLkotlin/collections/EmptySet;->contains(Ljava/lang/Object;)Z -HSPLkotlin/collections/EmptySet;->equals(Ljava/lang/Object;)Z -HSPLkotlin/collections/EmptySet;->hashCode()I -HSPLkotlin/collections/EmptySet;->iterator()Ljava/util/Iterator; -HSPLkotlin/collections/EmptySet;->size()I -HSPLkotlin/collections/IndexedValue;->(ILjava/lang/Object;)V -HSPLkotlin/collections/IntIterator;->()V -HSPLkotlin/collections/MapsKt__MapsJVMKt;->mapCapacity(I)I -HSPLkotlin/collections/MapsKt__MapsJVMKt;->toSingletonMap(Ljava/util/Map;)Ljava/util/Map; -HSPLkotlin/collections/MapsKt___MapsJvmKt;->mapOf([Lkotlin/Pair;)Ljava/util/Map; -HSPLkotlin/collections/MapsKt___MapsJvmKt;->putAll(Ljava/util/HashMap;[Lkotlin/Pair;)V -HSPLkotlin/collections/MapsKt___MapsJvmKt;->toMap(Ljava/util/ArrayList;)Ljava/util/Map; -HSPLkotlin/collections/MapsKt___MapsJvmKt;->toMap(Ljava/util/ArrayList;Ljava/util/LinkedHashMap;)V -HSPLkotlin/collections/MapsKt___MapsJvmKt;->toMap(Ljava/util/Map;)Ljava/util/Map; -HSPLkotlin/collections/MapsKt___MapsJvmKt;->toMutableMap(Ljava/util/Map;)Ljava/util/LinkedHashMap; -HSPLkotlin/collections/SetsKt;->plus(Ljava/util/Set;Ljava/lang/Object;)Ljava/util/LinkedHashSet; -HSPLkotlin/collections/builders/ListBuilder;->()V -HSPLkotlin/collections/builders/ListBuilder;->(I)V -HSPLkotlin/collections/builders/ListBuilder;->([Ljava/lang/Object;IIZLkotlin/collections/builders/ListBuilder;Lkotlin/collections/builders/ListBuilder;)V -HSPLkotlin/collections/builders/ListBuilder;->add(Ljava/lang/Object;)Z -HSPLkotlin/collections/builders/ListBuilder;->addAtInternal(ILjava/lang/Object;)V -HSPLkotlin/collections/builders/ListBuilder;->checkIsMutable()V -HSPLkotlin/collections/builders/ListBuilder;->insertAtInternal(II)V -HSPLkotlin/collections/builders/ListBuilderKt;->arrayOfUninitializedElements(I)[Ljava/lang/Object; -HSPLkotlin/collections/builders/MapBuilder$Companion;->()V -HSPLkotlin/collections/builders/MapBuilder$Itr;->(Lkotlin/collections/builders/MapBuilder;)V -HSPLkotlin/collections/builders/MapBuilder$Itr;->hasNext()Z -HSPLkotlin/collections/builders/MapBuilder$Itr;->initNext$kotlin_stdlib()V -HSPLkotlin/collections/builders/MapBuilder$KeysItr;->(Lkotlin/collections/builders/MapBuilder;)V -HSPLkotlin/collections/builders/MapBuilder$KeysItr;->next()Ljava/lang/Object; -HSPLkotlin/collections/builders/MapBuilder;->()V -HSPLkotlin/collections/builders/MapBuilder;->()V -HSPLkotlin/collections/builders/MapBuilder;->addKey$kotlin_stdlib(Ljava/lang/Object;)I -HSPLkotlin/collections/builders/MapBuilder;->checkIsMutable$kotlin_stdlib()V -HSPLkotlin/collections/builders/MapBuilder;->containsKey(Ljava/lang/Object;)Z -HSPLkotlin/collections/builders/MapBuilder;->findKey(Ljava/lang/Object;)I -HSPLkotlin/collections/builders/MapBuilder;->hash(Ljava/lang/Object;)I -HSPLkotlin/collections/builders/MapBuilder;->isEmpty()Z -HSPLkotlin/collections/builders/SetBuilder;->()V -HSPLkotlin/collections/builders/SetBuilder;->add(Ljava/lang/Object;)Z -HSPLkotlin/collections/builders/SetBuilder;->contains(Ljava/lang/Object;)Z -HSPLkotlin/collections/builders/SetBuilder;->getSize()I -HSPLkotlin/collections/builders/SetBuilder;->isEmpty()Z -HSPLkotlin/collections/builders/SetBuilder;->iterator()Ljava/util/Iterator; -HSPLkotlin/comparisons/NaturalOrderComparator;->()V -HSPLkotlin/comparisons/NaturalOrderComparator;->()V -HSPLkotlin/comparisons/NaturalOrderComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I -HSPLkotlin/coroutines/AbstractCoroutineContextElement;->(Lkotlin/coroutines/CoroutineContext$Key;)V -HSPLkotlin/coroutines/AbstractCoroutineContextElement;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; -HSPLkotlin/coroutines/AbstractCoroutineContextElement;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; -HSPLkotlin/coroutines/AbstractCoroutineContextElement;->getKey()Lkotlin/coroutines/CoroutineContext$Key; -HSPLkotlin/coroutines/AbstractCoroutineContextElement;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; -HSPLkotlin/coroutines/AbstractCoroutineContextElement;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; -HSPLkotlin/coroutines/AbstractCoroutineContextKey;->(Lkotlin/coroutines/CoroutineContext$Key;Lkotlin/jvm/functions/Function1;)V -HSPLkotlin/coroutines/CombinedContext;->(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext;)V -HSPLkotlin/coroutines/CombinedContext;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; -HSPLkotlin/coroutines/CombinedContext;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; -HSPLkotlin/coroutines/CombinedContext;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; -HSPLkotlin/coroutines/ContinuationInterceptor$Key;->()V -HSPLkotlin/coroutines/ContinuationInterceptor$Key;->()V -HSPLkotlin/coroutines/CoroutineContext$DefaultImpls;->plus(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; -HSPLkotlin/coroutines/CoroutineContext$Element$DefaultImpls;->minusKey(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; -HSPLkotlin/coroutines/CoroutineContext$plus$1;->()V -HSPLkotlin/coroutines/CoroutineContext$plus$1;->()V -HSPLkotlin/coroutines/CoroutineContext$plus$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlin/coroutines/EmptyCoroutineContext;->()V -HSPLkotlin/coroutines/EmptyCoroutineContext;->()V -HSPLkotlin/coroutines/EmptyCoroutineContext;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; -HSPLkotlin/coroutines/EmptyCoroutineContext;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; -HSPLkotlin/coroutines/EmptyCoroutineContext;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; -HSPLkotlin/coroutines/SafeContinuation;->()V -HSPLkotlin/coroutines/SafeContinuation;->(Lkotlin/coroutines/intrinsics/CoroutineSingletons;Lkotlin/coroutines/Continuation;)V -HSPLkotlin/coroutines/SafeContinuation;->resumeWith(Ljava/lang/Object;)V -HSPLkotlin/coroutines/intrinsics/CoroutineSingletons;->()V -HSPLkotlin/coroutines/intrinsics/CoroutineSingletons;->(ILjava/lang/String;)V -HSPLkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsKt;->createCoroutineUnintercepted(Ljava/lang/Object;Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function2;)Lkotlin/coroutines/Continuation; -HSPLkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsKt;->intercepted(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;->(Lkotlin/coroutines/Continuation;)V -HSPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;->releaseIntercepted()V -HSPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;->resumeWith(Ljava/lang/Object;)V -HSPLkotlin/coroutines/jvm/internal/CompletedContinuation;->()V -HSPLkotlin/coroutines/jvm/internal/CompletedContinuation;->()V -HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;->(Lkotlin/coroutines/Continuation;)V -HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;->(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;)V -HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;->getContext()Lkotlin/coroutines/CoroutineContext; -HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;->releaseIntercepted()V -HSPLkotlin/coroutines/jvm/internal/RestrictedContinuationImpl;->(Lkotlin/coroutines/Continuation;)V -HSPLkotlin/coroutines/jvm/internal/RestrictedContinuationImpl;->getContext()Lkotlin/coroutines/CoroutineContext; -HSPLkotlin/coroutines/jvm/internal/RestrictedSuspendLambda;->(ILkotlin/coroutines/Continuation;)V -HSPLkotlin/coroutines/jvm/internal/SuspendLambda;->(ILkotlin/coroutines/Continuation;)V -HSPLkotlin/coroutines/jvm/internal/SuspendLambda;->getArity()I -HSPLkotlin/internal/PlatformImplementations;->()V -HSPLkotlin/internal/PlatformImplementationsKt;->()V -HSPLkotlin/internal/ProgressionUtilKt;->getOrNull(Landroidx/compose/ui/semantics/SemanticsConfiguration;Landroidx/compose/ui/semantics/SemanticsPropertyKey;)Ljava/lang/Object; -HSPLkotlin/internal/ProgressionUtilKt;->getProgressionLastElement(III)I -HSPLkotlin/internal/jdk7/JDK7PlatformImplementations;->()V -HSPLkotlin/internal/jdk8/JDK8PlatformImplementations$ReflectSdkVersion;->()V -HSPLkotlin/internal/jdk8/JDK8PlatformImplementations;->()V -HSPLkotlin/internal/jdk8/JDK8PlatformImplementations;->defaultPlatformRandom()Lkotlin/random/Random; -HSPLkotlin/io/CloseableKt;->closeFinally(Ljava/io/Closeable;Ljava/lang/Throwable;)V -HSPLkotlin/io/FilesKt__UtilsKt;->resolve(Ljava/io/File;Ljava/lang/String;)Ljava/io/File; -HSPLkotlin/jvm/JvmClassMappingKt;->getJavaClass(Lkotlin/reflect/KClass;)Ljava/lang/Class; -HSPLkotlin/jvm/JvmClassMappingKt;->getJavaObjectType(Lkotlin/reflect/KClass;)Ljava/lang/Class; -HSPLkotlin/jvm/internal/ArrayIterator;->([Ljava/lang/Object;)V -HSPLkotlin/jvm/internal/ArrayIterator;->hasNext()Z -HSPLkotlin/jvm/internal/ArrayIterator;->next()Ljava/lang/Object; -HSPLkotlin/jvm/internal/ArrayIteratorKt;->iterator([Ljava/lang/Object;)Lkotlin/jvm/internal/ArrayIterator; -HSPLkotlin/jvm/internal/CallableReference$NoReceiver;->()V -HSPLkotlin/jvm/internal/CallableReference$NoReceiver;->()V -HSPLkotlin/jvm/internal/CallableReference;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;Z)V -HSPLkotlin/jvm/internal/CallableReference;->getOwner()Lkotlin/jvm/internal/ClassBasedDeclarationContainer; -HSPLkotlin/jvm/internal/ClassReference;->()V -HSPLkotlin/jvm/internal/ClassReference;->(Ljava/lang/Class;)V -HSPLkotlin/jvm/internal/ClassReference;->equals(Ljava/lang/Object;)Z -HSPLkotlin/jvm/internal/ClassReference;->getJClass()Ljava/lang/Class; -HSPLkotlin/jvm/internal/ClassReference;->getQualifiedName()Ljava/lang/String; -HSPLkotlin/jvm/internal/ClassReference;->getSimpleName()Ljava/lang/String; -HSPLkotlin/jvm/internal/ClassReference;->hashCode()I -HSPLkotlin/jvm/internal/CollectionToArray;->()V -HSPLkotlin/jvm/internal/CollectionToArray;->toArray(Ljava/util/Collection;)[Ljava/lang/Object; -HSPLkotlin/jvm/internal/FunctionReference;->(ILjava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V -HSPLkotlin/jvm/internal/FunctionReference;->equals(Ljava/lang/Object;)Z -HSPLkotlin/jvm/internal/FunctionReference;->getArity()I -HSPLkotlin/jvm/internal/FunctionReferenceImpl;->(ILjava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V -HSPLkotlin/jvm/internal/FunctionReferenceImpl;->(ILjava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V -HSPLkotlin/jvm/internal/Intrinsics$$ExternalSyntheticCheckNotZero0;->m(ILjava/lang/String;)V -HSPLkotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;)V -HSPLkotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)V -HSPLkotlin/jvm/internal/Intrinsics;->checkNotNullExpressionValue(Ljava/lang/Object;Ljava/lang/String;)V -HSPLkotlin/jvm/internal/Intrinsics;->checkNotNullParameter(Ljava/lang/Object;Ljava/lang/String;)V -HSPLkotlin/jvm/internal/Intrinsics;->compare(II)I -HSPLkotlin/jvm/internal/Intrinsics;->stringPlus(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/String; -HSPLkotlin/jvm/internal/Lambda;->(I)V -HSPLkotlin/jvm/internal/Lambda;->getArity()I -HSPLkotlin/jvm/internal/MutablePropertyReference1;->(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;)V -HSPLkotlin/jvm/internal/MutablePropertyReference1Impl;->(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;)V -HSPLkotlin/jvm/internal/MutablePropertyReference;->(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;)V -HSPLkotlin/jvm/internal/PropertyReference1;->(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V -HSPLkotlin/jvm/internal/PropertyReference1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlin/jvm/internal/PropertyReference1Impl;->(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V -HSPLkotlin/jvm/internal/PropertyReference;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V -HSPLkotlin/jvm/internal/Ref$BooleanRef;->()V -HSPLkotlin/jvm/internal/Ref$FloatRef;->()V -HSPLkotlin/jvm/internal/Ref$IntRef;->()V -HSPLkotlin/jvm/internal/Ref$ObjectRef;->()V -HSPLkotlin/jvm/internal/Reflection;->()V -HSPLkotlin/jvm/internal/Reflection;->getOrCreateKotlinClass(Ljava/lang/Class;)Lkotlin/jvm/internal/ClassReference; -HSPLkotlin/jvm/internal/ReflectionFactory;->()V -HSPLkotlin/jvm/internal/SpreadBuilder;->()V -HSPLkotlin/jvm/internal/SpreadBuilder;->addSpread(Ljava/lang/Object;)V -HSPLkotlin/jvm/internal/TypeIntrinsics;->asMutableCollection(Ljava/util/Collection;)Ljava/util/Collection; -HSPLkotlin/jvm/internal/TypeIntrinsics;->beforeCheckcastToFunctionOfArity(ILjava/lang/Object;)V -HSPLkotlin/jvm/internal/TypeIntrinsics;->isFunctionOfArity(ILjava/lang/Object;)Z -HSPLkotlin/jvm/internal/TypeReference;->(Lkotlin/jvm/internal/ClassReference;Ljava/util/List;)V -HSPLkotlin/jvm/internal/TypeReference;->equals(Ljava/lang/Object;)Z -HSPLkotlin/jvm/internal/TypeReference;->getArguments()Ljava/util/List; -HSPLkotlin/jvm/internal/TypeReference;->getClassifier()Lkotlin/reflect/KClassifier; -HSPLkotlin/jvm/internal/TypeReference;->hashCode()I -HSPLkotlin/jvm/internal/TypeReference;->isMarkedNullable()Z -HSPLkotlin/math/MathKt__MathJVMKt;->roundToInt(F)I -HSPLkotlin/random/AbstractPlatformRandom;->()V -HSPLkotlin/random/AbstractPlatformRandom;->nextInt()I -HSPLkotlin/random/FallbackThreadLocalRandom$implStorage$1;->()V -HSPLkotlin/random/FallbackThreadLocalRandom$implStorage$1;->initialValue()Ljava/lang/Object; -HSPLkotlin/random/FallbackThreadLocalRandom;->()V -HSPLkotlin/random/FallbackThreadLocalRandom;->getImpl()Ljava/util/Random; -HSPLkotlin/random/Random$Default;->(I)V -HSPLkotlin/random/Random$Default;->nextInt()I -HSPLkotlin/random/Random;->()V -HSPLkotlin/random/Random;->()V -HSPLkotlin/ranges/IntProgression;->(III)V -HSPLkotlin/ranges/IntProgression;->iterator()Ljava/util/Iterator; -HSPLkotlin/ranges/IntProgression;->iterator()Lkotlin/ranges/IntProgressionIterator; -HSPLkotlin/ranges/IntProgressionIterator;->(III)V -HSPLkotlin/ranges/IntProgressionIterator;->hasNext()Z -HSPLkotlin/ranges/IntProgressionIterator;->nextInt()I -HSPLkotlin/ranges/IntRange;->()V -HSPLkotlin/ranges/IntRange;->(II)V -HSPLkotlin/ranges/IntRange;->equals(Ljava/lang/Object;)Z -HSPLkotlin/ranges/IntRange;->isEmpty()Z -HSPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(DDD)D -HSPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(FFF)F -HSPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(III)I -HSPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(JJJ)J -HSPLkotlin/ranges/RangesKt___RangesKt;->step(Lkotlin/ranges/IntRange;I)Lkotlin/ranges/IntProgression; -HSPLkotlin/ranges/RangesKt___RangesKt;->until(II)Lkotlin/ranges/IntRange; -HSPLkotlin/reflect/KTypeProjection;->()V -HSPLkotlin/reflect/KTypeProjection;->(ILkotlin/jvm/internal/TypeReference;)V -HSPLkotlin/sequences/ConstrainedOnceSequence;->(Lkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1;)V -HSPLkotlin/sequences/ConstrainedOnceSequence;->iterator()Ljava/util/Iterator; -HSPLkotlin/sequences/FilteringSequence$iterator$1;->(Lkotlin/sequences/FilteringSequence;)V -HSPLkotlin/sequences/FilteringSequence$iterator$1;->calcNext()V -HSPLkotlin/sequences/FilteringSequence$iterator$1;->hasNext()Z -HSPLkotlin/sequences/FilteringSequence$iterator$1;->next()Ljava/lang/Object; -HSPLkotlin/sequences/FilteringSequence;->(Lkotlin/sequences/TransformingSequence;)V -HSPLkotlin/sequences/GeneratorSequence$iterator$1;->(Lkotlin/sequences/GeneratorSequence;)V -HSPLkotlin/sequences/GeneratorSequence$iterator$1;->calcNext()V -HSPLkotlin/sequences/GeneratorSequence$iterator$1;->hasNext()Z -HSPLkotlin/sequences/GeneratorSequence$iterator$1;->next()Ljava/lang/Object; -HSPLkotlin/sequences/GeneratorSequence;->(Lkotlin/sequences/SequencesKt__SequencesKt$generateSequence$2;Lkotlin/jvm/functions/Function1;)V -HSPLkotlin/sequences/GeneratorSequence;->iterator()Ljava/util/Iterator; -HSPLkotlin/sequences/SequenceBuilderIterator;->()V -HSPLkotlin/sequences/SequenceBuilderIterator;->getContext()Lkotlin/coroutines/CoroutineContext; -HSPLkotlin/sequences/SequenceBuilderIterator;->hasNext()Z -HSPLkotlin/sequences/SequenceBuilderIterator;->next()Ljava/lang/Object; -HSPLkotlin/sequences/SequenceBuilderIterator;->resumeWith(Ljava/lang/Object;)V -HSPLkotlin/sequences/SequenceBuilderIterator;->yield(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V -HSPLkotlin/sequences/SequenceScope;->()V -HSPLkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1;->(Ljava/util/Iterator;)V -HSPLkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1;->iterator()Ljava/util/Iterator; -HSPLkotlin/sequences/SequencesKt__SequencesKt$generateSequence$2;->(Ljava/lang/Object;)V -HSPLkotlin/sequences/SequencesKt__SequencesKt$generateSequence$2;->invoke()Ljava/lang/Object; -HSPLkotlin/sequences/SequencesKt__SequencesKt;->asSequence(Ljava/util/Iterator;)Lkotlin/sequences/Sequence; -HSPLkotlin/sequences/SequencesKt__SequencesKt;->generateSequence(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence; -HSPLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;->()V -HSPLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;->()V -HSPLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlin/sequences/SequencesKt___SequencesKt;->toMutableList(Lkotlin/sequences/Sequence;)Ljava/util/ArrayList; -HSPLkotlin/sequences/TransformingSequence$iterator$1;->(Lkotlin/sequences/TransformingSequence;)V -HSPLkotlin/sequences/TransformingSequence$iterator$1;->hasNext()Z -HSPLkotlin/sequences/TransformingSequence$iterator$1;->next()Ljava/lang/Object; -HSPLkotlin/sequences/TransformingSequence;->(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)V -HSPLkotlin/sequences/TransformingSequence;->iterator()Ljava/util/Iterator; -HSPLkotlin/text/CharsKt__CharKt;->checkRadix(I)V -HSPLkotlin/text/CharsKt__CharKt;->equals(CCZ)Z -HSPLkotlin/text/CharsKt__CharKt;->isWhitespace(C)Z -HSPLkotlin/text/Charsets;->()V -HSPLkotlin/text/Regex;->(Ljava/lang/String;)V -HSPLkotlin/text/StringsKt__StringsJVMKt;->concatToString([CII)Ljava/lang/String; -HSPLkotlin/text/StringsKt__StringsJVMKt;->endsWith(Ljava/lang/String;Ljava/lang/String;Z)Z -HSPLkotlin/text/StringsKt__StringsJVMKt;->equals(Ljava/lang/String;Ljava/lang/String;)Z -HSPLkotlin/text/StringsKt__StringsJVMKt;->isBlank(Ljava/lang/CharSequence;)Z -HSPLkotlin/text/StringsKt__StringsJVMKt;->regionMatches(IIILjava/lang/String;Ljava/lang/String;Z)Z -HSPLkotlin/text/StringsKt__StringsJVMKt;->replace$default(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; -HSPLkotlin/text/StringsKt__StringsJVMKt;->startsWith(Ljava/lang/String;Ljava/lang/String;IZ)Z -HSPLkotlin/text/StringsKt__StringsJVMKt;->startsWith(Ljava/lang/String;Ljava/lang/String;Z)Z -HSPLkotlin/text/StringsKt__StringsKt;->contains$default(Ljava/lang/CharSequence;C)Z -HSPLkotlin/text/StringsKt__StringsKt;->contains(Ljava/lang/CharSequence;Ljava/lang/String;Z)Z -HSPLkotlin/text/StringsKt__StringsKt;->endsWith$default(Ljava/lang/CharSequence;Ljava/lang/String;)Z -HSPLkotlin/text/StringsKt__StringsKt;->endsWith$default(Ljava/lang/String;C)Z -HSPLkotlin/text/StringsKt__StringsKt;->getLastIndex(Ljava/lang/CharSequence;)I -HSPLkotlin/text/StringsKt__StringsKt;->indexOf$StringsKt__StringsKt(Ljava/lang/CharSequence;Ljava/lang/CharSequence;IIZZ)I -HSPLkotlin/text/StringsKt__StringsKt;->indexOf$default(Ljava/lang/CharSequence;CIZI)I -HSPLkotlin/text/StringsKt__StringsKt;->indexOf$default(Ljava/lang/CharSequence;Ljava/lang/String;IZI)I -HSPLkotlin/text/StringsKt__StringsKt;->indexOf(ILjava/lang/CharSequence;Ljava/lang/String;Z)I -HSPLkotlin/text/StringsKt__StringsKt;->indexOfAny(ILjava/lang/CharSequence;Z[C)I -HSPLkotlin/text/StringsKt__StringsKt;->lastIndexOf$default(Ljava/lang/CharSequence;CII)I -HSPLkotlin/text/StringsKt__StringsKt;->removePrefix(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; -HSPLkotlin/text/StringsKt__StringsKt;->substringAfterLast(Ljava/lang/String;CLjava/lang/String;)Ljava/lang/String; -HSPLkotlin/text/StringsKt__StringsKt;->trim(Ljava/lang/CharSequence;)Ljava/lang/CharSequence; -HSPLkotlin/time/Duration;->()V -HSPLkotlin/time/DurationJvmKt;->()V -HSPLkotlin/time/DurationKt;->durationOfMillis(J)J -HSPLkotlin/time/DurationUnitKt__DurationUnitKt;->checkScrollableContainerConstraints-K40F9xA(JLandroidx/compose/foundation/gestures/Orientation;)V -HSPLkotlinx/coroutines/AbstractCoroutine;->(Lkotlin/coroutines/CoroutineContext;Z)V -HSPLkotlinx/coroutines/AbstractCoroutine;->afterResume(Ljava/lang/Object;)V -HSPLkotlinx/coroutines/AbstractCoroutine;->cancellationExceptionMessage()Ljava/lang/String; -HSPLkotlinx/coroutines/AbstractCoroutine;->getContext()Lkotlin/coroutines/CoroutineContext; -HSPLkotlinx/coroutines/AbstractCoroutine;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext; -HSPLkotlinx/coroutines/AbstractCoroutine;->isActive()Z -HSPLkotlinx/coroutines/AbstractCoroutine;->onCancelled(Ljava/lang/Throwable;Z)V -HSPLkotlinx/coroutines/AbstractCoroutine;->onCompleted(Ljava/lang/Object;)V -HSPLkotlinx/coroutines/AbstractCoroutine;->onCompletionInternal(Ljava/lang/Object;)V -HSPLkotlinx/coroutines/AbstractCoroutine;->resumeWith(Ljava/lang/Object;)V -HSPLkotlinx/coroutines/AbstractCoroutine;->start$enumunboxing$(ILkotlinx/coroutines/AbstractCoroutine;Lkotlin/jvm/functions/Function2;)V -HSPLkotlinx/coroutines/Active;->()V -HSPLkotlinx/coroutines/Active;->()V -HSPLkotlinx/coroutines/AwaitAll$AwaitAllNode;->(Lkotlinx/coroutines/AwaitAll;Lkotlinx/coroutines/CancellableContinuationImpl;)V -HSPLkotlinx/coroutines/AwaitAll$AwaitAllNode;->invoke(Ljava/lang/Throwable;)V -HSPLkotlinx/coroutines/AwaitAll$AwaitAllNode;->setDisposer(Lkotlinx/coroutines/AwaitAll$DisposeHandlersOnCancel;)V -HSPLkotlinx/coroutines/AwaitAll$DisposeHandlersOnCancel;->([Lkotlinx/coroutines/AwaitAll$AwaitAllNode;)V -HSPLkotlinx/coroutines/AwaitAll;->()V -HSPLkotlinx/coroutines/AwaitAll;->([Lkotlinx/coroutines/Deferred;)V -HSPLkotlinx/coroutines/AwaitKt;->awaitAll([Lkotlinx/coroutines/Deferred;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/BeforeResumeCancelHandler;->()V -HSPLkotlinx/coroutines/BlockingEventLoop;->(Ljava/lang/Thread;)V -HSPLkotlinx/coroutines/BuildersKt;->async$default(Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/MainCoroutineDispatcher;Lkotlin/jvm/functions/Function2;I)Lkotlinx/coroutines/DeferredCoroutine; -HSPLkotlinx/coroutines/BuildersKt;->launch$default(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/AbstractCoroutineContextElement;ILkotlin/jvm/functions/Function2;I)Lkotlinx/coroutines/StandaloneCoroutine; -HSPLkotlinx/coroutines/BuildersKt;->withContext(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; -HSPLkotlinx/coroutines/CancelHandler;->()V -HSPLkotlinx/coroutines/CancelHandlerBase;->()V -HSPLkotlinx/coroutines/CancellableContinuationImpl;->()V -HSPLkotlinx/coroutines/CancellableContinuationImpl;->(ILkotlin/coroutines/Continuation;)V -HSPLkotlinx/coroutines/CancellableContinuationImpl;->callCancelHandler(Lkotlinx/coroutines/CancelHandler;Ljava/lang/Throwable;)V -HSPLkotlinx/coroutines/CancellableContinuationImpl;->cancel(Ljava/lang/Throwable;)Z -HSPLkotlinx/coroutines/CancellableContinuationImpl;->cancelCompletedResult$kotlinx_coroutines_core(Ljava/lang/Object;Ljava/util/concurrent/CancellationException;)V -HSPLkotlinx/coroutines/CancellableContinuationImpl;->completeResume()V -HSPLkotlinx/coroutines/CancellableContinuationImpl;->detachChild$kotlinx_coroutines_core()V -HSPLkotlinx/coroutines/CancellableContinuationImpl;->dispatchResume(I)V -HSPLkotlinx/coroutines/CancellableContinuationImpl;->getContinuationCancellationCause(Lkotlinx/coroutines/JobSupport;)Ljava/lang/Throwable; -HSPLkotlinx/coroutines/CancellableContinuationImpl;->getDelegate$kotlinx_coroutines_core()Lkotlin/coroutines/Continuation; -HSPLkotlinx/coroutines/CancellableContinuationImpl;->getExceptionalResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Throwable; -HSPLkotlinx/coroutines/CancellableContinuationImpl;->getResult()Ljava/lang/Object; -HSPLkotlinx/coroutines/CancellableContinuationImpl;->getSuccessfulResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/CancellableContinuationImpl;->initCancellability()V -HSPLkotlinx/coroutines/CancellableContinuationImpl;->installParentHandle()Lkotlinx/coroutines/DisposableHandle; -HSPLkotlinx/coroutines/CancellableContinuationImpl;->invokeOnCancellation(Lkotlin/jvm/functions/Function1;)V -HSPLkotlinx/coroutines/CancellableContinuationImpl;->isCompleted()Z -HSPLkotlinx/coroutines/CancellableContinuationImpl;->isReusable()Z -HSPLkotlinx/coroutines/CancellableContinuationImpl;->resetStateReusable()Z -HSPLkotlinx/coroutines/CancellableContinuationImpl;->resumeImpl(Ljava/lang/Object;ILkotlin/jvm/functions/Function1;)V -HSPLkotlinx/coroutines/CancellableContinuationImpl;->resumeWith(Ljava/lang/Object;)V -HSPLkotlinx/coroutines/CancellableContinuationImpl;->resumedState(Lkotlinx/coroutines/NotCompleted;Ljava/lang/Object;ILkotlin/jvm/functions/Function1;Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/CancellableContinuationImpl;->takeState$kotlinx_coroutines_core()Ljava/lang/Object; -HSPLkotlinx/coroutines/CancellableContinuationImpl;->tryResume(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/internal/Symbol; -HSPLkotlinx/coroutines/CancellableContinuationImpl;->tryResumeImpl(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/internal/Symbol; -HSPLkotlinx/coroutines/CancellableContinuationImplKt;->()V -HSPLkotlinx/coroutines/CancellableContinuationKt;->getOrCreateCancellableContinuation(Lkotlin/coroutines/Continuation;)Lkotlinx/coroutines/CancellableContinuationImpl; -HSPLkotlinx/coroutines/CancelledContinuation;->()V -HSPLkotlinx/coroutines/CancelledContinuation;->(Lkotlin/coroutines/Continuation;Ljava/lang/Throwable;Z)V -HSPLkotlinx/coroutines/ChildContinuation;->(Lkotlinx/coroutines/CancellableContinuationImpl;)V -HSPLkotlinx/coroutines/ChildContinuation;->invoke(Ljava/lang/Throwable;)V -HSPLkotlinx/coroutines/ChildHandleNode;->(Lkotlinx/coroutines/JobSupport;)V -HSPLkotlinx/coroutines/ChildHandleNode;->childCancelled(Ljava/lang/Throwable;)Z -HSPLkotlinx/coroutines/ChildHandleNode;->getParent()Lkotlinx/coroutines/Job; -HSPLkotlinx/coroutines/ChildHandleNode;->invoke(Ljava/lang/Throwable;)V -HSPLkotlinx/coroutines/CompletableDeferredImpl;->(Lkotlinx/coroutines/Job;)V -HSPLkotlinx/coroutines/CompletableDeferredImpl;->complete(Ljava/lang/Object;)Z -HSPLkotlinx/coroutines/CompletedContinuation;->(Ljava/lang/Object;Lkotlinx/coroutines/CancelHandler;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Ljava/lang/Throwable;)V -HSPLkotlinx/coroutines/CompletedContinuation;->(Ljava/lang/Object;Lkotlinx/coroutines/CancelHandler;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Ljava/util/concurrent/CancellationException;I)V -HSPLkotlinx/coroutines/CompletedContinuation;->copy$default(Lkotlinx/coroutines/CompletedContinuation;Lkotlinx/coroutines/CancelHandler;Ljava/util/concurrent/CancellationException;I)Lkotlinx/coroutines/CompletedContinuation; -HSPLkotlinx/coroutines/CompletedExceptionally;->()V -HSPLkotlinx/coroutines/CompletedExceptionally;->(Ljava/lang/Throwable;Z)V -HSPLkotlinx/coroutines/CompletedExceptionally;->getHandled()Z -HSPLkotlinx/coroutines/CompletionHandlerBase;->()V -HSPLkotlinx/coroutines/CompletionStateKt;->recoverResult(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1;->()V -HSPLkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1;->()V -HSPLkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/CoroutineContextKt;->foldCopies(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;Z)Lkotlin/coroutines/CoroutineContext; -HSPLkotlinx/coroutines/CoroutineContextKt;->newCoroutineContext(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; -HSPLkotlinx/coroutines/CoroutineDispatcher$Key$1;->()V -HSPLkotlinx/coroutines/CoroutineDispatcher$Key$1;->()V -HSPLkotlinx/coroutines/CoroutineDispatcher$Key;->()V -HSPLkotlinx/coroutines/CoroutineDispatcher;->()V -HSPLkotlinx/coroutines/CoroutineDispatcher;->()V -HSPLkotlinx/coroutines/CoroutineDispatcher;->dispatchYield(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V -HSPLkotlinx/coroutines/CoroutineDispatcher;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; -HSPLkotlinx/coroutines/CoroutineDispatcher;->interceptContinuation(Lkotlin/coroutines/jvm/internal/ContinuationImpl;)Lkotlinx/coroutines/internal/DispatchedContinuation; -HSPLkotlinx/coroutines/CoroutineDispatcher;->isDispatchNeeded()Z -HSPLkotlinx/coroutines/CoroutineDispatcher;->limitedParallelism(I)Lkotlinx/coroutines/CoroutineDispatcher; -HSPLkotlinx/coroutines/CoroutineDispatcher;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; -HSPLkotlinx/coroutines/CoroutineDispatcher;->releaseInterceptedContinuation(Lkotlin/coroutines/Continuation;)V -HSPLkotlinx/coroutines/CoroutineExceptionHandler$Key;->()V -HSPLkotlinx/coroutines/CoroutineExceptionHandler$Key;->()V -HSPLkotlinx/coroutines/CoroutineScopeKt;->CoroutineScope(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/internal/ContextScope; -HSPLkotlinx/coroutines/CoroutineScopeKt;->cancel$default(Lkotlinx/coroutines/CoroutineScope;)V -HSPLkotlinx/coroutines/CoroutineScopeKt;->coroutineScope(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/CoroutineScopeKt;->isActive(Lkotlinx/coroutines/CoroutineScope;)Z -HSPLkotlinx/coroutines/DefaultExecutor;->()V -HSPLkotlinx/coroutines/DefaultExecutor;->()V -HSPLkotlinx/coroutines/DefaultExecutor;->getThread()Ljava/lang/Thread; -HSPLkotlinx/coroutines/DefaultExecutor;->run()V -HSPLkotlinx/coroutines/DefaultExecutorKt;->()V -HSPLkotlinx/coroutines/DeferredCoroutine;->(Lkotlin/coroutines/CoroutineContext;Z)V -HSPLkotlinx/coroutines/DeferredCoroutine;->getCompleted()Ljava/lang/Object; -HSPLkotlinx/coroutines/DelayKt;->delay(JLkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/DispatchedCoroutine;->()V -HSPLkotlinx/coroutines/DispatchedCoroutine;->(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;)V -HSPLkotlinx/coroutines/DispatchedCoroutine;->afterResume(Ljava/lang/Object;)V -HSPLkotlinx/coroutines/DispatchedCoroutine;->getResult()Ljava/lang/Object; -HSPLkotlinx/coroutines/DispatchedTask;->(I)V -HSPLkotlinx/coroutines/DispatchedTask;->getExceptionalResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Throwable; -HSPLkotlinx/coroutines/DispatchedTask;->getSuccessfulResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/DispatchedTask;->handleFatalException(Ljava/lang/Throwable;Ljava/lang/Throwable;)V -HSPLkotlinx/coroutines/DispatchedTask;->run()V -HSPLkotlinx/coroutines/DispatchedTaskKt;->resume(Lkotlinx/coroutines/DispatchedTask;Lkotlin/coroutines/Continuation;Z)V -HSPLkotlinx/coroutines/Dispatchers;->()V -HSPLkotlinx/coroutines/DisposeOnCancel;->(Lkotlinx/coroutines/DisposableHandle;)V -HSPLkotlinx/coroutines/DisposeOnCancel;->invoke(Ljava/lang/Throwable;)V -HSPLkotlinx/coroutines/Empty;->(Z)V -HSPLkotlinx/coroutines/Empty;->getList()Lkotlinx/coroutines/NodeList; -HSPLkotlinx/coroutines/Empty;->isActive()Z -HSPLkotlinx/coroutines/EventLoop;->()V -HSPLkotlinx/coroutines/EventLoop;->decrementUseCount(Z)V -HSPLkotlinx/coroutines/EventLoop;->dispatchUnconfined(Lkotlinx/coroutines/DispatchedTask;)V -HSPLkotlinx/coroutines/EventLoop;->incrementUseCount(Z)V -HSPLkotlinx/coroutines/EventLoop;->isUnconfinedLoopActive()Z -HSPLkotlinx/coroutines/EventLoop;->processUnconfinedEvent()Z -HSPLkotlinx/coroutines/EventLoopImplBase$DelayedResumeTask;->(Lkotlinx/coroutines/EventLoopImplBase;JLkotlinx/coroutines/CancellableContinuationImpl;)V -HSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->(J)V -HSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->dispose()V -HSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->scheduleTask(JLkotlinx/coroutines/EventLoopImplBase$DelayedTaskQueue;Lkotlinx/coroutines/EventLoopImplBase;)I -HSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->setHeap(Lkotlinx/coroutines/EventLoopImplBase$DelayedTaskQueue;)V -HSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->setIndex(I)V -HSPLkotlinx/coroutines/EventLoopImplBase$DelayedTaskQueue;->(J)V -HSPLkotlinx/coroutines/EventLoopImplBase;->()V -HSPLkotlinx/coroutines/EventLoopImplBase;->()V -HSPLkotlinx/coroutines/EventLoopImplBase;->access$isCompleted(Lkotlinx/coroutines/EventLoopImplBase;)Z -HSPLkotlinx/coroutines/EventLoopImplBase;->processNextEvent()J -HSPLkotlinx/coroutines/EventLoopImplBase;->schedule(JLkotlinx/coroutines/EventLoopImplBase$DelayedTask;)V -HSPLkotlinx/coroutines/EventLoopImplBase;->scheduleResumeAfterDelay(JLkotlinx/coroutines/CancellableContinuationImpl;)V -HSPLkotlinx/coroutines/EventLoopImplPlatform;->()V -HSPLkotlinx/coroutines/EventLoop_commonKt;->()V -HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher;->()V -HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher;->()V -HSPLkotlinx/coroutines/ExecutorCoroutineDispatcherImpl;->(Ljava/util/concurrent/Executor;)V -HSPLkotlinx/coroutines/ExecutorCoroutineDispatcherImpl;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V -HSPLkotlinx/coroutines/ExecutorCoroutineDispatcherImpl;->equals(Ljava/lang/Object;)Z -HSPLkotlinx/coroutines/GlobalScope;->()V -HSPLkotlinx/coroutines/GlobalScope;->()V -HSPLkotlinx/coroutines/GlobalScope;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext; -HSPLkotlinx/coroutines/InvokeOnCancel;->(Lkotlin/jvm/functions/Function1;)V -HSPLkotlinx/coroutines/InvokeOnCancel;->invoke(Ljava/lang/Throwable;)V -HSPLkotlinx/coroutines/InvokeOnCompletion;->(Lkotlin/jvm/functions/Function1;)V -HSPLkotlinx/coroutines/Job$DefaultImpls;->invokeOnCompletion$default(Lkotlinx/coroutines/Job;ZLkotlinx/coroutines/JobNode;I)Lkotlinx/coroutines/DisposableHandle; -HSPLkotlinx/coroutines/Job$Key;->()V -HSPLkotlinx/coroutines/Job$Key;->()V -HSPLkotlinx/coroutines/JobCancellationException;->(Ljava/lang/String;Ljava/lang/Throwable;Lkotlinx/coroutines/Job;)V -HSPLkotlinx/coroutines/JobCancellationException;->equals(Ljava/lang/Object;)Z -HSPLkotlinx/coroutines/JobCancellationException;->fillInStackTrace()Ljava/lang/Throwable; -HSPLkotlinx/coroutines/JobCancellingNode;->()V -HSPLkotlinx/coroutines/JobImpl;->(Lkotlinx/coroutines/Job;)V -HSPLkotlinx/coroutines/JobImpl;->getHandlesException$kotlinx_coroutines_core()Z -HSPLkotlinx/coroutines/JobImpl;->getOnCancelComplete$kotlinx_coroutines_core()Z -HSPLkotlinx/coroutines/JobKt;->()V -HSPLkotlinx/coroutines/JobKt;->()V -HSPLkotlinx/coroutines/JobKt;->binarySearch(II[I)I -HSPLkotlinx/coroutines/JobKt;->createAndroidTypefaceApi28-RetOiIg(Ljava/lang/String;Landroidx/compose/ui/text/font/FontWeight;I)Landroid/graphics/Typeface; -HSPLkotlinx/coroutines/JobKt;->createDefault-FO1MlWM(Landroidx/compose/ui/text/font/FontWeight;I)Landroid/graphics/Typeface; -HSPLkotlinx/coroutines/JobKt;->createNamed-RetOiIg(Landroidx/compose/ui/text/font/GenericFontFamily;Landroidx/compose/ui/text/font/FontWeight;I)Landroid/graphics/Typeface; -HSPLkotlinx/coroutines/JobKt;->ensureActive(Lkotlin/coroutines/CoroutineContext;)V -HSPLkotlinx/coroutines/JobKt;->getJob(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/Job; -HSPLkotlinx/coroutines/JobKt;->isActive(Lkotlin/coroutines/CoroutineContext;)Z -HSPLkotlinx/coroutines/JobKt__FutureKt;->collectAsState(Lkotlinx/coroutines/flow/Flow;Ljava/lang/Object;Lkotlin/coroutines/CoroutineContext;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/MutableState; -HSPLkotlinx/coroutines/JobKt__FutureKt;->derivedStateOf(Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/DerivedSnapshotState; -HSPLkotlinx/coroutines/JobKt__FutureKt;->mutableStateOf$default(Ljava/lang/Object;)Landroidx/compose/runtime/ParcelableSnapshotMutableState; -HSPLkotlinx/coroutines/JobKt__FutureKt;->mutableStateOf(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)Landroidx/compose/runtime/ParcelableSnapshotMutableState; -HSPLkotlinx/coroutines/JobKt__FutureKt;->observeDerivedStateRecalculations(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V -HSPLkotlinx/coroutines/JobKt__FutureKt;->rememberUpdatedState(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/MutableState; -HSPLkotlinx/coroutines/JobKt__FutureKt;->snapshotFlow(Lkotlin/jvm/functions/Function0;)Lkotlinx/coroutines/flow/SafeFlow; -HSPLkotlinx/coroutines/JobNode;->()V -HSPLkotlinx/coroutines/JobNode;->dispose()V -HSPLkotlinx/coroutines/JobNode;->getJob()Lkotlinx/coroutines/JobSupport; -HSPLkotlinx/coroutines/JobNode;->getList()Lkotlinx/coroutines/NodeList; -HSPLkotlinx/coroutines/JobNode;->isActive()Z -HSPLkotlinx/coroutines/JobSupport$AwaitContinuation;->(Lkotlin/coroutines/Continuation;Lkotlinx/coroutines/JobSupport;)V -HSPLkotlinx/coroutines/JobSupport$ChildCompletion;->(Lkotlinx/coroutines/JobSupport;Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)V -HSPLkotlinx/coroutines/JobSupport$ChildCompletion;->invoke(Ljava/lang/Throwable;)V -HSPLkotlinx/coroutines/JobSupport$Finishing;->(Lkotlinx/coroutines/NodeList;Ljava/lang/Throwable;)V -HSPLkotlinx/coroutines/JobSupport$Finishing;->addExceptionLocked(Ljava/lang/Throwable;)V -HSPLkotlinx/coroutines/JobSupport$Finishing;->getList()Lkotlinx/coroutines/NodeList; -HSPLkotlinx/coroutines/JobSupport$Finishing;->getRootCause()Ljava/lang/Throwable; -HSPLkotlinx/coroutines/JobSupport$Finishing;->isActive()Z -HSPLkotlinx/coroutines/JobSupport$Finishing;->isCancelling()Z -HSPLkotlinx/coroutines/JobSupport$Finishing;->isCompleting()Z -HSPLkotlinx/coroutines/JobSupport$Finishing;->isSealed()Z -HSPLkotlinx/coroutines/JobSupport$Finishing;->sealLocked(Ljava/lang/Throwable;)Ljava/util/ArrayList; -HSPLkotlinx/coroutines/JobSupport$Finishing;->setCompleting()V -HSPLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;->(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/JobSupport;Ljava/lang/Object;)V -HSPLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;->prepare(Ljava/lang/Object;)Lkotlinx/coroutines/internal/Symbol; -HSPLkotlinx/coroutines/JobSupport;->()V -HSPLkotlinx/coroutines/JobSupport;->(Z)V -HSPLkotlinx/coroutines/JobSupport;->afterCompletion(Ljava/lang/Object;)V -HSPLkotlinx/coroutines/JobSupport;->attachChild(Lkotlinx/coroutines/JobSupport;)Lkotlinx/coroutines/ChildHandle; -HSPLkotlinx/coroutines/JobSupport;->awaitInternal$kotlinx_coroutines_core(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/JobSupport;->cancel(Ljava/util/concurrent/CancellationException;)V -HSPLkotlinx/coroutines/JobSupport;->cancelImpl$kotlinx_coroutines_core(Ljava/lang/Object;)Z -HSPLkotlinx/coroutines/JobSupport;->cancelInternal(Ljava/util/concurrent/CancellationException;)V -HSPLkotlinx/coroutines/JobSupport;->cancelParent(Ljava/lang/Throwable;)Z -HSPLkotlinx/coroutines/JobSupport;->cancellationExceptionMessage()Ljava/lang/String; -HSPLkotlinx/coroutines/JobSupport;->childCancelled(Ljava/lang/Throwable;)Z -HSPLkotlinx/coroutines/JobSupport;->completeStateFinalization(Lkotlinx/coroutines/Incomplete;Ljava/lang/Object;)V -HSPLkotlinx/coroutines/JobSupport;->createCauseException(Ljava/lang/Object;)Ljava/lang/Throwable; -HSPLkotlinx/coroutines/JobSupport;->finalizeFinishingState(Lkotlinx/coroutines/JobSupport$Finishing;Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/JobSupport;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; -HSPLkotlinx/coroutines/JobSupport;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; -HSPLkotlinx/coroutines/JobSupport;->getCancellationException()Ljava/util/concurrent/CancellationException; -HSPLkotlinx/coroutines/JobSupport;->getChildJobCancellationCause()Ljava/util/concurrent/CancellationException; -HSPLkotlinx/coroutines/JobSupport;->getCompletedInternal$kotlinx_coroutines_core()Ljava/lang/Object; -HSPLkotlinx/coroutines/JobSupport;->getFinalRootCause(Lkotlinx/coroutines/JobSupport$Finishing;Ljava/util/ArrayList;)Ljava/lang/Throwable; -HSPLkotlinx/coroutines/JobSupport;->getKey()Lkotlin/coroutines/CoroutineContext$Key; -HSPLkotlinx/coroutines/JobSupport;->getOnCancelComplete$kotlinx_coroutines_core()Z -HSPLkotlinx/coroutines/JobSupport;->getOrPromoteCancellingList(Lkotlinx/coroutines/Incomplete;)Lkotlinx/coroutines/NodeList; -HSPLkotlinx/coroutines/JobSupport;->getParentHandle$kotlinx_coroutines_core()Lkotlinx/coroutines/ChildHandle; -HSPLkotlinx/coroutines/JobSupport;->getState$kotlinx_coroutines_core()Ljava/lang/Object; -HSPLkotlinx/coroutines/JobSupport;->initParentJob(Lkotlinx/coroutines/Job;)V -HSPLkotlinx/coroutines/JobSupport;->invokeOnCompletion(Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/DisposableHandle; -HSPLkotlinx/coroutines/JobSupport;->invokeOnCompletion(ZZLkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/DisposableHandle; -HSPLkotlinx/coroutines/JobSupport;->isActive()Z -HSPLkotlinx/coroutines/JobSupport;->isScopedCoroutine()Z -HSPLkotlinx/coroutines/JobSupport;->join(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/JobSupport;->makeCompleting$kotlinx_coroutines_core(Ljava/lang/Object;)Z -HSPLkotlinx/coroutines/JobSupport;->makeCompletingOnce$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/JobSupport;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; -HSPLkotlinx/coroutines/JobSupport;->nextChild(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Lkotlinx/coroutines/ChildHandleNode; -HSPLkotlinx/coroutines/JobSupport;->notifyCancelling(Lkotlinx/coroutines/NodeList;Ljava/lang/Throwable;)V -HSPLkotlinx/coroutines/JobSupport;->onCompletionInternal(Ljava/lang/Object;)V -HSPLkotlinx/coroutines/JobSupport;->parentCancelled(Lkotlinx/coroutines/JobSupport;)V -HSPLkotlinx/coroutines/JobSupport;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; -HSPLkotlinx/coroutines/JobSupport;->promoteSingleToNodeList(Lkotlinx/coroutines/JobNode;)V -HSPLkotlinx/coroutines/JobSupport;->start()Z -HSPLkotlinx/coroutines/JobSupport;->startInternal(Ljava/lang/Object;)I -HSPLkotlinx/coroutines/JobSupport;->tryMakeCompleting(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/JobSupport;->tryWaitForChild(Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)Z -HSPLkotlinx/coroutines/JobSupportKt;->()V -HSPLkotlinx/coroutines/JobSupportKt;->unboxState(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/JobSupportKt;->valueIterator(Landroidx/collection/SparseArrayCompat;)Landroidx/collection/SparseArrayKt$valueIterator$1; -HSPLkotlinx/coroutines/MainCoroutineDispatcher;->()V -HSPLkotlinx/coroutines/NodeList;->()V -HSPLkotlinx/coroutines/NodeList;->getList()Lkotlinx/coroutines/NodeList; -HSPLkotlinx/coroutines/NodeList;->isActive()Z -HSPLkotlinx/coroutines/NonDisposableHandle;->()V -HSPLkotlinx/coroutines/NonDisposableHandle;->()V -HSPLkotlinx/coroutines/NonDisposableHandle;->dispose()V -HSPLkotlinx/coroutines/ResumeAwaitOnCompletion;->(Lkotlinx/coroutines/JobSupport$AwaitContinuation;)V -HSPLkotlinx/coroutines/ResumeAwaitOnCompletion;->invoke(Ljava/lang/Throwable;)V -HSPLkotlinx/coroutines/ResumeOnCompletion;->(Lkotlinx/coroutines/CancellableContinuationImpl;)V -HSPLkotlinx/coroutines/ResumeOnCompletion;->invoke(Ljava/lang/Throwable;)V -HSPLkotlinx/coroutines/StandaloneCoroutine;->(Lkotlin/coroutines/CoroutineContext;Z)V -HSPLkotlinx/coroutines/SupervisorJobImpl;->(Lkotlinx/coroutines/Job;)V -HSPLkotlinx/coroutines/SupervisorKt;->SupervisorJob$default()Lkotlinx/coroutines/SupervisorJobImpl; -HSPLkotlinx/coroutines/ThreadLocalEventLoop;->()V -HSPLkotlinx/coroutines/ThreadLocalEventLoop;->getEventLoop$kotlinx_coroutines_core()Lkotlinx/coroutines/EventLoop; -HSPLkotlinx/coroutines/Unconfined;->()V -HSPLkotlinx/coroutines/Unconfined;->()V -HSPLkotlinx/coroutines/UndispatchedCoroutine;->(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;)V -HSPLkotlinx/coroutines/UndispatchedMarker;->()V -HSPLkotlinx/coroutines/UndispatchedMarker;->()V -HSPLkotlinx/coroutines/UndispatchedMarker;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; -HSPLkotlinx/coroutines/UndispatchedMarker;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; -HSPLkotlinx/coroutines/UndispatchedMarker;->getKey()Lkotlin/coroutines/CoroutineContext$Key; -HSPLkotlinx/coroutines/YieldContext$Key;->()V -HSPLkotlinx/coroutines/YieldContext;->()V -HSPLkotlinx/coroutines/YieldContext;->()V -HSPLkotlinx/coroutines/android/AndroidDispatcherFactory;->()V -HSPLkotlinx/coroutines/android/AndroidDispatcherFactory;->createDispatcher(Ljava/util/List;)Lkotlinx/coroutines/MainCoroutineDispatcher; -HSPLkotlinx/coroutines/android/HandlerContext$scheduleResumeAfterDelay$$inlined$Runnable$1;->(Lkotlinx/coroutines/CancellableContinuationImpl;Lkotlinx/coroutines/android/HandlerContext;)V -HSPLkotlinx/coroutines/android/HandlerContext$scheduleResumeAfterDelay$1;->(Lkotlinx/coroutines/android/HandlerContext;Lkotlinx/coroutines/android/HandlerContext$scheduleResumeAfterDelay$$inlined$Runnable$1;)V -HSPLkotlinx/coroutines/android/HandlerContext$scheduleResumeAfterDelay$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/android/HandlerContext;->(Landroid/os/Handler;)V -HSPLkotlinx/coroutines/android/HandlerContext;->(Landroid/os/Handler;Ljava/lang/String;Z)V -HSPLkotlinx/coroutines/android/HandlerContext;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V -HSPLkotlinx/coroutines/android/HandlerContext;->equals(Ljava/lang/Object;)Z -HSPLkotlinx/coroutines/android/HandlerContext;->getImmediate()Lkotlinx/coroutines/MainCoroutineDispatcher; -HSPLkotlinx/coroutines/android/HandlerContext;->isDispatchNeeded()Z -HSPLkotlinx/coroutines/android/HandlerContext;->scheduleResumeAfterDelay(JLkotlinx/coroutines/CancellableContinuationImpl;)V -HSPLkotlinx/coroutines/android/HandlerDispatcher;->()V -HSPLkotlinx/coroutines/android/HandlerDispatcherKt;->()V -HSPLkotlinx/coroutines/android/HandlerDispatcherKt;->asHandler(Landroid/os/Looper;)Landroid/os/Handler; -HSPLkotlinx/coroutines/channels/AbstractChannel$Itr;->(Lkotlinx/coroutines/channels/AbstractChannel;)V -HSPLkotlinx/coroutines/channels/AbstractChannel$Itr;->hasNext(Lkotlin/coroutines/jvm/internal/ContinuationImpl;)Ljava/lang/Object; -HSPLkotlinx/coroutines/channels/AbstractChannel$Itr;->next()Ljava/lang/Object; -HSPLkotlinx/coroutines/channels/AbstractChannel$ReceiveElement;->(Lkotlinx/coroutines/CancellableContinuationImpl;I)V -HSPLkotlinx/coroutines/channels/AbstractChannel$ReceiveElement;->completeResumeReceive(Ljava/lang/Object;)V -HSPLkotlinx/coroutines/channels/AbstractChannel$ReceiveElement;->tryResumeReceive(Ljava/lang/Object;)Lkotlinx/coroutines/internal/Symbol; -HSPLkotlinx/coroutines/channels/AbstractChannel$ReceiveHasNext;->(Lkotlinx/coroutines/channels/AbstractChannel$Itr;Lkotlinx/coroutines/CancellableContinuationImpl;)V -HSPLkotlinx/coroutines/channels/AbstractChannel$ReceiveHasNext;->completeResumeReceive(Ljava/lang/Object;)V -HSPLkotlinx/coroutines/channels/AbstractChannel$ReceiveHasNext;->resumeOnCancellationFun(Ljava/lang/Object;)Lkotlin/jvm/functions/Function1; -HSPLkotlinx/coroutines/channels/AbstractChannel$ReceiveHasNext;->tryResumeReceive(Ljava/lang/Object;)Lkotlinx/coroutines/internal/Symbol; -HSPLkotlinx/coroutines/channels/AbstractChannel$RemoveReceiveOnCancel;->(Lkotlinx/coroutines/channels/AbstractChannel;Lkotlinx/coroutines/channels/Receive;)V -HSPLkotlinx/coroutines/channels/AbstractChannel$RemoveReceiveOnCancel;->invoke(Ljava/lang/Throwable;)V -HSPLkotlinx/coroutines/channels/AbstractChannel$enqueueReceiveInternal$$inlined$addLastIfPrevAndIf$1;->(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/channels/AbstractChannel;)V -HSPLkotlinx/coroutines/channels/AbstractChannel$enqueueReceiveInternal$$inlined$addLastIfPrevAndIf$1;->prepare(Ljava/lang/Object;)Lkotlinx/coroutines/internal/Symbol; -HSPLkotlinx/coroutines/channels/AbstractChannel$receiveCatching$1;->(Lkotlinx/coroutines/channels/AbstractChannel;Lkotlin/coroutines/Continuation;)V -HSPLkotlinx/coroutines/channels/AbstractChannel$receiveCatching$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/channels/AbstractChannel;->(Lkotlin/jvm/functions/Function1;)V -HSPLkotlinx/coroutines/channels/AbstractChannel;->enqueueReceiveInternal(Lkotlinx/coroutines/channels/Receive;)Z -HSPLkotlinx/coroutines/channels/AbstractChannel;->iterator()Lkotlinx/coroutines/channels/ChannelIterator; -HSPLkotlinx/coroutines/channels/AbstractChannel;->pollInternal()Ljava/lang/Object; -HSPLkotlinx/coroutines/channels/AbstractChannel;->receive(Lkotlin/coroutines/jvm/internal/SuspendLambda;)Ljava/lang/Object; -HSPLkotlinx/coroutines/channels/AbstractChannel;->receiveCatching-JP2dKIU(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/channels/AbstractChannel;->receiveSuspend(ILkotlin/coroutines/jvm/internal/ContinuationImpl;)Ljava/lang/Object; -HSPLkotlinx/coroutines/channels/AbstractChannel;->takeFirstReceiveOrPeekClosed()Lkotlinx/coroutines/channels/ReceiveOrClosed; -HSPLkotlinx/coroutines/channels/AbstractChannel;->tryReceive-PtdJZtk()Ljava/lang/Object; -HSPLkotlinx/coroutines/channels/AbstractChannelKt;->()V -HSPLkotlinx/coroutines/channels/AbstractSendChannel$SendBuffered;->(Ljava/lang/Object;)V -HSPLkotlinx/coroutines/channels/AbstractSendChannel$SendBuffered;->completeResumeSend()V -HSPLkotlinx/coroutines/channels/AbstractSendChannel$SendBuffered;->getPollResult()Ljava/lang/Object; -HSPLkotlinx/coroutines/channels/AbstractSendChannel$SendBuffered;->tryResumeSend()Lkotlinx/coroutines/internal/Symbol; -HSPLkotlinx/coroutines/channels/AbstractSendChannel;->()V -HSPLkotlinx/coroutines/channels/AbstractSendChannel;->(Lkotlin/jvm/functions/Function1;)V -HSPLkotlinx/coroutines/channels/AbstractSendChannel;->getClosedForSend()Lkotlinx/coroutines/channels/Closed; -HSPLkotlinx/coroutines/channels/AbstractSendChannel;->invokeOnClose(Lkotlinx/coroutines/channels/ProduceKt$awaitClose$4$1;)V -HSPLkotlinx/coroutines/channels/AbstractSendChannel;->offerInternal(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/channels/AbstractSendChannel;->send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/channels/AbstractSendChannel;->takeFirstReceiveOrPeekClosed()Lkotlinx/coroutines/channels/ReceiveOrClosed; -HSPLkotlinx/coroutines/channels/AbstractSendChannel;->takeFirstSendOrPeekClosed()Lkotlinx/coroutines/channels/Send; -HSPLkotlinx/coroutines/channels/AbstractSendChannel;->trySend-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/channels/ArrayChannel;->(ILkotlinx/coroutines/channels/BufferOverflow;Lkotlin/jvm/functions/Function1;)V -HSPLkotlinx/coroutines/channels/ArrayChannel;->enqueueElement(ILjava/lang/Object;)V -HSPLkotlinx/coroutines/channels/ArrayChannel;->enqueueReceiveInternal(Lkotlinx/coroutines/channels/Receive;)Z -HSPLkotlinx/coroutines/channels/ArrayChannel;->isBufferAlwaysEmpty()Z -HSPLkotlinx/coroutines/channels/ArrayChannel;->isBufferEmpty()Z -HSPLkotlinx/coroutines/channels/ArrayChannel;->offerInternal(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/channels/ArrayChannel;->pollInternal()Ljava/lang/Object; -HSPLkotlinx/coroutines/channels/BufferOverflow;->()V -HSPLkotlinx/coroutines/channels/BufferOverflow;->(ILjava/lang/String;)V -HSPLkotlinx/coroutines/channels/Channel$Factory;->()V -HSPLkotlinx/coroutines/channels/Channel$Factory;->()V -HSPLkotlinx/coroutines/channels/Channel;->()V -HSPLkotlinx/coroutines/channels/ChannelCoroutine;->(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/channels/AbstractChannel;)V -HSPLkotlinx/coroutines/channels/ChannelCoroutine;->invokeOnClose(Lkotlinx/coroutines/channels/ProduceKt$awaitClose$4$1;)V -HSPLkotlinx/coroutines/channels/ChannelCoroutine;->receiveCatching-JP2dKIU(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/channels/ChannelCoroutine;->send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/channels/ChannelCoroutine;->trySend-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/channels/ChannelKt;->Channel$default(ILkotlinx/coroutines/channels/BufferOverflow;I)Lkotlinx/coroutines/channels/AbstractChannel; -HSPLkotlinx/coroutines/channels/ChannelResult$Failed;->()V -HSPLkotlinx/coroutines/channels/ChannelResult;->()V -HSPLkotlinx/coroutines/channels/ChannelResult;->(Ljava/lang/Object;)V -HSPLkotlinx/coroutines/channels/ChannelResult;->getOrNull-impl(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/channels/ChannelResult;->getOrThrow-impl(Ljava/lang/Object;)V -HSPLkotlinx/coroutines/channels/ConflatedChannel;->(Lkotlin/jvm/functions/Function1;)V -HSPLkotlinx/coroutines/channels/ConflatedChannel;->enqueueReceiveInternal(Lkotlinx/coroutines/channels/Receive;)Z -HSPLkotlinx/coroutines/channels/ConflatedChannel;->isBufferAlwaysEmpty()Z -HSPLkotlinx/coroutines/channels/ConflatedChannel;->isBufferEmpty()Z -HSPLkotlinx/coroutines/channels/ConflatedChannel;->offerInternal(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/channels/ConflatedChannel;->pollInternal()Ljava/lang/Object; -HSPLkotlinx/coroutines/channels/LinkedListChannel;->(Lkotlin/jvm/functions/Function1;)V -HSPLkotlinx/coroutines/channels/LinkedListChannel;->isBufferAlwaysEmpty()Z -HSPLkotlinx/coroutines/channels/LinkedListChannel;->offerInternal(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/channels/ProduceKt$awaitClose$1;->(Lkotlin/coroutines/Continuation;)V -HSPLkotlinx/coroutines/channels/ProduceKt$awaitClose$4$1;->(Lkotlinx/coroutines/CancellableContinuationImpl;)V -HSPLkotlinx/coroutines/channels/ProduceKt;->awaitClose(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/channels/ProducerCoroutine;->(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/channels/AbstractChannel;)V -HSPLkotlinx/coroutines/channels/ProducerCoroutine;->getChannel()Lkotlinx/coroutines/channels/ProducerCoroutine; -HSPLkotlinx/coroutines/channels/ProducerCoroutine;->isActive()Z -HSPLkotlinx/coroutines/channels/Receive;->()V -HSPLkotlinx/coroutines/channels/Receive;->getOfferResult()Ljava/lang/Object; -HSPLkotlinx/coroutines/channels/Receive;->resumeOnCancellationFun(Ljava/lang/Object;)Lkotlin/jvm/functions/Function1; -HSPLkotlinx/coroutines/channels/RendezvousChannel;->(Lkotlin/jvm/functions/Function1;)V -HSPLkotlinx/coroutines/channels/RendezvousChannel;->isBufferAlwaysEmpty()Z -HSPLkotlinx/coroutines/channels/Send;->()V -HSPLkotlinx/coroutines/flow/AbstractFlow$collect$1;->(Lkotlinx/coroutines/flow/AbstractFlow;Lkotlin/coroutines/Continuation;)V -HSPLkotlinx/coroutines/flow/AbstractFlow;->()V -HSPLkotlinx/coroutines/flow/AbstractFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/CallbackFlowBuilder$collectTo$1;->(Lkotlinx/coroutines/flow/CallbackFlowBuilder;Lkotlin/coroutines/Continuation;)V -HSPLkotlinx/coroutines/flow/CallbackFlowBuilder;->(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V -HSPLkotlinx/coroutines/flow/CallbackFlowBuilder;->collectTo(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/CallbackFlowBuilder;->create(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/internal/ChannelFlow; -HSPLkotlinx/coroutines/flow/ChannelFlowBuilder;->(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V -HSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2$emit$1;->(Lkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;Lkotlin/coroutines/Continuation;)V -HSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;->(Lkotlinx/coroutines/flow/DistinctFlowImpl;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/flow/FlowCollector;)V -HSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/DistinctFlowImpl;->(Lkotlinx/coroutines/flow/Flow;)V -HSPLkotlinx/coroutines/flow/DistinctFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/FlowKt;->buffer$default(Lkotlinx/coroutines/flow/Flow;I)Lkotlinx/coroutines/flow/Flow; -HSPLkotlinx/coroutines/flow/FlowKt;->distinctUntilChanged(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow; -HSPLkotlinx/coroutines/flow/FlowKt;->first(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/FlowKt;->first(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/FlowKt;->firstOrNull(Lcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$getChangeListVersions$$inlined$map$1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/FlowKt;->stateIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/SharingStarted;Ljava/lang/Object;)Lkotlinx/coroutines/flow/ReadonlyStateFlow; -HSPLkotlinx/coroutines/flow/FlowKt__BuildersKt$flowOf$$inlined$unsafeFlow$2;->(Ljava/lang/Object;)V -HSPLkotlinx/coroutines/flow/FlowKt__BuildersKt$flowOf$$inlined$unsafeFlow$2;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/FlowKt__ChannelsKt$emitAllImpl$1;->(Lkotlin/coroutines/Continuation;)V -HSPLkotlinx/coroutines/flow/FlowKt__ChannelsKt$emitAllImpl$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/FlowKt__ChannelsKt;->emitAllImpl$FlowKt__ChannelsKt(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/channels/Channel;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;->()V -HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;->()V -HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultKeySelector$1;->()V -HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultKeySelector$1;->()V -HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultKeySelector$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;->(Lkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;)V -HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1$emit$1;->(Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;Lkotlin/coroutines/Continuation;)V -HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;->(Lkotlin/jvm/internal/Ref$BooleanRef;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/functions/Function2;)V -HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;->(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V -HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/FlowKt__MergeKt;->()V -HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$1;->(Lkotlin/jvm/internal/Ref$ObjectRef;)V -HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2$1;->(Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;Lkotlin/coroutines/Continuation;)V -HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;->(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/internal/Ref$ObjectRef;)V -HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$1;->(Lkotlin/coroutines/Continuation;)V -HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$3;->(Lkotlin/coroutines/Continuation;)V -HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$firstOrNull$$inlined$collectWhile$1;->(Lkotlin/jvm/internal/Ref$ObjectRef;)V -HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$firstOrNull$$inlined$collectWhile$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$firstOrNull$1;->(Lkotlin/coroutines/Continuation;)V -HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/MutableSharedFlow;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V -HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->(Lkotlinx/coroutines/flow/SharingStarted;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/MutableSharedFlow;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V -HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2$1;->(Lkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2;Lkotlin/coroutines/Continuation;)V -HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/functions/Function2;)V -HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$unsafeFlow$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)V -HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$1$1;->(Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)V -HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$nullArrayFactory$1;->()V -HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$nullArrayFactory$1;->()V -HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$nullArrayFactory$1;->invoke()Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/ReadonlySharedFlow;->(Lkotlinx/coroutines/flow/SharedFlowImpl;)V -HSPLkotlinx/coroutines/flow/ReadonlySharedFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/ReadonlyStateFlow;->(Lkotlinx/coroutines/flow/StateFlowImpl;Lkotlinx/coroutines/StandaloneCoroutine;)V -HSPLkotlinx/coroutines/flow/ReadonlyStateFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/ReadonlyStateFlow;->getValue()Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/SafeFlow;->(Lkotlin/jvm/functions/Function2;)V -HSPLkotlinx/coroutines/flow/SharedFlowImpl$collect$1;->(Lkotlinx/coroutines/flow/SharedFlowImpl;Lkotlin/coroutines/Continuation;)V -HSPLkotlinx/coroutines/flow/SharedFlowImpl$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/SharedFlowImpl;->(IILkotlinx/coroutines/channels/BufferOverflow;)V -HSPLkotlinx/coroutines/flow/SharedFlowImpl;->awaitValue(Lkotlinx/coroutines/flow/SharedFlowSlot;Lkotlinx/coroutines/flow/SharedFlowImpl$collect$1;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/SharedFlowImpl;->cleanupTailLocked()V -HSPLkotlinx/coroutines/flow/SharedFlowImpl;->collect$suspendImpl(Lkotlinx/coroutines/flow/SharedFlowImpl;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/intrinsics/CoroutineSingletons; -HSPLkotlinx/coroutines/flow/SharedFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/SharedFlowImpl;->createSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot; -HSPLkotlinx/coroutines/flow/SharedFlowImpl;->createSlotArray()[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot; -HSPLkotlinx/coroutines/flow/SharedFlowImpl;->dropOldestLocked()V -HSPLkotlinx/coroutines/flow/SharedFlowImpl;->enqueueLocked(Ljava/lang/Object;)V -HSPLkotlinx/coroutines/flow/SharedFlowImpl;->findSlotsToResumeLocked([Lkotlin/coroutines/Continuation;)[Lkotlin/coroutines/Continuation; -HSPLkotlinx/coroutines/flow/SharedFlowImpl;->getHead()J -HSPLkotlinx/coroutines/flow/SharedFlowImpl;->growBuffer(II[Ljava/lang/Object;)[Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryEmit(Ljava/lang/Object;)Z -HSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryEmitLocked(Ljava/lang/Object;)Z -HSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryPeekLocked(Lkotlinx/coroutines/flow/SharedFlowSlot;)J -HSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryTakeValue(Lkotlinx/coroutines/flow/SharedFlowSlot;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/SharedFlowImpl;->updateBufferLocked(JJJJ)V -HSPLkotlinx/coroutines/flow/SharedFlowImpl;->updateCollectorIndexLocked$kotlinx_coroutines_core(J)[Lkotlin/coroutines/Continuation; -HSPLkotlinx/coroutines/flow/SharedFlowKt;->()V -HSPLkotlinx/coroutines/flow/SharedFlowKt;->MutableSharedFlow$default(III)Lkotlinx/coroutines/flow/SharedFlowImpl; -HSPLkotlinx/coroutines/flow/SharedFlowSlot;->()V -HSPLkotlinx/coroutines/flow/SharedFlowSlot;->allocateLocked(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)Z -HSPLkotlinx/coroutines/flow/SharedFlowSlot;->freeLocked(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)[Lkotlin/coroutines/Continuation; -HSPLkotlinx/coroutines/flow/SharingCommand;->()V -HSPLkotlinx/coroutines/flow/SharingCommand;->(ILjava/lang/String;)V -HSPLkotlinx/coroutines/flow/SharingConfig;->(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/flow/Flow;)V -HSPLkotlinx/coroutines/flow/SharingStarted$Companion;->()V -HSPLkotlinx/coroutines/flow/SharingStarted$Companion;->WhileSubscribed$default(JI)Lkotlinx/coroutines/flow/StartedWhileSubscribed; -HSPLkotlinx/coroutines/flow/StartedEagerly;->()V -HSPLkotlinx/coroutines/flow/StartedLazily;->()V -HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;->(Lkotlinx/coroutines/flow/StartedWhileSubscribed;Lkotlin/coroutines/Continuation;)V -HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->(Lkotlin/coroutines/Continuation;)V -HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->(JJ)V -HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->command(Lkotlinx/coroutines/flow/StateFlow;)Lkotlinx/coroutines/flow/Flow; -HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->equals(Ljava/lang/Object;)Z -HSPLkotlinx/coroutines/flow/StateFlowImpl$collect$1;->(Lkotlinx/coroutines/flow/StateFlowImpl;Lkotlin/coroutines/Continuation;)V -HSPLkotlinx/coroutines/flow/StateFlowImpl$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/StateFlowImpl;->(Ljava/lang/Object;)V -HSPLkotlinx/coroutines/flow/StateFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/StateFlowImpl;->createSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot; -HSPLkotlinx/coroutines/flow/StateFlowImpl;->createSlotArray()[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot; -HSPLkotlinx/coroutines/flow/StateFlowImpl;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/StateFlowImpl;->getValue()Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/StateFlowImpl;->setValue(Ljava/lang/Object;)V -HSPLkotlinx/coroutines/flow/StateFlowImpl;->updateState(Ljava/lang/Object;Ljava/lang/Object;)Z -HSPLkotlinx/coroutines/flow/StateFlowKt;->()V -HSPLkotlinx/coroutines/flow/StateFlowKt;->MutableStateFlow(Ljava/lang/Object;)Lkotlinx/coroutines/flow/StateFlowImpl; -HSPLkotlinx/coroutines/flow/StateFlowSlot;->()V -HSPLkotlinx/coroutines/flow/StateFlowSlot;->()V -HSPLkotlinx/coroutines/flow/StateFlowSlot;->allocateLocked(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)Z -HSPLkotlinx/coroutines/flow/StateFlowSlot;->freeLocked(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)[Lkotlin/coroutines/Continuation; -HSPLkotlinx/coroutines/flow/internal/AbortFlowException;->(Lkotlinx/coroutines/flow/FlowCollector;)V -HSPLkotlinx/coroutines/flow/internal/AbortFlowException;->fillInStackTrace()Ljava/lang/Throwable; -HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->()V -HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->allocateSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot; -HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->freeSlot(Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;)V -HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->getSubscriptionCount()Lkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow; -HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlowKt;->()V -HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;->()V -HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->(Lkotlin/coroutines/Continuation;Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/flow/internal/ChannelFlow;)V -HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;->(Lkotlinx/coroutines/flow/internal/ChannelFlow;Lkotlin/coroutines/Continuation;)V -HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/internal/ChannelFlow;->(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V -HSPLkotlinx/coroutines/flow/internal/ChannelFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/internal/ChannelFlow;->dropChannelOperators()Lkotlinx/coroutines/flow/Flow; -HSPLkotlinx/coroutines/flow/internal/ChannelFlow;->fuse(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/Flow; -HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperator;->(ILkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/channels/BufferOverflow;Lkotlinx/coroutines/flow/Flow;)V -HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperator;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperator;->collectTo(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V -HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$emit$1;->(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;Lkotlin/coroutines/Continuation;)V -HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;->(Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;)V -HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)V -HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->(Lkotlin/jvm/functions/Function3;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V -HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->create(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/internal/ChannelFlow; -HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->flowCollect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/internal/ChildCancelledException;->()V -HSPLkotlinx/coroutines/flow/internal/ChildCancelledException;->fillInStackTrace()Ljava/lang/Throwable; -HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1$emit$1;->(Lkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1;Lkotlin/coroutines/Continuation;)V -HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1;->(Lkotlinx/coroutines/channels/Channel;I)V -HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1;->([Lkotlinx/coroutines/flow/Flow;ILjava/util/concurrent/atomic/AtomicInteger;Lkotlinx/coroutines/channels/Channel;Lkotlin/coroutines/Continuation;)V -HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;->(Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Lkotlinx/coroutines/flow/FlowCollector;[Lkotlinx/coroutines/flow/Flow;)V -HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/internal/DownstreamExceptionContext;->(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Throwable;)V -HSPLkotlinx/coroutines/flow/internal/FlowCoroutine;->(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;)V -HSPLkotlinx/coroutines/flow/internal/NoOpContinuation;->()V -HSPLkotlinx/coroutines/flow/internal/NoOpContinuation;->()V -HSPLkotlinx/coroutines/flow/internal/NopCollector;->()V -HSPLkotlinx/coroutines/flow/internal/NopCollector;->()V -HSPLkotlinx/coroutines/flow/internal/NopCollector;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;->()V -HSPLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;->()V -HSPLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/internal/SafeCollector;->(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/CoroutineContext;)V -HSPLkotlinx/coroutines/flow/internal/SafeCollector;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/internal/SafeCollector;->emit(Lkotlin/coroutines/Continuation;Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/internal/SafeCollector;->getContext()Lkotlin/coroutines/CoroutineContext; -HSPLkotlinx/coroutines/flow/internal/SafeCollector;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/internal/SafeCollector;->releaseIntercepted()V -HSPLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;->()V -HSPLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;->()V -HSPLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/internal/SafeCollectorKt;->()V -HSPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1;->(Lkotlinx/coroutines/flow/internal/SafeCollector;)V -HSPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/internal/SendingCollector;->(Lkotlinx/coroutines/channels/SendChannel;)V -HSPLkotlinx/coroutines/flow/internal/SendingCollector;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow;->(I)V -HSPLkotlinx/coroutines/internal/ArrayQueue;->()V -HSPLkotlinx/coroutines/internal/AtomicKt;->()V -HSPLkotlinx/coroutines/internal/AtomicOp;->()V -HSPLkotlinx/coroutines/internal/AtomicOp;->()V -HSPLkotlinx/coroutines/internal/AtomicOp;->perform(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/internal/ConcurrentKt;->()V -HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->()V -HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->(Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;)V -HSPLkotlinx/coroutines/internal/ContextScope;->(Lkotlin/coroutines/CoroutineContext;)V -HSPLkotlinx/coroutines/internal/ContextScope;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext; -HSPLkotlinx/coroutines/internal/DispatchedContinuation;->()V -HSPLkotlinx/coroutines/internal/DispatchedContinuation;->(Lkotlinx/coroutines/CoroutineDispatcher;Lkotlin/coroutines/jvm/internal/ContinuationImpl;)V -HSPLkotlinx/coroutines/internal/DispatchedContinuation;->claimReusableCancellableContinuation()Lkotlinx/coroutines/CancellableContinuationImpl; -HSPLkotlinx/coroutines/internal/DispatchedContinuation;->getContext()Lkotlin/coroutines/CoroutineContext; -HSPLkotlinx/coroutines/internal/DispatchedContinuation;->getDelegate$kotlinx_coroutines_core()Lkotlin/coroutines/Continuation; -HSPLkotlinx/coroutines/internal/DispatchedContinuation;->isReusable()Z -HSPLkotlinx/coroutines/internal/DispatchedContinuation;->postponeCancellation(Ljava/lang/Throwable;)Z -HSPLkotlinx/coroutines/internal/DispatchedContinuation;->release()V -HSPLkotlinx/coroutines/internal/DispatchedContinuation;->resumeWith(Ljava/lang/Object;)V -HSPLkotlinx/coroutines/internal/DispatchedContinuation;->takeState$kotlinx_coroutines_core()Ljava/lang/Object; -HSPLkotlinx/coroutines/internal/DispatchedContinuation;->tryReleaseClaimedContinuation(Lkotlinx/coroutines/CancellableContinuation;)Ljava/lang/Throwable; -HSPLkotlinx/coroutines/internal/DispatchedContinuationKt;->()V -HSPLkotlinx/coroutines/internal/DispatchedContinuationKt;->resumeCancellableWith(Lkotlin/coroutines/Continuation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V -HSPLkotlinx/coroutines/internal/LimitedDispatcher;->(Lkotlinx/coroutines/CoroutineDispatcher;I)V -HSPLkotlinx/coroutines/internal/LimitedDispatcher;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V -HSPLkotlinx/coroutines/internal/LimitedDispatcher;->run()V -HSPLkotlinx/coroutines/internal/LimitedDispatcherKt;->checkParallelism(I)V -HSPLkotlinx/coroutines/internal/LockFreeLinkedListHead;->()V -HSPLkotlinx/coroutines/internal/LockFreeLinkedListHead;->isRemoved()Z -HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;->(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V -HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;->complete(Ljava/lang/Object;Ljava/lang/Object;)V -HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->()V -HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->()V -HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->addNext(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/internal/LockFreeLinkedListHead;)Z -HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->finishAdd(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V -HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->getNext()Ljava/lang/Object; -HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->getNextNode()Lkotlinx/coroutines/internal/LockFreeLinkedListNode; -HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->getPrevNode()Lkotlinx/coroutines/internal/LockFreeLinkedListNode; -HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->isRemoved()Z -HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->remove$1()Z -HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->removeOrNext()Lkotlinx/coroutines/internal/LockFreeLinkedListNode; -HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->tryCondAddNext(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;)I -HSPLkotlinx/coroutines/internal/LockFreeTaskQueue;->()V -HSPLkotlinx/coroutines/internal/LockFreeTaskQueue;->()V -HSPLkotlinx/coroutines/internal/LockFreeTaskQueue;->addLast(Ljava/lang/Object;)Z -HSPLkotlinx/coroutines/internal/LockFreeTaskQueue;->getSize()I -HSPLkotlinx/coroutines/internal/LockFreeTaskQueue;->removeFirstOrNull()Ljava/lang/Object; -HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->()V -HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->(IZ)V -HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->addLast(Ljava/lang/Object;)I -HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->getSize()I -HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->removeFirstOrNull()Ljava/lang/Object; -HSPLkotlinx/coroutines/internal/MainDispatcherLoader$$ExternalSyntheticServiceLoad0;->m()Ljava/util/Iterator; -HSPLkotlinx/coroutines/internal/MainDispatcherLoader;->()V -HSPLkotlinx/coroutines/internal/OpDescriptor;->()V -HSPLkotlinx/coroutines/internal/Removed;->(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V -HSPLkotlinx/coroutines/internal/ResizableAtomicArray;->(I)V -HSPLkotlinx/coroutines/internal/ResizableAtomicArray;->get(I)Ljava/lang/Object; -HSPLkotlinx/coroutines/internal/ResizableAtomicArray;->setSynchronized(ILkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;)V -HSPLkotlinx/coroutines/internal/ScopeCoroutine;->(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;)V -HSPLkotlinx/coroutines/internal/ScopeCoroutine;->afterResume(Ljava/lang/Object;)V -HSPLkotlinx/coroutines/internal/ScopeCoroutine;->isScopedCoroutine()Z -HSPLkotlinx/coroutines/internal/Segment;->()V -HSPLkotlinx/coroutines/internal/Segment;->(JLkotlinx/coroutines/internal/Segment;I)V -HSPLkotlinx/coroutines/internal/Symbol;->(Ljava/lang/String;)V -HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt;->()V -HSPLkotlinx/coroutines/internal/ThreadContextKt$countAll$1;->()V -HSPLkotlinx/coroutines/internal/ThreadContextKt$countAll$1;->()V -HSPLkotlinx/coroutines/internal/ThreadContextKt$countAll$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/internal/ThreadContextKt;->()V -HSPLkotlinx/coroutines/internal/ThreadContextKt;->restoreThreadContext(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)V -HSPLkotlinx/coroutines/internal/ThreadContextKt;->threadContextElements(Lkotlin/coroutines/CoroutineContext;)Ljava/lang/Object; -HSPLkotlinx/coroutines/internal/ThreadContextKt;->updateThreadContext(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->()V -HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->addImpl(Lkotlinx/coroutines/EventLoopImplBase$DelayedTask;)V -HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->isEmpty()Z -HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->removeAtImpl(I)Lkotlinx/coroutines/internal/ThreadSafeHeapNode; -HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->siftUpFrom(I)V -HSPLkotlinx/coroutines/intrinsics/UndispatchedKt;->startUndispatchedOrReturn(Lkotlinx/coroutines/internal/ScopeCoroutine;Lkotlinx/coroutines/internal/ScopeCoroutine;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; -HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->()V -HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->(Lkotlinx/coroutines/scheduling/CoroutineScheduler;I)V -HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->findTask(Z)Lkotlinx/coroutines/scheduling/Task; -HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->getIndexInArray()I -HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->getNextParkedWorker()Ljava/lang/Object; -HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->nextInt(I)I -HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->pollGlobalQueues()Lkotlinx/coroutines/scheduling/Task; -HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->run()V -HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->setIndexInArray(I)V -HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->setNextParkedWorker(Ljava/lang/Object;)V -HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->tryReleaseCpu$enumunboxing$(I)Z -HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->trySteal(Z)Lkotlinx/coroutines/scheduling/Task; -HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->()V -HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->(IIJLjava/lang/String;)V -HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->createNewWorker()I -HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->dispatch(Ljava/lang/Runnable;Lkotlinx/coroutines/scheduling/TaskContext;Z)V -HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->isTerminated()Z -HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->parkedWorkersStackPush(Lkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;)V -HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->tryCreateWorker(J)Z -HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->tryUnpark()Z -HSPLkotlinx/coroutines/scheduling/DefaultIoScheduler;->()V -HSPLkotlinx/coroutines/scheduling/DefaultIoScheduler;->()V -HSPLkotlinx/coroutines/scheduling/DefaultIoScheduler;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V -HSPLkotlinx/coroutines/scheduling/DefaultIoScheduler;->limitedParallelism(I)Lkotlinx/coroutines/CoroutineDispatcher; -HSPLkotlinx/coroutines/scheduling/DefaultScheduler;->()V -HSPLkotlinx/coroutines/scheduling/DefaultScheduler;->()V -HSPLkotlinx/coroutines/scheduling/GlobalQueue;->()V -HSPLkotlinx/coroutines/scheduling/NanoTimeSource;->()V -HSPLkotlinx/coroutines/scheduling/NanoTimeSource;->()V -HSPLkotlinx/coroutines/scheduling/SchedulerCoroutineDispatcher;->(IIJ)V -HSPLkotlinx/coroutines/scheduling/SchedulerCoroutineDispatcher;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V -HSPLkotlinx/coroutines/scheduling/SchedulerTimeSource;->()V -HSPLkotlinx/coroutines/scheduling/Task;->()V -HSPLkotlinx/coroutines/scheduling/Task;->(JLkotlinx/coroutines/scheduling/TaskContext;)V -HSPLkotlinx/coroutines/scheduling/TaskContextImpl;->(I)V -HSPLkotlinx/coroutines/scheduling/TaskContextImpl;->afterTask()V -HSPLkotlinx/coroutines/scheduling/TaskContextImpl;->getTaskMode()I -HSPLkotlinx/coroutines/scheduling/TaskImpl;->(Ljava/lang/Runnable;JLkotlinx/coroutines/scheduling/TaskContext;)V -HSPLkotlinx/coroutines/scheduling/TaskImpl;->run()V -HSPLkotlinx/coroutines/scheduling/TasksKt;->()V -HSPLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;->()V -HSPLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;->()V -HSPLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V -HSPLkotlinx/coroutines/scheduling/WorkQueue;->()V -HSPLkotlinx/coroutines/scheduling/WorkQueue;->()V -HSPLkotlinx/coroutines/scheduling/WorkQueue;->add(Lkotlinx/coroutines/scheduling/Task;Z)Lkotlinx/coroutines/scheduling/Task; -HSPLkotlinx/coroutines/scheduling/WorkQueue;->addLast(Lkotlinx/coroutines/scheduling/Task;)Lkotlinx/coroutines/scheduling/Task; -HSPLkotlinx/coroutines/scheduling/WorkQueue;->pollBuffer()Lkotlinx/coroutines/scheduling/Task; -HSPLkotlinx/coroutines/scheduling/WorkQueue;->tryStealLastScheduled(Lkotlinx/coroutines/scheduling/WorkQueue;Z)J -HSPLkotlinx/coroutines/sync/Empty;->(Ljava/lang/Object;)V -HSPLkotlinx/coroutines/sync/MutexImpl;->()V -HSPLkotlinx/coroutines/sync/MutexImpl;->(Z)V -HSPLkotlinx/coroutines/sync/MutexImpl;->lock(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -HSPLkotlinx/coroutines/sync/MutexImpl;->tryLock(Ljava/lang/Object;)Z -HSPLkotlinx/coroutines/sync/MutexImpl;->unlock(Ljava/lang/Object;)V -HSPLkotlinx/coroutines/sync/MutexKt;->()V -HSPLkotlinx/coroutines/sync/MutexKt;->Mutex$default()Lkotlinx/coroutines/sync/MutexImpl; -HSPLkotlinx/coroutines/sync/SemaphoreImpl$onCancellationRelease$1;->(Lkotlinx/coroutines/sync/SemaphoreImpl;)V -HSPLkotlinx/coroutines/sync/SemaphoreImpl;->()V -HSPLkotlinx/coroutines/sync/SemaphoreImpl;->(II)V -HSPLkotlinx/coroutines/sync/SemaphoreKt;->()V -HSPLkotlinx/coroutines/sync/SemaphoreSegment;->(JLkotlinx/coroutines/sync/SemaphoreSegment;I)V -HSPLkotlinx/datetime/Instant$Companion;->()V -HSPLkotlinx/datetime/Instant$Companion;->parse(Ljava/lang/String;)Lkotlinx/datetime/Instant; -HSPLkotlinx/datetime/Instant;->()V -HSPLkotlinx/datetime/Instant;->(Lj$/time/Instant;)V -HSPLkotlinx/serialization/SerializersCacheKt$PARAMETRIZED_SERIALIZERS_CACHE$1;->()V -HSPLkotlinx/serialization/SerializersCacheKt$PARAMETRIZED_SERIALIZERS_CACHE$1;->()V -HSPLkotlinx/serialization/SerializersCacheKt$PARAMETRIZED_SERIALIZERS_CACHE$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/serialization/SerializersCacheKt$PARAMETRIZED_SERIALIZERS_CACHE_NULLABLE$1;->()V -HSPLkotlinx/serialization/SerializersCacheKt$PARAMETRIZED_SERIALIZERS_CACHE_NULLABLE$1;->()V -HSPLkotlinx/serialization/SerializersCacheKt$SERIALIZERS_CACHE$1;->()V -HSPLkotlinx/serialization/SerializersCacheKt$SERIALIZERS_CACHE$1;->()V -HSPLkotlinx/serialization/SerializersCacheKt$SERIALIZERS_CACHE$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/serialization/SerializersCacheKt$SERIALIZERS_CACHE_NULLABLE$1;->()V -HSPLkotlinx/serialization/SerializersCacheKt$SERIALIZERS_CACHE_NULLABLE$1;->()V -HSPLkotlinx/serialization/SerializersCacheKt;->()V -HSPLkotlinx/serialization/SerializersKt;->parametrizedSerializerOrNull(Lkotlin/reflect/KClass;Ljava/util/List;Ljava/util/ArrayList;)Lkotlinx/serialization/KSerializer; -HSPLkotlinx/serialization/SerializersKt;->serializer(Landroidx/compose/ui/modifier/ModifierLocalMap;Lkotlin/reflect/KType;)Lkotlinx/serialization/KSerializer; -HSPLkotlinx/serialization/SerializersKt;->serializersForParameters(Landroidx/compose/ui/modifier/ModifierLocalMap;Ljava/util/List;Z)Ljava/util/ArrayList; -HSPLkotlinx/serialization/SerializersKt__SerializersKt;->serializerByKTypeImpl$SerializersKt__SerializersKt(Landroidx/compose/ui/modifier/ModifierLocalMap;Lkotlin/reflect/KType;Z)Lkotlinx/serialization/KSerializer; -HSPLkotlinx/serialization/descriptors/PrimitiveKind$BOOLEAN;->()V -HSPLkotlinx/serialization/descriptors/PrimitiveKind$BOOLEAN;->()V -HSPLkotlinx/serialization/descriptors/PrimitiveKind$BYTE;->()V -HSPLkotlinx/serialization/descriptors/PrimitiveKind$BYTE;->()V -HSPLkotlinx/serialization/descriptors/PrimitiveKind$CHAR;->()V -HSPLkotlinx/serialization/descriptors/PrimitiveKind$CHAR;->()V -HSPLkotlinx/serialization/descriptors/PrimitiveKind$DOUBLE;->()V -HSPLkotlinx/serialization/descriptors/PrimitiveKind$DOUBLE;->()V -HSPLkotlinx/serialization/descriptors/PrimitiveKind$FLOAT;->()V -HSPLkotlinx/serialization/descriptors/PrimitiveKind$FLOAT;->()V -HSPLkotlinx/serialization/descriptors/PrimitiveKind$INT;->()V -HSPLkotlinx/serialization/descriptors/PrimitiveKind$INT;->()V -HSPLkotlinx/serialization/descriptors/PrimitiveKind$LONG;->()V -HSPLkotlinx/serialization/descriptors/PrimitiveKind$LONG;->()V -HSPLkotlinx/serialization/descriptors/PrimitiveKind$SHORT;->()V -HSPLkotlinx/serialization/descriptors/PrimitiveKind$SHORT;->()V -HSPLkotlinx/serialization/descriptors/PrimitiveKind$STRING;->()V -HSPLkotlinx/serialization/descriptors/PrimitiveKind$STRING;->()V -HSPLkotlinx/serialization/descriptors/PrimitiveKind;->()V -HSPLkotlinx/serialization/descriptors/SerialDescriptorsKt;->PrimitiveSerialDescriptor(Ljava/lang/String;Lkotlinx/serialization/descriptors/PrimitiveKind$STRING;)Lkotlinx/serialization/internal/PrimitiveSerialDescriptor; -HSPLkotlinx/serialization/descriptors/SerialKind;->()V -HSPLkotlinx/serialization/descriptors/SerialKind;->hashCode()I -HSPLkotlinx/serialization/descriptors/SerialKind;->toString()Ljava/lang/String; -HSPLkotlinx/serialization/descriptors/StructureKind$CLASS;->()V -HSPLkotlinx/serialization/descriptors/StructureKind$CLASS;->()V -HSPLkotlinx/serialization/descriptors/StructureKind$LIST;->()V -HSPLkotlinx/serialization/descriptors/StructureKind$LIST;->()V -HSPLkotlinx/serialization/descriptors/StructureKind$MAP;->()V -HSPLkotlinx/serialization/descriptors/StructureKind$MAP;->()V -HSPLkotlinx/serialization/descriptors/StructureKind;->(I)V -HSPLkotlinx/serialization/encoding/AbstractDecoder;->()V -HSPLkotlinx/serialization/encoding/AbstractDecoder;->decodeSequentially()V -HSPLkotlinx/serialization/encoding/AbstractDecoder;->decodeStringElement(Lkotlinx/serialization/descriptors/SerialDescriptor;I)Ljava/lang/String; -HSPLkotlinx/serialization/internal/AbstractCollectionSerializer;->()V -HSPLkotlinx/serialization/internal/AbstractCollectionSerializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; -HSPLkotlinx/serialization/internal/AbstractCollectionSerializer;->merge(Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; -HSPLkotlinx/serialization/internal/ArrayListClassDesc;->(Lkotlinx/serialization/descriptors/SerialDescriptor;)V -HSPLkotlinx/serialization/internal/ArrayListClassDesc;->getSerialName()Ljava/lang/String; -HSPLkotlinx/serialization/internal/ArrayListSerializer;->(Lkotlinx/serialization/KSerializer;)V -HSPLkotlinx/serialization/internal/ArrayListSerializer;->builder()Ljava/lang/Object; -HSPLkotlinx/serialization/internal/ArrayListSerializer;->builderSize(Ljava/lang/Object;)I -HSPLkotlinx/serialization/internal/ArrayListSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; -HSPLkotlinx/serialization/internal/ArrayListSerializer;->insert(Ljava/lang/Object;ILjava/lang/Object;)V -HSPLkotlinx/serialization/internal/ArrayListSerializer;->toResult(Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/serialization/internal/BooleanArraySerializer;->()V -HSPLkotlinx/serialization/internal/BooleanArraySerializer;->()V -HSPLkotlinx/serialization/internal/BooleanSerializer;->()V -HSPLkotlinx/serialization/internal/BooleanSerializer;->()V -HSPLkotlinx/serialization/internal/BooleanSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; -HSPLkotlinx/serialization/internal/ByteArraySerializer;->()V -HSPLkotlinx/serialization/internal/ByteArraySerializer;->()V -HSPLkotlinx/serialization/internal/ByteSerializer;->()V -HSPLkotlinx/serialization/internal/ByteSerializer;->()V -HSPLkotlinx/serialization/internal/ByteSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; -HSPLkotlinx/serialization/internal/CacheEntry;->(Lkotlinx/serialization/KSerializer;)V -HSPLkotlinx/serialization/internal/CachingKt;->()V -HSPLkotlinx/serialization/internal/CharArraySerializer;->()V -HSPLkotlinx/serialization/internal/CharArraySerializer;->()V -HSPLkotlinx/serialization/internal/CharSerializer;->()V -HSPLkotlinx/serialization/internal/CharSerializer;->()V -HSPLkotlinx/serialization/internal/CharSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; -HSPLkotlinx/serialization/internal/CollectionLikeSerializer;->(Lkotlinx/serialization/KSerializer;)V -HSPLkotlinx/serialization/internal/CollectionLikeSerializer;->readElement(Lkotlinx/serialization/encoding/CompositeDecoder;ILjava/lang/Object;Z)V -HSPLkotlinx/serialization/internal/CollectionSerializer;->(Lkotlinx/serialization/KSerializer;)V -HSPLkotlinx/serialization/internal/ConcurrentHashMapCache;->(Lkotlin/jvm/functions/Function1;)V -HSPLkotlinx/serialization/internal/ConcurrentHashMapCache;->get(Lkotlin/reflect/KClass;)Lkotlinx/serialization/KSerializer; -HSPLkotlinx/serialization/internal/ConcurrentHashMapParametrizedCache;->(Lkotlin/jvm/functions/Function2;)V -HSPLkotlinx/serialization/internal/ConcurrentHashMapParametrizedCache;->get-gIAlu-s(Lkotlin/reflect/KClass;Ljava/util/ArrayList;)Ljava/lang/Object; -HSPLkotlinx/serialization/internal/DoubleArraySerializer;->()V -HSPLkotlinx/serialization/internal/DoubleArraySerializer;->()V -HSPLkotlinx/serialization/internal/DoubleSerializer;->()V -HSPLkotlinx/serialization/internal/DoubleSerializer;->()V -HSPLkotlinx/serialization/internal/DoubleSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; -HSPLkotlinx/serialization/internal/DurationSerializer;->()V -HSPLkotlinx/serialization/internal/DurationSerializer;->()V -HSPLkotlinx/serialization/internal/FloatArraySerializer;->()V -HSPLkotlinx/serialization/internal/FloatArraySerializer;->()V -HSPLkotlinx/serialization/internal/FloatSerializer;->()V -HSPLkotlinx/serialization/internal/FloatSerializer;->()V -HSPLkotlinx/serialization/internal/FloatSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; -HSPLkotlinx/serialization/internal/InlineClassDescriptor;->(Ljava/lang/String;Lkotlinx/serialization/internal/InlineClassDescriptorKt$InlinePrimitiveDescriptor$1;)V -HSPLkotlinx/serialization/internal/InlineClassDescriptorKt$InlinePrimitiveDescriptor$1;->(Lkotlinx/serialization/KSerializer;)V -HSPLkotlinx/serialization/internal/InlineClassDescriptorKt;->InlinePrimitiveDescriptor(Ljava/lang/String;Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/internal/InlineClassDescriptor; -HSPLkotlinx/serialization/internal/IntArraySerializer;->()V -HSPLkotlinx/serialization/internal/IntArraySerializer;->()V -HSPLkotlinx/serialization/internal/IntSerializer;->()V -HSPLkotlinx/serialization/internal/IntSerializer;->()V -HSPLkotlinx/serialization/internal/IntSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; -HSPLkotlinx/serialization/internal/ListLikeDescriptor;->(Lkotlinx/serialization/descriptors/SerialDescriptor;)V -HSPLkotlinx/serialization/internal/ListLikeDescriptor;->getElementsCount()I -HSPLkotlinx/serialization/internal/ListLikeDescriptor;->getKind()Lkotlinx/serialization/descriptors/SerialKind; -HSPLkotlinx/serialization/internal/LongArraySerializer;->()V -HSPLkotlinx/serialization/internal/LongArraySerializer;->()V -HSPLkotlinx/serialization/internal/LongSerializer;->()V -HSPLkotlinx/serialization/internal/LongSerializer;->()V -HSPLkotlinx/serialization/internal/LongSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; -HSPLkotlinx/serialization/internal/ObjectSerializer$descriptor$2;->(Lkotlinx/serialization/internal/ObjectSerializer;)V -HSPLkotlinx/serialization/internal/ObjectSerializer;->(Lkotlin/Unit;)V -HSPLkotlinx/serialization/internal/ParametrizedCacheEntry;->()V -HSPLkotlinx/serialization/internal/PlatformKt;->constructSerializerForGivenTypeArgs(Lkotlin/reflect/KClass;[Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; -HSPLkotlinx/serialization/internal/Platform_commonKt;->()V -HSPLkotlinx/serialization/internal/Platform_commonKt;->compactArray(Ljava/util/List;)[Lkotlinx/serialization/descriptors/SerialDescriptor; -HSPLkotlinx/serialization/internal/Platform_commonKt;->kclass(Lkotlin/reflect/KType;)Lkotlin/reflect/KClass; -HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$_hashCode$2;->(Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;)V -HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$_hashCode$2;->invoke()Ljava/lang/Object; -HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$childSerializers$2;->(Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;)V -HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$childSerializers$2;->invoke()Ljava/lang/Object; -HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$typeParameterDescriptors$2;->(Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;)V -HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$typeParameterDescriptors$2;->invoke()Ljava/lang/Object; -HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->(Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;I)V -HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->addElement(Ljava/lang/String;Z)V -HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getElementAnnotations(I)Ljava/util/List; -HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getElementDescriptor(I)Lkotlinx/serialization/descriptors/SerialDescriptor; -HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getElementIndex(Ljava/lang/String;)I -HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getElementsCount()I -HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getKind()Lkotlinx/serialization/descriptors/SerialKind; -HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getSerialName()Ljava/lang/String; -HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->hashCode()I -HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptorKt;->hashCodeImpl(Lkotlinx/serialization/descriptors/SerialDescriptor;[Lkotlinx/serialization/descriptors/SerialDescriptor;)I -HSPLkotlinx/serialization/internal/PrimitiveArrayDescriptor;->(Lkotlinx/serialization/descriptors/SerialDescriptor;)V -HSPLkotlinx/serialization/internal/PrimitiveArraySerializer;->(Lkotlinx/serialization/KSerializer;)V -HSPLkotlinx/serialization/internal/PrimitiveSerialDescriptor;->(Ljava/lang/String;Lkotlinx/serialization/descriptors/PrimitiveKind;)V -HSPLkotlinx/serialization/internal/PrimitiveSerialDescriptor;->getKind()Lkotlinx/serialization/descriptors/SerialKind; -HSPLkotlinx/serialization/internal/PrimitiveSerialDescriptor;->getSerialName()Ljava/lang/String; -HSPLkotlinx/serialization/internal/PrimitivesKt;->()V -HSPLkotlinx/serialization/internal/PrimitivesKt;->capitalize(Ljava/lang/String;)Ljava/lang/String; -HSPLkotlinx/serialization/internal/ShortArraySerializer;->()V -HSPLkotlinx/serialization/internal/ShortArraySerializer;->()V -HSPLkotlinx/serialization/internal/ShortSerializer;->()V -HSPLkotlinx/serialization/internal/ShortSerializer;->()V -HSPLkotlinx/serialization/internal/ShortSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; -HSPLkotlinx/serialization/internal/StringSerializer;->()V -HSPLkotlinx/serialization/internal/StringSerializer;->()V -HSPLkotlinx/serialization/internal/StringSerializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; -HSPLkotlinx/serialization/internal/StringSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; -HSPLkotlinx/serialization/internal/UByteArraySerializer;->()V -HSPLkotlinx/serialization/internal/UByteArraySerializer;->()V -HSPLkotlinx/serialization/internal/UByteSerializer;->()V -HSPLkotlinx/serialization/internal/UByteSerializer;->()V -HSPLkotlinx/serialization/internal/UByteSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; -HSPLkotlinx/serialization/internal/UIntArraySerializer;->()V -HSPLkotlinx/serialization/internal/UIntArraySerializer;->()V -HSPLkotlinx/serialization/internal/UIntSerializer;->()V -HSPLkotlinx/serialization/internal/UIntSerializer;->()V -HSPLkotlinx/serialization/internal/UIntSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; -HSPLkotlinx/serialization/internal/ULongArraySerializer;->()V -HSPLkotlinx/serialization/internal/ULongArraySerializer;->()V -HSPLkotlinx/serialization/internal/ULongSerializer;->()V -HSPLkotlinx/serialization/internal/ULongSerializer;->()V -HSPLkotlinx/serialization/internal/ULongSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; -HSPLkotlinx/serialization/internal/UShortArraySerializer;->()V -HSPLkotlinx/serialization/internal/UShortArraySerializer;->()V -HSPLkotlinx/serialization/internal/UShortSerializer;->()V -HSPLkotlinx/serialization/internal/UShortSerializer;->()V -HSPLkotlinx/serialization/internal/UShortSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; -HSPLkotlinx/serialization/internal/UnitSerializer;->()V -HSPLkotlinx/serialization/internal/UnitSerializer;->()V -HSPLkotlinx/serialization/json/Json$Default;->()V -HSPLkotlinx/serialization/json/Json;->()V -HSPLkotlinx/serialization/json/Json;->(Lkotlinx/serialization/json/JsonConfiguration;Landroidx/compose/ui/modifier/ModifierLocalMap;)V -HSPLkotlinx/serialization/json/JsonConfiguration;->(ZZZZZZLjava/lang/String;ZZLjava/lang/String;ZZ)V -HSPLkotlinx/serialization/json/JsonImpl;->(Lkotlinx/serialization/json/JsonConfiguration;Landroidx/compose/ui/modifier/ModifierLocalMap;)V -HSPLkotlinx/serialization/json/JvmStreamsKt;->decodeFromStream(Lkotlinx/serialization/json/Json;Lkotlinx/serialization/KSerializer;Ljava/io/InputStream;)Ljava/lang/Object; -HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->()V -HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->consumeString()Ljava/lang/String; -HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->consumeString(Ljava/lang/CharSequence;II)Ljava/lang/String; -HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->decodedString(II)Ljava/lang/String; -HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->isValidValueStart(C)Z -HSPLkotlinx/serialization/json/internal/AbstractJsonLexerKt;->charToTokenClass(C)B -HSPLkotlinx/serialization/json/internal/ArrayAsSequence;->([C)V -HSPLkotlinx/serialization/json/internal/ArrayAsSequence;->charAt(I)C -HSPLkotlinx/serialization/json/internal/ArrayAsSequence;->length()I -HSPLkotlinx/serialization/json/internal/CharMappings;->()V -HSPLkotlinx/serialization/json/internal/CharMappings;->initC2ESC(CI)V -HSPLkotlinx/serialization/json/internal/DescriptorSchemaCache$Key;->()V -HSPLkotlinx/serialization/json/internal/DescriptorSchemaCache;->()V -HSPLkotlinx/serialization/json/internal/DescriptorSchemaCache;->get(Lkotlinx/serialization/descriptors/SerialDescriptor;)Ljava/lang/Object; -HSPLkotlinx/serialization/json/internal/JavaStreamSerialReader;->(Ljava/io/InputStream;)V -HSPLkotlinx/serialization/json/internal/JavaStreamSerialReader;->read([CII)I -HSPLkotlinx/serialization/json/internal/JsonNamesMapKt;->()V -HSPLkotlinx/serialization/json/internal/JsonNamesMapKt;->buildAlternativeNamesMap(Lkotlinx/serialization/descriptors/SerialDescriptor;)Ljava/util/Map; -HSPLkotlinx/serialization/json/internal/JsonPath;->()V -HSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->(Lkotlinx/serialization/json/internal/JavaStreamSerialReader;)V -HSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->appendRange(II)V -HSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->consumeNextToken()B -HSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->ensureHaveChars()V -HSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->getSource()Ljava/lang/CharSequence; -HSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->preload(I)V -HSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->substring(II)Ljava/lang/String; -HSPLkotlinx/serialization/json/internal/ReaderJsonLexer;->tryConsumeComma()Z -HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->(Lkotlinx/serialization/json/Json;ILkotlinx/serialization/json/internal/AbstractJsonLexer;Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/json/internal/StreamingJsonDecoder$DiscriminatorHolder;)V -HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeSerializableElement(Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object; -HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeSerializableValue(Lkotlinx/serialization/DeserializationStrategy;)Ljava/lang/Object; -HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeString()Ljava/lang/String; -HSPLkotlinx/serialization/json/internal/WriteMode$EnumUnboxingLocalUtility;->getBegin(I)C -HSPLkotlinx/serialization/json/internal/WriteMode$EnumUnboxingLocalUtility;->getEnd(I)C -HSPLkotlinx/serialization/modules/SerialModuleImpl;->()V -HSPLkotlinx/serialization/modules/SerializersModuleKt;->()V -HSPLokhttp3/Address;->(Ljava/lang/String;ILokhttp3/Dns;Ljavax/net/SocketFactory;Ljavax/net/ssl/SSLSocketFactory;Ljavax/net/ssl/HostnameVerifier;Lokhttp3/CertificatePinner;Lokhttp3/Authenticator;Ljava/util/List;Ljava/util/List;Ljava/net/ProxySelector;)V -HSPLokhttp3/Address;->hashCode()I -HSPLokhttp3/Authenticator$Companion$AuthenticatorNone;->()V -HSPLokhttp3/Authenticator;->()V -HSPLokhttp3/CacheControl$Builder;->()V -HSPLokhttp3/CacheControl$Builder;->build()Lokhttp3/CacheControl; -HSPLokhttp3/CacheControl$Companion;->parse(Lokhttp3/Headers;)Lokhttp3/CacheControl; -HSPLokhttp3/CacheControl;->()V -HSPLokhttp3/CacheControl;->(ZZIIZZZIIZZZLjava/lang/String;)V -HSPLokhttp3/CertificatePinner;->()V -HSPLokhttp3/CertificatePinner;->(Ljava/util/Set;Lokhttp3/internal/tls/CertificateChainCleaner;)V -HSPLokhttp3/CertificatePinner;->hashCode()I -HSPLokhttp3/CipherSuite$Companion$ORDER_BY_NAME$1;->()V -HSPLokhttp3/CipherSuite$Companion$ORDER_BY_NAME$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I -HSPLokhttp3/CipherSuite$Companion;->()V -HSPLokhttp3/CipherSuite$Companion;->access$init(Lokhttp3/CipherSuite$Companion;Ljava/lang/String;)Lokhttp3/CipherSuite; -HSPLokhttp3/CipherSuite$Companion;->forJavaName(Ljava/lang/String;)Lokhttp3/CipherSuite; -HSPLokhttp3/CipherSuite;->()V -HSPLokhttp3/CipherSuite;->(Ljava/lang/String;)V -HSPLokhttp3/ConnectionPool;->()V -HSPLokhttp3/ConnectionSpec$Builder;->()V -HSPLokhttp3/ConnectionSpec$Builder;->(Lokhttp3/ConnectionSpec;)V -HSPLokhttp3/ConnectionSpec$Builder;->build()Lokhttp3/ConnectionSpec; -HSPLokhttp3/ConnectionSpec$Builder;->cipherSuites([Ljava/lang/String;)V -HSPLokhttp3/ConnectionSpec$Builder;->cipherSuites([Lokhttp3/CipherSuite;)V -HSPLokhttp3/ConnectionSpec$Builder;->supportsTlsExtensions()V -HSPLokhttp3/ConnectionSpec$Builder;->tlsVersions([Ljava/lang/String;)V -HSPLokhttp3/ConnectionSpec$Builder;->tlsVersions([Lokhttp3/TlsVersion;)V -HSPLokhttp3/ConnectionSpec;->()V -HSPLokhttp3/ConnectionSpec;->(ZZ[Ljava/lang/String;[Ljava/lang/String;)V -HSPLokhttp3/ConnectionSpec;->cipherSuites()Ljava/util/List; -HSPLokhttp3/ConnectionSpec;->hashCode()I -HSPLokhttp3/ConnectionSpec;->isCompatible(Ljavax/net/ssl/SSLSocket;)Z -HSPLokhttp3/ConnectionSpec;->tlsVersions()Ljava/util/List; -HSPLokhttp3/CookieJar$Companion$NoCookies;->()V -HSPLokhttp3/CookieJar$Companion$NoCookies;->loadForRequest(Lokhttp3/HttpUrl;)V -HSPLokhttp3/CookieJar;->()V -HSPLokhttp3/Dispatcher;->()V -HSPLokhttp3/Dispatcher;->promoteAndExecute()V -HSPLokhttp3/Dns$Companion$DnsSystem;->()V -HSPLokhttp3/Dns$Companion$DnsSystem;->lookup(Ljava/lang/String;)Ljava/util/List; -HSPLokhttp3/Dns;->()V -HSPLokhttp3/EventListener$Companion$NONE$1;->()V -HSPLokhttp3/EventListener;->()V -HSPLokhttp3/EventListener;->()V -HSPLokhttp3/Headers$Builder;->()V -HSPLokhttp3/Headers$Builder;->addLenient$okhttp(Ljava/lang/String;Ljava/lang/String;)V -HSPLokhttp3/Headers$Builder;->build()Lokhttp3/Headers; -HSPLokhttp3/Headers$Builder;->removeAll(Ljava/lang/String;)V -HSPLokhttp3/Headers$Companion;->checkName(Ljava/lang/String;)V -HSPLokhttp3/Headers$Companion;->checkValue(Ljava/lang/String;Ljava/lang/String;)V -HSPLokhttp3/Headers$Companion;->of([Ljava/lang/String;)Lokhttp3/Headers; -HSPLokhttp3/Headers;->([Ljava/lang/String;)V -HSPLokhttp3/Headers;->get(Ljava/lang/String;)Ljava/lang/String; -HSPLokhttp3/Headers;->name(I)Ljava/lang/String; -HSPLokhttp3/Headers;->newBuilder()Lokhttp3/Headers$Builder; -HSPLokhttp3/Headers;->value(I)Ljava/lang/String; -HSPLokhttp3/HttpUrl$Builder;->()V -HSPLokhttp3/HttpUrl$Builder;->build()Lokhttp3/HttpUrl; -HSPLokhttp3/HttpUrl$Builder;->effectivePort()I -HSPLokhttp3/HttpUrl$Builder;->encodedQuery(Ljava/lang/String;)V -HSPLokhttp3/HttpUrl$Builder;->parse$okhttp(Lokhttp3/HttpUrl;Ljava/lang/String;)V -HSPLokhttp3/HttpUrl$Builder;->toString()Ljava/lang/String; -HSPLokhttp3/HttpUrl$Companion;->()V -HSPLokhttp3/HttpUrl$Companion;->canonicalize$okhttp$default(Ljava/lang/String;IILjava/lang/String;ZZZZI)Ljava/lang/String; -HSPLokhttp3/HttpUrl$Companion;->defaultPort(Ljava/lang/String;)I -HSPLokhttp3/HttpUrl$Companion;->percentDecode$okhttp$default(Ljava/lang/String;IIZI)Ljava/lang/String; -HSPLokhttp3/HttpUrl$Companion;->toQueryNamesAndValues$okhttp(Ljava/lang/String;)Ljava/util/ArrayList; -HSPLokhttp3/HttpUrl$Companion;->toQueryString$okhttp(Ljava/util/List;Ljava/lang/StringBuilder;)V -HSPLokhttp3/HttpUrl;->()V -HSPLokhttp3/HttpUrl;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILjava/util/ArrayList;Ljava/util/ArrayList;Ljava/lang/String;Ljava/lang/String;)V -HSPLokhttp3/HttpUrl;->encodedPassword()Ljava/lang/String; -HSPLokhttp3/HttpUrl;->encodedPathSegments()Ljava/util/ArrayList; -HSPLokhttp3/HttpUrl;->encodedQuery()Ljava/lang/String; -HSPLokhttp3/HttpUrl;->encodedUsername()Ljava/lang/String; -HSPLokhttp3/HttpUrl;->hashCode()I -HSPLokhttp3/HttpUrl;->redact()Ljava/lang/String; -HSPLokhttp3/HttpUrl;->uri()Ljava/net/URI; -HSPLokhttp3/OkHttpClient;->()V -HSPLokhttp3/OkHttpClient;->()V -HSPLokhttp3/OkHttpClient;->newCall(Lokhttp3/Request;)Lokhttp3/internal/connection/RealCall; -HSPLokhttp3/Protocol;->()V -HSPLokhttp3/Protocol;->(ILjava/lang/String;Ljava/lang/String;)V -HSPLokhttp3/Request$Builder;->()V -HSPLokhttp3/Request$Builder;->(Lokhttp3/Request;)V -HSPLokhttp3/Request$Builder;->build()Lokhttp3/Request; -HSPLokhttp3/Request$Builder;->header(Ljava/lang/String;Ljava/lang/String;)V -HSPLokhttp3/Request;->(Lokhttp3/HttpUrl;Ljava/lang/String;Lokhttp3/Headers;Lokhttp3/RequestBody;Ljava/util/Map;)V -HSPLokhttp3/Request;->cacheControl()Lokhttp3/CacheControl; -HSPLokhttp3/RequestBody$Companion$toRequestBody$2;->(IILokhttp3/MediaType;[B)V -HSPLokhttp3/RequestBody;->()V -HSPLokhttp3/ResponseBody$Companion$asResponseBody$1;->(JLokhttp3/MediaType;Lokio/Buffer;)V -HSPLokhttp3/ResponseBody;->()V -HSPLokhttp3/Route;->(Lokhttp3/Address;Ljava/net/Proxy;Ljava/net/InetSocketAddress;)V -HSPLokhttp3/Route;->hashCode()I -HSPLokhttp3/TlsVersion$Companion;->forJavaName(Ljava/lang/String;)Lokhttp3/TlsVersion; -HSPLokhttp3/TlsVersion;->()V -HSPLokhttp3/TlsVersion;->(ILjava/lang/String;Ljava/lang/String;)V -HSPLokhttp3/internal/Util$$ExternalSyntheticLambda0;->(Ljava/lang/String;Z)V -HSPLokhttp3/internal/Util$$ExternalSyntheticLambda0;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread; -HSPLokhttp3/internal/Util$$ExternalSyntheticLambda1;->(Lokhttp3/EventListener$Companion$NONE$1;)V -HSPLokhttp3/internal/Util;->()V -HSPLokhttp3/internal/Util;->delimiterOffset(IILjava/lang/String;Ljava/lang/String;)I -HSPLokhttp3/internal/Util;->delimiterOffset(Ljava/lang/String;CII)I -HSPLokhttp3/internal/Util;->hasIntersection([Ljava/lang/String;[Ljava/lang/String;Ljava/util/Comparator;)Z -HSPLokhttp3/internal/Util;->immutableListOf([Ljava/lang/Object;)Ljava/util/List; -HSPLokhttp3/internal/Util;->indexOfFirstNonAsciiWhitespace(IILjava/lang/String;)I -HSPLokhttp3/internal/Util;->indexOfLastNonAsciiWhitespace(IILjava/lang/String;)I -HSPLokhttp3/internal/Util;->intersect([Ljava/lang/String;[Ljava/lang/String;Ljava/util/Comparator;)[Ljava/lang/String; -HSPLokhttp3/internal/Util;->parseHexDigit(C)I -HSPLokhttp3/internal/Util;->toHostHeader(Lokhttp3/HttpUrl;Z)Ljava/lang/String; -HSPLokhttp3/internal/Util;->toImmutableList(Ljava/util/List;)Ljava/util/List; -HSPLokhttp3/internal/cache/CacheInterceptor$Companion;->()V -HSPLokhttp3/internal/cache/CacheInterceptor;->()V -HSPLokhttp3/internal/cache/CacheInterceptor;->()V -HSPLokhttp3/internal/cache/CacheInterceptor;->intercept(Lokhttp3/internal/http/RealInterceptorChain;)Lokhttp3/Response; -HSPLokhttp3/internal/cache/CacheStrategy;->(Lokhttp3/Request;Lokhttp3/Response;)V -HSPLokhttp3/internal/concurrent/Task;->(Ljava/lang/String;Z)V -HSPLokhttp3/internal/concurrent/TaskQueue;->(Lokhttp3/internal/concurrent/TaskRunner;Ljava/lang/String;)V -HSPLokhttp3/internal/concurrent/TaskRunner$RealBackend;->(Lokhttp3/internal/Util$$ExternalSyntheticLambda0;)V -HSPLokhttp3/internal/concurrent/TaskRunner$runnable$1;->(Lokhttp3/internal/concurrent/TaskRunner;)V -HSPLokhttp3/internal/concurrent/TaskRunner;->()V -HSPLokhttp3/internal/concurrent/TaskRunner;->(Lokhttp3/internal/concurrent/TaskRunner$RealBackend;)V -HSPLokhttp3/internal/concurrent/TaskRunner;->newQueue()Lokhttp3/internal/concurrent/TaskQueue; -HSPLokhttp3/internal/connection/ConnectInterceptor;->()V -HSPLokhttp3/internal/connection/ConnectInterceptor;->()V -HSPLokhttp3/internal/connection/ConnectInterceptor;->intercept(Lokhttp3/internal/http/RealInterceptorChain;)Lokhttp3/Response; -HSPLokhttp3/internal/connection/ConnectionSpecSelector;->(Ljava/util/List;)V -HSPLokhttp3/internal/connection/ConnectionSpecSelector;->configureSecureSocket(Ljavax/net/ssl/SSLSocket;)Lokhttp3/ConnectionSpec; -HSPLokhttp3/internal/connection/ExchangeFinder;->(Lokhttp3/internal/connection/RealConnectionPool;Lokhttp3/Address;Lokhttp3/internal/connection/RealCall;Lokhttp3/EventListener;)V -HSPLokhttp3/internal/connection/ExchangeFinder;->findHealthyConnection(IIIZZ)Lokhttp3/internal/connection/RealConnection; -HSPLokhttp3/internal/connection/RealCall$AsyncCall;->(Lokhttp3/internal/connection/RealCall;Lcoil/util/ContinuationCallback;)V -HSPLokhttp3/internal/connection/RealCall$AsyncCall;->run()V -HSPLokhttp3/internal/connection/RealCall$timeout$1;->(Lokhttp3/internal/connection/RealCall;)V -HSPLokhttp3/internal/connection/RealCall;->(Lokhttp3/OkHttpClient;Lokhttp3/Request;Z)V -HSPLokhttp3/internal/connection/RealCall;->enqueue(Lcoil/util/ContinuationCallback;)V -HSPLokhttp3/internal/connection/RealCall;->getResponseWithInterceptorChain$okhttp()Lokhttp3/Response; -HSPLokhttp3/internal/connection/RealConnection$WhenMappings;->()V -HSPLokhttp3/internal/connection/RealConnection;->(Lokhttp3/internal/connection/RealConnectionPool;Lokhttp3/Route;)V -HSPLokhttp3/internal/connection/RealConnection;->connect(IIIZLokhttp3/internal/connection/RealCall;Lokhttp3/EventListener;)V -HSPLokhttp3/internal/connection/RealConnection;->connectSocket(IILokhttp3/internal/connection/RealCall;Lokhttp3/EventListener;)V -HSPLokhttp3/internal/connection/RealConnection;->establishProtocol(Lokhttp3/internal/connection/ConnectionSpecSelector;Lokhttp3/internal/connection/RealCall;Lokhttp3/EventListener;)V -HSPLokhttp3/internal/connection/RealConnectionPool$cleanupTask$1;->(Lokhttp3/internal/connection/RealConnectionPool;Ljava/lang/String;)V -HSPLokhttp3/internal/connection/RealConnectionPool;->(Lokhttp3/internal/concurrent/TaskRunner;Ljava/util/concurrent/TimeUnit;)V -HSPLokhttp3/internal/connection/RealConnectionPool;->callAcquirePooledConnection(Lokhttp3/Address;Lokhttp3/internal/connection/RealCall;Ljava/util/List;Z)Z -HSPLokhttp3/internal/connection/RouteDatabase;->()V -HSPLokhttp3/internal/connection/RouteSelector$Selection;->(Ljava/util/ArrayList;)V -HSPLokhttp3/internal/connection/RouteSelector$Selection;->hasNext()Z -HSPLokhttp3/internal/connection/RouteSelector;->(Lokhttp3/Address;Lokhttp3/internal/connection/RouteDatabase;Lokhttp3/internal/connection/RealCall;Lokhttp3/EventListener;)V -HSPLokhttp3/internal/connection/RouteSelector;->hasNext()Z -HSPLokhttp3/internal/http/BridgeInterceptor;->(Lokhttp3/CookieJar;)V -HSPLokhttp3/internal/http/BridgeInterceptor;->intercept(Lokhttp3/internal/http/RealInterceptorChain;)Lokhttp3/Response; -HSPLokhttp3/internal/http/CallServerInterceptor;->(Z)V -HSPLokhttp3/internal/http/RealInterceptorChain;->(Lokhttp3/internal/connection/RealCall;Ljava/util/List;ILokhttp3/internal/connection/Exchange;Lokhttp3/Request;III)V -HSPLokhttp3/internal/http/RealInterceptorChain;->copy$okhttp$default(Lokhttp3/internal/http/RealInterceptorChain;ILokhttp3/internal/connection/Exchange;Lokhttp3/Request;I)Lokhttp3/internal/http/RealInterceptorChain; -HSPLokhttp3/internal/http/RealInterceptorChain;->proceed(Lokhttp3/Request;)Lokhttp3/Response; -HSPLokhttp3/internal/http/RetryAndFollowUpInterceptor;->(Lokhttp3/OkHttpClient;)V -HSPLokhttp3/internal/http/RetryAndFollowUpInterceptor;->intercept(Lokhttp3/internal/http/RealInterceptorChain;)Lokhttp3/Response; -HSPLokhttp3/internal/http2/Http2Connection$Listener$Companion$REFUSE_INCOMING_STREAMS$1;->()V -HSPLokhttp3/internal/http2/Http2Connection$Listener;->()V -HSPLokhttp3/internal/http2/Http2Connection$Listener;->()V -HSPLokhttp3/internal/platform/Android10Platform;->()V -HSPLokhttp3/internal/platform/Android10Platform;->()V -HSPLokhttp3/internal/platform/Android10Platform;->buildCertificateChainCleaner(Ljavax/net/ssl/X509TrustManager;)Lokhttp3/internal/tls/CertificateChainCleaner; -HSPLokhttp3/internal/platform/Android10Platform;->configureTlsExtensions(Ljavax/net/ssl/SSLSocket;Ljava/lang/String;Ljava/util/List;)V -HSPLokhttp3/internal/platform/Platform$Companion;->()V -HSPLokhttp3/internal/platform/Platform$Companion;->alpnProtocolNames(Ljava/util/List;)Ljava/util/ArrayList; -HSPLokhttp3/internal/platform/Platform$Companion;->isAndroid()Z -HSPLokhttp3/internal/platform/Platform;->()V -HSPLokhttp3/internal/platform/Platform;->()V -HSPLokhttp3/internal/platform/Platform;->connectSocket(Ljava/net/Socket;Ljava/net/InetSocketAddress;I)V -HSPLokhttp3/internal/platform/Platform;->getStackTraceForCloseable()Ljava/lang/Object; -HSPLokhttp3/internal/platform/Platform;->newSSLContext()Ljavax/net/ssl/SSLContext; -HSPLokhttp3/internal/platform/Platform;->newSslSocketFactory(Ljavax/net/ssl/X509TrustManager;)Ljavax/net/ssl/SSLSocketFactory; -HSPLokhttp3/internal/platform/Platform;->platformTrustManager()Ljavax/net/ssl/X509TrustManager; -HSPLokhttp3/internal/platform/android/Android10SocketAdapter;->()V -HSPLokhttp3/internal/platform/android/Android10SocketAdapter;->configureTlsExtensions(Ljavax/net/ssl/SSLSocket;Ljava/lang/String;Ljava/util/List;)V -HSPLokhttp3/internal/platform/android/Android10SocketAdapter;->isSupported()Z -HSPLokhttp3/internal/platform/android/Android10SocketAdapter;->matchesSocket(Ljavax/net/ssl/SSLSocket;)Z -HSPLokhttp3/internal/platform/android/AndroidCertificateChainCleaner;->(Ljavax/net/ssl/X509TrustManager;Landroid/net/http/X509TrustManagerExtensions;)V -HSPLokhttp3/internal/platform/android/AndroidCertificateChainCleaner;->hashCode()I -HSPLokhttp3/internal/platform/android/AndroidLog;->()V -HSPLokhttp3/internal/platform/android/AndroidLogHandler;->()V -HSPLokhttp3/internal/platform/android/AndroidLogHandler;->()V -HSPLokhttp3/internal/platform/android/AndroidSocketAdapter$Companion$factory$1;->()V -HSPLokhttp3/internal/platform/android/AndroidSocketAdapter;->()V -HSPLokhttp3/internal/platform/android/BouncyCastleSocketAdapter$Companion$factory$1;->()V -HSPLokhttp3/internal/platform/android/BouncyCastleSocketAdapter;->()V -HSPLokhttp3/internal/platform/android/ConscryptSocketAdapter$Companion$factory$1;->()V -HSPLokhttp3/internal/platform/android/ConscryptSocketAdapter;->()V -HSPLokhttp3/internal/platform/android/DeferredSocketAdapter;->(Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory;)V -HSPLokhttp3/internal/platform/android/DeferredSocketAdapter;->isSupported()Z -HSPLokhttp3/internal/tls/CertificateChainCleaner;->()V -HSPLokhttp3/internal/tls/OkHostnameVerifier;->()V -HSPLokhttp3/internal/tls/OkHostnameVerifier;->()V -HSPLokio/AsyncTimeout$sink$1;->(Lokio/SocketAsyncTimeout;Lokio/OutputStreamSink;)V -HSPLokio/AsyncTimeout$source$1;->(Lokio/SocketAsyncTimeout;Lokio/InputStreamSource;)V -HSPLokio/AsyncTimeout;->()V -HSPLokio/AsyncTimeout;->()V -HSPLokio/AsyncTimeout;->enter()V -HSPLokio/Buffer;->()V -HSPLokio/Buffer;->completeSegmentByteCount()J -HSPLokio/Buffer;->exhausted()Z -HSPLokio/Buffer;->getByte(J)B -HSPLokio/Buffer;->indexOfElement(Lokio/ByteString;)J -HSPLokio/Buffer;->rangeEquals(JLokio/ByteString;)Z -HSPLokio/Buffer;->read(Lokio/Buffer;J)J -HSPLokio/Buffer;->read([BII)I -HSPLokio/Buffer;->readByte()B -HSPLokio/Buffer;->readByteArray(J)[B -HSPLokio/Buffer;->readByteString()Lokio/ByteString; -HSPLokio/Buffer;->readByteString(J)Lokio/ByteString; -HSPLokio/Buffer;->readInt()I -HSPLokio/Buffer;->readString(JLjava/nio/charset/Charset;)Ljava/lang/String; -HSPLokio/Buffer;->writableSegment$okio(I)Lokio/Segment; -HSPLokio/Buffer;->write(Lokio/Buffer;J)V -HSPLokio/Buffer;->write(Lokio/ByteString;)V -HSPLokio/Buffer;->write([BII)V -HSPLokio/Buffer;->writeAll(Lokio/Source;)V -HSPLokio/Buffer;->writeByte(I)V -HSPLokio/Buffer;->writeDecimalLong(J)Lokio/Buffer; -HSPLokio/Buffer;->writeInt(I)V -HSPLokio/Buffer;->writeUtf8(IILjava/lang/String;)V -HSPLokio/Buffer;->writeUtf8(Ljava/lang/String;)V -HSPLokio/Buffer;->writeUtf8CodePoint(I)V -HSPLokio/ByteString$Companion;->()V -HSPLokio/ByteString$Companion;->decodeHex(Ljava/lang/String;)Lokio/ByteString; -HSPLokio/ByteString$Companion;->encodeUtf8(Ljava/lang/String;)Lokio/ByteString; -HSPLokio/ByteString;->()V -HSPLokio/ByteString;->([B)V -HSPLokio/ByteString;->compareTo(Ljava/lang/Object;)I -HSPLokio/ByteString;->compareTo(Lokio/ByteString;)I -HSPLokio/ByteString;->digest$okio(Ljava/lang/String;)Lokio/ByteString; -HSPLokio/ByteString;->equals(Ljava/lang/Object;)Z -HSPLokio/ByteString;->getSize$okio()I -HSPLokio/ByteString;->hex()Ljava/lang/String; -HSPLokio/ByteString;->indexOf$default(Lokio/ByteString;Lokio/ByteString;)I -HSPLokio/ByteString;->indexOf(I[B)I -HSPLokio/ByteString;->internalArray$okio()[B -HSPLokio/ByteString;->internalGet$okio(I)B -HSPLokio/ByteString;->lastIndexOf$default(Lokio/ByteString;Lokio/ByteString;)I -HSPLokio/ByteString;->lastIndexOf(I[B)I -HSPLokio/ByteString;->rangeEquals(ILokio/ByteString;I)Z -HSPLokio/ByteString;->rangeEquals(I[BII)Z -HSPLokio/ByteString;->substring$default(Lokio/ByteString;III)Lokio/ByteString; -HSPLokio/ByteString;->substring(II)Lokio/ByteString; -HSPLokio/ByteString;->utf8()Ljava/lang/String; -HSPLokio/ByteString;->write$okio(Lokio/Buffer;I)V -HSPLokio/FileMetadata;->(ZZLokio/Path;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;)V -HSPLokio/FileMetadata;->(ZZLokio/Path;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/lang/Long;Ljava/util/Map;)V -HSPLokio/FileSystem;->()V -HSPLokio/FileSystem;->()V -HSPLokio/FileSystem;->delete$1(Lokio/Path;)V -HSPLokio/FileSystem;->exists(Lokio/Path;)Z -HSPLokio/ForwardingFileSystem;->(Lokio/JvmSystemFileSystem;)V -HSPLokio/ForwardingFileSystem;->atomicMove(Lokio/Path;Lokio/Path;)V -HSPLokio/ForwardingFileSystem;->delete(Lokio/Path;)V -HSPLokio/ForwardingFileSystem;->metadataOrNull(Lokio/Path;)Lokio/FileMetadata; -HSPLokio/ForwardingSink;->(Lokio/Sink;)V -HSPLokio/InputStreamSource;->(Ljava/io/InputStream;Lokio/Timeout;)V -HSPLokio/JvmSystemFileSystem;->()V -HSPLokio/JvmSystemFileSystem;->appendingSink(Lokio/Path;)Lokio/Sink; -HSPLokio/JvmSystemFileSystem;->createDirectory(Lokio/Path;)V -HSPLokio/JvmSystemFileSystem;->delete(Lokio/Path;)V -HSPLokio/JvmSystemFileSystem;->sink(Lokio/Path;)Lokio/Sink; -HSPLokio/NioSystemFileSystem;->()V -HSPLokio/NioSystemFileSystem;->atomicMove(Lokio/Path;Lokio/Path;)V -HSPLokio/NioSystemFileSystem;->metadataOrNull(Lokio/Path;)Lokio/FileMetadata; -HSPLokio/NioSystemFileSystem;->zeroToNull(Ljava/nio/file/attribute/FileTime;)Ljava/lang/Long; -HSPLokio/Okio;->buffer(Lokio/Sink;)Lokio/RealBufferedSink; -HSPLokio/Okio;->buffer(Lokio/Source;)Lokio/RealBufferedSource; -HSPLokio/Okio;->sink(Ljava/net/Socket;)Lokio/AsyncTimeout$sink$1; -HSPLokio/Okio;->source(Ljava/net/Socket;)Lokio/AsyncTimeout$source$1; -HSPLokio/Okio__JvmOkioKt;->()V -HSPLokio/Okio__OkioKt;->compareValues(Ljava/lang/Comparable;Ljava/lang/Comparable;)I -HSPLokio/Okio__OkioKt;->get(Landroid/view/View;)Landroidx/lifecycle/ViewModelStoreOwner; -HSPLokio/Options$Companion;->buildTrieRecursive(JLokio/Buffer;ILjava/util/ArrayList;IILjava/util/ArrayList;)V -HSPLokio/OutputStreamSink;->(Ljava/io/OutputStream;Lokio/Timeout;)V -HSPLokio/OutputStreamSink;->close()V -HSPLokio/OutputStreamSink;->write(Lokio/Buffer;J)V -HSPLokio/Path$Companion;->()V -HSPLokio/Path$Companion;->get$default(Ljava/io/File;)Lokio/Path; -HSPLokio/Path$Companion;->get(Ljava/lang/String;Z)Lokio/Path; -HSPLokio/Path;->()V -HSPLokio/Path;->(Lokio/ByteString;)V -HSPLokio/Path;->parent()Lokio/Path; -HSPLokio/Path;->resolve(Ljava/lang/String;)Lokio/Path; -HSPLokio/Path;->toFile()Ljava/io/File; -HSPLokio/Path;->toNioPath()Ljava/nio/file/Path; -HSPLokio/Path;->toString()Ljava/lang/String; -HSPLokio/Path;->volumeLetter()Ljava/lang/Character; -HSPLokio/RealBufferedSink;->(Lokio/Sink;)V -HSPLokio/RealBufferedSink;->close()V -HSPLokio/RealBufferedSink;->emitCompleteSegments()Lokio/BufferedSink; -HSPLokio/RealBufferedSink;->writeByte(I)Lokio/BufferedSink; -HSPLokio/RealBufferedSink;->writeDecimalLong(J)Lokio/BufferedSink; -HSPLokio/RealBufferedSink;->writeUtf8(Ljava/lang/String;)Lokio/BufferedSink; -HSPLokio/RealBufferedSource;->(Lokio/Source;)V -HSPLokio/Segment;->()V -HSPLokio/Segment;->([BIIZ)V -HSPLokio/Segment;->pop()Lokio/Segment; -HSPLokio/Segment;->push(Lokio/Segment;)V -HSPLokio/Segment;->writeTo(Lokio/Segment;I)V -HSPLokio/SegmentPool;->()V -HSPLokio/SegmentPool;->recycle(Lokio/Segment;)V -HSPLokio/SegmentPool;->take()Lokio/Segment; -HSPLokio/SocketAsyncTimeout;->(Ljava/net/Socket;)V -HSPLokio/Timeout$Companion$NONE$1;->()V -HSPLokio/Timeout;->()V -HSPLokio/Timeout;->()V -HSPLokio/Timeout;->throwIfReached()V -HSPLokio/Timeout;->timeout(JLjava/util/concurrent/TimeUnit;)Lokio/Timeout; -HSPLokio/_UtilKt;->arrayRangeEquals(III[B[B)Z -HSPLokio/_UtilKt;->checkOffsetAndCount(JJJ)V -HSPLokio/_UtilKt;->resolveDefaultParameter(Lokio/ByteString;I)I -HSPLokio/internal/ResourceFileSystem$Companion;->()V -HSPLokio/internal/ResourceFileSystem$roots$2;->(Ljava/lang/ClassLoader;)V -HSPLokio/internal/ResourceFileSystem;->()V -HSPLokio/internal/ResourceFileSystem;->(Ljava/lang/ClassLoader;)V -HSPLokio/internal/_BufferKt;->()V -HSPLokio/internal/_ByteStringKt;->()V -HSPLokio/internal/_ByteStringKt;->access$decodeHexDigit(C)I -HSPLokio/internal/_PathKt;->()V -HSPLokio/internal/_PathKt;->access$rootLength(Lokio/Path;)I -HSPLokio/internal/_PathKt;->commonResolve(Lokio/Path;Lokio/Path;Z)Lokio/Path; -HSPLokio/internal/_PathKt;->getSlash(Lokio/Path;)Lokio/ByteString; -HSPLokio/internal/_PathKt;->toPath(Lokio/Buffer;Z)Lokio/Path; -HSPLokio/internal/_PathKt;->toSlash(B)Lokio/ByteString; -HSPLokio/internal/_PathKt;->toSlash(Ljava/lang/String;)Lokio/ByteString; -Landroidx/activity/Cancellable; -Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda0; -Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda1; -Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda2; -Landroidx/activity/ComponentActivity$1; -Landroidx/activity/ComponentActivity$2; -Landroidx/activity/ComponentActivity$3; -Landroidx/activity/ComponentActivity$4; -Landroidx/activity/ComponentActivity$5; -Landroidx/activity/ComponentActivity$Api33Impl; -Landroidx/activity/ComponentActivity$NonConfigurationInstances; -Landroidx/activity/ComponentActivity; -Landroidx/activity/OnBackPressedCallback; -Landroidx/activity/OnBackPressedDispatcher$$ExternalSyntheticLambda0; -Landroidx/activity/OnBackPressedDispatcher$$ExternalSyntheticLambda1; -Landroidx/activity/OnBackPressedDispatcher$Api33Impl$$ExternalSyntheticLambda0; -Landroidx/activity/OnBackPressedDispatcher$Api33Impl; -Landroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable; -Landroidx/activity/OnBackPressedDispatcher$OnBackPressedCancellable; -Landroidx/activity/OnBackPressedDispatcher; -Landroidx/activity/OnBackPressedDispatcherOwner; -Landroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$1; -Landroidx/activity/ViewTreeOnBackPressedDispatcherOwner$findViewTreeOnBackPressedDispatcherOwner$2; -Landroidx/activity/compose/ComponentActivityKt; -Landroidx/activity/compose/LocalOnBackPressedDispatcherOwner$LocalOnBackPressedDispatcherOwner$1; -Landroidx/activity/compose/LocalOnBackPressedDispatcherOwner; -Landroidx/activity/contextaware/ContextAwareHelper; -Landroidx/activity/contextaware/OnContextAvailableListener; -Landroidx/activity/result/ActivityResult$$ExternalSyntheticOutline0; -Landroidx/activity/result/ActivityResultRegistry; -Landroidx/appcompat/R$bool; -Landroidx/appcompat/R$style; -Landroidx/appcompat/resources/R$drawable; -Landroidx/appcompat/view/SupportMenuInflater$$ExternalSyntheticOutline0; -Landroidx/appcompat/widget/AppCompatTextHelper$Api28Impl$$ExternalSyntheticApiModelOutline0; -Landroidx/arch/core/executor/ArchTaskExecutor$2; -Landroidx/arch/core/executor/ArchTaskExecutor; -Landroidx/arch/core/executor/DefaultTaskExecutor$$ExternalSyntheticApiModelOutline0; -Landroidx/arch/core/executor/DefaultTaskExecutor$1; -Landroidx/arch/core/executor/DefaultTaskExecutor; -Landroidx/arch/core/executor/TaskExecutor; -Landroidx/arch/core/internal/FastSafeIterableMap; -Landroidx/arch/core/internal/SafeIterableMap$AscendingIterator; -Landroidx/arch/core/internal/SafeIterableMap$Entry; -Landroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions; -Landroidx/arch/core/internal/SafeIterableMap$ListIterator; -Landroidx/arch/core/internal/SafeIterableMap$SupportRemove; -Landroidx/arch/core/internal/SafeIterableMap; -Landroidx/arch/core/util/Function; -Landroidx/collection/ArrayMap$KeyIterator; -Landroidx/collection/ArrayMap$KeySet; -Landroidx/collection/ArrayMap; -Landroidx/collection/ArraySet; -Landroidx/collection/IndexBasedArrayIterator; -Landroidx/collection/LruCache; -Landroidx/collection/SimpleArrayMap; -Landroidx/collection/SparseArrayCompat; -Landroidx/collection/SparseArrayKt$valueIterator$1; -Landroidx/compose/animation/AnimatedEnterExitMeasurePolicy$measure$1; -Landroidx/compose/animation/AnimatedEnterExitMeasurePolicy; -Landroidx/compose/animation/AnimatedVisibilityKt$$ExternalSyntheticOutline0; -Landroidx/compose/animation/AnimatedVisibilityKt$$ExternalSyntheticOutline1; -Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1$1; -Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1$2; -Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1; -Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$2; -Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$1; -Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$2; -Landroidx/compose/animation/AnimatedVisibilityKt; -Landroidx/compose/animation/AnimatedVisibilityScope; -Landroidx/compose/animation/AnimatedVisibilityScopeImpl; -Landroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1; -Landroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$2; -Landroidx/compose/animation/ColorVectorConverterKt; -Landroidx/compose/animation/CrossfadeKt$$ExternalSyntheticOutline0; -Landroidx/compose/animation/CrossfadeKt$Crossfade$2; -Landroidx/compose/animation/CrossfadeKt$Crossfade$3; -Landroidx/compose/animation/CrossfadeKt$Crossfade$5$1$$ExternalSyntheticOutline0; -Landroidx/compose/animation/CrossfadeKt$Crossfade$5$1$1$1; -Landroidx/compose/animation/CrossfadeKt$Crossfade$5$1; -Landroidx/compose/animation/CrossfadeKt$Crossfade$7; -Landroidx/compose/animation/CrossfadeKt; -Landroidx/compose/animation/EnterExitState; -Landroidx/compose/animation/EnterExitTransitionKt$TransformOriginVectorConverter$1; -Landroidx/compose/animation/EnterExitTransitionKt$TransformOriginVectorConverter$2; -Landroidx/compose/animation/EnterExitTransitionKt$createModifier$2$1; -Landroidx/compose/animation/EnterExitTransitionKt$createModifier$alpha$2; -Landroidx/compose/animation/EnterExitTransitionKt$shrinkExpand$1$$ExternalSyntheticOutline0; -Landroidx/compose/animation/EnterExitTransitionKt$shrinkExpand$1; -Landroidx/compose/animation/EnterExitTransitionKt$slideInOut$1; -Landroidx/compose/animation/EnterExitTransitionKt$slideInVertically$2; -Landroidx/compose/animation/EnterExitTransitionKt$slideOutVertically$2; -Landroidx/compose/animation/EnterExitTransitionKt; -Landroidx/compose/animation/EnterTransition; -Landroidx/compose/animation/EnterTransitionImpl; -Landroidx/compose/animation/ExitTransition; -Landroidx/compose/animation/ExitTransitionImpl; -Landroidx/compose/animation/Fade; -Landroidx/compose/animation/FlingCalculator; -Landroidx/compose/animation/FlingCalculatorKt; -Landroidx/compose/animation/LayoutModifierWithPassThroughIntrinsics; -Landroidx/compose/animation/SingleValueAnimationKt; -Landroidx/compose/animation/Slide; -Landroidx/compose/animation/SlideModifier$measure$1$slideOffset$1; -Landroidx/compose/animation/SlideModifier$measure$1; -Landroidx/compose/animation/SlideModifier$transitionSpec$1; -Landroidx/compose/animation/SlideModifier; -Landroidx/compose/animation/SplineBasedFloatDecayAnimationSpec; -Landroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt; -Landroidx/compose/animation/TransitionData; -Landroidx/compose/animation/core/Animatable$runAnimation$2$1; -Landroidx/compose/animation/core/Animatable$runAnimation$2; -Landroidx/compose/animation/core/Animatable$snapTo$2; -Landroidx/compose/animation/core/Animatable; -Landroidx/compose/animation/core/AnimatableKt; -Landroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2; -Landroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1; -Landroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3; -Landroidx/compose/animation/core/AnimateAsStateKt; -Landroidx/compose/animation/core/Animation; -Landroidx/compose/animation/core/AnimationEndReason$EnumUnboxingSharedUtility; -Landroidx/compose/animation/core/AnimationResult; -Landroidx/compose/animation/core/AnimationScope; -Landroidx/compose/animation/core/AnimationSpec; -Landroidx/compose/animation/core/AnimationSpecKt; -Landroidx/compose/animation/core/AnimationState; -Landroidx/compose/animation/core/AnimationVector1D; -Landroidx/compose/animation/core/AnimationVector2D; -Landroidx/compose/animation/core/AnimationVector4D; -Landroidx/compose/animation/core/AnimationVector; -Landroidx/compose/animation/core/AnimationVectorsKt; -Landroidx/compose/animation/core/Animations; -Landroidx/compose/animation/core/ComplexDouble; -Landroidx/compose/animation/core/ComplexDoubleKt; -Landroidx/compose/animation/core/CubicBezierEasing; -Landroidx/compose/animation/core/DecayAnimationSpec; -Landroidx/compose/animation/core/DecayAnimationSpecImpl; -Landroidx/compose/animation/core/DurationBasedAnimationSpec; -Landroidx/compose/animation/core/Easing; -Landroidx/compose/animation/core/EasingKt$LinearEasing$1; -Landroidx/compose/animation/core/EasingKt; -Landroidx/compose/animation/core/FiniteAnimationSpec; -Landroidx/compose/animation/core/FloatAnimationSpec; -Landroidx/compose/animation/core/FloatDecayAnimationSpec; -Landroidx/compose/animation/core/FloatSpringSpec; -Landroidx/compose/animation/core/FloatTweenSpec; -Landroidx/compose/animation/core/InfiniteAnimationPolicyKt; -Landroidx/compose/animation/core/InfiniteRepeatableSpec; -Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState; -Landroidx/compose/animation/core/InfiniteTransition$run$1$1; -Landroidx/compose/animation/core/InfiniteTransition$run$1; -Landroidx/compose/animation/core/InfiniteTransition$run$2; -Landroidx/compose/animation/core/InfiniteTransition; -Landroidx/compose/animation/core/InfiniteTransitionKt$animateValue$1; -Landroidx/compose/animation/core/InfiniteTransitionKt$animateValue$2$invoke$$inlined$onDispose$1; -Landroidx/compose/animation/core/InfiniteTransitionKt$animateValue$2; -Landroidx/compose/animation/core/InfiniteTransitionKt; -Landroidx/compose/animation/core/KeyframesSpec$KeyframeEntity; -Landroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig; -Landroidx/compose/animation/core/KeyframesSpec; -Landroidx/compose/animation/core/MutableTransitionState; -Landroidx/compose/animation/core/MutatorMutex$Mutator; -Landroidx/compose/animation/core/MutatorMutex$mutate$2; -Landroidx/compose/animation/core/MutatorMutex; -Landroidx/compose/animation/core/SpringSimulation; -Landroidx/compose/animation/core/SpringSpec; -Landroidx/compose/animation/core/SuspendAnimationKt$animate$4; -Landroidx/compose/animation/core/SuspendAnimationKt$animate$6$1; -Landroidx/compose/animation/core/SuspendAnimationKt$animate$6; -Landroidx/compose/animation/core/SuspendAnimationKt$animate$9; -Landroidx/compose/animation/core/SuspendAnimationKt$callWithFrameNanos$2; -Landroidx/compose/animation/core/SuspendAnimationKt; -Landroidx/compose/animation/core/TargetBasedAnimation; -Landroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData; -Landroidx/compose/animation/core/Transition$DeferredAnimation; -Landroidx/compose/animation/core/Transition$Segment; -Landroidx/compose/animation/core/Transition$SegmentImpl; -Landroidx/compose/animation/core/Transition$TransitionAnimationState; -Landroidx/compose/animation/core/Transition$animateTo$1$1$1; -Landroidx/compose/animation/core/Transition$animateTo$1$1; -Landroidx/compose/animation/core/Transition$animateTo$2; -Landroidx/compose/animation/core/Transition$totalDurationNanos$2; -Landroidx/compose/animation/core/Transition$updateTarget$2; -Landroidx/compose/animation/core/Transition; -Landroidx/compose/animation/core/TransitionKt$createChildTransitionInternal$1$1$invoke$$inlined$onDispose$1; -Landroidx/compose/animation/core/TransitionKt$createChildTransitionInternal$1$1; -Landroidx/compose/animation/core/TransitionKt$createDeferredAnimation$1$invoke$$inlined$onDispose$1; -Landroidx/compose/animation/core/TransitionKt$createDeferredAnimation$1; -Landroidx/compose/animation/core/TransitionKt$createTransitionAnimation$1$1$invoke$$inlined$onDispose$1; -Landroidx/compose/animation/core/TransitionKt$createTransitionAnimation$1$1; -Landroidx/compose/animation/core/TransitionKt$updateTransition$1$1$invoke$$inlined$onDispose$1; -Landroidx/compose/animation/core/TransitionKt$updateTransition$1$1; -Landroidx/compose/animation/core/TransitionKt; -Landroidx/compose/animation/core/TweenSpec; -Landroidx/compose/animation/core/TwoWayConverter; -Landroidx/compose/animation/core/TwoWayConverterImpl; -Landroidx/compose/animation/core/VectorConvertersKt$DpOffsetToVector$1; -Landroidx/compose/animation/core/VectorConvertersKt$DpOffsetToVector$2; -Landroidx/compose/animation/core/VectorConvertersKt$DpToVector$1; -Landroidx/compose/animation/core/VectorConvertersKt$DpToVector$2; -Landroidx/compose/animation/core/VectorConvertersKt$FloatToVector$1; -Landroidx/compose/animation/core/VectorConvertersKt$FloatToVector$2; -Landroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$1; -Landroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$2; -Landroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$1; -Landroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$2; -Landroidx/compose/animation/core/VectorConvertersKt$IntToVector$1; -Landroidx/compose/animation/core/VectorConvertersKt$IntToVector$2; -Landroidx/compose/animation/core/VectorConvertersKt$OffsetToVector$1; -Landroidx/compose/animation/core/VectorConvertersKt$OffsetToVector$2; -Landroidx/compose/animation/core/VectorConvertersKt$RectToVector$1; -Landroidx/compose/animation/core/VectorConvertersKt$RectToVector$2; -Landroidx/compose/animation/core/VectorConvertersKt$SizeToVector$1; -Landroidx/compose/animation/core/VectorConvertersKt$SizeToVector$2; -Landroidx/compose/animation/core/VectorConvertersKt; -Landroidx/compose/animation/core/VectorizedAnimationSpec; -Landroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$1; -Landroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$2; -Landroidx/compose/animation/core/VectorizedAnimationSpecKt; -Landroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec; -Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec; -Landroidx/compose/animation/core/VectorizedFloatAnimationSpec$1; -Landroidx/compose/animation/core/VectorizedFloatAnimationSpec; -Landroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec; -Landroidx/compose/animation/core/VectorizedKeyframesSpec; -Landroidx/compose/animation/core/VectorizedSpringSpec; -Landroidx/compose/animation/core/VectorizedTweenSpec; -Landroidx/compose/animation/core/VisibilityThresholdsKt; -Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1$1; -Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1; -Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1; -Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1; -Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect; -Landroidx/compose/foundation/AndroidOverscrollKt$NoOpOverscrollEffect$1; -Landroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1$1; -Landroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1; -Landroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2$1; -Landroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2; -Landroidx/compose/foundation/AndroidOverscrollKt; -Landroidx/compose/foundation/Api31Impl$$ExternalSyntheticApiModelOutline1; -Landroidx/compose/foundation/Api31Impl; -Landroidx/compose/foundation/Background; -Landroidx/compose/foundation/BackgroundKt; -Landroidx/compose/foundation/CanvasKt; -Landroidx/compose/foundation/ClickableKt$PressedInteractionSourceDisposableEffect$1$invoke$$inlined$onDispose$1; -Landroidx/compose/foundation/ClickableKt$PressedInteractionSourceDisposableEffect$1; -Landroidx/compose/foundation/ClickableKt$clickable$4$1$1; -Landroidx/compose/foundation/ClickableKt$clickable$4$delayPressInteraction$1$1; -Landroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$1; -Landroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$2; -Landroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1; -Landroidx/compose/foundation/ClickableKt$clickable$4; -Landroidx/compose/foundation/ClickableKt$genericClickableWithoutGesture$clickSemantics$1$1; -Landroidx/compose/foundation/ClickableKt$genericClickableWithoutGesture$clickSemantics$1; -Landroidx/compose/foundation/ClickableKt$genericClickableWithoutGesture$detectPressAndClickFromKey$1; -Landroidx/compose/foundation/ClickableKt; -Landroidx/compose/foundation/Clickable_androidKt$isComposeRootInScrollableContainer$1; -Landroidx/compose/foundation/Clickable_androidKt; -Landroidx/compose/foundation/ClipScrollableContainerKt$HorizontalScrollableClipModifier$1; -Landroidx/compose/foundation/ClipScrollableContainerKt$VerticalScrollableClipModifier$1; -Landroidx/compose/foundation/ClipScrollableContainerKt; -Landroidx/compose/foundation/DarkThemeKt; -Landroidx/compose/foundation/DrawOverscrollModifier; -Landroidx/compose/foundation/EdgeEffectCompat; -Landroidx/compose/foundation/FocusableKt$focusGroup$1; -Landroidx/compose/foundation/FocusableKt$focusable$2$1$1$invoke$$inlined$onDispose$1; -Landroidx/compose/foundation/FocusableKt$focusable$2$1$1; -Landroidx/compose/foundation/FocusableKt$focusable$2$2$1; -Landroidx/compose/foundation/FocusableKt$focusable$2$2$invoke$$inlined$onDispose$1; -Landroidx/compose/foundation/FocusableKt$focusable$2$2; -Landroidx/compose/foundation/FocusableKt$focusable$2$3$1; -Landroidx/compose/foundation/FocusableKt$focusable$2$3; -Landroidx/compose/foundation/FocusableKt$focusable$2$4$1; -Landroidx/compose/foundation/FocusableKt$focusable$2$5$3; -Landroidx/compose/foundation/FocusableKt$focusable$2$5; -Landroidx/compose/foundation/FocusableKt$focusable$2; -Landroidx/compose/foundation/FocusableKt$focusableInNonTouchMode$2$1; -Landroidx/compose/foundation/FocusableKt$focusableInNonTouchMode$2; -Landroidx/compose/foundation/FocusableKt; -Landroidx/compose/foundation/FocusedBoundsKt$ModifierLocalFocusedBoundsObserver$1; -Landroidx/compose/foundation/FocusedBoundsKt$onFocusedBoundsChanged$2; -Landroidx/compose/foundation/FocusedBoundsKt; -Landroidx/compose/foundation/FocusedBoundsObserverModifier; -Landroidx/compose/foundation/HoverableKt$hoverable$2$1$1$invoke$$inlined$onDispose$1; -Landroidx/compose/foundation/HoverableKt$hoverable$2$1$1; -Landroidx/compose/foundation/HoverableKt$hoverable$2$2$1; -Landroidx/compose/foundation/HoverableKt$hoverable$2$3$1; -Landroidx/compose/foundation/HoverableKt$hoverable$2$3; -Landroidx/compose/foundation/HoverableKt$hoverable$2$invoke$emitExit$1; -Landroidx/compose/foundation/HoverableKt$hoverable$2; -Landroidx/compose/foundation/Indication; -Landroidx/compose/foundation/IndicationInstance; -Landroidx/compose/foundation/IndicationKt$LocalIndication$1; -Landroidx/compose/foundation/IndicationKt$indication$2; -Landroidx/compose/foundation/IndicationKt; -Landroidx/compose/foundation/IndicationModifier; -Landroidx/compose/foundation/MutatorMutex; -Landroidx/compose/foundation/NoIndication$NoIndicationInstance; -Landroidx/compose/foundation/NoIndication; -Landroidx/compose/foundation/OverscrollConfiguration; -Landroidx/compose/foundation/OverscrollConfigurationKt$LocalOverscrollConfiguration$1; -Landroidx/compose/foundation/OverscrollConfigurationKt; -Landroidx/compose/foundation/OverscrollEffect; -Landroidx/compose/foundation/OverscrollKt; -Landroidx/compose/foundation/PinnableParentConsumer; -Landroidx/compose/foundation/gestures/AndroidConfig; -Landroidx/compose/foundation/gestures/AndroidScrollable_androidKt; -Landroidx/compose/foundation/gestures/ContentInViewModifier$modifier$1; -Landroidx/compose/foundation/gestures/ContentInViewModifier; -Landroidx/compose/foundation/gestures/DefaultFlingBehavior; -Landroidx/compose/foundation/gestures/DefaultScrollableState$scrollScope$1; -Landroidx/compose/foundation/gestures/DefaultScrollableState; -Landroidx/compose/foundation/gestures/DragLogic; -Landroidx/compose/foundation/gestures/DragScope; -Landroidx/compose/foundation/gestures/DraggableKt$awaitDownAndSlop$1; -Landroidx/compose/foundation/gestures/DraggableKt$draggable$6; -Landroidx/compose/foundation/gestures/DraggableKt$draggable$9$1$1$invoke$$inlined$onDispose$1; -Landroidx/compose/foundation/gestures/DraggableKt$draggable$9$1$1; -Landroidx/compose/foundation/gestures/DraggableKt$draggable$9$2; -Landroidx/compose/foundation/gestures/DraggableKt$draggable$9$3$1$1; -Landroidx/compose/foundation/gestures/DraggableKt$draggable$9$3$1; -Landroidx/compose/foundation/gestures/DraggableKt$draggable$9$3; -Landroidx/compose/foundation/gestures/DraggableKt$draggable$9; -Landroidx/compose/foundation/gestures/DraggableKt; -Landroidx/compose/foundation/gestures/DraggableState; -Landroidx/compose/foundation/gestures/FlingBehavior; -Landroidx/compose/foundation/gestures/ForEachGestureKt$forEachGesture$1; -Landroidx/compose/foundation/gestures/ForEachGestureKt; -Landroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider; -Landroidx/compose/foundation/gestures/Orientation; -Landroidx/compose/foundation/gestures/PressGestureScope; -Landroidx/compose/foundation/gestures/PressGestureScopeImpl; -Landroidx/compose/foundation/gestures/ScrollConfig; -Landroidx/compose/foundation/gestures/ScrollDraggableState; -Landroidx/compose/foundation/gestures/ScrollScope; -Landroidx/compose/foundation/gestures/ScrollableDefaults; -Landroidx/compose/foundation/gestures/ScrollableKt$ModifierLocalScrollableContainer$1; -Landroidx/compose/foundation/gestures/ScrollableKt$NoOpScrollScope$1; -Landroidx/compose/foundation/gestures/ScrollableKt$awaitScrollEvent$1; -Landroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1$1; -Landroidx/compose/foundation/gestures/ScrollableKt$mouseWheelScroll$1; -Landroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$1; -Landroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$2$1; -Landroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$3$1; -Landroidx/compose/foundation/gestures/ScrollableKt$scrollable$2; -Landroidx/compose/foundation/gestures/ScrollableKt$scrollableNestedScrollConnection$1; -Landroidx/compose/foundation/gestures/ScrollableKt; -Landroidx/compose/foundation/gestures/ScrollableState; -Landroidx/compose/foundation/gestures/ScrollingLogic; -Landroidx/compose/foundation/gestures/TapGestureDetectorKt$NoPressGesture$1; -Landroidx/compose/foundation/gestures/TapGestureDetectorKt$awaitFirstDownOnPass$1; -Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1; -Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1; -Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2; -Landroidx/compose/foundation/gestures/TapGestureDetectorKt; -Landroidx/compose/foundation/interaction/FocusInteraction$Focus; -Landroidx/compose/foundation/interaction/HoverInteraction$Enter; -Landroidx/compose/foundation/interaction/Interaction; -Landroidx/compose/foundation/interaction/InteractionSource; -Landroidx/compose/foundation/interaction/MutableInteractionSource; -Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl; -Landroidx/compose/foundation/interaction/PressInteraction$Press; -Landroidx/compose/foundation/layout/AddedInsets; -Landroidx/compose/foundation/layout/AndroidWindowInsets; -Landroidx/compose/foundation/layout/Arrangement$Bottom$1; -Landroidx/compose/foundation/layout/Arrangement$Center$1; -Landroidx/compose/foundation/layout/Arrangement$End$1; -Landroidx/compose/foundation/layout/Arrangement$Horizontal; -Landroidx/compose/foundation/layout/Arrangement$SpaceAround$1; -Landroidx/compose/foundation/layout/Arrangement$SpaceBetween$1; -Landroidx/compose/foundation/layout/Arrangement$SpaceEvenly$1; -Landroidx/compose/foundation/layout/Arrangement$SpacedAligned; -Landroidx/compose/foundation/layout/Arrangement$Start$1; -Landroidx/compose/foundation/layout/Arrangement$Top$1; -Landroidx/compose/foundation/layout/Arrangement$Vertical; -Landroidx/compose/foundation/layout/Arrangement$spacedBy$1; -Landroidx/compose/foundation/layout/Arrangement; -Landroidx/compose/foundation/layout/BoxChildData; -Landroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1$measure$1; -Landroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1; -Landroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$1; -Landroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$2; -Landroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$5; -Landroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1; -Landroidx/compose/foundation/layout/BoxKt; -Landroidx/compose/foundation/layout/ColumnKt$DefaultColumnMeasurePolicy$1; -Landroidx/compose/foundation/layout/ColumnKt; -Landroidx/compose/foundation/layout/CrossAxisAlignment$CenterCrossAxisAlignment; -Landroidx/compose/foundation/layout/CrossAxisAlignment$EndCrossAxisAlignment; -Landroidx/compose/foundation/layout/CrossAxisAlignment$HorizontalCrossAxisAlignment; -Landroidx/compose/foundation/layout/CrossAxisAlignment$StartCrossAxisAlignment; -Landroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment; -Landroidx/compose/foundation/layout/CrossAxisAlignment; -Landroidx/compose/foundation/layout/DerivedHeightModifier$measure$1; -Landroidx/compose/foundation/layout/DerivedHeightModifier; -Landroidx/compose/foundation/layout/ExcludeInsets; -Landroidx/compose/foundation/layout/FillModifier$measure$1; -Landroidx/compose/foundation/layout/FillModifier; -Landroidx/compose/foundation/layout/FixedIntInsets; -Landroidx/compose/foundation/layout/InsetsListener; -Landroidx/compose/foundation/layout/InsetsPaddingModifier$measure$1; -Landroidx/compose/foundation/layout/InsetsPaddingModifier; -Landroidx/compose/foundation/layout/InsetsPaddingValues; -Landroidx/compose/foundation/layout/InsetsValues; -Landroidx/compose/foundation/layout/LayoutWeightImpl; -Landroidx/compose/foundation/layout/LimitInsets; -Landroidx/compose/foundation/layout/OrientationIndependentConstraints$$ExternalSyntheticOutline0; -Landroidx/compose/foundation/layout/PaddingKt; -Landroidx/compose/foundation/layout/PaddingModifier$measure$1; -Landroidx/compose/foundation/layout/PaddingModifier; -Landroidx/compose/foundation/layout/PaddingValues; -Landroidx/compose/foundation/layout/PaddingValuesConsumingModifier; -Landroidx/compose/foundation/layout/PaddingValuesImpl; -Landroidx/compose/foundation/layout/PaddingValuesInsets; -Landroidx/compose/foundation/layout/PaddingValuesModifier$measure$2; -Landroidx/compose/foundation/layout/PaddingValuesModifier; -Landroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1$measure$4; -Landroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1; -Landroidx/compose/foundation/layout/RowColumnImplKt; -Landroidx/compose/foundation/layout/RowColumnParentData; -Landroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1; -Landroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1; -Landroidx/compose/foundation/layout/RowKt; -Landroidx/compose/foundation/layout/RowScope; -Landroidx/compose/foundation/layout/RowScopeInstance; -Landroidx/compose/foundation/layout/SizeKt$createFillHeightModifier$1; -Landroidx/compose/foundation/layout/SizeKt$createFillSizeModifier$1; -Landroidx/compose/foundation/layout/SizeKt$createFillWidthModifier$1; -Landroidx/compose/foundation/layout/SizeKt$createWrapContentSizeModifier$1; -Landroidx/compose/foundation/layout/SizeKt$createWrapContentSizeModifier$2; -Landroidx/compose/foundation/layout/SizeKt; -Landroidx/compose/foundation/layout/SizeModifier$measure$1; -Landroidx/compose/foundation/layout/SizeModifier; -Landroidx/compose/foundation/layout/SpacerKt$$ExternalSyntheticOutline0; -Landroidx/compose/foundation/layout/SpacerKt; -Landroidx/compose/foundation/layout/SpacerMeasurePolicy$measure$1$1; -Landroidx/compose/foundation/layout/SpacerMeasurePolicy; -Landroidx/compose/foundation/layout/UnionInsets; -Landroidx/compose/foundation/layout/UnspecifiedConstraintsModifier$measure$1; -Landroidx/compose/foundation/layout/UnspecifiedConstraintsModifier; -Landroidx/compose/foundation/layout/ValueInsets; -Landroidx/compose/foundation/layout/WindowInsets; -Landroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1$invoke$$inlined$onDispose$1; -Landroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1; -Landroidx/compose/foundation/layout/WindowInsetsHolder$Companion; -Landroidx/compose/foundation/layout/WindowInsetsHolder; -Landroidx/compose/foundation/layout/WindowInsetsKt; -Landroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1; -Landroidx/compose/foundation/layout/WindowInsetsPaddingKt; -Landroidx/compose/foundation/layout/WindowInsetsSides; -Landroidx/compose/foundation/layout/WindowInsetsSizeKt$windowInsetsBottomHeight$2; -Landroidx/compose/foundation/layout/WindowInsetsSizeKt; -Landroidx/compose/foundation/layout/WrapContentModifier; -Landroidx/compose/foundation/lazy/AwaitFirstLayoutModifier; -Landroidx/compose/foundation/lazy/grid/ComposableSingletons$LazyGridItemProviderKt$lambda-1$1; -Landroidx/compose/foundation/lazy/grid/ComposableSingletons$LazyGridItemProviderKt; -Landroidx/compose/foundation/lazy/grid/EmptyLazyGridLayoutInfo; -Landroidx/compose/foundation/lazy/grid/GridCells$Adaptive; -Landroidx/compose/foundation/lazy/grid/GridCells$Fixed; -Landroidx/compose/foundation/lazy/grid/GridCells; -Landroidx/compose/foundation/lazy/grid/GridItemSpan; -Landroidx/compose/foundation/lazy/grid/ItemIndex; -Landroidx/compose/foundation/lazy/grid/LazyGridDslKt$rememberColumnWidthSums$1$1; -Landroidx/compose/foundation/lazy/grid/LazyGridDslKt$rememberRowHeightSums$1$1; -Landroidx/compose/foundation/lazy/grid/LazyGridDslKt; -Landroidx/compose/foundation/lazy/grid/LazyGridIntervalContent; -Landroidx/compose/foundation/lazy/grid/LazyGridItemInfo; -Landroidx/compose/foundation/lazy/grid/LazyGridItemPlacementAnimator; -Landroidx/compose/foundation/lazy/grid/LazyGridItemProvider; -Landroidx/compose/foundation/lazy/grid/LazyGridItemProviderImpl; -Landroidx/compose/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$1$1; -Landroidx/compose/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$1$itemProviderState$1; -Landroidx/compose/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$nearestItemsRangeState$1$1; -Landroidx/compose/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$nearestItemsRangeState$2; -Landroidx/compose/foundation/lazy/grid/LazyGridItemProviderKt$rememberLazyGridItemProvider$nearestItemsRangeState$3; -Landroidx/compose/foundation/lazy/grid/LazyGridItemScope; -Landroidx/compose/foundation/lazy/grid/LazyGridItemScopeImpl; -Landroidx/compose/foundation/lazy/grid/LazyGridItemSpanScope; -Landroidx/compose/foundation/lazy/grid/LazyGridKt$ScrollPositionUpdater$1; -Landroidx/compose/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$1; -Landroidx/compose/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$3; -Landroidx/compose/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$measuredItemProvider$1; -Landroidx/compose/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$measuredLineProvider$1; -Landroidx/compose/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1; -Landroidx/compose/foundation/lazy/grid/LazyGridKt; -Landroidx/compose/foundation/lazy/grid/LazyGridLayoutInfo; -Landroidx/compose/foundation/lazy/grid/LazyGridMeasureKt$measureLazyGrid$3; -Landroidx/compose/foundation/lazy/grid/LazyGridMeasureResult; -Landroidx/compose/foundation/lazy/grid/LazyGridPlaceableWrapper; -Landroidx/compose/foundation/lazy/grid/LazyGridPositionedItem; -Landroidx/compose/foundation/lazy/grid/LazyGridScope; -Landroidx/compose/foundation/lazy/grid/LazyGridScopeImpl$DefaultSpan$1; -Landroidx/compose/foundation/lazy/grid/LazyGridScopeImpl$item$2$1; -Landroidx/compose/foundation/lazy/grid/LazyGridScopeImpl$item$3; -Landroidx/compose/foundation/lazy/grid/LazyGridScopeImpl$item$4; -Landroidx/compose/foundation/lazy/grid/LazyGridScopeImpl; -Landroidx/compose/foundation/lazy/grid/LazyGridScrollPosition; -Landroidx/compose/foundation/lazy/grid/LazyGridSpanLayoutProvider$Bucket; -Landroidx/compose/foundation/lazy/grid/LazyGridSpanLayoutProvider$LazyGridItemSpanScopeImpl; -Landroidx/compose/foundation/lazy/grid/LazyGridSpanLayoutProvider$LineConfiguration; -Landroidx/compose/foundation/lazy/grid/LazyGridSpanLayoutProvider; -Landroidx/compose/foundation/lazy/grid/LazyGridState$Companion$Saver$1; -Landroidx/compose/foundation/lazy/grid/LazyGridState$Companion$Saver$2; -Landroidx/compose/foundation/lazy/grid/LazyGridState$prefetchInfoRetriever$2; -Landroidx/compose/foundation/lazy/grid/LazyGridState$remeasurementModifier$1; -Landroidx/compose/foundation/lazy/grid/LazyGridState$scrollableState$1; -Landroidx/compose/foundation/lazy/grid/LazyGridState; -Landroidx/compose/foundation/lazy/grid/LazyGridStateKt$rememberLazyGridState$1$1; -Landroidx/compose/foundation/lazy/grid/LazyGridStateKt; -Landroidx/compose/foundation/lazy/grid/LazyMeasuredItem; -Landroidx/compose/foundation/lazy/grid/LazyMeasuredItemProvider; -Landroidx/compose/foundation/lazy/grid/LazyMeasuredLine; -Landroidx/compose/foundation/lazy/grid/LazyMeasuredLineProvider; -Landroidx/compose/foundation/lazy/grid/LazySemanticsKt$rememberLazyGridSemanticState$1$1$scrollAxisRange$1; -Landroidx/compose/foundation/lazy/grid/LazySemanticsKt$rememberLazyGridSemanticState$1$1$scrollAxisRange$2; -Landroidx/compose/foundation/lazy/grid/LazySemanticsKt$rememberLazyGridSemanticState$1$1; -Landroidx/compose/foundation/lazy/grid/MeasuredItemFactory; -Landroidx/compose/foundation/lazy/grid/MeasuredLineFactory; -Landroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider$Item$1; -Landroidx/compose/foundation/lazy/layout/DefaultDelegatingLazyLayoutItemProvider; -Landroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion$CREATOR$1; -Landroidx/compose/foundation/lazy/layout/DefaultLazyKey; -Landroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider$generateKeyToIndexMap$1$1; -Landroidx/compose/foundation/lazy/layout/DefaultLazyLayoutItemsProvider; -Landroidx/compose/foundation/lazy/layout/IntervalList$Interval; -Landroidx/compose/foundation/lazy/layout/IntervalList; -Landroidx/compose/foundation/lazy/layout/IntervalListKt; -Landroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent; -Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$1; -Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2$invoke$$inlined$onDispose$1; -Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2; -Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1; -Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent; -Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory; -Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider; -Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProviderKt; -Landroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy; -Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1$2$1; -Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1$itemContentFactory$1$1; -Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$1; -Landroidx/compose/foundation/lazy/layout/LazyLayoutKt; -Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope; -Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl; -Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$PrefetchHandle; -Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$Prefetcher; -Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState; -Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest; -Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher; -Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher_androidKt; -Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState; -Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1; -Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$indexForKeyMapping$1; -Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollByAction$1; -Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollToIndexAction$1; -Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt; -Landroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1$1; -Landroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1$2; -Landroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt$rememberLazyNearestItemsRangeState$1$1; -Landroidx/compose/foundation/lazy/layout/LazyNearestItemsRangeKt; -Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1; -Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1; -Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$2; -Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1$invoke$$inlined$onDispose$1; -Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1; -Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2; -Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder; -Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$1; -Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$holder$1; -Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt; -Landroidx/compose/foundation/lazy/layout/MutableIntervalList; -Landroidx/compose/foundation/lazy/layout/PinnableParent; -Landroidx/compose/foundation/lazy/layout/PinnableParentKt$ModifierLocalPinnableParent$1; -Landroidx/compose/foundation/lazy/layout/PinnableParentKt; -Landroidx/compose/foundation/relocation/AndroidBringIntoViewParent; -Landroidx/compose/foundation/relocation/BringIntoViewChildModifier; -Landroidx/compose/foundation/relocation/BringIntoViewKt$ModifierLocalBringIntoViewParent$1; -Landroidx/compose/foundation/relocation/BringIntoViewKt; -Landroidx/compose/foundation/relocation/BringIntoViewParent; -Landroidx/compose/foundation/relocation/BringIntoViewRequester; -Landroidx/compose/foundation/relocation/BringIntoViewRequesterImpl; -Landroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$2$1$invoke$$inlined$onDispose$1; -Landroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$2$1; -Landroidx/compose/foundation/relocation/BringIntoViewRequesterKt$bringIntoViewRequester$2; -Landroidx/compose/foundation/relocation/BringIntoViewRequesterModifier; -Landroidx/compose/foundation/relocation/BringIntoViewResponder; -Landroidx/compose/foundation/relocation/BringIntoViewResponderKt$bringIntoViewResponder$2; -Landroidx/compose/foundation/relocation/BringIntoViewResponderModifier; -Landroidx/compose/foundation/relocation/BringIntoViewResponder_androidKt; -Landroidx/compose/foundation/selection/SelectableGroupKt$selectableGroup$1; -Landroidx/compose/foundation/selection/SelectableGroupKt; -Landroidx/compose/foundation/selection/SelectableKt$selectable$4$1; -Landroidx/compose/foundation/selection/SelectableKt; -Landroidx/compose/foundation/selection/ToggleableKt$toggleable$2; -Landroidx/compose/foundation/selection/ToggleableKt$toggleable$4$1; -Landroidx/compose/foundation/selection/ToggleableKt$triStateToggleable$4$1; -Landroidx/compose/foundation/shape/CornerBasedShape; -Landroidx/compose/foundation/shape/CornerSize; -Landroidx/compose/foundation/shape/DpCornerSize; -Landroidx/compose/foundation/shape/PercentCornerSize; -Landroidx/compose/foundation/shape/RoundedCornerShape; -Landroidx/compose/foundation/shape/RoundedCornerShapeKt; -Landroidx/compose/foundation/text/BasicTextKt$BasicText-BpD7jsM$$inlined$Layout$1; -Landroidx/compose/foundation/text/BasicTextKt; -Landroidx/compose/foundation/text/TextController$coreModifiers$1; -Landroidx/compose/foundation/text/TextController$createSemanticsModifierFor$1$1; -Landroidx/compose/foundation/text/TextController$createSemanticsModifierFor$1; -Landroidx/compose/foundation/text/TextController$drawTextAndSelectionBehind$1; -Landroidx/compose/foundation/text/TextController$measurePolicy$1$measure$2; -Landroidx/compose/foundation/text/TextController$measurePolicy$1; -Landroidx/compose/foundation/text/TextController; -Landroidx/compose/foundation/text/TextDelegate; -Landroidx/compose/foundation/text/TextState$onTextLayout$1; -Landroidx/compose/foundation/text/TextState; -Landroidx/compose/foundation/text/selection/SelectionRegistrar; -Landroidx/compose/foundation/text/selection/SelectionRegistrarKt$LocalSelectionRegistrar$1; -Landroidx/compose/foundation/text/selection/SelectionRegistrarKt; -Landroidx/compose/foundation/text/selection/TextSelectionColors; -Landroidx/compose/foundation/text/selection/TextSelectionColorsKt$LocalTextSelectionColors$1; -Landroidx/compose/foundation/text/selection/TextSelectionColorsKt; -Landroidx/compose/material/icons/filled/MoreVertKt; -Landroidx/compose/material/icons/outlined/AccountCircleKt; -Landroidx/compose/material/icons/rounded/AddKt; -Landroidx/compose/material/icons/rounded/ArrowBackKt; -Landroidx/compose/material/icons/rounded/ArrowDropDownKt; -Landroidx/compose/material/icons/rounded/ArrowDropUpKt; -Landroidx/compose/material/icons/rounded/CheckKt; -Landroidx/compose/material/icons/rounded/CloseKt; -Landroidx/compose/material/icons/rounded/ExpandLessKt; -Landroidx/compose/material/icons/rounded/FullscreenKt; -Landroidx/compose/material/icons/rounded/Grid3x3Kt; -Landroidx/compose/material/icons/rounded/PersonKt; -Landroidx/compose/material/icons/rounded/PlayArrowKt; -Landroidx/compose/material/icons/rounded/SearchKt; -Landroidx/compose/material/icons/rounded/SettingsKt; -Landroidx/compose/material/icons/rounded/ShortTextKt; -Landroidx/compose/material/icons/rounded/TagKt; -Landroidx/compose/material/icons/rounded/ViewDayKt; -Landroidx/compose/material/icons/rounded/VolumeOffKt; -Landroidx/compose/material/icons/rounded/VolumeUpKt; -Landroidx/compose/material/ripple/AndroidRippleIndicationInstance$onInvalidateRipple$1; -Landroidx/compose/material/ripple/AndroidRippleIndicationInstance; -Landroidx/compose/material/ripple/PlatformRipple; -Landroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1$invokeSuspend$$inlined$collect$1; -Landroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1; -Landroidx/compose/material/ripple/Ripple; -Landroidx/compose/material/ripple/RippleAlpha; -Landroidx/compose/material/ripple/RippleAnimationKt; -Landroidx/compose/material/ripple/RippleContainer; -Landroidx/compose/material/ripple/RippleHostMap; -Landroidx/compose/material/ripple/RippleHostView; -Landroidx/compose/material/ripple/RippleIndicationInstance; -Landroidx/compose/material/ripple/RippleKt; -Landroidx/compose/material/ripple/RippleTheme; -Landroidx/compose/material/ripple/RippleThemeKt$LocalRippleTheme$1; -Landroidx/compose/material/ripple/RippleThemeKt; -Landroidx/compose/material/ripple/StateLayer; -Landroidx/compose/material3/AlertDialogKt$AlertDialogContent$1$$ExternalSyntheticOutline0; -Landroidx/compose/material3/AppBarKt$SingleRowTopAppBar$1$1; -Landroidx/compose/material3/AppBarKt$SingleRowTopAppBar$2; -Landroidx/compose/material3/AppBarKt$SingleRowTopAppBar$3; -Landroidx/compose/material3/AppBarKt$SingleRowTopAppBar$actionsRow$1; -Landroidx/compose/material3/AppBarKt$TopAppBarLayout$1$3$1; -Landroidx/compose/material3/AppBarKt$TopAppBarLayout$2$measure$1; -Landroidx/compose/material3/AppBarKt$TopAppBarLayout$2; -Landroidx/compose/material3/AppBarKt; -Landroidx/compose/material3/ButtonColors; -Landroidx/compose/material3/ButtonDefaults; -Landroidx/compose/material3/ButtonElevation$animateElevation$1$1$1; -Landroidx/compose/material3/ButtonElevation$animateElevation$1$1; -Landroidx/compose/material3/ButtonElevation$animateElevation$2; -Landroidx/compose/material3/ButtonElevation; -Landroidx/compose/material3/ButtonKt$Button$2$1$1; -Landroidx/compose/material3/ButtonKt$Button$2$1; -Landroidx/compose/material3/ButtonKt$Button$2; -Landroidx/compose/material3/ButtonKt$Button$3; -Landroidx/compose/material3/ButtonKt; -Landroidx/compose/material3/ColorResourceHelper; -Landroidx/compose/material3/ColorScheme$$ExternalSyntheticOutline0; -Landroidx/compose/material3/ColorScheme; -Landroidx/compose/material3/ColorSchemeKt$LocalColorScheme$1; -Landroidx/compose/material3/ColorSchemeKt; -Landroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-1$1; -Landroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-10$1; -Landroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-11$1; -Landroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-12$1; -Landroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-2$1; -Landroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-3$1; -Landroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-4$1; -Landroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-5$1; -Landroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-6$1; -Landroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-7$1; -Landroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-8$1; -Landroidx/compose/material3/ComposableSingletons$AppBarKt$lambda-9$1; -Landroidx/compose/material3/ComposableSingletons$AppBarKt; -Landroidx/compose/material3/ComposableSingletons$ScaffoldKt$lambda-1$1; -Landroidx/compose/material3/ComposableSingletons$ScaffoldKt$lambda-2$1; -Landroidx/compose/material3/ComposableSingletons$ScaffoldKt$lambda-3$1; -Landroidx/compose/material3/ComposableSingletons$ScaffoldKt$lambda-4$1; -Landroidx/compose/material3/ComposableSingletons$ScaffoldKt; -Landroidx/compose/material3/ComposableSingletons$SnackbarHostKt$lambda-1$1; -Landroidx/compose/material3/ComposableSingletons$SnackbarHostKt; -Landroidx/compose/material3/ContentColorKt$LocalContentColor$1; -Landroidx/compose/material3/ContentColorKt; -Landroidx/compose/material3/FabPosition; -Landroidx/compose/material3/FadeInFadeOutState; -Landroidx/compose/material3/IconButtonColors; -Landroidx/compose/material3/IconButtonKt$IconButton$3; -Landroidx/compose/material3/IconButtonKt; -Landroidx/compose/material3/IconKt$Icon$1; -Landroidx/compose/material3/IconKt$Icon$3; -Landroidx/compose/material3/IconKt$Icon$semantics$1$1; -Landroidx/compose/material3/IconKt; -Landroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1$2; -Landroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1; -Landroidx/compose/material3/MappedInteractionSource; -Landroidx/compose/material3/MaterialRippleTheme; -Landroidx/compose/material3/MaterialThemeKt$MaterialTheme$1; -Landroidx/compose/material3/MaterialThemeKt$MaterialTheme$2; -Landroidx/compose/material3/MaterialThemeKt; -Landroidx/compose/material3/MinimumTouchTargetModifier$measure$1; -Landroidx/compose/material3/MinimumTouchTargetModifier; -Landroidx/compose/material3/NavigationBarDefaults; -Landroidx/compose/material3/NavigationBarItemColors; -Landroidx/compose/material3/NavigationBarKt$NavigationBar$1; -Landroidx/compose/material3/NavigationBarKt$NavigationBar$2; -Landroidx/compose/material3/NavigationBarKt$NavigationBarItem$2$1; -Landroidx/compose/material3/NavigationBarKt$NavigationBarItem$3$indicator$1; -Landroidx/compose/material3/NavigationBarKt$NavigationBarItem$3$indicatorRipple$1; -Landroidx/compose/material3/NavigationBarKt$NavigationBarItem$4; -Landroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1$1; -Landroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1; -Landroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledLabel$1$1$1; -Landroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledLabel$1$1; -Landroidx/compose/material3/NavigationBarKt$NavigationBarItemBaselineLayout$2; -Landroidx/compose/material3/NavigationBarKt$placeLabelAndIcon$1; -Landroidx/compose/material3/NavigationBarKt; -Landroidx/compose/material3/ScaffoldKt$LocalFabPlacement$1; -Landroidx/compose/material3/ScaffoldKt$Scaffold$1; -Landroidx/compose/material3/ScaffoldKt$Scaffold$2; -Landroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1$1$bodyContentPlaceables$1; -Landroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1$1$bottomBarPlaceables$1; -Landroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1$1; -Landroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1; -Landroidx/compose/material3/ScaffoldKt; -Landroidx/compose/material3/ScaffoldLayoutContent; -Landroidx/compose/material3/ShapeDefaults; -Landroidx/compose/material3/Shapes; -Landroidx/compose/material3/ShapesKt$LocalShapes$1; -Landroidx/compose/material3/ShapesKt; -Landroidx/compose/material3/SnackbarData; -Landroidx/compose/material3/SnackbarHostKt$FadeInFadeOutWithScale$3; -Landroidx/compose/material3/SnackbarHostKt$SnackbarHost$1; -Landroidx/compose/material3/SnackbarHostKt$SnackbarHost$2; -Landroidx/compose/material3/SnackbarHostKt; -Landroidx/compose/material3/SnackbarHostState; -Landroidx/compose/material3/SurfaceKt$LocalAbsoluteTonalElevation$1; -Landroidx/compose/material3/SurfaceKt$Surface$1$1; -Landroidx/compose/material3/SurfaceKt$Surface$1$2; -Landroidx/compose/material3/SurfaceKt$Surface$1; -Landroidx/compose/material3/SurfaceKt$Surface$3; -Landroidx/compose/material3/SurfaceKt$Surface$5; -Landroidx/compose/material3/SurfaceKt; -Landroidx/compose/material3/SystemBarsDefaultInsets_androidKt; -Landroidx/compose/material3/TextKt$LocalTextStyle$1; -Landroidx/compose/material3/TextKt$ProvideTextStyle$1; -Landroidx/compose/material3/TextKt$Text$1; -Landroidx/compose/material3/TextKt$Text$2; -Landroidx/compose/material3/TextKt; -Landroidx/compose/material3/TonalPalette; -Landroidx/compose/material3/TopAppBarColors; -Landroidx/compose/material3/TopAppBarDefaults; -Landroidx/compose/material3/TouchTargetKt$LocalMinimumTouchTargetEnforcement$1; -Landroidx/compose/material3/TouchTargetKt$minimumTouchTargetSize$2; -Landroidx/compose/material3/TouchTargetKt; -Landroidx/compose/material3/Typography; -Landroidx/compose/material3/TypographyKt$LocalTypography$1; -Landroidx/compose/material3/TypographyKt; -Landroidx/compose/material3/tokens/ColorDarkTokens; -Landroidx/compose/material3/tokens/ColorLightTokens; -Landroidx/compose/material3/tokens/ElevationTokens; -Landroidx/compose/material3/tokens/FilledButtonTokens; -Landroidx/compose/material3/tokens/IconButtonTokens; -Landroidx/compose/material3/tokens/NavigationBarTokens; -Landroidx/compose/material3/tokens/PaletteTokens; -Landroidx/compose/material3/tokens/ShapeTokens; -Landroidx/compose/material3/tokens/TopAppBarSmallCenteredTokens; -Landroidx/compose/material3/tokens/TopAppBarSmallTokens; -Landroidx/compose/material3/windowsizeclass/WindowSizeClass; -Landroidx/compose/runtime/AbstractApplier; -Landroidx/compose/runtime/ActualAndroid_androidKt$DefaultMonotonicFrameClock$2; -Landroidx/compose/runtime/ActualAndroid_androidKt; -Landroidx/compose/runtime/Anchor; -Landroidx/compose/runtime/Applier; -Landroidx/compose/runtime/BroadcastFrameClock$FrameAwaiter; -Landroidx/compose/runtime/BroadcastFrameClock$withFrameNanos$2$1; -Landroidx/compose/runtime/BroadcastFrameClock; -Landroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-1$1; -Landroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-2$1; -Landroidx/compose/runtime/ComposableSingletons$CompositionKt; -Landroidx/compose/runtime/ComposablesKt; -Landroidx/compose/runtime/Composer$Companion$Empty$1; -Landroidx/compose/runtime/Composer$Companion; -Landroidx/compose/runtime/Composer; -Landroidx/compose/runtime/ComposerImpl$CompositionContextHolder; -Landroidx/compose/runtime/ComposerImpl$CompositionContextImpl; -Landroidx/compose/runtime/ComposerImpl$apply$operation$1$$ExternalSyntheticOutline0; -Landroidx/compose/runtime/ComposerImpl$apply$operation$1; -Landroidx/compose/runtime/ComposerImpl$createNode$2; -Landroidx/compose/runtime/ComposerImpl$createNode$3; -Landroidx/compose/runtime/ComposerImpl$doCompose$2$3; -Landroidx/compose/runtime/ComposerImpl$doCompose$2$4; -Landroidx/compose/runtime/ComposerImpl$doCompose$2$5; -Landroidx/compose/runtime/ComposerImpl$doCompose$lambda-37$$inlined$sortBy$1; -Landroidx/compose/runtime/ComposerImpl$endRestartGroup$1$1; -Landroidx/compose/runtime/ComposerImpl$realizeDowns$1; -Landroidx/compose/runtime/ComposerImpl$realizeMovement$1; -Landroidx/compose/runtime/ComposerImpl$realizeOperationLocation$2; -Landroidx/compose/runtime/ComposerImpl$realizeUps$1; -Landroidx/compose/runtime/ComposerImpl$recordInsert$1; -Landroidx/compose/runtime/ComposerImpl$recordInsert$2; -Landroidx/compose/runtime/ComposerImpl$recordSideEffect$1; -Landroidx/compose/runtime/ComposerImpl$recordSlotEditing$1; -Landroidx/compose/runtime/ComposerImpl$start$2; -Landroidx/compose/runtime/ComposerImpl$startProviders$currentProviders$1; -Landroidx/compose/runtime/ComposerImpl$startReaderGroup$1; -Landroidx/compose/runtime/ComposerImpl$updateValue$1; -Landroidx/compose/runtime/ComposerImpl$updateValue$2; -Landroidx/compose/runtime/ComposerImpl; -Landroidx/compose/runtime/ComposerKt$endGroupInstance$1; -Landroidx/compose/runtime/ComposerKt$removeCurrentGroupInstance$1; -Landroidx/compose/runtime/ComposerKt$startRootGroup$1; -Landroidx/compose/runtime/ComposerKt; -Landroidx/compose/runtime/Composition; -Landroidx/compose/runtime/CompositionContext; -Landroidx/compose/runtime/CompositionContextKt; -Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher; -Landroidx/compose/runtime/CompositionImpl; -Landroidx/compose/runtime/CompositionKt; -Landroidx/compose/runtime/CompositionLocal; -Landroidx/compose/runtime/CompositionLocalKt; -Landroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller; -Landroidx/compose/runtime/CompositionTracer; -Landroidx/compose/runtime/ControlledComposition; -Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord; -Landroidx/compose/runtime/DerivedSnapshotState$currentRecord$result$1$result$1; -Landroidx/compose/runtime/DerivedSnapshotState; -Landroidx/compose/runtime/DerivedState; -Landroidx/compose/runtime/DisposableEffectImpl; -Landroidx/compose/runtime/DisposableEffectResult; -Landroidx/compose/runtime/DisposableEffectScope; -Landroidx/compose/runtime/DynamicProvidableCompositionLocal; -Landroidx/compose/runtime/EffectsKt; -Landroidx/compose/runtime/GroupInfo; -Landroidx/compose/runtime/IntStack; -Landroidx/compose/runtime/Invalidation; -Landroidx/compose/runtime/JoinedKey; -Landroidx/compose/runtime/KeyInfo; -Landroidx/compose/runtime/Latch; -Landroidx/compose/runtime/LaunchedEffectImpl; -Landroidx/compose/runtime/LazyValueHolder; -Landroidx/compose/runtime/MonotonicFrameClock$Key; -Landroidx/compose/runtime/MonotonicFrameClock; -Landroidx/compose/runtime/MonotonicFrameClockKt; -Landroidx/compose/runtime/MovableContent; -Landroidx/compose/runtime/MutableState; -Landroidx/compose/runtime/NeverEqualPolicy; -Landroidx/compose/runtime/OpaqueKey; -Landroidx/compose/runtime/ParcelableSnapshotMutableState$Companion$CREATOR$1; -Landroidx/compose/runtime/ParcelableSnapshotMutableState; -Landroidx/compose/runtime/PausableMonotonicFrameClock$withFrameNanos$1; -Landroidx/compose/runtime/PausableMonotonicFrameClock; -Landroidx/compose/runtime/Pending$keyMap$2; -Landroidx/compose/runtime/Pending; -Landroidx/compose/runtime/PrioritySet; -Landroidx/compose/runtime/ProduceStateScope; -Landroidx/compose/runtime/ProduceStateScopeImpl; -Landroidx/compose/runtime/ProvidableCompositionLocal; -Landroidx/compose/runtime/ProvidedValue; -Landroidx/compose/runtime/RecomposeScope; -Landroidx/compose/runtime/RecomposeScopeImpl$end$1$2; -Landroidx/compose/runtime/RecomposeScopeImpl; -Landroidx/compose/runtime/Recomposer$Companion; -Landroidx/compose/runtime/Recomposer$RecomposerInfoImpl; -Landroidx/compose/runtime/Recomposer$State; -Landroidx/compose/runtime/Recomposer$broadcastFrameClock$1; -Landroidx/compose/runtime/Recomposer$effectJob$1$1; -Landroidx/compose/runtime/Recomposer$join$2; -Landroidx/compose/runtime/Recomposer$performRecompose$1$1; -Landroidx/compose/runtime/Recomposer$readObserverOf$1; -Landroidx/compose/runtime/Recomposer$recompositionRunner$2$2; -Landroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1; -Landroidx/compose/runtime/Recomposer$recompositionRunner$2; -Landroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$2; -Landroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2; -Landroidx/compose/runtime/Recomposer$writeObserverOf$1; -Landroidx/compose/runtime/Recomposer; -Landroidx/compose/runtime/ReferentialEqualityPolicy; -Landroidx/compose/runtime/RememberManager; -Landroidx/compose/runtime/RememberObserver; -Landroidx/compose/runtime/SkippableUpdater; -Landroidx/compose/runtime/SlotReader; -Landroidx/compose/runtime/SlotTable; -Landroidx/compose/runtime/SlotTableKt; -Landroidx/compose/runtime/SlotWriter$Companion; -Landroidx/compose/runtime/SlotWriter$groupSlots$1; -Landroidx/compose/runtime/SlotWriter; -Landroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord; -Landroidx/compose/runtime/SnapshotMutableStateImpl; -Landroidx/compose/runtime/SnapshotMutationPolicy; -Landroidx/compose/runtime/SnapshotStateKt__DerivedStateKt; -Landroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3; -Landroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$5; -Landroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1$1; -Landroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1; -Landroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$readObserver$1; -Landroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$unregisterApplyObserver$1; -Landroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1; -Landroidx/compose/runtime/SnapshotThreadLocal; -Landroidx/compose/runtime/Stack; -Landroidx/compose/runtime/State; -Landroidx/compose/runtime/StaticProvidableCompositionLocal; -Landroidx/compose/runtime/StaticValueHolder; -Landroidx/compose/runtime/StructuralEqualityPolicy; -Landroidx/compose/runtime/Updater; -Landroidx/compose/runtime/collection/IdentityArrayIntMap; -Landroidx/compose/runtime/collection/IdentityArrayMap; -Landroidx/compose/runtime/collection/IdentityArraySet; -Landroidx/compose/runtime/collection/IdentityScopeMap; -Landroidx/compose/runtime/collection/MutableVector$MutableVectorList; -Landroidx/compose/runtime/collection/MutableVector$VectorListIterator; -Landroidx/compose/runtime/collection/MutableVector; -Landroidx/compose/runtime/collection/MutableVectorKt; -Landroidx/compose/runtime/external/kotlinx/collections/immutable/ExtensionsKt; -Landroidx/compose/runtime/external/kotlinx/collections/immutable/ImmutableList; -Landroidx/compose/runtime/external/kotlinx/collections/immutable/ImmutableSet; -Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList; -Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap; -Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentSet; -Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractListIterator; -Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList; -Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/BufferIterator; -Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector; -Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/MapEntry; -Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap; -Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator; -Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder; -Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntries; -Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntriesIterator; -Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult; -Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; -Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator; -Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeEntriesIterator; -Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKt; -Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links; -Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet; -Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter; -Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/EndOfChain; -Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/ListImplementation$$ExternalSyntheticOutline0; -Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/ListImplementation; -Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/MutabilityOwnership; -Landroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$1; -Landroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$2; -Landroidx/compose/runtime/internal/ComposableLambdaImpl; -Landroidx/compose/runtime/internal/ComposableLambdaKt; -Landroidx/compose/runtime/internal/ThreadMap; -Landroidx/compose/runtime/internal/ThreadMapKt; -Landroidx/compose/runtime/saveable/ListSaverKt$listSaver$1; -Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$invoke$$inlined$onDispose$1; -Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1$1$1; -Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1; -Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1; -Landroidx/compose/runtime/saveable/RememberSaveableKt; -Landroidx/compose/runtime/saveable/SaveableStateHolder; -Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$1; -Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$2; -Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder$registry$1; -Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder; -Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1; -Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1; -Landroidx/compose/runtime/saveable/SaveableStateHolderImpl; -Landroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1; -Landroidx/compose/runtime/saveable/SaveableStateHolderKt; -Landroidx/compose/runtime/saveable/SaveableStateRegistry$Entry; -Landroidx/compose/runtime/saveable/SaveableStateRegistry; -Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3; -Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl; -Landroidx/compose/runtime/saveable/SaveableStateRegistryKt$LocalSaveableStateRegistry$1; -Landroidx/compose/runtime/saveable/SaveableStateRegistryKt; -Landroidx/compose/runtime/saveable/Saver; -Landroidx/compose/runtime/saveable/SaverKt$AutoSaver$1; -Landroidx/compose/runtime/saveable/SaverKt$AutoSaver$2; -Landroidx/compose/runtime/saveable/SaverKt$Saver$1; -Landroidx/compose/runtime/saveable/SaverKt; -Landroidx/compose/runtime/saveable/SaverScope; -Landroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedMutableSnapshot$1; -Landroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedSnapshot$1; -Landroidx/compose/runtime/snapshots/GlobalSnapshot; -Landroidx/compose/runtime/snapshots/MutableSnapshot; -Landroidx/compose/runtime/snapshots/NestedMutableSnapshot; -Landroidx/compose/runtime/snapshots/NestedReadonlySnapshot; -Landroidx/compose/runtime/snapshots/ObserverHandle; -Landroidx/compose/runtime/snapshots/ReadonlySnapshot; -Landroidx/compose/runtime/snapshots/Snapshot$Companion$registerApplyObserver$2; -Landroidx/compose/runtime/snapshots/Snapshot$Companion; -Landroidx/compose/runtime/snapshots/Snapshot; -Landroidx/compose/runtime/snapshots/SnapshotApplyResult$Failure; -Landroidx/compose/runtime/snapshots/SnapshotApplyResult$Success; -Landroidx/compose/runtime/snapshots/SnapshotApplyResult; -Landroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap; -Landroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1; -Landroidx/compose/runtime/snapshots/SnapshotIdSet; -Landroidx/compose/runtime/snapshots/SnapshotKt$advanceGlobalSnapshot$2; -Landroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1; -Landroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1; -Landroidx/compose/runtime/snapshots/SnapshotKt$mergedWriteObserver$1; -Landroidx/compose/runtime/snapshots/SnapshotKt$takeNewSnapshot$1; -Landroidx/compose/runtime/snapshots/SnapshotKt; -Landroidx/compose/runtime/snapshots/SnapshotMutableState; -Landroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord; -Landroidx/compose/runtime/snapshots/SnapshotStateList; -Landroidx/compose/runtime/snapshots/SnapshotStateListKt; -Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateEnterObserver$1; -Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateExitObserver$1; -Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap; -Landroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1$2; -Landroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1; -Landroidx/compose/runtime/snapshots/SnapshotStateObserver$observeReads$1$1; -Landroidx/compose/runtime/snapshots/SnapshotStateObserver$readObserver$1; -Landroidx/compose/runtime/snapshots/SnapshotStateObserver; -Landroidx/compose/runtime/snapshots/StateListIterator; -Landroidx/compose/runtime/snapshots/StateObject; -Landroidx/compose/runtime/snapshots/StateRecord; -Landroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot; -Landroidx/compose/runtime/snapshots/TransparentObserverSnapshot; -Landroidx/compose/runtime/tooling/InspectionTablesKt$LocalInspectionTables$1; -Landroidx/compose/runtime/tooling/InspectionTablesKt; -Landroidx/compose/runtime/tracing/TracingInitializer$create$1; -Landroidx/compose/runtime/tracing/TracingInitializer; -Landroidx/compose/ui/Alignment$Companion; -Landroidx/compose/ui/Alignment$Horizontal; -Landroidx/compose/ui/Alignment$Vertical; -Landroidx/compose/ui/Alignment; -Landroidx/compose/ui/BiasAlignment$Horizontal; -Landroidx/compose/ui/BiasAlignment$Vertical; -Landroidx/compose/ui/BiasAlignment; -Landroidx/compose/ui/CombinedModifier; -Landroidx/compose/ui/ComposedModifier; -Landroidx/compose/ui/ComposedModifierKt$WrapFocusEventModifier$1; -Landroidx/compose/ui/ComposedModifierKt$WrapFocusRequesterModifier$1; -Landroidx/compose/ui/ComposedModifierKt$materialize$1; -Landroidx/compose/ui/ComposedModifierKt$materialize$result$1; -Landroidx/compose/ui/ComposedModifierKt; -Landroidx/compose/ui/Modifier$Companion; -Landroidx/compose/ui/Modifier$Element; -Landroidx/compose/ui/Modifier$Node; -Landroidx/compose/ui/Modifier; -Landroidx/compose/ui/MotionDurationScale$Key; -Landroidx/compose/ui/MotionDurationScale; -Landroidx/compose/ui/ZIndexModifier$measure$1; -Landroidx/compose/ui/ZIndexModifier; -Landroidx/compose/ui/autofill/AndroidAutofill$$ExternalSyntheticApiModelOutline0; -Landroidx/compose/ui/autofill/AndroidAutofill; -Landroidx/compose/ui/autofill/Autofill; -Landroidx/compose/ui/autofill/AutofillCallback; -Landroidx/compose/ui/autofill/AutofillTree; -Landroidx/compose/ui/draw/AlphaKt; -Landroidx/compose/ui/draw/BuildDrawCacheParams; -Landroidx/compose/ui/draw/CacheDrawScope$onDrawBehind$1; -Landroidx/compose/ui/draw/CacheDrawScope; -Landroidx/compose/ui/draw/ClipKt; -Landroidx/compose/ui/draw/DrawBackgroundModifier; -Landroidx/compose/ui/draw/DrawCacheModifier; -Landroidx/compose/ui/draw/DrawContentCacheModifier; -Landroidx/compose/ui/draw/DrawModifier; -Landroidx/compose/ui/draw/DrawModifierKt$drawWithCache$2; -Landroidx/compose/ui/draw/DrawModifierKt; -Landroidx/compose/ui/draw/DrawResult; -Landroidx/compose/ui/draw/EmptyBuildDrawCacheParams; -Landroidx/compose/ui/draw/PainterModifier$measure$1; -Landroidx/compose/ui/draw/PainterModifier; -Landroidx/compose/ui/draw/PainterModifierKt; -Landroidx/compose/ui/draw/ShadowKt$shadow$2$1; -Landroidx/compose/ui/focus/FocusChangedModifierKt$onFocusChanged$2$1$1; -Landroidx/compose/ui/focus/FocusChangedModifierKt$onFocusChanged$2; -Landroidx/compose/ui/focus/FocusEventModifier; -Landroidx/compose/ui/focus/FocusEventModifierKt$ModifierLocalFocusEvent$1; -Landroidx/compose/ui/focus/FocusEventModifierKt$onFocusEvent$2$1$1; -Landroidx/compose/ui/focus/FocusEventModifierKt$onFocusEvent$2; -Landroidx/compose/ui/focus/FocusEventModifierKt; -Landroidx/compose/ui/focus/FocusEventModifierLocal; -Landroidx/compose/ui/focus/FocusManager; -Landroidx/compose/ui/focus/FocusManagerImpl; -Landroidx/compose/ui/focus/FocusManagerKt; -Landroidx/compose/ui/focus/FocusModifier$Companion$RefreshFocusProperties$1; -Landroidx/compose/ui/focus/FocusModifier; -Landroidx/compose/ui/focus/FocusModifierKt$ModifierLocalParentFocusModifier$1; -Landroidx/compose/ui/focus/FocusModifierKt$ResetFocusModifierLocals$1; -Landroidx/compose/ui/focus/FocusModifierKt$ResetFocusModifierLocals$2; -Landroidx/compose/ui/focus/FocusModifierKt$ResetFocusModifierLocals$3; -Landroidx/compose/ui/focus/FocusModifierKt$focusTarget$2$1$1; -Landroidx/compose/ui/focus/FocusModifierKt$focusTarget$2; -Landroidx/compose/ui/focus/FocusModifierKt; -Landroidx/compose/ui/focus/FocusOrderModifier; -Landroidx/compose/ui/focus/FocusOrderModifierToProperties; -Landroidx/compose/ui/focus/FocusProperties; -Landroidx/compose/ui/focus/FocusPropertiesImpl$enter$1; -Landroidx/compose/ui/focus/FocusPropertiesImpl$exit$1; -Landroidx/compose/ui/focus/FocusPropertiesImpl; -Landroidx/compose/ui/focus/FocusPropertiesKt$ModifierLocalFocusProperties$1; -Landroidx/compose/ui/focus/FocusPropertiesKt$clear$1; -Landroidx/compose/ui/focus/FocusPropertiesKt$clear$2; -Landroidx/compose/ui/focus/FocusPropertiesKt$refreshFocusProperties$1; -Landroidx/compose/ui/focus/FocusPropertiesKt; -Landroidx/compose/ui/focus/FocusPropertiesModifier; -Landroidx/compose/ui/focus/FocusRequester; -Landroidx/compose/ui/focus/FocusRequesterModifier; -Landroidx/compose/ui/focus/FocusRequesterModifierKt$ModifierLocalFocusRequester$1; -Landroidx/compose/ui/focus/FocusRequesterModifierKt$focusRequester$2; -Landroidx/compose/ui/focus/FocusRequesterModifierKt; -Landroidx/compose/ui/focus/FocusRequesterModifierLocal; -Landroidx/compose/ui/focus/FocusState; -Landroidx/compose/ui/focus/FocusStateImpl; -Landroidx/compose/ui/focus/FocusTransactionsKt; -Landroidx/compose/ui/geometry/CornerRadius; -Landroidx/compose/ui/geometry/CornerRadiusKt; -Landroidx/compose/ui/geometry/Offset; -Landroidx/compose/ui/geometry/OffsetKt; -Landroidx/compose/ui/geometry/Rect; -Landroidx/compose/ui/geometry/RectKt; -Landroidx/compose/ui/geometry/RoundRect; -Landroidx/compose/ui/geometry/RoundRectKt; -Landroidx/compose/ui/geometry/Size; -Landroidx/compose/ui/geometry/SizeKt; -Landroidx/compose/ui/graphics/AndroidBlendMode_androidKt; -Landroidx/compose/ui/graphics/AndroidCanvas; -Landroidx/compose/ui/graphics/AndroidCanvas_androidKt; -Landroidx/compose/ui/graphics/AndroidImageBitmap; -Landroidx/compose/ui/graphics/AndroidImageBitmap_androidKt; -Landroidx/compose/ui/graphics/AndroidMatrixConversions_androidKt; -Landroidx/compose/ui/graphics/AndroidPaint; -Landroidx/compose/ui/graphics/AndroidPaint_androidKt$WhenMappings; -Landroidx/compose/ui/graphics/AndroidPath; -Landroidx/compose/ui/graphics/AndroidPath_androidKt; -Landroidx/compose/ui/graphics/Api26Bitmap$$ExternalSyntheticApiModelOutline0; -Landroidx/compose/ui/graphics/Api26Bitmap; -Landroidx/compose/ui/graphics/BlendMode; -Landroidx/compose/ui/graphics/BlendModeColorFilterHelper; -Landroidx/compose/ui/graphics/BlockGraphicsLayerModifier$measure$1; -Landroidx/compose/ui/graphics/BlockGraphicsLayerModifier; -Landroidx/compose/ui/graphics/Brush$Companion; -Landroidx/compose/ui/graphics/Brush; -Landroidx/compose/ui/graphics/Canvas; -Landroidx/compose/ui/graphics/CanvasHolder; -Landroidx/compose/ui/graphics/CanvasUtils; -Landroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline0; -Landroidx/compose/ui/graphics/CanvasZHelper$$ExternalSyntheticApiModelOutline1; -Landroidx/compose/ui/graphics/CanvasZHelper; -Landroidx/compose/ui/graphics/Color; -Landroidx/compose/ui/graphics/ColorFilter; -Landroidx/compose/ui/graphics/ColorKt; -Landroidx/compose/ui/graphics/Float16$Companion; -Landroidx/compose/ui/graphics/Float16; -Landroidx/compose/ui/graphics/GraphicsLayerModifierKt; -Landroidx/compose/ui/graphics/GraphicsLayerScope; -Landroidx/compose/ui/graphics/GraphicsLayerScopeKt; -Landroidx/compose/ui/graphics/ImageBitmap; -Landroidx/compose/ui/graphics/LinearGradient; -Landroidx/compose/ui/graphics/Matrix; -Landroidx/compose/ui/graphics/Outline$Rectangle; -Landroidx/compose/ui/graphics/Outline$Rounded; -Landroidx/compose/ui/graphics/Outline; -Landroidx/compose/ui/graphics/Paint; -Landroidx/compose/ui/graphics/Path; -Landroidx/compose/ui/graphics/PathFillType; -Landroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1; -Landroidx/compose/ui/graphics/RectangleShapeKt; -Landroidx/compose/ui/graphics/ReusableGraphicsLayerScope; -Landroidx/compose/ui/graphics/ShaderBrush; -Landroidx/compose/ui/graphics/Shadow; -Landroidx/compose/ui/graphics/Shape; -Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1; -Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$measure$1; -Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier; -Landroidx/compose/ui/graphics/SolidColor; -Landroidx/compose/ui/graphics/StrokeCap; -Landroidx/compose/ui/graphics/StrokeJoin; -Landroidx/compose/ui/graphics/TransformOrigin; -Landroidx/compose/ui/graphics/TransformOriginKt; -Landroidx/compose/ui/graphics/WrapperVerificationHelperMethods$$ExternalSyntheticApiModelOutline0; -Landroidx/compose/ui/graphics/WrapperVerificationHelperMethods; -Landroidx/compose/ui/graphics/colorspace/Adaptation$Companion$Bradford$1; -Landroidx/compose/ui/graphics/colorspace/Adaptation; -Landroidx/compose/ui/graphics/colorspace/ColorModel; -Landroidx/compose/ui/graphics/colorspace/ColorSpace; -Landroidx/compose/ui/graphics/colorspace/ColorSpaceKt; -Landroidx/compose/ui/graphics/colorspace/ColorSpaces$ExtendedSrgb$1; -Landroidx/compose/ui/graphics/colorspace/ColorSpaces$ExtendedSrgb$2; -Landroidx/compose/ui/graphics/colorspace/ColorSpaces; -Landroidx/compose/ui/graphics/colorspace/Connector; -Landroidx/compose/ui/graphics/colorspace/Illuminant; -Landroidx/compose/ui/graphics/colorspace/Lab; -Landroidx/compose/ui/graphics/colorspace/Oklab; -Landroidx/compose/ui/graphics/colorspace/Rgb$1; -Landroidx/compose/ui/graphics/colorspace/Rgb$3; -Landroidx/compose/ui/graphics/colorspace/Rgb$5; -Landroidx/compose/ui/graphics/colorspace/Rgb$6; -Landroidx/compose/ui/graphics/colorspace/Rgb$Companion$DoubleIdentity$1; -Landroidx/compose/ui/graphics/colorspace/Rgb$Companion; -Landroidx/compose/ui/graphics/colorspace/Rgb$eotf$1; -Landroidx/compose/ui/graphics/colorspace/Rgb$oetf$1; -Landroidx/compose/ui/graphics/colorspace/Rgb; -Landroidx/compose/ui/graphics/colorspace/TransferParameters; -Landroidx/compose/ui/graphics/colorspace/WhitePoint; -Landroidx/compose/ui/graphics/colorspace/Xyz; -Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams; -Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1; -Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope; -Landroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1; -Landroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt; -Landroidx/compose/ui/graphics/drawscope/ContentDrawScope; -Landroidx/compose/ui/graphics/drawscope/DrawContext; -Landroidx/compose/ui/graphics/drawscope/DrawScope; -Landroidx/compose/ui/graphics/drawscope/DrawStyle; -Landroidx/compose/ui/graphics/drawscope/EmptyCanvas; -Landroidx/compose/ui/graphics/drawscope/Fill; -Landroidx/compose/ui/graphics/painter/Painter; -Landroidx/compose/ui/graphics/vector/DrawCache; -Landroidx/compose/ui/graphics/vector/GroupComponent; -Landroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams; -Landroidx/compose/ui/graphics/vector/ImageVector$Builder; -Landroidx/compose/ui/graphics/vector/ImageVector; -Landroidx/compose/ui/graphics/vector/PathBuilder; -Landroidx/compose/ui/graphics/vector/PathComponent$pathMeasure$2; -Landroidx/compose/ui/graphics/vector/PathComponent; -Landroidx/compose/ui/graphics/vector/PathNode$Close; -Landroidx/compose/ui/graphics/vector/PathNode$CurveTo; -Landroidx/compose/ui/graphics/vector/PathNode$HorizontalTo; -Landroidx/compose/ui/graphics/vector/PathNode$LineTo; -Landroidx/compose/ui/graphics/vector/PathNode$MoveTo; -Landroidx/compose/ui/graphics/vector/PathNode$QuadTo; -Landroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo; -Landroidx/compose/ui/graphics/vector/PathNode$ReflectiveQuadTo; -Landroidx/compose/ui/graphics/vector/PathNode$RelativeArcTo; -Landroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo; -Landroidx/compose/ui/graphics/vector/PathNode$RelativeHorizontalTo; -Landroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo; -Landroidx/compose/ui/graphics/vector/PathNode$RelativeMoveTo; -Landroidx/compose/ui/graphics/vector/PathNode$RelativeQuadTo; -Landroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo; -Landroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveQuadTo; -Landroidx/compose/ui/graphics/vector/PathNode$RelativeVerticalTo; -Landroidx/compose/ui/graphics/vector/PathNode$VerticalTo; -Landroidx/compose/ui/graphics/vector/PathNode; -Landroidx/compose/ui/graphics/vector/PathParser$PathPoint; -Landroidx/compose/ui/graphics/vector/PathParser; -Landroidx/compose/ui/graphics/vector/VNode; -Landroidx/compose/ui/graphics/vector/VectorApplier; -Landroidx/compose/ui/graphics/vector/VectorComponent$drawVectorBlock$1; -Landroidx/compose/ui/graphics/vector/VectorComponent$invalidateCallback$1; -Landroidx/compose/ui/graphics/vector/VectorComponent$root$1$1; -Landroidx/compose/ui/graphics/vector/VectorComponent; -Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$10; -Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$11; -Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$12; -Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$13; -Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$14; -Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1; -Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$2; -Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$3; -Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$4; -Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$5; -Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$6; -Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$7; -Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$8; -Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$9; -Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path-9cdaXJ4$$inlined$ComposeNode$1; -Landroidx/compose/ui/graphics/vector/VectorComposeKt; -Landroidx/compose/ui/graphics/vector/VectorConfig; -Landroidx/compose/ui/graphics/vector/VectorGroup; -Landroidx/compose/ui/graphics/vector/VectorKt; -Landroidx/compose/ui/graphics/vector/VectorNode; -Landroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2$invoke$$inlined$onDispose$1; -Landroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2; -Landroidx/compose/ui/graphics/vector/VectorPainter$composeVector$1; -Landroidx/compose/ui/graphics/vector/VectorPainter$vector$1$1; -Landroidx/compose/ui/graphics/vector/VectorPainter; -Landroidx/compose/ui/graphics/vector/VectorPainterKt$rememberVectorPainter$3; -Landroidx/compose/ui/graphics/vector/VectorPainterKt; -Landroidx/compose/ui/graphics/vector/VectorPath; -Landroidx/compose/ui/graphics/vector/VectorProperty$Fill; -Landroidx/compose/ui/graphics/vector/VectorProperty$FillAlpha; -Landroidx/compose/ui/graphics/vector/VectorProperty$PathData; -Landroidx/compose/ui/graphics/vector/VectorProperty$Stroke; -Landroidx/compose/ui/graphics/vector/VectorProperty$StrokeAlpha; -Landroidx/compose/ui/graphics/vector/VectorProperty$StrokeLineWidth; -Landroidx/compose/ui/graphics/vector/VectorProperty$TrimPathEnd; -Landroidx/compose/ui/graphics/vector/VectorProperty$TrimPathOffset; -Landroidx/compose/ui/graphics/vector/VectorProperty$TrimPathStart; -Landroidx/compose/ui/graphics/vector/VectorProperty; -Landroidx/compose/ui/graphics/vector/compat/AndroidVectorParser; -Landroidx/compose/ui/graphics/vector/compat/AndroidVectorResources; -Landroidx/compose/ui/graphics/vector/compat/XmlVectorParser_androidKt; -Landroidx/compose/ui/hapticfeedback/HapticFeedback; -Landroidx/compose/ui/hapticfeedback/PlatformHapticFeedback; -Landroidx/compose/ui/input/InputMode; -Landroidx/compose/ui/input/InputModeManager; -Landroidx/compose/ui/input/InputModeManagerImpl; -Landroidx/compose/ui/input/focus/FocusAwareInputModifier; -Landroidx/compose/ui/input/key/KeyInputModifier; -Landroidx/compose/ui/input/key/KeyInputModifierKt$ModifierLocalKeyInput$1; -Landroidx/compose/ui/input/key/KeyInputModifierKt; -Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection; -Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher$calculateNestedScrollScope$1; -Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher; -Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierKt$nestedScroll$2; -Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal$1; -Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal; -Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocalKt$ModifierLocalNestedScroll$1; -Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocalKt; -Landroidx/compose/ui/input/pointer/AwaitPointerEventScope; -Landroidx/compose/ui/input/pointer/HitPathTracker; -Landroidx/compose/ui/input/pointer/MotionEventAdapter; -Landroidx/compose/ui/input/pointer/Node; -Landroidx/compose/ui/input/pointer/NodeParent; -Landroidx/compose/ui/input/pointer/PointerEvent; -Landroidx/compose/ui/input/pointer/PointerEventPass; -Landroidx/compose/ui/input/pointer/PointerIconService; -Landroidx/compose/ui/input/pointer/PointerInputChangeEventProducer; -Landroidx/compose/ui/input/pointer/PointerInputEventProcessor; -Landroidx/compose/ui/input/pointer/PointerInputFilter; -Landroidx/compose/ui/input/pointer/PointerInputModifier; -Landroidx/compose/ui/input/pointer/PointerInputScope; -Landroidx/compose/ui/input/pointer/PointerKeyboardModifiers; -Landroidx/compose/ui/input/pointer/PositionCalculator; -Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine; -Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$awaitPointerEventScope$2$2; -Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilter; -Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$2$2$1; -Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$2; -Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$4$2$1; -Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$4; -Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$6$2$1; -Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt$pointerInput$6; -Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt; -Landroidx/compose/ui/input/pointer/util/PointAtTime; -Landroidx/compose/ui/input/pointer/util/VelocityTracker; -Landroidx/compose/ui/input/rotary/RotaryInputModifierKt$ModifierLocalRotaryScrollParent$1; -Landroidx/compose/ui/input/rotary/RotaryInputModifierKt$focusAwareCallback$1; -Landroidx/compose/ui/input/rotary/RotaryInputModifierKt; -Landroidx/compose/ui/layout/AlignmentLine; -Landroidx/compose/ui/layout/AlignmentLineKt$FirstBaseline$1; -Landroidx/compose/ui/layout/AlignmentLineKt$LastBaseline$1; -Landroidx/compose/ui/layout/AlignmentLineKt; -Landroidx/compose/ui/layout/BeyondBoundsLayout; -Landroidx/compose/ui/layout/BeyondBoundsLayoutKt$ModifierLocalBeyondBoundsLayout$1; -Landroidx/compose/ui/layout/BeyondBoundsLayoutKt; -Landroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt$lambda-1$1; -Landroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt; -Landroidx/compose/ui/layout/ContentScale$Companion$Crop$1; -Landroidx/compose/ui/layout/ContentScale$Companion$Fit$1; -Landroidx/compose/ui/layout/ContentScale$Companion$Inside$1; -Landroidx/compose/ui/layout/ContentScale$Companion; -Landroidx/compose/ui/layout/ContentScale; -Landroidx/compose/ui/layout/FixedScale; -Landroidx/compose/ui/layout/HorizontalAlignmentLine; -Landroidx/compose/ui/layout/IntermediateLayoutModifier; -Landroidx/compose/ui/layout/IntrinsicMeasurable; -Landroidx/compose/ui/layout/IntrinsicMeasureScope; -Landroidx/compose/ui/layout/LayoutCoordinates; -Landroidx/compose/ui/layout/LayoutId; -Landroidx/compose/ui/layout/LayoutIdKt; -Landroidx/compose/ui/layout/LayoutIdParentData; -Landroidx/compose/ui/layout/LayoutKt$materializerOf$1; -Landroidx/compose/ui/layout/LayoutKt; -Landroidx/compose/ui/layout/LayoutModifier; -Landroidx/compose/ui/layout/LayoutModifierImpl; -Landroidx/compose/ui/layout/LayoutModifierKt; -Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState; -Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope; -Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure$1; -Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1; -Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$subcompose$2$1$1; -Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState; -Landroidx/compose/ui/layout/LookaheadOnPlacedModifier; -Landroidx/compose/ui/layout/Measurable; -Landroidx/compose/ui/layout/MeasurePolicy; -Landroidx/compose/ui/layout/MeasureResult; -Landroidx/compose/ui/layout/MeasureScope$layout$1; -Landroidx/compose/ui/layout/MeasureScope; -Landroidx/compose/ui/layout/Measured; -Landroidx/compose/ui/layout/NoOpSubcomposeSlotReusePolicy; -Landroidx/compose/ui/layout/OnGloballyPositionedModifier; -Landroidx/compose/ui/layout/OnGloballyPositionedModifierImpl; -Landroidx/compose/ui/layout/OnPlacedModifier; -Landroidx/compose/ui/layout/OnRemeasuredModifier; -Landroidx/compose/ui/layout/OnRemeasuredModifierKt; -Landroidx/compose/ui/layout/OnSizeChangedModifier; -Landroidx/compose/ui/layout/ParentDataModifier; -Landroidx/compose/ui/layout/Placeable$PlacementScope$Companion; -Landroidx/compose/ui/layout/Placeable$PlacementScope; -Landroidx/compose/ui/layout/Placeable; -Landroidx/compose/ui/layout/PlaceableKt$DefaultLayerBlock$1; -Landroidx/compose/ui/layout/PlaceableKt; -Landroidx/compose/ui/layout/Remeasurement; -Landroidx/compose/ui/layout/RemeasurementModifier; -Landroidx/compose/ui/layout/RootMeasurePolicy$measure$2; -Landroidx/compose/ui/layout/RootMeasurePolicy; -Landroidx/compose/ui/layout/ScaleFactor; -Landroidx/compose/ui/layout/ScaleFactorKt; -Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$$inlined$ComposeNode$1; -Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$4; -Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1$invoke$$inlined$onDispose$1; -Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$5$1; -Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$6; -Landroidx/compose/ui/layout/SubcomposeLayoutKt; -Landroidx/compose/ui/layout/SubcomposeLayoutState$setCompositionContext$1; -Landroidx/compose/ui/layout/SubcomposeLayoutState$setMeasurePolicy$1; -Landroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1; -Landroidx/compose/ui/layout/SubcomposeLayoutState; -Landroidx/compose/ui/layout/SubcomposeMeasureScope; -Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet; -Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy; -Landroidx/compose/ui/modifier/BackwardsCompatLocalMap; -Landroidx/compose/ui/modifier/EmptyMap; -Landroidx/compose/ui/modifier/ModifierLocal; -Landroidx/compose/ui/modifier/ModifierLocalConsumer; -Landroidx/compose/ui/modifier/ModifierLocalKt; -Landroidx/compose/ui/modifier/ModifierLocalManager$invalidate$1; -Landroidx/compose/ui/modifier/ModifierLocalManager; -Landroidx/compose/ui/modifier/ModifierLocalMap; -Landroidx/compose/ui/modifier/ModifierLocalNode; -Landroidx/compose/ui/modifier/ModifierLocalProvider; -Landroidx/compose/ui/modifier/ModifierLocalReadScope; -Landroidx/compose/ui/modifier/ProvidableModifierLocal; -Landroidx/compose/ui/node/AlignmentLines$recalculate$1; -Landroidx/compose/ui/node/AlignmentLines; -Landroidx/compose/ui/node/AlignmentLinesOwner; -Landroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$1; -Landroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$3; -Landroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$4; -Landroidx/compose/ui/node/BackwardsCompatNode$updateDrawCache$1; -Landroidx/compose/ui/node/BackwardsCompatNode$updateModifierLocalConsumer$1; -Landroidx/compose/ui/node/BackwardsCompatNode; -Landroidx/compose/ui/node/BackwardsCompatNodeKt$DetachedModifierLocalReadScope$1; -Landroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1; -Landroidx/compose/ui/node/BackwardsCompatNodeKt$updateModifierLocalConsumer$1; -Landroidx/compose/ui/node/BackwardsCompatNodeKt; -Landroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1; -Landroidx/compose/ui/node/ComposeUiNode$Companion$SetLayoutDirection$1; -Landroidx/compose/ui/node/ComposeUiNode$Companion$SetMeasurePolicy$1; -Landroidx/compose/ui/node/ComposeUiNode$Companion$SetModifier$1; -Landroidx/compose/ui/node/ComposeUiNode$Companion$SetViewConfiguration$1; -Landroidx/compose/ui/node/ComposeUiNode$Companion; -Landroidx/compose/ui/node/ComposeUiNode; -Landroidx/compose/ui/node/DelegatableNode; -Landroidx/compose/ui/node/DelegatableNodeKt; -Landroidx/compose/ui/node/DepthSortedSet$DepthComparator$1; -Landroidx/compose/ui/node/DepthSortedSet$mapOfOriginalDepth$2; -Landroidx/compose/ui/node/DepthSortedSet; -Landroidx/compose/ui/node/DrawModifierNode; -Landroidx/compose/ui/node/GlobalPositionAwareModifierNode; -Landroidx/compose/ui/node/HitTestResult; -Landroidx/compose/ui/node/InnerNodeCoordinator$tail$1; -Landroidx/compose/ui/node/InnerNodeCoordinator; -Landroidx/compose/ui/node/IntermediateLayoutModifierNode; -Landroidx/compose/ui/node/IntrinsicsPolicy; -Landroidx/compose/ui/node/LayerPositionalProperties; -Landroidx/compose/ui/node/LayoutAwareModifierNode; -Landroidx/compose/ui/node/LayoutModifierNode; -Landroidx/compose/ui/node/LayoutModifierNodeCoordinator; -Landroidx/compose/ui/node/LayoutModifierNodeCoordinatorKt; -Landroidx/compose/ui/node/LayoutNode$$ExternalSyntheticLambda0; -Landroidx/compose/ui/node/LayoutNode$Companion$Constructor$1; -Landroidx/compose/ui/node/LayoutNode$Companion$DummyViewConfiguration$1; -Landroidx/compose/ui/node/LayoutNode$Companion$ErrorMeasurePolicy$1; -Landroidx/compose/ui/node/LayoutNode$NoIntrinsicsMeasurePolicy; -Landroidx/compose/ui/node/LayoutNode$WhenMappings; -Landroidx/compose/ui/node/LayoutNode$_foldedChildren$1; -Landroidx/compose/ui/node/LayoutNode; -Landroidx/compose/ui/node/LayoutNodeAlignmentLines; -Landroidx/compose/ui/node/LayoutNodeDrawScope; -Landroidx/compose/ui/node/LayoutNodeKt; -Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$childMeasurables$1; -Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1; -Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1; -Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate; -Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2; -Landroidx/compose/ui/node/LayoutNodeLayoutDelegate; -Landroidx/compose/ui/node/LayoutNodeLayoutDelegateKt; -Landroidx/compose/ui/node/LookaheadCapablePlaceable; -Landroidx/compose/ui/node/LookaheadDelegate; -Landroidx/compose/ui/node/MeasureAndLayoutDelegate$PostponedRequest; -Landroidx/compose/ui/node/MeasureAndLayoutDelegate; -Landroidx/compose/ui/node/ModifierNodeElement; -Landroidx/compose/ui/node/MutableVectorWithMutationTracking; -Landroidx/compose/ui/node/NodeChain; -Landroidx/compose/ui/node/NodeChainKt$SentinelHead$1; -Landroidx/compose/ui/node/NodeChainKt$fillVector$1; -Landroidx/compose/ui/node/NodeChainKt; -Landroidx/compose/ui/node/NodeCoordinator$Companion$PointerInputSource$1; -Landroidx/compose/ui/node/NodeCoordinator$Companion$SemanticsSource$1; -Landroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayer$1; -Landroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayerParams$1; -Landroidx/compose/ui/node/NodeCoordinator$HitTestSource; -Landroidx/compose/ui/node/NodeCoordinator$invalidateParentLayer$1; -Landroidx/compose/ui/node/NodeCoordinator$invoke$1; -Landroidx/compose/ui/node/NodeCoordinator$updateLayerParameters$1; -Landroidx/compose/ui/node/NodeCoordinator; -Landroidx/compose/ui/node/NodeKindKt; -Landroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator; -Landroidx/compose/ui/node/OnPositionedDispatcher; -Landroidx/compose/ui/node/OwnedLayer; -Landroidx/compose/ui/node/Owner$OnLayoutCompletedListener; -Landroidx/compose/ui/node/Owner; -Landroidx/compose/ui/node/OwnerScope; -Landroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayout$1; -Landroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayoutModifier$1; -Landroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingMeasure$1; -Landroidx/compose/ui/node/OwnerSnapshotObserver; -Landroidx/compose/ui/node/ParentDataModifierNode; -Landroidx/compose/ui/node/PointerInputModifierNode; -Landroidx/compose/ui/node/RootForTest; -Landroidx/compose/ui/node/SemanticsModifierNode; -Landroidx/compose/ui/node/SemanticsModifierNodeKt; -Landroidx/compose/ui/node/TreeSet; -Landroidx/compose/ui/node/UiApplier; -Landroidx/compose/ui/platform/AbstractComposeView$ensureCompositionCreated$1; -Landroidx/compose/ui/platform/AbstractComposeView; -Landroidx/compose/ui/platform/AccessibilityManager; -Landroidx/compose/ui/platform/AndroidAccessibilityManager; -Landroidx/compose/ui/platform/AndroidClipboardManager; -Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda0; -Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda1; -Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda2; -Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda3; -Landroidx/compose/ui/platform/AndroidComposeView$Companion; -Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners; -Landroidx/compose/ui/platform/AndroidComposeView$_inputModeManager$1; -Landroidx/compose/ui/platform/AndroidComposeView$configurationChangeObserver$1; -Landroidx/compose/ui/platform/AndroidComposeView$keyInputModifier$1; -Landroidx/compose/ui/platform/AndroidComposeView$pointerIconService$1; -Landroidx/compose/ui/platform/AndroidComposeView$resendMotionEventOnLayout$1; -Landroidx/compose/ui/platform/AndroidComposeView$resendMotionEventRunnable$1; -Landroidx/compose/ui/platform/AndroidComposeView$rotaryInputModifier$1; -Landroidx/compose/ui/platform/AndroidComposeView$semanticsModifier$1; -Landroidx/compose/ui/platform/AndroidComposeView$snapshotObserver$1; -Landroidx/compose/ui/platform/AndroidComposeView; -Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda0; -Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1; -Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider; -Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$SemanticsNodeCopy; -Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1; -Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sendScrollEventIfNeededLambda$1; -Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat; -Landroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ$$ExternalSyntheticApiModelOutline0; -Landroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ; -Landroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO$$ExternalSyntheticApiModelOutline0; -Landroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO$$ExternalSyntheticApiModelOutline1; -Landroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO; -Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalConfiguration$1; -Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalContext$1; -Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalImageVectorCache$1; -Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalLifecycleOwner$1; -Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalSavedStateRegistryOwner$1; -Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalView$1; -Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$1$1; -Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2$invoke$$inlined$onDispose$1; -Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2; -Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$3; -Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$4; -Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1$invoke$$inlined$onDispose$1; -Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1; -Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1; -Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt; -Landroidx/compose/ui/platform/AndroidFontResourceLoader; -Landroidx/compose/ui/platform/AndroidTextToolbar; -Landroidx/compose/ui/platform/AndroidUiDispatcher$Companion$Main$2; -Landroidx/compose/ui/platform/AndroidUiDispatcher$Companion$currentThread$1; -Landroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1; -Landroidx/compose/ui/platform/AndroidUiDispatcher; -Landroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$1; -Landroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1; -Landroidx/compose/ui/platform/AndroidUiFrameClock; -Landroidx/compose/ui/platform/AndroidUriHandler; -Landroidx/compose/ui/platform/AndroidViewConfiguration; -Landroidx/compose/ui/platform/CalculateMatrixToWindow; -Landroidx/compose/ui/platform/CalculateMatrixToWindowApi29; -Landroidx/compose/ui/platform/ClipboardManager; -Landroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt$lambda-1$1; -Landroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt; -Landroidx/compose/ui/platform/ComposeView$Content$1; -Landroidx/compose/ui/platform/ComposeView; -Landroidx/compose/ui/platform/CompositionLocalsKt$LocalAccessibilityManager$1; -Landroidx/compose/ui/platform/CompositionLocalsKt$LocalAutofill$1; -Landroidx/compose/ui/platform/CompositionLocalsKt$LocalAutofillTree$1; -Landroidx/compose/ui/platform/CompositionLocalsKt$LocalClipboardManager$1; -Landroidx/compose/ui/platform/CompositionLocalsKt$LocalDensity$1; -Landroidx/compose/ui/platform/CompositionLocalsKt$LocalFocusManager$1; -Landroidx/compose/ui/platform/CompositionLocalsKt$LocalFontFamilyResolver$1; -Landroidx/compose/ui/platform/CompositionLocalsKt$LocalFontLoader$1; -Landroidx/compose/ui/platform/CompositionLocalsKt$LocalHapticFeedback$1; -Landroidx/compose/ui/platform/CompositionLocalsKt$LocalInputModeManager$1; -Landroidx/compose/ui/platform/CompositionLocalsKt$LocalLayoutDirection$1; -Landroidx/compose/ui/platform/CompositionLocalsKt$LocalPointerIconService$1; -Landroidx/compose/ui/platform/CompositionLocalsKt$LocalTextInputService$1; -Landroidx/compose/ui/platform/CompositionLocalsKt$LocalTextToolbar$1; -Landroidx/compose/ui/platform/CompositionLocalsKt$LocalUriHandler$1; -Landroidx/compose/ui/platform/CompositionLocalsKt$LocalViewConfiguration$1; -Landroidx/compose/ui/platform/CompositionLocalsKt$LocalWindowInfo$1; -Landroidx/compose/ui/platform/CompositionLocalsKt$ProvideCommonCompositionLocals$1; -Landroidx/compose/ui/platform/CompositionLocalsKt; -Landroidx/compose/ui/platform/DeviceRenderNode; -Landroidx/compose/ui/platform/DisposableSaveableStateRegistry; -Landroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1; -Landroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$registered$1; -Landroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$saveableStateRegistry$1; -Landroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt; -Landroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1; -Landroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$2; -Landroidx/compose/ui/platform/GlobalSnapshotManager; -Landroidx/compose/ui/platform/InfiniteAnimationPolicy$Key; -Landroidx/compose/ui/platform/InfiniteAnimationPolicy; -Landroidx/compose/ui/platform/InspectableModifier$End; -Landroidx/compose/ui/platform/InspectableModifier; -Landroidx/compose/ui/platform/InspectableValueKt$NoInspectorInfo$1; -Landroidx/compose/ui/platform/InspectableValueKt; -Landroidx/compose/ui/platform/InspectionModeKt$LocalInspectionMode$1; -Landroidx/compose/ui/platform/InspectionModeKt; -Landroidx/compose/ui/platform/InspectorValueInfo; -Landroidx/compose/ui/platform/LayerMatrixCache; -Landroidx/compose/ui/platform/MotionDurationScaleImpl; -Landroidx/compose/ui/platform/OutlineResolver; -Landroidx/compose/ui/platform/RenderNodeApi29$$ExternalSyntheticApiModelOutline0; -Landroidx/compose/ui/platform/RenderNodeApi29; -Landroidx/compose/ui/platform/RenderNodeApi29VerificationHelper$$ExternalSyntheticApiModelOutline0; -Landroidx/compose/ui/platform/RenderNodeApi29VerificationHelper; -Landroidx/compose/ui/platform/RenderNodeLayer$Companion$getMatrix$1; -Landroidx/compose/ui/platform/RenderNodeLayer; -Landroidx/compose/ui/platform/TestTagKt$testTag$1; -Landroidx/compose/ui/platform/TestTagKt; -Landroidx/compose/ui/platform/TextToolbar; -Landroidx/compose/ui/platform/UriHandler; -Landroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$1; -Landroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$listener$1; -Landroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$poolingContainerListener$1; -Landroidx/compose/ui/platform/ViewConfiguration; -Landroidx/compose/ui/platform/ViewLayer$Companion$OutlineProvider$1; -Landroidx/compose/ui/platform/ViewLayer; -Landroidx/compose/ui/platform/WeakCache; -Landroidx/compose/ui/platform/WindowInfo; -Landroidx/compose/ui/platform/WindowInfoImpl; -Landroidx/compose/ui/platform/WindowRecomposerFactory$Companion$LifecycleAware$1; -Landroidx/compose/ui/platform/WindowRecomposerFactory$Companion; -Landroidx/compose/ui/platform/WindowRecomposerFactory; -Landroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$1; -Landroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1; -Landroidx/compose/ui/platform/WindowRecomposerPolicy; -Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1; -Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$WhenMappings; -Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1$1; -Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1; -Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1; -Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2; -Landroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1; -Landroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$contentObserver$1; -Landroidx/compose/ui/platform/WindowRecomposer_androidKt; -Landroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1; -Landroidx/compose/ui/platform/WrappedComposition$setContent$1$1$2; -Landroidx/compose/ui/platform/WrappedComposition$setContent$1$1$3; -Landroidx/compose/ui/platform/WrappedComposition$setContent$1$1; -Landroidx/compose/ui/platform/WrappedComposition$setContent$1; -Landroidx/compose/ui/platform/WrappedComposition; -Landroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods$$ExternalSyntheticApiModelOutline0; -Landroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods; -Landroidx/compose/ui/platform/WrapperVerificationHelperMethods$$ExternalSyntheticApiModelOutline0; -Landroidx/compose/ui/platform/WrapperVerificationHelperMethods; -Landroidx/compose/ui/platform/Wrapper_androidKt; -Landroidx/compose/ui/res/ImageVectorCache$ImageVectorEntry; -Landroidx/compose/ui/res/ImageVectorCache$Key; -Landroidx/compose/ui/res/ImageVectorCache; -Landroidx/compose/ui/res/PainterResources_androidKt; -Landroidx/compose/ui/res/Resources_androidKt; -Landroidx/compose/ui/semantics/AccessibilityAction; -Landroidx/compose/ui/semantics/CollectionInfo; -Landroidx/compose/ui/semantics/Role; -Landroidx/compose/ui/semantics/ScrollAxisRange; -Landroidx/compose/ui/semantics/SemanticsActions; -Landroidx/compose/ui/semantics/SemanticsConfiguration; -Landroidx/compose/ui/semantics/SemanticsModifier; -Landroidx/compose/ui/semantics/SemanticsModifierCore; -Landroidx/compose/ui/semantics/SemanticsModifierKt; -Landroidx/compose/ui/semantics/SemanticsNode; -Landroidx/compose/ui/semantics/SemanticsNodeKt; -Landroidx/compose/ui/semantics/SemanticsOwner; -Landroidx/compose/ui/semantics/SemanticsProperties$ContentDescription$1; -Landroidx/compose/ui/semantics/SemanticsProperties$InvisibleToUser$1; -Landroidx/compose/ui/semantics/SemanticsProperties$IsDialog$1; -Landroidx/compose/ui/semantics/SemanticsProperties$IsPopup$1; -Landroidx/compose/ui/semantics/SemanticsProperties$PaneTitle$1; -Landroidx/compose/ui/semantics/SemanticsProperties$Role$1; -Landroidx/compose/ui/semantics/SemanticsProperties$TestTag$1; -Landroidx/compose/ui/semantics/SemanticsProperties$Text$1; -Landroidx/compose/ui/semantics/SemanticsProperties; -Landroidx/compose/ui/semantics/SemanticsPropertiesAndroid$TestTagsAsResourceId$1; -Landroidx/compose/ui/semantics/SemanticsPropertiesAndroid; -Landroidx/compose/ui/semantics/SemanticsPropertiesKt$ActionPropertyKey$1; -Landroidx/compose/ui/semantics/SemanticsPropertiesKt; -Landroidx/compose/ui/semantics/SemanticsProperties_androidKt; -Landroidx/compose/ui/semantics/SemanticsPropertyKey$1; -Landroidx/compose/ui/semantics/SemanticsPropertyKey; -Landroidx/compose/ui/semantics/SemanticsPropertyReceiver; -Landroidx/compose/ui/state/ToggleableState; -Landroidx/compose/ui/text/AndroidParagraph$wordBoundary$2; -Landroidx/compose/ui/text/AndroidParagraph; -Landroidx/compose/ui/text/AnnotatedString$Range; -Landroidx/compose/ui/text/AnnotatedString$special$$inlined$sortedBy$1; -Landroidx/compose/ui/text/AnnotatedString; -Landroidx/compose/ui/text/AnnotatedStringKt; -Landroidx/compose/ui/text/MultiParagraph; -Landroidx/compose/ui/text/MultiParagraphIntrinsics$maxIntrinsicWidth$2; -Landroidx/compose/ui/text/MultiParagraphIntrinsics$minIntrinsicWidth$2; -Landroidx/compose/ui/text/MultiParagraphIntrinsics; -Landroidx/compose/ui/text/Paragraph; -Landroidx/compose/ui/text/ParagraphInfo; -Landroidx/compose/ui/text/ParagraphIntrinsicInfo; -Landroidx/compose/ui/text/ParagraphIntrinsics; -Landroidx/compose/ui/text/ParagraphStyle; -Landroidx/compose/ui/text/ParagraphStyleKt; -Landroidx/compose/ui/text/SpanStyle; -Landroidx/compose/ui/text/SpanStyleKt$resolveSpanStyleDefaults$1; -Landroidx/compose/ui/text/SpanStyleKt; -Landroidx/compose/ui/text/TextLayoutInput; -Landroidx/compose/ui/text/TextLayoutResult; -Landroidx/compose/ui/text/TextRange; -Landroidx/compose/ui/text/TextRangeKt; -Landroidx/compose/ui/text/TextStyle; -Landroidx/compose/ui/text/android/BoringLayoutFactory33; -Landroidx/compose/ui/text/android/LayoutIntrinsics$boringMetrics$2; -Landroidx/compose/ui/text/android/LayoutIntrinsics$maxIntrinsicWidth$2; -Landroidx/compose/ui/text/android/LayoutIntrinsics$minIntrinsicWidth$2; -Landroidx/compose/ui/text/android/LayoutIntrinsics; -Landroidx/compose/ui/text/android/StaticLayoutFactory23; -Landroidx/compose/ui/text/android/StaticLayoutFactory26$$ExternalSyntheticApiModelOutline0; -Landroidx/compose/ui/text/android/StaticLayoutFactory26; -Landroidx/compose/ui/text/android/StaticLayoutFactory28$$ExternalSyntheticApiModelOutline0; -Landroidx/compose/ui/text/android/StaticLayoutFactory28; -Landroidx/compose/ui/text/android/StaticLayoutFactory33; -Landroidx/compose/ui/text/android/StaticLayoutFactory; -Landroidx/compose/ui/text/android/StaticLayoutFactoryImpl; -Landroidx/compose/ui/text/android/StaticLayoutParams; -Landroidx/compose/ui/text/android/TextAlignmentAdapter; -Landroidx/compose/ui/text/android/TextAndroidCanvas; -Landroidx/compose/ui/text/android/TextLayout$layoutHelper$2; -Landroidx/compose/ui/text/android/TextLayout; -Landroidx/compose/ui/text/android/TextLayoutKt; -Landroidx/compose/ui/text/android/style/BaselineShiftSpan; -Landroidx/compose/ui/text/android/style/IndentationFixSpanKt; -Landroidx/compose/ui/text/android/style/LetterSpacingSpanPx; -Landroidx/compose/ui/text/android/style/LineHeightSpan; -Landroidx/compose/ui/text/android/style/LineHeightStyleSpan; -Landroidx/compose/ui/text/android/style/PlaceholderSpan; -Landroidx/compose/ui/text/caches/LruCache; -Landroidx/compose/ui/text/caches/SimpleArrayMap; -Landroidx/compose/ui/text/font/AndroidFontLoader; -Landroidx/compose/ui/text/font/AndroidFontResolveInterceptor; -Landroidx/compose/ui/text/font/AndroidFontResolveInterceptor_androidKt; -Landroidx/compose/ui/text/font/AsyncTypefaceCache; -Landroidx/compose/ui/text/font/DefaultFontFamily; -Landroidx/compose/ui/text/font/Font$ResourceLoader; -Landroidx/compose/ui/text/font/FontFamily$Resolver; -Landroidx/compose/ui/text/font/FontFamily; -Landroidx/compose/ui/text/font/FontFamilyResolverImpl$createDefaultTypeface$1; -Landroidx/compose/ui/text/font/FontFamilyResolverImpl$resolve$result$1; -Landroidx/compose/ui/text/font/FontFamilyResolverImpl; -Landroidx/compose/ui/text/font/FontFamilyResolverKt; -Landroidx/compose/ui/text/font/FontListFontFamily; -Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter$special$$inlined$CoroutineExceptionHandler$1; -Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter; -Landroidx/compose/ui/text/font/FontStyle; -Landroidx/compose/ui/text/font/FontSynthesis; -Landroidx/compose/ui/text/font/FontWeight; -Landroidx/compose/ui/text/font/GenericFontFamily; -Landroidx/compose/ui/text/font/PlatformFontFamilyTypefaceAdapter; -Landroidx/compose/ui/text/font/PlatformFontLoader; -Landroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion$Default$1; -Landroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion; -Landroidx/compose/ui/text/font/PlatformResolveInterceptor; -Landroidx/compose/ui/text/font/PlatformTypefaces; -Landroidx/compose/ui/text/font/SystemFontFamily; -Landroidx/compose/ui/text/font/TypefaceRequest; -Landroidx/compose/ui/text/font/TypefaceRequestCache$runCached$currentTypefaceResult$1; -Landroidx/compose/ui/text/font/TypefaceRequestCache; -Landroidx/compose/ui/text/font/TypefaceResult$Immutable; -Landroidx/compose/ui/text/font/TypefaceResult; -Landroidx/compose/ui/text/input/InputMethodManager; -Landroidx/compose/ui/text/input/InputMethodManagerImpl$imm$2; -Landroidx/compose/ui/text/input/InputMethodManagerImpl; -Landroidx/compose/ui/text/input/PlatformTextInputService; -Landroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$1; -Landroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$2; -Landroidx/compose/ui/text/input/TextFieldValue; -Landroidx/compose/ui/text/input/TextInputService; -Landroidx/compose/ui/text/input/TextInputServiceAndroid$baseInputConnection$2; -Landroidx/compose/ui/text/input/TextInputServiceAndroid$textInputCommandEventLoop$1; -Landroidx/compose/ui/text/input/TextInputServiceAndroid; -Landroidx/compose/ui/text/intl/AndroidLocale; -Landroidx/compose/ui/text/intl/Locale; -Landroidx/compose/ui/text/intl/LocaleList$Companion; -Landroidx/compose/ui/text/intl/LocaleList; -Landroidx/compose/ui/text/intl/PlatformLocale; -Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1; -Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics; -Landroidx/compose/ui/text/platform/AndroidTextPaint; -Landroidx/compose/ui/text/platform/SynchronizedObject; -Landroidx/compose/ui/text/platform/TypefaceDirtyTracker; -Landroidx/compose/ui/text/platform/extensions/SpanRange; -Landroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt$setFontAttributes$1; -Landroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt; -Landroidx/compose/ui/text/platform/style/ShaderBrushSpan; -Landroidx/compose/ui/text/style/BaselineShift; -Landroidx/compose/ui/text/style/BrushStyle; -Landroidx/compose/ui/text/style/ColorStyle; -Landroidx/compose/ui/text/style/Hyphens; -Landroidx/compose/ui/text/style/LineBreak$Strategy; -Landroidx/compose/ui/text/style/LineBreak$Strictness; -Landroidx/compose/ui/text/style/LineBreak$WordBreak; -Landroidx/compose/ui/text/style/LineBreak; -Landroidx/compose/ui/text/style/TextAlign; -Landroidx/compose/ui/text/style/TextDecoration; -Landroidx/compose/ui/text/style/TextDirection; -Landroidx/compose/ui/text/style/TextForegroundStyle$Unspecified; -Landroidx/compose/ui/text/style/TextForegroundStyle$merge$2; -Landroidx/compose/ui/text/style/TextForegroundStyle; -Landroidx/compose/ui/text/style/TextGeometricTransform; -Landroidx/compose/ui/text/style/TextIndent; -Landroidx/compose/ui/unit/AndroidDensity_androidKt; -Landroidx/compose/ui/unit/Constraints$Companion; -Landroidx/compose/ui/unit/Constraints; -Landroidx/compose/ui/unit/Density; -Landroidx/compose/ui/unit/DensityImpl; -Landroidx/compose/ui/unit/Dp; -Landroidx/compose/ui/unit/DpKt; -Landroidx/compose/ui/unit/DpOffset; -Landroidx/compose/ui/unit/DpSize; -Landroidx/compose/ui/unit/IntOffset$Companion; -Landroidx/compose/ui/unit/IntOffset; -Landroidx/compose/ui/unit/IntOffsetKt; -Landroidx/compose/ui/unit/IntSize$Companion; -Landroidx/compose/ui/unit/IntSize; -Landroidx/compose/ui/unit/IntSizeKt; -Landroidx/compose/ui/unit/LayoutDirection; -Landroidx/compose/ui/unit/TextUnit; -Landroidx/compose/ui/unit/TextUnitKt; -Landroidx/compose/ui/unit/TextUnitType; -Landroidx/compose/ui/util/MathHelpersKt; -Landroidx/compose/ui/window/DialogWindowProvider; -Landroidx/core/R$id; -Landroidx/core/app/ComponentActivity; -Landroidx/core/app/CoreComponentFactory$CompatWrapped; -Landroidx/core/app/CoreComponentFactory; -Landroidx/core/content/ContextCompat$Api23Impl; -Landroidx/core/content/ContextCompat; -Landroidx/core/content/PermissionChecker; -Landroidx/core/content/res/CamUtils; -Landroidx/core/content/res/ComplexColorCompat; -Landroidx/core/content/res/TypedArrayUtils; -Landroidx/core/graphics/Insets; -Landroidx/core/math/MathUtils; -Landroidx/core/net/ConnectivityManagerCompat$Api16Impl; -Landroidx/core/os/BuildCompat; -Landroidx/core/os/HandlerCompat; -Landroidx/core/splashscreen/SplashScreen$Impl$$ExternalSyntheticLambda0; -Landroidx/core/splashscreen/SplashScreen$Impl31$hierarchyListener$1; -Landroidx/core/splashscreen/SplashScreen$Impl31$setKeepOnScreenCondition$1; -Landroidx/core/splashscreen/SplashScreen$Impl31; -Landroidx/core/splashscreen/SplashScreen$Impl; -Landroidx/core/splashscreen/SplashScreen$KeepOnScreenCondition; -Landroidx/core/util/Consumer; -Landroidx/core/util/DebugUtils; -Landroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter; -Landroidx/core/view/AccessibilityDelegateCompat; -Landroidx/core/view/DisplayCutoutCompat$Api30Impl$$ExternalSyntheticApiModelOutline0; -Landroidx/core/view/DisplayCutoutCompat$Api30Impl; -Landroidx/core/view/DisplayCutoutCompat; -Landroidx/core/view/KeyEventDispatcher$Component; -Landroidx/core/view/MenuHostHelper; -Landroidx/core/view/OnApplyWindowInsetsListener; -Landroidx/core/view/OnReceiveContentViewBehavior; -Landroidx/core/view/OneShotPreDrawListener; -Landroidx/core/view/ViewCompat$$ExternalSyntheticLambda0; -Landroidx/core/view/ViewCompat$AccessibilityPaneVisibilityManager; -Landroidx/core/view/ViewCompat$Api19Impl; -Landroidx/core/view/ViewCompat$Api21Impl$1; -Landroidx/core/view/ViewCompat$Api21Impl; -Landroidx/core/view/ViewCompat$Api23Impl; -Landroidx/core/view/ViewCompat; -Landroidx/core/view/WindowCompat$Api30Impl$$ExternalSyntheticApiModelOutline0; -Landroidx/core/view/WindowCompat$Api30Impl; -Landroidx/core/view/WindowInsetsAnimationCompat$Callback; -Landroidx/core/view/WindowInsetsAnimationCompat$Impl30$$ExternalSyntheticApiModelOutline0; -Landroidx/core/view/WindowInsetsAnimationCompat$Impl30$ProxyCallback; -Landroidx/core/view/WindowInsetsCompat$BuilderImpl29; -Landroidx/core/view/WindowInsetsCompat$BuilderImpl30; -Landroidx/core/view/WindowInsetsCompat$BuilderImpl; -Landroidx/core/view/WindowInsetsCompat$Impl20; -Landroidx/core/view/WindowInsetsCompat$Impl21; -Landroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0; -Landroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline1; -Landroidx/core/view/WindowInsetsCompat$Impl28; -Landroidx/core/view/WindowInsetsCompat$Impl29; -Landroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline0; -Landroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline1; -Landroidx/core/view/WindowInsetsCompat$Impl30$$ExternalSyntheticApiModelOutline2; -Landroidx/core/view/WindowInsetsCompat$Impl30; -Landroidx/core/view/WindowInsetsCompat$Impl; -Landroidx/core/view/WindowInsetsCompat$TypeImpl30; -Landroidx/core/view/WindowInsetsCompat; -Landroidx/core/view/WindowInsetsControllerCompat$Impl30$$ExternalSyntheticApiModelOutline0; -Landroidx/core/view/WindowInsetsControllerCompat$Impl30; -Landroidx/core/view/WindowInsetsControllerCompat$Impl; -Landroidx/core/view/WindowInsetsControllerCompat; -Landroidx/core/view/accessibility/AccessibilityNodeProviderCompat; -Landroidx/customview/poolingcontainer/PoolingContainer; -Landroidx/customview/poolingcontainer/PoolingContainerListener; -Landroidx/customview/poolingcontainer/PoolingContainerListenerHolder; -Landroidx/datastore/core/CorruptionException; -Landroidx/datastore/core/CorruptionHandler; -Landroidx/datastore/core/Data; -Landroidx/datastore/core/DataMigration; -Landroidx/datastore/core/DataMigrationInitializer$Companion$getInitializer$1; -Landroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$1; -Landroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2$1$1; -Landroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2; -Landroidx/datastore/core/DataMigrationInitializer$Companion; -Landroidx/datastore/core/DataMigrationInitializer; -Landroidx/datastore/core/DataStore; -Landroidx/datastore/core/Final; -Landroidx/datastore/core/InitializerApi; -Landroidx/datastore/core/ReadException; -Landroidx/datastore/core/Serializer; -Landroidx/datastore/core/SimpleActor$1; -Landroidx/datastore/core/SimpleActor$offer$2; -Landroidx/datastore/core/SimpleActor; -Landroidx/datastore/core/SingleProcessDataStore$Message$Read; -Landroidx/datastore/core/SingleProcessDataStore$Message$Update; -Landroidx/datastore/core/SingleProcessDataStore$Message; -Landroidx/datastore/core/SingleProcessDataStore$UncloseableOutputStream; -Landroidx/datastore/core/SingleProcessDataStore$actor$1; -Landroidx/datastore/core/SingleProcessDataStore$actor$2; -Landroidx/datastore/core/SingleProcessDataStore$actor$3; -Landroidx/datastore/core/SingleProcessDataStore$data$1$1; -Landroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2$1; -Landroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2; -Landroidx/datastore/core/SingleProcessDataStore$data$1; -Landroidx/datastore/core/SingleProcessDataStore$file$2; -Landroidx/datastore/core/SingleProcessDataStore$handleUpdate$1; -Landroidx/datastore/core/SingleProcessDataStore$readAndInit$1; -Landroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1$updateData$1; -Landroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1; -Landroidx/datastore/core/SingleProcessDataStore$readAndInitOrPropagateFailure$1; -Landroidx/datastore/core/SingleProcessDataStore$readData$1; -Landroidx/datastore/core/SingleProcessDataStore$readDataOrHandleCorruption$1; -Landroidx/datastore/core/SingleProcessDataStore$transformAndWrite$1; -Landroidx/datastore/core/SingleProcessDataStore$transformAndWrite$newData$1; -Landroidx/datastore/core/SingleProcessDataStore$writeData$1; -Landroidx/datastore/core/SingleProcessDataStore; -Landroidx/datastore/core/State; -Landroidx/datastore/core/UnInitialized; -Landroidx/datastore/core/handlers/NoOpCorruptionHandler; -Landroidx/emoji2/text/ConcurrencyHelpers$Handler28Impl; -Landroidx/emoji2/text/DefaultGlyphChecker; -Landroidx/emoji2/text/EmojiCompat$CompatInternal19; -Landroidx/emoji2/text/EmojiCompat$CompatInternal; -Landroidx/emoji2/text/EmojiCompat$Config; -Landroidx/emoji2/text/EmojiCompat$GlyphChecker; -Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoader; -Landroidx/emoji2/text/EmojiCompat; -Landroidx/emoji2/text/EmojiCompatInitializer$1; -Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultConfig; -Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader; -Landroidx/emoji2/text/EmojiCompatInitializer$LoadEmojiCompatRunnable; -Landroidx/emoji2/text/EmojiCompatInitializer; -Landroidx/hilt/navigation/compose/HiltViewModelKt; -Landroidx/hilt/work/HiltWorkerFactory; -Landroidx/hilt/work/WorkerAssistedFactory; -Landroidx/lifecycle/AbstractSavedStateViewModelFactory; -Landroidx/lifecycle/AndroidViewModel; -Landroidx/lifecycle/CloseableCoroutineScope; -Landroidx/lifecycle/DefaultLifecycleObserver; -Landroidx/lifecycle/EmptyActivityLifecycleCallbacks; -Landroidx/lifecycle/FlowLiveDataConversions$asFlow$1$$ExternalSyntheticLambda0; -Landroidx/lifecycle/FlowLiveDataConversions$asFlow$1$1; -Landroidx/lifecycle/FlowLiveDataConversions$asFlow$1$2; -Landroidx/lifecycle/FlowLiveDataConversions$asFlow$1; -Landroidx/lifecycle/FullLifecycleObserver; -Landroidx/lifecycle/FullLifecycleObserverAdapter$1; -Landroidx/lifecycle/FullLifecycleObserverAdapter; -Landroidx/lifecycle/HasDefaultViewModelProviderFactory; -Landroidx/lifecycle/LegacySavedStateHandleController; -Landroidx/lifecycle/Lifecycle$1; -Landroidx/lifecycle/Lifecycle$Event; -Landroidx/lifecycle/Lifecycle$State; -Landroidx/lifecycle/Lifecycle; -Landroidx/lifecycle/LifecycleCoroutineScope; -Landroidx/lifecycle/LifecycleCoroutineScopeImpl$register$1; -Landroidx/lifecycle/LifecycleCoroutineScopeImpl; -Landroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback; -Landroidx/lifecycle/LifecycleDispatcher; -Landroidx/lifecycle/LifecycleEventObserver; -Landroidx/lifecycle/LifecycleObserver; -Landroidx/lifecycle/LifecycleOwner; -Landroidx/lifecycle/LifecycleRegistry$ObserverWithState; -Landroidx/lifecycle/LifecycleRegistry; -Landroidx/lifecycle/LifecycleRegistryOwner; -Landroidx/lifecycle/Lifecycling; -Landroidx/lifecycle/LiveData$1; -Landroidx/lifecycle/LiveData$AlwaysActiveObserver; -Landroidx/lifecycle/LiveData$LifecycleBoundObserver; -Landroidx/lifecycle/LiveData$ObserverWrapper; -Landroidx/lifecycle/LiveData; -Landroidx/lifecycle/MediatorLiveData$Source; -Landroidx/lifecycle/MediatorLiveData; -Landroidx/lifecycle/MutableLiveData; -Landroidx/lifecycle/Observer; -Landroidx/lifecycle/ProcessLifecycleInitializer; -Landroidx/lifecycle/ProcessLifecycleOwner$1; -Landroidx/lifecycle/ProcessLifecycleOwner$2; -Landroidx/lifecycle/ProcessLifecycleOwner$3$$ExternalSyntheticApiModelOutline0; -Landroidx/lifecycle/ProcessLifecycleOwner$3$1; -Landroidx/lifecycle/ProcessLifecycleOwner$3; -Landroidx/lifecycle/ProcessLifecycleOwner; -Landroidx/lifecycle/RepeatOnLifecycleKt$repeatOnLifecycle$3$1$1$1$1$1$1; -Landroidx/lifecycle/RepeatOnLifecycleKt$repeatOnLifecycle$3$1$1$1$1; -Landroidx/lifecycle/RepeatOnLifecycleKt$repeatOnLifecycle$3$1$1$1; -Landroidx/lifecycle/RepeatOnLifecycleKt$repeatOnLifecycle$3$1; -Landroidx/lifecycle/RepeatOnLifecycleKt$repeatOnLifecycle$3; -Landroidx/lifecycle/RepeatOnLifecycleKt; -Landroidx/lifecycle/ReportFragment$ActivityInitializationListener; -Landroidx/lifecycle/ReportFragment$LifecycleCallbacks$$ExternalSyntheticApiModelOutline0; -Landroidx/lifecycle/ReportFragment$LifecycleCallbacks; -Landroidx/lifecycle/ReportFragment; -Landroidx/lifecycle/SavedStateHandle$$ExternalSyntheticLambda0; -Landroidx/lifecycle/SavedStateHandle$Companion; -Landroidx/lifecycle/SavedStateHandle; -Landroidx/lifecycle/SavedStateHandleAttacher; -Landroidx/lifecycle/SavedStateHandleController; -Landroidx/lifecycle/SavedStateHandleSupport$DEFAULT_ARGS_KEY$1; -Landroidx/lifecycle/SavedStateHandleSupport$SAVED_STATE_REGISTRY_OWNER_KEY$1; -Landroidx/lifecycle/SavedStateHandleSupport$VIEW_MODEL_STORE_OWNER_KEY$1; -Landroidx/lifecycle/SavedStateHandleSupport$savedStateHandlesVM$1$1; -Landroidx/lifecycle/SavedStateHandleSupport; -Landroidx/lifecycle/SavedStateHandlesProvider$viewModel$2; -Landroidx/lifecycle/SavedStateHandlesProvider; -Landroidx/lifecycle/SavedStateHandlesVM; -Landroidx/lifecycle/SavedStateViewModelFactory; -Landroidx/lifecycle/SavedStateViewModelFactoryKt; -Landroidx/lifecycle/Transformations$1; -Landroidx/lifecycle/ViewModel; -Landroidx/lifecycle/ViewModelKt; -Landroidx/lifecycle/ViewModelLazy; -Landroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory$Companion$ApplicationKeyImpl; -Landroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory; -Landroidx/lifecycle/ViewModelProvider$Factory; -Landroidx/lifecycle/ViewModelProvider$NewInstanceFactory$Companion$ViewModelKeyImpl; -Landroidx/lifecycle/ViewModelProvider$NewInstanceFactory; -Landroidx/lifecycle/ViewModelProvider$OnRequeryFactory; -Landroidx/lifecycle/ViewModelProvider; -Landroidx/lifecycle/ViewModelStore; -Landroidx/lifecycle/ViewModelStoreOwner; -Landroidx/lifecycle/compose/FlowExtKt$collectAsStateWithLifecycle$1$1$1; -Landroidx/lifecycle/compose/FlowExtKt$collectAsStateWithLifecycle$1$1; -Landroidx/lifecycle/compose/FlowExtKt$collectAsStateWithLifecycle$1; -Landroidx/lifecycle/compose/FlowExtKt; -Landroidx/lifecycle/runtime/R$id; -Landroidx/lifecycle/viewmodel/CreationExtras$Empty; -Landroidx/lifecycle/viewmodel/CreationExtras; -Landroidx/lifecycle/viewmodel/InitializerViewModelFactory; -Landroidx/lifecycle/viewmodel/MutableCreationExtras; -Landroidx/lifecycle/viewmodel/ViewModelInitializer; -Landroidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner$LocalViewModelStoreOwner$1; -Landroidx/lifecycle/viewmodel/compose/LocalViewModelStoreOwner; -Landroidx/lifecycle/viewmodel/compose/ViewModelKt; -Landroidx/metrics/performance/DelegatingFrameMetricsListener; -Landroidx/metrics/performance/FrameData; -Landroidx/metrics/performance/FrameDataApi24; -Landroidx/metrics/performance/FrameDataApi31; -Landroidx/metrics/performance/JankStats$OnFrameListener; -Landroidx/metrics/performance/JankStats; -Landroidx/metrics/performance/JankStatsApi16Impl$onFrameListenerDelegate$1; -Landroidx/metrics/performance/JankStatsApi16Impl; -Landroidx/metrics/performance/JankStatsApi22Impl; -Landroidx/metrics/performance/JankStatsApi24Impl$$ExternalSyntheticLambda0; -Landroidx/metrics/performance/JankStatsApi24Impl; -Landroidx/metrics/performance/JankStatsApi26Impl; -Landroidx/metrics/performance/JankStatsApi31Impl; -Landroidx/metrics/performance/JankStatsBaseImpl; -Landroidx/metrics/performance/OnFrameListenerDelegate; -Landroidx/metrics/performance/PerformanceMetricsState$Holder; -Landroidx/metrics/performance/PerformanceMetricsState$StateData; -Landroidx/metrics/performance/PerformanceMetricsState; -Landroidx/metrics/performance/StateInfo; -Landroidx/navigation/ActivityNavigator$hostActivity$1; -Landroidx/navigation/ActivityNavigator; -Landroidx/navigation/FloatingWindow; -Landroidx/navigation/NamedNavArgument; -Landroidx/navigation/NavArgument$Builder; -Landroidx/navigation/NavArgument; -Landroidx/navigation/NavArgumentBuilder; -Landroidx/navigation/NavBackStackEntry$Companion; -Landroidx/navigation/NavBackStackEntry$defaultFactory$2; -Landroidx/navigation/NavBackStackEntry$savedStateHandle$2; -Landroidx/navigation/NavBackStackEntry; -Landroidx/navigation/NavController$$ExternalSyntheticLambda0; -Landroidx/navigation/NavController$NavControllerNavigatorState; -Landroidx/navigation/NavController$OnDestinationChangedListener; -Landroidx/navigation/NavController$activity$1; -Landroidx/navigation/NavController$navInflater$2; -Landroidx/navigation/NavController$navigate$4; -Landroidx/navigation/NavController$onBackPressedCallback$1; -Landroidx/navigation/NavController; -Landroidx/navigation/NavControllerViewModel$Companion$FACTORY$1; -Landroidx/navigation/NavControllerViewModel; -Landroidx/navigation/NavDeepLink$mimeTypePattern$2; -Landroidx/navigation/NavDeepLink$pattern$2; -Landroidx/navigation/NavDeepLink; -Landroidx/navigation/NavDeepLinkRequest; -Landroidx/navigation/NavDestination$$ExternalSyntheticOutline0; -Landroidx/navigation/NavDestination$Companion$hierarchy$1; -Landroidx/navigation/NavDestination$Companion; -Landroidx/navigation/NavDestination$DeepLinkMatch; -Landroidx/navigation/NavDestination; -Landroidx/navigation/NavDestinationBuilder; -Landroidx/navigation/NavGraph$iterator$1; -Landroidx/navigation/NavGraph; -Landroidx/navigation/NavGraphBuilder; -Landroidx/navigation/NavGraphNavigator; -Landroidx/navigation/NavHostController; -Landroidx/navigation/NavType$Companion$BoolArrayType$1; -Landroidx/navigation/NavType$Companion$BoolType$1; -Landroidx/navigation/NavType$Companion$FloatArrayType$1; -Landroidx/navigation/NavType$Companion$FloatType$1; -Landroidx/navigation/NavType$Companion$IntArrayType$1; -Landroidx/navigation/NavType$Companion$IntType$1; -Landroidx/navigation/NavType$Companion$LongArrayType$1; -Landroidx/navigation/NavType$Companion$LongType$1; -Landroidx/navigation/NavType$Companion$StringArrayType$1; -Landroidx/navigation/NavType$Companion$StringType$1; -Landroidx/navigation/NavType; -Landroidx/navigation/NavViewModelStoreProvider; -Landroidx/navigation/Navigator$Name; -Landroidx/navigation/Navigator; -Landroidx/navigation/NavigatorProvider$Companion; -Landroidx/navigation/NavigatorProvider; -Landroidx/navigation/NavigatorState; -Landroidx/navigation/compose/BackStackEntryIdViewModel; -Landroidx/navigation/compose/ComposeNavigator$Destination; -Landroidx/navigation/compose/ComposeNavigator; -Landroidx/navigation/compose/DialogHostKt$DialogHost$2; -Landroidx/navigation/compose/DialogHostKt; -Landroidx/navigation/compose/DialogNavigator; -Landroidx/navigation/compose/NavBackStackEntryProviderKt$LocalOwnersProvider$1; -Landroidx/navigation/compose/NavBackStackEntryProviderKt$SaveableStateProvider$1; -Landroidx/navigation/compose/NavBackStackEntryProviderKt; -Landroidx/navigation/compose/NavGraphBuilderKt; -Landroidx/navigation/compose/NavHostControllerKt$NavControllerSaver$1; -Landroidx/navigation/compose/NavHostControllerKt$NavControllerSaver$2; -Landroidx/navigation/compose/NavHostControllerKt$rememberNavController$1; -Landroidx/navigation/compose/NavHostKt$NavHost$3$invoke$$inlined$onDispose$1; -Landroidx/navigation/compose/NavHostKt$NavHost$3; -Landroidx/navigation/compose/NavHostKt$NavHost$4$1$1$invoke$$inlined$onDispose$1; -Landroidx/navigation/compose/NavHostKt$NavHost$4$1$1; -Landroidx/navigation/compose/NavHostKt$NavHost$4$2; -Landroidx/navigation/compose/NavHostKt$NavHost$4; -Landroidx/navigation/compose/NavHostKt$NavHost$5; -Landroidx/navigation/compose/NavHostKt$NavHost$lambda-4$$inlined$map$1$2$1; -Landroidx/navigation/compose/NavHostKt$NavHost$lambda-4$$inlined$map$1$2; -Landroidx/navigation/compose/NavHostKt$NavHost$lambda-4$$inlined$map$1; -Landroidx/navigation/compose/NavHostKt; -Landroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0; -Landroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda1; -Landroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl$$ExternalSyntheticLambda0; -Landroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl; -Landroidx/profileinstaller/ProfileInstallerInitializer$Handler28Impl; -Landroidx/profileinstaller/ProfileInstallerInitializer$Result; -Landroidx/profileinstaller/ProfileInstallerInitializer; -Landroidx/room/AutoClosingRoomOpenHelper; -Landroidx/room/CoroutinesRoom$Companion$createFlow$1$1$1; -Landroidx/room/CoroutinesRoom$Companion$createFlow$1$1$observer$1; -Landroidx/room/CoroutinesRoom$Companion$createFlow$1$1; -Landroidx/room/CoroutinesRoom$Companion$createFlow$1; -Landroidx/room/CoroutinesRoom$Companion$execute$2; -Landroidx/room/CoroutinesRoom; -Landroidx/room/CoroutinesRoomKt; -Landroidx/room/DatabaseConfiguration; -Landroidx/room/DelegatingOpenHelper; -Landroidx/room/EntityDeletionOrUpdateAdapter; -Landroidx/room/EntityInsertionAdapter; -Landroidx/room/EntityUpsertionAdapter; -Landroidx/room/InvalidationLiveDataContainer; -Landroidx/room/InvalidationTracker$Companion; -Landroidx/room/InvalidationTracker$ObservedTableTracker; -Landroidx/room/InvalidationTracker$Observer; -Landroidx/room/InvalidationTracker$ObserverWrapper; -Landroidx/room/InvalidationTracker$WeakObserver; -Landroidx/room/InvalidationTracker$refreshRunnable$1; -Landroidx/room/InvalidationTracker; -Landroidx/room/Room; -Landroidx/room/RoomDatabase$Builder; -Landroidx/room/RoomDatabase$Callback; -Landroidx/room/RoomDatabase$MigrationContainer; -Landroidx/room/RoomDatabase; -Landroidx/room/RoomOpenHelper$Delegate; -Landroidx/room/RoomOpenHelper; -Landroidx/room/RoomSQLiteQuery; -Landroidx/room/RoomTrackingLiveData$$ExternalSyntheticLambda0; -Landroidx/room/RoomTrackingLiveData$$ExternalSyntheticLambda1; -Landroidx/room/RoomTrackingLiveData$observer$1; -Landroidx/room/RoomTrackingLiveData; -Landroidx/room/SQLiteCopyOpenHelper; -Landroidx/room/SharedSQLiteStatement$stmt$2; -Landroidx/room/SharedSQLiteStatement; -Landroidx/room/TransactionElement$Key; -Landroidx/room/TransactionElement; -Landroidx/room/TransactionExecutor$$ExternalSyntheticLambda0; -Landroidx/room/TransactionExecutor; -Landroidx/room/migration/Migration; -Landroidx/room/util/CursorUtil; -Landroidx/room/util/DBUtil; -Landroidx/room/util/StringUtil; -Landroidx/savedstate/R$id; -Landroidx/savedstate/Recreator; -Landroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0; -Landroidx/savedstate/SavedStateRegistry$SavedStateProvider; -Landroidx/savedstate/SavedStateRegistry; -Landroidx/savedstate/SavedStateRegistryController; -Landroidx/savedstate/SavedStateRegistryOwner; -Landroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$1; -Landroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$2; -Landroidx/savedstate/ViewTreeSavedStateRegistryOwner; -Landroidx/sqlite/db/SimpleSQLiteQuery; -Landroidx/sqlite/db/SupportSQLiteDatabase; -Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback; -Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration; -Landroidx/sqlite/db/SupportSQLiteOpenHelper$Factory; -Landroidx/sqlite/db/SupportSQLiteOpenHelper; -Landroidx/sqlite/db/SupportSQLiteProgram; -Landroidx/sqlite/db/SupportSQLiteQuery; -Landroidx/sqlite/db/SupportSQLiteStatement; -Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase$$ExternalSyntheticLambda1; -Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase$query$cursorFactory$1; -Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase; -Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder; -Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper$$ExternalSyntheticLambda0; -Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper$CallbackException; -Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper$Companion; -Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper; -Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$lazyDelegate$1; -Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper; -Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelperFactory; -Landroidx/sqlite/db/framework/FrameworkSQLiteProgram; -Landroidx/sqlite/db/framework/FrameworkSQLiteStatement; -Landroidx/sqlite/util/ProcessLock; -Landroidx/startup/AppInitializer; -Landroidx/startup/InitializationProvider; -Landroidx/startup/Initializer; -Landroidx/startup/StartupLogger; -Landroidx/tracing/Trace; -Landroidx/tracing/TraceApi29Impl$$ExternalSyntheticApiModelOutline0; -Landroidx/tracing/TraceApi29Impl$$ExternalSyntheticApiModelOutline1; -Landroidx/tracing/TraceApi29Impl$$ExternalSyntheticApiModelOutline2; -Landroidx/tracing/TraceApi29Impl; -Landroidx/tracing/perfetto/Tracing; -Landroidx/window/core/Bounds; -Landroidx/window/layout/ActivityCompatHelperApi30; -Landroidx/window/layout/WindowMetrics; -Landroidx/window/layout/WindowMetricsCalculator$Companion; -Landroidx/window/layout/WindowMetricsCalculator; -Landroidx/window/layout/WindowMetricsCalculatorCompat; -Landroidx/work/Configuration$1; -Landroidx/work/Configuration$Builder; -Landroidx/work/Configuration; -Landroidx/work/Constraints$Builder; -Landroidx/work/Constraints; -Landroidx/work/ContentUriTriggers; -Landroidx/work/CoroutineWorker$1; -Landroidx/work/CoroutineWorker$startWork$1; -Landroidx/work/CoroutineWorker; -Landroidx/work/Data$Builder; -Landroidx/work/Data; -Landroidx/work/ForegroundUpdater; -Landroidx/work/InputMerger; -Landroidx/work/InputMergerFactory$1; -Landroidx/work/InputMergerFactory; -Landroidx/work/ListenableWorker$Result$Failure; -Landroidx/work/ListenableWorker$Result$Success; -Landroidx/work/ListenableWorker$Result; -Landroidx/work/ListenableWorker; -Landroidx/work/Logger$LogcatLogger; -Landroidx/work/Logger; -Landroidx/work/NetworkType; -Landroidx/work/OneTimeWorkRequest$Builder; -Landroidx/work/OneTimeWorkRequest; -Landroidx/work/Operation$State$FAILURE; -Landroidx/work/Operation$State$IN_PROGRESS; -Landroidx/work/Operation$State$SUCCESS; -Landroidx/work/Operation$State; -Landroidx/work/Operation; -Landroidx/work/OverwritingInputMerger; -Landroidx/work/WorkInfo$State; -Landroidx/work/WorkInfo; -Landroidx/work/WorkManager; -Landroidx/work/WorkManagerInitializer; -Landroidx/work/WorkRequest$Builder; -Landroidx/work/WorkRequest; -Landroidx/work/WorkerFactory$1; -Landroidx/work/WorkerFactory; -Landroidx/work/WorkerParameters$RuntimeExtras; -Landroidx/work/WorkerParameters; -Landroidx/work/impl/DefaultRunnableScheduler; -Landroidx/work/impl/ExecutionListener; -Landroidx/work/impl/OperationImpl; -Landroidx/work/impl/Processor$FutureListener; -Landroidx/work/impl/Processor; -Landroidx/work/impl/Scheduler; -Landroidx/work/impl/Schedulers; -Landroidx/work/impl/WorkContinuationImpl; -Landroidx/work/impl/WorkDatabase$1; -Landroidx/work/impl/WorkDatabase$2; -Landroidx/work/impl/WorkDatabase; -Landroidx/work/impl/WorkDatabaseMigrations$1; -Landroidx/work/impl/WorkDatabaseMigrations$2; -Landroidx/work/impl/WorkDatabaseMigrations$3; -Landroidx/work/impl/WorkDatabaseMigrations$4; -Landroidx/work/impl/WorkDatabaseMigrations$5; -Landroidx/work/impl/WorkDatabaseMigrations$6; -Landroidx/work/impl/WorkDatabaseMigrations$7; -Landroidx/work/impl/WorkDatabaseMigrations$RescheduleMigration; -Landroidx/work/impl/WorkDatabaseMigrations$WorkMigration9To10; -Landroidx/work/impl/WorkDatabaseMigrations; -Landroidx/work/impl/WorkDatabasePathHelper; -Landroidx/work/impl/WorkDatabase_Impl$1; -Landroidx/work/impl/WorkDatabase_Impl; -Landroidx/work/impl/WorkManagerImpl; -Landroidx/work/impl/WorkerWrapper$1; -Landroidx/work/impl/WorkerWrapper$2; -Landroidx/work/impl/WorkerWrapper$Builder; -Landroidx/work/impl/WorkerWrapper; -Landroidx/work/impl/background/greedy/DelayedWorkTracker; -Landroidx/work/impl/background/greedy/GreedyScheduler; -Landroidx/work/impl/background/systemalarm/RescheduleReceiver; -Landroidx/work/impl/background/systemjob/SystemJobInfoConverter$$ExternalSyntheticApiModelOutline1; -Landroidx/work/impl/background/systemjob/SystemJobInfoConverter$$ExternalSyntheticApiModelOutline2; -Landroidx/work/impl/background/systemjob/SystemJobInfoConverter$$ExternalSyntheticApiModelOutline3; -Landroidx/work/impl/background/systemjob/SystemJobInfoConverter; -Landroidx/work/impl/background/systemjob/SystemJobScheduler; -Landroidx/work/impl/background/systemjob/SystemJobService$$ExternalSyntheticApiModelOutline0; -Landroidx/work/impl/background/systemjob/SystemJobService; -Landroidx/work/impl/constraints/ConstraintListener; -Landroidx/work/impl/constraints/NetworkState; -Landroidx/work/impl/constraints/WorkConstraintsCallback; -Landroidx/work/impl/constraints/WorkConstraintsTracker; -Landroidx/work/impl/constraints/controllers/BatteryChargingController; -Landroidx/work/impl/constraints/controllers/BatteryNotLowController; -Landroidx/work/impl/constraints/controllers/ConstraintController$OnConstraintUpdatedCallback; -Landroidx/work/impl/constraints/controllers/ConstraintController; -Landroidx/work/impl/constraints/controllers/NetworkConnectedController; -Landroidx/work/impl/constraints/controllers/NetworkMeteredController; -Landroidx/work/impl/constraints/controllers/NetworkNotRoamingController; -Landroidx/work/impl/constraints/controllers/NetworkUnmeteredController; -Landroidx/work/impl/constraints/controllers/StorageNotLowController; -Landroidx/work/impl/constraints/trackers/BatteryChargingTracker; -Landroidx/work/impl/constraints/trackers/BatteryNotLowTracker; -Landroidx/work/impl/constraints/trackers/BroadcastReceiverConstraintTracker$1; -Landroidx/work/impl/constraints/trackers/BroadcastReceiverConstraintTracker; -Landroidx/work/impl/constraints/trackers/ConstraintTracker; -Landroidx/work/impl/constraints/trackers/NetworkStateTracker$NetworkStateCallback; -Landroidx/work/impl/constraints/trackers/NetworkStateTracker; -Landroidx/work/impl/constraints/trackers/StorageNotLowTracker; -Landroidx/work/impl/constraints/trackers/Trackers; -Landroidx/work/impl/foreground/ForegroundProcessor; -Landroidx/work/impl/model/DependencyDao; -Landroidx/work/impl/model/DependencyDao_Impl$1; -Landroidx/work/impl/model/DependencyDao_Impl; -Landroidx/work/impl/model/Preference; -Landroidx/work/impl/model/PreferenceDao; -Landroidx/work/impl/model/PreferenceDao_Impl$1; -Landroidx/work/impl/model/PreferenceDao_Impl; -Landroidx/work/impl/model/SystemIdInfo; -Landroidx/work/impl/model/SystemIdInfoDao; -Landroidx/work/impl/model/SystemIdInfoDao_Impl$1; -Landroidx/work/impl/model/SystemIdInfoDao_Impl$2; -Landroidx/work/impl/model/SystemIdInfoDao_Impl; -Landroidx/work/impl/model/WorkName; -Landroidx/work/impl/model/WorkNameDao; -Landroidx/work/impl/model/WorkNameDao_Impl$1; -Landroidx/work/impl/model/WorkNameDao_Impl; -Landroidx/work/impl/model/WorkProgressDao; -Landroidx/work/impl/model/WorkProgressDao_Impl$1; -Landroidx/work/impl/model/WorkProgressDao_Impl$2; -Landroidx/work/impl/model/WorkProgressDao_Impl$3; -Landroidx/work/impl/model/WorkProgressDao_Impl; -Landroidx/work/impl/model/WorkSpec$1; -Landroidx/work/impl/model/WorkSpec$WorkInfoPojo; -Landroidx/work/impl/model/WorkSpec; -Landroidx/work/impl/model/WorkSpecDao; -Landroidx/work/impl/model/WorkSpecDao_Impl$13; -Landroidx/work/impl/model/WorkSpecDao_Impl$1; -Landroidx/work/impl/model/WorkSpecDao_Impl$2; -Landroidx/work/impl/model/WorkSpecDao_Impl$3; -Landroidx/work/impl/model/WorkSpecDao_Impl$4; -Landroidx/work/impl/model/WorkSpecDao_Impl$5; -Landroidx/work/impl/model/WorkSpecDao_Impl$6; -Landroidx/work/impl/model/WorkSpecDao_Impl$7; -Landroidx/work/impl/model/WorkSpecDao_Impl$8; -Landroidx/work/impl/model/WorkSpecDao_Impl$9; -Landroidx/work/impl/model/WorkSpecDao_Impl; -Landroidx/work/impl/model/WorkTag; -Landroidx/work/impl/model/WorkTagDao; -Landroidx/work/impl/model/WorkTagDao_Impl$1; -Landroidx/work/impl/model/WorkTagDao_Impl; -Landroidx/work/impl/model/WorkTypeConverters; -Landroidx/work/impl/utils/EnqueueRunnable; -Landroidx/work/impl/utils/ForceStopRunnable$BroadcastReceiver; -Landroidx/work/impl/utils/ForceStopRunnable; -Landroidx/work/impl/utils/IdGenerator; -Landroidx/work/impl/utils/LiveDataUtils$1$1; -Landroidx/work/impl/utils/LiveDataUtils$1; -Landroidx/work/impl/utils/PackageManagerHelper; -Landroidx/work/impl/utils/PreferenceUtils; -Landroidx/work/impl/utils/ProcessUtils$$ExternalSyntheticApiModelOutline0; -Landroidx/work/impl/utils/ProcessUtils; -Landroidx/work/impl/utils/SerialExecutor$Task; -Landroidx/work/impl/utils/SerialExecutor; -Landroidx/work/impl/utils/StartWorkRunnable; -Landroidx/work/impl/utils/StopWorkRunnable; -Landroidx/work/impl/utils/WorkForegroundRunnable; -Landroidx/work/impl/utils/WorkForegroundUpdater; -Landroidx/work/impl/utils/WorkProgressUpdater; -Landroidx/work/impl/utils/futures/AbstractFuture$AtomicHelper; -Landroidx/work/impl/utils/futures/AbstractFuture$Cancellation; -Landroidx/work/impl/utils/futures/AbstractFuture$Failure; -Landroidx/work/impl/utils/futures/AbstractFuture$Listener; -Landroidx/work/impl/utils/futures/AbstractFuture$SafeAtomicHelper; -Landroidx/work/impl/utils/futures/AbstractFuture$SetFuture; -Landroidx/work/impl/utils/futures/AbstractFuture$Waiter; -Landroidx/work/impl/utils/futures/AbstractFuture; -Landroidx/work/impl/utils/futures/DirectExecutor; -Landroidx/work/impl/utils/futures/SettableFuture; -Landroidx/work/impl/utils/taskexecutor/TaskExecutor; -Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor$1; -Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor; -Lcoil/Coil; -Lcoil/ComponentRegistry$Builder; -Lcoil/ComponentRegistry; -Lcoil/EventListener$Companion$NONE$1; -Lcoil/EventListener$Factory$$ExternalSyntheticLambda0; -Lcoil/EventListener$Factory; -Lcoil/EventListener; -Lcoil/ImageLoader$Builder$build$1; -Lcoil/ImageLoader$Builder$build$2; -Lcoil/ImageLoader$Builder$build$3; -Lcoil/ImageLoader$Builder; -Lcoil/ImageLoader; -Lcoil/ImageLoaderFactory; -Lcoil/RealImageLoader$execute$2$job$1; -Lcoil/RealImageLoader$execute$2; -Lcoil/RealImageLoader$executeMain$1; -Lcoil/RealImageLoader$executeMain$result$1; -Lcoil/RealImageLoader$special$$inlined$CoroutineExceptionHandler$1; -Lcoil/RealImageLoader; -Lcoil/base/R$id; -Lcoil/compose/AsyncImageKt$AsyncImage$2; -Lcoil/compose/AsyncImageKt$Content$$inlined$Layout$1; -Lcoil/compose/AsyncImageKt$Content$1$measure$1; -Lcoil/compose/AsyncImageKt$Content$1; -Lcoil/compose/AsyncImageKt; -Lcoil/compose/AsyncImagePainter$Companion$DefaultTransform$1; -Lcoil/compose/AsyncImagePainter$State$Empty; -Lcoil/compose/AsyncImagePainter$State$Error; -Lcoil/compose/AsyncImagePainter$State$Loading; -Lcoil/compose/AsyncImagePainter$State$Success; -Lcoil/compose/AsyncImagePainter$State; -Lcoil/compose/AsyncImagePainter$onRemembered$1$1; -Lcoil/compose/AsyncImagePainter$onRemembered$1$2; -Lcoil/compose/AsyncImagePainter$onRemembered$1$3; -Lcoil/compose/AsyncImagePainter$onRemembered$1; -Lcoil/compose/AsyncImagePainter$updateRequest$$inlined$target$default$1; -Lcoil/compose/AsyncImagePainter; -Lcoil/compose/ConstraintsSizeResolver$measure$1; -Lcoil/compose/ConstraintsSizeResolver$size$$inlined$mapNotNull$1$2$1; -Lcoil/compose/ConstraintsSizeResolver$size$$inlined$mapNotNull$1$2; -Lcoil/compose/ConstraintsSizeResolver$size$$inlined$mapNotNull$1; -Lcoil/compose/ConstraintsSizeResolver; -Lcoil/compose/ContentPainterModifier$measure$1; -Lcoil/compose/ContentPainterModifier; -Lcoil/compose/ImageLoaderProvidableCompositionLocal$1; -Lcoil/compose/ImageLoaderProvidableCompositionLocal; -Lcoil/compose/LocalImageLoaderKt; -Lcoil/compose/SingletonAsyncImageKt; -Lcoil/compose/UtilsKt$transformOf$1; -Lcoil/compose/UtilsKt; -Lcoil/decode/BitmapFactoryDecoder$Factory; -Lcoil/decode/Decoder$Factory; -Lcoil/decode/SvgDecoder$Factory; -Lcoil/disk/DiskCache$Builder; -Lcoil/disk/DiskCache; -Lcoil/disk/DiskLruCache$Entry; -Lcoil/disk/DiskLruCache$fileSystem$1; -Lcoil/disk/DiskLruCache$newJournalWriter$faultHidingSink$1; -Lcoil/disk/DiskLruCache; -Lcoil/disk/FaultHidingSink; -Lcoil/disk/RealDiskCache; -Lcoil/fetch/AssetUriFetcher$Factory; -Lcoil/fetch/BitmapFetcher$Factory; -Lcoil/fetch/ByteBufferFetcher$Factory; -Lcoil/fetch/ContentUriFetcher$Factory; -Lcoil/fetch/DrawableFetcher$Factory; -Lcoil/fetch/Fetcher$Factory; -Lcoil/fetch/Fetcher; -Lcoil/fetch/FileFetcher$Factory; -Lcoil/fetch/HttpUriFetcher$Factory; -Lcoil/fetch/HttpUriFetcher$executeNetworkRequest$1; -Lcoil/fetch/HttpUriFetcher$fetch$1; -Lcoil/fetch/HttpUriFetcher; -Lcoil/fetch/ResourceUriFetcher$Factory; -Lcoil/intercept/EngineInterceptor$execute$1; -Lcoil/intercept/EngineInterceptor$fetch$1; -Lcoil/intercept/EngineInterceptor$intercept$1; -Lcoil/intercept/EngineInterceptor$intercept$2; -Lcoil/intercept/EngineInterceptor; -Lcoil/intercept/Interceptor$Chain; -Lcoil/intercept/Interceptor; -Lcoil/intercept/RealInterceptorChain$proceed$1; -Lcoil/intercept/RealInterceptorChain; -Lcoil/key/FileKeyer; -Lcoil/key/Keyer; -Lcoil/key/UriKeyer; -Lcoil/map/ByteArrayMapper; -Lcoil/map/FileUriMapper; -Lcoil/map/HttpUrlMapper; -Lcoil/map/Mapper; -Lcoil/map/ResourceIntMapper; -Lcoil/map/ResourceUriMapper; -Lcoil/map/StringMapper; -Lcoil/memory/MemoryCache$Key$Companion$CREATOR$1; -Lcoil/memory/MemoryCache$Key; -Lcoil/memory/MemoryCache; -Lcoil/memory/MemoryCacheService; -Lcoil/memory/RealMemoryCache; -Lcoil/memory/RealStrongMemoryCache$InternalValue; -Lcoil/memory/RealStrongMemoryCache$cache$1; -Lcoil/memory/RealStrongMemoryCache; -Lcoil/memory/RealWeakMemoryCache; -Lcoil/memory/StrongMemoryCache; -Lcoil/memory/WeakMemoryCache; -Lcoil/network/CacheStrategy$Factory; -Lcoil/network/CacheStrategy; -Lcoil/network/EmptyNetworkObserver; -Lcoil/network/NetworkObserver$Listener; -Lcoil/network/NetworkObserver; -Lcoil/network/RealNetworkObserver$networkCallback$1; -Lcoil/network/RealNetworkObserver; -Lcoil/request/BaseRequestDelegate; -Lcoil/request/CachePolicy$EnumUnboxingLocalUtility; -Lcoil/request/DefaultRequestOptions; -Lcoil/request/DefinedRequestOptions; -Lcoil/request/ImageRequest$Builder; -Lcoil/request/ImageRequest$Listener; -Lcoil/request/ImageRequest; -Lcoil/request/NullRequestData; -Lcoil/request/Options; -Lcoil/request/Parameters$Builder; -Lcoil/request/Parameters; -Lcoil/request/RequestDelegate; -Lcoil/request/RequestService; -Lcoil/request/Tags; -Lcoil/size/Dimension$Pixels; -Lcoil/size/Dimension$Undefined; -Lcoil/size/Dimension; -Lcoil/size/DisplaySizeResolver; -Lcoil/size/Size; -Lcoil/size/SizeResolver; -Lcoil/size/ViewSizeResolver; -Lcoil/target/Target; -Lcoil/target/ViewTarget; -Lcoil/transition/NoneTransition$Factory; -Lcoil/transition/Transition$Factory; -Lcoil/util/-Bitmaps; -Lcoil/util/-Collections; -Lcoil/util/-HardwareBitmaps; -Lcoil/util/-Requests; -Lcoil/util/-Utils; -Lcoil/util/ContinuationCallback; -Lcoil/util/HardwareBitmapService; -Lcoil/util/ImageLoaderOptions; -Lcoil/util/ImmutableHardwareBitmapService; -Lcoil/util/SingletonDiskCache; -Lcoil/util/SystemCallbacks; -Lcom/google/accompanist/systemuicontroller/AndroidSystemUiController; -Lcom/google/accompanist/systemuicontroller/SystemUiController; -Lcom/google/accompanist/systemuicontroller/SystemUiControllerKt; -Lcom/google/common/util/concurrent/ListenableFuture; -Lcom/google/protobuf/AbstractMessageLite$Builder; -Lcom/google/protobuf/AbstractMessageLite; -Lcom/google/protobuf/AbstractProtobufList; -Lcom/google/protobuf/Android; -Lcom/google/protobuf/ByteOutput; -Lcom/google/protobuf/ByteString$ByteArrayCopier; -Lcom/google/protobuf/ByteString$LeafByteString; -Lcom/google/protobuf/ByteString$LiteralByteString; -Lcom/google/protobuf/ByteString$SystemByteArrayCopier; -Lcom/google/protobuf/ByteString; -Lcom/google/protobuf/CodedInputStream$ArrayDecoder; -Lcom/google/protobuf/CodedInputStream; -Lcom/google/protobuf/CodedOutputStream$AbstractBufferedEncoder; -Lcom/google/protobuf/CodedOutputStream$OutputStreamEncoder; -Lcom/google/protobuf/CodedOutputStream; -Lcom/google/protobuf/CodedOutputStreamWriter; -Lcom/google/protobuf/FieldType; -Lcom/google/protobuf/GeneratedMessageInfoFactory; -Lcom/google/protobuf/GeneratedMessageLite$Builder; -Lcom/google/protobuf/GeneratedMessageLite$MethodToInvoke; -Lcom/google/protobuf/GeneratedMessageLite; -Lcom/google/protobuf/IntArrayList; -Lcom/google/protobuf/Internal$EnumLite; -Lcom/google/protobuf/Internal$IntList; -Lcom/google/protobuf/Internal$ProtobufList; -Lcom/google/protobuf/Internal; -Lcom/google/protobuf/InvalidProtocolBufferException$InvalidWireTypeException; -Lcom/google/protobuf/InvalidProtocolBufferException; -Lcom/google/protobuf/JavaType; -Lcom/google/protobuf/LazyStringList; -Lcom/google/protobuf/ListFieldSchema$ListFieldSchemaFull; -Lcom/google/protobuf/ListFieldSchema$ListFieldSchemaLite; -Lcom/google/protobuf/ListFieldSchema; -Lcom/google/protobuf/ManifestSchemaFactory$1; -Lcom/google/protobuf/ManifestSchemaFactory$CompositeMessageInfoFactory; -Lcom/google/protobuf/ManifestSchemaFactory; -Lcom/google/protobuf/MapEntryLite$Metadata; -Lcom/google/protobuf/MapEntryLite; -Lcom/google/protobuf/MapFieldLite; -Lcom/google/protobuf/MapFieldSchema; -Lcom/google/protobuf/MapFieldSchemaLite; -Lcom/google/protobuf/MapFieldSchemas; -Lcom/google/protobuf/MessageInfo; -Lcom/google/protobuf/MessageInfoFactory; -Lcom/google/protobuf/MessageLite$Builder; -Lcom/google/protobuf/MessageLite; -Lcom/google/protobuf/MessageLiteOrBuilder; -Lcom/google/protobuf/MessageSchema; -Lcom/google/protobuf/NewInstanceSchema; -Lcom/google/protobuf/NewInstanceSchemaLite; -Lcom/google/protobuf/NewInstanceSchemas; -Lcom/google/protobuf/PrimitiveNonBoxingCollection; -Lcom/google/protobuf/Protobuf; -Lcom/google/protobuf/ProtobufArrayList; -Lcom/google/protobuf/RawMessageInfo; -Lcom/google/protobuf/Schema; -Lcom/google/protobuf/SchemaUtil; -Lcom/google/protobuf/UninitializedMessageException; -Lcom/google/protobuf/UnknownFieldSchema; -Lcom/google/protobuf/UnknownFieldSetLite; -Lcom/google/protobuf/UnknownFieldSetLiteSchema; -Lcom/google/protobuf/UnsafeUtil$1; -Lcom/google/protobuf/UnsafeUtil$Android64MemoryAccessor; -Lcom/google/protobuf/UnsafeUtil$MemoryAccessor; -Lcom/google/protobuf/UnsafeUtil; -Lcom/google/protobuf/Utf8$UnpairedSurrogateException; -Lcom/google/protobuf/WireFormat$FieldType$1; -Lcom/google/protobuf/WireFormat$FieldType$2; -Lcom/google/protobuf/WireFormat$FieldType$3; -Lcom/google/protobuf/WireFormat$FieldType$4; -Lcom/google/protobuf/WireFormat$FieldType; -Lcom/google/protobuf/WireFormat$JavaType; -Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ActivityCBuilder; -Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ActivityCImpl$SwitchingProvider; -Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ActivityCImpl; -Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ActivityRetainedCBuilder; -Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ActivityRetainedCImpl$SwitchingProvider; -Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ActivityRetainedCImpl; -Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$SingletonCImpl$SwitchingProvider$1; -Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$SingletonCImpl$SwitchingProvider; -Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$SingletonCImpl; -Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ViewModelCBuilder; -Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ViewModelCImpl$SwitchingProvider; -Lcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ViewModelCImpl; -Lcom/google/samples/apps/nowinandroid/Hilt_MainActivity$1; -Lcom/google/samples/apps/nowinandroid/Hilt_MainActivity; -Lcom/google/samples/apps/nowinandroid/Hilt_NiaApplication$1; -Lcom/google/samples/apps/nowinandroid/Hilt_NiaApplication; -Lcom/google/samples/apps/nowinandroid/MainActivity$onCreate$1$1$1; -Lcom/google/samples/apps/nowinandroid/MainActivity$onCreate$1$1; -Lcom/google/samples/apps/nowinandroid/MainActivity$onCreate$1; -Lcom/google/samples/apps/nowinandroid/MainActivity$onCreate$2; -Lcom/google/samples/apps/nowinandroid/MainActivity$onCreate$3$1$1$invoke$$inlined$onDispose$1; -Lcom/google/samples/apps/nowinandroid/MainActivity$onCreate$3$1$1; -Lcom/google/samples/apps/nowinandroid/MainActivity$onCreate$3$2; -Lcom/google/samples/apps/nowinandroid/MainActivity$onCreate$3; -Lcom/google/samples/apps/nowinandroid/MainActivity$special$$inlined$viewModels$default$1; -Lcom/google/samples/apps/nowinandroid/MainActivity$special$$inlined$viewModels$default$2; -Lcom/google/samples/apps/nowinandroid/MainActivity$special$$inlined$viewModels$default$3; -Lcom/google/samples/apps/nowinandroid/MainActivity; -Lcom/google/samples/apps/nowinandroid/MainActivityUiState$Loading; -Lcom/google/samples/apps/nowinandroid/MainActivityUiState$Success; -Lcom/google/samples/apps/nowinandroid/MainActivityUiState; -Lcom/google/samples/apps/nowinandroid/MainActivityViewModel$special$$inlined$map$1$2$1; -Lcom/google/samples/apps/nowinandroid/MainActivityViewModel$special$$inlined$map$1$2; -Lcom/google/samples/apps/nowinandroid/MainActivityViewModel$special$$inlined$map$1; -Lcom/google/samples/apps/nowinandroid/MainActivityViewModel; -Lcom/google/samples/apps/nowinandroid/MainActivity_GeneratedInjector; -Lcom/google/samples/apps/nowinandroid/NiaApplication; -Lcom/google/samples/apps/nowinandroid/NiaApplication_GeneratedInjector; -Lcom/google/samples/apps/nowinandroid/NiaApplication_HiltComponents$ActivityC; -Lcom/google/samples/apps/nowinandroid/NiaApplication_HiltComponents$ActivityRetainedC; -Lcom/google/samples/apps/nowinandroid/NiaApplication_HiltComponents$SingletonC; -Lcom/google/samples/apps/nowinandroid/NiaApplication_HiltComponents$ViewModelC; -Lcom/google/samples/apps/nowinandroid/core/data/SyncUtilitiesKt$changeListSync$1; -Lcom/google/samples/apps/nowinandroid/core/data/SyncUtilitiesKt$changeListSync$2$4; -Lcom/google/samples/apps/nowinandroid/core/data/SyncUtilitiesKt$changeListSync$2; -Lcom/google/samples/apps/nowinandroid/core/data/SyncUtilitiesKt$suspendRunCatching$1; -Lcom/google/samples/apps/nowinandroid/core/data/SyncUtilitiesKt; -Lcom/google/samples/apps/nowinandroid/core/data/Synchronizer; -Lcom/google/samples/apps/nowinandroid/core/data/repository/NewsRepository; -Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$syncWith$2; -Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$syncWith$3; -Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$syncWith$4; -Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$syncWith$5; -Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$syncWith$6; -Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository; -Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository$getTopics$$inlined$map$1$2$1; -Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository$getTopics$$inlined$map$1$2; -Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository$getTopics$$inlined$map$1; -Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository$syncWith$2; -Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository$syncWith$3; -Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository$syncWith$4; -Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository$syncWith$5; -Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository$syncWith$6; -Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository; -Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository; -Lcom/google/samples/apps/nowinandroid/core/data/repository/TopicsRepository; -Lcom/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor$isOnline$1$1; -Lcom/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor$isOnline$1$callback$1; -Lcom/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor$isOnline$1; -Lcom/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor; -Lcom/google/samples/apps/nowinandroid/core/data/util/NetworkMonitor; -Lcom/google/samples/apps/nowinandroid/core/database/DatabaseMigrations$Schema11to12; -Lcom/google/samples/apps/nowinandroid/core/database/DatabaseMigrations$Schema2to3; -Lcom/google/samples/apps/nowinandroid/core/database/NiaDatabase; -Lcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_AutoMigration_10_11_Impl; -Lcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_AutoMigration_11_12_Impl; -Lcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_AutoMigration_1_2_Impl; -Lcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_AutoMigration_2_3_Impl; -Lcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_AutoMigration_3_4_Impl; -Lcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_AutoMigration_4_5_Impl; -Lcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_AutoMigration_5_6_Impl; -Lcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_AutoMigration_6_7_Impl; -Lcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_AutoMigration_7_8_Impl; -Lcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_AutoMigration_8_9_Impl; -Lcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_AutoMigration_9_10_Impl; -Lcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_Impl$1; -Lcom/google/samples/apps/nowinandroid/core/database/NiaDatabase_Impl; -Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao; -Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$12; -Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$1; -Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$2; -Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$3; -Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$4; -Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$5; -Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$7; -Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$9; -Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl; -Lcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao; -Lcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl$11; -Lcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl$1; -Lcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl$2; -Lcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl$3; -Lcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl$4; -Lcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl$5; -Lcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl$7; -Lcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl$9; -Lcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl; -Lcom/google/samples/apps/nowinandroid/core/database/model/NewsResourceEntity; -Lcom/google/samples/apps/nowinandroid/core/database/model/NewsResourceTopicCrossRef; -Lcom/google/samples/apps/nowinandroid/core/database/model/TopicEntity; -Lcom/google/samples/apps/nowinandroid/core/database/util/InstantConverter; -Lcom/google/samples/apps/nowinandroid/core/database/util/NewsResourceTypeConverter; -Lcom/google/samples/apps/nowinandroid/core/datastore/ChangeListVersions; -Lcom/google/samples/apps/nowinandroid/core/datastore/DarkThemeConfigProto; -Lcom/google/samples/apps/nowinandroid/core/datastore/IntToStringIdsMigration; -Lcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$WhenMappings; -Lcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$getChangeListVersions$$inlined$map$1$2$1; -Lcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$getChangeListVersions$$inlined$map$1$2; -Lcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$getChangeListVersions$$inlined$map$1; -Lcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$getChangeListVersions$1; -Lcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$special$$inlined$map$1$2$1; -Lcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$special$$inlined$map$1$2; -Lcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$special$$inlined$map$1; -Lcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$updateChangeListVersion$1; -Lcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$updateChangeListVersion$2; -Lcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource; -Lcom/google/samples/apps/nowinandroid/core/datastore/ThemeBrandProto; -Lcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences$BookmarkedNewsResourceIdsDefaultEntryHolder; -Lcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences$Builder; -Lcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences$FollowedAuthorIdsDefaultEntryHolder; -Lcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences$FollowedTopicIdsDefaultEntryHolder; -Lcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences; -Lcom/google/samples/apps/nowinandroid/core/datastore/UserPreferencesSerializer; -Lcom/google/samples/apps/nowinandroid/core/datastore/di/DataStoreModule$providesUserPreferencesDataStore$1; -Lcom/google/samples/apps/nowinandroid/core/designsystem/component/BackgroundKt$NiaBackground$1$1; -Lcom/google/samples/apps/nowinandroid/core/designsystem/component/BackgroundKt$NiaBackground$1; -Lcom/google/samples/apps/nowinandroid/core/designsystem/component/BackgroundKt$NiaBackground$2; -Lcom/google/samples/apps/nowinandroid/core/designsystem/component/BackgroundKt$NiaGradientBackground$1$1$1$1; -Lcom/google/samples/apps/nowinandroid/core/designsystem/component/BackgroundKt$NiaGradientBackground$1$1$1; -Lcom/google/samples/apps/nowinandroid/core/designsystem/component/BackgroundKt$NiaGradientBackground$1; -Lcom/google/samples/apps/nowinandroid/core/designsystem/component/BackgroundKt; -Lcom/google/samples/apps/nowinandroid/core/designsystem/component/ButtonKt$NiaFilledButton$1$1; -Lcom/google/samples/apps/nowinandroid/core/designsystem/component/ButtonKt$NiaFilledButton$1; -Lcom/google/samples/apps/nowinandroid/core/designsystem/component/ButtonKt$NiaFilledButton$2; -Lcom/google/samples/apps/nowinandroid/core/designsystem/component/ButtonKt; -Lcom/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheelKt$NiaLoadingWheel$1$1$1; -Lcom/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheelKt$NiaLoadingWheel$1; -Lcom/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheelKt$NiaLoadingWheel$2$1; -Lcom/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheelKt$NiaLoadingWheel$3$1; -Lcom/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheelKt$NiaLoadingWheel$4; -Lcom/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheelKt$NiaLoadingWheel$5; -Lcom/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheelKt$NiaLoadingWheel$colorAnimValues$1$1$1; -Lcom/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheelKt$NiaOverlayLoadingWheel$1; -Lcom/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheelKt$NiaOverlayLoadingWheel$2; -Lcom/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheelKt; -Lcom/google/samples/apps/nowinandroid/core/designsystem/component/NavigationKt$NiaNavigationBar$1; -Lcom/google/samples/apps/nowinandroid/core/designsystem/component/NavigationKt$NiaNavigationBarItem$1; -Lcom/google/samples/apps/nowinandroid/core/designsystem/component/NavigationKt; -Lcom/google/samples/apps/nowinandroid/core/designsystem/component/NiaButtonDefaults; -Lcom/google/samples/apps/nowinandroid/core/designsystem/component/NiaNavigationDefaults; -Lcom/google/samples/apps/nowinandroid/core/designsystem/component/NiaToggleButtonDefaults; -Lcom/google/samples/apps/nowinandroid/core/designsystem/component/ToggleButtonKt$NiaToggleButton$1$1; -Lcom/google/samples/apps/nowinandroid/core/designsystem/component/ToggleButtonKt$NiaToggleButton$2$1; -Lcom/google/samples/apps/nowinandroid/core/designsystem/component/ToggleButtonKt$NiaToggleButton$3$1; -Lcom/google/samples/apps/nowinandroid/core/designsystem/component/ToggleButtonKt$NiaToggleButton$4$1$1; -Lcom/google/samples/apps/nowinandroid/core/designsystem/component/ToggleButtonKt$NiaToggleButton$4; -Lcom/google/samples/apps/nowinandroid/core/designsystem/component/ToggleButtonKt$NiaToggleButton$5; -Lcom/google/samples/apps/nowinandroid/core/designsystem/component/ToggleButtonKt; -Lcom/google/samples/apps/nowinandroid/core/designsystem/component/TopAppBarKt$NiaTopAppBar$8; -Lcom/google/samples/apps/nowinandroid/core/designsystem/component/TopAppBarKt$NiaTopAppBar$9$1; -Lcom/google/samples/apps/nowinandroid/core/designsystem/component/TopAppBarKt$NiaTopAppBar$9; -Lcom/google/samples/apps/nowinandroid/core/designsystem/component/TopAppBarKt; -Lcom/google/samples/apps/nowinandroid/core/designsystem/icon/Icon$DrawableResourceIcon; -Lcom/google/samples/apps/nowinandroid/core/designsystem/icon/Icon$ImageVectorIcon; -Lcom/google/samples/apps/nowinandroid/core/designsystem/icon/Icon; -Lcom/google/samples/apps/nowinandroid/core/designsystem/icon/NiaIcons; -Lcom/google/samples/apps/nowinandroid/core/designsystem/theme/BackgroundKt$LocalBackgroundTheme$1; -Lcom/google/samples/apps/nowinandroid/core/designsystem/theme/BackgroundKt; -Lcom/google/samples/apps/nowinandroid/core/designsystem/theme/BackgroundTheme; -Lcom/google/samples/apps/nowinandroid/core/designsystem/theme/ColorKt; -Lcom/google/samples/apps/nowinandroid/core/designsystem/theme/GradientColors; -Lcom/google/samples/apps/nowinandroid/core/designsystem/theme/GradientKt$LocalGradientColors$1; -Lcom/google/samples/apps/nowinandroid/core/designsystem/theme/GradientKt; -Lcom/google/samples/apps/nowinandroid/core/designsystem/theme/ThemeKt$NiaTheme$2; -Lcom/google/samples/apps/nowinandroid/core/designsystem/theme/ThemeKt$NiaTheme$3; -Lcom/google/samples/apps/nowinandroid/core/designsystem/theme/ThemeKt; -Lcom/google/samples/apps/nowinandroid/core/designsystem/theme/TypeKt; -Lcom/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCase$invoke$1$WhenMappings; -Lcom/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCase$invoke$1; -Lcom/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCase; -Lcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCase$special$$inlined$map$1; -Lcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCase; -Lcom/google/samples/apps/nowinandroid/core/domain/model/FollowableTopic; -Lcom/google/samples/apps/nowinandroid/core/model/data/DarkThemeConfig; -Lcom/google/samples/apps/nowinandroid/core/model/data/NewsResourceType; -Lcom/google/samples/apps/nowinandroid/core/model/data/NewsResourceTypeKt; -Lcom/google/samples/apps/nowinandroid/core/model/data/ThemeBrand; -Lcom/google/samples/apps/nowinandroid/core/model/data/Topic; -Lcom/google/samples/apps/nowinandroid/core/model/data/UserData; -Lcom/google/samples/apps/nowinandroid/core/network/NiaNetworkDataSource; -Lcom/google/samples/apps/nowinandroid/core/network/di/NetworkModule$providesFakeAssetManager$1; -Lcom/google/samples/apps/nowinandroid/core/network/fake/FakeAssetManager; -Lcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getNewsResourceChangeList$1; -Lcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getNewsResourceChangeList$2; -Lcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getNewsResources$2; -Lcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getTopicChangeList$1; -Lcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getTopicChangeList$2; -Lcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource$getTopics$2; -Lcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource; -Lcom/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSourceKt; -Lcom/google/samples/apps/nowinandroid/core/network/model/NetworkChangeList$Companion; -Lcom/google/samples/apps/nowinandroid/core/network/model/NetworkChangeList; -Lcom/google/samples/apps/nowinandroid/core/network/model/NetworkNewsResource$$serializer; -Lcom/google/samples/apps/nowinandroid/core/network/model/NetworkNewsResource$Companion; -Lcom/google/samples/apps/nowinandroid/core/network/model/NetworkNewsResource; -Lcom/google/samples/apps/nowinandroid/core/network/model/NetworkTopic$$serializer; -Lcom/google/samples/apps/nowinandroid/core/network/model/NetworkTopic$Companion; -Lcom/google/samples/apps/nowinandroid/core/network/model/NetworkTopic; -Lcom/google/samples/apps/nowinandroid/core/network/model/util/InstantSerializer; -Lcom/google/samples/apps/nowinandroid/core/network/model/util/NewsResourceTypeSerializer; -Lcom/google/samples/apps/nowinandroid/core/ui/JankStatsExtensionsKt$TrackDisposableJank$1; -Lcom/google/samples/apps/nowinandroid/core/ui/JankStatsExtensionsKt$TrackJank$1; -Lcom/google/samples/apps/nowinandroid/core/ui/JankStatsExtensionsKt$TrackScrollJank$1$1; -Lcom/google/samples/apps/nowinandroid/core/ui/JankStatsExtensionsKt$TrackScrollJank$1$2; -Lcom/google/samples/apps/nowinandroid/core/ui/JankStatsExtensionsKt$TrackScrollJank$1; -Lcom/google/samples/apps/nowinandroid/core/ui/JankStatsExtensionsKt; -Lcom/google/samples/apps/nowinandroid/core/ui/NewsFeedKt$newsFeed$$inlined$items$default$2; -Lcom/google/samples/apps/nowinandroid/core/ui/NewsFeedKt$newsFeed$$inlined$items$default$4; -Lcom/google/samples/apps/nowinandroid/core/ui/NewsFeedKt$newsFeed$$inlined$items$default$5; -Lcom/google/samples/apps/nowinandroid/core/ui/NewsFeedKt; -Lcom/google/samples/apps/nowinandroid/core/ui/NewsFeedUiState$Loading; -Lcom/google/samples/apps/nowinandroid/core/ui/NewsFeedUiState$Success; -Lcom/google/samples/apps/nowinandroid/core/ui/NewsFeedUiState; -Lcom/google/samples/apps/nowinandroid/di/JankStatsModule$providesOnFrameListener$1; -Lcom/google/samples/apps/nowinandroid/feature/bookmarks/navigation/ComposableSingletons$BookmarksNavigationKt$lambda-1$1; -Lcom/google/samples/apps/nowinandroid/feature/bookmarks/navigation/ComposableSingletons$BookmarksNavigationKt; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-1$1; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-10$1; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-11$1; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-12$1; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-13$1; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-2$1; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-3$1; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-4$1; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-5$1; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-6$1; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-7$1; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-8$1; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt$lambda-9$1; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ComposableSingletons$ForYouScreenKt; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouRoute$1; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouRoute$2; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouRoute$3; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouRoute$4; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$1$invokeSuspend$$inlined$doOnPreDraw$1; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$1; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$2$1$1; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$2$1; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$2$2; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$2; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$3; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouScreen$4; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$SingleTopicButton$1$1$1; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$SingleTopicButton$1$2$1$1$1; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$SingleTopicButton$1$2$1$2; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$SingleTopicButton$1$2$1$3; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$SingleTopicButton$1$2; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$SingleTopicButton$2; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$TopicIcon$1; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$TopicSelection$1$2$invoke$$inlined$items$default$4; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$TopicSelection$1$2$invoke$$inlined$items$default$5; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$TopicSelection$1$2; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$onboarding$1; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$onboarding$2; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$onboardingUiState$1; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$special$$inlined$flatMapLatest$1; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$special$$inlined$map$1$2$1; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$special$$inlined$map$1$2; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$special$$inlined$map$1; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$special$$inlined$map$2$2$1; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$special$$inlined$map$2$2; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$special$$inlined$map$2; -Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel; -Lcom/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState$LoadFailed; -Lcom/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState$Loading; -Lcom/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState$NotShown; -Lcom/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState$Shown; -Lcom/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState; -Lcom/google/samples/apps/nowinandroid/feature/foryou/navigation/ComposableSingletons$ForYouNavigationKt$lambda-1$1; -Lcom/google/samples/apps/nowinandroid/feature/foryou/navigation/ComposableSingletons$ForYouNavigationKt; -Lcom/google/samples/apps/nowinandroid/feature/interests/navigation/InterestsNavigationKt$interestsGraph$1$1; -Lcom/google/samples/apps/nowinandroid/feature/topic/navigation/TopicNavigationKt$topicScreen$2; -Lcom/google/samples/apps/nowinandroid/navigation/NiaNavHostKt$NiaNavHost$1$1; -Lcom/google/samples/apps/nowinandroid/navigation/NiaNavHostKt$NiaNavHost$1$2; -Lcom/google/samples/apps/nowinandroid/navigation/NiaNavHostKt$NiaNavHost$1; -Lcom/google/samples/apps/nowinandroid/navigation/NiaNavHostKt; -Lcom/google/samples/apps/nowinandroid/navigation/TopLevelDestination; -Lcom/google/samples/apps/nowinandroid/sync/initializers/Sync; -Lcom/google/samples/apps/nowinandroid/sync/initializers/SyncInitializer; -Lcom/google/samples/apps/nowinandroid/sync/status/WorkManagerSyncStatusMonitor$$ExternalSyntheticLambda0; -Lcom/google/samples/apps/nowinandroid/sync/status/WorkManagerSyncStatusMonitor$isSyncing$1; -Lcom/google/samples/apps/nowinandroid/sync/status/WorkManagerSyncStatusMonitor; -Lcom/google/samples/apps/nowinandroid/sync/status/WorkManagerSyncStatusMonitorKt; -Lcom/google/samples/apps/nowinandroid/sync/workers/DelegatingWorker; -Lcom/google/samples/apps/nowinandroid/sync/workers/HiltWorkerFactoryEntryPoint; -Lcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker$doWork$1; -Lcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker$doWork$2$1$syncedSuccessfully$1; -Lcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker$doWork$2$1$syncedSuccessfully$2; -Lcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker$doWork$2; -Lcom/google/samples/apps/nowinandroid/sync/workers/SyncWorker; -Lcom/google/samples/apps/nowinandroid/ui/ComposableSingletons$NiaAppKt$lambda-1$1; -Lcom/google/samples/apps/nowinandroid/ui/ComposableSingletons$NiaAppKt$lambda-2$1; -Lcom/google/samples/apps/nowinandroid/ui/ComposableSingletons$NiaAppKt; -Lcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaApp$1$1; -Lcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaApp$1$2$1$1; -Lcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaApp$1$2; -Lcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaApp$1$3$1; -Lcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaApp$1$3; -Lcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaApp$1$4; -Lcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaApp$1$5$1$1; -Lcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaApp$1$5$3$2$1; -Lcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaApp$1$5; -Lcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaApp$1; -Lcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaApp$2; -Lcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaBottomBar$1$1$1$1; -Lcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaBottomBar$1$1$2; -Lcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaBottomBar$1$1$3; -Lcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaBottomBar$1; -Lcom/google/samples/apps/nowinandroid/ui/NiaAppKt$WhenMappings; -Lcom/google/samples/apps/nowinandroid/ui/NiaAppKt; -Lcom/google/samples/apps/nowinandroid/ui/NiaAppState$special$$inlined$map$1$2$1; -Lcom/google/samples/apps/nowinandroid/ui/NiaAppState$special$$inlined$map$1$2; -Lcom/google/samples/apps/nowinandroid/ui/NiaAppState$special$$inlined$map$1; -Lcom/google/samples/apps/nowinandroid/ui/NiaAppState; -Lcom/google/samples/apps/nowinandroid/ui/NiaAppStateKt$NavigationTrackingSideEffect$1$invoke$$inlined$onDispose$1; -Lcom/google/samples/apps/nowinandroid/ui/NiaAppStateKt$NavigationTrackingSideEffect$1$listener$1; -Lcom/google/samples/apps/nowinandroid/ui/NiaAppStateKt$NavigationTrackingSideEffect$1; -Lcom/google/samples/apps/nowinandroid/ui/NiaAppStateKt; -Ldagger/Lazy; -Ldagger/hilt/EntryPoints; -Ldagger/hilt/android/ActivityRetainedLifecycle; -Ldagger/hilt/android/EntryPointAccessors; -Ldagger/hilt/android/components/ActivityRetainedComponent; -Ldagger/hilt/android/internal/builders/ViewModelComponentBuilder; -Ldagger/hilt/android/internal/lifecycle/DefaultViewModelFactories$ActivityEntryPoint; -Ldagger/hilt/android/internal/lifecycle/DefaultViewModelFactories$InternalFactoryFactory; -Ldagger/hilt/android/internal/lifecycle/HiltViewModelFactory$1$$ExternalSyntheticLambda0; -Ldagger/hilt/android/internal/lifecycle/HiltViewModelFactory$1; -Ldagger/hilt/android/internal/lifecycle/HiltViewModelFactory$ActivityCreatorEntryPoint; -Ldagger/hilt/android/internal/lifecycle/HiltViewModelFactory$ViewModelFactoriesEntryPoint; -Ldagger/hilt/android/internal/lifecycle/HiltViewModelFactory; -Ldagger/hilt/android/internal/lifecycle/HiltWrapper_HiltViewModelFactory_ActivityCreatorEntryPoint; -Ldagger/hilt/android/internal/lifecycle/RetainedLifecycleImpl; -Ldagger/hilt/android/internal/managers/ActivityComponentManager$ActivityComponentBuilderEntryPoint; -Ldagger/hilt/android/internal/managers/ActivityComponentManager; -Ldagger/hilt/android/internal/managers/ActivityRetainedComponentManager$1; -Ldagger/hilt/android/internal/managers/ActivityRetainedComponentManager$ActivityRetainedComponentBuilderEntryPoint; -Ldagger/hilt/android/internal/managers/ActivityRetainedComponentManager$ActivityRetainedComponentViewModel; -Ldagger/hilt/android/internal/managers/ActivityRetainedComponentManager$ActivityRetainedLifecycleEntryPoint; -Ldagger/hilt/android/internal/managers/ActivityRetainedComponentManager; -Ldagger/hilt/android/internal/managers/ApplicationComponentManager; -Ldagger/hilt/android/internal/managers/ComponentSupplier; -Ldagger/hilt/android/internal/modules/ApplicationContextModule; -Ldagger/hilt/internal/GeneratedComponent; -Ldagger/hilt/internal/GeneratedComponentManager; -Ldagger/internal/DoubleCheck; -Ldagger/internal/MapBuilder; -Ldagger/internal/Preconditions; -Ldagger/internal/SingleCheck; -Lj$/lang/a; -Lj$/sun/misc/a; -Lj$/sun/misc/b; -Lj$/time/DateTimeException; -Lj$/time/Instant; -Lj$/time/LocalDateTime; -Lj$/time/OffsetDateTime; -Lj$/time/ZoneId; -Lj$/time/ZoneOffset; -Lj$/time/ZonedDateTime; -Lj$/time/c; -Lj$/time/chrono/ChronoLocalDateTime; -Lj$/time/chrono/ChronoZonedDateTime; -Lj$/time/chrono/a; -Lj$/time/chrono/b; -Lj$/time/chrono/k; -Lj$/time/chrono/r; -Lj$/time/d; -Lj$/time/e; -Lj$/time/format/A; -Lj$/time/format/B; -Lj$/time/format/C; -Lj$/time/format/D; -Lj$/time/format/DateTimeFormatter; -Lj$/time/format/DateTimeParseException; -Lj$/time/format/E; -Lj$/time/format/G; -Lj$/time/format/a; -Lj$/time/format/b; -Lj$/time/format/c; -Lj$/time/format/e; -Lj$/time/format/f; -Lj$/time/format/g; -Lj$/time/format/h; -Lj$/time/format/i; -Lj$/time/format/j; -Lj$/time/format/k; -Lj$/time/format/l; -Lj$/time/format/r; -Lj$/time/format/s; -Lj$/time/format/u; -Lj$/time/format/w; -Lj$/time/format/x; -Lj$/time/h; -Lj$/time/i; -Lj$/time/l; -Lj$/time/n; -Lj$/time/s; -Lj$/time/temporal/TemporalAccessor; -Lj$/time/temporal/a; -Lj$/time/temporal/b; -Lj$/time/temporal/d; -Lj$/time/temporal/e; -Lj$/time/temporal/f; -Lj$/time/temporal/g; -Lj$/time/temporal/h; -Lj$/time/temporal/i; -Lj$/time/temporal/j; -Lj$/time/temporal/k; -Lj$/time/temporal/l; -Lj$/time/temporal/m; -Lj$/time/temporal/n; -Lj$/time/temporal/o; -Lj$/time/temporal/q; -Lj$/time/temporal/r; -Lj$/time/temporal/s; -Lj$/time/temporal/t; -Lj$/time/temporal/u; -Lj$/time/temporal/w; -Lj$/time/v; -Lj$/time/zone/e; -Lj$/util/DesugarTimeZone; -Lj$/util/concurrent/ConcurrentHashMap; -Lj$/util/concurrent/c; -Lj$/util/concurrent/l; -Lj$/util/concurrent/m; -Lj$/util/concurrent/o; -Ljavax/inject/Provider; -Lkotlin/Function; -Lkotlin/Lazy; -Lkotlin/LazyKt__LazyJVMKt; -Lkotlin/Pair; -Lkotlin/Result$Failure; -Lkotlin/Result; -Lkotlin/ResultKt; -Lkotlin/SafePublicationLazyImpl; -Lkotlin/SynchronizedLazyImpl; -Lkotlin/TuplesKt; -Lkotlin/UByte; -Lkotlin/UByteArray; -Lkotlin/UInt; -Lkotlin/UIntArray; -Lkotlin/ULong; -Lkotlin/ULongArray; -Lkotlin/UNINITIALIZED_VALUE; -Lkotlin/UShort; -Lkotlin/UShortArray; -Lkotlin/Unit; -Lkotlin/UnsafeLazyImpl; -Lkotlin/UnsignedKt; -Lkotlin/collections/AbstractCollection; -Lkotlin/collections/AbstractList; -Lkotlin/collections/AbstractMap; -Lkotlin/collections/AbstractMutableList; -Lkotlin/collections/AbstractMutableSet; -Lkotlin/collections/AbstractSet; -Lkotlin/collections/ArrayAsCollection; -Lkotlin/collections/ArrayDeque; -Lkotlin/collections/ArraysKt__ArraysKt; -Lkotlin/collections/ArraysKt___ArraysJvmKt; -Lkotlin/collections/ArraysKt___ArraysKt; -Lkotlin/collections/CollectionsKt__CollectionsKt; -Lkotlin/collections/CollectionsKt__IteratorsJVMKt; -Lkotlin/collections/CollectionsKt__MutableCollectionsJVMKt; -Lkotlin/collections/CollectionsKt__ReversedViewsKt; -Lkotlin/collections/CollectionsKt___CollectionsKt$asSequence$$inlined$Sequence$1; -Lkotlin/collections/CollectionsKt___CollectionsKt; -Lkotlin/collections/EmptyIterator; -Lkotlin/collections/EmptyList; -Lkotlin/collections/EmptyMap; -Lkotlin/collections/EmptySet; -Lkotlin/collections/IndexedValue; -Lkotlin/collections/IntIterator; -Lkotlin/collections/MapsKt__MapsJVMKt; -Lkotlin/collections/MapsKt___MapsJvmKt; -Lkotlin/collections/SetsKt; -Lkotlin/collections/builders/ListBuilder; -Lkotlin/collections/builders/ListBuilderKt; -Lkotlin/collections/builders/MapBuilder$Companion; -Lkotlin/collections/builders/MapBuilder$Itr; -Lkotlin/collections/builders/MapBuilder$KeysItr; -Lkotlin/collections/builders/MapBuilder; -Lkotlin/collections/builders/SetBuilder; -Lkotlin/comparisons/NaturalOrderComparator; -Lkotlin/coroutines/AbstractCoroutineContextElement; -Lkotlin/coroutines/AbstractCoroutineContextKey; -Lkotlin/coroutines/CombinedContext; -Lkotlin/coroutines/Continuation; -Lkotlin/coroutines/ContinuationInterceptor$Key; -Lkotlin/coroutines/ContinuationInterceptor; -Lkotlin/coroutines/CoroutineContext$DefaultImpls; -Lkotlin/coroutines/CoroutineContext$Element$DefaultImpls; -Lkotlin/coroutines/CoroutineContext$Element; -Lkotlin/coroutines/CoroutineContext$Key; -Lkotlin/coroutines/CoroutineContext$plus$1; -Lkotlin/coroutines/CoroutineContext; -Lkotlin/coroutines/EmptyCoroutineContext; -Lkotlin/coroutines/SafeContinuation; -Lkotlin/coroutines/intrinsics/CoroutineSingletons; -Lkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsKt; -Lkotlin/coroutines/jvm/internal/BaseContinuationImpl; -Lkotlin/coroutines/jvm/internal/CompletedContinuation; -Lkotlin/coroutines/jvm/internal/ContinuationImpl; -Lkotlin/coroutines/jvm/internal/CoroutineStackFrame; -Lkotlin/coroutines/jvm/internal/RestrictedContinuationImpl; -Lkotlin/coroutines/jvm/internal/RestrictedSuspendLambda; -Lkotlin/coroutines/jvm/internal/SuspendLambda; -Lkotlin/internal/PlatformImplementations; -Lkotlin/internal/PlatformImplementationsKt; -Lkotlin/internal/ProgressionUtilKt; -Lkotlin/internal/jdk7/JDK7PlatformImplementations; -Lkotlin/internal/jdk8/JDK8PlatformImplementations$ReflectSdkVersion; -Lkotlin/internal/jdk8/JDK8PlatformImplementations; -Lkotlin/io/CloseableKt; -Lkotlin/io/FilesKt__FileReadWriteKt; -Lkotlin/io/FilesKt__UtilsKt; -Lkotlin/jvm/JvmClassMappingKt; -Lkotlin/jvm/functions/Function0; -Lkotlin/jvm/functions/Function10; -Lkotlin/jvm/functions/Function11; -Lkotlin/jvm/functions/Function12; -Lkotlin/jvm/functions/Function13; -Lkotlin/jvm/functions/Function14; -Lkotlin/jvm/functions/Function15; -Lkotlin/jvm/functions/Function16; -Lkotlin/jvm/functions/Function17; -Lkotlin/jvm/functions/Function18; -Lkotlin/jvm/functions/Function19; -Lkotlin/jvm/functions/Function1; -Lkotlin/jvm/functions/Function20; -Lkotlin/jvm/functions/Function21; -Lkotlin/jvm/functions/Function22; -Lkotlin/jvm/functions/Function2; -Lkotlin/jvm/functions/Function3; -Lkotlin/jvm/functions/Function4; -Lkotlin/jvm/functions/Function5; -Lkotlin/jvm/functions/Function6; -Lkotlin/jvm/functions/Function7; -Lkotlin/jvm/functions/Function8; -Lkotlin/jvm/functions/Function9; -Lkotlin/jvm/internal/ArrayIterator; -Lkotlin/jvm/internal/ArrayIteratorKt; -Lkotlin/jvm/internal/CallableReference$NoReceiver; -Lkotlin/jvm/internal/CallableReference; -Lkotlin/jvm/internal/ClassBasedDeclarationContainer; -Lkotlin/jvm/internal/ClassReference; -Lkotlin/jvm/internal/CollectionToArray; -Lkotlin/jvm/internal/FunctionAdapter; -Lkotlin/jvm/internal/FunctionBase; -Lkotlin/jvm/internal/FunctionReference; -Lkotlin/jvm/internal/FunctionReferenceImpl; -Lkotlin/jvm/internal/Intrinsics$$ExternalSyntheticCheckNotZero0; -Lkotlin/jvm/internal/Intrinsics; -Lkotlin/jvm/internal/Lambda; -Lkotlin/jvm/internal/MutablePropertyReference1; -Lkotlin/jvm/internal/MutablePropertyReference1Impl; -Lkotlin/jvm/internal/MutablePropertyReference; -Lkotlin/jvm/internal/PropertyReference1; -Lkotlin/jvm/internal/PropertyReference1Impl; -Lkotlin/jvm/internal/PropertyReference; -Lkotlin/jvm/internal/Ref$BooleanRef; -Lkotlin/jvm/internal/Ref$FloatRef; -Lkotlin/jvm/internal/Ref$IntRef; -Lkotlin/jvm/internal/Ref$ObjectRef; -Lkotlin/jvm/internal/Reflection; -Lkotlin/jvm/internal/ReflectionFactory; -Lkotlin/jvm/internal/SpreadBuilder; -Lkotlin/jvm/internal/TypeIntrinsics; -Lkotlin/jvm/internal/TypeReference; -Lkotlin/jvm/internal/markers/KMappedMarker; -Lkotlin/jvm/internal/markers/KMutableCollection; -Lkotlin/jvm/internal/markers/KMutableMap; -Lkotlin/jvm/internal/markers/KMutableSet; -Lkotlin/math/MathKt; -Lkotlin/math/MathKt__MathJVMKt; -Lkotlin/random/AbstractPlatformRandom; -Lkotlin/random/FallbackThreadLocalRandom$implStorage$1; -Lkotlin/random/FallbackThreadLocalRandom; -Lkotlin/random/Random$Default; -Lkotlin/random/Random; -Lkotlin/ranges/ClosedRange; -Lkotlin/ranges/IntProgression; -Lkotlin/ranges/IntProgressionIterator; -Lkotlin/ranges/IntRange; -Lkotlin/ranges/RangesKt___RangesKt; -Lkotlin/reflect/KCallable; -Lkotlin/reflect/KClass; -Lkotlin/reflect/KClassifier; -Lkotlin/reflect/KFunction; -Lkotlin/reflect/KMutableProperty1; -Lkotlin/reflect/KProperty1; -Lkotlin/reflect/KProperty; -Lkotlin/reflect/KType; -Lkotlin/reflect/KTypeProjection; -Lkotlin/sequences/ConstrainedOnceSequence; -Lkotlin/sequences/FilteringSequence$iterator$1; -Lkotlin/sequences/FilteringSequence; -Lkotlin/sequences/GeneratorSequence$iterator$1; -Lkotlin/sequences/GeneratorSequence; -Lkotlin/sequences/Sequence; -Lkotlin/sequences/SequenceBuilderIterator; -Lkotlin/sequences/SequenceScope; -Lkotlin/sequences/SequencesKt__SequencesJVMKt; -Lkotlin/sequences/SequencesKt__SequencesKt$asSequence$$inlined$Sequence$1; -Lkotlin/sequences/SequencesKt__SequencesKt$generateSequence$2; -Lkotlin/sequences/SequencesKt__SequencesKt; -Lkotlin/sequences/SequencesKt___SequencesJvmKt; -Lkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1; -Lkotlin/sequences/SequencesKt___SequencesKt; -Lkotlin/sequences/TransformingSequence$iterator$1; -Lkotlin/sequences/TransformingSequence; -Lkotlin/text/CharsKt__CharKt; -Lkotlin/text/Charsets; -Lkotlin/text/Regex; -Lkotlin/text/StringsKt__AppendableKt; -Lkotlin/text/StringsKt__IndentKt; -Lkotlin/text/StringsKt__RegexExtensionsKt; -Lkotlin/text/StringsKt__StringBuilderKt; -Lkotlin/text/StringsKt__StringNumberConversionsKt; -Lkotlin/text/StringsKt__StringsJVMKt; -Lkotlin/text/StringsKt__StringsKt; -Lkotlin/time/Duration; -Lkotlin/time/DurationJvmKt; -Lkotlin/time/DurationKt; -Lkotlin/time/DurationUnitKt__DurationUnitKt; -Lkotlinx/coroutines/AbstractCoroutine; -Lkotlinx/coroutines/Active; -Lkotlinx/coroutines/AwaitAll$AwaitAllNode; -Lkotlinx/coroutines/AwaitAll$DisposeHandlersOnCancel; -Lkotlinx/coroutines/AwaitAll; -Lkotlinx/coroutines/AwaitKt; -Lkotlinx/coroutines/BeforeResumeCancelHandler; -Lkotlinx/coroutines/BlockingCoroutine; -Lkotlinx/coroutines/BlockingEventLoop; -Lkotlinx/coroutines/BuildersKt; -Lkotlinx/coroutines/CancelHandler; -Lkotlinx/coroutines/CancelHandlerBase; -Lkotlinx/coroutines/CancellableContinuation; -Lkotlinx/coroutines/CancellableContinuationImpl; -Lkotlinx/coroutines/CancellableContinuationImplKt; -Lkotlinx/coroutines/CancellableContinuationKt; -Lkotlinx/coroutines/CancelledContinuation; -Lkotlinx/coroutines/ChildContinuation; -Lkotlinx/coroutines/ChildHandle; -Lkotlinx/coroutines/ChildHandleNode; -Lkotlinx/coroutines/ChildJob; -Lkotlinx/coroutines/CompletableDeferred; -Lkotlinx/coroutines/CompletableDeferredImpl; -Lkotlinx/coroutines/CompletedContinuation; -Lkotlinx/coroutines/CompletedExceptionally; -Lkotlinx/coroutines/CompletionHandlerBase; -Lkotlinx/coroutines/CompletionStateKt; -Lkotlinx/coroutines/CopyableThreadContextElement; -Lkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1; -Lkotlinx/coroutines/CoroutineContextKt; -Lkotlinx/coroutines/CoroutineDispatcher$Key$1; -Lkotlinx/coroutines/CoroutineDispatcher$Key; -Lkotlinx/coroutines/CoroutineDispatcher; -Lkotlinx/coroutines/CoroutineExceptionHandler$Key; -Lkotlinx/coroutines/CoroutineExceptionHandler; -Lkotlinx/coroutines/CoroutineScope; -Lkotlinx/coroutines/CoroutineScopeKt; -Lkotlinx/coroutines/DefaultExecutor; -Lkotlinx/coroutines/DefaultExecutorKt; -Lkotlinx/coroutines/Deferred; -Lkotlinx/coroutines/DeferredCoroutine; -Lkotlinx/coroutines/Delay; -Lkotlinx/coroutines/DelayKt; -Lkotlinx/coroutines/DispatchedCoroutine; -Lkotlinx/coroutines/DispatchedTask; -Lkotlinx/coroutines/DispatchedTaskKt; -Lkotlinx/coroutines/DispatcherExecutor; -Lkotlinx/coroutines/Dispatchers; -Lkotlinx/coroutines/DisposableHandle; -Lkotlinx/coroutines/DisposeOnCancel; -Lkotlinx/coroutines/Empty; -Lkotlinx/coroutines/EventLoop; -Lkotlinx/coroutines/EventLoopImplBase$DelayedResumeTask; -Lkotlinx/coroutines/EventLoopImplBase$DelayedTask; -Lkotlinx/coroutines/EventLoopImplBase$DelayedTaskQueue; -Lkotlinx/coroutines/EventLoopImplBase; -Lkotlinx/coroutines/EventLoopImplPlatform; -Lkotlinx/coroutines/EventLoop_commonKt; -Lkotlinx/coroutines/ExecutorCoroutineDispatcher; -Lkotlinx/coroutines/ExecutorCoroutineDispatcherImpl; -Lkotlinx/coroutines/GlobalScope; -Lkotlinx/coroutines/InactiveNodeList; -Lkotlinx/coroutines/Incomplete; -Lkotlinx/coroutines/IncompleteStateBox; -Lkotlinx/coroutines/InvokeOnCancel; -Lkotlinx/coroutines/InvokeOnCancelling; -Lkotlinx/coroutines/InvokeOnCompletion; -Lkotlinx/coroutines/Job$DefaultImpls; -Lkotlinx/coroutines/Job$Key; -Lkotlinx/coroutines/Job; -Lkotlinx/coroutines/JobCancellationException; -Lkotlinx/coroutines/JobCancellingNode; -Lkotlinx/coroutines/JobImpl; -Lkotlinx/coroutines/JobKt; -Lkotlinx/coroutines/JobKt__FutureKt; -Lkotlinx/coroutines/JobNode; -Lkotlinx/coroutines/JobSupport$AwaitContinuation; -Lkotlinx/coroutines/JobSupport$ChildCompletion; -Lkotlinx/coroutines/JobSupport$Finishing; -Lkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1; -Lkotlinx/coroutines/JobSupport; -Lkotlinx/coroutines/JobSupportKt; -Lkotlinx/coroutines/MainCoroutineDispatcher; -Lkotlinx/coroutines/NodeList; -Lkotlinx/coroutines/NonDisposableHandle; -Lkotlinx/coroutines/NotCompleted; -Lkotlinx/coroutines/ParentJob; -Lkotlinx/coroutines/ResumeAwaitOnCompletion; -Lkotlinx/coroutines/ResumeOnCompletion; -Lkotlinx/coroutines/StandaloneCoroutine; -Lkotlinx/coroutines/SupervisorJobImpl; -Lkotlinx/coroutines/SupervisorKt; -Lkotlinx/coroutines/ThreadContextElement; -Lkotlinx/coroutines/ThreadLocalEventLoop; -Lkotlinx/coroutines/TimeoutCancellationException; -Lkotlinx/coroutines/Unconfined; -Lkotlinx/coroutines/UndispatchedCoroutine; -Lkotlinx/coroutines/UndispatchedMarker; -Lkotlinx/coroutines/YieldContext$Key; -Lkotlinx/coroutines/YieldContext; -Lkotlinx/coroutines/android/AndroidDispatcherFactory; -Lkotlinx/coroutines/android/HandlerContext$scheduleResumeAfterDelay$$inlined$Runnable$1; -Lkotlinx/coroutines/android/HandlerContext$scheduleResumeAfterDelay$1; -Lkotlinx/coroutines/android/HandlerContext; -Lkotlinx/coroutines/android/HandlerDispatcher; -Lkotlinx/coroutines/android/HandlerDispatcherKt; -Lkotlinx/coroutines/channels/AbstractChannel$Itr; -Lkotlinx/coroutines/channels/AbstractChannel$ReceiveElement; -Lkotlinx/coroutines/channels/AbstractChannel$ReceiveHasNext; -Lkotlinx/coroutines/channels/AbstractChannel$RemoveReceiveOnCancel; -Lkotlinx/coroutines/channels/AbstractChannel$enqueueReceiveInternal$$inlined$addLastIfPrevAndIf$1; -Lkotlinx/coroutines/channels/AbstractChannel$receiveCatching$1; -Lkotlinx/coroutines/channels/AbstractChannel; -Lkotlinx/coroutines/channels/AbstractChannelKt; -Lkotlinx/coroutines/channels/AbstractSendChannel$SendBuffered; -Lkotlinx/coroutines/channels/AbstractSendChannel; -Lkotlinx/coroutines/channels/ArrayChannel; -Lkotlinx/coroutines/channels/BufferOverflow; -Lkotlinx/coroutines/channels/Channel$Factory; -Lkotlinx/coroutines/channels/Channel; -Lkotlinx/coroutines/channels/ChannelCoroutine; -Lkotlinx/coroutines/channels/ChannelIterator; -Lkotlinx/coroutines/channels/ChannelKt; -Lkotlinx/coroutines/channels/ChannelResult$Closed; -Lkotlinx/coroutines/channels/ChannelResult$Failed; -Lkotlinx/coroutines/channels/ChannelResult; -Lkotlinx/coroutines/channels/Closed; -Lkotlinx/coroutines/channels/ConflatedChannel; -Lkotlinx/coroutines/channels/LinkedListChannel; -Lkotlinx/coroutines/channels/ProduceKt$awaitClose$1; -Lkotlinx/coroutines/channels/ProduceKt$awaitClose$4$1; -Lkotlinx/coroutines/channels/ProduceKt; -Lkotlinx/coroutines/channels/ProducerCoroutine; -Lkotlinx/coroutines/channels/ProducerScope; -Lkotlinx/coroutines/channels/Receive; -Lkotlinx/coroutines/channels/ReceiveChannel; -Lkotlinx/coroutines/channels/ReceiveOrClosed; -Lkotlinx/coroutines/channels/RendezvousChannel; -Lkotlinx/coroutines/channels/Send; -Lkotlinx/coroutines/channels/SendChannel; -Lkotlinx/coroutines/flow/AbstractFlow$collect$1; -Lkotlinx/coroutines/flow/AbstractFlow; -Lkotlinx/coroutines/flow/CallbackFlowBuilder$collectTo$1; -Lkotlinx/coroutines/flow/CallbackFlowBuilder; -Lkotlinx/coroutines/flow/ChannelFlowBuilder; -Lkotlinx/coroutines/flow/DistinctFlowImpl$collect$2$emit$1; -Lkotlinx/coroutines/flow/DistinctFlowImpl$collect$2; -Lkotlinx/coroutines/flow/DistinctFlowImpl; -Lkotlinx/coroutines/flow/Flow; -Lkotlinx/coroutines/flow/FlowCollector; -Lkotlinx/coroutines/flow/FlowKt; -Lkotlinx/coroutines/flow/FlowKt__BuildersKt$flowOf$$inlined$unsafeFlow$2; -Lkotlinx/coroutines/flow/FlowKt__ChannelsKt$emitAllImpl$1; -Lkotlinx/coroutines/flow/FlowKt__ChannelsKt; -Lkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1; -Lkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultKeySelector$1; -Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1; -Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1$emit$1; -Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1; -Lkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1; -Lkotlinx/coroutines/flow/FlowKt__MergeKt; -Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$1; -Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2$1; -Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2; -Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$1; -Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$3; -Lkotlinx/coroutines/flow/FlowKt__ReduceKt$firstOrNull$$inlined$collectWhile$1; -Lkotlinx/coroutines/flow/FlowKt__ReduceKt$firstOrNull$1; -Lkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2; -Lkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1; -Lkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2$1; -Lkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2; -Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$unsafeFlow$1; -Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$1$1; -Lkotlinx/coroutines/flow/FlowKt__ZipKt$nullArrayFactory$1; -Lkotlinx/coroutines/flow/MutableSharedFlow; -Lkotlinx/coroutines/flow/MutableStateFlow; -Lkotlinx/coroutines/flow/ReadonlySharedFlow; -Lkotlinx/coroutines/flow/ReadonlyStateFlow; -Lkotlinx/coroutines/flow/SafeFlow; -Lkotlinx/coroutines/flow/SharedFlow; -Lkotlinx/coroutines/flow/SharedFlowImpl$Emitter; -Lkotlinx/coroutines/flow/SharedFlowImpl$collect$1; -Lkotlinx/coroutines/flow/SharedFlowImpl; -Lkotlinx/coroutines/flow/SharedFlowKt; -Lkotlinx/coroutines/flow/SharedFlowSlot; -Lkotlinx/coroutines/flow/SharingCommand; -Lkotlinx/coroutines/flow/SharingConfig; -Lkotlinx/coroutines/flow/SharingStarted$Companion; -Lkotlinx/coroutines/flow/SharingStarted; -Lkotlinx/coroutines/flow/StartedEagerly; -Lkotlinx/coroutines/flow/StartedLazily; -Lkotlinx/coroutines/flow/StartedWhileSubscribed$command$1; -Lkotlinx/coroutines/flow/StartedWhileSubscribed$command$2; -Lkotlinx/coroutines/flow/StartedWhileSubscribed; -Lkotlinx/coroutines/flow/StateFlow; -Lkotlinx/coroutines/flow/StateFlowImpl$collect$1; -Lkotlinx/coroutines/flow/StateFlowImpl; -Lkotlinx/coroutines/flow/StateFlowKt; -Lkotlinx/coroutines/flow/StateFlowSlot; -Lkotlinx/coroutines/flow/SubscribedFlowCollector; -Lkotlinx/coroutines/flow/ThrowingCollector; -Lkotlinx/coroutines/flow/internal/AbortFlowException; -Lkotlinx/coroutines/flow/internal/AbstractSharedFlow; -Lkotlinx/coroutines/flow/internal/AbstractSharedFlowKt; -Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot; -Lkotlinx/coroutines/flow/internal/ChannelFlow$collect$2; -Lkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1; -Lkotlinx/coroutines/flow/internal/ChannelFlow; -Lkotlinx/coroutines/flow/internal/ChannelFlowOperator; -Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2; -Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$emit$1; -Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1; -Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3; -Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest; -Lkotlinx/coroutines/flow/internal/ChildCancelledException; -Lkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1$emit$1; -Lkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1; -Lkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1; -Lkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2; -Lkotlinx/coroutines/flow/internal/DownstreamExceptionContext; -Lkotlinx/coroutines/flow/internal/FlowCoroutine; -Lkotlinx/coroutines/flow/internal/FusibleFlow; -Lkotlinx/coroutines/flow/internal/NoOpContinuation; -Lkotlinx/coroutines/flow/internal/NopCollector; -Lkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1; -Lkotlinx/coroutines/flow/internal/SafeCollector; -Lkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1; -Lkotlinx/coroutines/flow/internal/SafeCollectorKt; -Lkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1; -Lkotlinx/coroutines/flow/internal/SendingCollector; -Lkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow; -Lkotlinx/coroutines/internal/ArrayQueue; -Lkotlinx/coroutines/internal/AtomicKt; -Lkotlinx/coroutines/internal/AtomicOp; -Lkotlinx/coroutines/internal/ConcurrentKt; -Lkotlinx/coroutines/internal/ConcurrentLinkedListNode; -Lkotlinx/coroutines/internal/ContextScope; -Lkotlinx/coroutines/internal/DispatchedContinuation; -Lkotlinx/coroutines/internal/DispatchedContinuationKt; -Lkotlinx/coroutines/internal/LimitedDispatcher; -Lkotlinx/coroutines/internal/LimitedDispatcherKt; -Lkotlinx/coroutines/internal/LockFreeLinkedListHead; -Lkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp; -Lkotlinx/coroutines/internal/LockFreeLinkedListNode; -Lkotlinx/coroutines/internal/LockFreeTaskQueue; -Lkotlinx/coroutines/internal/LockFreeTaskQueueCore$Placeholder; -Lkotlinx/coroutines/internal/LockFreeTaskQueueCore; -Lkotlinx/coroutines/internal/MainDispatcherFactory; -Lkotlinx/coroutines/internal/MainDispatcherLoader$$ExternalSyntheticServiceLoad0; -Lkotlinx/coroutines/internal/MainDispatcherLoader; -Lkotlinx/coroutines/internal/OnUndeliveredElementKt; -Lkotlinx/coroutines/internal/OpDescriptor; -Lkotlinx/coroutines/internal/Removed; -Lkotlinx/coroutines/internal/ResizableAtomicArray; -Lkotlinx/coroutines/internal/ScopeCoroutine; -Lkotlinx/coroutines/internal/Segment; -Lkotlinx/coroutines/internal/Symbol; -Lkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt; -Lkotlinx/coroutines/internal/ThreadContextKt$countAll$1; -Lkotlinx/coroutines/internal/ThreadContextKt; -Lkotlinx/coroutines/internal/ThreadSafeHeap; -Lkotlinx/coroutines/internal/ThreadSafeHeapNode; -Lkotlinx/coroutines/intrinsics/UndispatchedKt; -Lkotlinx/coroutines/scheduling/CoroutineScheduler$Worker; -Lkotlinx/coroutines/scheduling/CoroutineScheduler; -Lkotlinx/coroutines/scheduling/DefaultIoScheduler; -Lkotlinx/coroutines/scheduling/DefaultScheduler; -Lkotlinx/coroutines/scheduling/GlobalQueue; -Lkotlinx/coroutines/scheduling/NanoTimeSource; -Lkotlinx/coroutines/scheduling/SchedulerCoroutineDispatcher; -Lkotlinx/coroutines/scheduling/SchedulerTimeSource; -Lkotlinx/coroutines/scheduling/Task; -Lkotlinx/coroutines/scheduling/TaskContext; -Lkotlinx/coroutines/scheduling/TaskContextImpl; -Lkotlinx/coroutines/scheduling/TaskImpl; -Lkotlinx/coroutines/scheduling/TasksKt; -Lkotlinx/coroutines/scheduling/UnlimitedIoScheduler; -Lkotlinx/coroutines/scheduling/WorkQueue; -Lkotlinx/coroutines/sync/Empty; -Lkotlinx/coroutines/sync/Mutex; -Lkotlinx/coroutines/sync/MutexImpl; -Lkotlinx/coroutines/sync/MutexKt; -Lkotlinx/coroutines/sync/Semaphore; -Lkotlinx/coroutines/sync/SemaphoreImpl$onCancellationRelease$1; -Lkotlinx/coroutines/sync/SemaphoreImpl; -Lkotlinx/coroutines/sync/SemaphoreKt; -Lkotlinx/coroutines/sync/SemaphoreSegment; -Lkotlinx/datetime/DateTimeFormatException; -Lkotlinx/datetime/Instant$Companion; -Lkotlinx/datetime/Instant; -Lkotlinx/serialization/DeserializationStrategy; -Lkotlinx/serialization/KSerializer; -Lkotlinx/serialization/MissingFieldException; -Lkotlinx/serialization/PolymorphicSerializer; -Lkotlinx/serialization/SerializationException; -Lkotlinx/serialization/SerializersCacheKt$PARAMETRIZED_SERIALIZERS_CACHE$1; -Lkotlinx/serialization/SerializersCacheKt$PARAMETRIZED_SERIALIZERS_CACHE_NULLABLE$1; -Lkotlinx/serialization/SerializersCacheKt$SERIALIZERS_CACHE$1; -Lkotlinx/serialization/SerializersCacheKt$SERIALIZERS_CACHE_NULLABLE$1; -Lkotlinx/serialization/SerializersCacheKt; -Lkotlinx/serialization/SerializersKt; -Lkotlinx/serialization/SerializersKt__SerializersKt; -Lkotlinx/serialization/UnknownFieldException; -Lkotlinx/serialization/descriptors/PolymorphicKind; -Lkotlinx/serialization/descriptors/PrimitiveKind$BOOLEAN; -Lkotlinx/serialization/descriptors/PrimitiveKind$BYTE; -Lkotlinx/serialization/descriptors/PrimitiveKind$CHAR; -Lkotlinx/serialization/descriptors/PrimitiveKind$DOUBLE; -Lkotlinx/serialization/descriptors/PrimitiveKind$FLOAT; -Lkotlinx/serialization/descriptors/PrimitiveKind$INT; -Lkotlinx/serialization/descriptors/PrimitiveKind$LONG; -Lkotlinx/serialization/descriptors/PrimitiveKind$SHORT; -Lkotlinx/serialization/descriptors/PrimitiveKind$STRING; -Lkotlinx/serialization/descriptors/PrimitiveKind; -Lkotlinx/serialization/descriptors/SerialDescriptor; -Lkotlinx/serialization/descriptors/SerialDescriptorsKt; -Lkotlinx/serialization/descriptors/SerialKind$ENUM; -Lkotlinx/serialization/descriptors/SerialKind; -Lkotlinx/serialization/descriptors/StructureKind$CLASS; -Lkotlinx/serialization/descriptors/StructureKind$LIST; -Lkotlinx/serialization/descriptors/StructureKind$MAP; -Lkotlinx/serialization/descriptors/StructureKind; -Lkotlinx/serialization/encoding/AbstractDecoder; -Lkotlinx/serialization/encoding/CompositeDecoder; -Lkotlinx/serialization/encoding/Decoder; -Lkotlinx/serialization/internal/AbstractCollectionSerializer; -Lkotlinx/serialization/internal/AbstractPolymorphicSerializer; -Lkotlinx/serialization/internal/ArrayListClassDesc; -Lkotlinx/serialization/internal/ArrayListSerializer; -Lkotlinx/serialization/internal/BooleanArraySerializer; -Lkotlinx/serialization/internal/BooleanSerializer; -Lkotlinx/serialization/internal/ByteArraySerializer; -Lkotlinx/serialization/internal/ByteSerializer; -Lkotlinx/serialization/internal/CacheEntry; -Lkotlinx/serialization/internal/CachedNames; -Lkotlinx/serialization/internal/CachingKt; -Lkotlinx/serialization/internal/CharArraySerializer; -Lkotlinx/serialization/internal/CharSerializer; -Lkotlinx/serialization/internal/CollectionLikeSerializer; -Lkotlinx/serialization/internal/CollectionSerializer; -Lkotlinx/serialization/internal/ConcurrentHashMapCache; -Lkotlinx/serialization/internal/ConcurrentHashMapParametrizedCache; -Lkotlinx/serialization/internal/DoubleArraySerializer; -Lkotlinx/serialization/internal/DoubleSerializer; -Lkotlinx/serialization/internal/DurationSerializer; -Lkotlinx/serialization/internal/ElementMarker; -Lkotlinx/serialization/internal/FloatArraySerializer; -Lkotlinx/serialization/internal/FloatSerializer; -Lkotlinx/serialization/internal/GeneratedSerializer; -Lkotlinx/serialization/internal/InlineClassDescriptor; -Lkotlinx/serialization/internal/InlineClassDescriptorKt$InlinePrimitiveDescriptor$1; -Lkotlinx/serialization/internal/InlineClassDescriptorKt; -Lkotlinx/serialization/internal/IntArraySerializer; -Lkotlinx/serialization/internal/IntSerializer; -Lkotlinx/serialization/internal/ListLikeDescriptor; -Lkotlinx/serialization/internal/LongArraySerializer; -Lkotlinx/serialization/internal/LongSerializer; -Lkotlinx/serialization/internal/ObjectSerializer$descriptor$2; -Lkotlinx/serialization/internal/ObjectSerializer; -Lkotlinx/serialization/internal/ParametrizedCacheEntry; -Lkotlinx/serialization/internal/ParametrizedSerializerCache; -Lkotlinx/serialization/internal/PlatformKt; -Lkotlinx/serialization/internal/Platform_commonKt; -Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$_hashCode$2; -Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$childSerializers$2; -Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$typeParameterDescriptors$2; -Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor; -Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptorKt; -Lkotlinx/serialization/internal/PrimitiveArrayDescriptor; -Lkotlinx/serialization/internal/PrimitiveArraySerializer; -Lkotlinx/serialization/internal/PrimitiveSerialDescriptor; -Lkotlinx/serialization/internal/PrimitivesKt; -Lkotlinx/serialization/internal/SerializerCache; -Lkotlinx/serialization/internal/ShortArraySerializer; -Lkotlinx/serialization/internal/ShortSerializer; -Lkotlinx/serialization/internal/StringSerializer; -Lkotlinx/serialization/internal/UByteArraySerializer; -Lkotlinx/serialization/internal/UByteSerializer; -Lkotlinx/serialization/internal/UIntArraySerializer; -Lkotlinx/serialization/internal/UIntSerializer; -Lkotlinx/serialization/internal/ULongArraySerializer; -Lkotlinx/serialization/internal/ULongSerializer; -Lkotlinx/serialization/internal/UShortArraySerializer; -Lkotlinx/serialization/internal/UShortSerializer; -Lkotlinx/serialization/internal/UnitSerializer; -Lkotlinx/serialization/json/Json$Default; -Lkotlinx/serialization/json/Json; -Lkotlinx/serialization/json/JsonConfiguration; -Lkotlinx/serialization/json/JsonDecoder; -Lkotlinx/serialization/json/JsonImpl; -Lkotlinx/serialization/json/JsonNames; -Lkotlinx/serialization/json/JvmStreamsKt; -Lkotlinx/serialization/json/internal/AbstractJsonLexer; -Lkotlinx/serialization/json/internal/AbstractJsonLexerKt; -Lkotlinx/serialization/json/internal/ArrayAsSequence; -Lkotlinx/serialization/json/internal/CharMappings; -Lkotlinx/serialization/json/internal/DescriptorSchemaCache$Key; -Lkotlinx/serialization/json/internal/DescriptorSchemaCache; -Lkotlinx/serialization/json/internal/JavaStreamSerialReader; -Lkotlinx/serialization/json/internal/JsonElementMarker; -Lkotlinx/serialization/json/internal/JsonExceptionsKt; -Lkotlinx/serialization/json/internal/JsonNamesMapKt; -Lkotlinx/serialization/json/internal/JsonPath$Tombstone; -Lkotlinx/serialization/json/internal/JsonPath; -Lkotlinx/serialization/json/internal/ReaderJsonLexer; -Lkotlinx/serialization/json/internal/SerialReader; -Lkotlinx/serialization/json/internal/StreamingJsonDecoder$DiscriminatorHolder; -Lkotlinx/serialization/json/internal/StreamingJsonDecoder; -Lkotlinx/serialization/json/internal/WriteMode$EnumUnboxingLocalUtility; -Lkotlinx/serialization/json/internal/WriteModeKt; -Lkotlinx/serialization/modules/SerialModuleImpl; -Lkotlinx/serialization/modules/SerializersModuleKt; -Lokhttp3/Address; -Lokhttp3/Authenticator$Companion$AuthenticatorNone; -Lokhttp3/Authenticator; -Lokhttp3/CacheControl$Builder; -Lokhttp3/CacheControl$Companion; -Lokhttp3/CacheControl; -Lokhttp3/Call$Factory; -Lokhttp3/Call; -Lokhttp3/Callback; -Lokhttp3/CertificatePinner; -Lokhttp3/CipherSuite$Companion$ORDER_BY_NAME$1; -Lokhttp3/CipherSuite$Companion; -Lokhttp3/CipherSuite; -Lokhttp3/ConnectionPool; -Lokhttp3/ConnectionSpec$Builder; -Lokhttp3/ConnectionSpec; -Lokhttp3/CookieJar$Companion$NoCookies; -Lokhttp3/CookieJar; -Lokhttp3/Dispatcher; -Lokhttp3/Dns$Companion$DnsSystem; -Lokhttp3/Dns; -Lokhttp3/EventListener$Companion$NONE$1; -Lokhttp3/EventListener$Factory; -Lokhttp3/EventListener; -Lokhttp3/Headers$Builder; -Lokhttp3/Headers$Companion; -Lokhttp3/Headers; -Lokhttp3/HttpUrl$Builder; -Lokhttp3/HttpUrl$Companion; -Lokhttp3/HttpUrl; -Lokhttp3/Interceptor; -Lokhttp3/OkHttpClient; -Lokhttp3/Protocol; -Lokhttp3/Request$Builder; -Lokhttp3/Request; -Lokhttp3/RequestBody$Companion$toRequestBody$2; -Lokhttp3/RequestBody; -Lokhttp3/ResponseBody$Companion$asResponseBody$1; -Lokhttp3/ResponseBody; -Lokhttp3/Route; -Lokhttp3/TlsVersion$Companion; -Lokhttp3/TlsVersion; -Lokhttp3/internal/Util$$ExternalSyntheticLambda0; -Lokhttp3/internal/Util$$ExternalSyntheticLambda1; -Lokhttp3/internal/Util; -Lokhttp3/internal/cache/CacheInterceptor$Companion; -Lokhttp3/internal/cache/CacheInterceptor; -Lokhttp3/internal/cache/CacheStrategy; -Lokhttp3/internal/concurrent/Task; -Lokhttp3/internal/concurrent/TaskQueue; -Lokhttp3/internal/concurrent/TaskRunner$Backend; -Lokhttp3/internal/concurrent/TaskRunner$RealBackend; -Lokhttp3/internal/concurrent/TaskRunner$runnable$1; -Lokhttp3/internal/concurrent/TaskRunner; -Lokhttp3/internal/connection/ConnectInterceptor; -Lokhttp3/internal/connection/ConnectionSpecSelector; -Lokhttp3/internal/connection/ExchangeFinder; -Lokhttp3/internal/connection/RealCall$AsyncCall; -Lokhttp3/internal/connection/RealCall$timeout$1; -Lokhttp3/internal/connection/RealCall; -Lokhttp3/internal/connection/RealConnection$WhenMappings; -Lokhttp3/internal/connection/RealConnection; -Lokhttp3/internal/connection/RealConnectionPool$cleanupTask$1; -Lokhttp3/internal/connection/RealConnectionPool; -Lokhttp3/internal/connection/RouteDatabase; -Lokhttp3/internal/connection/RouteException; -Lokhttp3/internal/connection/RouteSelector$Selection; -Lokhttp3/internal/connection/RouteSelector; -Lokhttp3/internal/http/BridgeInterceptor; -Lokhttp3/internal/http/CallServerInterceptor; -Lokhttp3/internal/http/RealInterceptorChain; -Lokhttp3/internal/http/RetryAndFollowUpInterceptor; -Lokhttp3/internal/http2/Http2; -Lokhttp3/internal/http2/Http2Connection$Listener$Companion$REFUSE_INCOMING_STREAMS$1; -Lokhttp3/internal/http2/Http2Connection$Listener; -Lokhttp3/internal/platform/Android10Platform; -Lokhttp3/internal/platform/Platform$Companion; -Lokhttp3/internal/platform/Platform; -Lokhttp3/internal/platform/android/Android10SocketAdapter; -Lokhttp3/internal/platform/android/AndroidCertificateChainCleaner; -Lokhttp3/internal/platform/android/AndroidLog; -Lokhttp3/internal/platform/android/AndroidLogHandler; -Lokhttp3/internal/platform/android/AndroidSocketAdapter$Companion$factory$1; -Lokhttp3/internal/platform/android/AndroidSocketAdapter; -Lokhttp3/internal/platform/android/BouncyCastleSocketAdapter$Companion$factory$1; -Lokhttp3/internal/platform/android/BouncyCastleSocketAdapter; -Lokhttp3/internal/platform/android/ConscryptSocketAdapter$Companion$factory$1; -Lokhttp3/internal/platform/android/ConscryptSocketAdapter; -Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory; -Lokhttp3/internal/platform/android/DeferredSocketAdapter; -Lokhttp3/internal/platform/android/SocketAdapter; -Lokhttp3/internal/tls/CertificateChainCleaner; -Lokhttp3/internal/tls/OkHostnameVerifier; -Lokio/AsyncTimeout$sink$1; -Lokio/AsyncTimeout$source$1; -Lokio/AsyncTimeout; -Lokio/Buffer; -Lokio/BufferedSink; -Lokio/BufferedSource; -Lokio/ByteString$Companion; -Lokio/ByteString; -Lokio/FileMetadata; -Lokio/FileSystem; -Lokio/ForwardingFileSystem; -Lokio/ForwardingSink; -Lokio/InputStreamSource; -Lokio/JvmSystemFileSystem; -Lokio/NioSystemFileSystem; -Lokio/Okio; -Lokio/Okio__JvmOkioKt; -Lokio/Okio__OkioKt; -Lokio/Options$Companion; -Lokio/OutputStreamSink; -Lokio/Path$Companion; -Lokio/Path; -Lokio/RealBufferedSink; -Lokio/RealBufferedSource; -Lokio/Segment; -Lokio/SegmentPool; -Lokio/Sink; -Lokio/SocketAsyncTimeout; -Lokio/Source; -Lokio/Timeout$Companion$NONE$1; -Lokio/Timeout; -Lokio/_UtilKt; -Lokio/internal/ResourceFileSystem$Companion; -Lokio/internal/ResourceFileSystem$roots$2; -Lokio/internal/ResourceFileSystem; -Lokio/internal/_BufferKt; -Lokio/internal/_ByteStringKt; -Lokio/internal/_PathKt; -PLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda1;->saveState()Landroid/os/Bundle; -PLandroidx/activity/ComponentActivity;->onSaveInstanceState(Landroid/os/Bundle;)V -PLandroidx/activity/OnBackPressedDispatcher$Api33Impl;->registerOnBackInvokedCallback(Ljava/lang/Object;ILjava/lang/Object;)V -PLandroidx/activity/OnBackPressedDispatcher$Api33Impl;->unregisterOnBackInvokedCallback(Ljava/lang/Object;Ljava/lang/Object;)V -PLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;->cancel()V -PLandroidx/activity/OnBackPressedDispatcher$OnBackPressedCancellable;->cancel()V -PLandroidx/appcompat/R$style;->setOf([Ljava/lang/Object;)Ljava/util/Set; -PLandroidx/arch/core/internal/SafeIterableMap$DescendingIterator;->(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;)V -PLandroidx/arch/core/internal/SafeIterableMap$DescendingIterator;->forward(Landroidx/arch/core/internal/SafeIterableMap$Entry;)Landroidx/arch/core/internal/SafeIterableMap$Entry; -PLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->supportRemove(Landroidx/arch/core/internal/SafeIterableMap$Entry;)V -PLandroidx/collection/ArraySet;->clear()V -PLandroidx/collection/ArraySet;->toArray()[Ljava/lang/Object; -PLandroidx/collection/LruCache;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/collection/LruCache;->safeSizeOf(Ljava/lang/Object;Ljava/lang/Object;)I -PLandroidx/collection/LruCache;->trimToSize(I)V -PLandroidx/compose/animation/AndroidFlingSpline$FlingResult;->(FF)V -PLandroidx/compose/animation/AndroidFlingSpline;->()V -PLandroidx/compose/animation/AndroidFlingSpline;->flingPosition(F)Landroidx/compose/animation/AndroidFlingSpline$FlingResult; -PLandroidx/compose/animation/CrossfadeKt$Crossfade$4$1;->(Landroidx/compose/animation/core/Transition;)V -PLandroidx/compose/animation/CrossfadeKt$Crossfade$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/animation/CrossfadeKt$Crossfade$7;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;->getAbsVelocityThreshold()V -PLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;->getDurationNanos(F)J -PLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;->getTargetValue(FF)F -PLandroidx/compose/animation/core/AnimationEndReason$EnumUnboxingSharedUtility;->compareTo(II)I -PLandroidx/compose/animation/core/DecayAnimation;->(Landroidx/compose/animation/core/DecayAnimationSpec;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;)V -PLandroidx/compose/animation/core/DecayAnimation;->getDurationNanos()J -PLandroidx/compose/animation/core/DecayAnimation;->getTargetValue()Ljava/lang/Object; -PLandroidx/compose/animation/core/DecayAnimation;->getTypeConverter()Landroidx/compose/animation/core/TwoWayConverter; -PLandroidx/compose/animation/core/DecayAnimation;->isInfinite()Z -PLandroidx/compose/animation/core/DecayAnimationSpecImpl;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedFloatDecaySpec; -PLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$2$invoke$$inlined$onDispose$1;->dispose()V -PLandroidx/compose/animation/core/SuspendAnimationKt$animate$6$1;->invoke()Ljava/lang/Object; -PLandroidx/compose/animation/core/SuspendAnimationKt$animate$7;->(Landroidx/compose/animation/core/AnimationState;)V -PLandroidx/compose/animation/core/SuspendAnimationKt;->animateDecay$default(Landroidx/compose/animation/core/AnimationState;Landroidx/compose/animation/core/DecayAnimationSpec;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/jvm/internal/ContinuationImpl;)Ljava/lang/Object; -PLandroidx/compose/animation/core/TransitionKt$createChildTransitionInternal$1$1$invoke$$inlined$onDispose$1;->dispose()V -PLandroidx/compose/animation/core/TransitionKt$createDeferredAnimation$1$invoke$$inlined$onDispose$1;->dispose()V -PLandroidx/compose/animation/core/TransitionKt$createTransitionAnimation$1$1$invoke$$inlined$onDispose$1;->dispose()V -PLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1$invoke$$inlined$onDispose$1;->dispose()V -PLandroidx/compose/animation/core/VectorizedFloatDecaySpec;->(Landroidx/compose/animation/core/FloatDecayAnimationSpec;)V -PLandroidx/compose/animation/core/VectorizedFloatDecaySpec;->getAbsVelocityThreshold()F -PLandroidx/compose/animation/core/VectorizedFloatDecaySpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J -PLandroidx/compose/animation/core/VectorizedFloatDecaySpec;->getTargetValue(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; -PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->consumePostFling-sF-c-tU(J)Lkotlin/Unit; -PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->consumePreFling-QWom1Mo(J)Landroidx/compose/ui/unit/Velocity; -PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->drawBottom(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroid/widget/EdgeEffect;Landroid/graphics/Canvas;)Z -PLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->isInProgress()Z -PLandroidx/compose/foundation/Api31Impl$$ExternalSyntheticApiModelOutline0;->m(Landroid/widget/EdgeEffect;FF)F -PLandroidx/compose/foundation/Api31Impl;->onPullDistance(Landroid/widget/EdgeEffect;FF)F -PLandroidx/compose/foundation/ClickableKt$clickable$2;->(ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)V -PLandroidx/compose/foundation/ClickableKt$clickable$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/ClickableKt$clickable$4$delayPressInteraction$1$1;->invoke()Ljava/lang/Object; -PLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/ClickableKt$clickable$4$gesture$1$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2$delayJob$1;->(Landroidx/compose/runtime/State;JLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V -PLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2$delayJob$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -PLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2$delayJob$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->(Landroidx/compose/foundation/gestures/PressGestureScope;JLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V -PLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -PLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/ClickableKt;->clickable-XHw0xAI$default(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/Modifier; -PLandroidx/compose/foundation/Clickable_androidKt$isComposeRootInScrollableContainer$1;->invoke()Ljava/lang/Object; -PLandroidx/compose/foundation/EdgeEffectCompat;->onPullDistanceCompat(Landroid/widget/EdgeEffect;F)V -PLandroidx/compose/foundation/ImageKt$Image$2$measure$1;->()V -PLandroidx/compose/foundation/ImageKt$Image$2$measure$1;->()V -PLandroidx/compose/foundation/ImageKt$Image$2$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/ImageKt$Image$2;->()V -PLandroidx/compose/foundation/ImageKt$Image$2;->()V -PLandroidx/compose/foundation/ImageKt$Image$2;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; -PLandroidx/compose/foundation/ImageKt;->Image(Landroidx/compose/ui/graphics/painter/Painter;Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;Landroidx/compose/runtime/Composer;II)V -PLandroidx/compose/foundation/MutatePriority;->()V -PLandroidx/compose/foundation/MutatePriority;->(ILjava/lang/String;)V -PLandroidx/compose/foundation/MutatorMutex$Mutator;->(Landroidx/compose/foundation/MutatePriority;Lkotlinx/coroutines/Job;)V -PLandroidx/compose/foundation/MutatorMutex$mutateWith$2;->(Landroidx/compose/foundation/MutatePriority;Landroidx/compose/foundation/MutatorMutex;Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V -PLandroidx/compose/foundation/MutatorMutex$mutateWith$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -PLandroidx/compose/foundation/MutatorMutex$mutateWith$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/MutatorMutex$mutateWith$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/ScrollKt$rememberScrollState$1$1;->(I)V -PLandroidx/compose/foundation/ScrollKt$rememberScrollState$1$1;->invoke()Ljava/lang/Object; -PLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$1;->(Lkotlinx/coroutines/CoroutineScope;ZLandroidx/compose/foundation/ScrollState;)V -PLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$accessibilityScrollState$1;->(Landroidx/compose/foundation/ScrollState;)V -PLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$accessibilityScrollState$2;->(Landroidx/compose/foundation/ScrollState;)V -PLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1;->(ZZZLandroidx/compose/foundation/ScrollState;Lkotlinx/coroutines/CoroutineScope;)V -PLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/ScrollKt$scroll$2;->(Landroidx/compose/foundation/ScrollState;Landroidx/compose/foundation/gestures/FlingBehavior;ZZZ)V -PLandroidx/compose/foundation/ScrollKt;->rememberScrollState(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/ScrollState; -PLandroidx/compose/foundation/ScrollState$Companion$Saver$1;->()V -PLandroidx/compose/foundation/ScrollState$Companion$Saver$1;->()V -PLandroidx/compose/foundation/ScrollState$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/ScrollState$Companion$Saver$2;->()V -PLandroidx/compose/foundation/ScrollState$Companion$Saver$2;->()V -PLandroidx/compose/foundation/ScrollState$Companion$Saver$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/ScrollState$scrollableState$1;->(Landroidx/compose/foundation/ScrollState;)V -PLandroidx/compose/foundation/ScrollState;->()V -PLandroidx/compose/foundation/ScrollState;->(I)V -PLandroidx/compose/foundation/ScrollState;->getValue()I -PLandroidx/compose/foundation/ScrollingLayoutModifier$measure$1;->(Landroidx/compose/foundation/ScrollingLayoutModifier;ILandroidx/compose/ui/layout/Placeable;)V -PLandroidx/compose/foundation/ScrollingLayoutModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/ScrollingLayoutModifier;->(Landroidx/compose/foundation/ScrollState;ZZLandroidx/compose/foundation/OverscrollEffect;)V -PLandroidx/compose/foundation/ScrollingLayoutModifier;->equals(Ljava/lang/Object;)Z -PLandroidx/compose/foundation/ScrollingLayoutModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; -PLandroidx/compose/foundation/gestures/DefaultFlingBehavior$performFling$1;->(Landroidx/compose/foundation/gestures/DefaultFlingBehavior;Lkotlin/coroutines/Continuation;)V -PLandroidx/compose/foundation/gestures/DefaultFlingBehavior$performFling$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/DefaultFlingBehavior$performFling$2;->(Lkotlin/jvm/internal/Ref$FloatRef;Landroidx/compose/foundation/gestures/ScrollingLogic$doFlingAnimation$2$scope$1;Lkotlin/jvm/internal/Ref$FloatRef;)V -PLandroidx/compose/foundation/gestures/DefaultFlingBehavior;->performFling(Landroidx/compose/foundation/gestures/ScrollingLogic$doFlingAnimation$2$scope$1;FLkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;->(Landroidx/compose/foundation/gestures/DefaultScrollableState;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V -PLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -PLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;->(Landroidx/compose/foundation/gestures/DefaultScrollableState;Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V -PLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -PLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/DefaultScrollableState;->scroll(Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/DragEvent$DragDelta;->(J)V -PLandroidx/compose/foundation/gestures/DragEvent$DragStarted;->(J)V -PLandroidx/compose/foundation/gestures/DragEvent$DragStopped;->(J)V -PLandroidx/compose/foundation/gestures/DragEvent;->()V -PLandroidx/compose/foundation/gestures/DragGestureDetectorKt$HorizontalPointerDirectionConfig$1;->()V -PLandroidx/compose/foundation/gestures/DragGestureDetectorKt$VerticalPointerDirectionConfig$1;->()V -PLandroidx/compose/foundation/gestures/DragGestureDetectorKt$VerticalPointerDirectionConfig$1;->crossAxisDelta-k-4lQ0M(J)F -PLandroidx/compose/foundation/gestures/DragGestureDetectorKt$VerticalPointerDirectionConfig$1;->mainAxisDelta-k-4lQ0M(J)F -PLandroidx/compose/foundation/gestures/DragGestureDetectorKt$VerticalPointerDirectionConfig$1;->offsetFromChanges-dBAh8RU(FF)J -PLandroidx/compose/foundation/gestures/DragGestureDetectorKt$verticalDrag$1;->(Lkotlin/coroutines/Continuation;)V -PLandroidx/compose/foundation/gestures/DragGestureDetectorKt$verticalDrag$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/DragGestureDetectorKt;->()V -PLandroidx/compose/foundation/gestures/DragGestureDetectorKt;->isPointerUp-DmW0f2w(Landroidx/compose/ui/input/pointer/PointerEvent;J)Z -PLandroidx/compose/foundation/gestures/DragGestureDetectorKt;->verticalDrag-jO51t88(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;JLandroidx/compose/foundation/gestures/DraggableKt$awaitDrag$dragTick$1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/DragLogic$processDragStart$1;->(Landroidx/compose/foundation/gestures/DragLogic;Lkotlin/coroutines/Continuation;)V -PLandroidx/compose/foundation/gestures/DragLogic$processDragStop$1;->(Landroidx/compose/foundation/gestures/DragLogic;Lkotlin/coroutines/Continuation;)V -PLandroidx/compose/foundation/gestures/DragLogic;->processDragStart(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/gestures/DragEvent$DragStarted;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/DragLogic;->processDragStop(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/gestures/DragEvent$DragStopped;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/DraggableKt$awaitDownAndSlop$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/DraggableKt$awaitDownAndSlop$postPointerSlop$1;->(Landroidx/compose/ui/input/pointer/util/VelocityTracker;Lkotlin/jvm/internal/Ref$LongRef;)V -PLandroidx/compose/foundation/gestures/DraggableKt$awaitDownAndSlop$postPointerSlop$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/DraggableKt$awaitDrag$dragTick$1;->(Landroidx/compose/ui/input/pointer/util/VelocityTracker;Lkotlinx/coroutines/channels/Channel;Z)V -PLandroidx/compose/foundation/gestures/DraggableKt$awaitDrag$dragTick$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/DraggableKt$draggable$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$1$1$invoke$$inlined$onDispose$1;->dispose()V -PLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$2$2;->(Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/channels/Channel;Landroidx/compose/foundation/gestures/Orientation;Lkotlin/coroutines/Continuation;)V -PLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$2$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -PLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$2$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/DraggableKt$draggable$9$2$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/DraggableKt;->access$awaitDrag-Su4bsnU(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Landroidx/compose/ui/input/pointer/PointerInputChange;JLandroidx/compose/ui/input/pointer/util/VelocityTracker;Lkotlinx/coroutines/channels/Channel;ZLandroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/gestures/DraggableKt$draggable$9$3$1$1;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitAllPointersUp$2;->(Lkotlin/coroutines/Continuation;)V -PLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitAllPointersUp$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -PLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitAllPointersUp$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitAllPointersUp$3;->(Lkotlin/coroutines/Continuation;)V -PLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitAllPointersUp$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/ForEachGestureKt;->awaitAllPointersUp(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/PressGestureScopeImpl$tryAwaitRelease$1;->(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V -PLandroidx/compose/foundation/gestures/PressGestureScopeImpl$tryAwaitRelease$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/PressGestureScopeImpl;->tryAwaitRelease(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/ScrollDraggableState$drag$2;->(Landroidx/compose/foundation/gestures/ScrollDraggableState;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V -PLandroidx/compose/foundation/gestures/ScrollDraggableState$drag$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -PLandroidx/compose/foundation/gestures/ScrollDraggableState$drag$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/ScrollDraggableState$drag$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/ScrollDraggableState;->drag(Landroidx/compose/foundation/gestures/DraggableKt$draggable$9$2$2;Landroidx/compose/foundation/gestures/DraggableKt$draggable$9$2;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/ScrollDraggableState;->dragBy(F)V -PLandroidx/compose/foundation/gestures/ScrollableKt$awaitScrollEvent$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$2$1;->invoke()Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$3$1$1;->(Landroidx/compose/runtime/State;JLkotlin/coroutines/Continuation;)V -PLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$3$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -PLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$3$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$3$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/ScrollableState;->scroll$default(Landroidx/compose/foundation/gestures/ScrollableState;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/ScrollingLogic$doFlingAnimation$1;->(Landroidx/compose/foundation/gestures/ScrollingLogic;Lkotlin/coroutines/Continuation;)V -PLandroidx/compose/foundation/gestures/ScrollingLogic$doFlingAnimation$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/ScrollingLogic$doFlingAnimation$2$outerScopeScroll$1;->(Landroidx/compose/foundation/gestures/ScrollingLogic;Landroidx/compose/foundation/gestures/ScrollScope;)V -PLandroidx/compose/foundation/gestures/ScrollingLogic$doFlingAnimation$2$scope$1;->(Landroidx/compose/foundation/gestures/ScrollingLogic;Landroidx/compose/foundation/gestures/ScrollingLogic$doFlingAnimation$2$outerScopeScroll$1;)V -PLandroidx/compose/foundation/gestures/ScrollingLogic$doFlingAnimation$2;->(Landroidx/compose/foundation/gestures/ScrollingLogic;Lkotlin/jvm/internal/Ref$LongRef;JLkotlin/coroutines/Continuation;)V -PLandroidx/compose/foundation/gestures/ScrollingLogic$doFlingAnimation$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -PLandroidx/compose/foundation/gestures/ScrollingLogic$doFlingAnimation$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/ScrollingLogic$doFlingAnimation$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/ScrollingLogic$onDragStopped$1;->(Landroidx/compose/foundation/gestures/ScrollingLogic;Lkotlin/coroutines/Continuation;)V -PLandroidx/compose/foundation/gestures/ScrollingLogic$onDragStopped$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/ScrollingLogic;->doFlingAnimation-QWom1Mo(JLkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/ScrollingLogic;->onDragStopped-sF-c-tU(JLkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1$1;->(Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Landroidx/compose/ui/input/pointer/PointerInputChange;Lkotlin/coroutines/Continuation;)V -PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$waitForUpOrCancellation$1;->(Lkotlin/coroutines/Continuation;)V -PLandroidx/compose/foundation/gestures/TapGestureDetectorKt$waitForUpOrCancellation$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->waitForUpOrCancellation(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLandroidx/compose/foundation/interaction/DragInteraction$Start;->()V -PLandroidx/compose/foundation/interaction/DragInteraction$Stop;->(Landroidx/compose/foundation/interaction/DragInteraction$Start;)V -PLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;->emit(Landroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLandroidx/compose/foundation/interaction/PressInteraction$Press;->(J)V -PLandroidx/compose/foundation/interaction/PressInteraction$Release;->(Landroidx/compose/foundation/interaction/PressInteraction$Press;)V -PLandroidx/compose/foundation/layout/Arrangement$Center$1;->arrange(Landroidx/compose/ui/unit/Density;I[I[I)V -PLandroidx/compose/foundation/layout/Arrangement$Vertical;->getSpacing-D9Ej5fM()F -PLandroidx/compose/foundation/layout/ColumnKt$columnMeasurePolicy$1$1;->(Landroidx/compose/foundation/layout/Arrangement$Vertical;)V -PLandroidx/compose/foundation/layout/ColumnKt$columnMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/io/Serializable;)Ljava/lang/Object; -PLandroidx/compose/foundation/layout/ColumnScopeInstance;->()V -PLandroidx/compose/foundation/layout/ColumnScopeInstance;->()V -PLandroidx/compose/foundation/layout/PaddingKt;->PaddingValues-a9UjIt4$default(FFI)Landroidx/compose/foundation/layout/PaddingValuesImpl; -PLandroidx/compose/foundation/layout/SizeKt$createWrapContentSizeModifier$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/layout/SizeKt;->wrapContentSize$default(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/BiasAlignment;I)Landroidx/compose/ui/Modifier; -PLandroidx/compose/foundation/layout/UnspecifiedConstraintsModifier;->equals(Ljava/lang/Object;)Z -PLandroidx/compose/foundation/layout/WrapContentModifier$measure$1;->(Landroidx/compose/foundation/layout/WrapContentModifier;ILandroidx/compose/ui/layout/Placeable;ILandroidx/compose/ui/layout/MeasureScope;)V -PLandroidx/compose/foundation/layout/WrapContentModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/layout/WrapContentModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; -PLandroidx/compose/foundation/lazy/AwaitFirstLayoutModifier$waitForFirstLayout$1;->(Landroidx/compose/foundation/lazy/AwaitFirstLayoutModifier;Lkotlin/coroutines/Continuation;)V -PLandroidx/compose/foundation/lazy/AwaitFirstLayoutModifier;->waitForFirstLayout(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLandroidx/compose/foundation/lazy/DataIndex;->(I)V -PLandroidx/compose/foundation/lazy/DataIndex;->equals(Ljava/lang/Object;)Z -PLandroidx/compose/foundation/lazy/EmptyLazyListLayoutInfo;->()V -PLandroidx/compose/foundation/lazy/EmptyLazyListLayoutInfo;->()V -PLandroidx/compose/foundation/lazy/LazyDslKt;->LazyColumn(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/layout/PaddingValues;ZLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/foundation/gestures/FlingBehavior;ZLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V -PLandroidx/compose/foundation/lazy/LazyItemScopeImpl;->()V -PLandroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;->()V -PLandroidx/compose/foundation/lazy/LazyListBeyondBoundsModifierLocal;->(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;ZLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/foundation/gestures/Orientation;)V -PLandroidx/compose/foundation/lazy/LazyListBeyondBoundsModifierLocal;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal; -PLandroidx/compose/foundation/lazy/LazyListBeyondBoundsModifierLocal;->getValue()Ljava/lang/Object; -PLandroidx/compose/foundation/lazy/LazyListIntervalContent;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V -PLandroidx/compose/foundation/lazy/LazyListIntervalContent;->getKey()Lkotlin/jvm/functions/Function1; -PLandroidx/compose/foundation/lazy/LazyListIntervalContent;->getType()Lkotlin/jvm/functions/Function1; -PLandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;->(Lkotlinx/coroutines/CoroutineScope;Z)V -PLandroidx/compose/foundation/lazy/LazyListItemProviderImpl$1;->(Landroidx/compose/foundation/lazy/LazyItemScopeImpl;)V -PLandroidx/compose/foundation/lazy/LazyListItemProviderImpl$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->(Landroidx/compose/foundation/lazy/layout/MutableIntervalList;Lkotlin/ranges/IntRange;Landroidx/compose/foundation/lazy/LazyItemScopeImpl;)V -PLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->Item(ILandroidx/compose/runtime/Composer;I)V -PLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getContentType(I)Ljava/lang/Object; -PLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getItemCount()I -PLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getKey(I)Ljava/lang/Object; -PLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getKeyToIndexMap()Ljava/util/Map; -PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->(Landroidx/compose/runtime/DerivedSnapshotState;)V -PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->Item(ILandroidx/compose/runtime/Composer;I)V -PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getContentType(I)Ljava/lang/Object; -PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getHeaderIndexes()Ljava/util/List; -PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getItemCount()I -PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getItemScope()Landroidx/compose/foundation/lazy/LazyItemScopeImpl; -PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getKey(I)Ljava/lang/Object; -PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;->getKeyToIndexMap()Ljava/util/Map; -PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$itemProviderState$1;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/lazy/LazyItemScopeImpl;)V -PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$itemProviderState$1;->invoke()Ljava/lang/Object; -PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$1$1;->(Landroidx/compose/foundation/lazy/LazyListState;)V -PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$1$1;->invoke()Ljava/lang/Object; -PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$2;->()V -PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$2;->()V -PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$2;->invoke()Ljava/lang/Object; -PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$3;->()V -PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$3;->()V -PLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$nearestItemsRangeState$3;->invoke()Ljava/lang/Object; -PLandroidx/compose/foundation/lazy/LazyListKt$ScrollPositionUpdater$1;->(Landroidx/compose/foundation/lazy/LazyListItemProvider;Landroidx/compose/foundation/lazy/LazyListState;I)V -PLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$2;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;JII)V -PLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;->(IILandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;ZLandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;ZIILandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;J)V -PLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1;->(ZLandroidx/compose/foundation/layout/PaddingValues;ZLandroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;Landroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/foundation/OverscrollEffect;)V -PLandroidx/compose/foundation/lazy/LazyListKt;->LazyList(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/layout/PaddingValues;ZZLandroidx/compose/foundation/gestures/FlingBehavior;ZLandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;III)V -PLandroidx/compose/foundation/lazy/LazyListKt;->ScrollPositionUpdater(Landroidx/compose/foundation/lazy/LazyListItemProvider;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/runtime/Composer;I)V -PLandroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$3;->(Ljava/util/ArrayList;Landroidx/compose/foundation/lazy/LazyListPositionedItem;)V -PLandroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/lazy/LazyListMeasureResult;->(Landroidx/compose/foundation/lazy/LazyMeasuredItem;IZFLandroidx/compose/ui/layout/MeasureResult;Ljava/util/List;ILandroidx/compose/foundation/gestures/Orientation;)V -PLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getAlignmentLines()Ljava/util/Map; -PLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getHeight()I -PLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getTotalItemsCount()I -PLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getVisibleItemsInfo()Ljava/util/List; -PLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getWidth()I -PLandroidx/compose/foundation/lazy/LazyListMeasureResult;->placeChildren()V -PLandroidx/compose/foundation/lazy/LazyListPinningModifier$Companion$EmptyPinnedItemsHandle$1;->()V -PLandroidx/compose/foundation/lazy/LazyListPinningModifier;->()V -PLandroidx/compose/foundation/lazy/LazyListPinningModifier;->(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListBeyondBoundsInfo;)V -PLandroidx/compose/foundation/lazy/LazyListPinningModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal; -PLandroidx/compose/foundation/lazy/LazyListPinningModifier;->getValue()Ljava/lang/Object; -PLandroidx/compose/foundation/lazy/LazyListPinningModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V -PLandroidx/compose/foundation/lazy/LazyListPlaceableWrapper;->(JLandroidx/compose/ui/layout/Placeable;Ljava/lang/Object;)V -PLandroidx/compose/foundation/lazy/LazyListPositionedItem;->(IILjava/lang/Object;IIIIZLjava/util/ArrayList;Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;J)V -PLandroidx/compose/foundation/lazy/LazyListPositionedItem;->getAnimationSpec(I)Landroidx/compose/animation/core/FiniteAnimationSpec; -PLandroidx/compose/foundation/lazy/LazyListPositionedItem;->getIndex()I -PLandroidx/compose/foundation/lazy/LazyListPositionedItem;->getOffset-Bjo55l4(I)J -PLandroidx/compose/foundation/lazy/LazyListPositionedItem;->place(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V -PLandroidx/compose/foundation/lazy/LazyListScope;->item$default(Landroidx/compose/foundation/lazy/LazyListScope;Ljava/lang/String;Landroidx/compose/runtime/internal/ComposableLambdaImpl;I)V -PLandroidx/compose/foundation/lazy/LazyListScopeImpl$item$1;->(Ljava/lang/Object;)V -PLandroidx/compose/foundation/lazy/LazyListScopeImpl$item$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/lazy/LazyListScopeImpl$item$2;->(Ljava/lang/Object;)V -PLandroidx/compose/foundation/lazy/LazyListScopeImpl$item$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/lazy/LazyListScopeImpl$item$3;->(Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V -PLandroidx/compose/foundation/lazy/LazyListScopeImpl$item$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/lazy/LazyListScopeImpl;->()V -PLandroidx/compose/foundation/lazy/LazyListScopeImpl;->item(Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/internal/ComposableLambdaImpl;)V -PLandroidx/compose/foundation/lazy/LazyListScrollPosition;->(II)V -PLandroidx/compose/foundation/lazy/LazyListScrollPosition;->update-AhXoVpI(II)V -PLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;->()V -PLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;->()V -PLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$2;->()V -PLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$2;->()V -PLandroidx/compose/foundation/lazy/LazyListState$remeasurementModifier$1;->(Landroidx/compose/foundation/lazy/LazyListState;)V -PLandroidx/compose/foundation/lazy/LazyListState$remeasurementModifier$1;->onRemeasurementAvailable(Landroidx/compose/ui/layout/Remeasurement;)V -PLandroidx/compose/foundation/lazy/LazyListState$scroll$1;->(Landroidx/compose/foundation/lazy/LazyListState;Lkotlin/coroutines/Continuation;)V -PLandroidx/compose/foundation/lazy/LazyListState$scroll$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/lazy/LazyListState$scrollableState$1;->(Landroidx/compose/foundation/lazy/LazyListState;)V -PLandroidx/compose/foundation/lazy/LazyListState$scrollableState$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/lazy/LazyListState;->()V -PLandroidx/compose/foundation/lazy/LazyListState;->(II)V -PLandroidx/compose/foundation/lazy/LazyListState;->getFirstVisibleItemIndex()I -PLandroidx/compose/foundation/lazy/LazyListState;->isScrollInProgress()Z -PLandroidx/compose/foundation/lazy/LazyListState;->scroll(Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLandroidx/compose/foundation/lazy/LazyListState;->updateScrollPositionIfTheFirstItemWasMoved$foundation_release(Landroidx/compose/foundation/lazy/LazyListItemProvider;)V -PLandroidx/compose/foundation/lazy/LazyListStateKt$rememberLazyListState$1$1;->(II)V -PLandroidx/compose/foundation/lazy/LazyListStateKt$rememberLazyListState$1$1;->invoke()Ljava/lang/Object; -PLandroidx/compose/foundation/lazy/LazyListStateKt;->rememberLazyListState(Landroidx/compose/runtime/Composer;)Landroidx/compose/foundation/lazy/LazyListState; -PLandroidx/compose/foundation/lazy/LazyMeasuredItemProvider;->(JZLandroidx/compose/foundation/lazy/LazyListItemProvider;Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;Landroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;)V -PLandroidx/compose/foundation/lazy/LazyMeasuredItemProvider;->getAndMeasure-ZjPyQlc(I)Landroidx/compose/foundation/lazy/LazyMeasuredItem; -PLandroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1$scrollAxisRange$1;->(Landroidx/compose/foundation/lazy/LazyListState;)V -PLandroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1$scrollAxisRange$1;->invoke()Ljava/lang/Object; -PLandroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1$scrollAxisRange$2;->(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;)V -PLandroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1$scrollAxisRange$2;->invoke()Ljava/lang/Object; -PLandroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1;->(ZLandroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProvider$1$1;Z)V -PLandroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1;->collectionInfo()Landroidx/compose/ui/semantics/CollectionInfo; -PLandroidx/compose/foundation/lazy/LazySemanticsKt$rememberLazyListSemanticState$1$1;->scrollAxisRange()Landroidx/compose/ui/semantics/ScrollAxisRange; -PLandroidx/compose/foundation/lazy/grid/ItemIndex;->equals(Ljava/lang/Object;)Z -PLandroidx/compose/foundation/lazy/grid/LazyGridKt$rememberLazyGridMeasurePolicy$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/lazy/grid/LazyGridMeasureResult;->getTotalItemsCount()I -PLandroidx/compose/foundation/lazy/grid/LazyGridMeasureResult;->getVisibleItemsInfo()Ljava/util/List; -PLandroidx/compose/foundation/lazy/grid/LazyGridPositionedItem;->getIndex()I -PLandroidx/compose/foundation/lazy/grid/LazyGridPositionedItem;->getRow()I -PLandroidx/compose/foundation/lazy/grid/LazyGridState$Companion$Saver$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/lazy/grid/LazyGridState$scroll$1;->(Landroidx/compose/foundation/lazy/grid/LazyGridState;Lkotlin/coroutines/Continuation;)V -PLandroidx/compose/foundation/lazy/grid/LazyGridState$scroll$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/foundation/lazy/grid/LazyGridState;->scroll(Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLandroidx/compose/foundation/lazy/grid/LazySemanticsKt$rememberLazyGridSemanticState$1$1$scrollAxisRange$1;->invoke()Ljava/lang/Object; -PLandroidx/compose/foundation/lazy/grid/LazySemanticsKt$rememberLazyGridSemanticState$1$1$scrollAxisRange$2;->invoke()Ljava/lang/Object; -PLandroidx/compose/foundation/lazy/grid/LineIndex;->(I)V -PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2$invoke$$inlined$onDispose$1;->dispose()V -PLandroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;->areCompatible(Ljava/lang/Object;Ljava/lang/Object;)Z -PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest;->(IJ)V -PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest;->cancel()V -PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->doFrame(J)V -PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->onForgotten()V -PLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->schedulePrefetch-0kLqBqw(JI)Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest; -PLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1$invoke$$inlined$onDispose$1;->dispose()V -PLandroidx/compose/foundation/shape/DpCornerSize;->equals(Ljava/lang/Object;)Z -PLandroidx/compose/material/ripple/AndroidRippleIndicationInstance$onInvalidateRipple$1;->invoke()Ljava/lang/Object; -PLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->addRipple(Landroidx/compose/foundation/interaction/PressInteraction$Press;Lkotlinx/coroutines/CoroutineScope;)V -PLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->removeRipple(Landroidx/compose/foundation/interaction/PressInteraction$Press;)V -PLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1$invokeSuspend$$inlined$collect$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLandroidx/compose/material/ripple/RippleHostMap;->remove(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)V -PLandroidx/compose/material/ripple/RippleHostView$$ExternalSyntheticLambda0;->(Landroidx/compose/material/ripple/RippleHostView;)V -PLandroidx/compose/material/ripple/RippleHostView$$ExternalSyntheticLambda0;->run()V -PLandroidx/compose/material/ripple/RippleHostView;->$r8$lambda$Xdb_1Gc1JGZel2dMr_C_hEFI5-M(Landroidx/compose/material/ripple/RippleHostView;)V -PLandroidx/compose/material/ripple/RippleHostView;->addRipple-KOepWvA(Landroidx/compose/foundation/interaction/PressInteraction$Press;ZJIJFLandroidx/compose/material/ripple/AndroidRippleIndicationInstance$onInvalidateRipple$1;)V -PLandroidx/compose/material/ripple/RippleHostView;->disposeRipple()V -PLandroidx/compose/material/ripple/RippleHostView;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V -PLandroidx/compose/material/ripple/RippleHostView;->removeRipple()V -PLandroidx/compose/material/ripple/RippleHostView;->setRippleState$lambda-2(Landroidx/compose/material/ripple/RippleHostView;)V -PLandroidx/compose/material/ripple/RippleHostView;->setRippleState(Z)V -PLandroidx/compose/material/ripple/UnprojectedRipple$MRadiusHelper;->()V -PLandroidx/compose/material/ripple/UnprojectedRipple$MRadiusHelper;->()V -PLandroidx/compose/material/ripple/UnprojectedRipple$MRadiusHelper;->setRadius(Landroid/graphics/drawable/RippleDrawable;I)V -PLandroidx/compose/material/ripple/UnprojectedRipple;->(Z)V -PLandroidx/compose/material/ripple/UnprojectedRipple;->getDirtyBounds()Landroid/graphics/Rect; -PLandroidx/compose/material/ripple/UnprojectedRipple;->isProjected()Z -PLandroidx/compose/material3/AndroidMenu_androidKt$DropdownMenu$2;->(ZLkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;JLandroidx/compose/ui/window/PopupProperties;Lkotlin/jvm/functions/Function3;II)V -PLandroidx/compose/material3/ButtonColors;->equals(Ljava/lang/Object;)Z -PLandroidx/compose/material3/ButtonDefaults;->textButtonColors-ro_MJ88(JJJJLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/ButtonColors; -PLandroidx/compose/material3/ButtonElevation$animateElevation$3;->(Landroidx/compose/animation/core/Animatable;Landroidx/compose/material3/ButtonElevation;FLandroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)V -PLandroidx/compose/material3/ButtonElevation$animateElevation$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -PLandroidx/compose/material3/ButtonElevation$animateElevation$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/material3/ButtonKt$Button$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/material3/CardColors;->(JJJJ)V -PLandroidx/compose/material3/CardColors;->equals(Ljava/lang/Object;)Z -PLandroidx/compose/material3/CardDefaults;->cardColors-ro_MJ88(JLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/CardColors; -PLandroidx/compose/material3/CardElevation$animateElevation$1$1$1;->(Landroidx/compose/runtime/snapshots/SnapshotStateList;)V -PLandroidx/compose/material3/CardElevation$animateElevation$1$1;->(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/snapshots/SnapshotStateList;Lkotlin/coroutines/Continuation;)V -PLandroidx/compose/material3/CardElevation$animateElevation$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -PLandroidx/compose/material3/CardElevation$animateElevation$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/material3/CardElevation$animateElevation$2;->(ZLandroidx/compose/animation/core/Animatable;Landroidx/compose/material3/CardElevation;FLandroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)V -PLandroidx/compose/material3/CardElevation$animateElevation$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -PLandroidx/compose/material3/CardElevation$animateElevation$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/material3/CardElevation;->(FFFFFF)V -PLandroidx/compose/material3/CardKt$Card$4;->(Lkotlin/jvm/functions/Function3;I)V -PLandroidx/compose/material3/CardKt$Card$5;->(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/graphics/Shape;Landroidx/compose/material3/CardColors;Landroidx/compose/material3/CardElevation;Landroidx/compose/foundation/BorderStroke;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function3;II)V -PLandroidx/compose/material3/ElevationKt;->()V -PLandroidx/compose/material3/ElevationKt;->animateElevation-rAjV9yQ(Landroidx/compose/animation/core/Animatable;FLandroidx/compose/foundation/interaction/Interaction;Landroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLandroidx/compose/material3/IconKt$Icon$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1$2$1;->(Landroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V -PLandroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLandroidx/compose/material3/MinimumTouchTargetModifier;->equals(Ljava/lang/Object;)Z -PLandroidx/compose/material3/TopAppBarColors;->equals(Ljava/lang/Object;)Z -PLandroidx/compose/material3/tokens/FilledCardTokens;->()V -PLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$2$1;->(IILjava/lang/Object;)V -PLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$2$2;->(IILjava/lang/Object;)V -PLandroidx/compose/runtime/CompositionContext;->unregisterComposer$runtime_release(Landroidx/compose/runtime/Composer;)V -PLandroidx/compose/runtime/JoinedKey;->(Ljava/lang/Integer;Ljava/lang/Object;)V -PLandroidx/compose/runtime/JoinedKey;->equals(Ljava/lang/Object;)Z -PLandroidx/compose/runtime/JoinedKey;->hashCode()I -PLandroidx/compose/runtime/Recomposer$effectJob$1$1$1$1;->(Landroidx/compose/runtime/Recomposer;Ljava/lang/Throwable;)V -PLandroidx/compose/runtime/Recomposer$effectJob$1$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/runtime/Recomposer$effectJob$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/runtime/Recomposer;->cancel()V -PLandroidx/compose/runtime/collection/IdentityScopeMap;->clear()V -PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;->remove(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList; -PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->indexOf(Ljava/lang/Object;)I -PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->removeAt(I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList; -PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->remove(IILjava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; -PLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->remove(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet; -PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;->saveTo(Ljava/util/Map;)V -PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;->dispose()V -PLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->removeState(Ljava/lang/Object;)V -PLandroidx/compose/runtime/snapshots/Snapshot$Companion$registerApplyObserver$2;->dispose()V -PLandroidx/compose/runtime/snapshots/SnapshotStateList;->iterator()Ljava/util/Iterator; -PLandroidx/compose/runtime/snapshots/SnapshotStateList;->remove(I)Ljava/lang/Object; -PLandroidx/compose/runtime/snapshots/SnapshotStateList;->remove(Ljava/lang/Object;)Z -PLandroidx/compose/runtime/snapshots/StateListIterator;->remove()V -PLandroidx/compose/ui/TempListUtilsKt;->fastJoinToString$default(Ljava/util/List;)Ljava/lang/String; -PLandroidx/compose/ui/ZIndexModifier;->equals(Ljava/lang/Object;)Z -PLandroidx/compose/ui/autofill/AutofillCallback;->unregister(Landroidx/compose/ui/autofill/AndroidAutofill;)V -PLandroidx/compose/ui/geometry/MutableRect;->()V -PLandroidx/compose/ui/geometry/Offset;->copy-dBAh8RU$default(JI)J -PLandroidx/compose/ui/geometry/Offset;->equals-impl0(JJ)Z -PLandroidx/compose/ui/geometry/Offset;->plus-MK-Hz9U(JJ)J -PLandroidx/compose/ui/geometry/OffsetKt;->isFinite-k-4lQ0M(J)Z -PLandroidx/compose/ui/geometry/Rect;->equals(Ljava/lang/Object;)Z -PLandroidx/compose/ui/geometry/Rect;->getCenter-F1C5BW0()J -PLandroidx/compose/ui/graphics/AndroidPaint;->setStrokeJoin-Ww9F2mQ(I)V -PLandroidx/compose/ui/graphics/AndroidPaint;->setStrokeMiterLimit(F)V -PLandroidx/compose/ui/graphics/drawscope/Stroke;->(FFIII)V -PLandroidx/compose/ui/graphics/drawscope/Stroke;->equals(Ljava/lang/Object;)Z -PLandroidx/compose/ui/graphics/painter/BitmapPainter;->(Landroidx/compose/ui/graphics/ImageBitmap;JJ)V -PLandroidx/compose/ui/graphics/painter/BitmapPainter;->applyColorFilter(Landroidx/compose/ui/graphics/ColorFilter;)Z -PLandroidx/compose/ui/graphics/painter/BitmapPainter;->getIntrinsicSize-NH-jbRc()J -PLandroidx/compose/ui/graphics/painter/BitmapPainter;->onDraw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V -PLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher$dispatchPostFling$1;->(Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;Lkotlin/coroutines/Continuation;)V -PLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher$dispatchPreFling$1;->(Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;Lkotlin/coroutines/Continuation;)V -PLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->dispatchPostFling-RZ2iAVY(JJLkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->dispatchPreFling-QWom1Mo(JLkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal$1;->invoke()Ljava/lang/Object; -PLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierLocal;->getNestedCoroutineScope()Lkotlinx/coroutines/CoroutineScope; -PLandroidx/compose/ui/input/pointer/ConsumedData;->(ZZ)V -PLandroidx/compose/ui/input/pointer/HistoricalChange;->(JJ)V -PLandroidx/compose/ui/input/pointer/HitPathTracker;->addHitPath-KNwqfcY(JLandroidx/compose/ui/node/HitTestResult;)V -PLandroidx/compose/ui/input/pointer/HitPathTracker;->dispatchChanges(Landroidx/compose/ui/input/pointer/InternalPointerEvent;Z)Z -PLandroidx/compose/ui/input/pointer/InternalPointerEvent;->(Ljava/util/LinkedHashMap;Landroidx/compose/ui/input/pointer/PointerInputEvent;)V -PLandroidx/compose/ui/input/pointer/InternalPointerEvent;->issuesEnterExitEvent-0FcD4WY(J)Z -PLandroidx/compose/ui/input/pointer/Node;->(Landroidx/compose/ui/node/PointerInputModifierNode;)V -PLandroidx/compose/ui/input/pointer/Node;->cleanUpHits(Landroidx/compose/ui/input/pointer/InternalPointerEvent;)V -PLandroidx/compose/ui/input/pointer/Node;->dispatchFinalEventPass(Landroidx/compose/ui/input/pointer/InternalPointerEvent;)Z -PLandroidx/compose/ui/input/pointer/NodeParent;->buildCache(Ljava/util/Map;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/input/pointer/InternalPointerEvent;Z)Z -PLandroidx/compose/ui/input/pointer/NodeParent;->cleanUpHits(Landroidx/compose/ui/input/pointer/InternalPointerEvent;)V -PLandroidx/compose/ui/input/pointer/NodeParent;->removeDetachedPointerInputFilters()V -PLandroidx/compose/ui/input/pointer/PointerEventKt;->changedToDownIgnoreConsumed(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z -PLandroidx/compose/ui/input/pointer/PointerEventKt;->changedToUpIgnoreConsumed(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z -PLandroidx/compose/ui/input/pointer/PointerEventKt;->isOutOfBounds-jwHxaWs(Landroidx/compose/ui/input/pointer/PointerInputChange;JJ)Z -PLandroidx/compose/ui/input/pointer/PointerEventKt;->positionChangeInternal(Landroidx/compose/ui/input/pointer/PointerInputChange;Z)J -PLandroidx/compose/ui/input/pointer/PointerId;->(J)V -PLandroidx/compose/ui/input/pointer/PointerId;->equals(Ljava/lang/Object;)Z -PLandroidx/compose/ui/input/pointer/PointerId;->equals-impl0(JJ)Z -PLandroidx/compose/ui/input/pointer/PointerId;->hashCode()I -PLandroidx/compose/ui/input/pointer/PointerInputChange;->(JJJZFJJZILjava/util/List;J)V -PLandroidx/compose/ui/input/pointer/PointerInputChange;->consume()V -PLandroidx/compose/ui/input/pointer/PointerInputChange;->isConsumed()Z -PLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;->(JJZ)V -PLandroidx/compose/ui/input/pointer/PointerInputEvent;->(Ljava/util/ArrayList;Landroid/view/MotionEvent;)V -PLandroidx/compose/ui/input/pointer/PointerInputEventData;->(JJJJZFIZLjava/util/ArrayList;J)V -PLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->equals(Ljava/lang/Object;)Z -PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;->getCurrentEvent()Landroidx/compose/ui/input/pointer/PointerEvent; -PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;->getExtendedTouchPadding-NH-jbRc()J -PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;->getSize-YbymL2g()J -PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter$PointerEventHandlerCoroutine;->getViewConfiguration()Landroidx/compose/ui/platform/ViewConfiguration; -PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V -PLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilter;->toSize-XkaWNTQ(J)J -PLandroidx/compose/ui/input/pointer/util/Matrix;->(II)V -PLandroidx/compose/ui/input/pointer/util/Matrix;->get(II)F -PLandroidx/compose/ui/input/pointer/util/Matrix;->set(IIF)V -PLandroidx/compose/ui/input/pointer/util/PointAtTime;->(JJ)V -PLandroidx/compose/ui/input/pointer/util/PolynomialFit;->(Ljava/util/ArrayList;F)V -PLandroidx/compose/ui/input/pointer/util/Vector;->(I)V -PLandroidx/compose/ui/input/pointer/util/Vector;->times(Landroidx/compose/ui/input/pointer/util/Vector;)F -PLandroidx/compose/ui/input/pointer/util/VelocityEstimate;->()V -PLandroidx/compose/ui/input/pointer/util/VelocityEstimate;->(JFJJ)V -PLandroidx/compose/ui/input/pointer/util/VelocityTracker;->calculateVelocity-9UxMQ8M()J -PLandroidx/compose/ui/input/pointer/util/VelocityTrackerKt;->addPointerInputChange(Landroidx/compose/ui/input/pointer/util/VelocityTracker;Landroidx/compose/ui/input/pointer/PointerInputChange;)V -PLandroidx/compose/ui/input/pointer/util/VelocityTrackerKt;->polyFitLeastSquares(Ljava/util/ArrayList;Ljava/util/ArrayList;)Landroidx/compose/ui/input/pointer/util/PolynomialFit; -PLandroidx/compose/ui/layout/ContentScale$Companion$Crop$1;->computeScaleFactor-H7hwNQA(JJ)J -PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;->(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;Ljava/lang/Object;)V -PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;->dispose()V -PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;->getPlaceablesCount()I -PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1;->premeasure-0kLqBqw(JI)V -PLandroidx/compose/ui/layout/SubcomposeLayoutState;->precompose(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$precompose$1; -PLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;->clear()V -PLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;->contains(Ljava/lang/Object;)Z -PLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;->iterator()Ljava/util/Iterator; -PLandroidx/compose/ui/node/BackwardsCompatNode;->interceptOutOfBoundsChildEvents()V -PLandroidx/compose/ui/node/BackwardsCompatNode;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V -PLandroidx/compose/ui/node/BackwardsCompatNode;->sharePointerInputWithSiblings()V -PLandroidx/compose/ui/node/DistanceAndInLayer;->compareTo-S_HNhKs(JJ)I -PLandroidx/compose/ui/node/DistanceAndInLayer;->isInLayer-impl(J)Z -PLandroidx/compose/ui/node/HitTestResult;->clear()V -PLandroidx/compose/ui/node/HitTestResult;->findBestHitDistance-ptXAw2c()J -PLandroidx/compose/ui/node/HitTestResult;->hitInMinimumTouchTarget(Ljava/lang/Object;FZLkotlin/jvm/functions/Function0;)V -PLandroidx/compose/ui/node/HitTestResult;->isEmpty()Z -PLandroidx/compose/ui/node/HitTestResult;->resizeToHitDepth()V -PLandroidx/compose/ui/node/HitTestResult;->size()I -PLandroidx/compose/ui/node/HitTestResultKt;->access$DistanceAndInLayer(FZ)J -PLandroidx/compose/ui/node/InnerNodeCoordinator;->hitTestChild-YqVAtuI(Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V -PLandroidx/compose/ui/node/IntStack;->(I)V -PLandroidx/compose/ui/node/IntStack;->pop()I -PLandroidx/compose/ui/node/IntStack;->pushDiagonal(III)V -PLandroidx/compose/ui/node/IntStack;->pushRange(IIII)V -PLandroidx/compose/ui/node/IntStack;->quickSort(II)V -PLandroidx/compose/ui/node/IntStack;->swapDiagonal(II)V -PLandroidx/compose/ui/node/LayoutModifierNode;->forceRemeasure()V -PLandroidx/compose/ui/node/LayoutNode;->hitTest-M_7yMNQ$ui_release(JLandroidx/compose/ui/node/HitTestResult;ZZ)V -PLandroidx/compose/ui/node/LayoutNode;->isPlacedInLookahead()Ljava/lang/Boolean; -PLandroidx/compose/ui/node/LayoutNode;->markSubtreeAsNotPlaced()V -PLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->getCanAffectParentInLookahead(Landroidx/compose/ui/node/LayoutNode;)Z -PLandroidx/compose/ui/node/NodeChain$Differ;->(Landroidx/compose/ui/node/NodeChain;Landroidx/compose/ui/Modifier$Node;ILandroidx/compose/runtime/collection/MutableVector;Landroidx/compose/runtime/collection/MutableVector;)V -PLandroidx/compose/ui/node/NodeChain$Differ;->insert(I)V -PLandroidx/compose/ui/node/NodeChain$Differ;->same(II)V -PLandroidx/compose/ui/node/NodeChain;->structuralUpdate(Landroidx/compose/runtime/collection/MutableVector;ILandroidx/compose/runtime/collection/MutableVector;ILandroidx/compose/ui/Modifier$Node;)V -PLandroidx/compose/ui/node/NodeCoordinator$Companion$PointerInputSource$1;->childHitTest-YqVAtuI(Landroidx/compose/ui/node/LayoutNode;JLandroidx/compose/ui/node/HitTestResult;ZZ)V -PLandroidx/compose/ui/node/NodeCoordinator$Companion$PointerInputSource$1;->entityType-OLwlOKw()I -PLandroidx/compose/ui/node/NodeCoordinator$Companion$PointerInputSource$1;->interceptOutOfBoundsChildEvents(Landroidx/compose/ui/node/DelegatableNode;)Z -PLandroidx/compose/ui/node/NodeCoordinator$Companion$PointerInputSource$1;->shouldHitTestChildren(Landroidx/compose/ui/node/LayoutNode;)Z -PLandroidx/compose/ui/node/NodeCoordinator$hit$1;->(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/node/DelegatableNode;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V -PLandroidx/compose/ui/node/NodeCoordinator$hit$1;->invoke()Ljava/lang/Object; -PLandroidx/compose/ui/node/NodeCoordinator;->ancestorToLocal(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/geometry/MutableRect;Z)V -PLandroidx/compose/ui/node/NodeCoordinator;->ancestorToLocal-R5De75A(Landroidx/compose/ui/node/NodeCoordinator;J)J -PLandroidx/compose/ui/node/NodeCoordinator;->calculateMinimumTouchTargetPadding-E7KxVPU(J)J -PLandroidx/compose/ui/node/NodeCoordinator;->distanceInMinimumTouchTarget-tz77jQw(JJ)F -PLandroidx/compose/ui/node/NodeCoordinator;->getMinimumTouchTargetSize-NH-jbRc()J -PLandroidx/compose/ui/node/NodeCoordinator;->hit-1hIXUjU(Landroidx/compose/ui/node/DelegatableNode;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V -PLandroidx/compose/ui/node/NodeCoordinator;->hitTestChild-YqVAtuI(Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V -PLandroidx/compose/ui/node/NodeCoordinator;->localPositionOf-R5De75A(Landroidx/compose/ui/layout/LayoutCoordinates;J)J -PLandroidx/compose/ui/node/NodeCoordinator;->speculativeHit-JHbHoSQ(Landroidx/compose/ui/node/DelegatableNode;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZF)V -PLandroidx/compose/ui/node/NodeCoordinatorKt;->access$nextUncheckedUntil-hw7D004(Landroidx/compose/ui/node/DelegatableNode;I)Landroidx/compose/ui/Modifier$Node; -PLandroidx/compose/ui/node/Snake;->getDiagonalSize-impl([I)I -PLandroidx/compose/ui/platform/AbstractComposeView;->shouldDelayChildPressedState()Z -PLandroidx/compose/ui/platform/AccessibilityNodeInfoVerificationHelperMethods$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/util/List;)V -PLandroidx/compose/ui/platform/AccessibilityNodeInfoVerificationHelperMethods;->()V -PLandroidx/compose/ui/platform/AccessibilityNodeInfoVerificationHelperMethods;->()V -PLandroidx/compose/ui/platform/AccessibilityNodeInfoVerificationHelperMethods;->setAvailableExtraData(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/util/List;)V -PLandroidx/compose/ui/platform/AndroidComposeView;->clearChildInvalidObservations(Landroid/view/ViewGroup;)V -PLandroidx/compose/ui/platform/AndroidComposeView;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z -PLandroidx/compose/ui/platform/AndroidComposeView;->getAndroidViewsHandler$ui_release()Landroidx/compose/ui/platform/AndroidViewsHandler; -PLandroidx/compose/ui/platform/AndroidComposeView;->isBadMotionEvent(Landroid/view/MotionEvent;)Z -PLandroidx/compose/ui/platform/AndroidComposeView;->isInBounds(Landroid/view/MotionEvent;)Z -PLandroidx/compose/ui/platform/AndroidComposeView;->isPositionChanged(Landroid/view/MotionEvent;)Z -PLandroidx/compose/ui/platform/AndroidComposeView;->onDetachedFromWindow()V -PLandroidx/compose/ui/platform/AndroidComposeView;->screenToLocal-MK-Hz9U(J)J -PLandroidx/compose/ui/platform/AndroidComposeView;->sendMotionEvent-8iAsVTc(Landroid/view/MotionEvent;)I -PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;->onViewDetachedFromWindow(Landroid/view/View;)V -PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getAccessibilityNodeProvider(Landroid/view/View;)Landroidx/core/view/accessibility/AccessibilityNodeProviderCompat; -PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getAccessibilitySelectionEnd(Landroidx/compose/ui/semantics/SemanticsNode;)I -PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getAccessibilitySelectionStart(Landroidx/compose/ui/semantics/SemanticsNode;)I -PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getCurrentSemanticsNodes()Ljava/util/Map; -PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getTextForTextField(Landroidx/compose/ui/semantics/SemanticsConfiguration;)Landroidx/compose/ui/text/AnnotatedString; -PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->populateAccessibilityNodeInfoProperties$canScrollBackward(Landroidx/compose/ui/semantics/ScrollAxisRange;)Z -PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->populateAccessibilityNodeInfoProperties$canScrollForward(Landroidx/compose/ui/semantics/ScrollAxisRange;)Z -PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->trimToSize(Ljava/lang/CharSequence;)Ljava/lang/CharSequence; -PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->access$enabled(Landroidx/compose/ui/semantics/SemanticsNode;)Z -PLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->access$excludeLineAndPageGranularities(Landroidx/compose/ui/semantics/SemanticsNode;)Z -PLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsN;->()V -PLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsN;->()V -PLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsN;->setPointerIcon(Landroid/view/View;Landroidx/compose/ui/input/pointer/PointerIcon;)V -PLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2$invoke$$inlined$onDispose$1;->dispose()V -PLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1$invoke$$inlined$onDispose$1;->dispose()V -PLandroidx/compose/ui/platform/AndroidViewConfiguration;->getTouchSlop()F -PLandroidx/compose/ui/platform/AndroidViewsHandler;->(Landroid/content/Context;)V -PLandroidx/compose/ui/platform/AndroidViewsHandler;->getLayoutNodeToHolder()Ljava/util/HashMap; -PLandroidx/compose/ui/platform/AndroidViewsHandler;->onLayout(ZIIII)V -PLandroidx/compose/ui/platform/AndroidViewsHandler;->onMeasure(II)V -PLandroidx/compose/ui/platform/AndroidViewsHandler;->requestLayout()V -PLandroidx/compose/ui/platform/CalculateMatrixToWindowApi29$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;Landroid/graphics/Matrix;)V -PLandroidx/compose/ui/platform/ComposeView;->getAccessibilityClassName()Ljava/lang/CharSequence; -PLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;->invoke()Ljava/lang/Object; -PLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$registered$1;->saveState()Landroid/os/Bundle; -PLandroidx/compose/ui/platform/InvertMatrixKt;->invertTo-JiSxe2E([F[F)Z -PLandroidx/compose/ui/platform/LayerMatrixCache;->calculateInverseMatrix-bWbORWo(Ljava/lang/Object;)[F -PLandroidx/compose/ui/platform/OutlineResolver;->isInOutline-k-4lQ0M(J)Z -PLandroidx/compose/ui/platform/RenderNodeApi29;->getClipToBounds()Z -PLandroidx/compose/ui/platform/RenderNodeLayer;->isInLayer-k-4lQ0M(J)Z -PLandroidx/compose/ui/platform/SemanticsNodeWithAdjustedBounds;->(Landroidx/compose/ui/semantics/SemanticsNode;Landroid/graphics/Rect;)V -PLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$listener$1;->onViewDetachedFromWindow(Landroid/view/View;)V -PLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$1;->onViewDetachedFromWindow(Landroid/view/View;)V -PLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;->onViewDetachedFromWindow(Landroid/view/View;)V -PLandroidx/compose/ui/platform/WrappedComposition;->dispose()V -PLandroidx/compose/ui/platform/accessibility/CollectionInfoKt;->calculateIfHorizontallyStacked(Ljava/util/ArrayList;)Z -PLandroidx/compose/ui/platform/accessibility/CollectionInfoKt;->hasCollectionInfo(Landroidx/compose/ui/semantics/SemanticsNode;)Z -PLandroidx/compose/ui/semantics/NodeLocationHolder$compareTo$child1$1;->(Landroidx/compose/ui/geometry/Rect;)V -PLandroidx/compose/ui/semantics/NodeLocationHolder$compareTo$child1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/ui/semantics/NodeLocationHolder$compareTo$child2$1;->(Landroidx/compose/ui/geometry/Rect;)V -PLandroidx/compose/ui/semantics/NodeLocationHolder$compareTo$child2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/ui/semantics/NodeLocationHolder;->compareTo(Ljava/lang/Object;)I -PLandroidx/compose/ui/semantics/SemanticsConfiguration;->get(Landroidx/compose/ui/semantics/SemanticsPropertyKey;)Ljava/lang/Object; -PLandroidx/compose/ui/semantics/SemanticsNode$emitFakeNodes$fakeNode$1;->(Landroidx/compose/ui/semantics/Role;)V -PLandroidx/compose/ui/semantics/SemanticsNode$fakeSemanticsNode$fakeNode$1;->(Lkotlin/jvm/functions/Function1;)V -PLandroidx/compose/ui/semantics/SemanticsNode$fakeSemanticsNode$fakeNode$1;->getSemanticsConfiguration()Landroidx/compose/ui/semantics/SemanticsConfiguration; -PLandroidx/compose/ui/semantics/SemanticsNode;->getBoundsInRoot()Landroidx/compose/ui/geometry/Rect; -PLandroidx/compose/ui/semantics/SemanticsSortKt;->findNodeByPredicateTraversal(Landroidx/compose/ui/node/LayoutNode;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/node/LayoutNode; -PLandroidx/compose/ui/text/AnnotatedString;->length()I -PLandroidx/compose/ui/text/input/TextInputServiceAndroid$textInputCommandEventLoop$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/compose/ui/unit/Velocity;->()V -PLandroidx/compose/ui/unit/Velocity;->(J)V -PLandroidx/compose/ui/unit/Velocity;->copy-OhffZ5M$default(JFFI)J -PLandroidx/compose/ui/unit/Velocity;->getX-impl(J)F -PLandroidx/compose/ui/unit/Velocity;->getY-impl(J)F -PLandroidx/compose/ui/unit/Velocity;->minus-AH228Gc(JJ)J -PLandroidx/compose/ui/unit/VelocityKt;->Velocity(FF)J -PLandroidx/compose/ui/window/PopupProperties;->(ZI)V -PLandroidx/compose/ui/window/PopupProperties;->(ZZZLandroidx/compose/ui/window/SecureFlagPolicy;ZZZ)V -PLandroidx/compose/ui/window/SecureFlagPolicy;->()V -PLandroidx/compose/ui/window/SecureFlagPolicy;->(ILjava/lang/String;)V -PLandroidx/core/app/ComponentActivity;->onSaveInstanceState(Landroid/os/Bundle;)V -PLandroidx/core/content/PermissionChecker;->AnimationState$default(FFI)Landroidx/compose/animation/core/AnimationState; -PLandroidx/core/graphics/TypefaceCompat;->()V -PLandroidx/core/graphics/TypefaceCompatApi29Impl;->()V -PLandroidx/core/graphics/TypefaceCompatApi29Impl;->createFromFontInfo(Landroid/content/Context;[Landroidx/core/provider/FontsContractCompat$FontInfo;I)Landroid/graphics/Typeface; -PLandroidx/core/graphics/TypefaceCompatApi29Impl;->findBaseFont(Landroid/graphics/fonts/FontFamily;I)Landroid/graphics/fonts/Font; -PLandroidx/core/graphics/TypefaceCompatApi29Impl;->getMatchScore(Landroid/graphics/fonts/FontStyle;Landroid/graphics/fonts/FontStyle;)I -PLandroidx/core/graphics/TypefaceCompatBaseImpl;->()V -PLandroidx/core/graphics/TypefaceCompatUtil$Api19Impl;->openFileDescriptor(Landroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/os/ParcelFileDescriptor; -PLandroidx/core/graphics/TypefaceCompatUtil;->mmap(Landroid/content/Context;Landroid/net/Uri;)Ljava/nio/MappedByteBuffer; -PLandroidx/core/math/MathUtils;->cancelConsumed(Lkotlinx/coroutines/channels/ReceiveChannel;Ljava/lang/Throwable;)V -PLandroidx/core/os/TraceCompat$Api18Impl;->beginSection(Ljava/lang/String;)V -PLandroidx/core/os/TraceCompat$Api18Impl;->endSection()V -PLandroidx/core/os/TraceCompat;->()V -PLandroidx/core/provider/FontProvider$$ExternalSyntheticLambda0;->()V -PLandroidx/core/provider/FontProvider$Api16Impl;->query(Landroid/content/ContentResolver;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)Landroid/database/Cursor; -PLandroidx/core/provider/FontProvider;->()V -PLandroidx/core/provider/FontProvider;->getFontFamilyResult(Landroid/content/Context;Landroidx/core/provider/FontRequest;)Landroidx/core/provider/FontsContractCompat$FontFamilyResult; -PLandroidx/core/provider/FontRequest;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)V -PLandroidx/core/provider/FontsContractCompat$FontFamilyResult;->(I[Landroidx/core/provider/FontsContractCompat$FontInfo;)V -PLandroidx/core/provider/FontsContractCompat$FontInfo;->(Landroid/net/Uri;IIZI)V -PLandroidx/core/util/Preconditions;->checkArgument(Ljava/lang/String;Z)V -PLandroidx/core/util/Preconditions;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)V -PLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->getAccessibilityNodeProvider(Landroid/view/View;)Landroid/view/accessibility/AccessibilityNodeProvider; -PLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->onInitializeAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V -PLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->onRequestSendAccessibilityEvent(Landroid/view/ViewGroup;Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z -PLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->sendAccessibilityEventUnchecked(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V -PLandroidx/core/view/AccessibilityDelegateCompat;->onInitializeAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V -PLandroidx/core/view/ViewCompat$Api16Impl;->getParentForAccessibility(Landroid/view/View;)Landroid/view/ViewParent; -PLandroidx/core/view/ViewKt$ancestors$1;->()V -PLandroidx/core/view/ViewKt$ancestors$1;->()V -PLandroidx/core/view/ViewKt$ancestors$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/accessibility/AccessibilityNodeInfo;Z)V -PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$$ExternalSyntheticApiModelOutline1;->m(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/lang/CharSequence;)V -PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$$ExternalSyntheticApiModelOutline2;->m(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/lang/CharSequence;)V -PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$$ExternalSyntheticApiModelOutline4;->m(Landroid/view/accessibility/AccessibilityNodeInfo;)Ljava/lang/CharSequence; -PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$$ExternalSyntheticApiModelOutline5;->m(Landroid/view/accessibility/AccessibilityNodeInfo;)Ljava/lang/CharSequence; -PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;->()V -PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;->(Ljava/lang/Object;ILjava/lang/String;Ljava/lang/Class;)V -PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->getHintText()Ljava/lang/CharSequence; -PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->getMovementGranularities()I -PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->getStateDescription()Ljava/lang/CharSequence; -PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setClassName(Ljava/lang/String;)V -PLandroidx/datastore/core/SingleProcessDataStore$handleUpdate$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/datastore/core/SingleProcessDataStore$transformAndWrite$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0;->(Ljava/lang/String;)V -PLandroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread; -PLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper;->()V -PLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API19;->()V -PLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API28;->()V -PLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API28;->getSigningSignatures(Landroid/content/pm/PackageManager;Ljava/lang/String;)[Landroid/content/pm/Signature; -PLandroidx/emoji2/text/DefaultEmojiCompatConfig;->create(Landroid/content/Context;)Landroidx/emoji2/text/FontRequestEmojiCompatConfig; -PLandroidx/emoji2/text/EmojiCompat$CompatInternal19$1;->(Landroidx/emoji2/text/EmojiCompat$CompatInternal19;)V -PLandroidx/emoji2/text/EmojiCompat$CompatInternal19$1;->onLoaded(Landroidx/emoji2/text/MetadataRepo;)V -PLandroidx/emoji2/text/EmojiCompat$ListenerDispatcher;->(Ljava/util/List;ILjava/lang/Throwable;)V -PLandroidx/emoji2/text/EmojiCompat$ListenerDispatcher;->run()V -PLandroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;->()V -PLandroidx/emoji2/text/EmojiCompat$SpanFactory;->()V -PLandroidx/emoji2/text/EmojiCompat;->get()Landroidx/emoji2/text/EmojiCompat; -PLandroidx/emoji2/text/EmojiCompat;->load()V -PLandroidx/emoji2/text/EmojiCompat;->onMetadataLoadSuccess()V -PLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0;->(Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader;Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;Ljava/util/concurrent/ThreadPoolExecutor;)V -PLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0;->run()V -PLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$1;->(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;Ljava/util/concurrent/ThreadPoolExecutor;)V -PLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$1;->onLoaded(Landroidx/emoji2/text/MetadataRepo;)V -PLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader;->load(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;)V -PLandroidx/emoji2/text/EmojiCompatInitializer$LoadEmojiCompatRunnable;->run()V -PLandroidx/emoji2/text/EmojiMetadata;->()V -PLandroidx/emoji2/text/EmojiMetadata;->(Landroidx/emoji2/text/MetadataRepo;I)V -PLandroidx/emoji2/text/EmojiMetadata;->getCodepointAt(I)I -PLandroidx/emoji2/text/EmojiMetadata;->getCodepointsLength()I -PLandroidx/emoji2/text/EmojiMetadata;->getMetadataItem()Landroidx/emoji2/text/flatbuffer/MetadataItem; -PLandroidx/emoji2/text/EmojiProcessor;->(Landroidx/emoji2/text/MetadataRepo;Landroidx/emoji2/text/EmojiCompat$SpanFactory;Landroidx/emoji2/text/DefaultGlyphChecker;)V -PLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontProviderHelper;->()V -PLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$$ExternalSyntheticLambda0;->(Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;)V -PLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$$ExternalSyntheticLambda0;->run()V -PLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->(Landroid/content/Context;Landroidx/core/provider/FontRequest;)V -PLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->cleanUp()V -PLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->load(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;)V -PLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->loadInternal()V -PLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->retrieveFontInfo()Landroidx/core/provider/FontsContractCompat$FontInfo; -PLandroidx/emoji2/text/FontRequestEmojiCompatConfig;->()V -PLandroidx/emoji2/text/FontRequestEmojiCompatConfig;->(Landroid/content/Context;Landroidx/core/provider/FontRequest;)V -PLandroidx/emoji2/text/MetadataListReader$ByteBufferReader;->(Ljava/nio/ByteBuffer;)V -PLandroidx/emoji2/text/MetadataListReader$ByteBufferReader;->readUnsignedInt()J -PLandroidx/emoji2/text/MetadataListReader$ByteBufferReader;->skip(I)V -PLandroidx/emoji2/text/MetadataListReader;->read(Ljava/nio/MappedByteBuffer;)Landroidx/emoji2/text/flatbuffer/MetadataList; -PLandroidx/emoji2/text/MetadataRepo$Node;->()V -PLandroidx/emoji2/text/MetadataRepo$Node;->(I)V -PLandroidx/emoji2/text/MetadataRepo$Node;->put(Landroidx/emoji2/text/EmojiMetadata;II)V -PLandroidx/emoji2/text/flatbuffer/MetadataItem;->()V -PLandroidx/emoji2/text/flatbuffer/MetadataList;->()V -PLandroidx/emoji2/text/flatbuffer/Table;->()V -PLandroidx/emoji2/text/flatbuffer/Table;->__offset(I)I -PLandroidx/emoji2/text/flatbuffer/Utf8Safe;->()V -PLandroidx/exifinterface/media/ExifInterface$ByteOrderedDataInputStream;->()V -PLandroidx/exifinterface/media/ExifInterface$ByteOrderedDataInputStream;->(Ljava/io/InputStream;)V -PLandroidx/exifinterface/media/ExifInterface$ByteOrderedDataInputStream;->(Ljava/io/InputStream;Ljava/nio/ByteOrder;)V -PLandroidx/exifinterface/media/ExifInterface$ByteOrderedDataInputStream;->([B)V -PLandroidx/exifinterface/media/ExifInterface$ByteOrderedDataInputStream;->readByte()B -PLandroidx/exifinterface/media/ExifInterface$ByteOrderedDataInputStream;->readInt()I -PLandroidx/exifinterface/media/ExifInterface$ByteOrderedDataInputStream;->readUnsignedShort()I -PLandroidx/exifinterface/media/ExifInterface$ByteOrderedDataInputStream;->skipFully(I)V -PLandroidx/exifinterface/media/ExifInterface$ExifAttribute;->(J[BII)V -PLandroidx/exifinterface/media/ExifInterface$ExifAttribute;->([BII)V -PLandroidx/exifinterface/media/ExifInterface$ExifAttribute;->createULong(JLjava/nio/ByteOrder;)Landroidx/exifinterface/media/ExifInterface$ExifAttribute; -PLandroidx/exifinterface/media/ExifInterface$ExifAttribute;->getIntValue(Ljava/nio/ByteOrder;)I -PLandroidx/exifinterface/media/ExifInterface$ExifAttribute;->getStringValue(Ljava/nio/ByteOrder;)Ljava/lang/String; -PLandroidx/exifinterface/media/ExifInterface$ExifAttribute;->getValue(Ljava/nio/ByteOrder;)Ljava/io/Serializable; -PLandroidx/exifinterface/media/ExifInterface$ExifTag;->(IIILjava/lang/String;)V -PLandroidx/exifinterface/media/ExifInterface$ExifTag;->(IILjava/lang/String;)V -PLandroidx/exifinterface/media/ExifInterface;->()V -PLandroidx/exifinterface/media/ExifInterface;->(Lcoil/decode/ExifInterfaceInputStream;)V -PLandroidx/exifinterface/media/ExifInterface;->addDefaultValuesForCompatibility()V -PLandroidx/exifinterface/media/ExifInterface;->getAttribute(Ljava/lang/String;)Ljava/lang/String; -PLandroidx/exifinterface/media/ExifInterface;->getExifAttribute(Ljava/lang/String;)Landroidx/exifinterface/media/ExifInterface$ExifAttribute; -PLandroidx/exifinterface/media/ExifInterface;->getJpegAttributes(Landroidx/exifinterface/media/ExifInterface$ByteOrderedDataInputStream;II)V -PLandroidx/exifinterface/media/ExifInterface;->getMimeType(Ljava/io/BufferedInputStream;)I -PLandroidx/lifecycle/CloseableCoroutineScope;->close()V -PLandroidx/lifecycle/DefaultLifecycleObserver;->onDestroy()V -PLandroidx/lifecycle/DefaultLifecycleObserver;->onPause()V -PLandroidx/lifecycle/DefaultLifecycleObserver;->onStop()V -PLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityDestroyed(Landroid/app/Activity;)V -PLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityPaused(Landroid/app/Activity;)V -PLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivitySaveInstanceState(Landroid/app/Activity;Landroid/os/Bundle;)V -PLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityStopped(Landroid/app/Activity;)V -PLandroidx/lifecycle/FlowLiveDataConversions$asFlow$1$2$1;->(Landroidx/lifecycle/LiveData;Landroidx/lifecycle/Observer;Lkotlin/coroutines/Continuation;)V -PLandroidx/lifecycle/FlowLiveDataConversions$asFlow$1$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -PLandroidx/lifecycle/FlowLiveDataConversions$asFlow$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/lifecycle/FlowLiveDataConversions$asFlow$1$2;->invoke()Ljava/lang/Object; -PLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;->onActivitySaveInstanceState(Landroid/app/Activity;Landroid/os/Bundle;)V -PLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;->onActivityStopped(Landroid/app/Activity;)V -PLandroidx/lifecycle/LiveData$ObserverWrapper;->detachObserver()V -PLandroidx/lifecycle/LiveData;->removeObserver(Landroidx/lifecycle/Observer;)V -PLandroidx/lifecycle/MediatorLiveData;->onInactive()V -PLandroidx/lifecycle/ProcessLifecycleOwner$3;->onActivityPaused(Landroid/app/Activity;)V -PLandroidx/lifecycle/ProcessLifecycleOwner$3;->onActivityStopped(Landroid/app/Activity;)V -PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityDestroyed(Landroid/app/Activity;)V -PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPaused(Landroid/app/Activity;)V -PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPreDestroyed(Landroid/app/Activity;)V -PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPrePaused(Landroid/app/Activity;)V -PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPreStopped(Landroid/app/Activity;)V -PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivitySaveInstanceState(Landroid/app/Activity;Landroid/os/Bundle;)V -PLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityStopped(Landroid/app/Activity;)V -PLandroidx/lifecycle/ReportFragment;->onDestroy()V -PLandroidx/lifecycle/ReportFragment;->onPause()V -PLandroidx/lifecycle/ReportFragment;->onStop()V -PLandroidx/lifecycle/SavedStateHandle$$ExternalSyntheticLambda0;->saveState()Landroid/os/Bundle; -PLandroidx/lifecycle/SavedStateHandle;->$r8$lambda$aMir0GWwzPQviKVGE0DPm0kayew(Landroidx/lifecycle/SavedStateHandle;)Landroid/os/Bundle; -PLandroidx/lifecycle/SavedStateHandle;->(Ljava/util/HashMap;)V -PLandroidx/lifecycle/SavedStateHandlesProvider;->saveState()Landroid/os/Bundle; -PLandroidx/lifecycle/ViewModel;->closeWithRuntimeException(Ljava/lang/Object;)V -PLandroidx/lifecycle/ViewModel;->onCleared()V -PLandroidx/lifecycle/ViewModelStore;->clear()V -PLandroidx/metrics/performance/JankStatsApi24Impl;->removeFrameMetricsListenerDelegate(Landroidx/metrics/performance/JankStatsApi24Impl$$ExternalSyntheticLambda0;Landroid/view/Window;)V -PLandroidx/metrics/performance/PerformanceMetricsState;->returnStateDataToPool$metrics_performance_release(Landroidx/metrics/performance/PerformanceMetricsState$StateData;)V -PLandroidx/navigation/NavBackStackEntryState$Companion$CREATOR$1;->()V -PLandroidx/navigation/NavBackStackEntryState;->()V -PLandroidx/navigation/NavBackStackEntryState;->(Landroidx/navigation/NavBackStackEntry;)V -PLandroidx/navigation/NavController$NavControllerNavigatorState;->pop(Landroidx/navigation/NavBackStackEntry;Z)V -PLandroidx/navigation/NavController$NavControllerNavigatorState;->popWithTransition(Landroidx/navigation/NavBackStackEntry;Z)V -PLandroidx/navigation/NavController$popBackStackInternal$2;->(Lkotlin/jvm/internal/Ref$BooleanRef;Lkotlin/jvm/internal/Ref$BooleanRef;Landroidx/navigation/NavController;ZLkotlin/collections/ArrayDeque;)V -PLandroidx/navigation/NavController$popBackStackInternal$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/navigation/NavController$popBackStackInternal$3;->()V -PLandroidx/navigation/NavController$popBackStackInternal$3;->()V -PLandroidx/navigation/NavController$popBackStackInternal$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/navigation/NavController$popBackStackInternal$4;->(Landroidx/navigation/NavController;)V -PLandroidx/navigation/NavController$popBackStackInternal$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/navigation/NavController$popBackStackInternal$6;->()V -PLandroidx/navigation/NavController$popBackStackInternal$6;->()V -PLandroidx/navigation/NavController$popBackStackInternal$6;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/navigation/NavController$popBackStackInternal$7;->(Landroidx/navigation/NavController;)V -PLandroidx/navigation/NavController$popBackStackInternal$7;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/navigation/NavController;->getGraph()Landroidx/navigation/NavGraph; -PLandroidx/navigation/NavController;->navigate$default(Landroidx/navigation/NavHostController;Ljava/lang/String;Landroidx/navigation/NavOptions;I)V -PLandroidx/navigation/NavController;->popBackStackInternal(IZZ)Z -PLandroidx/navigation/NavController;->popEntryFromBackStack(Landroidx/navigation/NavBackStackEntry;ZLkotlin/collections/ArrayDeque;)V -PLandroidx/navigation/NavController;->unlinkChildFromParent$navigation_runtime_release(Landroidx/navigation/NavBackStackEntry;)V -PLandroidx/navigation/NavControllerViewModel;->onCleared()V -PLandroidx/navigation/NavDeepLink$pattern$2;->invoke()Ljava/lang/Object; -PLandroidx/navigation/NavDestination$DeepLinkMatch;->(Landroidx/navigation/NavDestination;Landroid/os/Bundle;ZZI)V -PLandroidx/navigation/NavGraph$Companion$findStartDestination$1;->()V -PLandroidx/navigation/NavGraph$Companion$findStartDestination$1;->()V -PLandroidx/navigation/NavGraph$Companion$findStartDestination$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/navigation/NavGraph$Companion;->findStartDestination(Landroidx/navigation/NavGraph;)Landroidx/navigation/NavDestination; -PLandroidx/navigation/NavGraph;->findNode(IZ)Landroidx/navigation/NavDestination; -PLandroidx/navigation/NavOptions$Builder;->()V -PLandroidx/navigation/NavOptions;->(ZZIZZIIII)V -PLandroidx/navigation/NavOptionsBuilder;->()V -PLandroidx/navigation/NavOptionsBuilderKt;->navOptions(Lkotlin/jvm/functions/Function1;)Landroidx/navigation/NavOptions; -PLandroidx/navigation/NavigatorState;->pop(Landroidx/navigation/NavBackStackEntry;Z)V -PLandroidx/navigation/NavigatorState;->popWithTransition(Landroidx/navigation/NavBackStackEntry;Z)V -PLandroidx/navigation/PopUpToBuilder;->()V -PLandroidx/navigation/compose/BackStackEntryIdViewModel;->onCleared()V -PLandroidx/navigation/compose/ComposeNavigator;->popBackStack(Landroidx/navigation/NavBackStackEntry;Z)V -PLandroidx/navigation/compose/NavHostKt$NavHost$4$1$1$invoke$$inlined$onDispose$1;->dispose()V -PLandroidx/navigation/compose/NavHostKt$NavHost$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLandroidx/profileinstaller/ProfileInstallReceiver$$ExternalSyntheticLambda0;->()V -PLandroidx/profileinstaller/ProfileInstaller$1;->()V -PLandroidx/profileinstaller/ProfileInstaller$1;->onResultReceived(ILjava/lang/Object;)V -PLandroidx/profileinstaller/ProfileInstaller$2;->()V -PLandroidx/profileinstaller/ProfileInstaller;->()V -PLandroidx/profileinstaller/ProfileInstaller;->writeProfile(Landroid/content/Context;Ljava/util/concurrent/Executor;Landroidx/profileinstaller/ProfileInstaller$DiagnosticsCallback;Z)V -PLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda1;->run()V -PLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda2;->(Landroid/content/Context;)V -PLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda2;->run()V -PLandroidx/room/InvalidationTracker;->removeObserver(Landroidx/room/InvalidationTracker$Observer;)V -PLandroidx/room/InvalidationTracker;->stopTrackingTable(Landroidx/sqlite/db/SupportSQLiteDatabase;I)V -PLandroidx/room/RoomTrackingLiveData;->onInactive()V -PLandroidx/savedstate/SavedStateRegistryController;->performSave(Landroid/os/Bundle;)V -PLandroidx/work/impl/model/WorkSpecDao_Impl$13;->finalize()V -PLcoil/EventListener$Companion$NONE$1;->decodeEnd()V -PLcoil/EventListener$Companion$NONE$1;->decodeStart()V -PLcoil/EventListener$Companion$NONE$1;->fetchEnd()V -PLcoil/EventListener$Companion$NONE$1;->onCancel()V -PLcoil/EventListener$Companion$NONE$1;->onSuccess()V -PLcoil/RealImageLoader;->onSuccess(Lcoil/request/SuccessResult;Lcoil/target/Target;Lcoil/EventListener;)V -PLcoil/compose/AsyncImagePainter$Companion$DefaultTransform$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLcoil/compose/AsyncImagePainter$State$Loading;->equals(Ljava/lang/Object;)Z -PLcoil/compose/AsyncImagePainter$State$Success;->(Landroidx/compose/ui/graphics/painter/Painter;Lcoil/request/SuccessResult;)V -PLcoil/compose/AsyncImagePainter$State$Success;->getPainter()Landroidx/compose/ui/graphics/painter/Painter; -PLcoil/compose/AsyncImagePainter$onRemembered$1$3;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLcoil/compose/AsyncImagePainter$updateRequest$$inlined$target$default$1;->onSuccess(Landroid/graphics/drawable/Drawable;)V -PLcoil/compose/AsyncImagePainter;->onForgotten()V -PLcoil/compose/AsyncImagePainter;->toPainter(Landroid/graphics/drawable/Drawable;)Landroidx/compose/ui/graphics/painter/Painter; -PLcoil/compose/AsyncImagePainterKt$FakeTransitionTarget$1;->()V -PLcoil/compose/AsyncImagePainterKt;->()V -PLcoil/compose/ContentPainterModifier;->equals(Ljava/lang/Object;)Z -PLcoil/compose/SingletonAsyncImageKt;->AsyncImage-3HmZ8SU(Ljava/lang/Object;Ljava/lang/String;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;ILandroidx/compose/runtime/Composer;II)V -PLcoil/decode/BitmapFactoryDecoder$ExceptionCatchingSource;->(Lokio/BufferedSource;)V -PLcoil/decode/BitmapFactoryDecoder$ExceptionCatchingSource;->read(Lokio/Buffer;J)J -PLcoil/decode/BitmapFactoryDecoder$Factory;->create(Lcoil/fetch/SourceResult;Lcoil/request/Options;)Lcoil/decode/Decoder; -PLcoil/decode/BitmapFactoryDecoder$decode$1;->(Lcoil/decode/BitmapFactoryDecoder;Lkotlin/coroutines/Continuation;)V -PLcoil/decode/BitmapFactoryDecoder$decode$2$1;->(Lcoil/decode/BitmapFactoryDecoder;)V -PLcoil/decode/BitmapFactoryDecoder$decode$2$1;->invoke()Ljava/lang/Object; -PLcoil/decode/BitmapFactoryDecoder;->(Lcoil/decode/ImageSource;Lcoil/request/Options;Lkotlinx/coroutines/sync/SemaphoreImpl;I)V -PLcoil/decode/BitmapFactoryDecoder;->access$decode(Lcoil/decode/BitmapFactoryDecoder;Landroid/graphics/BitmapFactory$Options;)Lcoil/decode/DecodeResult; -PLcoil/decode/BitmapFactoryDecoder;->decode(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLcoil/decode/DecodeResult;->(Landroid/graphics/drawable/BitmapDrawable;Z)V -PLcoil/decode/DecodeUtils;->computeSizeMultiplier(IIIII)D -PLcoil/decode/ExifData;->()V -PLcoil/decode/ExifData;->(IZ)V -PLcoil/decode/ExifInterfaceInputStream;->(Ljava/io/InputStream;)V -PLcoil/decode/ExifInterfaceInputStream;->read([BII)I -PLcoil/decode/ExifUtils;->()V -PLcoil/decode/ExifUtilsKt;->()V -PLcoil/decode/FileImageSource;->(Lokio/Path;Lokio/FileSystem;Ljava/lang/String;Ljava/io/Closeable;)V -PLcoil/decode/FileImageSource;->close()V -PLcoil/decode/FileImageSource;->getMetadata()Lcoil/decode/ImageSource$Metadata; -PLcoil/decode/FileImageSource;->source()Lokio/BufferedSource; -PLcoil/decode/ImageSource;->()V -PLcoil/decode/SvgDecodeUtils;->()V -PLcoil/decode/SvgDecoder$Factory;->create(Lcoil/fetch/SourceResult;Lcoil/request/Options;)Lcoil/decode/Decoder; -PLcoil/decode/SvgDecoder$decode$2;->(Lcoil/decode/SvgDecoder;)V -PLcoil/decode/SvgDecoder$decode$2;->invoke()Ljava/lang/Object; -PLcoil/decode/SvgDecoder;->(Lcoil/decode/ImageSource;Lcoil/request/Options;Z)V -PLcoil/decode/SvgDecoder;->decode(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLcoil/disk/DiskLruCache$Editor;->(Lcoil/disk/DiskLruCache;Lcoil/disk/DiskLruCache$Entry;)V -PLcoil/disk/DiskLruCache$Editor;->complete(Z)V -PLcoil/disk/DiskLruCache$Editor;->file(I)Lokio/Path; -PLcoil/disk/DiskLruCache$Entry;->(Lcoil/disk/DiskLruCache;Ljava/lang/String;)V -PLcoil/disk/DiskLruCache$Entry;->snapshot()Lcoil/disk/DiskLruCache$Snapshot; -PLcoil/disk/DiskLruCache$Snapshot;->(Lcoil/disk/DiskLruCache;Lcoil/disk/DiskLruCache$Entry;)V -PLcoil/disk/DiskLruCache$Snapshot;->close()V -PLcoil/disk/DiskLruCache$Snapshot;->file(I)Lokio/Path; -PLcoil/disk/DiskLruCache;->access$completeEdit(Lcoil/disk/DiskLruCache;Lcoil/disk/DiskLruCache$Editor;Z)V -PLcoil/disk/DiskLruCache;->edit(Ljava/lang/String;)Lcoil/disk/DiskLruCache$Editor; -PLcoil/disk/FaultHidingSink;->flush()V -PLcoil/disk/FaultHidingSink;->write(Lokio/Buffer;J)V -PLcoil/disk/RealDiskCache$RealEditor;->(Lcoil/disk/DiskLruCache$Editor;)V -PLcoil/disk/RealDiskCache$RealEditor;->commitAndGet()Lcoil/disk/RealDiskCache$RealSnapshot; -PLcoil/disk/RealDiskCache$RealEditor;->getData()Lokio/Path; -PLcoil/disk/RealDiskCache$RealEditor;->getMetadata()Lokio/Path; -PLcoil/disk/RealDiskCache$RealSnapshot;->(Lcoil/disk/DiskLruCache$Snapshot;)V -PLcoil/disk/RealDiskCache$RealSnapshot;->close()V -PLcoil/disk/RealDiskCache$RealSnapshot;->closeAndEdit()Lcoil/disk/RealDiskCache$RealEditor; -PLcoil/disk/RealDiskCache$RealSnapshot;->getData()Lokio/Path; -PLcoil/disk/RealDiskCache$RealSnapshot;->getMetadata()Lokio/Path; -PLcoil/disk/RealDiskCache;->edit(Ljava/lang/String;)Lcoil/disk/RealDiskCache$RealEditor; -PLcoil/disk/RealDiskCache;->getFileSystem()Lokio/FileSystem; -PLcoil/fetch/FetchResult;->()V -PLcoil/fetch/HttpUriFetcher$executeNetworkRequest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLcoil/fetch/HttpUriFetcher$fetch$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLcoil/fetch/HttpUriFetcher;->getFileSystem()Lokio/FileSystem; -PLcoil/fetch/HttpUriFetcher;->getMimeType$coil_base_release(Ljava/lang/String;Lokhttp3/MediaType;)Ljava/lang/String; -PLcoil/fetch/HttpUriFetcher;->toCacheResponse(Lcoil/disk/DiskCache$Snapshot;)Lcoil/network/CacheResponse; -PLcoil/fetch/HttpUriFetcher;->toImageSource(Lcoil/disk/DiskCache$Snapshot;)Lcoil/decode/FileImageSource; -PLcoil/fetch/HttpUriFetcher;->writeToDiskCache(Lcoil/disk/DiskCache$Snapshot;Lokhttp3/Request;Lokhttp3/Response;Lcoil/network/CacheResponse;)Lcoil/disk/DiskCache$Snapshot; -PLcoil/fetch/SourceResult;->(Lcoil/decode/ImageSource;Ljava/lang/String;I)V -PLcoil/intercept/EngineInterceptor$ExecuteResult;->(Landroid/graphics/drawable/Drawable;ZILjava/lang/String;)V -PLcoil/intercept/EngineInterceptor$decode$1;->(Lcoil/intercept/EngineInterceptor;Lkotlin/coroutines/Continuation;)V -PLcoil/intercept/EngineInterceptor$execute$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLcoil/intercept/EngineInterceptor$execute$executeResult$1;->(Lcoil/intercept/EngineInterceptor;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlin/jvm/internal/Ref$ObjectRef;Lcoil/request/ImageRequest;Ljava/lang/Object;Lkotlin/jvm/internal/Ref$ObjectRef;Lcoil/EventListener;Lkotlin/coroutines/Continuation;)V -PLcoil/intercept/EngineInterceptor$execute$executeResult$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -PLcoil/intercept/EngineInterceptor$execute$executeResult$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcoil/intercept/EngineInterceptor$execute$executeResult$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLcoil/intercept/EngineInterceptor$fetch$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLcoil/intercept/EngineInterceptor$intercept$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLcoil/intercept/EngineInterceptor;->access$decode(Lcoil/intercept/EngineInterceptor;Lcoil/fetch/SourceResult;Lcoil/ComponentRegistry;Lcoil/request/ImageRequest;Ljava/lang/Object;Lcoil/request/Options;Lcoil/EventListener;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLcoil/intercept/RealInterceptorChain$proceed$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLcoil/intercept/RealInterceptorChain;->checkRequest(Lcoil/request/ImageRequest;Lcoil/intercept/Interceptor;)V -PLcoil/memory/MemoryCache$Key;->equals(Ljava/lang/Object;)Z -PLcoil/memory/MemoryCache$Value;->(Landroid/graphics/Bitmap;Ljava/util/Map;)V -PLcoil/memory/MemoryCacheService;->newResult(Lcoil/intercept/RealInterceptorChain;Lcoil/request/ImageRequest;Lcoil/memory/MemoryCache$Key;Lcoil/memory/MemoryCache$Value;)Lcoil/request/SuccessResult; -PLcoil/memory/RealMemoryCache;->set(Lcoil/memory/MemoryCache$Key;Lcoil/memory/MemoryCache$Value;)V -PLcoil/memory/RealStrongMemoryCache$InternalValue;->(Landroid/graphics/Bitmap;Ljava/util/Map;I)V -PLcoil/memory/RealStrongMemoryCache$cache$1;->entryRemoved(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V -PLcoil/memory/RealStrongMemoryCache$cache$1;->sizeOf(Ljava/lang/Object;Ljava/lang/Object;)I -PLcoil/memory/RealStrongMemoryCache;->set(Lcoil/memory/MemoryCache$Key;Landroid/graphics/Bitmap;Ljava/util/Map;)V -PLcoil/memory/RealWeakMemoryCache$InternalValue;->(ILjava/lang/ref/WeakReference;Ljava/util/Map;I)V -PLcoil/memory/RealWeakMemoryCache;->set(Lcoil/memory/MemoryCache$Key;Landroid/graphics/Bitmap;Ljava/util/Map;I)V -PLcoil/network/CacheResponse$cacheControl$2;->(Lcoil/network/CacheResponse;)V -PLcoil/network/CacheResponse$cacheControl$2;->invoke()Ljava/lang/Object; -PLcoil/network/CacheResponse$contentType$2;->(Lcoil/network/CacheResponse;)V -PLcoil/network/CacheResponse$contentType$2;->invoke()Ljava/lang/Object; -PLcoil/network/CacheResponse;->(Lokhttp3/Response;)V -PLcoil/network/CacheResponse;->writeTo(Lokio/RealBufferedSink;)V -PLcoil/network/CacheStrategy$Companion;->combineHeaders(Lokhttp3/Headers;Lokhttp3/Headers;)Lokhttp3/Headers; -PLcoil/network/CacheStrategy$Companion;->isEndToEnd(Ljava/lang/String;)Z -PLcoil/request/BaseRequestDelegate;->complete()V -PLcoil/request/CachePolicy$EnumUnboxingLocalUtility;->getWriteEnabled(I)Z -PLcoil/request/ImageResult;->()V -PLcoil/request/SuccessResult;->(Landroid/graphics/drawable/Drawable;Lcoil/request/ImageRequest;ILcoil/memory/MemoryCache$Key;Ljava/lang/String;ZZ)V -PLcoil/request/SuccessResult;->getRequest()Lcoil/request/ImageRequest; -PLcoil/size/-Sizes;->isOriginal(Lcoil/size/Size;)Z -PLcoil/size/Size;->equals(Ljava/lang/Object;)Z -PLcoil/transition/NoneTransition$Factory;->create(Lcoil/transition/TransitionTarget;Lcoil/request/ImageResult;)Lcoil/transition/NoneTransition; -PLcoil/transition/NoneTransition;->(Lcoil/transition/TransitionTarget;Lcoil/request/ImageResult;)V -PLcoil/util/-Bitmaps;->getAllocationByteCountCompat(Landroid/graphics/Bitmap;)I -PLcoil/util/-SvgUtils;->toPx(Lcoil/size/Dimension;I)F -PLcoil/util/-SvgUtils;->toSoftware(Landroid/graphics/Bitmap$Config;)Landroid/graphics/Bitmap$Config; -PLcoil/util/-Utils;->closeQuietly(Ljava/io/Closeable;)V -PLcoil/util/-Utils;->toPx(Lcoil/size/Dimension;I)I -PLcoil/util/ContinuationCallback;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLcoil/util/ContinuationCallback;->onFailure(Lokhttp3/internal/connection/RealCall;Ljava/io/IOException;)V -PLcoil/util/ContinuationCallback;->onResponse(Lokhttp3/Response;)V -PLcoil/util/Time$provider$1;->()V -PLcoil/util/Time$provider$1;->()V -PLcoil/util/Time$provider$1;->invoke()Ljava/lang/Object; -PLcoil/util/Time;->()V -PLcom/caverock/androidsvg/CSSParser$Ruleset;->()V -PLcom/caverock/androidsvg/IntegerParser;->(JI)V -PLcom/caverock/androidsvg/NumberParser;->()V -PLcom/caverock/androidsvg/NumberParser;->()V -PLcom/caverock/androidsvg/PreserveAspectRatio$Alignment;->()V -PLcom/caverock/androidsvg/PreserveAspectRatio$Alignment;->(ILjava/lang/String;)V -PLcom/caverock/androidsvg/PreserveAspectRatio;->()V -PLcom/caverock/androidsvg/PreserveAspectRatio;->(Lcom/caverock/androidsvg/PreserveAspectRatio$Alignment;I)V -PLcom/caverock/androidsvg/PreserveAspectRatio;->equals(Ljava/lang/Object;)Z -PLcom/caverock/androidsvg/SVG$Box;->(FFFF)V -PLcom/caverock/androidsvg/SVG$Box;->(Lcom/caverock/androidsvg/SVG$Box;)V -PLcom/caverock/androidsvg/SVG$Circle;->()V -PLcom/caverock/androidsvg/SVG$Colour;->()V -PLcom/caverock/androidsvg/SVG$Colour;->(I)V -PLcom/caverock/androidsvg/SVG$Defs;->()V -PLcom/caverock/androidsvg/SVG$GradientElement;->()V -PLcom/caverock/androidsvg/SVG$GradientElement;->addChild(Lcom/caverock/androidsvg/SVG$SvgObject;)V -PLcom/caverock/androidsvg/SVG$GradientElement;->getChildren()Ljava/util/List; -PLcom/caverock/androidsvg/SVG$GraphicsElement;->()V -PLcom/caverock/androidsvg/SVG$Group;->()V -PLcom/caverock/androidsvg/SVG$Length;->(F)V -PLcom/caverock/androidsvg/SVG$Length;->(FI)V -PLcom/caverock/androidsvg/SVG$Length;->floatValue(Lcom/caverock/androidsvg/SVGAndroidRenderer;)F -PLcom/caverock/androidsvg/SVG$Length;->floatValue(Lcom/caverock/androidsvg/SVGAndroidRenderer;F)F -PLcom/caverock/androidsvg/SVG$Length;->floatValueX(Lcom/caverock/androidsvg/SVGAndroidRenderer;)F -PLcom/caverock/androidsvg/SVG$Length;->floatValueY(Lcom/caverock/androidsvg/SVGAndroidRenderer;)F -PLcom/caverock/androidsvg/SVG$Length;->isNegative()Z -PLcom/caverock/androidsvg/SVG$Length;->isZero()Z -PLcom/caverock/androidsvg/SVG$Line;->()V -PLcom/caverock/androidsvg/SVG$PaintReference;->(Ljava/lang/String;Lcom/caverock/androidsvg/SVG$SvgPaint;)V -PLcom/caverock/androidsvg/SVG$Path;->()V -PLcom/caverock/androidsvg/SVG$PathDefinition;->()V -PLcom/caverock/androidsvg/SVG$PathDefinition;->addCommand(B)V -PLcom/caverock/androidsvg/SVG$PathDefinition;->close()V -PLcom/caverock/androidsvg/SVG$PathDefinition;->coordsEnsure(I)V -PLcom/caverock/androidsvg/SVG$PathDefinition;->cubicTo(FFFFFF)V -PLcom/caverock/androidsvg/SVG$PathDefinition;->enumeratePath(Lcom/caverock/androidsvg/SVG$PathInterface;)V -PLcom/caverock/androidsvg/SVG$PathDefinition;->lineTo(FF)V -PLcom/caverock/androidsvg/SVG$PathDefinition;->moveTo(FF)V -PLcom/caverock/androidsvg/SVG$Stop;->()V -PLcom/caverock/androidsvg/SVG$Stop;->getChildren()Ljava/util/List; -PLcom/caverock/androidsvg/SVG$Style;->()V -PLcom/caverock/androidsvg/SVG$Style;->clone()Ljava/lang/Object; -PLcom/caverock/androidsvg/SVG$Svg;->()V -PLcom/caverock/androidsvg/SVG$SvgConditionalContainer;->()V -PLcom/caverock/androidsvg/SVG$SvgConditionalContainer;->addChild(Lcom/caverock/androidsvg/SVG$SvgObject;)V -PLcom/caverock/androidsvg/SVG$SvgConditionalContainer;->getChildren()Ljava/util/List; -PLcom/caverock/androidsvg/SVG$SvgConditionalElement;->()V -PLcom/caverock/androidsvg/SVG$SvgElement;->()V -PLcom/caverock/androidsvg/SVG$SvgElementBase;->()V -PLcom/caverock/androidsvg/SVG$SvgLinearGradient;->()V -PLcom/caverock/androidsvg/SVG$SvgObject;->()V -PLcom/caverock/androidsvg/SVG$SvgPaint;->()V -PLcom/caverock/androidsvg/SVG$SvgPreserveAspectRatioContainer;->()V -PLcom/caverock/androidsvg/SVG$SvgViewBoxContainer;->()V -PLcom/caverock/androidsvg/SVG$Unit$EnumUnboxingLocalUtility;->valueOf(Ljava/lang/String;)I -PLcom/caverock/androidsvg/SVG;->()V -PLcom/caverock/androidsvg/SVG;->getElementById(Lcom/caverock/androidsvg/SVG$SvgContainer;Ljava/lang/String;)Lcom/caverock/androidsvg/SVG$SvgElementBase; -PLcom/caverock/androidsvg/SVG;->getFromInputStream(Ljava/io/InputStream;)Lcom/caverock/androidsvg/SVG; -PLcom/caverock/androidsvg/SVG;->resolveIRI(Ljava/lang/String;)Lcom/caverock/androidsvg/SVG$SvgElementBase; -PLcom/caverock/androidsvg/SVGAndroidRenderer$PathConverter;->(Lcom/caverock/androidsvg/SVG$PathDefinition;)V -PLcom/caverock/androidsvg/SVGAndroidRenderer$PathConverter;->close()V -PLcom/caverock/androidsvg/SVGAndroidRenderer$PathConverter;->cubicTo(FFFFFF)V -PLcom/caverock/androidsvg/SVGAndroidRenderer$PathConverter;->lineTo(FF)V -PLcom/caverock/androidsvg/SVGAndroidRenderer$PathConverter;->moveTo(FF)V -PLcom/caverock/androidsvg/SVGAndroidRenderer$RendererState;->()V -PLcom/caverock/androidsvg/SVGAndroidRenderer;->(Landroid/graphics/Canvas;)V -PLcom/caverock/androidsvg/SVGAndroidRenderer;->calculatePathBounds(Landroid/graphics/Path;)Lcom/caverock/androidsvg/SVG$Box; -PLcom/caverock/androidsvg/SVGAndroidRenderer;->calculateViewBoxTransform(Lcom/caverock/androidsvg/SVG$Box;Lcom/caverock/androidsvg/SVG$Box;Lcom/caverock/androidsvg/PreserveAspectRatio;)Landroid/graphics/Matrix; -PLcom/caverock/androidsvg/SVGAndroidRenderer;->checkForClipPath(Lcom/caverock/androidsvg/SVG$SvgElement;Lcom/caverock/androidsvg/SVG$Box;)V -PLcom/caverock/androidsvg/SVGAndroidRenderer;->checkForGradientsAndPatterns(Lcom/caverock/androidsvg/SVG$SvgElement;)V -PLcom/caverock/androidsvg/SVGAndroidRenderer;->checkGenericFont(Ljava/lang/String;Ljava/lang/Integer;I)Landroid/graphics/Typeface; -PLcom/caverock/androidsvg/SVGAndroidRenderer;->colourWithOpacity(IF)I -PLcom/caverock/androidsvg/SVGAndroidRenderer;->display()Z -PLcom/caverock/androidsvg/SVGAndroidRenderer;->doStroke(Landroid/graphics/Path;)V -PLcom/caverock/androidsvg/SVGAndroidRenderer;->findInheritFromAncestorState(Lcom/caverock/androidsvg/SVG$SvgObject;)Lcom/caverock/androidsvg/SVGAndroidRenderer$RendererState; -PLcom/caverock/androidsvg/SVGAndroidRenderer;->findInheritFromAncestorState(Lcom/caverock/androidsvg/SVG$SvgObject;Lcom/caverock/androidsvg/SVGAndroidRenderer$RendererState;)V -PLcom/caverock/androidsvg/SVGAndroidRenderer;->isSpecified(Lcom/caverock/androidsvg/SVG$Style;J)Z -PLcom/caverock/androidsvg/SVGAndroidRenderer;->makePathAndBoundingBox(Lcom/caverock/androidsvg/SVG$Circle;)Landroid/graphics/Path; -PLcom/caverock/androidsvg/SVGAndroidRenderer;->pushLayer()Z -PLcom/caverock/androidsvg/SVGAndroidRenderer;->render(Lcom/caverock/androidsvg/SVG$Svg;Lcom/caverock/androidsvg/SVG$Box;Lcom/caverock/androidsvg/SVG$Box;Lcom/caverock/androidsvg/PreserveAspectRatio;)V -PLcom/caverock/androidsvg/SVGAndroidRenderer;->render(Lcom/caverock/androidsvg/SVG$SvgObject;)V -PLcom/caverock/androidsvg/SVGAndroidRenderer;->renderChildren(Lcom/caverock/androidsvg/SVG$SvgContainer;Z)V -PLcom/caverock/androidsvg/SVGAndroidRenderer;->renderMarkers(Lcom/caverock/androidsvg/SVG$GraphicsElement;)V -PLcom/caverock/androidsvg/SVGAndroidRenderer;->setPaintColour(Lcom/caverock/androidsvg/SVGAndroidRenderer$RendererState;ZLcom/caverock/androidsvg/SVG$SvgPaint;)V -PLcom/caverock/androidsvg/SVGAndroidRenderer;->statePop()V -PLcom/caverock/androidsvg/SVGAndroidRenderer;->statePush()V -PLcom/caverock/androidsvg/SVGAndroidRenderer;->updateParentBoundingBox(Lcom/caverock/androidsvg/SVG$SvgElement;)V -PLcom/caverock/androidsvg/SVGAndroidRenderer;->viewportFill()V -PLcom/caverock/androidsvg/SVGAndroidRenderer;->visible()Z -PLcom/caverock/androidsvg/SVGParser$$ExternalSyntheticOutline0;->m(Lorg/xml/sax/Attributes;I)I -PLcom/caverock/androidsvg/SVGParser$SVGAttr;->()V -PLcom/caverock/androidsvg/SVGParser$SVGAttr;->(ILjava/lang/String;)V -PLcom/caverock/androidsvg/SVGParser$SVGAttr;->fromString(Ljava/lang/String;)Lcom/caverock/androidsvg/SVGParser$SVGAttr; -PLcom/caverock/androidsvg/SVGParser$SVGAttr;->values()[Lcom/caverock/androidsvg/SVGParser$SVGAttr; -PLcom/caverock/androidsvg/SVGParser$SVGElem;->()V -PLcom/caverock/androidsvg/SVGParser$SVGElem;->(ILjava/lang/String;)V -PLcom/caverock/androidsvg/SVGParser$SVGElem;->values()[Lcom/caverock/androidsvg/SVGParser$SVGElem; -PLcom/caverock/androidsvg/SVGParser$TextScanner;->(Ljava/lang/String;)V -PLcom/caverock/androidsvg/SVGParser$TextScanner;->advanceChar()I -PLcom/caverock/androidsvg/SVGParser$TextScanner;->checkedNextFloat(F)F -PLcom/caverock/androidsvg/SVGParser$TextScanner;->consume(C)Z -PLcom/caverock/androidsvg/SVGParser$TextScanner;->empty()Z -PLcom/caverock/androidsvg/SVGParser$TextScanner;->isWhitespace(I)Z -PLcom/caverock/androidsvg/SVGParser$TextScanner;->nextChar()Ljava/lang/Integer; -PLcom/caverock/androidsvg/SVGParser$TextScanner;->nextFloat()F -PLcom/caverock/androidsvg/SVGParser$TextScanner;->nextToken(CZ)Ljava/lang/String; -PLcom/caverock/androidsvg/SVGParser$TextScanner;->skipCommaWhitespace()Z -PLcom/caverock/androidsvg/SVGParser$TextScanner;->skipWhitespace()V -PLcom/caverock/androidsvg/SVGParser$XPPAttributesWrapper;->(Lorg/xmlpull/v1/XmlPullParser;)V -PLcom/caverock/androidsvg/SVGParser$XPPAttributesWrapper;->getLength()I -PLcom/caverock/androidsvg/SVGParser$XPPAttributesWrapper;->getLocalName(I)Ljava/lang/String; -PLcom/caverock/androidsvg/SVGParser$XPPAttributesWrapper;->getQName(I)Ljava/lang/String; -PLcom/caverock/androidsvg/SVGParser$XPPAttributesWrapper;->getValue(I)Ljava/lang/String; -PLcom/caverock/androidsvg/SVGParser;->()V -PLcom/caverock/androidsvg/SVGParser;->endElement(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V -PLcom/caverock/androidsvg/SVGParser;->parseAttributesConditional(Lcom/caverock/androidsvg/SVG$SvgConditional;Lorg/xml/sax/Attributes;)V -PLcom/caverock/androidsvg/SVGParser;->parseAttributesCore(Lcom/caverock/androidsvg/SVG$SvgElementBase;Lorg/xml/sax/Attributes;)V -PLcom/caverock/androidsvg/SVGParser;->parseAttributesGradient(Lcom/caverock/androidsvg/SVG$GradientElement;Lorg/xml/sax/Attributes;)V -PLcom/caverock/androidsvg/SVGParser;->parseAttributesTransform(Lcom/caverock/androidsvg/SVG$HasTransform;Lorg/xml/sax/Attributes;)V -PLcom/caverock/androidsvg/SVGParser;->parseAttributesViewBox(Lcom/caverock/androidsvg/SVG$SvgViewBoxContainer;Lorg/xml/sax/Attributes;)V -PLcom/caverock/androidsvg/SVGParser;->parseColour(Ljava/lang/String;)Lcom/caverock/androidsvg/SVG$Colour; -PLcom/caverock/androidsvg/SVGParser;->parseColourSpecifer(Ljava/lang/String;)Lcom/caverock/androidsvg/SVG$SvgPaint; -PLcom/caverock/androidsvg/SVGParser;->parseFloat(ILjava/lang/String;)F -PLcom/caverock/androidsvg/SVGParser;->parseFloat(Ljava/lang/String;)F -PLcom/caverock/androidsvg/SVGParser;->parseLength(Ljava/lang/String;)Lcom/caverock/androidsvg/SVG$Length; -PLcom/caverock/androidsvg/SVGParser;->parsePaintSpecifier(Ljava/lang/String;)Lcom/caverock/androidsvg/SVG$SvgPaint; -PLcom/caverock/androidsvg/SVGParser;->parseTransformList(Ljava/lang/String;)Landroid/graphics/Matrix; -PLcom/caverock/androidsvg/SVGParser;->parseUsingXmlPullParser(Ljava/io/InputStream;)V -PLcom/caverock/androidsvg/SVGParser;->text([CII)V -PLcom/google/protobuf/CodedOutputStream$OutputStreamEncoder;->write(B)V -PLcom/google/protobuf/CodedOutputStream$OutputStreamEncoder;->writeStringNoTag(Ljava/lang/String;)V -PLcom/google/protobuf/CodedOutputStream$OutputStreamEncoder;->writeTag(II)V -PLcom/google/protobuf/CodedOutputStream$OutputStreamEncoder;->writeUInt32NoTag(I)V -PLcom/google/protobuf/CodedOutputStream;->computeStringSizeNoTag(Ljava/lang/String;)I -PLcom/google/protobuf/FieldSet;->()V -PLcom/google/protobuf/FieldSet;->(I)V -PLcom/google/protobuf/FieldSet;->computeElementSize(Lcom/google/protobuf/WireFormat$FieldType;ILjava/lang/Object;)I -PLcom/google/protobuf/FieldSet;->computeElementSizeNoTag(Lcom/google/protobuf/WireFormat$FieldType;Ljava/lang/Object;)I -PLcom/google/protobuf/FieldSet;->makeImmutable()V -PLcom/google/protobuf/FieldSet;->writeElement(Lcom/google/protobuf/CodedOutputStream;Lcom/google/protobuf/WireFormat$FieldType;ILjava/lang/Object;)V -PLcom/google/protobuf/MapEntryLite;->computeSerializedSize(Lcom/google/protobuf/MapEntryLite$Metadata;Ljava/lang/Object;Ljava/lang/Object;)I -PLcom/google/protobuf/MapEntryLite;->writeTo(Lcom/google/protobuf/CodedOutputStream;Lcom/google/protobuf/MapEntryLite$Metadata;Ljava/lang/Object;Ljava/lang/Object;)V -PLcom/google/protobuf/MapFieldLite;->calculateHashCodeForObject(Ljava/lang/Object;)I -PLcom/google/protobuf/MapFieldLite;->ensureMutable()V -PLcom/google/protobuf/MapFieldLite;->equals(Ljava/lang/Object;)Z -PLcom/google/protobuf/MapFieldLite;->mutableCopy()Lcom/google/protobuf/MapFieldLite; -PLcom/google/protobuf/MapFieldLite;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/protobuf/MapFieldLite;->putAll(Ljava/util/Map;)V -PLcom/google/protobuf/MapFieldLite;->remove(Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/protobuf/SmallSortedMap$1;->(I)V -PLcom/google/protobuf/SmallSortedMap$1;->makeImmutable()V -PLcom/google/protobuf/SmallSortedMap$EmptySet$1;->()V -PLcom/google/protobuf/SmallSortedMap$EmptySet$1;->hasNext()Z -PLcom/google/protobuf/SmallSortedMap$EmptySet$2;->()V -PLcom/google/protobuf/SmallSortedMap$EmptySet$2;->iterator()Ljava/util/Iterator; -PLcom/google/protobuf/SmallSortedMap$EmptySet;->()V -PLcom/google/protobuf/SmallSortedMap;->(I)V -PLcom/google/protobuf/SmallSortedMap;->getNumArrayEntries()I -PLcom/google/protobuf/SmallSortedMap;->getOverflowEntries()Ljava/lang/Iterable; -PLcom/google/protobuf/SmallSortedMap;->makeImmutable()V -PLcom/google/protobuf/Utf8$Processor;->()V -PLcom/google/protobuf/Utf8$SafeProcessor;->()V -PLcom/google/protobuf/Utf8$SafeProcessor;->encodeUtf8(Ljava/lang/CharSequence;[BII)I -PLcom/google/protobuf/Utf8;->()V -PLcom/google/protobuf/Utf8;->encodedLength(Ljava/lang/CharSequence;)I -PLcom/google/protobuf/kotlin/DslMap;->(Ljava/util/Map;)V -PLcom/google/protobuf/kotlin/DslMap;->isEmpty()Z -PLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ActivityRetainedCImpl$SwitchingProvider;->get()Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/DaggerNiaApplication_HiltComponents_SingletonC$ActivityRetainedCImpl;->getActivityRetainedLifecycle()Ldagger/hilt/android/ActivityRetainedLifecycle; -PLcom/google/samples/apps/nowinandroid/MainActivity$onCreate$3$1$1$invoke$$inlined$onDispose$1;->dispose()V -PLcom/google/samples/apps/nowinandroid/MainActivity;->onPause()V -PLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$getNewsResources$$inlined$map$1$2$1;->(Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$getNewsResources$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V -PLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$getNewsResources$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$getNewsResources$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V -PLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$getNewsResources$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$getNewsResources$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V -PLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$getNewsResources$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$getNewsResources$$inlined$map$2$2$1;->(Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$getNewsResources$$inlined$map$2$2;Lkotlin/coroutines/Continuation;)V -PLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$getNewsResources$$inlined$map$2$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$getNewsResources$$inlined$map$2$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V -PLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$getNewsResources$$inlined$map$2$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$getNewsResources$$inlined$map$2;->(Lkotlinx/coroutines/flow/Flow;)V -PLcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository$getNewsResources$$inlined$map$2;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor$isOnline$1$1;->invoke()Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$10;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;Landroidx/room/RoomSQLiteQuery;)V -PLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$10;->call()Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$10;->finalize()V -PLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$11;->(Lcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;Landroidx/room/RoomSQLiteQuery;)V -PLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$11;->call()Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl$11;->finalize()V -PLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;->getNewsResources()Lkotlinx/coroutines/flow/SafeFlow; -PLcom/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao_Impl;->getNewsResources(Ljava/util/Set;)Lkotlinx/coroutines/flow/SafeFlow; -PLcom/google/samples/apps/nowinandroid/core/database/dao/TopicDao_Impl$9;->finalize()V -PLcom/google/samples/apps/nowinandroid/core/database/model/PopulatedNewsResource;->(Lcom/google/samples/apps/nowinandroid/core/database/model/NewsResourceEntity;Ljava/util/ArrayList;)V -PLcom/google/samples/apps/nowinandroid/core/database/model/PopulatedNewsResourceKt;->asExternalModel(Lcom/google/samples/apps/nowinandroid/core/database/model/PopulatedNewsResource;)Lcom/google/samples/apps/nowinandroid/core/model/data/NewsResource; -PLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$toggleFollowedTopicId$1;->(Lcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource;Lkotlin/coroutines/Continuation;)V -PLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$toggleFollowedTopicId$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$toggleFollowedTopicId$2;->(Ljava/lang/String;Lkotlin/coroutines/Continuation;Z)V -PLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$toggleFollowedTopicId$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -PLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$toggleFollowedTopicId$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource$toggleFollowedTopicId$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource;->toggleFollowedTopicId(Ljava/lang/String;Lkotlin/coroutines/Continuation;Z)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;->access$3400(Lcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences;)Lcom/google/protobuf/MapFieldLite; -PLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferencesKt$Dsl;->(Lcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences$Builder;)V -PLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferencesKt$Dsl;->_build()Lcom/google/samples/apps/nowinandroid/core/datastore/UserPreferences; -PLcom/google/samples/apps/nowinandroid/core/datastore/UserPreferencesKt$Dsl;->getFollowedTopicIdsMap()Lcom/google/protobuf/kotlin/DslMap; -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/ButtonKt$NiaTextButton$1$1;->(Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/RowScope;II)V -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/ButtonKt$NiaTextButton$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/ButtonKt$NiaTextButton$1;->(Lkotlin/jvm/functions/Function3;I)V -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/ButtonKt$NiaTextButton$3;->(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;I)V -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/ButtonKt$NiaTextButton$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/ButtonKt;->NiaTextButton(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZZLandroidx/compose/material3/ButtonColors;Landroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/ButtonKt;->NiaTextButton(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZZLandroidx/compose/material3/ButtonColors;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/ComposableSingletons$TagKt$lambda-1$1;->()V -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/ComposableSingletons$TagKt$lambda-1$1;->()V -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/ComposableSingletons$TagKt$lambda-2$1;->()V -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/ComposableSingletons$TagKt$lambda-2$1;->()V -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/ComposableSingletons$TagKt$lambda-3$1;->()V -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/ComposableSingletons$TagKt$lambda-3$1;->()V -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/ComposableSingletons$TagKt;->()V -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/DropdownMenuKt$NiaDropdownMenu$1;->(Ljava/util/List;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;ILkotlin/jvm/functions/Function1;ZLkotlin/jvm/functions/Function0;)V -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/DropdownMenuKt;->NiaDropdownMenu(ZLkotlin/jvm/functions/Function0;Ljava/util/List;Lkotlin/jvm/functions/Function1;ZLkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/NiaButtonDefaults;->textButtonColors-ro_MJ88(JJJLandroidx/compose/runtime/Composer;I)Landroidx/compose/material3/ButtonColors; -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/TagKt$NiaTopicTag$2$1$1;->(Lkotlin/jvm/functions/Function1;)V -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/TagKt$NiaTopicTag$2$2$1;->(Lkotlin/jvm/functions/Function1;)V -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/TagKt$NiaTopicTag$2$3$1;->(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/TagKt$NiaTopicTag$2$4;->(Lkotlin/jvm/functions/Function2;ILkotlin/jvm/functions/Function2;ILkotlin/jvm/functions/Function2;)V -PLcom/google/samples/apps/nowinandroid/core/designsystem/component/TagKt$NiaTopicTag$3;->(ZZLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;III)V -PLcom/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCase$invoke$1$invokeSuspend$$inlined$sortedBy$1;->()V -PLcom/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCase$invoke$1$invokeSuspend$$inlined$sortedBy$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I -PLcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCase$special$$inlined$map$1$2$1;->(Lcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCase$special$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V -PLcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCase$special$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCase$special$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V -PLcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCase$special$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCase$special$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCase;->invoke(Ljava/util/Set;)Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$unsafeFlow$1; -PLcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCaseKt$mapToSaveableNewsResources$$inlined$filterNot$1$2$1;->(Lcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCaseKt$mapToSaveableNewsResources$$inlined$filterNot$1$2;Lkotlin/coroutines/Continuation;)V -PLcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCaseKt$mapToSaveableNewsResources$$inlined$filterNot$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCaseKt$mapToSaveableNewsResources$$inlined$filterNot$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V -PLcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCaseKt$mapToSaveableNewsResources$$inlined$filterNot$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCaseKt$mapToSaveableNewsResources$$inlined$filterNot$1;->(Lkotlinx/coroutines/flow/Flow;)V -PLcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCaseKt$mapToSaveableNewsResources$$inlined$filterNot$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCaseKt$mapToSaveableNewsResources$2;->(Lkotlin/coroutines/Continuation;)V -PLcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCaseKt$mapToSaveableNewsResources$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCaseKt$mapToSaveableNewsResources$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/domain/model/SaveableNewsResource;->(Lcom/google/samples/apps/nowinandroid/core/model/data/NewsResource;Z)V -PLcom/google/samples/apps/nowinandroid/core/model/data/NewsResource;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlinx/datetime/Instant;Lcom/google/samples/apps/nowinandroid/core/model/data/NewsResourceType;Ljava/util/List;)V -PLcom/google/samples/apps/nowinandroid/core/ui/ComposableSingletons$NewsResourceCardKt$lambda-1$1;->()V -PLcom/google/samples/apps/nowinandroid/core/ui/ComposableSingletons$NewsResourceCardKt$lambda-1$1;->()V -PLcom/google/samples/apps/nowinandroid/core/ui/ComposableSingletons$NewsResourceCardKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/ui/ComposableSingletons$NewsResourceCardKt$lambda-2$1;->()V -PLcom/google/samples/apps/nowinandroid/core/ui/ComposableSingletons$NewsResourceCardKt$lambda-2$1;->()V -PLcom/google/samples/apps/nowinandroid/core/ui/ComposableSingletons$NewsResourceCardKt$lambda-3$1;->()V -PLcom/google/samples/apps/nowinandroid/core/ui/ComposableSingletons$NewsResourceCardKt$lambda-3$1;->()V -PLcom/google/samples/apps/nowinandroid/core/ui/ComposableSingletons$NewsResourceCardKt$lambda-4$1;->()V -PLcom/google/samples/apps/nowinandroid/core/ui/ComposableSingletons$NewsResourceCardKt$lambda-4$1;->()V -PLcom/google/samples/apps/nowinandroid/core/ui/ComposableSingletons$NewsResourceCardKt$lambda-5$1;->()V -PLcom/google/samples/apps/nowinandroid/core/ui/ComposableSingletons$NewsResourceCardKt$lambda-5$1;->()V -PLcom/google/samples/apps/nowinandroid/core/ui/ComposableSingletons$NewsResourceCardKt$lambda-6$1;->()V -PLcom/google/samples/apps/nowinandroid/core/ui/ComposableSingletons$NewsResourceCardKt$lambda-6$1;->()V -PLcom/google/samples/apps/nowinandroid/core/ui/ComposableSingletons$NewsResourceCardKt$lambda-7$1;->()V -PLcom/google/samples/apps/nowinandroid/core/ui/ComposableSingletons$NewsResourceCardKt$lambda-7$1;->()V -PLcom/google/samples/apps/nowinandroid/core/ui/ComposableSingletons$NewsResourceCardKt$lambda-8$1;->()V -PLcom/google/samples/apps/nowinandroid/core/ui/ComposableSingletons$NewsResourceCardKt$lambda-8$1;->()V -PLcom/google/samples/apps/nowinandroid/core/ui/ComposableSingletons$NewsResourceCardKt;->()V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsFeedKt$newsFeed$$inlined$items$default$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/ui/NewsFeedKt$newsFeed$2$1;->(Lkotlin/jvm/functions/Function2;Lcom/google/samples/apps/nowinandroid/core/domain/model/SaveableNewsResource;)V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsFeedKt$newsFeed$2$2;->(Landroid/content/Context;Landroid/content/Intent;)V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt$BookmarkButton$1$1;->(Lkotlin/jvm/functions/Function0;)V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt$NewsResourceCardExpanded$1$1;->(Ljava/lang/String;)V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt$NewsResourceCardExpanded$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt$NewsResourceCardExpanded$2;->(Lcom/google/samples/apps/nowinandroid/core/model/data/NewsResource;ZLkotlin/jvm/functions/Function0;I)V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt$NewsResourceCardExpanded$3;->(Lcom/google/samples/apps/nowinandroid/core/model/data/NewsResource;ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;II)V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt$NewsResourceDate$1;->(Lkotlinx/datetime/Instant;I)V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt$NewsResourceTopics$1$1;->(Lcom/google/samples/apps/nowinandroid/core/model/data/Topic;Landroidx/compose/runtime/MutableState;)V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt$NewsResourceTopics$1$2;->()V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt$NewsResourceTopics$1$2;->()V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt$NewsResourceTopics$1$3;->()V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt$NewsResourceTopics$1$3;->()V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt$NewsResourceTopics$1$4;->()V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt$NewsResourceTopics$1$4;->()V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt$NewsResourceTopics$1$5;->(Lcom/google/samples/apps/nowinandroid/core/model/data/Topic;)V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt$NewsResourceTopics$1$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt$NewsResourceTopics$2;->(Ljava/util/List;Landroidx/compose/ui/Modifier;II)V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt$dateFormatted$1$invoke$$inlined$onDispose$1;->(Lcom/google/samples/apps/nowinandroid/core/ui/TimeZoneBroadcastReceiver;Landroid/content/Context;)V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt$dateFormatted$1$invoke$$inlined$onDispose$1;->dispose()V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt$dateFormatted$1$receiver$1;->(Landroidx/compose/runtime/MutableState;)V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt$dateFormatted$1;->(Landroid/content/Context;Landroidx/compose/runtime/MutableState;)V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt$dateFormatted$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt;->BookmarkButton(ZLkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt;->NewsResourceCardExpanded(Lcom/google/samples/apps/nowinandroid/core/model/data/NewsResource;ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt;->NewsResourceDate(Lkotlinx/datetime/Instant;Landroidx/compose/runtime/Composer;I)V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt;->NewsResourceHeaderImage(ILandroidx/compose/runtime/Composer;Ljava/lang/String;)V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt;->NewsResourceShortDescription(ILandroidx/compose/runtime/Composer;Ljava/lang/String;)V -PLcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt;->NewsResourceTitle(Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V -PLcom/google/samples/apps/nowinandroid/core/ui/TimeZoneBroadcastReceiver;->(Lcom/google/samples/apps/nowinandroid/core/ui/NewsResourceCardKt$dateFormatted$1$receiver$1;)V -PLcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreenKt$BookmarksRoute$1;->(Lcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel;)V -PLcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreenKt$BookmarksRoute$2;->(Landroidx/compose/ui/Modifier;Lcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel;II)V -PLcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreenKt$BookmarksRoute$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreenKt$EmptyState$2;->(Landroidx/compose/ui/Modifier;II)V -PLcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreenKt$LoadingState$1;->(Landroidx/compose/ui/Modifier;II)V -PLcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreenKt;->BookmarksRoute(Landroidx/compose/ui/Modifier;Lcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel;Landroidx/compose/runtime/Composer;II)V -PLcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreenKt;->BookmarksScreen(Lcom/google/samples/apps/nowinandroid/core/ui/NewsFeedUiState;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V -PLcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreenKt;->EmptyState(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V -PLcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreenKt;->LoadingState(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V -PLcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel$feedUiState$5;->(Lkotlin/coroutines/Continuation;)V -PLcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel$feedUiState$5;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -PLcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel$feedUiState$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel$feedUiState$5;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel$special$$inlined$filterNot$1$2$1;->(Lcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel$special$$inlined$filterNot$1$2;Lkotlin/coroutines/Continuation;)V -PLcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel$special$$inlined$filterNot$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V -PLcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel$special$$inlined$filterNot$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel$special$$inlined$filterNot$1;->(Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$unsafeFlow$1;)V -PLcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel$special$$inlined$filterNot$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel$special$$inlined$map$1$2$1;->(Lcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel$special$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V -PLcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel$special$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V -PLcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel$special$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel$special$$inlined$map$1;->(Lcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel$special$$inlined$filterNot$1;)V -PLcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel$special$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel$special$$inlined$map$2$2$1;->(Lcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel$special$$inlined$map$2$2;Lkotlin/coroutines/Continuation;)V -PLcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel$special$$inlined$map$2$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V -PLcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel$special$$inlined$map$2$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel$special$$inlined$map$2;->(Lcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel$special$$inlined$map$1;)V -PLcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel$special$$inlined$map$2;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel;->(Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository;Lcom/google/samples/apps/nowinandroid/core/domain/GetSaveableNewsResourcesUseCase;)V -PLcom/google/samples/apps/nowinandroid/feature/bookmarks/navigation/ComposableSingletons$BookmarksNavigationKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$ForYouRoute$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$SingleTopicButton$1$1$1;->invoke()Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenKt$SingleTopicButton$1$2$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$special$$inlined$map$2$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$updateTopicSelection$1;->(Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel;Ljava/lang/String;ZLkotlin/coroutines/Continuation;)V -PLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$updateTopicSelection$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -PLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel$updateTopicSelection$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelKt$mapToFeedState$$inlined$map$1$2$1;->(Lcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelKt$mapToFeedState$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V -PLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelKt$mapToFeedState$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V -PLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelKt$mapToFeedState$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelKt$mapToFeedState$$inlined$map$1;->(Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$unsafeFlow$1;)V -PLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelKt$mapToFeedState$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelKt$mapToFeedState$3;->(Lkotlin/coroutines/Continuation;)V -PLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelKt$mapToFeedState$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -PLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelKt$mapToFeedState$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelKt$mapToFeedState$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/interests/ComposableSingletons$InterestsItemKt$lambda-1$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/interests/ComposableSingletons$InterestsItemKt$lambda-1$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/interests/ComposableSingletons$InterestsItemKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/interests/ComposableSingletons$InterestsItemKt$lambda-10$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/interests/ComposableSingletons$InterestsItemKt$lambda-10$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/interests/ComposableSingletons$InterestsItemKt$lambda-2$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/interests/ComposableSingletons$InterestsItemKt$lambda-2$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/interests/ComposableSingletons$InterestsItemKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/interests/ComposableSingletons$InterestsItemKt$lambda-3$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/interests/ComposableSingletons$InterestsItemKt$lambda-3$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/interests/ComposableSingletons$InterestsItemKt$lambda-4$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/interests/ComposableSingletons$InterestsItemKt$lambda-4$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/interests/ComposableSingletons$InterestsItemKt$lambda-5$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/interests/ComposableSingletons$InterestsItemKt$lambda-5$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/interests/ComposableSingletons$InterestsItemKt$lambda-6$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/interests/ComposableSingletons$InterestsItemKt$lambda-6$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/interests/ComposableSingletons$InterestsItemKt$lambda-7$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/interests/ComposableSingletons$InterestsItemKt$lambda-7$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/interests/ComposableSingletons$InterestsItemKt$lambda-8$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/interests/ComposableSingletons$InterestsItemKt$lambda-8$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/interests/ComposableSingletons$InterestsItemKt$lambda-9$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/interests/ComposableSingletons$InterestsItemKt$lambda-9$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/interests/ComposableSingletons$InterestsItemKt;->()V -PLcom/google/samples/apps/nowinandroid/feature/interests/ComposableSingletons$TabContentKt$lambda-1$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/interests/ComposableSingletons$TabContentKt$lambda-1$1;->()V -PLcom/google/samples/apps/nowinandroid/feature/interests/ComposableSingletons$TabContentKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/interests/ComposableSingletons$TabContentKt;->()V -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsItemKt$InterestsIcon$1;->(Ljava/lang/String;Landroidx/compose/ui/Modifier;II)V -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsItemKt$InterestsItem$1$1$1;->(Lkotlin/jvm/functions/Function0;)V -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsItemKt;->InterestsIcon(Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsScreenKt$InterestsRoute$1;->(Lcom/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel;)V -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsScreenKt$InterestsRoute$2;->(Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Lcom/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel;II)V -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsScreenKt$InterestsRoute$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsScreenKt$InterestsScreen$2;->(Lcom/google/samples/apps/nowinandroid/feature/interests/InterestsUiState;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;II)V -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsScreenKt;->InterestsRoute(Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Lcom/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel;Landroidx/compose/runtime/Composer;II)V -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsScreenKt;->InterestsScreen(Lcom/google/samples/apps/nowinandroid/feature/interests/InterestsUiState;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsTabState;->(Ljava/util/List;)V -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsUiState$Interests;->(Ljava/util/List;)V -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsUiState$Interests;->equals(Ljava/lang/Object;)Z -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsUiState$Loading;->()V -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsUiState$Loading;->()V -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel$special$$inlined$map$1$2$1;->(Lcom/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel$special$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel$special$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel$special$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel$special$$inlined$map$1;->(Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$unsafeFlow$1;)V -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel$special$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel;->(Lcom/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository;Lcom/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCase;)V -PLcom/google/samples/apps/nowinandroid/feature/interests/TabContentKt$TopicsTabContent$1$1$1$1$1;->(Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V -PLcom/google/samples/apps/nowinandroid/feature/interests/TabContentKt$TopicsTabContent$1$1$1$2$1;->(Ljava/lang/String;Lkotlin/jvm/functions/Function2;)V -PLcom/google/samples/apps/nowinandroid/feature/interests/TabContentKt$TopicsTabContent$1$1$1;->(Lcom/google/samples/apps/nowinandroid/core/domain/model/FollowableTopic;Lkotlin/jvm/functions/Function1;Ljava/lang/String;ILkotlin/jvm/functions/Function2;)V -PLcom/google/samples/apps/nowinandroid/feature/interests/TabContentKt$TopicsTabContent$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/interests/TabContentKt$TopicsTabContent$1;->(Ljava/util/List;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/functions/Function2;)V -PLcom/google/samples/apps/nowinandroid/feature/interests/TabContentKt$TopicsTabContent$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/feature/interests/TabContentKt;->TopicsTabContent(Ljava/util/List;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V -PLcom/google/samples/apps/nowinandroid/feature/interests/navigation/InterestsNavigationKt$interestsGraph$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/sync/R$string;->isAttached(Landroidx/compose/ui/node/PointerInputModifierNode;)Z -PLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaApp$1$3$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaApp$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/ui/NiaAppKt$NiaBottomBar$1$1$1$1;->invoke()Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/ui/NiaAppState$navigateToTopLevelDestination$1$topLevelNavOptions$1;->(Lcom/google/samples/apps/nowinandroid/ui/NiaAppState;)V -PLcom/google/samples/apps/nowinandroid/ui/NiaAppState$navigateToTopLevelDestination$1$topLevelNavOptions$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLcom/google/samples/apps/nowinandroid/ui/NiaAppState;->navigateToTopLevelDestination(Lcom/google/samples/apps/nowinandroid/navigation/TopLevelDestination;)V -PLcom/google/samples/apps/nowinandroid/ui/NiaAppStateKt$NavigationTrackingSideEffect$1$invoke$$inlined$onDispose$1;->dispose()V -PLdagger/hilt/android/internal/lifecycle/HiltViewModelFactory$1$$ExternalSyntheticLambda0;->close()V -PLdagger/hilt/android/internal/lifecycle/RetainedLifecycleImpl;->dispatchOnCleared()V -PLdagger/hilt/android/internal/managers/ActivityRetainedComponentManager$ActivityRetainedComponentViewModel;->onCleared()V -PLj$/lang/a;->f(JI)I -PLj$/time/Instant;->B(Lj$/time/temporal/TemporalAccessor;)Lj$/time/Instant; -PLj$/time/Instant;->K()J -PLj$/time/Instant;->P()I -PLj$/time/Instant;->d(Lj$/time/temporal/t;)Ljava/lang/Object; -PLj$/time/Instant;->j(Lj$/time/temporal/q;)Z -PLj$/time/Instant;->ofEpochMilli(J)Lj$/time/Instant; -PLj$/time/LocalDateTime;->c0(JILj$/time/ZoneOffset;)Lj$/time/LocalDateTime; -PLj$/time/LocalDateTime;->k(Lj$/time/temporal/q;)J -PLj$/time/ZoneId;->equals(Ljava/lang/Object;)Z -PLj$/time/ZoneId;->of(Ljava/lang/String;)Lj$/time/ZoneId; -PLj$/time/ZoneId;->systemDefault()Lj$/time/ZoneId; -PLj$/time/ZoneId;->w(Ljava/lang/String;Z)Lj$/time/ZoneId; -PLj$/time/ZonedDateTime;->B(Lj$/time/Instant;Lj$/time/ZoneId;)Lj$/time/ZonedDateTime; -PLj$/time/ZonedDateTime;->d(Lj$/time/temporal/t;)Ljava/lang/Object; -PLj$/time/ZonedDateTime;->k(Lj$/time/temporal/q;)J -PLj$/time/ZonedDateTime;->w(JILj$/time/ZoneId;)Lj$/time/ZonedDateTime; -PLj$/time/chrono/ChronoZonedDateTime;->d(Lj$/time/temporal/t;)Ljava/lang/Object; -PLj$/time/chrono/ChronoZonedDateTime;->g()Lj$/time/chrono/k; -PLj$/time/chrono/r;->T(Lj$/time/Instant;Lj$/time/ZoneId;)Lj$/time/chrono/ChronoZonedDateTime; -PLj$/time/format/A;->a(JLj$/time/format/G;)Ljava/lang/String; -PLj$/time/format/B;->b(Lj$/time/temporal/q;Ljava/util/Locale;)Ljava/lang/Object; -PLj$/time/format/B;->c(Ljava/lang/String;)Ljava/lang/String; -PLj$/time/format/B;->d()Lj$/time/format/B; -PLj$/time/format/B;->f(Lj$/time/temporal/q;JLj$/time/format/G;Ljava/util/Locale;)Ljava/lang/String; -PLj$/time/format/DateTimeFormatter;->c()Ljava/util/Locale; -PLj$/time/format/DateTimeFormatter;->format(Lj$/time/temporal/TemporalAccessor;)Ljava/lang/String; -PLj$/time/format/DateTimeFormatter;->ofPattern(Ljava/lang/String;)Lj$/time/format/DateTimeFormatter; -PLj$/time/format/DateTimeFormatter;->withZone(Lj$/time/ZoneId;)Lj$/time/format/DateTimeFormatter; -PLj$/time/format/F;->()V -PLj$/time/format/F;->b(I)I -PLj$/time/format/F;->d(I)[I -PLj$/time/format/d;->()V -PLj$/time/format/e;->w(Lj$/time/format/z;Ljava/lang/StringBuilder;)Z -PLj$/time/format/f;->w(Lj$/time/format/z;Ljava/lang/StringBuilder;)Z -PLj$/time/format/k;->b(Lj$/time/format/z;J)J -PLj$/time/format/k;->w(Lj$/time/format/z;Ljava/lang/StringBuilder;)Z -PLj$/time/format/s;->w(Lj$/time/format/z;Ljava/lang/StringBuilder;)Z -PLj$/time/format/w;->i(Ljava/lang/String;)V -PLj$/time/format/w;->u()Lj$/time/format/DateTimeFormatter; -PLj$/time/format/z;->(Lj$/time/temporal/TemporalAccessor;Lj$/time/format/DateTimeFormatter;)V -PLj$/time/format/z;->b()Lj$/time/format/C; -PLj$/time/format/z;->c()Ljava/util/Locale; -PLj$/time/format/z;->d()Lj$/time/temporal/TemporalAccessor; -PLj$/time/format/z;->e(Lj$/time/temporal/q;)Ljava/lang/Long; -PLj$/time/g;->()V -PLj$/time/h;->P(Lj$/time/temporal/q;)I -PLj$/time/h;->h0(J)Lj$/time/h; -PLj$/time/h;->k(Lj$/time/temporal/q;)J -PLj$/time/l;->c0(J)Lj$/time/l; -PLj$/time/temporal/a;->values()[Lj$/time/temporal/a; -PLj$/time/temporal/b;->values()[Lj$/time/temporal/b; -PLj$/time/y;->(Ljava/lang/String;Lj$/time/zone/ZoneRules;)V -PLj$/time/y;->R(Ljava/lang/String;Z)Lj$/time/y; -PLj$/time/y;->getRules()Lj$/time/zone/ZoneRules; -PLj$/time/z;->()V -PLj$/time/zone/ZoneRules;->()V -PLj$/time/zone/ZoneRules;->(Ljava/util/TimeZone;)V -PLj$/time/zone/ZoneRules;->d(Lj$/time/Instant;)Lj$/time/ZoneOffset; -PLj$/time/zone/ZoneRules;->j(I)Lj$/time/ZoneOffset; -PLj$/time/zone/f;->(Ljava/util/ArrayList;)V -PLj$/time/zone/f;->run()Ljava/lang/Object; -PLj$/time/zone/g;->()V -PLj$/time/zone/g;->c(Ljava/lang/String;)Lj$/time/zone/ZoneRules; -PLj$/time/zone/g;->d()Ljava/util/Set; -PLj$/time/zone/h;->()V -PLj$/time/zone/h;->()V -PLj$/time/zone/h;->b(Ljava/lang/String;Z)Lj$/time/zone/ZoneRules; -PLj$/time/zone/h;->e(Lj$/time/zone/h;)V -PLj$/util/concurrent/ConcurrentHashMap;->k()J -PLj$/util/concurrent/ConcurrentHashMap;->keySet()Ljava/util/Set; -PLj$/util/concurrent/ConcurrentHashMap;->size()I -PLj$/util/concurrent/a;->([Lj$/util/concurrent/l;IILj$/util/concurrent/ConcurrentHashMap;)V -PLj$/util/concurrent/a;->hasNext()Z -PLj$/util/concurrent/b;->(Lj$/util/concurrent/ConcurrentHashMap;)V -PLj$/util/concurrent/b;->size()I -PLj$/util/concurrent/h;->([Lj$/util/concurrent/l;IILj$/util/concurrent/ConcurrentHashMap;I)V -PLj$/util/concurrent/h;->next()Ljava/lang/Object; -PLj$/util/concurrent/i;->(Lj$/util/concurrent/ConcurrentHashMap;)V -PLj$/util/concurrent/i;->iterator()Ljava/util/Iterator; -PLj$/util/concurrent/q;->([Lj$/util/concurrent/l;III)V -PLj$/util/concurrent/q;->a()Lj$/util/concurrent/l; -PLkotlin/collections/ArrayDeque;->removeLast()Ljava/lang/Object; -PLkotlin/collections/ArraysKt___ArraysKt;->indexOf([Ljava/lang/Object;Ljava/lang/Object;)I -PLkotlin/collections/CollectionsKt__CollectionsKt;->arrayListOf([Ljava/lang/Object;)Ljava/util/ArrayList; -PLkotlin/collections/CollectionsKt__ReversedViewsKt;->removeAll(Ljava/util/List;Lkotlin/jvm/functions/Function1;)V -PLkotlin/collections/CollectionsKt___CollectionsKt;->firstOrNull(Ljava/util/List;)Ljava/lang/Object; -PLkotlin/collections/EmptyMap;->equals(Ljava/lang/Object;)Z -PLkotlin/collections/EmptySet;->isEmpty()Z -PLkotlin/jvm/internal/Ref$LongRef;->()V -PLkotlin/math/MathKt__MathJVMKt;->roundToInt(D)I -PLkotlin/sequences/TakeWhileSequence$iterator$1;->(Lkotlin/sequences/TakeWhileSequence;)V -PLkotlin/sequences/TakeWhileSequence$iterator$1;->calcNext()V -PLkotlin/sequences/TakeWhileSequence$iterator$1;->hasNext()Z -PLkotlin/sequences/TakeWhileSequence$iterator$1;->next()Ljava/lang/Object; -PLkotlin/sequences/TakeWhileSequence;->(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)V -PLkotlin/text/StringsKt__StringNumberConversionsKt;->toLongOrNull(Ljava/lang/String;)Ljava/lang/Long; -PLkotlin/text/StringsKt__StringsKt;->substringBefore$default(Ljava/lang/String;C)Ljava/lang/String; -PLkotlinx/coroutines/CancellableContinuationImpl;->resumeUndispatched(Lkotlinx/coroutines/CoroutineDispatcher;Lkotlin/Unit;)V -PLkotlinx/coroutines/DefaultExecutor;->acknowledgeShutdownIfNeeded()V -PLkotlinx/coroutines/EventLoopImplBase;->isEmpty()Z -PLkotlinx/coroutines/InterruptibleKt$runInterruptible$2;->(Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V -PLkotlinx/coroutines/InterruptibleKt$runInterruptible$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; -PLkotlinx/coroutines/InterruptibleKt$runInterruptible$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; -PLkotlinx/coroutines/InterruptibleKt$runInterruptible$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLkotlinx/coroutines/InvokeOnCancelling;->()V -PLkotlinx/coroutines/InvokeOnCancelling;->(Lkotlin/jvm/functions/Function1;)V -PLkotlinx/coroutines/InvokeOnCancelling;->invoke(Ljava/lang/Throwable;)V -PLkotlinx/coroutines/InvokeOnCompletion;->invoke(Ljava/lang/Throwable;)V -PLkotlinx/coroutines/JobSupport$AwaitContinuation;->getContinuationCancellationCause(Lkotlinx/coroutines/JobSupport;)Ljava/lang/Throwable; -PLkotlinx/coroutines/JobSupport;->isCancelled()Z -PLkotlinx/coroutines/RemoveOnCancel;->(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V -PLkotlinx/coroutines/SupervisorJobImpl;->childCancelled(Ljava/lang/Throwable;)Z -PLkotlinx/coroutines/ThreadState;->()V -PLkotlinx/coroutines/ThreadState;->(Lkotlinx/coroutines/Job;)V -PLkotlinx/coroutines/ThreadState;->clearInterrupt()V -PLkotlinx/coroutines/ThreadState;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLkotlinx/coroutines/ThreadState;->setup()V -PLkotlinx/coroutines/UndispatchedCoroutine;->afterResume(Ljava/lang/Object;)V -PLkotlinx/coroutines/android/HandlerContext$scheduleResumeAfterDelay$$inlined$Runnable$1;->run()V -PLkotlinx/coroutines/channels/AbstractChannel$ReceiveElement;->resumeReceiveClosed(Lkotlinx/coroutines/channels/Closed;)V -PLkotlinx/coroutines/channels/AbstractChannel;->cancel(Ljava/util/concurrent/CancellationException;)V -PLkotlinx/coroutines/channels/AbstractChannel;->isClosedForReceive()Z -PLkotlinx/coroutines/channels/AbstractChannel;->onCancelIdempotent(Z)V -PLkotlinx/coroutines/channels/AbstractChannel;->onCancelIdempotentList-w-w6eGU(Ljava/lang/Object;Lkotlinx/coroutines/channels/Closed;)V -PLkotlinx/coroutines/channels/AbstractSendChannel;->close(Ljava/lang/Throwable;)Z -PLkotlinx/coroutines/channels/AbstractSendChannel;->helpClose(Lkotlinx/coroutines/channels/Closed;)V -PLkotlinx/coroutines/channels/ChannelCoroutine;->cancel(Ljava/util/concurrent/CancellationException;)V -PLkotlinx/coroutines/channels/ChannelResult$Closed;->(Ljava/lang/Throwable;)V -PLkotlinx/coroutines/channels/Closed;->(Ljava/lang/Throwable;)V -PLkotlinx/coroutines/channels/ProduceKt$awaitClose$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLkotlinx/coroutines/channels/ProduceKt$awaitClose$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; -PLkotlinx/coroutines/channels/ProducerCoroutine;->onCancelled(Ljava/lang/Throwable;Z)V -PLkotlinx/coroutines/flow/AbstractFlow$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLkotlinx/coroutines/flow/CallbackFlowBuilder$collectTo$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1$1;->(Lkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1;Lkotlin/coroutines/Continuation;)V -PLkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1;->(Lkotlin/jvm/functions/Function2;Lkotlinx/coroutines/flow/Flow;)V -PLkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; -PLkotlinx/coroutines/flow/SharedFlowImpl;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; -PLkotlinx/coroutines/flow/internal/FlowCoroutine;->childCancelled(Ljava/lang/Throwable;)Z -PLkotlinx/coroutines/internal/DispatchedContinuation;->cancelCompletedResult$kotlinx_coroutines_core(Ljava/lang/Object;Ljava/util/concurrent/CancellationException;)V -PLkotlinx/coroutines/internal/InlineList;->plus-FjFbRPM(Ljava/lang/Object;Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Ljava/lang/Object; -PLkotlinx/coroutines/internal/ScopeCoroutine;->afterCompletion(Ljava/lang/Object;)V -PLkotlinx/coroutines/sync/MutexImpl$LockCont$tryResumeLockWaiter$1;->(Lkotlinx/coroutines/sync/MutexImpl;Lkotlinx/coroutines/sync/MutexImpl$LockCont;)V -PLkotlinx/coroutines/sync/MutexImpl$LockCont;->(Lkotlinx/coroutines/sync/MutexImpl;Ljava/lang/Object;Lkotlinx/coroutines/CancellableContinuationImpl;)V -PLkotlinx/coroutines/sync/MutexImpl$LockCont;->completeResumeLockWaiter()V -PLkotlinx/coroutines/sync/MutexImpl$LockCont;->tryResumeLockWaiter()Z -PLkotlinx/coroutines/sync/MutexImpl$LockWaiter;->()V -PLkotlinx/coroutines/sync/MutexImpl$LockWaiter;->(Ljava/lang/Object;)V -PLkotlinx/coroutines/sync/MutexImpl$LockedQueue;->(Ljava/lang/Object;)V -PLkotlinx/coroutines/sync/MutexImpl$UnlockOp;->(Lkotlinx/coroutines/sync/MutexImpl$LockedQueue;)V -PLkotlinx/coroutines/sync/MutexImpl$UnlockOp;->complete(Ljava/lang/Object;Ljava/lang/Object;)V -PLkotlinx/coroutines/sync/MutexImpl$UnlockOp;->prepare(Ljava/lang/Object;)Lkotlinx/coroutines/internal/Symbol; -PLkotlinx/coroutines/sync/SemaphoreImpl;->acquire(Lcoil/decode/BitmapFactoryDecoder$decode$1;)Ljava/lang/Object; -PLkotlinx/coroutines/sync/SemaphoreImpl;->release()V -PLokhttp3/Address;->equalsNonHost$okhttp(Lokhttp3/Address;)Z -PLokhttp3/CacheControl$Companion;->indexOfElement(ILjava/lang/String;Ljava/lang/String;)I -PLokhttp3/CertificatePinner;->equals(Ljava/lang/Object;)Z -PLokhttp3/ConnectionSpec;->equals(Ljava/lang/Object;)Z -PLokhttp3/Dispatcher;->finished$okhttp(Lokhttp3/internal/connection/RealCall$AsyncCall;)V -PLokhttp3/Handshake$Companion$handshake$1;->(Ljava/util/List;)V -PLokhttp3/Handshake$Companion;->get(Ljavax/net/ssl/SSLSession;)Lokhttp3/Handshake; -PLokhttp3/Handshake$peerCertificates$2;->(Lkotlin/jvm/functions/Function0;)V -PLokhttp3/Handshake;->(Lokhttp3/TlsVersion;Lokhttp3/CipherSuite;Ljava/util/List;Lkotlin/jvm/functions/Function0;)V -PLokhttp3/Headers$Builder;->add(Ljava/lang/String;Ljava/lang/String;)V -PLokhttp3/Headers;->getDate(Ljava/lang/String;)Ljava/util/Date; -PLokhttp3/HttpUrl;->encodedPath()Ljava/lang/String; -PLokhttp3/MediaType$Companion;->get(Ljava/lang/String;)Lokhttp3/MediaType; -PLokhttp3/MediaType;->()V -PLokhttp3/MediaType;->(Ljava/lang/String;)V -PLokhttp3/Protocol$Companion;->get(Ljava/lang/String;)Lokhttp3/Protocol; -PLokhttp3/Response$Builder;->()V -PLokhttp3/Response$Builder;->(Lokhttp3/Response;)V -PLokhttp3/Response$Builder;->build()Lokhttp3/Response; -PLokhttp3/Response$Builder;->checkSupportResponse(Ljava/lang/String;Lokhttp3/Response;)V -PLokhttp3/Response;->(Lokhttp3/Request;Lokhttp3/Protocol;Ljava/lang/String;ILokhttp3/Handshake;Lokhttp3/Headers;Lokhttp3/ResponseBody;Lokhttp3/Response;Lokhttp3/Response;Lokhttp3/Response;JJLokhttp3/internal/connection/Exchange;)V -PLokhttp3/Response;->cacheControl()Lokhttp3/CacheControl; -PLokhttp3/Response;->close()V -PLokhttp3/Response;->header$default(Lokhttp3/Response;Ljava/lang/String;)Ljava/lang/String; -PLokhttp3/ResponseBody;->close()V -PLokhttp3/internal/Util;->closeQuietly(Ljava/io/Closeable;)V -PLokhttp3/internal/Util;->closeQuietly(Ljava/net/Socket;)V -PLokhttp3/internal/Util;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String; -PLokhttp3/internal/Util;->headersContentLength(Lokhttp3/Response;)J -PLokhttp3/internal/Util;->readMedium(Lokio/BufferedSource;)I -PLokhttp3/internal/Util;->toHeaders(Ljava/util/List;)Lokhttp3/Headers; -PLokhttp3/internal/Util;->toNonNegativeInt(ILjava/lang/String;)I -PLokhttp3/internal/Util;->withSuppressed(Ljava/io/IOException;Ljava/util/List;)V -PLokhttp3/internal/cache/CacheInterceptor$Companion;->access$stripBody(Lokhttp3/Response;)Lokhttp3/Response; -PLokhttp3/internal/concurrent/TaskQueue$execute$1;->(Ljava/lang/String;Lokhttp3/internal/http2/Http2Connection$ReaderRunnable;)V -PLokhttp3/internal/concurrent/TaskQueue$execute$1;->runOnce()J -PLokhttp3/internal/concurrent/TaskQueue;->cancelAllAndDecide$okhttp()Z -PLokhttp3/internal/concurrent/TaskQueue;->schedule(Lokhttp3/internal/concurrent/Task;J)V -PLokhttp3/internal/concurrent/TaskQueue;->scheduleAndDecide$okhttp(Lokhttp3/internal/concurrent/Task;JZ)Z -PLokhttp3/internal/concurrent/TaskQueue;->shutdown()V -PLokhttp3/internal/concurrent/TaskRunner$RealBackend;->coordinatorNotify(Lokhttp3/internal/concurrent/TaskRunner;)V -PLokhttp3/internal/concurrent/TaskRunner$RealBackend;->coordinatorWait(Lokhttp3/internal/concurrent/TaskRunner;J)V -PLokhttp3/internal/concurrent/TaskRunner$RealBackend;->execute(Ljava/lang/Runnable;)V -PLokhttp3/internal/concurrent/TaskRunner$RealBackend;->nanoTime()J -PLokhttp3/internal/concurrent/TaskRunner$runnable$1;->run()V -PLokhttp3/internal/concurrent/TaskRunner;->access$runTask(Lokhttp3/internal/concurrent/TaskRunner;Lokhttp3/internal/concurrent/Task;)V -PLokhttp3/internal/concurrent/TaskRunner;->afterRun(Lokhttp3/internal/concurrent/Task;J)V -PLokhttp3/internal/concurrent/TaskRunner;->awaitTaskToRun()Lokhttp3/internal/concurrent/Task; -PLokhttp3/internal/concurrent/TaskRunner;->kickCoordinator$okhttp(Lokhttp3/internal/concurrent/TaskQueue;)V -PLokhttp3/internal/connection/Exchange$ResponseBodySource;->(Lokhttp3/internal/connection/Exchange;Lokio/Source;J)V -PLokhttp3/internal/connection/Exchange$ResponseBodySource;->close()V -PLokhttp3/internal/connection/Exchange$ResponseBodySource;->complete(Ljava/io/IOException;)Ljava/io/IOException; -PLokhttp3/internal/connection/Exchange$ResponseBodySource;->read(Lokio/Buffer;J)J -PLokhttp3/internal/connection/Exchange;->(Lokhttp3/internal/connection/RealCall;Lokhttp3/EventListener;Lokhttp3/internal/connection/ExchangeFinder;Lokhttp3/internal/http/ExchangeCodec;)V -PLokhttp3/internal/connection/Exchange;->bodyComplete(ZZLjava/io/IOException;)Ljava/io/IOException; -PLokhttp3/internal/connection/Exchange;->readResponseHeaders(Z)Lokhttp3/Response$Builder; -PLokhttp3/internal/connection/Exchange;->trackFailure(Ljava/io/IOException;)V -PLokhttp3/internal/connection/ExchangeFinder;->sameHostAndPort(Lokhttp3/HttpUrl;)Z -PLokhttp3/internal/connection/ExchangeFinder;->trackFailure(Ljava/io/IOException;)V -PLokhttp3/internal/connection/RealCall$CallReference;->(Lokhttp3/internal/connection/RealCall;Ljava/lang/Object;)V -PLokhttp3/internal/connection/RealCall;->acquireConnectionNoEvents(Lokhttp3/internal/connection/RealConnection;)V -PLokhttp3/internal/connection/RealCall;->callDone(Ljava/io/IOException;)Ljava/io/IOException; -PLokhttp3/internal/connection/RealCall;->cancel()V -PLokhttp3/internal/connection/RealCall;->exitNetworkInterceptorExchange$okhttp(Z)V -PLokhttp3/internal/connection/RealCall;->messageDone$okhttp(Lokhttp3/internal/connection/Exchange;ZZLjava/io/IOException;)Ljava/io/IOException; -PLokhttp3/internal/connection/RealCall;->noMoreExchanges$okhttp(Ljava/io/IOException;)Ljava/io/IOException; -PLokhttp3/internal/connection/RealCall;->releaseConnectionNoEvents$okhttp()Ljava/net/Socket; -PLokhttp3/internal/connection/RealConnection$connectTls$1;->(Lokhttp3/CertificatePinner;Lokhttp3/Handshake;Lokhttp3/Address;)V -PLokhttp3/internal/connection/RealConnection;->isEligible$okhttp(Lokhttp3/Address;Ljava/util/List;)Z -PLokhttp3/internal/connection/RealConnection;->isHealthy(Z)Z -PLokhttp3/internal/connection/RealConnection;->newCodec$okhttp(Lokhttp3/OkHttpClient;Lokhttp3/internal/http/RealInterceptorChain;)Lokhttp3/internal/http/ExchangeCodec; -PLokhttp3/internal/connection/RealConnection;->onSettings(Lokhttp3/internal/http2/Http2Connection;Lokhttp3/internal/http2/Settings;)V -PLokhttp3/internal/connection/RealConnection;->startHttp2()V -PLokhttp3/internal/connection/RealConnectionPool$cleanupTask$1;->runOnce()J -PLokhttp3/internal/connection/RealConnectionPool;->pruneAndGetAllocationCount(Lokhttp3/internal/connection/RealConnection;J)I -PLokhttp3/internal/http/CallServerInterceptor;->intercept(Lokhttp3/internal/http/RealInterceptorChain;)Lokhttp3/Response; -PLokhttp3/internal/http/DatesKt$STANDARD_DATE_FORMAT$1;->()V -PLokhttp3/internal/http/DatesKt$STANDARD_DATE_FORMAT$1;->initialValue()Ljava/lang/Object; -PLokhttp3/internal/http/DatesKt;->()V -PLokhttp3/internal/http/DatesKt;->toHttpDateOrNull(Ljava/lang/String;)Ljava/util/Date; -PLokhttp3/internal/http/HttpHeaders;->()V -PLokhttp3/internal/http/HttpHeaders;->promisesBody(Lokhttp3/Response;)Z -PLokhttp3/internal/http/HttpHeaders;->receiveHeaders(Lokhttp3/CookieJar;Lokhttp3/HttpUrl;Lokhttp3/Headers;)V -PLokhttp3/internal/http/HttpMethod;->permitsRequestBody(Ljava/lang/String;)Z -PLokhttp3/internal/http/RealResponseBody;->(Ljava/lang/String;JLokio/RealBufferedSource;)V -PLokhttp3/internal/http/RealResponseBody;->source()Lokio/BufferedSource; -PLokhttp3/internal/http/RetryAndFollowUpInterceptor;->followUpRequest(Lokhttp3/Response;Lokhttp3/internal/connection/Exchange;)Lokhttp3/Request; -PLokhttp3/internal/http/RetryAndFollowUpInterceptor;->recover(Ljava/io/IOException;Lokhttp3/internal/connection/RealCall;Lokhttp3/Request;Z)Z -PLokhttp3/internal/http/StatusLine$Companion;->parse(Ljava/lang/String;)Lokhttp3/internal/http/StatusLine; -PLokhttp3/internal/http/StatusLine;->(Lokhttp3/Protocol;ILjava/lang/String;)V -PLokhttp3/internal/http2/ErrorCode;->()V -PLokhttp3/internal/http2/ErrorCode;->(IILjava/lang/String;)V -PLokhttp3/internal/http2/Header;->()V -PLokhttp3/internal/http2/Header;->(Ljava/lang/String;Ljava/lang/String;)V -PLokhttp3/internal/http2/Header;->(Lokio/ByteString;Ljava/lang/String;)V -PLokhttp3/internal/http2/Header;->(Lokio/ByteString;Lokio/ByteString;)V -PLokhttp3/internal/http2/Hpack$Reader;->(Lokhttp3/internal/http2/Http2Reader$ContinuationSource;)V -PLokhttp3/internal/http2/Hpack$Reader;->evictToRecoverBytes(I)I -PLokhttp3/internal/http2/Hpack$Reader;->getName(I)Lokio/ByteString; -PLokhttp3/internal/http2/Hpack$Reader;->insertIntoDynamicTable(Lokhttp3/internal/http2/Header;)V -PLokhttp3/internal/http2/Hpack$Reader;->readInt(II)I -PLokhttp3/internal/http2/Hpack$Writer;->(Lokio/Buffer;)V -PLokhttp3/internal/http2/Hpack$Writer;->evictToRecoverBytes(I)V -PLokhttp3/internal/http2/Hpack$Writer;->insertIntoDynamicTable(Lokhttp3/internal/http2/Header;)V -PLokhttp3/internal/http2/Hpack$Writer;->writeByteString(Lokio/ByteString;)V -PLokhttp3/internal/http2/Hpack$Writer;->writeHeaders(Ljava/util/ArrayList;)V -PLokhttp3/internal/http2/Hpack$Writer;->writeInt(III)V -PLokhttp3/internal/http2/Hpack;->()V -PLokhttp3/internal/http2/Hpack;->checkLowercase(Lokio/ByteString;)V -PLokhttp3/internal/http2/Http2;->()V -PLokhttp3/internal/http2/Http2;->()V -PLokhttp3/internal/http2/Http2Connection$Builder;->(Lokhttp3/internal/concurrent/TaskRunner;)V -PLokhttp3/internal/http2/Http2Connection$ReaderRunnable$applyAndAckSettings$lambda-7$lambda-6$$inlined$execute$default$1;->(Ljava/lang/String;Lokhttp3/internal/http2/Http2Connection;Lkotlin/jvm/internal/Ref$ObjectRef;)V -PLokhttp3/internal/http2/Http2Connection$ReaderRunnable$applyAndAckSettings$lambda-7$lambda-6$$inlined$execute$default$1;->runOnce()J -PLokhttp3/internal/http2/Http2Connection$ReaderRunnable$ping$$inlined$execute$default$1;->(Ljava/lang/String;Lokhttp3/internal/http2/Http2Connection;II)V -PLokhttp3/internal/http2/Http2Connection$ReaderRunnable$ping$$inlined$execute$default$1;->runOnce()J -PLokhttp3/internal/http2/Http2Connection$ReaderRunnable$settings$$inlined$execute$default$1;->(Ljava/lang/String;Lokhttp3/internal/http2/Http2Connection$ReaderRunnable;Lokhttp3/internal/http2/Settings;)V -PLokhttp3/internal/http2/Http2Connection$ReaderRunnable$settings$$inlined$execute$default$1;->runOnce()J -PLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->(Lokhttp3/internal/http2/Http2Connection;Lokhttp3/internal/http2/Http2Reader;)V -PLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->ackSettings()V -PLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->headers(ILjava/util/List;Z)V -PLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->invoke()Ljava/lang/Object; -PLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->ping(IIZ)V -PLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->settings(Lokhttp3/internal/http2/Settings;)V -PLokhttp3/internal/http2/Http2Connection$ReaderRunnable;->windowUpdate(JI)V -PLokhttp3/internal/http2/Http2Connection$writeSynResetLater$$inlined$execute$default$1;->(Ljava/lang/String;Lokhttp3/internal/http2/Http2Connection;ILokhttp3/internal/http2/ErrorCode;)V -PLokhttp3/internal/http2/Http2Connection$writeSynResetLater$$inlined$execute$default$1;->runOnce()J -PLokhttp3/internal/http2/Http2Connection;->()V -PLokhttp3/internal/http2/Http2Connection;->(Lokhttp3/internal/http2/Http2Connection$Builder;)V -PLokhttp3/internal/http2/Http2Connection;->close$okhttp(Lokhttp3/internal/http2/ErrorCode;Lokhttp3/internal/http2/ErrorCode;Ljava/io/IOException;)V -PLokhttp3/internal/http2/Http2Connection;->flush()V -PLokhttp3/internal/http2/Http2Connection;->getStream(I)Lokhttp3/internal/http2/Http2Stream; -PLokhttp3/internal/http2/Http2Connection;->removeStream$okhttp(I)Lokhttp3/internal/http2/Http2Stream; -PLokhttp3/internal/http2/Http2Connection;->shutdown(Lokhttp3/internal/http2/ErrorCode;)V -PLokhttp3/internal/http2/Http2Connection;->updateConnectionFlowControl$okhttp(J)V -PLokhttp3/internal/http2/Http2Connection;->writeSynResetLater$okhttp(ILokhttp3/internal/http2/ErrorCode;)V -PLokhttp3/internal/http2/Http2ExchangeCodec;->()V -PLokhttp3/internal/http2/Http2ExchangeCodec;->(Lokhttp3/OkHttpClient;Lokhttp3/internal/connection/RealConnection;Lokhttp3/internal/http/RealInterceptorChain;Lokhttp3/internal/http2/Http2Connection;)V -PLokhttp3/internal/http2/Http2ExchangeCodec;->cancel()V -PLokhttp3/internal/http2/Http2ExchangeCodec;->finishRequest()V -PLokhttp3/internal/http2/Http2ExchangeCodec;->getConnection()Lokhttp3/internal/connection/RealConnection; -PLokhttp3/internal/http2/Http2ExchangeCodec;->openResponseBodySource(Lokhttp3/Response;)Lokio/Source; -PLokhttp3/internal/http2/Http2ExchangeCodec;->readResponseHeaders(Z)Lokhttp3/Response$Builder; -PLokhttp3/internal/http2/Http2ExchangeCodec;->reportedContentLength(Lokhttp3/Response;)J -PLokhttp3/internal/http2/Http2Reader$Companion;->lengthWithoutPadding(III)I -PLokhttp3/internal/http2/Http2Reader$ContinuationSource;->(Lokio/BufferedSource;)V -PLokhttp3/internal/http2/Http2Reader$ContinuationSource;->read(Lokio/Buffer;J)J -PLokhttp3/internal/http2/Http2Reader;->()V -PLokhttp3/internal/http2/Http2Reader;->(Lokio/BufferedSource;Z)V -PLokhttp3/internal/http2/Http2Reader;->close()V -PLokhttp3/internal/http2/Http2Reader;->nextFrame(ZLokhttp3/internal/http2/Http2Reader$Handler;)Z -PLokhttp3/internal/http2/Http2Reader;->readConnectionPreface(Lokhttp3/internal/http2/Http2Reader$Handler;)V -PLokhttp3/internal/http2/Http2Reader;->readHeaderBlock(IIII)Ljava/util/List; -PLokhttp3/internal/http2/Http2Stream$FramingSink;->(Lokhttp3/internal/http2/Http2Stream;Z)V -PLokhttp3/internal/http2/Http2Stream$FramingSink;->close()V -PLokhttp3/internal/http2/Http2Stream$FramingSource;->(Lokhttp3/internal/http2/Http2Stream;JZ)V -PLokhttp3/internal/http2/Http2Stream$FramingSource;->close()V -PLokhttp3/internal/http2/Http2Stream$FramingSource;->read(Lokio/Buffer;J)J -PLokhttp3/internal/http2/Http2Stream$FramingSource;->updateConnectionFlowControl(J)V -PLokhttp3/internal/http2/Http2Stream$StreamTimeout;->(Lokhttp3/internal/http2/Http2Stream;)V -PLokhttp3/internal/http2/Http2Stream$StreamTimeout;->exitAndThrowIfTimedOut()V -PLokhttp3/internal/http2/Http2Stream;->(ILokhttp3/internal/http2/Http2Connection;ZZLokhttp3/Headers;)V -PLokhttp3/internal/http2/Http2Stream;->cancelStreamIfNecessary$okhttp()V -PLokhttp3/internal/http2/Http2Stream;->closeInternal(Lokhttp3/internal/http2/ErrorCode;Ljava/io/IOException;)Z -PLokhttp3/internal/http2/Http2Stream;->closeLater(Lokhttp3/internal/http2/ErrorCode;)V -PLokhttp3/internal/http2/Http2Stream;->getSink()Lokhttp3/internal/http2/Http2Stream$FramingSink; -PLokhttp3/internal/http2/Http2Stream;->isLocallyInitiated()Z -PLokhttp3/internal/http2/Http2Stream;->isOpen()Z -PLokhttp3/internal/http2/Http2Stream;->receiveHeaders(Lokhttp3/Headers;Z)V -PLokhttp3/internal/http2/Http2Stream;->waitForIo$okhttp()V -PLokhttp3/internal/http2/Http2Writer;->()V -PLokhttp3/internal/http2/Http2Writer;->(Lokio/BufferedSink;Z)V -PLokhttp3/internal/http2/Http2Writer;->applyAndAckSettings(Lokhttp3/internal/http2/Settings;)V -PLokhttp3/internal/http2/Http2Writer;->close()V -PLokhttp3/internal/http2/Http2Writer;->frameHeader(IIII)V -PLokhttp3/internal/http2/Http2Writer;->goAway(ILokhttp3/internal/http2/ErrorCode;[B)V -PLokhttp3/internal/http2/Http2Writer;->ping(IIZ)V -PLokhttp3/internal/http2/Http2Writer;->rstStream(ILokhttp3/internal/http2/ErrorCode;)V -PLokhttp3/internal/http2/Http2Writer;->windowUpdate(JI)V -PLokhttp3/internal/http2/Huffman$Node;->()V -PLokhttp3/internal/http2/Huffman$Node;->(II)V -PLokhttp3/internal/http2/Huffman;->()V -PLokhttp3/internal/http2/Huffman;->addCode(III)V -PLokhttp3/internal/http2/PushObserver$Companion$PushObserverCancel;->()V -PLokhttp3/internal/http2/PushObserver;->()V -PLokhttp3/internal/http2/Settings;->()V -PLokhttp3/internal/http2/Settings;->getInitialWindowSize()I -PLokhttp3/internal/http2/Settings;->merge(Lokhttp3/internal/http2/Settings;)V -PLokhttp3/internal/http2/Settings;->set(II)V -PLokhttp3/internal/http2/StreamResetException;->(Lokhttp3/internal/http2/ErrorCode;)V -PLokhttp3/internal/platform/Android10Platform;->getSelectedProtocol(Ljavax/net/ssl/SSLSocket;)Ljava/lang/String; -PLokhttp3/internal/platform/Jdk9Platform$$ExternalSyntheticApiModelOutline1;->m(Ljavax/net/ssl/SSLSocket;)Ljava/lang/String; -PLokhttp3/internal/platform/Platform;->afterHandshake(Ljavax/net/ssl/SSLSocket;)V -PLokhttp3/internal/platform/android/Android10SocketAdapter;->getSelectedProtocol(Ljavax/net/ssl/SSLSocket;)Ljava/lang/String; -PLokhttp3/internal/platform/android/AndroidCertificateChainCleaner;->equals(Ljava/lang/Object;)Z -PLokhttp3/internal/tls/OkHostnameVerifier;->getSubjectAltNames(Ljava/security/cert/X509Certificate;I)Ljava/util/List; -PLokhttp3/internal/tls/OkHostnameVerifier;->isAscii(Ljava/lang/String;)Z -PLokhttp3/internal/tls/OkHostnameVerifier;->verify(Ljava/lang/String;Ljava/security/cert/X509Certificate;)Z -PLokhttp3/internal/tls/OkHostnameVerifier;->verify(Ljava/lang/String;Ljavax/net/ssl/SSLSession;)Z -PLokio/AsyncTimeout$Companion;->awaitTimeout$okio()Lokio/AsyncTimeout; -PLokio/AsyncTimeout$Watchdog;->()V -PLokio/AsyncTimeout$Watchdog;->run()V -PLokio/AsyncTimeout$sink$1;->close()V -PLokio/AsyncTimeout$sink$1;->flush()V -PLokio/AsyncTimeout$sink$1;->write(Lokio/Buffer;J)V -PLokio/AsyncTimeout$source$1;->close()V -PLokio/AsyncTimeout$source$1;->read(Lokio/Buffer;J)J -PLokio/AsyncTimeout;->exit()Z -PLokio/Buffer;->copyTo(JJLokio/Buffer;)V -PLokio/Buffer;->readShort()S -PLokio/Buffer;->readUtf8(J)Ljava/lang/String; -PLokio/Buffer;->skip(J)V -PLokio/Buffer;->writeShort(I)V -PLokio/ByteString;->hashCode()I -PLokio/ByteString;->toAsciiLowercase()Lokio/ByteString; -PLokio/FileSystem;->metadata(Lokio/Path;)Lokio/FileMetadata; -PLokio/ForwardingSink;->flush()V -PLokio/ForwardingSink;->write(Lokio/Buffer;J)V -PLokio/ForwardingSource;->(Lokio/Source;)V -PLokio/ForwardingSource;->close()V -PLokio/ForwardingSource;->read(Lokio/Buffer;J)J -PLokio/InputStreamSource;->close()V -PLokio/JvmSystemFileSystem;->source(Lokio/Path;)Lokio/Source; -PLokio/OutputStreamSink;->flush()V -PLokio/PeekSource;->(Lokio/BufferedSource;)V -PLokio/PeekSource;->read(Lokio/Buffer;J)J -PLokio/RealBufferedSink;->flush()V -PLokio/RealBufferedSink;->write(Lokio/Buffer;J)V -PLokio/RealBufferedSink;->write(Lokio/ByteString;)Lokio/BufferedSink; -PLokio/RealBufferedSink;->writeInt(I)Lokio/BufferedSink; -PLokio/RealBufferedSink;->writeShort(I)Lokio/BufferedSink; -PLokio/RealBufferedSource$inputStream$1;->(Lokio/RealBufferedSource;)V -PLokio/RealBufferedSource$inputStream$1;->available()I -PLokio/RealBufferedSource$inputStream$1;->close()V -PLokio/RealBufferedSource$inputStream$1;->read([BII)I -PLokio/RealBufferedSource;->close()V -PLokio/RealBufferedSource;->exhausted()Z -PLokio/RealBufferedSource;->getBuffer()Lokio/Buffer; -PLokio/RealBufferedSource;->indexOf(BJJ)J -PLokio/RealBufferedSource;->inputStream()Ljava/io/InputStream; -PLokio/RealBufferedSource;->rangeEquals(JLokio/ByteString;)Z -PLokio/RealBufferedSource;->read(Lokio/Buffer;J)J -PLokio/RealBufferedSource;->readAll(Lokio/RealBufferedSink;)J -PLokio/RealBufferedSource;->readByte()B -PLokio/RealBufferedSource;->readByteString(J)Lokio/ByteString; -PLokio/RealBufferedSource;->readInt()I -PLokio/RealBufferedSource;->readShort()S -PLokio/RealBufferedSource;->readUtf8LineStrict()Ljava/lang/String; -PLokio/RealBufferedSource;->readUtf8LineStrict(J)Ljava/lang/String; -PLokio/RealBufferedSource;->require(J)V -PLokio/RealBufferedSource;->skip(J)V -PLokio/Segment;->sharedCopy()Lokio/Segment; -PLokio/Timeout$Companion$NONE$1;->throwIfReached()V -PLokio/internal/_BufferKt;->readUtf8Line(Lokio/Buffer;J)Ljava/lang/String; diff --git a/app/src/main/java/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt b/app/src/main/java/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt deleted file mode 100644 index 8dbd0fcb6..000000000 --- a/app/src/main/java/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright 2022 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.samples.apps.nowinandroid.navigation - -import androidx.compose.ui.graphics.vector.ImageVector -import com.google.samples.apps.nowinandroid.R -import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons -import com.google.samples.apps.nowinandroid.feature.bookmarks.R as bookmarksR -import com.google.samples.apps.nowinandroid.feature.foryou.R as forYouR -import com.google.samples.apps.nowinandroid.feature.interests.R as interestsR - -/** - * Type for the top level destinations in the application. Each of these destinations - * can contain one or more screens (based on the window size). Navigation from one screen to the - * next within a single destination will be handled directly in composables. - */ -enum class TopLevelDestination( - val selectedIcon: ImageVector, - val unselectedIcon: ImageVector, - val iconTextId: Int, - val titleTextId: Int, -) { - FOR_YOU( - selectedIcon = NiaIcons.Upcoming, - unselectedIcon = NiaIcons.UpcomingBorder, - iconTextId = forYouR.string.for_you, - titleTextId = R.string.app_name, - ), - BOOKMARKS( - selectedIcon = NiaIcons.Bookmarks, - unselectedIcon = NiaIcons.BookmarksBorder, - iconTextId = bookmarksR.string.saved, - titleTextId = bookmarksR.string.saved, - ), - INTERESTS( - selectedIcon = NiaIcons.Grid3x3, - unselectedIcon = NiaIcons.Grid3x3, - iconTextId = interestsR.string.interests, - titleTextId = interestsR.string.interests, - ), -} diff --git a/app/src/main/java/com/google/samples/apps/nowinandroid/ui/NiaApp.kt b/app/src/main/java/com/google/samples/apps/nowinandroid/ui/NiaApp.kt deleted file mode 100644 index aa85afebd..000000000 --- a/app/src/main/java/com/google/samples/apps/nowinandroid/ui/NiaApp.kt +++ /dev/null @@ -1,309 +0,0 @@ -/* - * Copyright 2022 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.samples.apps.nowinandroid.ui - -import androidx.compose.foundation.layout.Column -import androidx.compose.foundation.layout.ExperimentalLayoutApi -import androidx.compose.foundation.layout.Row -import androidx.compose.foundation.layout.WindowInsets -import androidx.compose.foundation.layout.WindowInsetsSides -import androidx.compose.foundation.layout.consumeWindowInsets -import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.foundation.layout.only -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.safeDrawing -import androidx.compose.foundation.layout.safeDrawingPadding -import androidx.compose.foundation.layout.windowInsetsPadding -import androidx.compose.material3.ExperimentalMaterial3Api -import androidx.compose.material3.Icon -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.Scaffold -import androidx.compose.material3.SnackbarDuration.Indefinite -import androidx.compose.material3.SnackbarDuration.Short -import androidx.compose.material3.SnackbarHost -import androidx.compose.material3.SnackbarHostState -import androidx.compose.material3.SnackbarResult.ActionPerformed -import androidx.compose.material3.Text -import androidx.compose.material3.TopAppBarDefaults -import androidx.compose.material3.windowsizeclass.WindowSizeClass -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.saveable.rememberSaveable -import androidx.compose.runtime.setValue -import androidx.compose.ui.ExperimentalComposeUiApi -import androidx.compose.ui.Modifier -import androidx.compose.ui.composed -import androidx.compose.ui.draw.drawWithContent -import androidx.compose.ui.geometry.Offset -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.platform.testTag -import androidx.compose.ui.res.stringResource -import androidx.compose.ui.semantics.semantics -import androidx.compose.ui.semantics.testTagsAsResourceId -import androidx.compose.ui.unit.dp -import androidx.lifecycle.compose.collectAsStateWithLifecycle -import androidx.navigation.NavDestination -import androidx.navigation.NavDestination.Companion.hierarchy -import com.google.samples.apps.nowinandroid.R -import com.google.samples.apps.nowinandroid.core.data.repository.UserNewsResourceRepository -import com.google.samples.apps.nowinandroid.core.data.util.NetworkMonitor -import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaBackground -import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaGradientBackground -import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaNavigationBar -import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaNavigationBarItem -import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaNavigationRail -import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaNavigationRailItem -import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaTopAppBar -import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons -import com.google.samples.apps.nowinandroid.core.designsystem.theme.GradientColors -import com.google.samples.apps.nowinandroid.core.designsystem.theme.LocalGradientColors -import com.google.samples.apps.nowinandroid.feature.settings.SettingsDialog -import com.google.samples.apps.nowinandroid.navigation.NiaNavHost -import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination -import com.google.samples.apps.nowinandroid.feature.settings.R as settingsR - -@OptIn( - ExperimentalMaterial3Api::class, - ExperimentalLayoutApi::class, - ExperimentalComposeUiApi::class, -) -@Composable -fun NiaApp( - windowSizeClass: WindowSizeClass, - networkMonitor: NetworkMonitor, - userNewsResourceRepository: UserNewsResourceRepository, - appState: NiaAppState = rememberNiaAppState( - networkMonitor = networkMonitor, - windowSizeClass = windowSizeClass, - userNewsResourceRepository = userNewsResourceRepository, - ), -) { - val shouldShowGradientBackground = - appState.currentTopLevelDestination == TopLevelDestination.FOR_YOU - var showSettingsDialog by rememberSaveable { - mutableStateOf(false) - } - - NiaBackground { - NiaGradientBackground( - gradientColors = if (shouldShowGradientBackground) { - LocalGradientColors.current - } else { - GradientColors() - }, - ) { - val snackbarHostState = remember { SnackbarHostState() } - - val isOffline by appState.isOffline.collectAsStateWithLifecycle() - - // If user is not connected to the internet show a snack bar to inform them. - val notConnectedMessage = stringResource(R.string.not_connected) - LaunchedEffect(isOffline) { - if (isOffline) { - snackbarHostState.showSnackbar( - message = notConnectedMessage, - duration = Indefinite, - ) - } - } - - if (showSettingsDialog) { - SettingsDialog( - onDismiss = { showSettingsDialog = false }, - ) - } - - val unreadDestinations by appState.topLevelDestinationsWithUnreadResources.collectAsStateWithLifecycle() - - Scaffold( - modifier = Modifier.semantics { - testTagsAsResourceId = true - }, - containerColor = Color.Transparent, - contentColor = MaterialTheme.colorScheme.onBackground, - contentWindowInsets = WindowInsets(0, 0, 0, 0), - snackbarHost = { SnackbarHost(snackbarHostState) }, - bottomBar = { - if (appState.shouldShowBottomBar) { - NiaBottomBar( - destinations = appState.topLevelDestinations, - destinationsWithUnreadResources = unreadDestinations, - onNavigateToDestination = appState::navigateToTopLevelDestination, - currentDestination = appState.currentDestination, - modifier = Modifier.testTag("NiaBottomBar"), - ) - } - }, - ) { padding -> - Row( - Modifier - .fillMaxSize() - .padding(padding) - .consumeWindowInsets(padding) - .windowInsetsPadding( - WindowInsets.safeDrawing.only( - WindowInsetsSides.Horizontal, - ), - ), - ) { - if (appState.shouldShowNavRail) { - NiaNavRail( - destinations = appState.topLevelDestinations, - destinationsWithUnreadResources = unreadDestinations, - onNavigateToDestination = appState::navigateToTopLevelDestination, - currentDestination = appState.currentDestination, - modifier = Modifier - .testTag("NiaNavRail") - .safeDrawingPadding(), - ) - } - - Column(Modifier.fillMaxSize()) { - // Show the top app bar on top level destinations. - val destination = appState.currentTopLevelDestination - if (destination != null) { - NiaTopAppBar( - titleRes = destination.titleTextId, - navigationIcon = NiaIcons.Search, - navigationIconContentDescription = stringResource( - id = settingsR.string.top_app_bar_navigation_icon_description, - ), - actionIcon = NiaIcons.Settings, - actionIconContentDescription = stringResource( - id = settingsR.string.top_app_bar_action_icon_description, - ), - colors = TopAppBarDefaults.centerAlignedTopAppBarColors( - containerColor = Color.Transparent, - ), - onActionClick = { showSettingsDialog = true }, - onNavigationClick = { appState.navigateToSearch() }, - ) - } - - NiaNavHost(appState = appState, onShowSnackbar = { message, action -> - snackbarHostState.showSnackbar( - message = message, - actionLabel = action, - duration = Short, - ) == ActionPerformed - }) - } - - // TODO: We may want to add padding or spacer when the snackbar is shown so that - // content doesn't display behind it. - } - } - } - } -} - -@Composable -private fun NiaNavRail( - destinations: List, - destinationsWithUnreadResources: Set, - onNavigateToDestination: (TopLevelDestination) -> Unit, - currentDestination: NavDestination?, - modifier: Modifier = Modifier, -) { - NiaNavigationRail(modifier = modifier) { - destinations.forEach { destination -> - val selected = currentDestination.isTopLevelDestinationInHierarchy(destination) - val hasUnread = destinationsWithUnreadResources.contains(destination) - NiaNavigationRailItem( - selected = selected, - onClick = { onNavigateToDestination(destination) }, - icon = { - Icon( - imageVector = destination.unselectedIcon, - contentDescription = null, - ) - }, - selectedIcon = { - Icon( - imageVector = destination.selectedIcon, - contentDescription = null, - ) - }, - label = { Text(stringResource(destination.iconTextId)) }, - modifier = if (hasUnread) Modifier.notificationDot() else Modifier, - ) - } - } -} - -@Composable -private fun NiaBottomBar( - destinations: List, - destinationsWithUnreadResources: Set, - onNavigateToDestination: (TopLevelDestination) -> Unit, - currentDestination: NavDestination?, - modifier: Modifier = Modifier, -) { - NiaNavigationBar( - modifier = modifier, - ) { - destinations.forEach { destination -> - val hasUnread = destinationsWithUnreadResources.contains(destination) - val selected = currentDestination.isTopLevelDestinationInHierarchy(destination) - NiaNavigationBarItem( - selected = selected, - onClick = { onNavigateToDestination(destination) }, - icon = { - Icon( - imageVector = destination.unselectedIcon, - contentDescription = null, - ) - }, - selectedIcon = { - Icon( - imageVector = destination.selectedIcon, - contentDescription = null, - ) - }, - label = { Text(stringResource(destination.iconTextId)) }, - modifier = if (hasUnread) Modifier.notificationDot() else Modifier, - ) - } - } -} - -private fun Modifier.notificationDot(): Modifier = - composed { - val tertiaryColor = MaterialTheme.colorScheme.tertiary - drawWithContent { - drawContent() - drawCircle( - tertiaryColor, - radius = 5.dp.toPx(), - // This is based on the dimensions of the NavigationBar's "indicator pill"; - // however, its parameters are private, so we must depend on them implicitly - // (NavigationBarTokens.ActiveIndicatorWidth = 64.dp) - center = center + Offset( - 64.dp.toPx() * .45f, - 32.dp.toPx() * -.45f - 6.dp.toPx(), - ), - ) - } - } - -private fun NavDestination?.isTopLevelDestinationInHierarchy(destination: TopLevelDestination) = - this?.hierarchy?.any { - it.route?.contains(destination.name, true) ?: false - } ?: false diff --git a/app/src/main/java/com/google/samples/apps/nowinandroid/MainActivity.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/MainActivity.kt similarity index 73% rename from app/src/main/java/com/google/samples/apps/nowinandroid/MainActivity.kt rename to app/src/main/kotlin/com/google/samples/apps/nowinandroid/MainActivity.kt index 7fe1bc674..599bd0b35 100644 --- a/app/src/main/java/com/google/samples/apps/nowinandroid/MainActivity.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/MainActivity.kt @@ -17,15 +17,12 @@ package com.google.samples.apps.nowinandroid import android.os.Bundle -import android.util.Log import androidx.activity.ComponentActivity import androidx.activity.SystemBarStyle import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge import androidx.activity.viewModels import androidx.compose.foundation.isSystemInDarkTheme -import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi -import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.DisposableEffect @@ -34,32 +31,29 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen import androidx.lifecycle.Lifecycle +import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle import androidx.metrics.performance.JankStats -import androidx.profileinstaller.ProfileVerifier import com.google.samples.apps.nowinandroid.MainActivityUiState.Loading import com.google.samples.apps.nowinandroid.MainActivityUiState.Success import com.google.samples.apps.nowinandroid.core.analytics.AnalyticsHelper import com.google.samples.apps.nowinandroid.core.analytics.LocalAnalyticsHelper import com.google.samples.apps.nowinandroid.core.data.repository.UserNewsResourceRepository import com.google.samples.apps.nowinandroid.core.data.util.NetworkMonitor +import com.google.samples.apps.nowinandroid.core.data.util.TimeZoneMonitor import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme import com.google.samples.apps.nowinandroid.core.model.data.DarkThemeConfig import com.google.samples.apps.nowinandroid.core.model.data.ThemeBrand +import com.google.samples.apps.nowinandroid.core.ui.LocalTimeZone import com.google.samples.apps.nowinandroid.ui.NiaApp +import com.google.samples.apps.nowinandroid.ui.rememberNiaAppState import dagger.hilt.android.AndroidEntryPoint -import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.onEach -import kotlinx.coroutines.guava.await import kotlinx.coroutines.launch -import kotlinx.coroutines.withContext import javax.inject.Inject -private const val TAG = "MainActivity" - -@OptIn(ExperimentalMaterial3WindowSizeClassApi::class) @AndroidEntryPoint class MainActivity : ComponentActivity() { @@ -72,13 +66,16 @@ class MainActivity : ComponentActivity() { @Inject lateinit var networkMonitor: NetworkMonitor + @Inject + lateinit var timeZoneMonitor: TimeZoneMonitor + @Inject lateinit var analyticsHelper: AnalyticsHelper @Inject lateinit var userNewsResourceRepository: UserNewsResourceRepository - val viewModel: MainActivityViewModel by viewModels() + private val viewModel: MainActivityViewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { val splashScreen = installSplashScreen() @@ -90,9 +87,7 @@ class MainActivity : ComponentActivity() { lifecycleScope.launch { lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) { viewModel.uiState - .onEach { - uiState = it - } + .onEach { uiState = it } .collect() } } @@ -133,17 +128,24 @@ class MainActivity : ComponentActivity() { onDispose {} } - CompositionLocalProvider(LocalAnalyticsHelper provides analyticsHelper) { + val appState = rememberNiaAppState( + networkMonitor = networkMonitor, + userNewsResourceRepository = userNewsResourceRepository, + timeZoneMonitor = timeZoneMonitor, + ) + + val currentTimeZone by appState.currentTimeZone.collectAsStateWithLifecycle() + + CompositionLocalProvider( + LocalAnalyticsHelper provides analyticsHelper, + LocalTimeZone provides currentTimeZone, + ) { NiaTheme( darkTheme = darkTheme, androidTheme = shouldUseAndroidTheme(uiState), disableDynamicTheming = shouldDisableDynamicTheming(uiState), ) { - NiaApp( - networkMonitor = networkMonitor, - windowSizeClass = calculateWindowSizeClass(this), - userNewsResourceRepository = userNewsResourceRepository, - ) + NiaApp(appState) } } } @@ -152,48 +154,12 @@ class MainActivity : ComponentActivity() { override fun onResume() { super.onResume() lazyStats.get().isTrackingEnabled = true - lifecycleScope.launch { - logCompilationStatus() - } } override fun onPause() { super.onPause() lazyStats.get().isTrackingEnabled = false } - - /** - * Logs the app's Baseline Profile Compilation Status using [ProfileVerifier]. - */ - private suspend fun logCompilationStatus() { - /* - When delivering through Google Play, the baseline profile is compiled during installation. - In this case you will see the correct state logged without any further action necessary. - To verify baseline profile installation locally, you need to manually trigger baseline - profile installation. - For immediate compilation, call: - `adb shell cmd package compile -f -m speed-profile com.example.macrobenchmark.target` - You can also trigger background optimizations: - `adb shell pm bg-dexopt-job` - Both jobs run asynchronously and might take some time complete. - To see quick turnaround of the ProfileVerifier, we recommend using `speed-profile`. - If you don't do either of these steps, you might only see the profile status reported as - "enqueued for compilation" when running the sample locally. - */ - withContext(Dispatchers.IO) { - val status = ProfileVerifier.getCompilationStatusAsync().await() - Log.d(TAG, "ProfileInstaller status code: ${status.profileInstallResultCode}") - Log.d( - TAG, - when { - status.isCompiledWithProfile -> "ProfileInstaller: is compiled with profile" - status.hasProfileEnqueuedForCompilation() -> - "ProfileInstaller: Enqueued for compilation" - else -> "Profile not compiled or enqueued" - }, - ) - } - } } /** diff --git a/app/src/main/java/com/google/samples/apps/nowinandroid/MainActivityViewModel.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/MainActivityViewModel.kt similarity index 100% rename from app/src/main/java/com/google/samples/apps/nowinandroid/MainActivityViewModel.kt rename to app/src/main/kotlin/com/google/samples/apps/nowinandroid/MainActivityViewModel.kt diff --git a/app/src/main/java/com/google/samples/apps/nowinandroid/NiaApplication.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/NiaApplication.kt similarity index 84% rename from app/src/main/java/com/google/samples/apps/nowinandroid/NiaApplication.kt rename to app/src/main/kotlin/com/google/samples/apps/nowinandroid/NiaApplication.kt index 699f52575..8e3ad814a 100644 --- a/app/src/main/java/com/google/samples/apps/nowinandroid/NiaApplication.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/NiaApplication.kt @@ -20,9 +20,9 @@ import android.app.Application import coil.ImageLoader import coil.ImageLoaderFactory import com.google.samples.apps.nowinandroid.sync.initializers.Sync +import com.google.samples.apps.nowinandroid.util.ProfileVerifierLogger import dagger.hilt.android.HiltAndroidApp import javax.inject.Inject -import javax.inject.Provider /** * [Application] class for NiA @@ -30,12 +30,16 @@ import javax.inject.Provider @HiltAndroidApp class NiaApplication : Application(), ImageLoaderFactory { @Inject - lateinit var imageLoader: Provider + lateinit var imageLoader: dagger.Lazy + + @Inject + lateinit var profileVerifierLogger: ProfileVerifierLogger override fun onCreate() { super.onCreate() // Initialize Sync; the system responsible for keeping data in the app up to date. Sync.initialize(context = this) + profileVerifierLogger() } override fun newImageLoader(): ImageLoader = imageLoader.get() diff --git a/app/src/main/java/com/google/samples/apps/nowinandroid/di/JankStatsModule.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/di/JankStatsModule.kt similarity index 65% rename from app/src/main/java/com/google/samples/apps/nowinandroid/di/JankStatsModule.kt rename to app/src/main/kotlin/com/google/samples/apps/nowinandroid/di/JankStatsModule.kt index be64d057f..56d1b6e24 100644 --- a/app/src/main/java/com/google/samples/apps/nowinandroid/di/JankStatsModule.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/di/JankStatsModule.kt @@ -20,6 +20,7 @@ import android.app.Activity import android.util.Log import android.view.Window import androidx.metrics.performance.JankStats +import androidx.metrics.performance.JankStats.OnFrameListener import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -29,26 +30,20 @@ import dagger.hilt.android.components.ActivityComponent @InstallIn(ActivityComponent::class) object JankStatsModule { @Provides - fun providesOnFrameListener(): JankStats.OnFrameListener { - return JankStats.OnFrameListener { frameData -> - // Make sure to only log janky frames. - if (frameData.isJank) { - // We're currently logging this but would better report it to a backend. - Log.v("NiA Jank", frameData.toString()) - } + fun providesOnFrameListener(): OnFrameListener = OnFrameListener { frameData -> + // Make sure to only log janky frames. + if (frameData.isJank) { + // We're currently logging this but would better report it to a backend. + Log.v("NiA Jank", frameData.toString()) } } @Provides - fun providesWindow(activity: Activity): Window { - return activity.window - } + fun providesWindow(activity: Activity): Window = activity.window @Provides fun providesJankStats( window: Window, - frameListener: JankStats.OnFrameListener, - ): JankStats { - return JankStats.createAndTrack(window, frameListener) - } + frameListener: OnFrameListener, + ): JankStats = JankStats.createAndTrack(window, frameListener) } diff --git a/app/src/main/java/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt similarity index 79% rename from app/src/main/java/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt rename to app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt index 3d58ed5a6..e079c98f4 100644 --- a/app/src/main/java/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/NiaNavHost.kt @@ -20,14 +20,15 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.navigation.compose.NavHost import com.google.samples.apps.nowinandroid.feature.bookmarks.navigation.bookmarksScreen -import com.google.samples.apps.nowinandroid.feature.foryou.navigation.forYouNavigationRoute -import com.google.samples.apps.nowinandroid.feature.foryou.navigation.forYouScreen -import com.google.samples.apps.nowinandroid.feature.interests.navigation.interestsGraph +import com.google.samples.apps.nowinandroid.feature.foryou.navigation.ForYouBaseRoute +import com.google.samples.apps.nowinandroid.feature.foryou.navigation.forYouSection +import com.google.samples.apps.nowinandroid.feature.interests.navigation.navigateToInterests import com.google.samples.apps.nowinandroid.feature.search.navigation.searchScreen import com.google.samples.apps.nowinandroid.feature.topic.navigation.navigateToTopic import com.google.samples.apps.nowinandroid.feature.topic.navigation.topicScreen import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination.INTERESTS import com.google.samples.apps.nowinandroid.ui.NiaAppState +import com.google.samples.apps.nowinandroid.ui.interests2pane.interestsListDetailScreen /** * Top-level navigation graph. Navigation is organized as explained at @@ -41,32 +42,31 @@ fun NiaNavHost( appState: NiaAppState, onShowSnackbar: suspend (String, String?) -> Boolean, modifier: Modifier = Modifier, - startDestination: String = forYouNavigationRoute, ) { val navController = appState.navController NavHost( navController = navController, - startDestination = startDestination, + startDestination = ForYouBaseRoute, modifier = modifier, ) { - forYouScreen(onTopicClick = navController::navigateToTopic) - bookmarksScreen( + forYouSection( onTopicClick = navController::navigateToTopic, + ) { + topicScreen( + showBackButton = true, + onBackClick = navController::popBackStack, + onTopicClick = navController::navigateToTopic, + ) + } + bookmarksScreen( + onTopicClick = navController::navigateToInterests, onShowSnackbar = onShowSnackbar, ) searchScreen( onBackClick = navController::popBackStack, onInterestsClick = { appState.navigateToTopLevelDestination(INTERESTS) }, - onTopicClick = navController::navigateToTopic, - ) - interestsGraph( - onTopicClick = navController::navigateToTopic, - nestedGraphs = { - topicScreen( - onBackClick = navController::popBackStack, - onTopicClick = navController::navigateToTopic, - ) - }, + onTopicClick = navController::navigateToInterests, ) + interestsListDetailScreen() } } diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt new file mode 100644 index 000000000..429e626ff --- /dev/null +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/navigation/TopLevelDestination.kt @@ -0,0 +1,76 @@ +/* + * Copyright 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.navigation + +import androidx.annotation.StringRes +import androidx.compose.ui.graphics.vector.ImageVector +import com.google.samples.apps.nowinandroid.R +import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons +import com.google.samples.apps.nowinandroid.feature.bookmarks.navigation.BookmarksRoute +import com.google.samples.apps.nowinandroid.feature.foryou.navigation.ForYouBaseRoute +import com.google.samples.apps.nowinandroid.feature.foryou.navigation.ForYouRoute +import com.google.samples.apps.nowinandroid.feature.interests.navigation.InterestsRoute +import kotlin.reflect.KClass +import com.google.samples.apps.nowinandroid.feature.bookmarks.R as bookmarksR +import com.google.samples.apps.nowinandroid.feature.foryou.R as forYouR +import com.google.samples.apps.nowinandroid.feature.search.R as searchR + +/** + * Type for the top level destinations in the application. Contains metadata about the destination + * that is used in the top app bar and common navigation UI. + * + * @param selectedIcon The icon to be displayed in the navigation UI when this destination is + * selected. + * @param unselectedIcon The icon to be displayed in the navigation UI when this destination is + * not selected. + * @param iconTextId Text that to be displayed in the navigation UI. + * @param titleTextId Text that is displayed on the top app bar. + * @param route The route to use when navigating to this destination. + * @param baseRoute The highest ancestor of this destination. Defaults to [route], meaning that + * there is a single destination in that section of the app (no nested destinations). + */ +enum class TopLevelDestination( + val selectedIcon: ImageVector, + val unselectedIcon: ImageVector, + @StringRes val iconTextId: Int, + @StringRes val titleTextId: Int, + val route: KClass<*>, + val baseRoute: KClass<*> = route, +) { + FOR_YOU( + selectedIcon = NiaIcons.Upcoming, + unselectedIcon = NiaIcons.UpcomingBorder, + iconTextId = forYouR.string.feature_foryou_title, + titleTextId = R.string.app_name, + route = ForYouRoute::class, + baseRoute = ForYouBaseRoute::class, + ), + BOOKMARKS( + selectedIcon = NiaIcons.Bookmarks, + unselectedIcon = NiaIcons.BookmarksBorder, + iconTextId = bookmarksR.string.feature_bookmarks_title, + titleTextId = bookmarksR.string.feature_bookmarks_title, + route = BookmarksRoute::class, + ), + INTERESTS( + selectedIcon = NiaIcons.Grid3x3, + unselectedIcon = NiaIcons.Grid3x3, + iconTextId = searchR.string.feature_search_interests, + titleTextId = searchR.string.feature_search_interests, + route = InterestsRoute::class, + ), +} diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt new file mode 100644 index 000000000..640b22e83 --- /dev/null +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaApp.kt @@ -0,0 +1,276 @@ +/* + * Copyright 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.ui + +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.WindowInsetsSides +import androidx.compose.foundation.layout.consumeWindowInsets +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.only +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.safeDrawing +import androidx.compose.foundation.layout.windowInsetsPadding +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Scaffold +import androidx.compose.material3.SnackbarDuration.Indefinite +import androidx.compose.material3.SnackbarDuration.Short +import androidx.compose.material3.SnackbarHost +import androidx.compose.material3.SnackbarHostState +import androidx.compose.material3.SnackbarResult.ActionPerformed +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi +import androidx.compose.material3.adaptive.WindowAdaptiveInfo +import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue +import androidx.compose.ui.ExperimentalComposeUiApi +import androidx.compose.ui.Modifier +import androidx.compose.ui.composed +import androidx.compose.ui.draw.drawWithContent +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.testTag +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.semantics.semantics +import androidx.compose.ui.semantics.testTagsAsResourceId +import androidx.compose.ui.unit.dp +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import androidx.navigation.NavDestination +import androidx.navigation.NavDestination.Companion.hasRoute +import androidx.navigation.NavDestination.Companion.hierarchy +import com.google.samples.apps.nowinandroid.R +import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaBackground +import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaGradientBackground +import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaNavigationSuiteScaffold +import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaTopAppBar +import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons +import com.google.samples.apps.nowinandroid.core.designsystem.theme.GradientColors +import com.google.samples.apps.nowinandroid.core.designsystem.theme.LocalGradientColors +import com.google.samples.apps.nowinandroid.feature.settings.SettingsDialog +import com.google.samples.apps.nowinandroid.navigation.NiaNavHost +import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination +import kotlin.reflect.KClass +import com.google.samples.apps.nowinandroid.feature.settings.R as settingsR + +@OptIn(ExperimentalMaterial3AdaptiveApi::class) +@Composable +fun NiaApp( + appState: NiaAppState, + modifier: Modifier = Modifier, + windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo(), +) { + val shouldShowGradientBackground = + appState.currentTopLevelDestination == TopLevelDestination.FOR_YOU + var showSettingsDialog by rememberSaveable { mutableStateOf(false) } + + NiaBackground(modifier = modifier) { + NiaGradientBackground( + gradientColors = if (shouldShowGradientBackground) { + LocalGradientColors.current + } else { + GradientColors() + }, + ) { + val snackbarHostState = remember { SnackbarHostState() } + + val isOffline by appState.isOffline.collectAsStateWithLifecycle() + + // If user is not connected to the internet show a snack bar to inform them. + val notConnectedMessage = stringResource(R.string.not_connected) + LaunchedEffect(isOffline) { + if (isOffline) { + snackbarHostState.showSnackbar( + message = notConnectedMessage, + duration = Indefinite, + ) + } + } + + NiaApp( + appState = appState, + snackbarHostState = snackbarHostState, + showSettingsDialog = showSettingsDialog, + onSettingsDismissed = { showSettingsDialog = false }, + onTopAppBarActionClick = { showSettingsDialog = true }, + windowAdaptiveInfo = windowAdaptiveInfo, + ) + } + } +} + +@Composable +@OptIn( + ExperimentalMaterial3Api::class, + ExperimentalComposeUiApi::class, + ExperimentalMaterial3AdaptiveApi::class, +) +internal fun NiaApp( + appState: NiaAppState, + snackbarHostState: SnackbarHostState, + showSettingsDialog: Boolean, + onSettingsDismissed: () -> Unit, + onTopAppBarActionClick: () -> Unit, + modifier: Modifier = Modifier, + windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo(), +) { + val unreadDestinations by appState.topLevelDestinationsWithUnreadResources + .collectAsStateWithLifecycle() + val currentDestination = appState.currentDestination + + if (showSettingsDialog) { + SettingsDialog( + onDismiss = { onSettingsDismissed() }, + ) + } + + NiaNavigationSuiteScaffold( + navigationSuiteItems = { + appState.topLevelDestinations.forEach { destination -> + val hasUnread = unreadDestinations.contains(destination) + val selected = currentDestination + .isRouteInHierarchy(destination.baseRoute) + item( + selected = selected, + onClick = { appState.navigateToTopLevelDestination(destination) }, + icon = { + Icon( + imageVector = destination.unselectedIcon, + contentDescription = null, + ) + }, + selectedIcon = { + Icon( + imageVector = destination.selectedIcon, + contentDescription = null, + ) + }, + label = { Text(stringResource(destination.iconTextId)) }, + modifier = + Modifier + .testTag("NiaNavItem") + .then(if (hasUnread) Modifier.notificationDot() else Modifier), + ) + } + }, + windowAdaptiveInfo = windowAdaptiveInfo, + ) { + Scaffold( + modifier = modifier.semantics { + testTagsAsResourceId = true + }, + containerColor = Color.Transparent, + contentColor = MaterialTheme.colorScheme.onBackground, + contentWindowInsets = WindowInsets(0, 0, 0, 0), + snackbarHost = { SnackbarHost(snackbarHostState) }, + ) { padding -> + Column( + Modifier + .fillMaxSize() + .padding(padding) + .consumeWindowInsets(padding) + .windowInsetsPadding( + WindowInsets.safeDrawing.only( + WindowInsetsSides.Horizontal, + ), + ), + ) { + // Show the top app bar on top level destinations. + val destination = appState.currentTopLevelDestination + var shouldShowTopAppBar = false + + if (destination != null) { + shouldShowTopAppBar = true + NiaTopAppBar( + titleRes = destination.titleTextId, + navigationIcon = NiaIcons.Search, + navigationIconContentDescription = stringResource( + id = settingsR.string.feature_settings_top_app_bar_navigation_icon_description, + ), + actionIcon = NiaIcons.Settings, + actionIconContentDescription = stringResource( + id = settingsR.string.feature_settings_top_app_bar_action_icon_description, + ), + colors = TopAppBarDefaults.centerAlignedTopAppBarColors( + containerColor = Color.Transparent, + ), + onActionClick = { onTopAppBarActionClick() }, + onNavigationClick = { appState.navigateToSearch() }, + ) + } + + Box( + // Workaround for https://issuetracker.google.com/338478720 + modifier = Modifier.consumeWindowInsets( + if (shouldShowTopAppBar) { + WindowInsets.safeDrawing.only(WindowInsetsSides.Top) + } else { + WindowInsets(0, 0, 0, 0) + }, + ), + ) { + NiaNavHost( + appState = appState, + onShowSnackbar = { message, action -> + snackbarHostState.showSnackbar( + message = message, + actionLabel = action, + duration = Short, + ) == ActionPerformed + }, + ) + } + + // TODO: We may want to add padding or spacer when the snackbar is shown so that + // content doesn't display behind it. + } + } + } +} + +private fun Modifier.notificationDot(): Modifier = + composed { + val tertiaryColor = MaterialTheme.colorScheme.tertiary + drawWithContent { + drawContent() + drawCircle( + tertiaryColor, + radius = 5.dp.toPx(), + // This is based on the dimensions of the NavigationBar's "indicator pill"; + // however, its parameters are private, so we must depend on them implicitly + // (NavigationBarTokens.ActiveIndicatorWidth = 64.dp) + center = center + Offset( + 64.dp.toPx() * .45f, + 32.dp.toPx() * -.45f - 6.dp.toPx(), + ), + ) + } + } + +private fun NavDestination?.isRouteInHierarchy(route: KClass<*>) = + this?.hierarchy?.any { + it.hasRoute(route) + } ?: false diff --git a/app/src/main/java/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt similarity index 82% rename from app/src/main/java/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt rename to app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt index 09e70069e..249f07590 100644 --- a/app/src/main/java/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppState.kt @@ -16,14 +16,13 @@ package com.google.samples.apps.nowinandroid.ui -import androidx.compose.material3.windowsizeclass.WindowSizeClass -import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass import androidx.compose.runtime.Composable import androidx.compose.runtime.Stable import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.navigation.NavController import androidx.navigation.NavDestination +import androidx.navigation.NavDestination.Companion.hasRoute import androidx.navigation.NavGraph.Companion.findStartDestination import androidx.navigation.NavHostController import androidx.navigation.compose.currentBackStackEntryAsState @@ -32,13 +31,11 @@ import androidx.navigation.navOptions import androidx.tracing.trace import com.google.samples.apps.nowinandroid.core.data.repository.UserNewsResourceRepository import com.google.samples.apps.nowinandroid.core.data.util.NetworkMonitor +import com.google.samples.apps.nowinandroid.core.data.util.TimeZoneMonitor import com.google.samples.apps.nowinandroid.core.ui.TrackDisposableJank -import com.google.samples.apps.nowinandroid.feature.bookmarks.navigation.bookmarksRoute import com.google.samples.apps.nowinandroid.feature.bookmarks.navigation.navigateToBookmarks -import com.google.samples.apps.nowinandroid.feature.foryou.navigation.forYouNavigationRoute import com.google.samples.apps.nowinandroid.feature.foryou.navigation.navigateToForYou -import com.google.samples.apps.nowinandroid.feature.interests.navigation.interestsRoute -import com.google.samples.apps.nowinandroid.feature.interests.navigation.navigateToInterestsGraph +import com.google.samples.apps.nowinandroid.feature.interests.navigation.navigateToInterests import com.google.samples.apps.nowinandroid.feature.search.navigation.navigateToSearch import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination import com.google.samples.apps.nowinandroid.navigation.TopLevelDestination.BOOKMARKS @@ -50,12 +47,13 @@ import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn +import kotlinx.datetime.TimeZone @Composable fun rememberNiaAppState( - windowSizeClass: WindowSizeClass, networkMonitor: NetworkMonitor, userNewsResourceRepository: UserNewsResourceRepository, + timeZoneMonitor: TimeZoneMonitor, coroutineScope: CoroutineScope = rememberCoroutineScope(), navController: NavHostController = rememberNavController(), ): NiaAppState { @@ -63,16 +61,16 @@ fun rememberNiaAppState( return remember( navController, coroutineScope, - windowSizeClass, networkMonitor, userNewsResourceRepository, + timeZoneMonitor, ) { NiaAppState( - navController, - coroutineScope, - windowSizeClass, - networkMonitor, - userNewsResourceRepository, + navController = navController, + coroutineScope = coroutineScope, + networkMonitor = networkMonitor, + userNewsResourceRepository = userNewsResourceRepository, + timeZoneMonitor = timeZoneMonitor, ) } } @@ -80,29 +78,22 @@ fun rememberNiaAppState( @Stable class NiaAppState( val navController: NavHostController, - val coroutineScope: CoroutineScope, - val windowSizeClass: WindowSizeClass, + coroutineScope: CoroutineScope, networkMonitor: NetworkMonitor, userNewsResourceRepository: UserNewsResourceRepository, + timeZoneMonitor: TimeZoneMonitor, ) { val currentDestination: NavDestination? @Composable get() = navController .currentBackStackEntryAsState().value?.destination val currentTopLevelDestination: TopLevelDestination? - @Composable get() = when (currentDestination?.route) { - forYouNavigationRoute -> FOR_YOU - bookmarksRoute -> BOOKMARKS - interestsRoute -> INTERESTS - else -> null + @Composable get() { + return TopLevelDestination.entries.firstOrNull { topLevelDestination -> + currentDestination?.hasRoute(route = topLevelDestination.route) == true + } } - val shouldShowBottomBar: Boolean - get() = windowSizeClass.widthSizeClass == WindowWidthSizeClass.Compact - - val shouldShowNavRail: Boolean - get() = !shouldShowBottomBar - val isOffline = networkMonitor.isOnline .map(Boolean::not) .stateIn( @@ -115,7 +106,7 @@ class NiaAppState( * Map of top level destinations to be used in the TopBar, BottomBar and NavRail. The key is the * route. */ - val topLevelDestinations: List = TopLevelDestination.values().asList() + val topLevelDestinations: List = TopLevelDestination.entries /** * The top level destinations that have unread news resources. @@ -127,12 +118,20 @@ class NiaAppState( FOR_YOU.takeIf { forYouNewsResources.any { !it.hasBeenViewed } }, BOOKMARKS.takeIf { bookmarkedNewsResources.any { !it.hasBeenViewed } }, ) - }.stateIn( + } + .stateIn( coroutineScope, SharingStarted.WhileSubscribed(5_000), initialValue = emptySet(), ) + val currentTimeZone = timeZoneMonitor.currentTimeZone + .stateIn( + coroutineScope, + SharingStarted.WhileSubscribed(5_000), + TimeZone.currentSystemDefault(), + ) + /** * UI logic for navigating to a top level destination in the app. Top level destinations have * only one copy of the destination of the back stack, and save and restore state whenever you @@ -159,14 +158,12 @@ class NiaAppState( when (topLevelDestination) { FOR_YOU -> navController.navigateToForYou(topLevelNavOptions) BOOKMARKS -> navController.navigateToBookmarks(topLevelNavOptions) - INTERESTS -> navController.navigateToInterestsGraph(topLevelNavOptions) + INTERESTS -> navController.navigateToInterests(null, topLevelNavOptions) } } } - fun navigateToSearch() { - navController.navigateToSearch() - } + fun navigateToSearch() = navController.navigateToSearch() } /** diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/Interests2PaneViewModel.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/Interests2PaneViewModel.kt new file mode 100644 index 000000000..3d37f3417 --- /dev/null +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/Interests2PaneViewModel.kt @@ -0,0 +1,43 @@ +/* + * Copyright 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.ui.interests2pane + +import androidx.lifecycle.SavedStateHandle +import androidx.lifecycle.ViewModel +import androidx.navigation.toRoute +import com.google.samples.apps.nowinandroid.feature.interests.navigation.InterestsRoute +import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.flow.StateFlow +import javax.inject.Inject + +const val TOPIC_ID_KEY = "selectedTopicId" + +@HiltViewModel +class Interests2PaneViewModel @Inject constructor( + private val savedStateHandle: SavedStateHandle, +) : ViewModel() { + + val route = savedStateHandle.toRoute() + val selectedTopicId: StateFlow = savedStateHandle.getStateFlow( + key = TOPIC_ID_KEY, + initialValue = route.initialTopicId, + ) + + fun onTopicClick(topicId: String?) { + savedStateHandle[TOPIC_ID_KEY] = topicId + } +} diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/InterestsListDetailScreen.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/InterestsListDetailScreen.kt new file mode 100644 index 000000000..669c6300a --- /dev/null +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/ui/interests2pane/InterestsListDetailScreen.kt @@ -0,0 +1,169 @@ +/* + * Copyright 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.ui.interests2pane + +import androidx.activity.compose.BackHandler +import androidx.annotation.Keep +import androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi +import androidx.compose.material3.adaptive.WindowAdaptiveInfo +import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo +import androidx.compose.material3.adaptive.layout.AnimatedPane +import androidx.compose.material3.adaptive.layout.ListDetailPaneScaffold +import androidx.compose.material3.adaptive.layout.ListDetailPaneScaffoldRole +import androidx.compose.material3.adaptive.layout.PaneAdaptedValue +import androidx.compose.material3.adaptive.layout.ThreePaneScaffoldDestinationItem +import androidx.compose.material3.adaptive.layout.calculatePaneScaffoldDirective +import androidx.compose.material3.adaptive.navigation.ThreePaneScaffoldNavigator +import androidx.compose.material3.adaptive.navigation.rememberListDetailPaneScaffoldNavigator +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.key +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.saveable.Saver +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue +import androidx.hilt.navigation.compose.hiltViewModel +import androidx.lifecycle.compose.collectAsStateWithLifecycle +import androidx.navigation.NavGraphBuilder +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable +import androidx.navigation.compose.rememberNavController +import com.google.samples.apps.nowinandroid.feature.interests.InterestsRoute +import com.google.samples.apps.nowinandroid.feature.interests.navigation.InterestsRoute +import com.google.samples.apps.nowinandroid.feature.topic.TopicDetailPlaceholder +import com.google.samples.apps.nowinandroid.feature.topic.navigation.TopicRoute +import com.google.samples.apps.nowinandroid.feature.topic.navigation.navigateToTopic +import com.google.samples.apps.nowinandroid.feature.topic.navigation.topicScreen +import kotlinx.serialization.Serializable +import java.util.UUID + +@Serializable internal object TopicPlaceholderRoute + +// TODO: Remove @Keep when https://issuetracker.google.com/353898971 is fixed +@Keep +@Serializable internal object DetailPaneNavHostRoute + +fun NavGraphBuilder.interestsListDetailScreen() { + composable { + InterestsListDetailScreen() + } +} + +@Composable +internal fun InterestsListDetailScreen( + viewModel: Interests2PaneViewModel = hiltViewModel(), + windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo(), +) { + val selectedTopicId by viewModel.selectedTopicId.collectAsStateWithLifecycle() + InterestsListDetailScreen( + selectedTopicId = selectedTopicId, + onTopicClick = viewModel::onTopicClick, + windowAdaptiveInfo = windowAdaptiveInfo, + ) +} + +@OptIn(ExperimentalMaterial3AdaptiveApi::class) +@Composable +internal fun InterestsListDetailScreen( + selectedTopicId: String?, + onTopicClick: (String) -> Unit, + windowAdaptiveInfo: WindowAdaptiveInfo, +) { + val listDetailNavigator = rememberListDetailPaneScaffoldNavigator( + scaffoldDirective = calculatePaneScaffoldDirective(windowAdaptiveInfo), + initialDestinationHistory = listOfNotNull( + ThreePaneScaffoldDestinationItem(ListDetailPaneScaffoldRole.List), + ThreePaneScaffoldDestinationItem(ListDetailPaneScaffoldRole.Detail).takeIf { + selectedTopicId != null + }, + ), + ) + BackHandler(listDetailNavigator.canNavigateBack()) { + listDetailNavigator.navigateBack() + } + + var nestedNavHostStartRoute by remember { + val route = selectedTopicId?.let { TopicRoute(id = it) } ?: TopicPlaceholderRoute + mutableStateOf(route) + } + var nestedNavKey by rememberSaveable( + stateSaver = Saver({ it.toString() }, UUID::fromString), + ) { + mutableStateOf(UUID.randomUUID()) + } + val nestedNavController = key(nestedNavKey) { + rememberNavController() + } + + fun onTopicClickShowDetailPane(topicId: String) { + onTopicClick(topicId) + if (listDetailNavigator.isDetailPaneVisible()) { + // If the detail pane was visible, then use the nestedNavController navigate call + // directly + nestedNavController.navigateToTopic(topicId) { + popUpTo() + } + } else { + // Otherwise, recreate the NavHost entirely, and start at the new destination + nestedNavHostStartRoute = TopicRoute(id = topicId) + nestedNavKey = UUID.randomUUID() + } + listDetailNavigator.navigateTo(ListDetailPaneScaffoldRole.Detail) + } + + ListDetailPaneScaffold( + value = listDetailNavigator.scaffoldValue, + directive = listDetailNavigator.scaffoldDirective, + listPane = { + AnimatedPane { + InterestsRoute( + onTopicClick = ::onTopicClickShowDetailPane, + highlightSelectedTopic = listDetailNavigator.isDetailPaneVisible(), + ) + } + }, + detailPane = { + AnimatedPane { + key(nestedNavKey) { + NavHost( + navController = nestedNavController, + startDestination = nestedNavHostStartRoute, + route = DetailPaneNavHostRoute::class, + ) { + topicScreen( + showBackButton = !listDetailNavigator.isListPaneVisible(), + onBackClick = listDetailNavigator::navigateBack, + onTopicClick = ::onTopicClickShowDetailPane, + ) + composable { + TopicDetailPlaceholder() + } + } + } + } + }, + ) +} + +@OptIn(ExperimentalMaterial3AdaptiveApi::class) +private fun ThreePaneScaffoldNavigator.isListPaneVisible(): Boolean = + scaffoldValue[ListDetailPaneScaffoldRole.List] == PaneAdaptedValue.Expanded + +@OptIn(ExperimentalMaterial3AdaptiveApi::class) +private fun ThreePaneScaffoldNavigator.isDetailPaneVisible(): Boolean = + scaffoldValue[ListDetailPaneScaffoldRole.Detail] == PaneAdaptedValue.Expanded diff --git a/app/src/main/kotlin/com/google/samples/apps/nowinandroid/util/ProfileVerifierLogger.kt b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/util/ProfileVerifierLogger.kt new file mode 100644 index 000000000..595166f03 --- /dev/null +++ b/app/src/main/kotlin/com/google/samples/apps/nowinandroid/util/ProfileVerifierLogger.kt @@ -0,0 +1,70 @@ +/* + * Copyright 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.util + +import android.util.Log +import androidx.profileinstaller.ProfileVerifier +import com.google.samples.apps.nowinandroid.core.network.di.ApplicationScope +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.guava.await +import kotlinx.coroutines.launch +import javax.inject.Inject + +/** + * Logs the app's Baseline Profile Compilation Status using [ProfileVerifier]. + * + * When delivering through Google Play, the baseline profile is compiled during installation. + * In this case you will see the correct state logged without any further action necessary. + * To verify baseline profile installation locally, you need to manually trigger baseline + * profile installation. + * + * For immediate compilation, call: + * ```bash + * adb shell cmd package compile -f -m speed-profile com.example.macrobenchmark.target + * ``` + * You can also trigger background optimizations: + * ```bash + * adb shell pm bg-dexopt-job + * ``` + * Both jobs run asynchronously and might take some time complete. + * + * To see quick turnaround of the ProfileVerifier, we recommend using `speed-profile`. + * If you don't do either of these steps, you might only see the profile status reported as + * "enqueued for compilation" when running the sample locally. + * + * @see androidx.profileinstaller.ProfileVerifier.CompilationStatus.ResultCode + */ +class ProfileVerifierLogger @Inject constructor( + @ApplicationScope private val scope: CoroutineScope, +) { + companion object { + private const val TAG = "ProfileInstaller" + } + + operator fun invoke() = scope.launch { + val status = ProfileVerifier.getCompilationStatusAsync().await() + Log.d(TAG, "Status code: ${status.profileInstallResultCode}") + Log.d( + TAG, + when { + status.isCompiledWithProfile -> "App compiled with profile" + status.hasProfileEnqueuedForCompilation() -> "Profile enqueued for compilation" + else -> "Profile not compiled nor enqueued" + }, + ) + } +} diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml index 6d5711aa5..77280bad5 100644 --- a/app/src/main/res/drawable/ic_launcher_foreground.xml +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -20,10 +20,10 @@ android:viewportWidth="108" android:viewportHeight="108"> diff --git a/app/src/main/res/drawable/ic_splash.xml b/app/src/main/res/drawable/ic_splash.xml index 6de9c8c9b..144393be9 100644 --- a/app/src/main/res/drawable/ic_splash.xml +++ b/app/src/main/res/drawable/ic_splash.xml @@ -24,11 +24,11 @@ android:pathData="M0,0h108v108h-108z" android:fillColor="@color/ic_launcher_background_tint"/> - \ No newline at end of file + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 5a3dc450f..2b8c739cd 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -15,9 +15,6 @@ limitations under the License. --> - - #4D000000 - #000000 #FCFCFC diff --git a/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/DeviceConfigurationOverrideWindowInsets.kt b/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/DeviceConfigurationOverrideWindowInsets.kt new file mode 100644 index 000000000..a2409dd89 --- /dev/null +++ b/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/DeviceConfigurationOverrideWindowInsets.kt @@ -0,0 +1,67 @@ +/* + * Copyright 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.ui + +import android.view.WindowInsets +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.platform.AbstractComposeView +import androidx.compose.ui.test.DeviceConfigurationOverride +import androidx.compose.ui.viewinterop.AndroidView +import androidx.core.view.WindowInsetsCompat +import androidx.core.view.children + +/** + * A [DeviceConfigurationOverride] that overrides the window insets for the contained content. + */ +@Suppress("ktlint:standard:function-naming") +fun DeviceConfigurationOverride.Companion.WindowInsets( + windowInsets: WindowInsetsCompat, +): DeviceConfigurationOverride = DeviceConfigurationOverride { contentUnderTest -> + val currentContentUnderTest by rememberUpdatedState(contentUnderTest) + val currentWindowInsets by rememberUpdatedState(windowInsets) + AndroidView( + factory = { context -> + object : AbstractComposeView(context) { + @Composable + override fun Content() { + currentContentUnderTest() + } + + override fun dispatchApplyWindowInsets(insets: WindowInsets): WindowInsets { + children.forEach { + it.dispatchApplyWindowInsets( + WindowInsets(currentWindowInsets.toWindowInsets()), + ) + } + return WindowInsetsCompat.CONSUMED.toWindowInsets()!! + } + + /** + * Deprecated, but intercept the `requestApplyInsets` call via the deprecated + * method. + */ + @Deprecated("Deprecated in Java") + override fun requestFitSystemWindows() { + dispatchApplyWindowInsets(WindowInsets(currentWindowInsets.toWindowInsets()!!)) + } + } + }, + update = { with(currentWindowInsets) { it.requestApplyInsets() } }, + ) +} diff --git a/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/InterestsListDetailScreenTest.kt b/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/InterestsListDetailScreenTest.kt new file mode 100644 index 000000000..1062c7e56 --- /dev/null +++ b/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/InterestsListDetailScreenTest.kt @@ -0,0 +1,204 @@ +/* + * Copyright 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.ui + +import androidx.activity.compose.BackHandler +import androidx.annotation.StringRes +import androidx.compose.ui.test.assertIsDisplayed +import androidx.compose.ui.test.assertIsNotDisplayed +import androidx.compose.ui.test.junit4.AndroidComposeTestRule +import androidx.compose.ui.test.junit4.createAndroidComposeRule +import androidx.compose.ui.test.onNodeWithTag +import androidx.compose.ui.test.onNodeWithText +import androidx.compose.ui.test.performClick +import androidx.test.espresso.Espresso +import com.google.samples.apps.nowinandroid.core.data.repository.TopicsRepository +import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme +import com.google.samples.apps.nowinandroid.core.model.data.Topic +import com.google.samples.apps.nowinandroid.ui.interests2pane.InterestsListDetailScreen +import com.google.samples.apps.nowinandroid.uitesthiltmanifest.HiltComponentActivity +import dagger.hilt.android.testing.HiltAndroidRule +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.HiltTestApplication +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.runBlocking +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config +import javax.inject.Inject +import kotlin.properties.ReadOnlyProperty +import kotlin.test.assertTrue +import com.google.samples.apps.nowinandroid.feature.topic.R as FeatureTopicR + +private const val EXPANDED_WIDTH = "w1200dp-h840dp" +private const val COMPACT_WIDTH = "w412dp-h915dp" + +@HiltAndroidTest +@RunWith(RobolectricTestRunner::class) +@Config(application = HiltTestApplication::class) +class InterestsListDetailScreenTest { + + @get:Rule(order = 0) + val hiltRule = HiltAndroidRule(this) + + @get:Rule(order = 1) + val composeTestRule = createAndroidComposeRule() + + @Inject + lateinit var topicsRepository: TopicsRepository + + /** Convenience function for getting all topics during tests, */ + private fun getTopics(): List = runBlocking { + topicsRepository.getTopics().first().sortedBy { it.name } + } + + // The strings used for matching in these tests. + private val placeholderText by composeTestRule.stringResource(FeatureTopicR.string.feature_topic_select_an_interest) + private val listPaneTag = "interests:topics" + + private val Topic.testTag + get() = "topic:${this.id}" + + @Before + fun setup() { + hiltRule.inject() + } + + @Test + @Config(qualifiers = EXPANDED_WIDTH) + fun expandedWidth_initialState_showsTwoPanesWithPlaceholder() { + composeTestRule.apply { + setContent { + NiaTheme { + InterestsListDetailScreen() + } + } + + onNodeWithTag(listPaneTag).assertIsDisplayed() + onNodeWithText(placeholderText).assertIsDisplayed() + } + } + + @Test + @Config(qualifiers = COMPACT_WIDTH) + fun compactWidth_initialState_showsListPane() { + composeTestRule.apply { + setContent { + NiaTheme { + InterestsListDetailScreen() + } + } + + onNodeWithTag(listPaneTag).assertIsDisplayed() + onNodeWithText(placeholderText).assertIsNotDisplayed() + } + } + + @Test + @Config(qualifiers = EXPANDED_WIDTH) + fun expandedWidth_topicSelected_updatesDetailPane() { + composeTestRule.apply { + setContent { + NiaTheme { + InterestsListDetailScreen() + } + } + + val firstTopic = getTopics().first() + onNodeWithText(firstTopic.name).performClick() + + onNodeWithTag(listPaneTag).assertIsDisplayed() + onNodeWithText(placeholderText).assertIsNotDisplayed() + onNodeWithTag(firstTopic.testTag).assertIsDisplayed() + } + } + + @Test + @Config(qualifiers = COMPACT_WIDTH) + fun compactWidth_topicSelected_showsTopicDetailPane() { + composeTestRule.apply { + setContent { + NiaTheme { + InterestsListDetailScreen() + } + } + + val firstTopic = getTopics().first() + onNodeWithText(firstTopic.name).performClick() + + onNodeWithTag(listPaneTag).assertIsNotDisplayed() + onNodeWithText(placeholderText).assertIsNotDisplayed() + onNodeWithTag(firstTopic.testTag).assertIsDisplayed() + } + } + + @Test + @Config(qualifiers = EXPANDED_WIDTH) + fun expandedWidth_backPressFromTopicDetail_leavesInterests() { + var unhandledBackPress = false + composeTestRule.apply { + setContent { + NiaTheme { + // Back press should not be handled by the two pane layout, and thus + // "fall through" to this BackHandler. + BackHandler { + unhandledBackPress = true + } + InterestsListDetailScreen() + } + } + + val firstTopic = getTopics().first() + onNodeWithText(firstTopic.name).performClick() + + waitForIdle() + Espresso.pressBack() + + assertTrue(unhandledBackPress) + } + } + + @Test + @Config(qualifiers = COMPACT_WIDTH) + fun compactWidth_backPressFromTopicDetail_showsListPane() { + composeTestRule.apply { + setContent { + NiaTheme { + InterestsListDetailScreen() + } + } + + val firstTopic = getTopics().first() + onNodeWithText(firstTopic.name).performClick() + + waitForIdle() + Espresso.pressBack() + + onNodeWithTag(listPaneTag).assertIsDisplayed() + onNodeWithText(placeholderText).assertIsNotDisplayed() + onNodeWithTag(firstTopic.testTag).assertIsNotDisplayed() + } + } +} + +private fun AndroidComposeTestRule<*, *>.stringResource( + @StringRes resId: Int, +): ReadOnlyProperty = + ReadOnlyProperty { _, _ -> activity.getString(resId) } diff --git a/app/src/testDemo/java/com/google/samples/apps/nowinandroid/ui/NiaAppScreenSizesScreenshotTests.kt b/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppScreenSizesScreenshotTests.kt similarity index 76% rename from app/src/testDemo/java/com/google/samples/apps/nowinandroid/ui/NiaAppScreenSizesScreenshotTests.kt rename to app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppScreenSizesScreenshotTests.kt index 94563abe4..e84b96b73 100644 --- a/app/src/testDemo/java/com/google/samples/apps/nowinandroid/ui/NiaAppScreenSizesScreenshotTests.kt +++ b/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/NiaAppScreenSizesScreenshotTests.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022 The Android Open Source Project + * Copyright 2023 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,30 +16,28 @@ package com.google.samples.apps.nowinandroid.ui -import android.util.Log -import androidx.compose.foundation.layout.BoxWithConstraints -import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi -import androidx.compose.material3.windowsizeclass.WindowSizeClass +import androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi +import androidx.compose.material3.adaptive.Posture +import androidx.compose.material3.adaptive.WindowAdaptiveInfo import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.platform.LocalInspectionMode +import androidx.compose.ui.test.DeviceConfigurationOverride +import androidx.compose.ui.test.ForcedSize import androidx.compose.ui.test.junit4.createAndroidComposeRule import androidx.compose.ui.test.onRoot import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.DpSize import androidx.compose.ui.unit.dp -import androidx.test.platform.app.InstrumentationRegistry -import androidx.work.Configuration -import androidx.work.testing.SynchronousExecutor -import androidx.work.testing.WorkManagerTestInitHelper +import androidx.window.core.layout.WindowSizeClass import com.github.takahirom.roborazzi.captureRoboImage -import com.google.accompanist.testharness.TestHarness import com.google.samples.apps.nowinandroid.core.data.repository.TopicsRepository import com.google.samples.apps.nowinandroid.core.data.repository.UserDataRepository import com.google.samples.apps.nowinandroid.core.data.repository.UserNewsResourceRepository import com.google.samples.apps.nowinandroid.core.data.util.NetworkMonitor +import com.google.samples.apps.nowinandroid.core.data.util.TimeZoneMonitor +import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme import com.google.samples.apps.nowinandroid.core.testing.util.DefaultRoborazziOptions import com.google.samples.apps.nowinandroid.uitesthiltmanifest.HiltComponentActivity -import dagger.hilt.android.testing.BindValue import dagger.hilt.android.testing.HiltAndroidRule import dagger.hilt.android.testing.HiltAndroidTest import dagger.hilt.android.testing.HiltTestApplication @@ -48,7 +46,6 @@ import kotlinx.coroutines.runBlocking import org.junit.Before import org.junit.Rule import org.junit.Test -import org.junit.rules.TemporaryFolder import org.junit.runner.RunWith import org.robolectric.RobolectricTestRunner import org.robolectric.annotation.Config @@ -60,12 +57,11 @@ import javax.inject.Inject /** * Tests that the navigation UI is rendered correctly on different screen sizes. */ -@OptIn(ExperimentalMaterial3WindowSizeClassApi::class) @RunWith(RobolectricTestRunner::class) @GraphicsMode(GraphicsMode.Mode.NATIVE) // Configure Robolectric to use a very large screen size that can fit all of the test sizes. // This allows enough room to render the content under test without clipping or scaling. -@Config(application = HiltTestApplication::class, qualifiers = "w1000dp-h1000dp-480dpi", sdk = [33]) +@Config(application = HiltTestApplication::class, qualifiers = "w1000dp-h1000dp-480dpi") @LooperMode(LooperMode.Mode.PAUSED) @HiltAndroidTest class NiaAppScreenSizesScreenshotTests { @@ -76,23 +72,18 @@ class NiaAppScreenSizesScreenshotTests { @get:Rule(order = 0) val hiltRule = HiltAndroidRule(this) - /** - * Create a temporary folder used to create a Data Store file. This guarantees that - * the file is removed in between each test, preventing a crash. - */ - @BindValue - @get:Rule(order = 1) - val tmpFolder: TemporaryFolder = TemporaryFolder.builder().assureDeletion().build() - /** * Use a test activity to set the content on. */ - @get:Rule(order = 2) + @get:Rule(order = 1) val composeTestRule = createAndroidComposeRule() @Inject lateinit var networkMonitor: NetworkMonitor + @Inject + lateinit var timeZoneMonitor: TimeZoneMonitor + @Inject lateinit var userDataRepository: UserDataRepository @@ -104,17 +95,6 @@ class NiaAppScreenSizesScreenshotTests { @Before fun setup() { - val config = Configuration.Builder() - .setMinimumLoggingLevel(Log.DEBUG) - .setExecutor(SynchronousExecutor()) - .build() - - // Initialize WorkManager for instrumentation tests. - WorkManagerTestInitHelper.initializeTestWorkManager( - InstrumentationRegistry.getInstrumentation().context, - config, - ) - hiltRule.inject() // Configure user data @@ -133,19 +113,30 @@ class NiaAppScreenSizesScreenshotTests { TimeZone.setDefault(TimeZone.getTimeZone("UTC")) } + @OptIn(ExperimentalMaterial3AdaptiveApi::class) private fun testNiaAppScreenshotWithSize(width: Dp, height: Dp, screenshotName: String) { composeTestRule.setContent { CompositionLocalProvider( LocalInspectionMode provides true, ) { - TestHarness(size = DpSize(width, height)) { - BoxWithConstraints { - NiaApp( - windowSizeClass = WindowSizeClass.calculateFromSize( - DpSize(maxWidth, maxHeight), - ), + DeviceConfigurationOverride( + override = DeviceConfigurationOverride.ForcedSize(DpSize(width, height)), + ) { + NiaTheme { + val fakeAppState = rememberNiaAppState( networkMonitor = networkMonitor, userNewsResourceRepository = userNewsResourceRepository, + timeZoneMonitor = timeZoneMonitor, + ) + NiaApp( + fakeAppState, + windowAdaptiveInfo = WindowAdaptiveInfo( + windowSizeClass = WindowSizeClass.compute( + width.value, + height.value, + ), + windowPosture = Posture(), + ), ) } } @@ -162,27 +153,27 @@ class NiaAppScreenSizesScreenshotTests { @Test fun compactWidth_compactHeight_showsNavigationBar() { testNiaAppScreenshotWithSize( - 610.dp, + 400.dp, 400.dp, "compactWidth_compactHeight_showsNavigationBar", ) } @Test - fun mediumWidth_compactHeight_showsNavigationRail() { + fun mediumWidth_compactHeight_showsNavigationBar() { testNiaAppScreenshotWithSize( 610.dp, 400.dp, - "mediumWidth_compactHeight_showsNavigationRail", + "mediumWidth_compactHeight_showsNavigationBar", ) } @Test - fun expandedWidth_compactHeight_showsNavigationRail() { + fun expandedWidth_compactHeight_showsNavigationBar() { testNiaAppScreenshotWithSize( 900.dp, 400.dp, - "expandedWidth_compactHeight_showsNavigationRail", + "expandedWidth_compactHeight_showsNavigationBar", ) } diff --git a/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/SnackbarInsetsScreenshotTests.kt b/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/SnackbarInsetsScreenshotTests.kt new file mode 100644 index 000000000..2ef0d3e4f --- /dev/null +++ b/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/SnackbarInsetsScreenshotTests.kt @@ -0,0 +1,339 @@ +/* + * Copyright 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.ui + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.BoxWithConstraints +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.WindowInsetsSides +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.only +import androidx.compose.foundation.layout.safeDrawing +import androidx.compose.foundation.layout.windowInsetsBottomHeight +import androidx.compose.foundation.layout.windowInsetsEndWidth +import androidx.compose.foundation.layout.windowInsetsPadding +import androidx.compose.foundation.layout.windowInsetsStartWidth +import androidx.compose.foundation.layout.windowInsetsTopHeight +import androidx.compose.material3.SnackbarDuration.Indefinite +import androidx.compose.material3.SnackbarHostState +import androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi +import androidx.compose.material3.adaptive.Posture +import androidx.compose.material3.adaptive.WindowAdaptiveInfo +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.toAndroidRect +import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.platform.LocalInspectionMode +import androidx.compose.ui.platform.testTag +import androidx.compose.ui.test.DeviceConfigurationOverride +import androidx.compose.ui.test.ForcedSize +import androidx.compose.ui.test.junit4.createAndroidComposeRule +import androidx.compose.ui.test.onNodeWithTag +import androidx.compose.ui.unit.Density +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.DpRect +import androidx.compose.ui.unit.DpSize +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.roundToIntRect +import androidx.core.graphics.Insets +import androidx.core.view.WindowInsetsCompat +import androidx.window.core.layout.WindowSizeClass +import com.github.takahirom.roborazzi.captureRoboImage +import com.google.samples.apps.nowinandroid.core.data.repository.TopicsRepository +import com.google.samples.apps.nowinandroid.core.data.repository.UserNewsResourceRepository +import com.google.samples.apps.nowinandroid.core.data.test.repository.FakeUserDataRepository +import com.google.samples.apps.nowinandroid.core.data.util.NetworkMonitor +import com.google.samples.apps.nowinandroid.core.data.util.TimeZoneMonitor +import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme +import com.google.samples.apps.nowinandroid.core.testing.util.DefaultRoborazziOptions +import com.google.samples.apps.nowinandroid.uitesthiltmanifest.HiltComponentActivity +import dagger.hilt.android.testing.HiltAndroidRule +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.HiltTestApplication +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.launch +import kotlinx.coroutines.runBlocking +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config +import org.robolectric.annotation.GraphicsMode +import org.robolectric.annotation.LooperMode +import java.util.TimeZone +import javax.inject.Inject + +/** + * Tests that the Snackbar is correctly displayed on different screen sizes. + */ +@RunWith(RobolectricTestRunner::class) +@GraphicsMode(GraphicsMode.Mode.NATIVE) +// Configure Robolectric to use a very large screen size that can fit all of the test sizes. +// This allows enough room to render the content under test without clipping or scaling. +@Config(application = HiltTestApplication::class, qualifiers = "w1000dp-h1000dp-480dpi") +@LooperMode(LooperMode.Mode.PAUSED) +@HiltAndroidTest +class SnackbarInsetsScreenshotTests { + + /** + * Manages the components' state and is used to perform injection on your test + */ + @get:Rule(order = 0) + val hiltRule = HiltAndroidRule(this) + + /** + * Use a test activity to set the content on. + */ + @get:Rule(order = 1) + val composeTestRule = createAndroidComposeRule() + + @Inject + lateinit var networkMonitor: NetworkMonitor + + @Inject + lateinit var timeZoneMonitor: TimeZoneMonitor + + @Inject + lateinit var userDataRepository: FakeUserDataRepository + + @Inject + lateinit var topicsRepository: TopicsRepository + + @Inject + lateinit var userNewsResourceRepository: UserNewsResourceRepository + + @Before + fun setup() { + hiltRule.inject() + + // Configure user data + runBlocking { + userDataRepository.setShouldHideOnboarding(true) + + userDataRepository.setFollowedTopicIds( + setOf(topicsRepository.getTopics().first().first().id), + ) + } + } + + @Before + fun setTimeZone() { + // Make time zone deterministic in tests + TimeZone.setDefault(TimeZone.getTimeZone("UTC")) + } + + @Test + fun phone_noSnackbar() { + val snackbarHostState = SnackbarHostState() + testSnackbarScreenshotWithSize( + snackbarHostState, + 400.dp, + 500.dp, + "insets_snackbar_compact_medium_noSnackbar", + action = { }, + ) + } + + @Test + fun snackbarShown_phone() { + val snackbarHostState = SnackbarHostState() + testSnackbarScreenshotWithSize( + snackbarHostState, + 400.dp, + 500.dp, + "insets_snackbar_compact_medium", + ) { + snackbarHostState.showSnackbar( + "This is a test snackbar message", + actionLabel = "Action Label", + duration = Indefinite, + ) + } + } + + @Test + fun snackbarShown_foldable() { + val snackbarHostState = SnackbarHostState() + testSnackbarScreenshotWithSize( + snackbarHostState, + 600.dp, + 600.dp, + "insets_snackbar_medium_medium", + ) { + snackbarHostState.showSnackbar( + "This is a test snackbar message", + actionLabel = "Action Label", + duration = Indefinite, + ) + } + } + + @Test + fun snackbarShown_tablet() { + val snackbarHostState = SnackbarHostState() + testSnackbarScreenshotWithSize( + snackbarHostState, + 900.dp, + 900.dp, + "insets_snackbar_expanded_expanded", + ) { + snackbarHostState.showSnackbar( + "This is a test snackbar message", + actionLabel = "Action Label", + duration = Indefinite, + ) + } + } + + @OptIn(ExperimentalMaterial3AdaptiveApi::class) + private fun testSnackbarScreenshotWithSize( + snackbarHostState: SnackbarHostState, + width: Dp, + height: Dp, + screenshotName: String, + action: suspend () -> Unit, + ) { + lateinit var scope: CoroutineScope + composeTestRule.setContent { + CompositionLocalProvider( + // Replaces images with placeholders + LocalInspectionMode provides true, + ) { + scope = rememberCoroutineScope() + + DeviceConfigurationOverride( + DeviceConfigurationOverride.ForcedSize(DpSize(width, height)), + ) { + DeviceConfigurationOverride( + DeviceConfigurationOverride.WindowInsets( + WindowInsetsCompat.Builder() + .setInsets( + WindowInsetsCompat.Type.statusBars(), + DpRect( + left = 0.dp, + top = 64.dp, + right = 0.dp, + bottom = 0.dp, + ).toInsets(), + ) + .setInsets( + WindowInsetsCompat.Type.navigationBars(), + DpRect( + left = 64.dp, + top = 0.dp, + right = 64.dp, + bottom = 64.dp, + ).toInsets(), + ) + .build(), + ), + ) { + BoxWithConstraints(Modifier.testTag("root")) { + NiaTheme { + val appState = rememberNiaAppState( + networkMonitor = networkMonitor, + userNewsResourceRepository = userNewsResourceRepository, + timeZoneMonitor = timeZoneMonitor, + ) + NiaApp( + appState = appState, + snackbarHostState = snackbarHostState, + showSettingsDialog = false, + onSettingsDismissed = {}, + onTopAppBarActionClick = {}, + windowAdaptiveInfo = WindowAdaptiveInfo( + windowSizeClass = WindowSizeClass.compute( + maxWidth.value, + maxHeight.value, + ), + windowPosture = Posture(), + ), + ) + DebugVisibleWindowInsets() + } + } + } + } + } + } + + scope.launch { + action() + } + + composeTestRule.onNodeWithTag("root") + .captureRoboImage( + "src/testDemo/screenshots/$screenshotName.png", + roborazziOptions = DefaultRoborazziOptions, + ) + } +} + +@Composable +fun DebugVisibleWindowInsets( + modifier: Modifier = Modifier, + debugColor: Color = Color.Magenta.copy(alpha = 0.5f), +) { + Box(modifier = modifier.fillMaxSize()) { + Spacer( + modifier = Modifier + .align(Alignment.CenterStart) + .fillMaxHeight() + .windowInsetsStartWidth(WindowInsets.safeDrawing) + .windowInsetsPadding(WindowInsets.safeDrawing.only(WindowInsetsSides.Vertical)) + .background(debugColor), + ) + Spacer( + modifier = Modifier + .align(Alignment.CenterEnd) + .fillMaxHeight() + .windowInsetsEndWidth(WindowInsets.safeDrawing) + .windowInsetsPadding(WindowInsets.safeDrawing.only(WindowInsetsSides.Vertical)) + .background(debugColor), + ) + Spacer( + modifier = Modifier + .align(Alignment.TopCenter) + .fillMaxWidth() + .windowInsetsTopHeight(WindowInsets.safeDrawing) + .background(debugColor), + ) + Spacer( + modifier = Modifier + .align(Alignment.BottomCenter) + .fillMaxWidth() + .windowInsetsBottomHeight(WindowInsets.safeDrawing) + .background(debugColor), + ) + } +} + +@Composable +private fun DpRect.toInsets() = toInsets(LocalDensity.current) + +private fun DpRect.toInsets(density: Density) = + Insets.of(with(density) { toRect() }.roundToIntRect().toAndroidRect()) diff --git a/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/SnackbarScreenshotTests.kt b/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/SnackbarScreenshotTests.kt new file mode 100644 index 000000000..fe2e98452 --- /dev/null +++ b/app/src/testDemo/kotlin/com/google/samples/apps/nowinandroid/ui/SnackbarScreenshotTests.kt @@ -0,0 +1,241 @@ +/* + * Copyright 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.ui + +import androidx.compose.foundation.layout.BoxWithConstraints +import androidx.compose.material3.SnackbarDuration.Indefinite +import androidx.compose.material3.SnackbarHostState +import androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi +import androidx.compose.material3.adaptive.Posture +import androidx.compose.material3.adaptive.WindowAdaptiveInfo +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.ui.platform.LocalInspectionMode +import androidx.compose.ui.test.DeviceConfigurationOverride +import androidx.compose.ui.test.ForcedSize +import androidx.compose.ui.test.junit4.createAndroidComposeRule +import androidx.compose.ui.test.onRoot +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.DpSize +import androidx.compose.ui.unit.dp +import androidx.window.core.layout.WindowSizeClass +import com.github.takahirom.roborazzi.captureRoboImage +import com.google.samples.apps.nowinandroid.core.data.repository.TopicsRepository +import com.google.samples.apps.nowinandroid.core.data.repository.UserNewsResourceRepository +import com.google.samples.apps.nowinandroid.core.data.test.repository.FakeUserDataRepository +import com.google.samples.apps.nowinandroid.core.data.util.NetworkMonitor +import com.google.samples.apps.nowinandroid.core.data.util.TimeZoneMonitor +import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme +import com.google.samples.apps.nowinandroid.core.testing.util.DefaultRoborazziOptions +import com.google.samples.apps.nowinandroid.uitesthiltmanifest.HiltComponentActivity +import dagger.hilt.android.testing.HiltAndroidRule +import dagger.hilt.android.testing.HiltAndroidTest +import dagger.hilt.android.testing.HiltTestApplication +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.launch +import kotlinx.coroutines.runBlocking +import org.junit.Before +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config +import org.robolectric.annotation.GraphicsMode +import org.robolectric.annotation.LooperMode +import java.util.TimeZone +import javax.inject.Inject + +/** + * Tests that the Snackbar is correctly displayed on different screen sizes. + */ +@RunWith(RobolectricTestRunner::class) +@GraphicsMode(GraphicsMode.Mode.NATIVE) +// Configure Robolectric to use a very large screen size that can fit all of the test sizes. +// This allows enough room to render the content under test without clipping or scaling. +@Config(application = HiltTestApplication::class, qualifiers = "w1000dp-h1000dp-480dpi") +@LooperMode(LooperMode.Mode.PAUSED) +@HiltAndroidTest +class SnackbarScreenshotTests { + + /** + * Manages the components' state and is used to perform injection on your test + */ + @get:Rule(order = 0) + val hiltRule = HiltAndroidRule(this) + + /** + * Use a test activity to set the content on. + */ + @get:Rule(order = 1) + val composeTestRule = createAndroidComposeRule() + + @Inject + lateinit var networkMonitor: NetworkMonitor + + @Inject + lateinit var timeZoneMonitor: TimeZoneMonitor + + @Inject + lateinit var userDataRepository: FakeUserDataRepository + + @Inject + lateinit var topicsRepository: TopicsRepository + + @Inject + lateinit var userNewsResourceRepository: UserNewsResourceRepository + + @Before + fun setup() { + hiltRule.inject() + + // Configure user data + runBlocking { + userDataRepository.setShouldHideOnboarding(true) + + userDataRepository.setFollowedTopicIds( + setOf(topicsRepository.getTopics().first().first().id), + ) + } + } + + @Before + fun setTimeZone() { + // Make time zone deterministic in tests + TimeZone.setDefault(TimeZone.getTimeZone("UTC")) + } + + @Test + fun phone_noSnackbar() { + val snackbarHostState = SnackbarHostState() + testSnackbarScreenshotWithSize( + snackbarHostState, + 400.dp, + 500.dp, + "snackbar_compact_medium_noSnackbar", + action = { }, + ) + } + + @Test + fun snackbarShown_phone() { + val snackbarHostState = SnackbarHostState() + testSnackbarScreenshotWithSize( + snackbarHostState, + 400.dp, + 500.dp, + "snackbar_compact_medium", + ) { + snackbarHostState.showSnackbar( + "This is a test snackbar message", + actionLabel = "Action Label", + duration = Indefinite, + ) + } + } + + @Test + fun snackbarShown_foldable() { + val snackbarHostState = SnackbarHostState() + testSnackbarScreenshotWithSize( + snackbarHostState, + 600.dp, + 600.dp, + "snackbar_medium_medium", + ) { + snackbarHostState.showSnackbar( + "This is a test snackbar message", + actionLabel = "Action Label", + duration = Indefinite, + ) + } + } + + @Test + fun snackbarShown_tablet() { + val snackbarHostState = SnackbarHostState() + testSnackbarScreenshotWithSize( + snackbarHostState, + 900.dp, + 900.dp, + "snackbar_expanded_expanded", + ) { + snackbarHostState.showSnackbar( + "This is a test snackbar message", + actionLabel = "Action Label", + duration = Indefinite, + ) + } + } + + @OptIn(ExperimentalMaterial3AdaptiveApi::class) + private fun testSnackbarScreenshotWithSize( + snackbarHostState: SnackbarHostState, + width: Dp, + height: Dp, + screenshotName: String, + action: suspend () -> Unit, + ) { + lateinit var scope: CoroutineScope + composeTestRule.setContent { + CompositionLocalProvider( + // Replaces images with placeholders + LocalInspectionMode provides true, + ) { + scope = rememberCoroutineScope() + + DeviceConfigurationOverride( + DeviceConfigurationOverride.ForcedSize(DpSize(width, height)), + ) { + BoxWithConstraints { + NiaTheme { + val appState = rememberNiaAppState( + networkMonitor = networkMonitor, + userNewsResourceRepository = userNewsResourceRepository, + timeZoneMonitor = timeZoneMonitor, + ) + NiaApp( + appState = appState, + snackbarHostState = snackbarHostState, + showSettingsDialog = false, + onSettingsDismissed = {}, + onTopAppBarActionClick = {}, + windowAdaptiveInfo = WindowAdaptiveInfo( + windowSizeClass = WindowSizeClass.compute( + maxWidth.value, + maxHeight.value, + ), + windowPosture = Posture(), + ), + ) + } + } + } + } + } + + scope.launch { + action() + } + + composeTestRule.onRoot() + .captureRoboImage( + "src/testDemo/screenshots/$screenshotName.png", + roborazziOptions = DefaultRoborazziOptions, + ) + } +} diff --git a/app/src/testDemo/screenshots/compactWidth_compactHeight_showsNavigationBar.png b/app/src/testDemo/screenshots/compactWidth_compactHeight_showsNavigationBar.png index 56b49457c..912fca4c7 100644 Binary files a/app/src/testDemo/screenshots/compactWidth_compactHeight_showsNavigationBar.png and b/app/src/testDemo/screenshots/compactWidth_compactHeight_showsNavigationBar.png differ diff --git a/app/src/testDemo/screenshots/compactWidth_expandedHeight_showsNavigationBar.png b/app/src/testDemo/screenshots/compactWidth_expandedHeight_showsNavigationBar.png index 035cc24cf..30873b584 100644 Binary files a/app/src/testDemo/screenshots/compactWidth_expandedHeight_showsNavigationBar.png and b/app/src/testDemo/screenshots/compactWidth_expandedHeight_showsNavigationBar.png differ diff --git a/app/src/testDemo/screenshots/compactWidth_mediumHeight_showsNavigationBar.png b/app/src/testDemo/screenshots/compactWidth_mediumHeight_showsNavigationBar.png index 7749199c5..668d69146 100644 Binary files a/app/src/testDemo/screenshots/compactWidth_mediumHeight_showsNavigationBar.png and b/app/src/testDemo/screenshots/compactWidth_mediumHeight_showsNavigationBar.png differ diff --git a/app/src/testDemo/screenshots/expandedWidth_compactHeight_showsNavigationBar.png b/app/src/testDemo/screenshots/expandedWidth_compactHeight_showsNavigationBar.png new file mode 100644 index 000000000..1daf5ec34 Binary files /dev/null and b/app/src/testDemo/screenshots/expandedWidth_compactHeight_showsNavigationBar.png differ diff --git a/app/src/testDemo/screenshots/expandedWidth_compactHeight_showsNavigationRail.png b/app/src/testDemo/screenshots/expandedWidth_compactHeight_showsNavigationRail.png deleted file mode 100644 index fe5b045aa..000000000 Binary files a/app/src/testDemo/screenshots/expandedWidth_compactHeight_showsNavigationRail.png and /dev/null differ diff --git a/app/src/testDemo/screenshots/expandedWidth_expandedHeight_showsNavigationRail.png b/app/src/testDemo/screenshots/expandedWidth_expandedHeight_showsNavigationRail.png index 25283c111..e2dffaf01 100644 Binary files a/app/src/testDemo/screenshots/expandedWidth_expandedHeight_showsNavigationRail.png and b/app/src/testDemo/screenshots/expandedWidth_expandedHeight_showsNavigationRail.png differ diff --git a/app/src/testDemo/screenshots/expandedWidth_mediumHeight_showsNavigationRail.png b/app/src/testDemo/screenshots/expandedWidth_mediumHeight_showsNavigationRail.png index 58d620f21..c5b7fe883 100644 Binary files a/app/src/testDemo/screenshots/expandedWidth_mediumHeight_showsNavigationRail.png and b/app/src/testDemo/screenshots/expandedWidth_mediumHeight_showsNavigationRail.png differ diff --git a/app/src/testDemo/screenshots/insets_snackbar_compact_medium.png b/app/src/testDemo/screenshots/insets_snackbar_compact_medium.png new file mode 100644 index 000000000..1c5b10b47 Binary files /dev/null and b/app/src/testDemo/screenshots/insets_snackbar_compact_medium.png differ diff --git a/app/src/testDemo/screenshots/insets_snackbar_compact_medium_noSnackbar.png b/app/src/testDemo/screenshots/insets_snackbar_compact_medium_noSnackbar.png new file mode 100644 index 000000000..d37f02c65 Binary files /dev/null and b/app/src/testDemo/screenshots/insets_snackbar_compact_medium_noSnackbar.png differ diff --git a/app/src/testDemo/screenshots/insets_snackbar_expanded_expanded.png b/app/src/testDemo/screenshots/insets_snackbar_expanded_expanded.png new file mode 100644 index 000000000..c6509df7d Binary files /dev/null and b/app/src/testDemo/screenshots/insets_snackbar_expanded_expanded.png differ diff --git a/app/src/testDemo/screenshots/insets_snackbar_medium_medium.png b/app/src/testDemo/screenshots/insets_snackbar_medium_medium.png new file mode 100644 index 000000000..deae27a40 Binary files /dev/null and b/app/src/testDemo/screenshots/insets_snackbar_medium_medium.png differ diff --git a/app/src/testDemo/screenshots/mediumWidth_compactHeight_showsNavigationBar.png b/app/src/testDemo/screenshots/mediumWidth_compactHeight_showsNavigationBar.png new file mode 100644 index 000000000..4bc5d2b1c Binary files /dev/null and b/app/src/testDemo/screenshots/mediumWidth_compactHeight_showsNavigationBar.png differ diff --git a/app/src/testDemo/screenshots/mediumWidth_compactHeight_showsNavigationRail.png b/app/src/testDemo/screenshots/mediumWidth_compactHeight_showsNavigationRail.png deleted file mode 100644 index 56b49457c..000000000 Binary files a/app/src/testDemo/screenshots/mediumWidth_compactHeight_showsNavigationRail.png and /dev/null differ diff --git a/app/src/testDemo/screenshots/mediumWidth_expandedHeight_showsNavigationRail.png b/app/src/testDemo/screenshots/mediumWidth_expandedHeight_showsNavigationRail.png index 15ddccf78..79f808f44 100644 Binary files a/app/src/testDemo/screenshots/mediumWidth_expandedHeight_showsNavigationRail.png and b/app/src/testDemo/screenshots/mediumWidth_expandedHeight_showsNavigationRail.png differ diff --git a/app/src/testDemo/screenshots/mediumWidth_mediumHeight_showsNavigationRail.png b/app/src/testDemo/screenshots/mediumWidth_mediumHeight_showsNavigationRail.png index d2e4bb8bc..f914a0454 100644 Binary files a/app/src/testDemo/screenshots/mediumWidth_mediumHeight_showsNavigationRail.png and b/app/src/testDemo/screenshots/mediumWidth_mediumHeight_showsNavigationRail.png differ diff --git a/app/src/testDemo/screenshots/snackbar_compact_medium.png b/app/src/testDemo/screenshots/snackbar_compact_medium.png new file mode 100644 index 000000000..24d282964 Binary files /dev/null and b/app/src/testDemo/screenshots/snackbar_compact_medium.png differ diff --git a/app/src/testDemo/screenshots/snackbar_compact_medium_noSnackbar.png b/app/src/testDemo/screenshots/snackbar_compact_medium_noSnackbar.png new file mode 100644 index 000000000..ff9ed7669 Binary files /dev/null and b/app/src/testDemo/screenshots/snackbar_compact_medium_noSnackbar.png differ diff --git a/app/src/testDemo/screenshots/snackbar_expanded_expanded.png b/app/src/testDemo/screenshots/snackbar_expanded_expanded.png new file mode 100644 index 000000000..02a96999d Binary files /dev/null and b/app/src/testDemo/screenshots/snackbar_expanded_expanded.png differ diff --git a/app/src/testDemo/screenshots/snackbar_medium_medium.png b/app/src/testDemo/screenshots/snackbar_medium_medium.png new file mode 100644 index 000000000..6f89ba2ad Binary files /dev/null and b/app/src/testDemo/screenshots/snackbar_medium_medium.png differ diff --git a/benchmarks/build.gradle.kts b/benchmarks/build.gradle.kts index 48a6687e4..e36f021b0 100644 --- a/benchmarks/build.gradle.kts +++ b/benchmarks/build.gradle.kts @@ -13,11 +13,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -import com.google.samples.apps.nowinandroid.NiaBuildType import com.google.samples.apps.nowinandroid.configureFlavors plugins { - id("nowinandroid.android.test") + alias(libs.plugins.baselineprofile) + alias(libs.plugins.nowinandroid.android.test) } android { @@ -34,23 +34,6 @@ android { buildConfig = true } - buildTypes { - // This benchmark buildType is used for benchmarking, and should function like your - // release build (for example, with minification on). It's signed with a debug key - // for easy local/CI testing. - create("benchmark") { - // Keep the build type debuggable so we can attach a debugger if needed. - isDebuggable = true - signingConfig = signingConfigs.getByName("debug") - matchingFallbacks.add("release") - buildConfigField( - "String", - "APP_BUILD_TYPE_SUFFIX", - "\"${NiaBuildType.BENCHMARK.applicationIdSuffix ?: ""}\"" - ) - } - } - // Use the same flavor dimensions as the application to allow generating Baseline Profiles on prod, // which is more close to what will be shipped to users (no fake data), but has ability to run the // benchmarks on demo, so we benchmark on stable data. @@ -62,10 +45,28 @@ android { ) } + testOptions.managedDevices.devices { + create("pixel6Api33") { + device = "Pixel 6" + apiLevel = 33 + systemImageSource = "aosp" + } + } + targetProjectPath = ":app" experimentalProperties["android.experimental.self-instrumenting"] = true } +baselineProfile { + // This specifies the managed devices to use that you run the tests on. + managedDevices.clear() + managedDevices += "pixel6Api33" + + // Don't use a connected device but rely on a GMD for consistency between local and CI builds. + useConnectedDevices = false + +} + dependencies { implementation(libs.androidx.benchmark.macro) implementation(libs.androidx.test.core) @@ -75,9 +76,3 @@ dependencies { implementation(libs.androidx.test.runner) implementation(libs.androidx.test.uiautomator) } - -androidComponents { - beforeVariants { - it.enable = it.buildType == "benchmark" - } -} diff --git a/benchmarks/src/main/java/androidx/test/uiautomator/UiAutomatorHelpers.kt b/benchmarks/src/main/kotlin/androidx/test/uiautomator/UiAutomatorHelpers.kt similarity index 76% rename from benchmarks/src/main/java/androidx/test/uiautomator/UiAutomatorHelpers.kt rename to benchmarks/src/main/kotlin/androidx/test/uiautomator/UiAutomatorHelpers.kt index 85867b982..b0eb754c7 100644 --- a/benchmarks/src/main/java/androidx/test/uiautomator/UiAutomatorHelpers.kt +++ b/benchmarks/src/main/kotlin/androidx/test/uiautomator/UiAutomatorHelpers.kt @@ -29,15 +29,11 @@ import androidx.test.uiautomator.HasChildrenOp.EXACTLY fun untilHasChildren( childCount: Int = 1, op: HasChildrenOp = AT_LEAST, -): UiObject2Condition { - return object : UiObject2Condition() { - override fun apply(element: UiObject2): Boolean { - return when (op) { - AT_LEAST -> element.childCount >= childCount - EXACTLY -> element.childCount == childCount - AT_MOST -> element.childCount <= childCount - } - } +): UiObject2Condition = object : UiObject2Condition() { + override fun apply(element: UiObject2): Boolean = when (op) { + AT_LEAST -> element.childCount >= childCount + EXACTLY -> element.childCount == childCount + AT_MOST -> element.childCount <= childCount } } diff --git a/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/BaselineProfileMetrics.kt b/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/BaselineProfileMetrics.kt new file mode 100644 index 000000000..9af455b22 --- /dev/null +++ b/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/BaselineProfileMetrics.kt @@ -0,0 +1,50 @@ +/* + * Copyright 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid + +import androidx.benchmark.macro.ExperimentalMetricApi +import androidx.benchmark.macro.StartupTimingMetric +import androidx.benchmark.macro.TraceSectionMetric + +/** + * Custom Metrics to measure baseline profile effectiveness. + */ +class BaselineProfileMetrics { + companion object { + /** + * A [TraceSectionMetric] that tracks the time spent in JIT compilation. + * + * This number should go down when a baseline profile is applied properly. + */ + @OptIn(ExperimentalMetricApi::class) + val jitCompilationMetric = TraceSectionMetric("JIT Compiling %", label = "JIT compilation") + + /** + * A [TraceSectionMetric] that tracks the time spent in class initialization. + * + * This number should go down when a baseline profile is applied properly. + */ + @OptIn(ExperimentalMetricApi::class) + val classInitMetric = TraceSectionMetric("L%/%;", label = "ClassInit") + + /** + * Metrics relevant to startup and baseline profile effectiveness measurement. + */ + @OptIn(ExperimentalMetricApi::class) + val allMetrics = listOf(StartupTimingMetric(), jitCompilationMetric, classInitMetric) + } +} diff --git a/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/GeneralActions.kt b/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/GeneralActions.kt similarity index 63% rename from benchmarks/src/main/java/com/google/samples/apps/nowinandroid/GeneralActions.kt rename to benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/GeneralActions.kt index 48472e523..8df52104a 100644 --- a/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/GeneralActions.kt +++ b/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/GeneralActions.kt @@ -20,6 +20,10 @@ import android.Manifest.permission import android.os.Build.VERSION.SDK_INT import android.os.Build.VERSION_CODES.TIRAMISU import androidx.benchmark.macro.MacrobenchmarkScope +import androidx.test.uiautomator.By +import androidx.test.uiautomator.BySelector +import androidx.test.uiautomator.UiObject2 +import androidx.test.uiautomator.Until /** * Because the app under test is different from the one running the instrumentation test, @@ -42,3 +46,27 @@ fun MacrobenchmarkScope.allowNotifications() { device.executeShellCommand(command) } } + +/** + * Wraps starting the default activity, waiting for it to start and then allowing notifications in + * one convenient call. + */ +fun MacrobenchmarkScope.startActivityAndAllowNotifications() { + startActivityAndWait() + allowNotifications() +} + +/** + * Waits for and returns the `niaTopAppBar` + */ +fun MacrobenchmarkScope.getTopAppBar(): UiObject2 { + device.wait(Until.hasObject(By.res("niaTopAppBar")), 2_000) + return device.findObject(By.res("niaTopAppBar")) +} + +/** + * Waits for an object on the top app bar, passed in as [selector]. + */ +fun MacrobenchmarkScope.waitForObjectOnTopAppBar(selector: BySelector, timeout: Long = 2_000) { + getTopAppBar().wait(Until.hasObject(selector), timeout) +} diff --git a/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/Utils.kt b/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/Utils.kt similarity index 97% rename from benchmarks/src/main/java/com/google/samples/apps/nowinandroid/Utils.kt rename to benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/Utils.kt index 9ece991c4..e8fb53c4f 100644 --- a/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/Utils.kt +++ b/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/Utils.kt @@ -30,7 +30,6 @@ import java.io.ByteArrayOutputStream val PACKAGE_NAME = buildString { append("com.google.samples.apps.nowinandroid") append(BuildConfig.APP_FLAVOR_SUFFIX) - append(BuildConfig.APP_BUILD_TYPE_SUFFIX) } fun UiDevice.flingElementDownUp(element: UiObject2) { diff --git a/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/baselineprofile/BookmarksBaselineProfile.kt b/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/baselineprofile/BookmarksBaselineProfile.kt new file mode 100644 index 000000000..eca3f059b --- /dev/null +++ b/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/baselineprofile/BookmarksBaselineProfile.kt @@ -0,0 +1,40 @@ +/* + * Copyright 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.baselineprofile + +import androidx.benchmark.macro.junit4.BaselineProfileRule +import com.google.samples.apps.nowinandroid.PACKAGE_NAME +import com.google.samples.apps.nowinandroid.bookmarks.goToBookmarksScreen +import com.google.samples.apps.nowinandroid.startActivityAndAllowNotifications +import org.junit.Rule +import org.junit.Test + +/** + * Baseline Profile of the "Bookmarks" screen + */ +class BookmarksBaselineProfile { + @get:Rule val baselineProfileRule = BaselineProfileRule() + + @Test + fun generate() = + baselineProfileRule.collect(PACKAGE_NAME) { + startActivityAndAllowNotifications() + + // Navigate to saved screen + goToBookmarksScreen() + } +} diff --git a/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/baselineprofile/BaselineProfileGenerator.kt b/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/baselineprofile/ForYouBaselineProfile.kt similarity index 59% rename from benchmarks/src/main/java/com/google/samples/apps/nowinandroid/baselineprofile/BaselineProfileGenerator.kt rename to benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/baselineprofile/ForYouBaselineProfile.kt index fcbbc1049..e8722e116 100644 --- a/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/baselineprofile/BaselineProfileGenerator.kt +++ b/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/baselineprofile/ForYouBaselineProfile.kt @@ -18,43 +18,27 @@ package com.google.samples.apps.nowinandroid.baselineprofile import androidx.benchmark.macro.junit4.BaselineProfileRule import com.google.samples.apps.nowinandroid.PACKAGE_NAME -import com.google.samples.apps.nowinandroid.allowNotifications -import com.google.samples.apps.nowinandroid.bookmarks.goToBookmarksScreen import com.google.samples.apps.nowinandroid.foryou.forYouScrollFeedDownUp import com.google.samples.apps.nowinandroid.foryou.forYouSelectTopics import com.google.samples.apps.nowinandroid.foryou.forYouWaitForContent -import com.google.samples.apps.nowinandroid.interests.goToInterestsScreen -import com.google.samples.apps.nowinandroid.interests.interestsScrollTopicsDownUp +import com.google.samples.apps.nowinandroid.startActivityAndAllowNotifications import org.junit.Rule import org.junit.Test /** - * Generates a baseline profile which can be copied to `app/src/main/baseline-prof.txt`. + * Baseline Profile of the "For You" screen */ -class BaselineProfileGenerator { +class ForYouBaselineProfile { @get:Rule val baselineProfileRule = BaselineProfileRule() @Test fun generate() = baselineProfileRule.collect(PACKAGE_NAME) { - // This block defines the app's critical user journey. Here we are interested in - // optimizing for app startup. But you can also navigate and scroll - // through your most important UI. - allowNotifications() - pressHome() - startActivityAndWait() - allowNotifications() + startActivityAndAllowNotifications() // Scroll the feed critical user journey forYouWaitForContent() forYouSelectTopics(true) forYouScrollFeedDownUp() - - // Navigate to saved screen - goToBookmarksScreen() - - // Navigate to interests screen - goToInterestsScreen() - interestsScrollTopicsDownUp() } } diff --git a/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/baselineprofile/InterestsBaselineProfile.kt b/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/baselineprofile/InterestsBaselineProfile.kt new file mode 100644 index 000000000..dd2166dc2 --- /dev/null +++ b/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/baselineprofile/InterestsBaselineProfile.kt @@ -0,0 +1,42 @@ +/* + * Copyright 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.baselineprofile + +import androidx.benchmark.macro.junit4.BaselineProfileRule +import com.google.samples.apps.nowinandroid.PACKAGE_NAME +import com.google.samples.apps.nowinandroid.interests.goToInterestsScreen +import com.google.samples.apps.nowinandroid.interests.interestsScrollTopicsDownUp +import com.google.samples.apps.nowinandroid.startActivityAndAllowNotifications +import org.junit.Rule +import org.junit.Test + +/** + * Baseline Profile of the "Interests" screen + */ +class InterestsBaselineProfile { + @get:Rule val baselineProfileRule = BaselineProfileRule() + + @Test + fun generate() = + baselineProfileRule.collect(PACKAGE_NAME) { + startActivityAndAllowNotifications() + + // Navigate to interests screen + goToInterestsScreen() + interestsScrollTopicsDownUp() + } +} diff --git a/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/baselineprofile/StartupBaselineProfile.kt b/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/baselineprofile/StartupBaselineProfile.kt new file mode 100644 index 000000000..d8128a670 --- /dev/null +++ b/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/baselineprofile/StartupBaselineProfile.kt @@ -0,0 +1,39 @@ +/* + * Copyright 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.baselineprofile + +import androidx.benchmark.macro.MacrobenchmarkScope +import androidx.benchmark.macro.junit4.BaselineProfileRule +import com.google.samples.apps.nowinandroid.PACKAGE_NAME +import com.google.samples.apps.nowinandroid.startActivityAndAllowNotifications +import org.junit.Rule +import org.junit.Test + +/** + * Baseline Profile for app startup. This profile also enables using [Dex Layout Optimizations](https://developer.android.com/topic/performance/baselineprofiles/dex-layout-optimizations) + * via the `includeInStartupProfile` parameter. + */ +class StartupBaselineProfile { + @get:Rule val baselineProfileRule = BaselineProfileRule() + + @Test + fun generate() = baselineProfileRule.collect( + PACKAGE_NAME, + includeInStartupProfile = true, + profileBlock = MacrobenchmarkScope::startActivityAndAllowNotifications, + ) +} diff --git a/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/bookmarks/BookmarksActions.kt b/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/bookmarks/BookmarksActions.kt similarity index 76% rename from benchmarks/src/main/java/com/google/samples/apps/nowinandroid/bookmarks/BookmarksActions.kt rename to benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/bookmarks/BookmarksActions.kt index f66fa27a2..eb01c7d1b 100644 --- a/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/bookmarks/BookmarksActions.kt +++ b/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/bookmarks/BookmarksActions.kt @@ -18,13 +18,13 @@ package com.google.samples.apps.nowinandroid.bookmarks import androidx.benchmark.macro.MacrobenchmarkScope import androidx.test.uiautomator.By -import androidx.test.uiautomator.Until +import com.google.samples.apps.nowinandroid.waitForObjectOnTopAppBar fun MacrobenchmarkScope.goToBookmarksScreen() { - device.findObject(By.text("Saved")).click() + val savedSelector = By.text("Saved") + val savedButton = device.findObject(savedSelector) + savedButton.click() device.waitForIdle() // Wait until saved title are shown on screen - device.wait(Until.hasObject(By.res("niaTopAppBar")), 2_000) - val topAppBar = device.findObject(By.res("niaTopAppBar")) - topAppBar.wait(Until.hasObject(By.text("Saved")), 2_000) + waitForObjectOnTopAppBar(savedSelector) } diff --git a/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/foryou/ForYouActions.kt b/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/foryou/ForYouActions.kt similarity index 93% rename from benchmarks/src/main/java/com/google/samples/apps/nowinandroid/foryou/ForYouActions.kt rename to benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/foryou/ForYouActions.kt index 672c3f52f..20b941a24 100644 --- a/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/foryou/ForYouActions.kt +++ b/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/foryou/ForYouActions.kt @@ -22,6 +22,8 @@ import androidx.test.uiautomator.Until import androidx.test.uiautomator.untilHasChildren import com.google.samples.apps.nowinandroid.flingElementDownUp import com.google.samples.apps.nowinandroid.waitAndFindObject +import com.google.samples.apps.nowinandroid.waitForObjectOnTopAppBar +import org.junit.Assert.fail fun MacrobenchmarkScope.forYouWaitForContent() { // Wait until content is loaded by checking if topics are loaded @@ -49,6 +51,9 @@ fun MacrobenchmarkScope.forYouSelectTopics(recheckTopicsIfChecked: Boolean = fal var visited = 0 while (visited < 3) { + if (topics.childCount == 0) { + fail("No topics found, can't generate profile for ForYou page.") + } // Selecting some topics, which will populate items in the feed. val topic = topics.children[index % topics.childCount] // Find the checkable element to figure out whether it's checked or not @@ -99,7 +104,5 @@ fun MacrobenchmarkScope.setAppTheme(isDark: Boolean) { device.findObject(By.text("OK")).click() // Wait until the top app bar is visible on screen - device.wait(Until.hasObject(By.res("niaTopAppBar")), 2_000) - val topAppBar = device.findObject(By.res("niaTopAppBar")) - topAppBar.wait(Until.hasObject(By.text("Now in Android")), 2_000) + waitForObjectOnTopAppBar(By.text("Now in Android")) } diff --git a/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/foryou/ScrollForYouFeedBenchmark.kt b/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/foryou/ScrollForYouFeedBenchmark.kt similarity index 89% rename from benchmarks/src/main/java/com/google/samples/apps/nowinandroid/foryou/ScrollForYouFeedBenchmark.kt rename to benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/foryou/ScrollForYouFeedBenchmark.kt index 18a7a717b..c74d79307 100644 --- a/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/foryou/ScrollForYouFeedBenchmark.kt +++ b/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/foryou/ScrollForYouFeedBenchmark.kt @@ -22,7 +22,7 @@ import androidx.benchmark.macro.StartupMode import androidx.benchmark.macro.junit4.MacrobenchmarkRule import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner import com.google.samples.apps.nowinandroid.PACKAGE_NAME -import com.google.samples.apps.nowinandroid.allowNotifications +import com.google.samples.apps.nowinandroid.startActivityAndAllowNotifications import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith @@ -38,6 +38,9 @@ class ScrollForYouFeedBenchmark { @Test fun scrollFeedCompilationBaselineProfile() = scrollFeed(CompilationMode.Partial()) + @Test + fun scrollFeedCompilationFull() = scrollFeed(CompilationMode.Full()) + private fun scrollFeed(compilationMode: CompilationMode) = benchmarkRule.measureRepeated( packageName = PACKAGE_NAME, metrics = listOf(FrameTimingMetric()), @@ -47,8 +50,7 @@ class ScrollForYouFeedBenchmark { setupBlock = { // Start the app pressHome() - startActivityAndWait() - allowNotifications() + startActivityAndAllowNotifications() }, ) { forYouWaitForContent() diff --git a/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/interests/InterestsActions.kt b/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/interests/InterestsActions.kt similarity index 85% rename from benchmarks/src/main/java/com/google/samples/apps/nowinandroid/interests/InterestsActions.kt rename to benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/interests/InterestsActions.kt index d9c563ebc..05b276faa 100644 --- a/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/interests/InterestsActions.kt +++ b/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/interests/InterestsActions.kt @@ -20,21 +20,21 @@ import androidx.benchmark.macro.MacrobenchmarkScope import androidx.test.uiautomator.By import androidx.test.uiautomator.Until import com.google.samples.apps.nowinandroid.flingElementDownUp +import com.google.samples.apps.nowinandroid.waitForObjectOnTopAppBar fun MacrobenchmarkScope.goToInterestsScreen() { device.findObject(By.text("Interests")).click() device.waitForIdle() // Wait until interests are shown on screen - device.wait(Until.hasObject(By.res("niaTopAppBar")), 2_000) - val topAppBar = device.findObject(By.res("niaTopAppBar")) - topAppBar.wait(Until.hasObject(By.text("Interests")), 2_000) + waitForObjectOnTopAppBar(By.text("Interests")) // Wait until content is loaded by checking if interests are loaded device.wait(Until.gone(By.res("loadingWheel")), 5_000) } fun MacrobenchmarkScope.interestsScrollTopicsDownUp() { - val topicsList = device.wait(Until.findObject(By.res("interests:topics")), 2_000) + device.wait(Until.hasObject(By.res("interests:topics")), 5_000) + val topicsList = device.findObject(By.res("interests:topics")) device.flingElementDownUp(topicsList) } diff --git a/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/interests/ScrollTopicListBenchmark.kt b/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/interests/ScrollTopicListBenchmark.kt similarity index 93% rename from benchmarks/src/main/java/com/google/samples/apps/nowinandroid/interests/ScrollTopicListBenchmark.kt rename to benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/interests/ScrollTopicListBenchmark.kt index b43d3a84b..b53e2e05c 100644 --- a/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/interests/ScrollTopicListBenchmark.kt +++ b/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/interests/ScrollTopicListBenchmark.kt @@ -23,7 +23,7 @@ import androidx.benchmark.macro.junit4.MacrobenchmarkRule import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.uiautomator.By import com.google.samples.apps.nowinandroid.PACKAGE_NAME -import com.google.samples.apps.nowinandroid.allowNotifications +import com.google.samples.apps.nowinandroid.startActivityAndAllowNotifications import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith @@ -47,8 +47,7 @@ class ScrollTopicListBenchmark { setupBlock = { // Start the app pressHome() - startActivityAndWait() - allowNotifications() + startActivityAndAllowNotifications() // Navigate to interests screen device.findObject(By.text("Interests")).click() device.waitForIdle() diff --git a/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/interests/ScrollTopicListPowerMetricsBenchmark.kt b/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/interests/ScrollTopicListPowerMetricsBenchmark.kt similarity index 98% rename from benchmarks/src/main/java/com/google/samples/apps/nowinandroid/interests/ScrollTopicListPowerMetricsBenchmark.kt rename to benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/interests/ScrollTopicListPowerMetricsBenchmark.kt index 13c6f55e3..f938fad62 100644 --- a/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/interests/ScrollTopicListPowerMetricsBenchmark.kt +++ b/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/interests/ScrollTopicListPowerMetricsBenchmark.kt @@ -45,7 +45,7 @@ class ScrollTopicListPowerMetricsBenchmark { @get:Rule val benchmarkRule = MacrobenchmarkRule() - private val categories = PowerCategory.values() + private val categories = PowerCategory.entries .associateWith { PowerCategoryDisplayLevel.TOTAL } @Test diff --git a/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/interests/TopicsScreenRecompositionBenchmark.kt b/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/interests/TopicsScreenRecompositionBenchmark.kt similarity index 93% rename from benchmarks/src/main/java/com/google/samples/apps/nowinandroid/interests/TopicsScreenRecompositionBenchmark.kt rename to benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/interests/TopicsScreenRecompositionBenchmark.kt index 0030386b7..faf0803f3 100644 --- a/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/interests/TopicsScreenRecompositionBenchmark.kt +++ b/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/interests/TopicsScreenRecompositionBenchmark.kt @@ -23,7 +23,7 @@ import androidx.benchmark.macro.junit4.MacrobenchmarkRule import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.uiautomator.By import com.google.samples.apps.nowinandroid.PACKAGE_NAME -import com.google.samples.apps.nowinandroid.allowNotifications +import com.google.samples.apps.nowinandroid.startActivityAndAllowNotifications import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith @@ -47,8 +47,7 @@ class TopicsScreenRecompositionBenchmark { setupBlock = { // Start the app pressHome() - startActivityAndWait() - allowNotifications() + startActivityAndAllowNotifications() // Navigate to interests screen device.findObject(By.text("Interests")).click() device.waitForIdle() diff --git a/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/startup/StartupBenchmark.kt b/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/startup/StartupBenchmark.kt similarity index 76% rename from benchmarks/src/main/java/com/google/samples/apps/nowinandroid/startup/StartupBenchmark.kt rename to benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/startup/StartupBenchmark.kt index 669e05b82..4aab929b1 100644 --- a/benchmarks/src/main/java/com/google/samples/apps/nowinandroid/startup/StartupBenchmark.kt +++ b/benchmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/startup/StartupBenchmark.kt @@ -20,12 +20,13 @@ import androidx.benchmark.macro.BaselineProfileMode.Disable import androidx.benchmark.macro.BaselineProfileMode.Require import androidx.benchmark.macro.CompilationMode import androidx.benchmark.macro.StartupMode.COLD -import androidx.benchmark.macro.StartupTimingMetric import androidx.benchmark.macro.junit4.MacrobenchmarkRule import androidx.test.internal.runner.junit4.AndroidJUnit4ClassRunner +import com.google.samples.apps.nowinandroid.BaselineProfileMetrics import com.google.samples.apps.nowinandroid.PACKAGE_NAME import com.google.samples.apps.nowinandroid.allowNotifications import com.google.samples.apps.nowinandroid.foryou.forYouWaitForContent +import com.google.samples.apps.nowinandroid.startActivityAndAllowNotifications import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith @@ -41,32 +42,33 @@ class StartupBenchmark { val benchmarkRule = MacrobenchmarkRule() @Test - fun startupNoCompilation() = startup(CompilationMode.None()) + fun startupWithoutPreCompilation() = startup(CompilationMode.None()) @Test - fun startupBaselineProfileDisabled() = startup( + fun startupWithPartialCompilationAndDisabledBaselineProfile() = startup( CompilationMode.Partial(baselineProfileMode = Disable, warmupIterations = 1), ) @Test - fun startupBaselineProfile() = startup(CompilationMode.Partial(baselineProfileMode = Require)) + fun startupPrecompiledWithBaselineProfile() = + startup(CompilationMode.Partial(baselineProfileMode = Require)) @Test - fun startupFullCompilation() = startup(CompilationMode.Full()) + fun startupFullyPrecompiled() = startup(CompilationMode.Full()) private fun startup(compilationMode: CompilationMode) = benchmarkRule.measureRepeated( packageName = PACKAGE_NAME, - metrics = listOf(StartupTimingMetric()), + metrics = BaselineProfileMetrics.allMetrics, compilationMode = compilationMode, - iterations = 10, + // More iterations result in higher statistical significance. + iterations = 20, startupMode = COLD, setupBlock = { pressHome() allowNotifications() }, ) { - startActivityAndWait() - allowNotifications() + startActivityAndAllowNotifications() // Waits until the content is ready to capture Time To Full Display forYouWaitForContent() } diff --git a/build-logic/convention/build.gradle.kts b/build-logic/convention/build.gradle.kts index 9230dd6b7..c735fa4a0 100644 --- a/build-logic/convention/build.gradle.kts +++ b/build-logic/convention/build.gradle.kts @@ -14,6 +14,7 @@ * limitations under the License. */ +import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { @@ -28,18 +29,30 @@ java { sourceCompatibility = JavaVersion.VERSION_17 targetCompatibility = JavaVersion.VERSION_17 } -tasks.withType().configureEach { - kotlinOptions { - jvmTarget = JavaVersion.VERSION_17.toString() + +kotlin { + compilerOptions { + jvmTarget = JvmTarget.JVM_17 } } dependencies { compileOnly(libs.android.gradlePlugin) + compileOnly(libs.android.tools.common) + compileOnly(libs.compose.gradlePlugin) compileOnly(libs.firebase.crashlytics.gradlePlugin) compileOnly(libs.firebase.performance.gradlePlugin) compileOnly(libs.kotlin.gradlePlugin) compileOnly(libs.ksp.gradlePlugin) + compileOnly(libs.room.gradlePlugin) + implementation(libs.truth) +} + +tasks { + validatePlugins { + enableStricterValidation = true + failOnWarning = true + } } gradlePlugin { @@ -76,9 +89,9 @@ gradlePlugin { id = "nowinandroid.android.test" implementationClass = "AndroidTestConventionPlugin" } - register("androidHilt") { - id = "nowinandroid.android.hilt" - implementationClass = "AndroidHiltConventionPlugin" + register("hilt") { + id = "nowinandroid.hilt" + implementationClass = "HiltConventionPlugin" } register("androidRoom") { id = "nowinandroid.android.room" diff --git a/build-logic/convention/src/main/kotlin/AndroidApplicationComposeConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidApplicationComposeConventionPlugin.kt index bb79715e4..a8b1b1779 100644 --- a/build-logic/convention/src/main/kotlin/AndroidApplicationComposeConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidApplicationComposeConventionPlugin.kt @@ -18,14 +18,14 @@ import com.android.build.api.dsl.ApplicationExtension import com.google.samples.apps.nowinandroid.configureAndroidCompose import org.gradle.api.Plugin import org.gradle.api.Project +import org.gradle.kotlin.dsl.apply import org.gradle.kotlin.dsl.getByType class AndroidApplicationComposeConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { - pluginManager.apply("com.android.application") - // Screenshot Tests - pluginManager.apply("io.github.takahirom.roborazzi") + apply(plugin = "com.android.application") + apply(plugin = "org.jetbrains.kotlin.plugin.compose") val extension = extensions.getByType() configureAndroidCompose(extension) diff --git a/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt index 50baf3dc6..f4d5bb0d0 100644 --- a/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidApplicationConventionPlugin.kt @@ -15,13 +15,16 @@ */ import com.android.build.api.dsl.ApplicationExtension -import com.google.samples.apps.nowinandroid.configureGradleManagedDevices import com.android.build.api.variant.ApplicationAndroidComponentsExtension +import com.android.build.gradle.BaseExtension +import com.google.samples.apps.nowinandroid.configureBadgingTasks +import com.google.samples.apps.nowinandroid.configureGradleManagedDevices import com.google.samples.apps.nowinandroid.configureKotlinAndroid import com.google.samples.apps.nowinandroid.configurePrintApksTask import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.kotlin.dsl.configure +import org.gradle.kotlin.dsl.getByType class AndroidApplicationConventionPlugin : Plugin { override fun apply(target: Project) { @@ -30,17 +33,21 @@ class AndroidApplicationConventionPlugin : Plugin { apply("com.android.application") apply("org.jetbrains.kotlin.android") apply("nowinandroid.android.lint") + apply("com.dropbox.dependency-guard") } extensions.configure { configureKotlinAndroid(this) defaultConfig.targetSdk = 34 + @Suppress("UnstableApiUsage") + testOptions.animationsDisabled = true configureGradleManagedDevices(this) } extensions.configure { configurePrintApksTask(this) + configureBadgingTasks(extensions.getByType(), this) } } } -} \ No newline at end of file +} diff --git a/build-logic/convention/src/main/kotlin/AndroidApplicationJacocoConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidApplicationJacocoConventionPlugin.kt index 4c3acc520..ac385b0d9 100644 --- a/build-logic/convention/src/main/kotlin/AndroidApplicationJacocoConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidApplicationJacocoConventionPlugin.kt @@ -15,6 +15,7 @@ */ import com.android.build.api.variant.ApplicationAndroidComponentsExtension +import com.android.build.gradle.internal.dsl.BaseAppModuleExtension import com.google.samples.apps.nowinandroid.configureJacoco import org.gradle.api.Plugin import org.gradle.api.Project @@ -23,13 +24,15 @@ import org.gradle.kotlin.dsl.getByType class AndroidApplicationJacocoConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { - with(pluginManager) { - apply("org.gradle.jacoco") - apply("com.android.application") + pluginManager.apply("jacoco") + val androidExtension = extensions.getByType() + + androidExtension.buildTypes.configureEach { + enableAndroidTestCoverage = true + enableUnitTestCoverage = true } - val extension = extensions.getByType() - configureJacoco(extension) + + configureJacoco(extensions.getByType()) } } - -} \ No newline at end of file +} diff --git a/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt index cc42d60fd..6d0f213d4 100644 --- a/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidFeatureConventionPlugin.kt @@ -21,45 +21,33 @@ import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.kotlin.dsl.configure import org.gradle.kotlin.dsl.dependencies -import org.gradle.kotlin.dsl.kotlin class AndroidFeatureConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { pluginManager.apply { apply("nowinandroid.android.library") - apply("nowinandroid.android.hilt") + apply("nowinandroid.hilt") + apply("org.jetbrains.kotlin.plugin.serialization") } extensions.configure { - defaultConfig { - testInstrumentationRunner = - "com.google.samples.apps.nowinandroid.core.testing.NiaTestRunner" - } + testOptions.animationsDisabled = true configureGradleManagedDevices(this) } dependencies { - add("implementation", project(":core:model")) add("implementation", project(":core:ui")) add("implementation", project(":core:designsystem")) - add("implementation", project(":core:data")) - add("implementation", project(":core:common")) - add("implementation", project(":core:domain")) - add("implementation", project(":core:analytics")) - - add("testImplementation", kotlin("test")) - add("testImplementation", project(":core:testing")) - add("androidTestImplementation", kotlin("test")) - add("androidTestImplementation", project(":core:testing")) - - add("implementation", libs.findLibrary("coil.kt").get()) - add("implementation", libs.findLibrary("coil.kt.compose").get()) add("implementation", libs.findLibrary("androidx.hilt.navigation.compose").get()) add("implementation", libs.findLibrary("androidx.lifecycle.runtimeCompose").get()) add("implementation", libs.findLibrary("androidx.lifecycle.viewModelCompose").get()) + add("implementation", libs.findLibrary("androidx.navigation.compose").get()) + add("implementation", libs.findLibrary("androidx.tracing.ktx").get()) + add("implementation", libs.findLibrary("kotlinx.serialization.json").get()) - add("implementation", libs.findLibrary("kotlinx.coroutines.android").get()) + add("testImplementation", libs.findLibrary("androidx.navigation.testing").get()) + add("androidTestImplementation", libs.findLibrary("androidx.lifecycle.runtimeTesting").get()) } } } diff --git a/build-logic/convention/src/main/kotlin/AndroidHiltConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidHiltConventionPlugin.kt deleted file mode 100644 index a0e81a27c..000000000 --- a/build-logic/convention/src/main/kotlin/AndroidHiltConventionPlugin.kt +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2022 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -import com.google.samples.apps.nowinandroid.libs -import org.gradle.api.Plugin -import org.gradle.api.Project -import org.gradle.kotlin.dsl.dependencies - -class AndroidHiltConventionPlugin : Plugin { - override fun apply(target: Project) { - with(target) { - with(pluginManager) { - apply("dagger.hilt.android.plugin") - // KAPT must go last to avoid build warnings. - // See: https://stackoverflow.com/questions/70550883/warning-the-following-options-were-not-recognized-by-any-processor-dagger-f - apply("org.jetbrains.kotlin.kapt") - } - - dependencies { - "implementation"(libs.findLibrary("hilt.android").get()) - "kapt"(libs.findLibrary("hilt.compiler").get()) - "kaptAndroidTest"(libs.findLibrary("hilt.compiler").get()) - "kaptTest"(libs.findLibrary("hilt.compiler").get()) - } - - } - } - -} diff --git a/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt index 707ca8055..19fabf549 100644 --- a/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidLibraryComposeConventionPlugin.kt @@ -18,14 +18,14 @@ import com.android.build.gradle.LibraryExtension import com.google.samples.apps.nowinandroid.configureAndroidCompose import org.gradle.api.Plugin import org.gradle.api.Project +import org.gradle.kotlin.dsl.apply import org.gradle.kotlin.dsl.getByType class AndroidLibraryComposeConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { - pluginManager.apply("com.android.library") - // Screenshot Tests - pluginManager.apply("io.github.takahirom.roborazzi") + apply(plugin = "com.android.library") + apply(plugin = "org.jetbrains.kotlin.plugin.compose") val extension = extensions.getByType() configureAndroidCompose(extension) diff --git a/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt index a7c245318..2a10901fb 100644 --- a/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidLibraryConventionPlugin.kt @@ -21,6 +21,7 @@ import com.google.samples.apps.nowinandroid.configureGradleManagedDevices import com.google.samples.apps.nowinandroid.configureKotlinAndroid import com.google.samples.apps.nowinandroid.configurePrintApksTask import com.google.samples.apps.nowinandroid.disableUnnecessaryAndroidTests +import com.google.samples.apps.nowinandroid.libs import org.gradle.api.Plugin import org.gradle.api.Project import org.gradle.kotlin.dsl.configure @@ -39,17 +40,24 @@ class AndroidLibraryConventionPlugin : Plugin { extensions.configure { configureKotlinAndroid(this) defaultConfig.targetSdk = 34 + defaultConfig.testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + testOptions.animationsDisabled = true configureFlavors(this) configureGradleManagedDevices(this) + // The resource prefix is derived from the module name, + // so resources inside ":core:module1" must be prefixed with "core_module1_" + resourcePrefix = path.split("""\W""".toRegex()).drop(1).distinct().joinToString(separator = "_").lowercase() + "_" } extensions.configure { configurePrintApksTask(this) disableUnnecessaryAndroidTests(target) } dependencies { - add("androidTestImplementation", kotlin("test")) - add("testImplementation", kotlin("test")) + add("androidTestImplementation", libs.findLibrary("kotlin.test").get()) + add("testImplementation", libs.findLibrary("kotlin.test").get()) + + add("implementation", libs.findLibrary("androidx.tracing.ktx").get()) } } } -} \ No newline at end of file +} diff --git a/build-logic/convention/src/main/kotlin/AndroidLibraryJacocoConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidLibraryJacocoConventionPlugin.kt index 86ca091c3..6f2ff60c5 100644 --- a/build-logic/convention/src/main/kotlin/AndroidLibraryJacocoConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidLibraryJacocoConventionPlugin.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +import com.android.build.api.dsl.LibraryExtension +import com.android.build.api.variant.ApplicationAndroidComponentsExtension import com.android.build.api.variant.LibraryAndroidComponentsExtension import com.google.samples.apps.nowinandroid.configureJacoco import org.gradle.api.Plugin @@ -23,13 +25,15 @@ import org.gradle.kotlin.dsl.getByType class AndroidLibraryJacocoConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { - with(pluginManager) { - apply("org.gradle.jacoco") - apply("com.android.library") + pluginManager.apply("jacoco") + val androidExtension = extensions.getByType() + + androidExtension.buildTypes.configureEach { + enableAndroidTestCoverage = true + enableUnitTestCoverage = true } - val extension = extensions.getByType() - configureJacoco(extension) + + configureJacoco(extensions.getByType()) } } - -} \ No newline at end of file +} diff --git a/build-logic/convention/src/main/kotlin/AndroidRoomConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidRoomConventionPlugin.kt index b67fb1b26..dbca79a5e 100644 --- a/build-logic/convention/src/main/kotlin/AndroidRoomConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidRoomConventionPlugin.kt @@ -14,29 +14,30 @@ * limitations under the License. */ +import androidx.room.gradle.RoomExtension import com.google.devtools.ksp.gradle.KspExtension import com.google.samples.apps.nowinandroid.libs import org.gradle.api.Plugin import org.gradle.api.Project -import org.gradle.api.tasks.InputDirectory -import org.gradle.api.tasks.PathSensitive -import org.gradle.api.tasks.PathSensitivity import org.gradle.kotlin.dsl.configure import org.gradle.kotlin.dsl.dependencies -import org.gradle.process.CommandLineArgumentProvider -import java.io.File class AndroidRoomConventionPlugin : Plugin { override fun apply(target: Project) { with(target) { + pluginManager.apply("androidx.room") pluginManager.apply("com.google.devtools.ksp") extensions.configure { + arg("room.generateKotlin", "true") + } + + extensions.configure { // The schemas directory contains a schema file for each version of the Room database. // This is required to enable Room auto migrations. // See https://developer.android.com/reference/kotlin/androidx/room/AutoMigration. - arg(RoomSchemaArgProvider(File(projectDir, "schemas"))) + schemaDirectory("$projectDir/schemas") } dependencies { @@ -46,16 +47,4 @@ class AndroidRoomConventionPlugin : Plugin { } } } - - /** - * https://issuetracker.google.com/issues/132245929 - * [Export schemas](https://developer.android.com/training/data-storage/room/migrating-db-versions#export-schemas) - */ - class RoomSchemaArgProvider( - @get:InputDirectory - @get:PathSensitive(PathSensitivity.RELATIVE) - val schemaDir: File, - ) : CommandLineArgumentProvider { - override fun asArguments() = listOf("room.schemaLocation=${schemaDir.path}") - } } \ No newline at end of file diff --git a/build-logic/convention/src/main/kotlin/HiltConventionPlugin.kt b/build-logic/convention/src/main/kotlin/HiltConventionPlugin.kt new file mode 100644 index 000000000..f49366f75 --- /dev/null +++ b/build-logic/convention/src/main/kotlin/HiltConventionPlugin.kt @@ -0,0 +1,47 @@ +/* + * Copyright 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import com.android.build.gradle.api.AndroidBasePlugin +import com.google.samples.apps.nowinandroid.libs +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.kotlin.dsl.dependencies + +class HiltConventionPlugin : Plugin { + override fun apply(target: Project) { + with(target) { + pluginManager.apply("com.google.devtools.ksp") + dependencies { + add("ksp", libs.findLibrary("hilt.compiler").get()) + } + + // Add support for Jvm Module, base on org.jetbrains.kotlin.jvm + pluginManager.withPlugin("org.jetbrains.kotlin.jvm") { + dependencies { + add("implementation", libs.findLibrary("hilt.core").get()) + } + } + + /** Add support for Android modules, based on [AndroidBasePlugin] */ + pluginManager.withPlugin("com.android.base") { + pluginManager.apply("dagger.hilt.android.plugin") + dependencies { + add("implementation", libs.findLibrary("hilt.android").get()) + } + } + } + } +} diff --git a/build-logic/convention/src/main/kotlin/JvmLibraryConventionPlugin.kt b/build-logic/convention/src/main/kotlin/JvmLibraryConventionPlugin.kt index 35932c835..afe47eeee 100644 --- a/build-logic/convention/src/main/kotlin/JvmLibraryConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/JvmLibraryConventionPlugin.kt @@ -15,8 +15,11 @@ */ import com.google.samples.apps.nowinandroid.configureKotlinJvm +import com.google.samples.apps.nowinandroid.libs import org.gradle.api.Plugin import org.gradle.api.Project +import org.gradle.kotlin.dsl.dependencies +import org.gradle.kotlin.dsl.kotlin class JvmLibraryConventionPlugin : Plugin { override fun apply(target: Project) { @@ -26,6 +29,9 @@ class JvmLibraryConventionPlugin : Plugin { apply("nowinandroid.android.lint") } configureKotlinJvm() + dependencies { + add("testImplementation", libs.findLibrary("kotlin.test").get()) + } } } } diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt index 186f0b3d3..ffb6358c3 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidCompose.kt @@ -18,34 +18,29 @@ package com.google.samples.apps.nowinandroid import com.android.build.api.dsl.CommonExtension import org.gradle.api.Project +import org.gradle.api.provider.Provider +import org.gradle.kotlin.dsl.assign +import org.gradle.kotlin.dsl.configure import org.gradle.kotlin.dsl.dependencies -import org.gradle.kotlin.dsl.withType -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile +import org.jetbrains.kotlin.compose.compiler.gradle.ComposeCompilerGradlePluginExtension /** * Configure Compose-specific options */ internal fun Project.configureAndroidCompose( - commonExtension: CommonExtension<*, *, *, *, *>, + commonExtension: CommonExtension<*, *, *, *, *, *>, ) { commonExtension.apply { buildFeatures { compose = true } - composeOptions { - kotlinCompilerExtensionVersion = libs.findVersion("androidxComposeCompiler").get().toString() - } - dependencies { val bom = libs.findLibrary("androidx-compose-bom").get() add("implementation", platform(bom)) add("androidTestImplementation", platform(bom)) - // Add ComponentActivity to debug manfest - add("debugImplementation", libs.findLibrary("androidx.compose.ui.testManifest").get()) - // Screenshot Tests on JVM - add("testImplementation", libs.findLibrary("robolectric").get()) - add("testImplementation", libs.findLibrary("roborazzi").get()) + add("implementation", libs.findLibrary("androidx-compose-ui-tooling-preview").get()) + add("debugImplementation", libs.findLibrary("androidx-compose-ui-tooling").get()) } testOptions { @@ -56,35 +51,21 @@ internal fun Project.configureAndroidCompose( } } - tasks.withType().configureEach { - kotlinOptions { - freeCompilerArgs = freeCompilerArgs + buildComposeMetricsParameters() - } - } -} + extensions.configure { + fun Provider.onlyIfTrue() = flatMap { provider { it.takeIf(String::toBoolean) } } + fun Provider<*>.relativeToRootProject(dir: String) = flatMap { + rootProject.layout.buildDirectory.dir(projectDir.toRelativeString(rootDir)) + }.map { it.dir(dir) } -private fun Project.buildComposeMetricsParameters(): List { - val metricParameters = mutableListOf() - val enableMetricsProvider = project.providers.gradleProperty("enableComposeCompilerMetrics") - val relativePath = projectDir.relativeTo(rootDir) + project.providers.gradleProperty("enableComposeCompilerMetrics").onlyIfTrue() + .relativeToRootProject("compose-metrics") + .let(metricsDestination::set) - val enableMetrics = (enableMetricsProvider.orNull == "true") - if (enableMetrics) { - val metricsFolder = rootProject.buildDir.resolve("compose-metrics").resolve(relativePath) - metricParameters.add("-P") - metricParameters.add( - "plugin:androidx.compose.compiler.plugins.kotlin:metricsDestination=" + metricsFolder.absolutePath - ) - } + project.providers.gradleProperty("enableComposeCompilerReports").onlyIfTrue() + .relativeToRootProject("compose-reports") + .let(reportsDestination::set) - val enableReportsProvider = project.providers.gradleProperty("enableComposeCompilerReports") - val enableReports = (enableReportsProvider.orNull == "true") - if (enableReports) { - val reportsFolder = rootProject.buildDir.resolve("compose-reports").resolve(relativePath) - metricParameters.add("-P") - metricParameters.add( - "plugin:androidx.compose.compiler.plugins.kotlin:reportsDestination=" + reportsFolder.absolutePath - ) + stabilityConfigurationFile = + rootProject.layout.projectDirectory.file("compose_compiler_config.conf") } - return metricParameters.toList() } diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidInstrumentedTests.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidInstrumentedTests.kt index d0c26e4e6..c51dac5c9 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidInstrumentedTests.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/AndroidInstrumentedTests.kt @@ -30,6 +30,6 @@ import org.gradle.api.Project internal fun LibraryAndroidComponentsExtension.disableUnnecessaryAndroidTests( project: Project, ) = beforeVariants { - it.enableAndroidTest = it.enableAndroidTest + it.androidTest.enable = it.androidTest.enable && project.projectDir.resolve("src/androidTest").exists() } diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Badging.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Badging.kt new file mode 100644 index 000000000..9eabff31b --- /dev/null +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Badging.kt @@ -0,0 +1,159 @@ +/* + * Copyright 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid + +import com.android.SdkConstants +import com.android.build.api.artifact.SingleArtifact +import com.android.build.api.variant.ApplicationAndroidComponentsExtension +import com.android.build.gradle.BaseExtension +import com.google.common.truth.Truth.assertWithMessage +import org.gradle.api.DefaultTask +import org.gradle.api.Project +import org.gradle.api.file.DirectoryProperty +import org.gradle.api.file.RegularFileProperty +import org.gradle.api.provider.Property +import org.gradle.api.tasks.CacheableTask +import org.gradle.api.tasks.Copy +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.InputFile +import org.gradle.api.tasks.OutputDirectory +import org.gradle.api.tasks.OutputFile +import org.gradle.api.tasks.PathSensitive +import org.gradle.api.tasks.PathSensitivity +import org.gradle.api.tasks.TaskAction +import org.gradle.kotlin.dsl.assign +import org.gradle.kotlin.dsl.register +import org.gradle.language.base.plugins.LifecycleBasePlugin +import org.gradle.process.ExecOperations +import java.io.File +import java.util.Locale +import javax.inject.Inject + +@CacheableTask +abstract class GenerateBadgingTask : DefaultTask() { + + @get:OutputFile + abstract val badging: RegularFileProperty + + @get:PathSensitive(PathSensitivity.NONE) + @get:InputFile + abstract val apk: RegularFileProperty + + @get:PathSensitive(PathSensitivity.NONE) + @get:InputFile + abstract val aapt2Executable: RegularFileProperty + + @get:Inject + abstract val execOperations: ExecOperations + + @TaskAction + fun taskAction() { + execOperations.exec { + commandLine( + aapt2Executable.get().asFile.absolutePath, + "dump", + "badging", + apk.get().asFile.absolutePath, + ) + standardOutput = badging.asFile.get().outputStream() + } + } +} + +@CacheableTask +abstract class CheckBadgingTask : DefaultTask() { + + // In order for the task to be up-to-date when the inputs have not changed, + // the task must declare an output, even if it's not used. Tasks with no + // output are always run regardless of whether the inputs changed + @get:OutputDirectory + abstract val output: DirectoryProperty + + @get:PathSensitive(PathSensitivity.NONE) + @get:InputFile + abstract val goldenBadging: RegularFileProperty + + @get:PathSensitive(PathSensitivity.NONE) + @get:InputFile + abstract val generatedBadging: RegularFileProperty + + @get:Input + abstract val updateBadgingTaskName: Property + + override fun getGroup(): String = LifecycleBasePlugin.VERIFICATION_GROUP + + @TaskAction + fun taskAction() { + assertWithMessage( + "Generated badging is different from golden badging! " + + "If this change is intended, run ./gradlew ${updateBadgingTaskName.get()}", + ) + .that(generatedBadging.get().asFile.readText()) + .isEqualTo(goldenBadging.get().asFile.readText()) + } +} + +private fun String.capitalized() = replaceFirstChar { + if (it.isLowerCase()) it.titlecase() else it.toString() +} + +fun Project.configureBadgingTasks( + baseExtension: BaseExtension, + componentsExtension: ApplicationAndroidComponentsExtension, +) { + // Registers a callback to be called, when a new variant is configured + componentsExtension.onVariants { variant -> + // Registers a new task to verify the app bundle. + val capitalizedVariantName = variant.name.capitalized() + val generateBadgingTaskName = "generate${capitalizedVariantName}Badging" + val generateBadging = + tasks.register(generateBadgingTaskName) { + apk = variant.artifacts.get(SingleArtifact.APK_FROM_BUNDLE) + + aapt2Executable = File( + baseExtension.sdkDirectory, + "${SdkConstants.FD_BUILD_TOOLS}/" + + "${baseExtension.buildToolsVersion}/" + + SdkConstants.FN_AAPT2, + ) + + + badging = project.layout.buildDirectory.file( + "outputs/apk_from_bundle/${variant.name}/${variant.name}-badging.txt", + ) + + } + + val updateBadgingTaskName = "update${capitalizedVariantName}Badging" + tasks.register(updateBadgingTaskName) { + from(generateBadging.get().badging) + into(project.layout.projectDirectory) + } + + val checkBadgingTaskName = "check${capitalizedVariantName}Badging" + tasks.register(checkBadgingTaskName) { + goldenBadging = project.layout.projectDirectory.file("${variant.name}-badging.txt") + + generatedBadging = generateBadging.get().badging + + this.updateBadgingTaskName = updateBadgingTaskName + + output = project.layout.buildDirectory.dir("intermediates/$checkBadgingTaskName") + + } + } +} diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/GradleManagedDevices.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/GradleManagedDevices.kt index 6aa896444..f67e9093d 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/GradleManagedDevices.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/GradleManagedDevices.kt @@ -25,7 +25,7 @@ import org.gradle.kotlin.dsl.invoke * Configure project for Gradle managed devices */ internal fun configureGradleManagedDevices( - commonExtension: CommonExtension<*, *, *, *, *>, + commonExtension: CommonExtension<*, *, *, *, *, *>, ) { val pixel4 = DeviceConfig("Pixel 4", 30, "aosp-atd") val pixel6 = DeviceConfig("Pixel 6", 31, "aosp") diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Jacoco.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Jacoco.kt index 70eef1a2d..972d539c6 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Jacoco.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/Jacoco.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022 The Android Open Source Project + * Copyright 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,9 +16,15 @@ package com.google.samples.apps.nowinandroid +import com.android.build.api.artifact.ScopedArtifact import com.android.build.api.variant.AndroidComponentsExtension +import com.android.build.api.variant.ScopedArtifacts import org.gradle.api.Project +import org.gradle.api.file.Directory +import org.gradle.api.file.RegularFile +import org.gradle.api.provider.ListProperty import org.gradle.api.tasks.testing.Test +import org.gradle.kotlin.dsl.assign import org.gradle.kotlin.dsl.configure import org.gradle.kotlin.dsl.register import org.gradle.kotlin.dsl.withType @@ -32,13 +38,24 @@ private val coverageExclusions = listOf( "**/R.class", "**/R\$*.class", "**/BuildConfig.*", - "**/Manifest*.*" + "**/Manifest*.*", + "**/*_Hilt*.class", + "**/Hilt_*.class", ) private fun String.capitalize() = replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() } +/** + * Creates a new task that generates a combined coverage report with data from local and + * instrumented tests. + * + * `create{variant}CombinedCoverageReport` + * + * Note that coverage data must exist before running the task. This allows us to run device + * tests on CI using a different Github Action or an external device farm. + */ internal fun Project.configureJacoco( androidComponentsExtension: AndroidComponentsExtension<*, *, *>, ) { @@ -46,37 +63,62 @@ internal fun Project.configureJacoco( toolVersion = libs.findVersion("jacoco").get().toString() } - val jacocoTestReport = tasks.create("jacocoTestReport") - androidComponentsExtension.onVariants { variant -> - val testTaskName = "test${variant.name.capitalize()}UnitTest" + val myObjFactory = project.objects + val buildDir = layout.buildDirectory.get().asFile + val allJars: ListProperty = myObjFactory.listProperty(RegularFile::class.java) + val allDirectories: ListProperty = + myObjFactory.listProperty(Directory::class.java) + val reportTask = + tasks.register( + "create${variant.name.capitalize()}CombinedCoverageReport", + JacocoReport::class, + ) { - val reportTask = tasks.register("jacoco${testTaskName.capitalize()}Report", JacocoReport::class) { - dependsOn(testTaskName) + classDirectories.setFrom( + allJars, + allDirectories.map { dirs -> + dirs.map { dir -> + myObjFactory.fileTree().setDir(dir).exclude(coverageExclusions) + } + }, + ) + reports { + xml.required = true + html.required = true + } - reports { - xml.required.set(true) - html.required.set(true) - } + // TODO: This is missing files in src/debug/, src/prod, src/demo, src/demoDebug... + sourceDirectories.setFrom( + files( + "$projectDir/src/main/java", + "$projectDir/src/main/kotlin", + ), + ) - classDirectories.setFrom( - fileTree("$buildDir/tmp/kotlin-classes/${variant.name}") { - exclude(coverageExclusions) - } - ) + executionData.setFrom( + project.fileTree("$buildDir/outputs/unit_test_code_coverage/${variant.name}UnitTest") + .matching { include("**/*.exec") }, + + project.fileTree("$buildDir/outputs/code_coverage/${variant.name}AndroidTest") + .matching { include("**/*.ec") }, + ) + } - sourceDirectories.setFrom(files("$projectDir/src/main/java", "$projectDir/src/main/kotlin")) - executionData.setFrom(file("$buildDir/jacoco/$testTaskName.exec")) - } - jacocoTestReport.dependsOn(reportTask) + variant.artifacts.forScope(ScopedArtifacts.Scope.PROJECT) + .use(reportTask) + .toGet( + ScopedArtifact.CLASSES, + { _ -> allJars }, + { _ -> allDirectories }, + ) } tasks.withType().configureEach { configure { // Required for JaCoCo + Robolectric // https://github.com/robolectric/robolectric/issues/2230 - // TODO: Consider removing if not we don't add Robolectric isIncludeNoLocationClasses = true // Required for JDK 11 with the above diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt index 04ee4e56e..bfb799595 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/KotlinAndroid.kt @@ -20,17 +20,20 @@ import com.android.build.api.dsl.CommonExtension import org.gradle.api.JavaVersion import org.gradle.api.Project import org.gradle.api.plugins.JavaPluginExtension +import org.gradle.kotlin.dsl.assign import org.gradle.kotlin.dsl.configure import org.gradle.kotlin.dsl.dependencies import org.gradle.kotlin.dsl.provideDelegate -import org.gradle.kotlin.dsl.withType -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile +import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.jetbrains.kotlin.gradle.dsl.KotlinAndroidProjectExtension +import org.jetbrains.kotlin.gradle.dsl.KotlinJvmProjectExtension +import org.jetbrains.kotlin.gradle.dsl.KotlinTopLevelExtension /** * Configure base Kotlin with Android options */ internal fun Project.configureKotlinAndroid( - commonExtension: CommonExtension<*, *, *, *, *>, + commonExtension: CommonExtension<*, *, *, *, *, *>, ) { commonExtension.apply { compileSdk = 34 @@ -48,7 +51,7 @@ internal fun Project.configureKotlinAndroid( } } - configureKotlin() + configureKotlin() dependencies { add("coreLibraryDesugaring", libs.findLibrary("android.desugarJdkLibs").get()) @@ -66,28 +69,26 @@ internal fun Project.configureKotlinJvm() { targetCompatibility = JavaVersion.VERSION_11 } - configureKotlin() + configureKotlin() } /** * Configure base Kotlin options */ -private fun Project.configureKotlin() { - // Use withType to workaround https://youtrack.jetbrains.com/issue/KT-55947 - tasks.withType().configureEach { - kotlinOptions { - // Set JVM target to 11 - jvmTarget = JavaVersion.VERSION_11.toString() - // Treat all Kotlin warnings as errors (disabled by default) - // Override by setting warningsAsErrors=true in your ~/.gradle/gradle.properties - val warningsAsErrors: String? by project - allWarningsAsErrors = warningsAsErrors.toBoolean() - freeCompilerArgs = freeCompilerArgs + listOf( - "-opt-in=kotlin.RequiresOptIn", - // Enable experimental coroutines APIs, including Flow - "-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi", - "-opt-in=kotlinx.coroutines.FlowPreview", - ) - } +private inline fun Project.configureKotlin() = configure { + // Treat all Kotlin warnings as errors (disabled by default) + // Override by setting warningsAsErrors=true in your ~/.gradle/gradle.properties + val warningsAsErrors: String? by project + when (this) { + is KotlinAndroidProjectExtension -> compilerOptions + is KotlinJvmProjectExtension -> compilerOptions + else -> TODO("Unsupported project extension $this ${T::class}") + }.apply { + jvmTarget = JvmTarget.JVM_11 + allWarningsAsErrors = warningsAsErrors.toBoolean() + freeCompilerArgs.add( + // Enable experimental coroutines APIs, including Flow + "-opt-in=kotlinx.coroutines.ExperimentalCoroutinesApi", + ) } } diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/NiaBuildType.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/NiaBuildType.kt index 653506f51..e4f40840d 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/NiaBuildType.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/NiaBuildType.kt @@ -22,5 +22,4 @@ package com.google.samples.apps.nowinandroid enum class NiaBuildType(val applicationIdSuffix: String? = null) { DEBUG(".debug"), RELEASE, - BENCHMARK(".benchmark") } diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/NiaFlavor.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/NiaFlavor.kt index 60d059ac0..633098604 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/NiaFlavor.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/NiaFlavor.kt @@ -20,7 +20,7 @@ enum class NiaFlavor(val dimension: FlavorDimension, val applicationIdSuffix: St } fun configureFlavors( - commonExtension: CommonExtension<*, *, *, *, *>, + commonExtension: CommonExtension<*, *, *, *, *, *>, flavorConfigurationBlock: ProductFlavor.(flavor: NiaFlavor) -> Unit = {} ) { commonExtension.apply { diff --git a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/PrintTestApks.kt b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/PrintTestApks.kt index 6c08216cc..271fc51b7 100644 --- a/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/PrintTestApks.kt +++ b/build-logic/convention/src/main/kotlin/com/google/samples/apps/nowinandroid/PrintTestApks.kt @@ -30,7 +30,11 @@ import org.gradle.api.tasks.Input import org.gradle.api.tasks.InputDirectory import org.gradle.api.tasks.InputFiles import org.gradle.api.tasks.Internal +import org.gradle.api.tasks.PathSensitive +import org.gradle.api.tasks.PathSensitivity import org.gradle.api.tasks.TaskAction +import org.gradle.kotlin.dsl.assign +import org.gradle.work.DisableCachingByDefault import java.io.File internal fun Project.configurePrintApksTask(extension: AndroidComponentsExtension<*, *, *>) { @@ -50,22 +54,26 @@ internal fun Project.configurePrintApksTask(extension: AndroidComponentsExtensio if (artifact != null && testSources != null) { tasks.register( "${variant.name}PrintTestApk", - PrintApkLocationTask::class.java + PrintApkLocationTask::class.java, ) { - apkFolder.set(artifact) - builtArtifactsLoader.set(loader) - variantName.set(variant.name) - sources.set(testSources) + apkFolder = artifact + builtArtifactsLoader = loader + variantName = variant.name + sources = testSources } } } } } +@DisableCachingByDefault(because = "Prints output") internal abstract class PrintApkLocationTask : DefaultTask() { + + @get:PathSensitive(PathSensitivity.RELATIVE) @get:InputDirectory abstract val apkFolder: DirectoryProperty + @get:PathSensitive(PathSensitivity.RELATIVE) @get:InputFiles abstract val sources: ListProperty @@ -79,14 +87,12 @@ internal abstract class PrintApkLocationTask : DefaultTask() { fun taskAction() { val hasFiles = sources.orNull?.any { directory -> directory.asFileTree.files.any { - it.isFile && it.parentFile.path.contains("build${File.separator}generated").not() + it.isFile && "build${File.separator}generated" !in it.parentFile.path } } ?: throw RuntimeException("Cannot check androidTest sources") // Don't print APK location if there are no androidTest source files - if (!hasFiles) { - return - } + if (!hasFiles) return val builtArtifacts = builtArtifactsLoader.get().load(apkFolder.get()) ?: throw RuntimeException("Cannot load APKs") @@ -95,4 +101,4 @@ internal abstract class PrintApkLocationTask : DefaultTask() { val apk = File(builtArtifacts.elements.single().outputFile).toPath() println(apk) } -} \ No newline at end of file +} diff --git a/build-logic/settings.gradle.kts b/build-logic/settings.gradle.kts index de9224e22..b359a5207 100644 --- a/build-logic/settings.gradle.kts +++ b/build-logic/settings.gradle.kts @@ -16,7 +16,13 @@ dependencyResolutionManagement { repositories { - google() + google { + content { + includeGroupByRegex("com\\.android.*") + includeGroupByRegex("com\\.google.*") + includeGroupByRegex("androidx.*") + } + } mavenCentral() } versionCatalogs { diff --git a/build.gradle.kts b/build.gradle.kts index 1efa3f8be..9a8652956 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -16,7 +16,13 @@ buildscript { repositories { - google() + google { + content { + includeGroupByRegex("com\\.android.*") + includeGroupByRegex("com\\.google.*") + includeGroupByRegex("androidx.*") + } + } mavenCentral() // Android Build Server @@ -27,13 +33,25 @@ buildscript { exclude(group = "com.google.protobuf") } } + } -// Lists all plugins used throughout the project without applying them. +/* + * By listing all the plugins used throughout all subprojects in the root project build script, it + * ensures that the build script classpath remains the same for all projects. This avoids potential + * problems with mismatching versions of transitive plugin dependencies. A subproject that applies + * an unlisted plugin will have that plugin and its dependencies _appended_ to the classpath, not + * replacing pre-existing dependencies. + */ plugins { alias(libs.plugins.android.application) apply false + alias(libs.plugins.android.library) apply false + alias(libs.plugins.android.test) apply false + alias(libs.plugins.baselineprofile) apply false + alias(libs.plugins.compose) apply false alias(libs.plugins.kotlin.jvm) apply false alias(libs.plugins.kotlin.serialization) apply false + alias(libs.plugins.dependencyGuard) apply false alias(libs.plugins.firebase.crashlytics) apply false alias(libs.plugins.firebase.perf) apply false alias(libs.plugins.gms) apply false @@ -41,4 +59,6 @@ plugins { alias(libs.plugins.ksp) apply false alias(libs.plugins.roborazzi) apply false alias(libs.plugins.secrets) apply false + alias(libs.plugins.room) apply false + alias(libs.plugins.module.graph) apply true // Plugin applied to allow module graph generation } diff --git a/compose_compiler_config.conf b/compose_compiler_config.conf new file mode 100644 index 000000000..4337c04cb --- /dev/null +++ b/compose_compiler_config.conf @@ -0,0 +1,11 @@ +// This file contains classes (with possible wildcards) that the Compose Compiler will treat as stable. +// It allows us to define classes that are not part of our codebase without wrapping them in a stable class. +// For more information, check https://developer.android.com/jetpack/compose/performance/stability/fix#configuration-file + +// We always use immutable classes for our data model, to avoid running the Compose compiler +// in the module we declare it to be stable here. +com.google.samples.apps.nowinandroid.core.model.data.* + +// Java standard library classes +java.time.ZoneId +java.time.ZoneOffset diff --git a/core/analytics/README.md b/core/analytics/README.md new file mode 100644 index 000000000..d2bcd1ea7 --- /dev/null +++ b/core/analytics/README.md @@ -0,0 +1,3 @@ +# :core:analytics module +## Dependency graph +![Dependency graph](../../docs/images/graphs/dep_graph_core_analytics.svg) diff --git a/core/analytics/build.gradle.kts b/core/analytics/build.gradle.kts index 8c573b854..72f7620b0 100644 --- a/core/analytics/build.gradle.kts +++ b/core/analytics/build.gradle.kts @@ -14,9 +14,9 @@ * limitations under the License. */ plugins { - id("nowinandroid.android.library") - id("nowinandroid.android.library.compose") - id("nowinandroid.android.hilt") + alias(libs.plugins.nowinandroid.android.library) + alias(libs.plugins.nowinandroid.android.library.compose) + alias(libs.plugins.nowinandroid.hilt) } android { @@ -24,9 +24,8 @@ android { } dependencies { - implementation(platform(libs.firebase.bom)) implementation(libs.androidx.compose.runtime) - implementation(libs.androidx.core.ktx) - implementation(libs.firebase.analytics) - implementation(libs.kotlinx.coroutines.android) + + prodImplementation(platform(libs.firebase.bom)) + prodImplementation(libs.firebase.analytics) } diff --git a/core/analytics/src/demo/java/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt b/core/analytics/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt similarity index 95% rename from core/analytics/src/demo/java/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt rename to core/analytics/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt index 78ebec9e5..4ad6b6dc2 100644 --- a/core/analytics/src/demo/java/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt +++ b/core/analytics/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt @@ -23,7 +23,7 @@ import dagger.hilt.components.SingletonComponent @Module @InstallIn(SingletonComponent::class) -abstract class AnalyticsModule { +internal abstract class AnalyticsModule { @Binds abstract fun bindsAnalyticsHelper(analyticsHelperImpl: StubAnalyticsHelper): AnalyticsHelper } diff --git a/core/analytics/src/main/java/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsEvent.kt b/core/analytics/src/main/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsEvent.kt similarity index 100% rename from core/analytics/src/main/java/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsEvent.kt rename to core/analytics/src/main/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsEvent.kt diff --git a/core/analytics/src/main/java/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsHelper.kt b/core/analytics/src/main/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsHelper.kt similarity index 100% rename from core/analytics/src/main/java/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsHelper.kt rename to core/analytics/src/main/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsHelper.kt diff --git a/core/analytics/src/main/java/com/google/samples/apps/nowinandroid/core/analytics/NoOpAnalyticsHelper.kt b/core/analytics/src/main/kotlin/com/google/samples/apps/nowinandroid/core/analytics/NoOpAnalyticsHelper.kt similarity index 100% rename from core/analytics/src/main/java/com/google/samples/apps/nowinandroid/core/analytics/NoOpAnalyticsHelper.kt rename to core/analytics/src/main/kotlin/com/google/samples/apps/nowinandroid/core/analytics/NoOpAnalyticsHelper.kt diff --git a/core/analytics/src/main/java/com/google/samples/apps/nowinandroid/core/analytics/StubAnalyticsHelper.kt b/core/analytics/src/main/kotlin/com/google/samples/apps/nowinandroid/core/analytics/StubAnalyticsHelper.kt similarity index 93% rename from core/analytics/src/main/java/com/google/samples/apps/nowinandroid/core/analytics/StubAnalyticsHelper.kt rename to core/analytics/src/main/kotlin/com/google/samples/apps/nowinandroid/core/analytics/StubAnalyticsHelper.kt index 2ff022287..f570be4a9 100644 --- a/core/analytics/src/main/java/com/google/samples/apps/nowinandroid/core/analytics/StubAnalyticsHelper.kt +++ b/core/analytics/src/main/kotlin/com/google/samples/apps/nowinandroid/core/analytics/StubAnalyticsHelper.kt @@ -27,7 +27,7 @@ private const val TAG = "StubAnalyticsHelper" * analytics events should be sent to a backend. */ @Singleton -class StubAnalyticsHelper @Inject constructor() : AnalyticsHelper { +internal class StubAnalyticsHelper @Inject constructor() : AnalyticsHelper { override fun logEvent(event: AnalyticsEvent) { Log.d(TAG, "Received analytics event: $event") } diff --git a/core/analytics/src/main/java/com/google/samples/apps/nowinandroid/core/analytics/UiHelpers.kt b/core/analytics/src/main/kotlin/com/google/samples/apps/nowinandroid/core/analytics/UiHelpers.kt similarity index 100% rename from core/analytics/src/main/java/com/google/samples/apps/nowinandroid/core/analytics/UiHelpers.kt rename to core/analytics/src/main/kotlin/com/google/samples/apps/nowinandroid/core/analytics/UiHelpers.kt diff --git a/core/analytics/src/prod/java/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt b/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt similarity index 84% rename from core/analytics/src/prod/java/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt rename to core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt index 9f875ae6d..41b035875 100644 --- a/core/analytics/src/prod/java/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt +++ b/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/AnalyticsModule.kt @@ -16,9 +16,9 @@ package com.google.samples.apps.nowinandroid.core.analytics +import com.google.firebase.Firebase import com.google.firebase.analytics.FirebaseAnalytics -import com.google.firebase.analytics.ktx.analytics -import com.google.firebase.ktx.Firebase +import com.google.firebase.analytics.analytics import dagger.Binds import dagger.Module import dagger.Provides @@ -28,13 +28,13 @@ import javax.inject.Singleton @Module @InstallIn(SingletonComponent::class) -abstract class AnalyticsModule { +internal abstract class AnalyticsModule { @Binds abstract fun bindsAnalyticsHelper(analyticsHelperImpl: FirebaseAnalyticsHelper): AnalyticsHelper companion object { @Provides @Singleton - fun provideFirebaseAnalytics(): FirebaseAnalytics { return Firebase.analytics } + fun provideFirebaseAnalytics(): FirebaseAnalytics = Firebase.analytics } } diff --git a/core/analytics/src/prod/java/com/google/samples/apps/nowinandroid/core/analytics/FirebaseAnalyticsHelper.kt b/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/FirebaseAnalyticsHelper.kt similarity index 92% rename from core/analytics/src/prod/java/com/google/samples/apps/nowinandroid/core/analytics/FirebaseAnalyticsHelper.kt rename to core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/FirebaseAnalyticsHelper.kt index 75dfbc468..cedab6732 100644 --- a/core/analytics/src/prod/java/com/google/samples/apps/nowinandroid/core/analytics/FirebaseAnalyticsHelper.kt +++ b/core/analytics/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/analytics/FirebaseAnalyticsHelper.kt @@ -17,13 +17,13 @@ package com.google.samples.apps.nowinandroid.core.analytics import com.google.firebase.analytics.FirebaseAnalytics -import com.google.firebase.analytics.ktx.logEvent +import com.google.firebase.analytics.logEvent import javax.inject.Inject /** * Implementation of `AnalyticsHelper` which logs events to a Firebase backend. */ -class FirebaseAnalyticsHelper @Inject constructor( +internal class FirebaseAnalyticsHelper @Inject constructor( private val firebaseAnalytics: FirebaseAnalytics, ) : AnalyticsHelper { diff --git a/core/common/README.md b/core/common/README.md index ade22c076..96558bcc6 100644 --- a/core/common/README.md +++ b/core/common/README.md @@ -1,3 +1,3 @@ # :core:common module - -![Dependency graph](../../docs/images/graphs/dep_graph_core_common.png) +## Dependency graph +![Dependency graph](../../docs/images/graphs/dep_graph_core_common.svg) diff --git a/core/common/build.gradle.kts b/core/common/build.gradle.kts index 491dffd80..f1aa9771c 100644 --- a/core/common/build.gradle.kts +++ b/core/common/build.gradle.kts @@ -14,16 +14,12 @@ * limitations under the License. */ plugins { - id("nowinandroid.android.library") - id("nowinandroid.android.library.jacoco") - id("nowinandroid.android.hilt") -} - -android { - namespace = "com.google.samples.apps.nowinandroid.core.common" + alias(libs.plugins.nowinandroid.jvm.library) + alias(libs.plugins.nowinandroid.hilt) } dependencies { - implementation(libs.kotlinx.coroutines.android) - testImplementation(project(":core:testing")) + implementation(libs.kotlinx.coroutines.core) + testImplementation(libs.kotlinx.coroutines.test) + testImplementation(libs.turbine) } \ No newline at end of file diff --git a/core/common/src/main/java/com/google/samples/apps/nowinandroid/core/network/NiaDispatchers.kt b/core/common/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/NiaDispatchers.kt similarity index 100% rename from core/common/src/main/java/com/google/samples/apps/nowinandroid/core/network/NiaDispatchers.kt rename to core/common/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/NiaDispatchers.kt diff --git a/core/common/src/main/java/com/google/samples/apps/nowinandroid/core/network/di/CoroutineScopesModule.kt b/core/common/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/di/CoroutineScopesModule.kt similarity index 97% rename from core/common/src/main/java/com/google/samples/apps/nowinandroid/core/network/di/CoroutineScopesModule.kt rename to core/common/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/di/CoroutineScopesModule.kt index c265394a8..6e7ca6bb3 100644 --- a/core/common/src/main/java/com/google/samples/apps/nowinandroid/core/network/di/CoroutineScopesModule.kt +++ b/core/common/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/di/CoroutineScopesModule.kt @@ -34,7 +34,7 @@ annotation class ApplicationScope @Module @InstallIn(SingletonComponent::class) -object CoroutineScopesModule { +internal object CoroutineScopesModule { @Provides @Singleton @ApplicationScope diff --git a/core/common/src/main/java/com/google/samples/apps/nowinandroid/core/network/di/DispatchersModule.kt b/core/common/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/di/DispatchersModule.kt similarity index 100% rename from core/common/src/main/java/com/google/samples/apps/nowinandroid/core/network/di/DispatchersModule.kt rename to core/common/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/di/DispatchersModule.kt diff --git a/core/common/src/main/java/com/google/samples/apps/nowinandroid/core/result/Result.kt b/core/common/src/main/kotlin/com/google/samples/apps/nowinandroid/core/result/Result.kt similarity index 76% rename from core/common/src/main/java/com/google/samples/apps/nowinandroid/core/result/Result.kt rename to core/common/src/main/kotlin/com/google/samples/apps/nowinandroid/core/result/Result.kt index 6ae12d634..22376d082 100644 --- a/core/common/src/main/java/com/google/samples/apps/nowinandroid/core/result/Result.kt +++ b/core/common/src/main/kotlin/com/google/samples/apps/nowinandroid/core/result/Result.kt @@ -23,15 +23,10 @@ import kotlinx.coroutines.flow.onStart sealed interface Result { data class Success(val data: T) : Result - data class Error(val exception: Throwable? = null) : Result + data class Error(val exception: Throwable) : Result data object Loading : Result } -fun Flow.asResult(): Flow> { - return this - .map> { - Result.Success(it) - } - .onStart { emit(Result.Loading) } - .catch { emit(Result.Error(it)) } -} +fun Flow.asResult(): Flow> = map> { Result.Success(it) } + .onStart { emit(Result.Loading) } + .catch { emit(Result.Error(it)) } diff --git a/core/common/src/test/java/com/google/samples/apps/nowinandroid/core/result/ResultKtTest.kt b/core/common/src/test/kotlin/com/google/samples/apps/nowinandroid/core/result/ResultKtTest.kt similarity index 96% rename from core/common/src/test/java/com/google/samples/apps/nowinandroid/core/result/ResultKtTest.kt rename to core/common/src/test/kotlin/com/google/samples/apps/nowinandroid/core/result/ResultKtTest.kt index 4f1229e9d..2c3c7b763 100644 --- a/core/common/src/test/java/com/google/samples/apps/nowinandroid/core/result/ResultKtTest.kt +++ b/core/common/src/test/kotlin/com/google/samples/apps/nowinandroid/core/result/ResultKtTest.kt @@ -38,7 +38,7 @@ class ResultKtTest { when (val errorResult = awaitItem()) { is Result.Error -> assertEquals( "Test Done", - errorResult.exception?.message, + errorResult.exception.message, ) Result.Loading, is Result.Success, diff --git a/core/data-test/README.md b/core/data-test/README.md index 4f623e629..977ee10e4 100644 --- a/core/data-test/README.md +++ b/core/data-test/README.md @@ -1,3 +1,3 @@ # :core:data-test module - -![Dependency graph](../../docs/images/graphs/dep_graph_core_data_test.png) +## Dependency graph +![Dependency graph](../../docs/images/graphs/dep_graph_core_data_test.svg) diff --git a/core/data-test/build.gradle.kts b/core/data-test/build.gradle.kts index dfc224e19..420c34a57 100644 --- a/core/data-test/build.gradle.kts +++ b/core/data-test/build.gradle.kts @@ -14,8 +14,8 @@ * limitations under the License. */ plugins { - id("nowinandroid.android.library") - id("nowinandroid.android.hilt") + alias(libs.plugins.nowinandroid.android.library) + alias(libs.plugins.nowinandroid.hilt) } android { @@ -23,7 +23,7 @@ android { } dependencies { - api(project(":core:data")) - implementation(project(":core:testing")) - implementation(project(":core:common")) + api(projects.core.data) + + implementation(libs.hilt.android.testing) } diff --git a/core/data-test/src/main/java/com/google/samples/apps/nowinandroid/core/data/test/AlwaysOnlineNetworkMonitor.kt b/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/AlwaysOnlineNetworkMonitor.kt similarity index 100% rename from core/data-test/src/main/java/com/google/samples/apps/nowinandroid/core/data/test/AlwaysOnlineNetworkMonitor.kt rename to core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/AlwaysOnlineNetworkMonitor.kt diff --git a/core/domain/src/main/java/com/google/samples/apps/nowinandroid/core/domain/GetSearchContentsCountUseCase.kt b/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/DefaultZoneIdTimeZoneMonitor.kt similarity index 56% rename from core/domain/src/main/java/com/google/samples/apps/nowinandroid/core/domain/GetSearchContentsCountUseCase.kt rename to core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/DefaultZoneIdTimeZoneMonitor.kt index 3e3e1952e..5a21ae337 100644 --- a/core/domain/src/main/java/com/google/samples/apps/nowinandroid/core/domain/GetSearchContentsCountUseCase.kt +++ b/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/DefaultZoneIdTimeZoneMonitor.kt @@ -1,5 +1,5 @@ /* - * Copyright 2023 The Android Open Source Project + * Copyright 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,18 +14,14 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.core.domain +package com.google.samples.apps.nowinandroid.core.data.test -import com.google.samples.apps.nowinandroid.core.data.repository.SearchContentsRepository +import com.google.samples.apps.nowinandroid.core.data.util.TimeZoneMonitor import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flowOf +import kotlinx.datetime.TimeZone import javax.inject.Inject -/** - * A use case which returns total count of *Fts tables - */ -class GetSearchContentsCountUseCase @Inject constructor( - private val searchContentsRepository: SearchContentsRepository, -) { - operator fun invoke(): Flow = - searchContentsRepository.getSearchContentsCount() +class DefaultZoneIdTimeZoneMonitor @Inject constructor() : TimeZoneMonitor { + override val currentTimeZone: Flow = flowOf(TimeZone.of("Europe/Warsaw")) } diff --git a/core/data-test/src/main/java/com/google/samples/apps/nowinandroid/core/data/test/TestDataModule.kt b/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/TestDataModule.kt similarity index 77% rename from core/data-test/src/main/java/com/google/samples/apps/nowinandroid/core/data/test/TestDataModule.kt rename to core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/TestDataModule.kt index 2ec2bcf9c..46158479c 100644 --- a/core/data-test/src/main/java/com/google/samples/apps/nowinandroid/core/data/test/TestDataModule.kt +++ b/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/TestDataModule.kt @@ -22,12 +22,13 @@ import com.google.samples.apps.nowinandroid.core.data.repository.RecentSearchRep import com.google.samples.apps.nowinandroid.core.data.repository.SearchContentsRepository import com.google.samples.apps.nowinandroid.core.data.repository.TopicsRepository import com.google.samples.apps.nowinandroid.core.data.repository.UserDataRepository -import com.google.samples.apps.nowinandroid.core.data.repository.fake.FakeNewsRepository -import com.google.samples.apps.nowinandroid.core.data.repository.fake.FakeRecentSearchRepository -import com.google.samples.apps.nowinandroid.core.data.repository.fake.FakeSearchContentsRepository -import com.google.samples.apps.nowinandroid.core.data.repository.fake.FakeTopicsRepository -import com.google.samples.apps.nowinandroid.core.data.repository.fake.FakeUserDataRepository +import com.google.samples.apps.nowinandroid.core.data.test.repository.FakeNewsRepository +import com.google.samples.apps.nowinandroid.core.data.test.repository.FakeRecentSearchRepository +import com.google.samples.apps.nowinandroid.core.data.test.repository.FakeSearchContentsRepository +import com.google.samples.apps.nowinandroid.core.data.test.repository.FakeTopicsRepository +import com.google.samples.apps.nowinandroid.core.data.test.repository.FakeUserDataRepository import com.google.samples.apps.nowinandroid.core.data.util.NetworkMonitor +import com.google.samples.apps.nowinandroid.core.data.util.TimeZoneMonitor import dagger.Binds import dagger.Module import dagger.hilt.components.SingletonComponent @@ -38,7 +39,7 @@ import dagger.hilt.testing.TestInstallIn components = [SingletonComponent::class], replaces = [DataModule::class], ) -interface TestDataModule { +internal interface TestDataModule { @Binds fun bindsTopicRepository( fakeTopicsRepository: FakeTopicsRepository, @@ -68,4 +69,7 @@ interface TestDataModule { fun bindsNetworkMonitor( networkMonitor: AlwaysOnlineNetworkMonitor, ): NetworkMonitor + + @Binds + fun binds(impl: DefaultZoneIdTimeZoneMonitor): TimeZoneMonitor } diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeNewsRepository.kt b/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeNewsRepository.kt similarity index 78% rename from core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeNewsRepository.kt rename to core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeNewsRepository.kt index 39ad05d1e..da90eae61 100644 --- a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeNewsRepository.kt +++ b/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeNewsRepository.kt @@ -14,19 +14,16 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.core.data.repository.fake +package com.google.samples.apps.nowinandroid.core.data.test.repository import com.google.samples.apps.nowinandroid.core.data.Synchronizer -import com.google.samples.apps.nowinandroid.core.data.model.asEntity +import com.google.samples.apps.nowinandroid.core.data.model.asExternalModel import com.google.samples.apps.nowinandroid.core.data.repository.NewsRepository import com.google.samples.apps.nowinandroid.core.data.repository.NewsResourceQuery -import com.google.samples.apps.nowinandroid.core.database.model.NewsResourceEntity -import com.google.samples.apps.nowinandroid.core.database.model.asExternalModel import com.google.samples.apps.nowinandroid.core.model.data.NewsResource import com.google.samples.apps.nowinandroid.core.network.Dispatcher import com.google.samples.apps.nowinandroid.core.network.NiaDispatchers.IO -import com.google.samples.apps.nowinandroid.core.network.fake.FakeNiaNetworkDataSource -import com.google.samples.apps.nowinandroid.core.network.model.NetworkNewsResource +import com.google.samples.apps.nowinandroid.core.network.demo.DemoNiaNetworkDataSource import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow @@ -41,16 +38,18 @@ import javax.inject.Inject */ class FakeNewsRepository @Inject constructor( @Dispatcher(IO) private val ioDispatcher: CoroutineDispatcher, - private val datasource: FakeNiaNetworkDataSource, + private val datasource: DemoNiaNetworkDataSource, ) : NewsRepository { override fun getNewsResources( query: NewsResourceQuery, ): Flow> = flow { + val newsResources = datasource.getNewsResources() + val topics = datasource.getTopics() + emit( - datasource - .getNewsResources() + newsResources .filter { networkNewsResource -> // Filter out any news resources which don't match the current query. // If no query parameters (filterTopicIds or filterNewsIds) are specified @@ -64,8 +63,7 @@ class FakeNewsRepository @Inject constructor( ) .all(true::equals) } - .map(NetworkNewsResource::asEntity) - .map(NewsResourceEntity::asExternalModel), + .map { it.asExternalModel(topics) }, ) }.flowOn(ioDispatcher) diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeRecentSearchRepository.kt b/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeRecentSearchRepository.kt similarity index 82% rename from core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeRecentSearchRepository.kt rename to core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeRecentSearchRepository.kt index fc649f3ec..b8d949efe 100644 --- a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeRecentSearchRepository.kt +++ b/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeRecentSearchRepository.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.core.data.repository.fake +package com.google.samples.apps.nowinandroid.core.data.test.repository import com.google.samples.apps.nowinandroid.core.data.model.RecentSearchQuery import com.google.samples.apps.nowinandroid.core.data.repository.RecentSearchRepository @@ -25,11 +25,11 @@ import javax.inject.Inject /** * Fake implementation of the [RecentSearchRepository] */ -class FakeRecentSearchRepository @Inject constructor() : RecentSearchRepository { - override suspend fun insertOrReplaceRecentSearch(searchQuery: String) { /* no-op */ } +internal class FakeRecentSearchRepository @Inject constructor() : RecentSearchRepository { + override suspend fun insertOrReplaceRecentSearch(searchQuery: String) = Unit override fun getRecentSearchQueries(limit: Int): Flow> = flowOf(emptyList()) - override suspend fun clearRecentSearches() { /* no-op */ } + override suspend fun clearRecentSearches() = Unit } diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeSearchContentsRepository.kt b/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeSearchContentsRepository.kt similarity index 83% rename from core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeSearchContentsRepository.kt rename to core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeSearchContentsRepository.kt index d15890a10..1feeb6dcc 100644 --- a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeSearchContentsRepository.kt +++ b/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeSearchContentsRepository.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.core.data.repository.fake +package com.google.samples.apps.nowinandroid.core.data.test.repository import com.google.samples.apps.nowinandroid.core.data.repository.SearchContentsRepository import com.google.samples.apps.nowinandroid.core.model.data.SearchResult @@ -25,9 +25,9 @@ import javax.inject.Inject /** * Fake implementation of the [SearchContentsRepository] */ -class FakeSearchContentsRepository @Inject constructor() : SearchContentsRepository { +internal class FakeSearchContentsRepository @Inject constructor() : SearchContentsRepository { - override suspend fun populateFtsData() { /* no-op */ } + override suspend fun populateFtsData() = Unit override fun searchContents(searchQuery: String): Flow = flowOf() override fun getSearchContentsCount(): Flow = flowOf(1) } diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeTopicsRepository.kt b/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeTopicsRepository.kt similarity index 84% rename from core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeTopicsRepository.kt rename to core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeTopicsRepository.kt index 1ab9c9353..0b81dd309 100644 --- a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeTopicsRepository.kt +++ b/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeTopicsRepository.kt @@ -14,14 +14,14 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.core.data.repository.fake +package com.google.samples.apps.nowinandroid.core.data.test.repository import com.google.samples.apps.nowinandroid.core.data.Synchronizer import com.google.samples.apps.nowinandroid.core.data.repository.TopicsRepository import com.google.samples.apps.nowinandroid.core.model.data.Topic import com.google.samples.apps.nowinandroid.core.network.Dispatcher import com.google.samples.apps.nowinandroid.core.network.NiaDispatchers.IO -import com.google.samples.apps.nowinandroid.core.network.fake.FakeNiaNetworkDataSource +import com.google.samples.apps.nowinandroid.core.network.demo.DemoNiaNetworkDataSource import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flow @@ -36,9 +36,9 @@ import javax.inject.Inject * This allows us to run the app with fake data, without needing an internet connection or working * backend. */ -class FakeTopicsRepository @Inject constructor( +internal class FakeTopicsRepository @Inject constructor( @Dispatcher(IO) private val ioDispatcher: CoroutineDispatcher, - private val datasource: FakeNiaNetworkDataSource, + private val datasource: DemoNiaNetworkDataSource, ) : TopicsRepository { override fun getTopics(): Flow> = flow { emit( @@ -55,9 +55,8 @@ class FakeTopicsRepository @Inject constructor( ) }.flowOn(ioDispatcher) - override fun getTopic(id: String): Flow { - return getTopics().map { it.first { topic -> topic.id == id } } - } + override fun getTopic(id: String): Flow = getTopics() + .map { it.first { topic -> topic.id == id } } override suspend fun syncWith(synchronizer: Synchronizer) = true } diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeUserDataRepository.kt b/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeUserDataRepository.kt similarity index 84% rename from core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeUserDataRepository.kt rename to core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeUserDataRepository.kt index 74813389e..61ab422af 100644 --- a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/fake/FakeUserDataRepository.kt +++ b/core/data-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/test/repository/FakeUserDataRepository.kt @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.core.data.repository.fake +package com.google.samples.apps.nowinandroid.core.data.test.repository import com.google.samples.apps.nowinandroid.core.data.repository.UserDataRepository import com.google.samples.apps.nowinandroid.core.datastore.NiaPreferencesDataSource @@ -40,11 +40,11 @@ class FakeUserDataRepository @Inject constructor( override suspend fun setFollowedTopicIds(followedTopicIds: Set) = niaPreferencesDataSource.setFollowedTopicIds(followedTopicIds) - override suspend fun toggleFollowedTopicId(followedTopicId: String, followed: Boolean) = - niaPreferencesDataSource.toggleFollowedTopicId(followedTopicId, followed) + override suspend fun setTopicIdFollowed(followedTopicId: String, followed: Boolean) = + niaPreferencesDataSource.setTopicIdFollowed(followedTopicId, followed) - override suspend fun updateNewsResourceBookmark(newsResourceId: String, bookmarked: Boolean) { - niaPreferencesDataSource.toggleNewsResourceBookmark(newsResourceId, bookmarked) + override suspend fun setNewsResourceBookmarked(newsResourceId: String, bookmarked: Boolean) { + niaPreferencesDataSource.setNewsResourceBookmarked(newsResourceId, bookmarked) } override suspend fun setNewsResourceViewed(newsResourceId: String, viewed: Boolean) = diff --git a/core/data/README.md b/core/data/README.md index 905d74615..5d30f1638 100644 --- a/core/data/README.md +++ b/core/data/README.md @@ -1,3 +1,3 @@ # :core:data module - -![Dependency graph](../../docs/images/graphs/dep_graph_core_data.png) +## Dependency graph +![Dependency graph](../../docs/images/graphs/dep_graph_core_data.svg) diff --git a/core/data/build.gradle.kts b/core/data/build.gradle.kts index 51dfb5393..83c268aab 100644 --- a/core/data/build.gradle.kts +++ b/core/data/build.gradle.kts @@ -14,9 +14,9 @@ * limitations under the License. */ plugins { - id("nowinandroid.android.library") - id("nowinandroid.android.library.jacoco") - id("nowinandroid.android.hilt") + alias(libs.plugins.nowinandroid.android.library) + alias(libs.plugins.nowinandroid.android.library.jacoco) + alias(libs.plugins.nowinandroid.hilt) id("kotlinx-serialization") } @@ -31,18 +31,16 @@ android { } dependencies { - implementation(project(":core:analytics")) - implementation(project(":core:common")) - implementation(project(":core:database")) - implementation(project(":core:datastore")) - implementation(project(":core:model")) - implementation(project(":core:network")) - implementation(project(":core:notifications")) - implementation(libs.androidx.core.ktx) - implementation(libs.kotlinx.coroutines.android) - implementation(libs.kotlinx.datetime) - implementation(libs.kotlinx.serialization.json) + api(projects.core.common) + api(projects.core.database) + api(projects.core.datastore) + api(projects.core.network) - testImplementation(project(":core:datastore-test")) - testImplementation(project(":core:testing")) + implementation(projects.core.analytics) + implementation(projects.core.notifications) + + testImplementation(libs.kotlinx.coroutines.test) + testImplementation(libs.kotlinx.serialization.json) + testImplementation(projects.core.datastoreTest) + testImplementation(projects.core.testing) } diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor.kt b/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor.kt deleted file mode 100644 index c88125be8..000000000 --- a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor.kt +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright 2022 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.samples.apps.nowinandroid.core.data.util - -import android.content.Context -import android.net.ConnectivityManager -import android.net.ConnectivityManager.NetworkCallback -import android.net.Network -import android.net.NetworkCapabilities -import android.net.NetworkRequest -import android.net.NetworkRequest.Builder -import android.os.Build.VERSION -import android.os.Build.VERSION_CODES -import androidx.core.content.getSystemService -import dagger.hilt.android.qualifiers.ApplicationContext -import kotlinx.coroutines.channels.awaitClose -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.callbackFlow -import kotlinx.coroutines.flow.conflate -import javax.inject.Inject - -class ConnectivityManagerNetworkMonitor @Inject constructor( - @ApplicationContext private val context: Context, -) : NetworkMonitor { - override val isOnline: Flow = callbackFlow { - val connectivityManager = context.getSystemService() - if (connectivityManager == null) { - channel.trySend(false) - channel.close() - return@callbackFlow - } - - /** - * The callback's methods are invoked on changes to *any* network matching the [NetworkRequest], - * not just the active network. So we can simply track the presence (or absence) of such [Network]. - */ - val callback = object : NetworkCallback() { - - private val networks = mutableSetOf() - - override fun onAvailable(network: Network) { - networks += network - channel.trySend(true) - } - - override fun onLost(network: Network) { - networks -= network - channel.trySend(networks.isNotEmpty()) - } - } - - val request = Builder() - .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) - .build() - connectivityManager.registerNetworkCallback(request, callback) - - /** - * Sends the latest connectivity status to the underlying channel. - */ - channel.trySend(connectivityManager.isCurrentlyConnected()) - - awaitClose { - connectivityManager.unregisterNetworkCallback(callback) - } - } - .conflate() - - @Suppress("DEPRECATION") - private fun ConnectivityManager.isCurrentlyConnected() = when { - VERSION.SDK_INT >= VERSION_CODES.M -> - activeNetwork - ?.let(::getNetworkCapabilities) - ?.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) - - else -> activeNetworkInfo?.isConnected - } ?: false -} diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/SyncUtilities.kt b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/SyncUtilities.kt similarity index 85% rename from core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/SyncUtilities.kt rename to core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/SyncUtilities.kt index 5d069dbaf..878c8ee2f 100644 --- a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/SyncUtilities.kt +++ b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/SyncUtilities.kt @@ -19,8 +19,6 @@ package com.google.samples.apps.nowinandroid.core.data import android.util.Log import com.google.samples.apps.nowinandroid.core.datastore.ChangeListVersions import com.google.samples.apps.nowinandroid.core.network.model.NetworkChangeList -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.combine import kotlin.coroutines.cancellation.CancellationException /** @@ -104,29 +102,3 @@ suspend fun Synchronizer.changeListSync( versionUpdater(latestVersion) } }.isSuccess - -/** - * Returns a [Flow] whose values are generated by [transform] function that process the most - * recently emitted values by each flow. - */ -fun combine( - flow: Flow, - flow2: Flow, - flow3: Flow, - flow4: Flow, - flow5: Flow, - flow6: Flow, - transform: suspend (T1, T2, T3, T4, T5, T6) -> R, -): Flow = combine( - combine(flow, flow2, flow3, ::Triple), - combine(flow4, flow5, flow6, ::Triple), -) { t1, t2 -> - transform( - t1.first, - t1.second, - t1.third, - t2.first, - t2.second, - t2.third, - ) -} diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/di/DataModule.kt b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/di/DataModule.kt similarity index 80% rename from core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/di/DataModule.kt rename to core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/di/DataModule.kt index 26f0bbc51..fa4bde8b8 100644 --- a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/di/DataModule.kt +++ b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/di/DataModule.kt @@ -28,6 +28,8 @@ import com.google.samples.apps.nowinandroid.core.data.repository.TopicsRepositor import com.google.samples.apps.nowinandroid.core.data.repository.UserDataRepository import com.google.samples.apps.nowinandroid.core.data.util.ConnectivityManagerNetworkMonitor import com.google.samples.apps.nowinandroid.core.data.util.NetworkMonitor +import com.google.samples.apps.nowinandroid.core.data.util.TimeZoneBroadcastMonitor +import com.google.samples.apps.nowinandroid.core.data.util.TimeZoneMonitor import dagger.Binds import dagger.Module import dagger.hilt.InstallIn @@ -35,35 +37,38 @@ import dagger.hilt.components.SingletonComponent @Module @InstallIn(SingletonComponent::class) -interface DataModule { +abstract class DataModule { @Binds - fun bindsTopicRepository( + internal abstract fun bindsTopicRepository( topicsRepository: OfflineFirstTopicsRepository, ): TopicsRepository @Binds - fun bindsNewsResourceRepository( + internal abstract fun bindsNewsResourceRepository( newsRepository: OfflineFirstNewsRepository, ): NewsRepository @Binds - fun bindsUserDataRepository( + internal abstract fun bindsUserDataRepository( userDataRepository: OfflineFirstUserDataRepository, ): UserDataRepository @Binds - fun bindsRecentSearchRepository( + internal abstract fun bindsRecentSearchRepository( recentSearchRepository: DefaultRecentSearchRepository, ): RecentSearchRepository @Binds - fun bindsSearchContentsRepository( + internal abstract fun bindsSearchContentsRepository( searchContentsRepository: DefaultSearchContentsRepository, ): SearchContentsRepository @Binds - fun bindsNetworkMonitor( + internal abstract fun bindsNetworkMonitor( networkMonitor: ConnectivityManagerNetworkMonitor, ): NetworkMonitor + + @Binds + internal abstract fun binds(impl: TimeZoneBroadcastMonitor): TimeZoneMonitor } diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/di/UserNewsResourceRepositoryModule.kt b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/di/UserNewsResourceRepositoryModule.kt similarity index 95% rename from core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/di/UserNewsResourceRepositoryModule.kt rename to core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/di/UserNewsResourceRepositoryModule.kt index 1a7a80fff..7f4e27b41 100644 --- a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/di/UserNewsResourceRepositoryModule.kt +++ b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/di/UserNewsResourceRepositoryModule.kt @@ -25,7 +25,7 @@ import dagger.hilt.components.SingletonComponent @Module @InstallIn(SingletonComponent::class) -interface UserNewsResourceRepositoryModule { +internal interface UserNewsResourceRepositoryModule { @Binds fun bindsUserNewsResourceRepository( userDataRepository: CompositeUserNewsResourceRepository, diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/model/NewsResource.kt b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/model/NewsResource.kt similarity index 76% rename from core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/model/NewsResource.kt rename to core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/model/NewsResource.kt index c3ad91dfe..01d0905f0 100644 --- a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/model/NewsResource.kt +++ b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/model/NewsResource.kt @@ -19,8 +19,10 @@ package com.google.samples.apps.nowinandroid.core.data.model import com.google.samples.apps.nowinandroid.core.database.model.NewsResourceEntity import com.google.samples.apps.nowinandroid.core.database.model.NewsResourceTopicCrossRef import com.google.samples.apps.nowinandroid.core.database.model.TopicEntity +import com.google.samples.apps.nowinandroid.core.model.data.NewsResource import com.google.samples.apps.nowinandroid.core.network.model.NetworkNewsResource -import com.google.samples.apps.nowinandroid.core.network.model.NetworkNewsResourceExpanded +import com.google.samples.apps.nowinandroid.core.network.model.NetworkTopic +import com.google.samples.apps.nowinandroid.core.network.model.asExternalModel fun NetworkNewsResource.asEntity() = NewsResourceEntity( id = id, @@ -32,16 +34,6 @@ fun NetworkNewsResource.asEntity() = NewsResourceEntity( type = type, ) -fun NetworkNewsResourceExpanded.asEntity() = NewsResourceEntity( - id = id, - title = title, - content = content, - url = url, - headerImageUrl = headerImageUrl, - publishDate = publishDate, - type = type, -) - /** * A shell [TopicEntity] to fulfill the foreign key constraint when inserting * a [NewsResourceEntity] into the DB @@ -65,3 +57,17 @@ fun NetworkNewsResource.topicCrossReferences(): List topicId = topicId, ) } + +fun NetworkNewsResource.asExternalModel(topics: List) = + NewsResource( + id = id, + title = title, + content = content, + url = url, + headerImageUrl = headerImageUrl, + publishDate = publishDate, + type = type, + topics = topics + .filter { networkTopic -> this.topics.contains(networkTopic.id) } + .map(NetworkTopic::asExternalModel), + ) diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/model/RecentSearchQuery.kt b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/model/RecentSearchQuery.kt similarity index 100% rename from core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/model/RecentSearchQuery.kt rename to core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/model/RecentSearchQuery.kt diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/model/Topic.kt b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/model/Topic.kt similarity index 100% rename from core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/model/Topic.kt rename to core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/model/Topic.kt diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/AnalyticsExtensions.kt b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/AnalyticsExtensions.kt similarity index 82% rename from core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/AnalyticsExtensions.kt rename to core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/AnalyticsExtensions.kt index d36f509d9..3d2f657dd 100644 --- a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/AnalyticsExtensions.kt +++ b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/AnalyticsExtensions.kt @@ -20,7 +20,7 @@ import com.google.samples.apps.nowinandroid.core.analytics.AnalyticsEvent import com.google.samples.apps.nowinandroid.core.analytics.AnalyticsEvent.Param import com.google.samples.apps.nowinandroid.core.analytics.AnalyticsHelper -fun AnalyticsHelper.logNewsResourceBookmarkToggled(newsResourceId: String, isBookmarked: Boolean) { +internal fun AnalyticsHelper.logNewsResourceBookmarkToggled(newsResourceId: String, isBookmarked: Boolean) { val eventType = if (isBookmarked) "news_resource_saved" else "news_resource_unsaved" val paramKey = if (isBookmarked) "saved_news_resource_id" else "unsaved_news_resource_id" logEvent( @@ -33,7 +33,7 @@ fun AnalyticsHelper.logNewsResourceBookmarkToggled(newsResourceId: String, isBoo ) } -fun AnalyticsHelper.logTopicFollowToggled(followedTopicId: String, isFollowed: Boolean) { +internal fun AnalyticsHelper.logTopicFollowToggled(followedTopicId: String, isFollowed: Boolean) { val eventType = if (isFollowed) "topic_followed" else "topic_unfollowed" val paramKey = if (isFollowed) "followed_topic_id" else "unfollowed_topic_id" logEvent( @@ -46,7 +46,7 @@ fun AnalyticsHelper.logTopicFollowToggled(followedTopicId: String, isFollowed: B ) } -fun AnalyticsHelper.logThemeChanged(themeName: String) = +internal fun AnalyticsHelper.logThemeChanged(themeName: String) = logEvent( AnalyticsEvent( type = "theme_changed", @@ -56,7 +56,7 @@ fun AnalyticsHelper.logThemeChanged(themeName: String) = ), ) -fun AnalyticsHelper.logDarkThemeConfigChanged(darkThemeConfigName: String) = +internal fun AnalyticsHelper.logDarkThemeConfigChanged(darkThemeConfigName: String) = logEvent( AnalyticsEvent( type = "dark_theme_config_changed", @@ -66,7 +66,7 @@ fun AnalyticsHelper.logDarkThemeConfigChanged(darkThemeConfigName: String) = ), ) -fun AnalyticsHelper.logDynamicColorPreferenceChanged(useDynamicColor: Boolean) = +internal fun AnalyticsHelper.logDynamicColorPreferenceChanged(useDynamicColor: Boolean) = logEvent( AnalyticsEvent( type = "dynamic_color_preference_changed", @@ -76,7 +76,7 @@ fun AnalyticsHelper.logDynamicColorPreferenceChanged(useDynamicColor: Boolean) = ), ) -fun AnalyticsHelper.logOnboardingStateChanged(shouldHideOnboarding: Boolean) { +internal fun AnalyticsHelper.logOnboardingStateChanged(shouldHideOnboarding: Boolean) { val eventType = if (shouldHideOnboarding) "onboarding_complete" else "onboarding_reset" logEvent( AnalyticsEvent(type = eventType), diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/CompositeUserNewsResourceRepository.kt b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/CompositeUserNewsResourceRepository.kt similarity index 100% rename from core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/CompositeUserNewsResourceRepository.kt rename to core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/CompositeUserNewsResourceRepository.kt diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/DefaultRecentSearchRepository.kt b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/DefaultRecentSearchRepository.kt similarity index 68% rename from core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/DefaultRecentSearchRepository.kt rename to core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/DefaultRecentSearchRepository.kt index 983c6af3e..32239362d 100644 --- a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/DefaultRecentSearchRepository.kt +++ b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/DefaultRecentSearchRepository.kt @@ -20,35 +20,26 @@ import com.google.samples.apps.nowinandroid.core.data.model.RecentSearchQuery import com.google.samples.apps.nowinandroid.core.data.model.asExternalModel import com.google.samples.apps.nowinandroid.core.database.dao.RecentSearchQueryDao import com.google.samples.apps.nowinandroid.core.database.model.RecentSearchQueryEntity -import com.google.samples.apps.nowinandroid.core.network.Dispatcher -import com.google.samples.apps.nowinandroid.core.network.NiaDispatchers.IO -import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map -import kotlinx.coroutines.withContext import kotlinx.datetime.Clock import javax.inject.Inject -class DefaultRecentSearchRepository @Inject constructor( +internal class DefaultRecentSearchRepository @Inject constructor( private val recentSearchQueryDao: RecentSearchQueryDao, - @Dispatcher(IO) private val ioDispatcher: CoroutineDispatcher, ) : RecentSearchRepository { override suspend fun insertOrReplaceRecentSearch(searchQuery: String) { - withContext(ioDispatcher) { - recentSearchQueryDao.insertOrReplaceRecentSearchQuery( - RecentSearchQueryEntity( - query = searchQuery, - queriedDate = Clock.System.now(), - ), - ) - } + recentSearchQueryDao.insertOrReplaceRecentSearchQuery( + RecentSearchQueryEntity( + query = searchQuery, + queriedDate = Clock.System.now(), + ), + ) } override fun getRecentSearchQueries(limit: Int): Flow> = recentSearchQueryDao.getRecentSearchQueryEntities(limit).map { searchQueries -> - searchQueries.map { - it.asExternalModel() - } + searchQueries.map { it.asExternalModel() } } override suspend fun clearRecentSearches() = recentSearchQueryDao.clearRecentSearchQueries() diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/DefaultSearchContentsRepository.kt b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/DefaultSearchContentsRepository.kt similarity index 98% rename from core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/DefaultSearchContentsRepository.kt rename to core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/DefaultSearchContentsRepository.kt index dc3caa143..3bacb8a14 100644 --- a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/DefaultSearchContentsRepository.kt +++ b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/DefaultSearchContentsRepository.kt @@ -36,7 +36,7 @@ import kotlinx.coroutines.flow.mapLatest import kotlinx.coroutines.withContext import javax.inject.Inject -class DefaultSearchContentsRepository @Inject constructor( +internal class DefaultSearchContentsRepository @Inject constructor( private val newsResourceDao: NewsResourceDao, private val newsResourceFtsDao: NewsResourceFtsDao, private val topicDao: TopicDao, diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/NewsRepository.kt b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/NewsRepository.kt similarity index 100% rename from core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/NewsRepository.kt rename to core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/NewsRepository.kt diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository.kt b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository.kt similarity index 99% rename from core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository.kt rename to core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository.kt index ce395ad1c..d33c904e5 100644 --- a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository.kt +++ b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepository.kt @@ -45,7 +45,7 @@ private const val SYNC_BATCH_SIZE = 40 * Disk storage backed implementation of the [NewsRepository]. * Reads are exclusively from local storage to support offline access. */ -class OfflineFirstNewsRepository @Inject constructor( +internal class OfflineFirstNewsRepository @Inject constructor( private val niaPreferencesDataSource: NiaPreferencesDataSource, private val newsResourceDao: NewsResourceDao, private val topicDao: TopicDao, diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository.kt b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository.kt similarity index 97% rename from core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository.kt rename to core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository.kt index 13dd19e49..5c8cecce8 100644 --- a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository.kt +++ b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepository.kt @@ -34,7 +34,7 @@ import javax.inject.Inject * Disk storage backed implementation of the [TopicsRepository]. * Reads are exclusively from local storage to support offline access. */ -class OfflineFirstTopicsRepository @Inject constructor( +internal class OfflineFirstTopicsRepository @Inject constructor( private val topicDao: TopicDao, private val network: NiaNetworkDataSource, ) : TopicsRepository { diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository.kt b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository.kt similarity index 87% rename from core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository.kt rename to core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository.kt index 2559362ba..089b7087d 100644 --- a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository.kt +++ b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepository.kt @@ -25,7 +25,7 @@ import com.google.samples.apps.nowinandroid.core.model.data.UserData import kotlinx.coroutines.flow.Flow import javax.inject.Inject -class OfflineFirstUserDataRepository @Inject constructor( +internal class OfflineFirstUserDataRepository @Inject constructor( private val niaPreferencesDataSource: NiaPreferencesDataSource, private val analyticsHelper: AnalyticsHelper, ) : UserDataRepository { @@ -37,13 +37,13 @@ class OfflineFirstUserDataRepository @Inject constructor( override suspend fun setFollowedTopicIds(followedTopicIds: Set) = niaPreferencesDataSource.setFollowedTopicIds(followedTopicIds) - override suspend fun toggleFollowedTopicId(followedTopicId: String, followed: Boolean) { - niaPreferencesDataSource.toggleFollowedTopicId(followedTopicId, followed) + override suspend fun setTopicIdFollowed(followedTopicId: String, followed: Boolean) { + niaPreferencesDataSource.setTopicIdFollowed(followedTopicId, followed) analyticsHelper.logTopicFollowToggled(followedTopicId, followed) } - override suspend fun updateNewsResourceBookmark(newsResourceId: String, bookmarked: Boolean) { - niaPreferencesDataSource.toggleNewsResourceBookmark(newsResourceId, bookmarked) + override suspend fun setNewsResourceBookmarked(newsResourceId: String, bookmarked: Boolean) { + niaPreferencesDataSource.setNewsResourceBookmarked(newsResourceId, bookmarked) analyticsHelper.logNewsResourceBookmarkToggled( newsResourceId = newsResourceId, isBookmarked = bookmarked, diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/RecentSearchRepository.kt b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/RecentSearchRepository.kt similarity index 100% rename from core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/RecentSearchRepository.kt rename to core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/RecentSearchRepository.kt diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/SearchContentsRepository.kt b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/SearchContentsRepository.kt similarity index 100% rename from core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/SearchContentsRepository.kt rename to core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/SearchContentsRepository.kt diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/TopicsRepository.kt b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/TopicsRepository.kt similarity index 100% rename from core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/TopicsRepository.kt rename to core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/TopicsRepository.kt diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/UserDataRepository.kt b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/UserDataRepository.kt similarity index 89% rename from core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/UserDataRepository.kt rename to core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/UserDataRepository.kt index 5e0e7ebfc..c5202b02b 100644 --- a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/UserDataRepository.kt +++ b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/UserDataRepository.kt @@ -34,14 +34,14 @@ interface UserDataRepository { suspend fun setFollowedTopicIds(followedTopicIds: Set) /** - * Toggles the user's newly followed/unfollowed topic + * Sets the user's newly followed/unfollowed topic */ - suspend fun toggleFollowedTopicId(followedTopicId: String, followed: Boolean) + suspend fun setTopicIdFollowed(followedTopicId: String, followed: Boolean) /** * Updates the bookmarked status for a news resource */ - suspend fun updateNewsResourceBookmark(newsResourceId: String, bookmarked: Boolean) + suspend fun setNewsResourceBookmarked(newsResourceId: String, bookmarked: Boolean) /** * Updates the viewed status for a news resource diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/UserNewsResourceRepository.kt b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/UserNewsResourceRepository.kt similarity index 100% rename from core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/repository/UserNewsResourceRepository.kt rename to core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/UserNewsResourceRepository.kt diff --git a/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor.kt b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor.kt new file mode 100644 index 000000000..b2a642cf9 --- /dev/null +++ b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/util/ConnectivityManagerNetworkMonitor.kt @@ -0,0 +1,102 @@ +/* + * Copyright 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.core.data.util + +import android.content.Context +import android.net.ConnectivityManager +import android.net.ConnectivityManager.NetworkCallback +import android.net.Network +import android.net.NetworkCapabilities +import android.net.NetworkRequest +import android.net.NetworkRequest.Builder +import android.os.Build.VERSION +import android.os.Build.VERSION_CODES +import androidx.core.content.getSystemService +import androidx.tracing.trace +import com.google.samples.apps.nowinandroid.core.network.Dispatcher +import com.google.samples.apps.nowinandroid.core.network.NiaDispatchers.IO +import dagger.hilt.android.qualifiers.ApplicationContext +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.channels.awaitClose +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.callbackFlow +import kotlinx.coroutines.flow.conflate +import kotlinx.coroutines.flow.flowOn +import javax.inject.Inject + +internal class ConnectivityManagerNetworkMonitor @Inject constructor( + @ApplicationContext private val context: Context, + @Dispatcher(IO) private val ioDispatcher: CoroutineDispatcher, +) : NetworkMonitor { + override val isOnline: Flow = callbackFlow { + trace("NetworkMonitor.callbackFlow") { + val connectivityManager = context.getSystemService() + if (connectivityManager == null) { + channel.trySend(false) + channel.close() + return@callbackFlow + } + + /** + * The callback's methods are invoked on changes to *any* network matching the [NetworkRequest], + * not just the active network. So we can simply track the presence (or absence) of such [Network]. + */ + val callback = object : NetworkCallback() { + + private val networks = mutableSetOf() + + override fun onAvailable(network: Network) { + networks += network + channel.trySend(true) + } + + override fun onLost(network: Network) { + networks -= network + channel.trySend(networks.isNotEmpty()) + } + } + + trace("NetworkMonitor.registerNetworkCallback") { + val request = Builder() + .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) + .build() + connectivityManager.registerNetworkCallback(request, callback) + } + + /** + * Sends the latest connectivity status to the underlying channel. + */ + channel.trySend(connectivityManager.isCurrentlyConnected()) + + awaitClose { + connectivityManager.unregisterNetworkCallback(callback) + } + } + } + .flowOn(ioDispatcher) + .conflate() + + @Suppress("DEPRECATION") + private fun ConnectivityManager.isCurrentlyConnected() = when { + VERSION.SDK_INT >= VERSION_CODES.M -> + activeNetwork + ?.let(::getNetworkCapabilities) + ?.hasCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET) + + else -> activeNetworkInfo?.isConnected + } ?: false +} diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/util/NetworkMonitor.kt b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/util/NetworkMonitor.kt similarity index 100% rename from core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/util/NetworkMonitor.kt rename to core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/util/NetworkMonitor.kt diff --git a/core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/util/SyncManager.kt b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/util/SyncManager.kt similarity index 100% rename from core/data/src/main/java/com/google/samples/apps/nowinandroid/core/data/util/SyncManager.kt rename to core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/util/SyncManager.kt diff --git a/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/util/TimeZoneMonitor.kt b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/util/TimeZoneMonitor.kt new file mode 100644 index 000000000..031bc9388 --- /dev/null +++ b/core/data/src/main/kotlin/com/google/samples/apps/nowinandroid/core/data/util/TimeZoneMonitor.kt @@ -0,0 +1,107 @@ +/* + * Copyright 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.core.data.util + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.os.Build.VERSION +import android.os.Build.VERSION_CODES +import androidx.tracing.trace +import com.google.samples.apps.nowinandroid.core.network.Dispatcher +import com.google.samples.apps.nowinandroid.core.network.NiaDispatchers.IO +import com.google.samples.apps.nowinandroid.core.network.di.ApplicationScope +import dagger.hilt.android.qualifiers.ApplicationContext +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.channels.awaitClose +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.SharedFlow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.callbackFlow +import kotlinx.coroutines.flow.conflate +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.flow.shareIn +import kotlinx.datetime.TimeZone +import kotlinx.datetime.toKotlinTimeZone +import java.time.ZoneId +import javax.inject.Inject +import javax.inject.Singleton + +/** + * Utility for reporting current timezone the device has set. + * It always emits at least once with default setting and then for each TZ change. + */ +interface TimeZoneMonitor { + val currentTimeZone: Flow +} + +@Singleton +internal class TimeZoneBroadcastMonitor @Inject constructor( + @ApplicationContext private val context: Context, + @ApplicationScope appScope: CoroutineScope, + @Dispatcher(IO) private val ioDispatcher: CoroutineDispatcher, +) : TimeZoneMonitor { + + override val currentTimeZone: SharedFlow = + callbackFlow { + // Send the default time zone first. + trySend(TimeZone.currentSystemDefault()) + + // Registers BroadcastReceiver for the TimeZone changes + val receiver = object : BroadcastReceiver() { + override fun onReceive(context: Context, intent: Intent) { + if (intent.action != Intent.ACTION_TIMEZONE_CHANGED) return + + val zoneIdFromIntent = if (VERSION.SDK_INT < VERSION_CODES.R) { + null + } else { + // Starting Android R we also get the new TimeZone. + intent.getStringExtra(Intent.EXTRA_TIMEZONE)?.let { timeZoneId -> + // We need to convert it from java.util.Timezone to java.time.ZoneId + val zoneId = ZoneId.of(timeZoneId, ZoneId.SHORT_IDS) + // Convert to kotlinx.datetime.TimeZone + zoneId.toKotlinTimeZone() + } + } + + // If there isn't a zoneId in the intent, fallback to the systemDefault, which should also reflect the change + trySend(zoneIdFromIntent ?: TimeZone.currentSystemDefault()) + } + } + + trace("TimeZoneBroadcastReceiver.register") { + context.registerReceiver(receiver, IntentFilter(Intent.ACTION_TIMEZONE_CHANGED)) + } + + // Send here again, because registering the Broadcast Receiver can take up to several milliseconds. + // This way, we can reduce the likelihood that a TZ change wouldn't be caught with the Broadcast Receiver. + trySend(TimeZone.currentSystemDefault()) + + awaitClose { + context.unregisterReceiver(receiver) + } + } + // We use to prevent multiple emissions of the same type, because we use trySend multiple times. + .distinctUntilChanged() + .conflate() + .flowOn(ioDispatcher) + // Sharing the callback to prevent multiple BroadcastReceivers being registered + .shareIn(appScope, SharingStarted.WhileSubscribed(5_000), 1) +} diff --git a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/model/NetworkEntityKtTest.kt b/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/model/NetworkEntityKtTest.kt deleted file mode 100644 index 7dd251a99..000000000 --- a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/model/NetworkEntityKtTest.kt +++ /dev/null @@ -1,91 +0,0 @@ -/* - * Copyright 2022 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.samples.apps.nowinandroid.core.data.model - -import com.google.samples.apps.nowinandroid.core.network.model.NetworkNewsResource -import com.google.samples.apps.nowinandroid.core.network.model.NetworkNewsResourceExpanded -import com.google.samples.apps.nowinandroid.core.network.model.NetworkTopic -import kotlinx.datetime.Instant -import org.junit.Test -import kotlin.test.assertEquals - -class NetworkEntityKtTest { - - @Test - fun network_topic_can_be_mapped_to_topic_entity() { - val networkModel = NetworkTopic( - id = "0", - name = "Test", - shortDescription = "short description", - longDescription = "long description", - url = "URL", - imageUrl = "image URL", - ) - val entity = networkModel.asEntity() - - assertEquals("0", entity.id) - assertEquals("Test", entity.name) - assertEquals("short description", entity.shortDescription) - assertEquals("long description", entity.longDescription) - assertEquals("URL", entity.url) - assertEquals("image URL", entity.imageUrl) - } - - @Test - fun network_news_resource_can_be_mapped_to_news_resource_entity() { - val networkModel = - NetworkNewsResource( - id = "0", - title = "title", - content = "content", - url = "url", - headerImageUrl = "headerImageUrl", - publishDate = Instant.fromEpochMilliseconds(1), - type = "Article 📚", - ) - val entity = networkModel.asEntity() - - assertEquals("0", entity.id) - assertEquals("title", entity.title) - assertEquals("content", entity.content) - assertEquals("url", entity.url) - assertEquals("headerImageUrl", entity.headerImageUrl) - assertEquals(Instant.fromEpochMilliseconds(1), entity.publishDate) - assertEquals("Article 📚", entity.type) - - val expandedNetworkModel = - NetworkNewsResourceExpanded( - id = "0", - title = "title", - content = "content", - url = "url", - headerImageUrl = "headerImageUrl", - publishDate = Instant.fromEpochMilliseconds(1), - type = "Article 📚", - ) - - val entityFromExpanded = expandedNetworkModel.asEntity() - - assertEquals("0", entityFromExpanded.id) - assertEquals("title", entityFromExpanded.title) - assertEquals("content", entityFromExpanded.content) - assertEquals("url", entityFromExpanded.url) - assertEquals("headerImageUrl", entityFromExpanded.headerImageUrl) - assertEquals(Instant.fromEpochMilliseconds(1), entityFromExpanded.publishDate) - assertEquals("Article 📚", entityFromExpanded.type) - } -} diff --git a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/CompositeUserNewsResourceRepositoryTest.kt b/core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/CompositeUserNewsResourceRepositoryTest.kt similarity index 98% rename from core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/CompositeUserNewsResourceRepositoryTest.kt rename to core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/CompositeUserNewsResourceRepositoryTest.kt index 743fb7e5c..05811f4be 100644 --- a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/CompositeUserNewsResourceRepositoryTest.kt +++ b/core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/CompositeUserNewsResourceRepositoryTest.kt @@ -82,7 +82,7 @@ class CompositeUserNewsResourceRepositoryTest { // Check that only news resources with the given topic id are returned. assertEquals( sampleNewsResources - .filter { it.topics.contains(sampleTopic1) } + .filter { sampleTopic1 in it.topics } .mapToUserNewsResources(emptyUserData), userNewsResources.first(), ) @@ -104,7 +104,7 @@ class CompositeUserNewsResourceRepositoryTest { // Check that only news resources with the given topic id are returned. assertEquals( sampleNewsResources - .filter { it.topics.contains(sampleTopic1) } + .filter { sampleTopic1 in it.topics } .mapToUserNewsResources(userData), userNewsResources.first(), ) diff --git a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/UserNewsResourceTest.kt b/core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/UserNewsResourceTest.kt similarity index 96% rename from core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/UserNewsResourceTest.kt rename to core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/UserNewsResourceTest.kt index a21dee863..c7dfd99d0 100644 --- a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/UserNewsResourceTest.kt +++ b/core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/UserNewsResourceTest.kt @@ -91,14 +91,14 @@ class UserNewsResourceTest { // Construct the expected FollowableTopic. val followableTopic = FollowableTopic( topic = topic, - isFollowed = userData.followedTopics.contains(topic.id), + isFollowed = topic.id in userData.followedTopics, ) assertTrue(userNewsResource.followableTopics.contains(followableTopic)) } // Check that the saved flag is set correctly. assertEquals( - userData.bookmarkedNewsResources.contains(newsResource1.id), + newsResource1.id in userData.bookmarkedNewsResources, userNewsResource.isSaved, ) } diff --git a/core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/model/NetworkEntityTest.kt b/core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/model/NetworkEntityTest.kt new file mode 100644 index 000000000..52dbe5117 --- /dev/null +++ b/core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/model/NetworkEntityTest.kt @@ -0,0 +1,140 @@ +/* + * Copyright 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.core.data.model + +import com.google.samples.apps.nowinandroid.core.model.data.NewsResource +import com.google.samples.apps.nowinandroid.core.model.data.Topic +import com.google.samples.apps.nowinandroid.core.network.model.NetworkNewsResource +import com.google.samples.apps.nowinandroid.core.network.model.NetworkTopic +import com.google.samples.apps.nowinandroid.core.network.model.asExternalModel +import kotlinx.datetime.Instant +import org.junit.Test +import kotlin.test.assertEquals + +class NetworkEntityTest { + + @Test + fun networkTopicMapsToDatabaseModel() { + val networkModel = NetworkTopic( + id = "0", + name = "Test", + shortDescription = "short description", + longDescription = "long description", + url = "URL", + imageUrl = "image URL", + ) + val entity = networkModel.asEntity() + + assertEquals("0", entity.id) + assertEquals("Test", entity.name) + assertEquals("short description", entity.shortDescription) + assertEquals("long description", entity.longDescription) + assertEquals("URL", entity.url) + assertEquals("image URL", entity.imageUrl) + } + + @Test + fun networkNewsResourceMapsToDatabaseModel() { + val networkModel = + NetworkNewsResource( + id = "0", + title = "title", + content = "content", + url = "url", + headerImageUrl = "headerImageUrl", + publishDate = Instant.fromEpochMilliseconds(1), + type = "Article 📚", + ) + val entity = networkModel.asEntity() + + assertEquals("0", entity.id) + assertEquals("title", entity.title) + assertEquals("content", entity.content) + assertEquals("url", entity.url) + assertEquals("headerImageUrl", entity.headerImageUrl) + assertEquals(Instant.fromEpochMilliseconds(1), entity.publishDate) + assertEquals("Article 📚", entity.type) + } + + @Test + fun networkTopicMapsToExternalModel() { + val networkTopic = NetworkTopic( + id = "0", + name = "Test", + shortDescription = "short description", + longDescription = "long description", + url = "URL", + imageUrl = "imageUrl", + ) + + val expected = Topic( + id = "0", + name = "Test", + shortDescription = "short description", + longDescription = "long description", + url = "URL", + imageUrl = "imageUrl", + ) + + assertEquals(expected, networkTopic.asExternalModel()) + } + + @Test + fun networkNewsResourceMapsToExternalModel() { + val networkNewsResource = NetworkNewsResource( + id = "0", + title = "title", + content = "content", + url = "url", + headerImageUrl = "headerImageUrl", + publishDate = Instant.fromEpochMilliseconds(1), + type = "Article 📚", + topics = listOf("1", "2"), + ) + + val networkTopics = listOf( + NetworkTopic( + id = "1", + name = "Test 1", + shortDescription = "short description 1", + longDescription = "long description 1", + url = "url 1", + imageUrl = "imageUrl 1", + ), + NetworkTopic( + id = "2", + name = "Test 2", + shortDescription = "short description 2", + longDescription = "long description 2", + url = "url 2", + imageUrl = "imageUrl 2", + ), + ) + + val expected = NewsResource( + id = "0", + title = "title", + content = "content", + url = "url", + headerImageUrl = "headerImageUrl", + publishDate = Instant.fromEpochMilliseconds(1), + type = "Article 📚", + topics = networkTopics.map(NetworkTopic::asExternalModel), + ) + assertEquals(expected, networkNewsResource.asExternalModel(networkTopics)) + } +} diff --git a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepositoryTest.kt b/core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepositoryTest.kt similarity index 97% rename from core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepositoryTest.kt rename to core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepositoryTest.kt index 47c3996c4..01111013f 100644 --- a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepositoryTest.kt +++ b/core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstNewsRepositoryTest.kt @@ -32,7 +32,8 @@ import com.google.samples.apps.nowinandroid.core.database.model.PopulatedNewsRes import com.google.samples.apps.nowinandroid.core.database.model.TopicEntity import com.google.samples.apps.nowinandroid.core.database.model.asExternalModel import com.google.samples.apps.nowinandroid.core.datastore.NiaPreferencesDataSource -import com.google.samples.apps.nowinandroid.core.datastore.test.testUserPreferencesDataStore +import com.google.samples.apps.nowinandroid.core.datastore.UserPreferences +import com.google.samples.apps.nowinandroid.core.datastore.test.InMemoryDataStore import com.google.samples.apps.nowinandroid.core.model.data.NewsResource import com.google.samples.apps.nowinandroid.core.model.data.Topic import com.google.samples.apps.nowinandroid.core.network.model.NetworkChangeList @@ -43,9 +44,7 @@ import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.UnconfinedTestDispatcher import kotlinx.coroutines.test.runTest import org.junit.Before -import org.junit.Rule import org.junit.Test -import org.junit.rules.TemporaryFolder import kotlin.test.assertEquals import kotlin.test.assertTrue @@ -67,14 +66,9 @@ class OfflineFirstNewsRepositoryTest { private lateinit var synchronizer: Synchronizer - @get:Rule - val tmpFolder: TemporaryFolder = TemporaryFolder.builder().assureDeletion().build() - @Before fun setup() { - niaPreferencesDataSource = NiaPreferencesDataSource( - tmpFolder.testUserPreferencesDataStore(testScope), - ) + niaPreferencesDataSource = NiaPreferencesDataSource(InMemoryDataStore(UserPreferences.getDefaultInstance())) newsResourceDao = TestNewsResourceDao() topicDao = TestTopicDao() network = TestNiaNetworkDataSource() diff --git a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepositoryTest.kt b/core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepositoryTest.kt similarity index 94% rename from core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepositoryTest.kt rename to core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepositoryTest.kt index 3bd314eae..d32f424d8 100644 --- a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepositoryTest.kt +++ b/core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstTopicsRepositoryTest.kt @@ -25,7 +25,8 @@ import com.google.samples.apps.nowinandroid.core.database.dao.TopicDao import com.google.samples.apps.nowinandroid.core.database.model.TopicEntity import com.google.samples.apps.nowinandroid.core.database.model.asExternalModel import com.google.samples.apps.nowinandroid.core.datastore.NiaPreferencesDataSource -import com.google.samples.apps.nowinandroid.core.datastore.test.testUserPreferencesDataStore +import com.google.samples.apps.nowinandroid.core.datastore.UserPreferences +import com.google.samples.apps.nowinandroid.core.datastore.test.InMemoryDataStore import com.google.samples.apps.nowinandroid.core.model.data.Topic import com.google.samples.apps.nowinandroid.core.network.model.NetworkTopic import kotlinx.coroutines.flow.first @@ -33,9 +34,7 @@ import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.UnconfinedTestDispatcher import kotlinx.coroutines.test.runTest import org.junit.Before -import org.junit.Rule import org.junit.Test -import org.junit.rules.TemporaryFolder import kotlin.test.assertEquals class OfflineFirstTopicsRepositoryTest { @@ -52,16 +51,11 @@ class OfflineFirstTopicsRepositoryTest { private lateinit var synchronizer: Synchronizer - @get:Rule - val tmpFolder: TemporaryFolder = TemporaryFolder.builder().assureDeletion().build() - @Before fun setup() { topicDao = TestTopicDao() network = TestNiaNetworkDataSource() - niaPreferences = NiaPreferencesDataSource( - tmpFolder.testUserPreferencesDataStore(testScope), - ) + niaPreferences = NiaPreferencesDataSource(InMemoryDataStore(UserPreferences.getDefaultInstance())) synchronizer = TestSynchronizer(niaPreferences) subject = OfflineFirstTopicsRepository( diff --git a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepositoryTest.kt b/core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepositoryTest.kt similarity index 92% rename from core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepositoryTest.kt rename to core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepositoryTest.kt index 952f667f7..8860a6b35 100644 --- a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepositoryTest.kt +++ b/core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/OfflineFirstUserDataRepositoryTest.kt @@ -18,7 +18,8 @@ package com.google.samples.apps.nowinandroid.core.data.repository import com.google.samples.apps.nowinandroid.core.analytics.NoOpAnalyticsHelper import com.google.samples.apps.nowinandroid.core.datastore.NiaPreferencesDataSource -import com.google.samples.apps.nowinandroid.core.datastore.test.testUserPreferencesDataStore +import com.google.samples.apps.nowinandroid.core.datastore.UserPreferences +import com.google.samples.apps.nowinandroid.core.datastore.test.InMemoryDataStore import com.google.samples.apps.nowinandroid.core.model.data.DarkThemeConfig import com.google.samples.apps.nowinandroid.core.model.data.ThemeBrand import com.google.samples.apps.nowinandroid.core.model.data.UserData @@ -28,9 +29,7 @@ import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.UnconfinedTestDispatcher import kotlinx.coroutines.test.runTest import org.junit.Before -import org.junit.Rule import org.junit.Test -import org.junit.rules.TemporaryFolder import kotlin.test.assertEquals import kotlin.test.assertFalse import kotlin.test.assertTrue @@ -45,14 +44,9 @@ class OfflineFirstUserDataRepositoryTest { private val analyticsHelper = NoOpAnalyticsHelper() - @get:Rule - val tmpFolder: TemporaryFolder = TemporaryFolder.builder().assureDeletion().build() - @Before fun setup() { - niaPreferencesDataSource = NiaPreferencesDataSource( - tmpFolder.testUserPreferencesDataStore(testScope), - ) + niaPreferencesDataSource = NiaPreferencesDataSource(InMemoryDataStore(UserPreferences.getDefaultInstance())) subject = OfflineFirstUserDataRepository( niaPreferencesDataSource = niaPreferencesDataSource, @@ -80,7 +74,7 @@ class OfflineFirstUserDataRepositoryTest { @Test fun offlineFirstUserDataRepository_toggle_followed_topics_logic_delegates_to_nia_preferences() = testScope.runTest { - subject.toggleFollowedTopicId(followedTopicId = "0", followed = true) + subject.setTopicIdFollowed(followedTopicId = "0", followed = true) assertEquals( setOf("0"), @@ -89,7 +83,7 @@ class OfflineFirstUserDataRepositoryTest { .first(), ) - subject.toggleFollowedTopicId(followedTopicId = "1", followed = true) + subject.setTopicIdFollowed(followedTopicId = "1", followed = true) assertEquals( setOf("0", "1"), @@ -133,7 +127,7 @@ class OfflineFirstUserDataRepositoryTest { @Test fun offlineFirstUserDataRepository_bookmark_news_resource_logic_delegates_to_nia_preferences() = testScope.runTest { - subject.updateNewsResourceBookmark(newsResourceId = "0", bookmarked = true) + subject.setNewsResourceBookmarked(newsResourceId = "0", bookmarked = true) assertEquals( setOf("0"), @@ -142,7 +136,7 @@ class OfflineFirstUserDataRepositoryTest { .first(), ) - subject.updateNewsResourceBookmark(newsResourceId = "1", bookmarked = true) + subject.setNewsResourceBookmarked(newsResourceId = "1", bookmarked = true) assertEquals( setOf("0", "1"), diff --git a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/TestSynchronizer.kt b/core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/TestSynchronizer.kt similarity index 100% rename from core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/repository/TestSynchronizer.kt rename to core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/repository/TestSynchronizer.kt diff --git a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/testdoubles/TestNewsResourceDao.kt b/core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/testdoubles/TestNewsResourceDao.kt similarity index 87% rename from core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/testdoubles/TestNewsResourceDao.kt rename to core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/testdoubles/TestNewsResourceDao.kt index 6e5c45305..a3e373918 100644 --- a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/testdoubles/TestNewsResourceDao.kt +++ b/core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/testdoubles/TestNewsResourceDao.kt @@ -34,9 +34,7 @@ val nonPresentInterestsIds = setOf("2") */ class TestNewsResourceDao : NewsResourceDao { - private var entitiesStateFlow = MutableStateFlow( - emptyList(), - ) + private val entitiesStateFlow = MutableStateFlow(emptyList()) internal var topicCrossReferences: List = listOf() @@ -94,21 +92,6 @@ class TestNewsResourceDao : NewsResourceDao { result.map { it.entity.id } } - override suspend fun insertOrIgnoreNewsResources( - entities: List, - ): List { - entitiesStateFlow.update { oldValues -> - // Old values come first so new values don't overwrite them - (oldValues + entities) - .distinctBy(NewsResourceEntity::id) - .sortedWith( - compareBy(NewsResourceEntity::publishDate).reversed(), - ) - } - // Assume no conflicts on insert - return entities.map { it.id.toLong() } - } - override suspend fun upsertNewsResources(newsResourceEntities: List) { entitiesStateFlow.update { oldValues -> // New values come first so they overwrite old values @@ -131,7 +114,7 @@ class TestNewsResourceDao : NewsResourceDao { override suspend fun deleteNewsResources(ids: List) { val idSet = ids.toSet() entitiesStateFlow.update { entities -> - entities.filterNot { idSet.contains(it.id) } + entities.filterNot { it.id in idSet } } } } diff --git a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/testdoubles/TestNiaNetworkDataSource.kt b/core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/testdoubles/TestNiaNetworkDataSource.kt similarity index 92% rename from core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/testdoubles/TestNiaNetworkDataSource.kt rename to core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/testdoubles/TestNiaNetworkDataSource.kt index 8e248a3aa..7675af7e9 100644 --- a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/testdoubles/TestNiaNetworkDataSource.kt +++ b/core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/testdoubles/TestNiaNetworkDataSource.kt @@ -17,7 +17,7 @@ package com.google.samples.apps.nowinandroid.core.data.testdoubles import com.google.samples.apps.nowinandroid.core.network.NiaNetworkDataSource -import com.google.samples.apps.nowinandroid.core.network.fake.FakeNiaNetworkDataSource +import com.google.samples.apps.nowinandroid.core.network.demo.DemoNiaNetworkDataSource import com.google.samples.apps.nowinandroid.core.network.model.NetworkChangeList import com.google.samples.apps.nowinandroid.core.network.model.NetworkNewsResource import com.google.samples.apps.nowinandroid.core.network.model.NetworkTopic @@ -35,7 +35,7 @@ enum class CollectionType { */ class TestNiaNetworkDataSource : NiaNetworkDataSource { - private val source = FakeNiaNetworkDataSource( + private val source = DemoNiaNetworkDataSource( UnconfinedTestDispatcher(), Json { ignoreUnknownKeys = true }, ) @@ -91,11 +91,10 @@ class TestNiaNetworkDataSource : NiaNetworkDataSource { } } -fun List.after(version: Int?): List = - when (version) { - null -> this - else -> this.filter { it.changeListVersion > version } - } +fun List.after(version: Int?): List = when (version) { + null -> this + else -> filter { it.changeListVersion > version } +} /** * Return items from [this] whose id defined by [idGetter] is in [ids] if [ids] is not null @@ -105,7 +104,7 @@ private fun List.matchIds( idGetter: (T) -> String, ) = when (ids) { null -> this - else -> ids.toSet().let { idSet -> this.filter { idSet.contains(idGetter(it)) } } + else -> ids.toSet().let { idSet -> filter { idGetter(it) in idSet } } } /** diff --git a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/testdoubles/TestTopicDao.kt b/core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/testdoubles/TestTopicDao.kt similarity index 78% rename from core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/testdoubles/TestTopicDao.kt rename to core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/testdoubles/TestTopicDao.kt index a52cc86f6..d217f55d7 100644 --- a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/data/testdoubles/TestTopicDao.kt +++ b/core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/data/testdoubles/TestTopicDao.kt @@ -28,20 +28,15 @@ import kotlinx.coroutines.flow.update */ class TestTopicDao : TopicDao { - private var entitiesStateFlow = MutableStateFlow( - emptyList(), - ) + private val entitiesStateFlow = MutableStateFlow(emptyList()) - override fun getTopicEntity(topicId: String): Flow { + override fun getTopicEntity(topicId: String): Flow = throw NotImplementedError("Unused in tests") - } - override fun getTopicEntities(): Flow> = - entitiesStateFlow + override fun getTopicEntities(): Flow> = entitiesStateFlow override fun getTopicEntities(ids: Set): Flow> = - getTopicEntities() - .map { topics -> topics.filter { it.id in ids } } + getTopicEntities().map { topics -> topics.filter { it.id in ids } } override suspend fun getOneOffTopicEntities(): List = emptyList() @@ -55,15 +50,11 @@ class TestTopicDao : TopicDao { override suspend fun upsertTopics(entities: List) { // Overwrite old values with new values - entitiesStateFlow.update { oldValues -> - (entities + oldValues).distinctBy(TopicEntity::id) - } + entitiesStateFlow.update { oldValues -> (entities + oldValues).distinctBy(TopicEntity::id) } } override suspend fun deleteTopics(ids: List) { val idSet = ids.toSet() - entitiesStateFlow.update { entities -> - entities.filterNot { idSet.contains(it.id) } - } + entitiesStateFlow.update { entities -> entities.filterNot { it.id in idSet } } } } diff --git a/core/data/src/test/java/com/google/samples/apps/nowinandroid/core/database/model/PopulatedNewsResourceKtTest.kt b/core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/database/model/PopulatedNewsResourceKtTest.kt similarity index 100% rename from core/data/src/test/java/com/google/samples/apps/nowinandroid/core/database/model/PopulatedNewsResourceKtTest.kt rename to core/data/src/test/kotlin/com/google/samples/apps/nowinandroid/core/database/model/PopulatedNewsResourceKtTest.kt diff --git a/core/database/README.md b/core/database/README.md index 5cf339aed..855eab53e 100644 --- a/core/database/README.md +++ b/core/database/README.md @@ -1,3 +1,3 @@ # :core:database module - -![Dependency graph](../../docs/images/graphs/dep_graph_core_database.png) +## Dependency graph +![Dependency graph](../../docs/images/graphs/dep_graph_core_database.svg) diff --git a/core/database/build.gradle.kts b/core/database/build.gradle.kts index a9c711ae3..8bab355b4 100644 --- a/core/database/build.gradle.kts +++ b/core/database/build.gradle.kts @@ -15,25 +15,22 @@ */ plugins { - id("nowinandroid.android.library") - id("nowinandroid.android.library.jacoco") - id("nowinandroid.android.hilt") - id("nowinandroid.android.room") + alias(libs.plugins.nowinandroid.android.library) + alias(libs.plugins.nowinandroid.android.library.jacoco) + alias(libs.plugins.nowinandroid.android.room) + alias(libs.plugins.nowinandroid.hilt) } android { - defaultConfig { - testInstrumentationRunner = - "com.google.samples.apps.nowinandroid.core.testing.NiaTestRunner" - } namespace = "com.google.samples.apps.nowinandroid.core.database" } dependencies { - implementation(project(":core:model")) + api(projects.core.model) - implementation(libs.kotlinx.coroutines.android) implementation(libs.kotlinx.datetime) - androidTestImplementation(project(":core:testing")) + androidTestImplementation(libs.androidx.test.core) + androidTestImplementation(libs.androidx.test.runner) + androidTestImplementation(libs.kotlinx.coroutines.test) } diff --git a/core/database/src/androidTest/java/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDaoTest.kt b/core/database/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDaoTest.kt similarity index 99% rename from core/database/src/androidTest/java/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDaoTest.kt rename to core/database/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDaoTest.kt index 55e817618..535ab61a7 100644 --- a/core/database/src/androidTest/java/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDaoTest.kt +++ b/core/database/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDaoTest.kt @@ -27,6 +27,7 @@ import com.google.samples.apps.nowinandroid.core.database.model.asExternalModel import kotlinx.coroutines.flow.first import kotlinx.coroutines.test.runTest import kotlinx.datetime.Instant +import org.junit.After import org.junit.Before import org.junit.Test import kotlin.test.assertEquals @@ -48,6 +49,9 @@ class NewsResourceDaoTest { topicDao = db.topicDao() } + @After + fun closeDb() = db.close() + @Test fun newsResourceDao_fetches_items_by_descending_publish_date() = runTest { val newsResourceEntities = listOf( diff --git a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/DatabaseMigrations.kt b/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/DatabaseMigrations.kt similarity index 98% rename from core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/DatabaseMigrations.kt rename to core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/DatabaseMigrations.kt index 09e0849fe..4e396c9e2 100644 --- a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/DatabaseMigrations.kt +++ b/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/DatabaseMigrations.kt @@ -28,7 +28,7 @@ import androidx.room.migration.AutoMigrationSpec * from and Y is the schema version you're migrating to. The class should implement * `AutoMigrationSpec`. */ -object DatabaseMigrations { +internal object DatabaseMigrations { @RenameColumn( tableName = "topics", diff --git a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/NiaDatabase.kt b/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/NiaDatabase.kt similarity index 98% rename from core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/NiaDatabase.kt rename to core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/NiaDatabase.kt index fd6b75e49..87fd82af1 100644 --- a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/NiaDatabase.kt +++ b/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/NiaDatabase.kt @@ -63,7 +63,7 @@ import com.google.samples.apps.nowinandroid.core.database.util.InstantConverter @TypeConverters( InstantConverter::class, ) -abstract class NiaDatabase : RoomDatabase() { +internal abstract class NiaDatabase : RoomDatabase() { abstract fun topicDao(): TopicDao abstract fun newsResourceDao(): NewsResourceDao abstract fun topicFtsDao(): TopicFtsDao diff --git a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao.kt b/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao.kt similarity index 94% rename from core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao.kt rename to core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao.kt index 0ad1e4f7d..929b88ce6 100644 --- a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao.kt +++ b/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceDao.kt @@ -96,12 +96,6 @@ interface NewsResourceDao { filterNewsIds: Set = emptySet(), ): Flow> - /** - * Inserts [entities] into the db if they don't exist, and ignores those that do - */ - @Insert(onConflict = OnConflictStrategy.IGNORE) - suspend fun insertOrIgnoreNewsResources(entities: List): List - /** * Inserts or updates [newsResourceEntities] in the db under the specified primary keys */ diff --git a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceFtsDao.kt b/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceFtsDao.kt similarity index 100% rename from core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceFtsDao.kt rename to core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/dao/NewsResourceFtsDao.kt diff --git a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/dao/RecentSearchQueryDao.kt b/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/dao/RecentSearchQueryDao.kt similarity index 100% rename from core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/dao/RecentSearchQueryDao.kt rename to core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/dao/RecentSearchQueryDao.kt diff --git a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/dao/TopicDao.kt b/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/dao/TopicDao.kt similarity index 100% rename from core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/dao/TopicDao.kt rename to core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/dao/TopicDao.kt diff --git a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/dao/TopicFtsDao.kt b/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/dao/TopicFtsDao.kt similarity index 100% rename from core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/dao/TopicFtsDao.kt rename to core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/dao/TopicFtsDao.kt diff --git a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/DaosModule.kt b/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DaosModule.kt similarity index 89% rename from core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/DaosModule.kt rename to core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DaosModule.kt index 34840a733..e7456054e 100644 --- a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/DaosModule.kt +++ b/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DaosModule.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022 The Android Open Source Project + * Copyright 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,8 +14,9 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.core.database +package com.google.samples.apps.nowinandroid.core.database.di +import com.google.samples.apps.nowinandroid.core.database.NiaDatabase import com.google.samples.apps.nowinandroid.core.database.dao.NewsResourceDao import com.google.samples.apps.nowinandroid.core.database.dao.NewsResourceFtsDao import com.google.samples.apps.nowinandroid.core.database.dao.RecentSearchQueryDao @@ -28,7 +29,7 @@ import dagger.hilt.components.SingletonComponent @Module @InstallIn(SingletonComponent::class) -object DaosModule { +internal object DaosModule { @Provides fun providesTopicsDao( database: NiaDatabase, diff --git a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/DatabaseModule.kt b/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DatabaseModule.kt similarity index 83% rename from core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/DatabaseModule.kt rename to core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DatabaseModule.kt index 7d89cd1ac..d79d35948 100644 --- a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/DatabaseModule.kt +++ b/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/di/DatabaseModule.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022 The Android Open Source Project + * Copyright 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,10 +14,11 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.core.database +package com.google.samples.apps.nowinandroid.core.database.di import android.content.Context import androidx.room.Room +import com.google.samples.apps.nowinandroid.core.database.NiaDatabase import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -27,7 +28,7 @@ import javax.inject.Singleton @Module @InstallIn(SingletonComponent::class) -object DatabaseModule { +internal object DatabaseModule { @Provides @Singleton fun providesNiaDatabase( diff --git a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/model/NewsResourceEntity.kt b/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/model/NewsResourceEntity.kt similarity index 100% rename from core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/model/NewsResourceEntity.kt rename to core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/model/NewsResourceEntity.kt diff --git a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/model/NewsResourceFtsEntity.kt b/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/model/NewsResourceFtsEntity.kt similarity index 100% rename from core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/model/NewsResourceFtsEntity.kt rename to core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/model/NewsResourceFtsEntity.kt diff --git a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/model/NewsResourceTopicCrossRef.kt b/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/model/NewsResourceTopicCrossRef.kt similarity index 100% rename from core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/model/NewsResourceTopicCrossRef.kt rename to core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/model/NewsResourceTopicCrossRef.kt diff --git a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/model/PopulatedNewsResource.kt b/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/model/PopulatedNewsResource.kt similarity index 100% rename from core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/model/PopulatedNewsResource.kt rename to core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/model/PopulatedNewsResource.kt diff --git a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/model/RecentSearchQueryEntity.kt b/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/model/RecentSearchQueryEntity.kt similarity index 100% rename from core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/model/RecentSearchQueryEntity.kt rename to core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/model/RecentSearchQueryEntity.kt diff --git a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/model/TopicEntity.kt b/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/model/TopicEntity.kt similarity index 100% rename from core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/model/TopicEntity.kt rename to core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/model/TopicEntity.kt diff --git a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/model/TopicFtsEntity.kt b/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/model/TopicFtsEntity.kt similarity index 100% rename from core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/model/TopicFtsEntity.kt rename to core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/model/TopicFtsEntity.kt diff --git a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/util/InstantConverter.kt b/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/util/InstantConverter.kt similarity index 96% rename from core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/util/InstantConverter.kt rename to core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/util/InstantConverter.kt index 4e880886c..0b79c2099 100644 --- a/core/database/src/main/java/com/google/samples/apps/nowinandroid/core/database/util/InstantConverter.kt +++ b/core/database/src/main/kotlin/com/google/samples/apps/nowinandroid/core/database/util/InstantConverter.kt @@ -19,7 +19,7 @@ package com.google.samples.apps.nowinandroid.core.database.util import androidx.room.TypeConverter import kotlinx.datetime.Instant -class InstantConverter { +internal class InstantConverter { @TypeConverter fun longToInstant(value: Long?): Instant? = value?.let(Instant::fromEpochMilliseconds) diff --git a/core/datastore-proto/README.md b/core/datastore-proto/README.md new file mode 100644 index 000000000..19ed58239 --- /dev/null +++ b/core/datastore-proto/README.md @@ -0,0 +1,3 @@ +# :core:datastore-proto module +## Dependency graph +![Dependency graph](../../docs/images/graphs/dep_graph_core_datastore_proto.svg) diff --git a/core/datastore-proto/build.gradle.kts b/core/datastore-proto/build.gradle.kts new file mode 100644 index 000000000..511518dde --- /dev/null +++ b/core/datastore-proto/build.gradle.kts @@ -0,0 +1,55 @@ +/* + * Copyright 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +plugins { + alias(libs.plugins.nowinandroid.android.library) + alias(libs.plugins.protobuf) +} + +android { + namespace = "com.google.samples.apps.nowinandroid.core.datastore.proto" +} + +// Setup protobuf configuration, generating lite Java and Kotlin classes +protobuf { + protoc { + artifact = libs.protobuf.protoc.get().toString() + } + generateProtoTasks { + all().forEach { task -> + task.builtins { + register("java") { + option("lite") + } + register("kotlin") { + option("lite") + } + } + } + } +} + +androidComponents.beforeVariants { + android.sourceSets.register(it.name) { + val buildDir = layout.buildDirectory.get().asFile + java.srcDir(buildDir.resolve("generated/source/proto/${it.name}/java")) + kotlin.srcDir(buildDir.resolve("generated/source/proto/${it.name}/kotlin")) + } +} + +dependencies { + api(libs.protobuf.kotlin.lite) +} diff --git a/core/datastore/src/main/proto/com/google/samples/apps/nowinandroid/data/dark_theme_config.proto b/core/datastore-proto/src/main/proto/com/google/samples/apps/nowinandroid/data/dark_theme_config.proto similarity index 100% rename from core/datastore/src/main/proto/com/google/samples/apps/nowinandroid/data/dark_theme_config.proto rename to core/datastore-proto/src/main/proto/com/google/samples/apps/nowinandroid/data/dark_theme_config.proto diff --git a/core/datastore/src/main/proto/com/google/samples/apps/nowinandroid/data/theme_brand.proto b/core/datastore-proto/src/main/proto/com/google/samples/apps/nowinandroid/data/theme_brand.proto similarity index 100% rename from core/datastore/src/main/proto/com/google/samples/apps/nowinandroid/data/theme_brand.proto rename to core/datastore-proto/src/main/proto/com/google/samples/apps/nowinandroid/data/theme_brand.proto diff --git a/core/datastore/src/main/proto/com/google/samples/apps/nowinandroid/data/user_preferences.proto b/core/datastore-proto/src/main/proto/com/google/samples/apps/nowinandroid/data/user_preferences.proto similarity index 100% rename from core/datastore/src/main/proto/com/google/samples/apps/nowinandroid/data/user_preferences.proto rename to core/datastore-proto/src/main/proto/com/google/samples/apps/nowinandroid/data/user_preferences.proto diff --git a/core/datastore-test/README.md b/core/datastore-test/README.md index 45cc51a48..99cf13f1f 100644 --- a/core/datastore-test/README.md +++ b/core/datastore-test/README.md @@ -1,3 +1,3 @@ # :core:datastore-test module - -![Dependency graph](../../docs/images/graphs/dep_graph_core_datastore_test.png) +## Dependency graph +![Dependency graph](../../docs/images/graphs/dep_graph_core_datastore_test.svg) diff --git a/core/datastore-test/build.gradle.kts b/core/datastore-test/build.gradle.kts index 193c49da7..375b1d3d8 100644 --- a/core/datastore-test/build.gradle.kts +++ b/core/datastore-test/build.gradle.kts @@ -14,8 +14,8 @@ * limitations under the License. */ plugins { - id("nowinandroid.android.library") - id("nowinandroid.android.hilt") + alias(libs.plugins.nowinandroid.android.library) + alias(libs.plugins.nowinandroid.hilt) } android { @@ -23,10 +23,7 @@ android { } dependencies { - api(project(":core:datastore")) - api(libs.androidx.dataStore.core) - - implementation(libs.protobuf.kotlin.lite) - implementation(project(":core:common")) - implementation(project(":core:testing")) + implementation(libs.hilt.android.testing) + implementation(projects.core.common) + implementation(projects.core.datastore) } diff --git a/core/datastore-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/test/InMemoryDataStore.kt b/core/datastore-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/test/InMemoryDataStore.kt new file mode 100644 index 000000000..f1da66dd0 --- /dev/null +++ b/core/datastore-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/test/InMemoryDataStore.kt @@ -0,0 +1,28 @@ +/* + * Copyright 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.core.datastore.test + +import androidx.datastore.core.DataStore +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.updateAndGet + +class InMemoryDataStore(initialValue: T) : DataStore { + override val data = MutableStateFlow(initialValue) + override suspend fun updateData( + transform: suspend (it: T) -> T, + ) = data.updateAndGet { transform(it) } +} diff --git a/core/datastore-test/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/test/TestDataStoreModule.kt b/core/datastore-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/test/TestDataStoreModule.kt similarity index 59% rename from core/datastore-test/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/test/TestDataStoreModule.kt rename to core/datastore-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/test/TestDataStoreModule.kt index b86003e83..5cc48af12 100644 --- a/core/datastore-test/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/test/TestDataStoreModule.kt +++ b/core/datastore-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/test/TestDataStoreModule.kt @@ -17,17 +17,13 @@ package com.google.samples.apps.nowinandroid.core.datastore.test import androidx.datastore.core.DataStore -import androidx.datastore.core.DataStoreFactory import com.google.samples.apps.nowinandroid.core.datastore.UserPreferences import com.google.samples.apps.nowinandroid.core.datastore.UserPreferencesSerializer import com.google.samples.apps.nowinandroid.core.datastore.di.DataStoreModule -import com.google.samples.apps.nowinandroid.core.network.di.ApplicationScope import dagger.Module import dagger.Provides import dagger.hilt.components.SingletonComponent import dagger.hilt.testing.TestInstallIn -import kotlinx.coroutines.CoroutineScope -import org.junit.rules.TemporaryFolder import javax.inject.Singleton @Module @@ -35,27 +31,10 @@ import javax.inject.Singleton components = [SingletonComponent::class], replaces = [DataStoreModule::class], ) -object TestDataStoreModule { - +internal object TestDataStoreModule { @Provides @Singleton fun providesUserPreferencesDataStore( - @ApplicationScope scope: CoroutineScope, - userPreferencesSerializer: UserPreferencesSerializer, - tmpFolder: TemporaryFolder, - ): DataStore = - tmpFolder.testUserPreferencesDataStore( - coroutineScope = scope, - userPreferencesSerializer = userPreferencesSerializer, - ) -} - -fun TemporaryFolder.testUserPreferencesDataStore( - coroutineScope: CoroutineScope, - userPreferencesSerializer: UserPreferencesSerializer = UserPreferencesSerializer(), -) = DataStoreFactory.create( - serializer = userPreferencesSerializer, - scope = coroutineScope, -) { - newFile("user_preferences_test.pb") + serializer: UserPreferencesSerializer, + ): DataStore = InMemoryDataStore(serializer.defaultValue) } diff --git a/core/datastore/README.md b/core/datastore/README.md index 56699a483..4785c5885 100644 --- a/core/datastore/README.md +++ b/core/datastore/README.md @@ -1,3 +1,3 @@ # :core:datastore module - -![Dependency graph](../../docs/images/graphs/dep_graph_core_datastore.png) +## Dependency graph +![Dependency graph](../../docs/images/graphs/dep_graph_core_datastore.svg) diff --git a/core/datastore/build.gradle.kts b/core/datastore/build.gradle.kts index d6ca7ebcd..b17bf6abd 100644 --- a/core/datastore/build.gradle.kts +++ b/core/datastore/build.gradle.kts @@ -15,10 +15,9 @@ */ plugins { - id("nowinandroid.android.library") - id("nowinandroid.android.library.jacoco") - id("nowinandroid.android.hilt") - alias(libs.plugins.protobuf) + alias(libs.plugins.nowinandroid.android.library) + alias(libs.plugins.nowinandroid.android.library.jacoco) + alias(libs.plugins.nowinandroid.hilt) } android { @@ -33,39 +32,13 @@ android { } } -// Setup protobuf configuration, generating lite Java and Kotlin classes -protobuf { - protoc { - artifact = libs.protobuf.protoc.get().toString() - } - generateProtoTasks { - all().forEach { task -> - task.builtins { - register("java") { - option("lite") - } - register("kotlin") { - option("lite") - } - } - } - } -} - -androidComponents.beforeVariants { - android.sourceSets.register(it.name) { - java.srcDir(buildDir.resolve("generated/source/proto/${it.name}/java")) - kotlin.srcDir(buildDir.resolve("generated/source/proto/${it.name}/kotlin")) - } -} - dependencies { - implementation(project(":core:common")) - implementation(project(":core:model")) - implementation(libs.androidx.dataStore.core) - implementation(libs.kotlinx.coroutines.android) - implementation(libs.protobuf.kotlin.lite) + api(libs.androidx.dataStore) + api(projects.core.datastoreProto) + api(projects.core.model) + + implementation(projects.core.common) - testImplementation(project(":core:datastore-test")) - testImplementation(project(":core:testing")) + testImplementation(projects.core.datastoreTest) + testImplementation(libs.kotlinx.coroutines.test) } diff --git a/core/datastore/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/ChangeListVersions.kt b/core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/ChangeListVersions.kt similarity index 100% rename from core/datastore/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/ChangeListVersions.kt rename to core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/ChangeListVersions.kt diff --git a/core/datastore/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/IntToStringIdsMigration.kt b/core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/IntToStringIdsMigration.kt similarity index 95% rename from core/datastore/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/IntToStringIdsMigration.kt rename to core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/IntToStringIdsMigration.kt index 98632c652..ef9c1dd03 100644 --- a/core/datastore/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/IntToStringIdsMigration.kt +++ b/core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/IntToStringIdsMigration.kt @@ -21,7 +21,7 @@ import androidx.datastore.core.DataMigration /** * Migrates saved ids from [Int] to [String] types */ -object IntToStringIdsMigration : DataMigration { +internal object IntToStringIdsMigration : DataMigration { override suspend fun cleanUp() = Unit diff --git a/core/datastore/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/ListToMapMigration.kt b/core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/ListToMapMigration.kt similarity index 93% rename from core/datastore/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/ListToMapMigration.kt rename to core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/ListToMapMigration.kt index 5bff23340..5675aee05 100644 --- a/core/datastore/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/ListToMapMigration.kt +++ b/core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/ListToMapMigration.kt @@ -21,7 +21,7 @@ import androidx.datastore.core.DataMigration /** * Migrates from using lists to maps for user data. */ -object ListToMapMigration : DataMigration { +internal object ListToMapMigration : DataMigration { override suspend fun cleanUp() = Unit @@ -52,7 +52,6 @@ object ListToMapMigration : DataMigration { hasDoneListToMapMigration = true } - override suspend fun shouldMigrate(currentData: UserPreferences): Boolean { - return !currentData.hasDoneListToMapMigration - } + override suspend fun shouldMigrate(currentData: UserPreferences): Boolean = + !currentData.hasDoneListToMapMigration } diff --git a/core/datastore/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource.kt b/core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource.kt similarity index 95% rename from core/datastore/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource.kt rename to core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource.kt index 6e2be2808..9a76a75a1 100644 --- a/core/datastore/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource.kt +++ b/core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSource.kt @@ -73,7 +73,7 @@ class NiaPreferencesDataSource @Inject constructor( } } - suspend fun toggleFollowedTopicId(topicId: String, followed: Boolean) { + suspend fun setTopicIdFollowed(topicId: String, followed: Boolean) { try { userPreferences.updateData { it.copy { @@ -103,9 +103,7 @@ class NiaPreferencesDataSource @Inject constructor( suspend fun setDynamicColorPreference(useDynamicColor: Boolean) { userPreferences.updateData { - it.copy { - this.useDynamicColor = useDynamicColor - } + it.copy { this.useDynamicColor = useDynamicColor } } } @@ -122,7 +120,7 @@ class NiaPreferencesDataSource @Inject constructor( } } - suspend fun toggleNewsResourceBookmark(newsResourceId: String, bookmarked: Boolean) { + suspend fun setNewsResourceBookmarked(newsResourceId: String, bookmarked: Boolean) { try { userPreferences.updateData { it.copy { @@ -190,9 +188,7 @@ class NiaPreferencesDataSource @Inject constructor( suspend fun setShouldHideOnboarding(shouldHideOnboarding: Boolean) { userPreferences.updateData { - it.copy { - this.shouldHideOnboarding = shouldHideOnboarding - } + it.copy { this.shouldHideOnboarding = shouldHideOnboarding } } } } diff --git a/core/datastore/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/UserPreferencesSerializer.kt b/core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/UserPreferencesSerializer.kt similarity index 100% rename from core/datastore/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/UserPreferencesSerializer.kt rename to core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/UserPreferencesSerializer.kt diff --git a/core/datastore/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/di/DataStoreModule.kt b/core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/di/DataStoreModule.kt similarity index 97% rename from core/datastore/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/di/DataStoreModule.kt rename to core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/di/DataStoreModule.kt index ac9eaf767..8e0d7d4d8 100644 --- a/core/datastore/src/main/java/com/google/samples/apps/nowinandroid/core/datastore/di/DataStoreModule.kt +++ b/core/datastore/src/main/kotlin/com/google/samples/apps/nowinandroid/core/datastore/di/DataStoreModule.kt @@ -41,7 +41,7 @@ object DataStoreModule { @Provides @Singleton - fun providesUserPreferencesDataStore( + internal fun providesUserPreferencesDataStore( @ApplicationContext context: Context, @Dispatcher(IO) ioDispatcher: CoroutineDispatcher, @ApplicationScope scope: CoroutineScope, diff --git a/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/IntToStringIdsMigrationTest.kt b/core/datastore/src/test/kotlin/com/google/samples/apps/nowinandroid/core/datastore/IntToStringIdsMigrationTest.kt similarity index 100% rename from core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/IntToStringIdsMigrationTest.kt rename to core/datastore/src/test/kotlin/com/google/samples/apps/nowinandroid/core/datastore/IntToStringIdsMigrationTest.kt diff --git a/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/ListToMapMigrationTest.kt b/core/datastore/src/test/kotlin/com/google/samples/apps/nowinandroid/core/datastore/ListToMapMigrationTest.kt similarity index 100% rename from core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/ListToMapMigrationTest.kt rename to core/datastore/src/test/kotlin/com/google/samples/apps/nowinandroid/core/datastore/ListToMapMigrationTest.kt diff --git a/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSourceTest.kt b/core/datastore/src/test/kotlin/com/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSourceTest.kt similarity index 87% rename from core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSourceTest.kt rename to core/datastore/src/test/kotlin/com/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSourceTest.kt index b865aa431..433bbb5ea 100644 --- a/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSourceTest.kt +++ b/core/datastore/src/test/kotlin/com/google/samples/apps/nowinandroid/core/datastore/NiaPreferencesDataSourceTest.kt @@ -16,15 +16,13 @@ package com.google.samples.apps.nowinandroid.core.datastore -import com.google.samples.apps.nowinandroid.core.datastore.test.testUserPreferencesDataStore +import com.google.samples.apps.nowinandroid.core.datastore.test.InMemoryDataStore import kotlinx.coroutines.flow.first import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.UnconfinedTestDispatcher import kotlinx.coroutines.test.runTest import org.junit.Before -import org.junit.Rule import org.junit.Test -import org.junit.rules.TemporaryFolder import kotlin.test.assertFalse import kotlin.test.assertTrue @@ -34,14 +32,9 @@ class NiaPreferencesDataSourceTest { private lateinit var subject: NiaPreferencesDataSource - @get:Rule - val tmpFolder: TemporaryFolder = TemporaryFolder.builder().assureDeletion().build() - @Before fun setup() { - subject = NiaPreferencesDataSource( - tmpFolder.testUserPreferencesDataStore(testScope), - ) + subject = NiaPreferencesDataSource(InMemoryDataStore(UserPreferences.getDefaultInstance())) } @Test @@ -59,11 +52,11 @@ class NiaPreferencesDataSourceTest { fun userShouldHideOnboarding_unfollowsLastTopic_shouldHideOnboardingIsFalse() = testScope.runTest { // Given: user completes onboarding by selecting a single topic. - subject.toggleFollowedTopicId("1", true) + subject.setTopicIdFollowed("1", true) subject.setShouldHideOnboarding(true) // When: they unfollow that topic. - subject.toggleFollowedTopicId("1", false) + subject.setTopicIdFollowed("1", false) // Then: onboarding should be shown again assertFalse(subject.userData.first().shouldHideOnboarding) diff --git a/core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/UserPreferencesSerializerTest.kt b/core/datastore/src/test/kotlin/com/google/samples/apps/nowinandroid/core/datastore/UserPreferencesSerializerTest.kt similarity index 100% rename from core/datastore/src/test/java/com/google/samples/apps/nowinandroid/core/datastore/UserPreferencesSerializerTest.kt rename to core/datastore/src/test/kotlin/com/google/samples/apps/nowinandroid/core/datastore/UserPreferencesSerializerTest.kt diff --git a/core/designsystem/README.md b/core/designsystem/README.md index 52a793821..d1778cb14 100644 --- a/core/designsystem/README.md +++ b/core/designsystem/README.md @@ -1,3 +1,3 @@ # :core:designsystem module - -![Dependency graph](../../docs/images/graphs/dep_graph_core_designsystem.png) +## Dependency graph +![Dependency graph](../../docs/images/graphs/dep_graph_core_designsystem.svg) diff --git a/core/designsystem/build.gradle.kts b/core/designsystem/build.gradle.kts index cf9873e2c..31635865c 100644 --- a/core/designsystem/build.gradle.kts +++ b/core/designsystem/build.gradle.kts @@ -14,9 +14,10 @@ * limitations under the License. */ plugins { - id("nowinandroid.android.library") - id("nowinandroid.android.library.compose") - id("nowinandroid.android.library.jacoco") + alias(libs.plugins.nowinandroid.android.library) + alias(libs.plugins.nowinandroid.android.library.compose) + alias(libs.plugins.nowinandroid.android.library.jacoco) + alias(libs.plugins.roborazzi) } android { @@ -27,20 +28,25 @@ android { } dependencies { - lintPublish(project(":lint")) + lintPublish(projects.lint) api(libs.androidx.compose.foundation) api(libs.androidx.compose.foundation.layout) api(libs.androidx.compose.material.iconsExtended) api(libs.androidx.compose.material3) + api(libs.androidx.compose.material3.adaptive) + api(libs.androidx.compose.material3.navigationSuite) api(libs.androidx.compose.runtime) - api(libs.androidx.compose.ui.tooling.preview) api(libs.androidx.compose.ui.util) - debugApi(libs.androidx.compose.ui.tooling) - - implementation(libs.androidx.core.ktx) implementation(libs.coil.kt.compose) - androidTestImplementation(project(":core:testing")) + testImplementation(libs.androidx.compose.ui.test) + testImplementation(libs.androidx.compose.ui.testManifest) + + testImplementation(libs.hilt.android.testing) + testImplementation(libs.robolectric) + testImplementation(projects.core.screenshotTesting) + + androidTestImplementation(libs.bundles.androidx.compose.ui.test) } diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Navigation.kt b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Navigation.kt deleted file mode 100644 index 624cf25ac..000000000 --- a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Navigation.kt +++ /dev/null @@ -1,176 +0,0 @@ -/* - * Copyright 2022 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.samples.apps.nowinandroid.core.designsystem.component - -import androidx.compose.foundation.layout.ColumnScope -import androidx.compose.foundation.layout.RowScope -import androidx.compose.material3.MaterialTheme -import androidx.compose.material3.NavigationBar -import androidx.compose.material3.NavigationBarItem -import androidx.compose.material3.NavigationBarItemDefaults -import androidx.compose.material3.NavigationRail -import androidx.compose.material3.NavigationRailItem -import androidx.compose.material3.NavigationRailItemDefaults -import androidx.compose.runtime.Composable -import androidx.compose.ui.Modifier -import androidx.compose.ui.graphics.Color -import androidx.compose.ui.unit.dp - -/** - * Now in Android navigation bar item with icon and label content slots. Wraps Material 3 - * [NavigationBarItem]. - * - * @param selected Whether this item is selected. - * @param onClick The callback to be invoked when this item is selected. - * @param icon The item icon content. - * @param modifier Modifier to be applied to this item. - * @param selectedIcon The item icon content when selected. - * @param enabled controls the enabled state of this item. When `false`, this item will not be - * clickable and will appear disabled to accessibility services. - * @param label The item text label content. - * @param alwaysShowLabel Whether to always show the label for this item. If false, the label will - * only be shown when this item is selected. - */ -@Composable -fun RowScope.NiaNavigationBarItem( - selected: Boolean, - onClick: () -> Unit, - icon: @Composable () -> Unit, - modifier: Modifier = Modifier, - selectedIcon: @Composable () -> Unit = icon, - enabled: Boolean = true, - label: @Composable (() -> Unit)? = null, - alwaysShowLabel: Boolean = true, -) { - NavigationBarItem( - selected = selected, - onClick = onClick, - icon = if (selected) selectedIcon else icon, - modifier = modifier, - enabled = enabled, - label = label, - alwaysShowLabel = alwaysShowLabel, - colors = NavigationBarItemDefaults.colors( - selectedIconColor = NiaNavigationDefaults.navigationSelectedItemColor(), - unselectedIconColor = NiaNavigationDefaults.navigationContentColor(), - selectedTextColor = NiaNavigationDefaults.navigationSelectedItemColor(), - unselectedTextColor = NiaNavigationDefaults.navigationContentColor(), - indicatorColor = NiaNavigationDefaults.navigationIndicatorColor(), - ), - ) -} - -/** - * Now in Android navigation bar with content slot. Wraps Material 3 [NavigationBar]. - * - * @param modifier Modifier to be applied to the navigation bar. - * @param content Destinations inside the navigation bar. This should contain multiple - * [NavigationBarItem]s. - */ -@Composable -fun NiaNavigationBar( - modifier: Modifier = Modifier, - content: @Composable RowScope.() -> Unit, -) { - NavigationBar( - modifier = modifier, - contentColor = NiaNavigationDefaults.navigationContentColor(), - tonalElevation = 0.dp, - content = content, - ) -} - -/** - * Now in Android navigation rail item with icon and label content slots. Wraps Material 3 - * [NavigationRailItem]. - * - * @param selected Whether this item is selected. - * @param onClick The callback to be invoked when this item is selected. - * @param icon The item icon content. - * @param modifier Modifier to be applied to this item. - * @param selectedIcon The item icon content when selected. - * @param enabled controls the enabled state of this item. When `false`, this item will not be - * clickable and will appear disabled to accessibility services. - * @param label The item text label content. - * @param alwaysShowLabel Whether to always show the label for this item. If false, the label will - * only be shown when this item is selected. - */ -@Composable -fun NiaNavigationRailItem( - selected: Boolean, - onClick: () -> Unit, - icon: @Composable () -> Unit, - modifier: Modifier = Modifier, - selectedIcon: @Composable () -> Unit = icon, - enabled: Boolean = true, - label: @Composable (() -> Unit)? = null, - alwaysShowLabel: Boolean = true, -) { - NavigationRailItem( - selected = selected, - onClick = onClick, - icon = if (selected) selectedIcon else icon, - modifier = modifier, - enabled = enabled, - label = label, - alwaysShowLabel = alwaysShowLabel, - colors = NavigationRailItemDefaults.colors( - selectedIconColor = NiaNavigationDefaults.navigationSelectedItemColor(), - unselectedIconColor = NiaNavigationDefaults.navigationContentColor(), - selectedTextColor = NiaNavigationDefaults.navigationSelectedItemColor(), - unselectedTextColor = NiaNavigationDefaults.navigationContentColor(), - indicatorColor = NiaNavigationDefaults.navigationIndicatorColor(), - ), - ) -} - -/** - * Now in Android navigation rail with header and content slots. Wraps Material 3 [NavigationRail]. - * - * @param modifier Modifier to be applied to the navigation rail. - * @param header Optional header that may hold a floating action button or a logo. - * @param content Destinations inside the navigation rail. This should contain multiple - * [NavigationRailItem]s. - */ -@Composable -fun NiaNavigationRail( - modifier: Modifier = Modifier, - header: @Composable (ColumnScope.() -> Unit)? = null, - content: @Composable ColumnScope.() -> Unit, -) { - NavigationRail( - modifier = modifier, - containerColor = Color.Transparent, - contentColor = NiaNavigationDefaults.navigationContentColor(), - header = header, - content = content, - ) -} - -/** - * Now in Android navigation default values. - */ -object NiaNavigationDefaults { - @Composable - fun navigationContentColor() = MaterialTheme.colorScheme.onSurfaceVariant - - @Composable - fun navigationSelectedItemColor() = MaterialTheme.colorScheme.onPrimaryContainer - - @Composable - fun navigationIndicatorColor() = MaterialTheme.colorScheme.primaryContainer -} diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/ScrollbarExt.kt b/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/ScrollbarExt.kt deleted file mode 100644 index 26f0bb2ae..000000000 --- a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/ScrollbarExt.kt +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright 2021 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.samples.apps.nowinandroid.core.designsystem.component.scrollbar - -import androidx.compose.foundation.gestures.Orientation -import androidx.compose.foundation.lazy.LazyListItemInfo -import androidx.compose.foundation.lazy.LazyListState -import androidx.compose.foundation.lazy.grid.LazyGridItemInfo -import androidx.compose.foundation.lazy.grid.LazyGridState -import androidx.compose.runtime.Composable - -/** - * Calculates a [ScrollbarState] driven by the changes in a [LazyListState]. - * - * @param itemsAvailable the total amount of items available to scroll in the lazy list. - * @param itemIndex a lookup function for index of an item in the list relative to [itemsAvailable]. - */ -@Composable -fun LazyListState.scrollbarState( - itemsAvailable: Int, - itemIndex: (LazyListItemInfo) -> Int = LazyListItemInfo::index, -): ScrollbarState = - scrollbarState( - itemsAvailable = itemsAvailable, - visibleItems = { layoutInfo.visibleItemsInfo }, - firstVisibleItemIndex = { visibleItems -> - interpolateFirstItemIndex( - visibleItems = visibleItems, - itemSize = { it.size }, - offset = { it.offset }, - nextItemOnMainAxis = { first -> visibleItems.find { it != first } }, - itemIndex = itemIndex, - ) - }, - itemPercentVisible = itemPercentVisible@{ itemInfo -> - itemVisibilityPercentage( - itemSize = itemInfo.size, - itemStartOffset = itemInfo.offset, - viewportStartOffset = layoutInfo.viewportStartOffset, - viewportEndOffset = layoutInfo.viewportEndOffset, - ) - }, - reverseLayout = { layoutInfo.reverseLayout }, - ) - -/** - * Calculates a [ScrollbarState] driven by the changes in a [LazyGridState] - * - * @param itemsAvailable the total amount of items available to scroll in the grid. - * @param itemIndex a lookup function for index of an item in the grid relative to [itemsAvailable]. - */ -@Composable -fun LazyGridState.scrollbarState( - itemsAvailable: Int, - itemIndex: (LazyGridItemInfo) -> Int = LazyGridItemInfo::index, -): ScrollbarState = - scrollbarState( - itemsAvailable = itemsAvailable, - visibleItems = { layoutInfo.visibleItemsInfo }, - firstVisibleItemIndex = { visibleItems -> - interpolateFirstItemIndex( - visibleItems = visibleItems, - itemSize = { - layoutInfo.orientation.valueOf(it.size) - }, - offset = { layoutInfo.orientation.valueOf(it.offset) }, - nextItemOnMainAxis = { first -> - when (layoutInfo.orientation) { - Orientation.Vertical -> visibleItems.find { - it != first && it.row != first.row - } - - Orientation.Horizontal -> visibleItems.find { - it != first && it.column != first.column - } - } - }, - itemIndex = itemIndex, - ) - }, - itemPercentVisible = itemPercentVisible@{ itemInfo -> - itemVisibilityPercentage( - itemSize = layoutInfo.orientation.valueOf(itemInfo.size), - itemStartOffset = layoutInfo.orientation.valueOf(itemInfo.offset), - viewportStartOffset = layoutInfo.viewportStartOffset, - viewportEndOffset = layoutInfo.viewportEndOffset, - ) - }, - reverseLayout = { layoutInfo.reverseLayout }, - ) diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Background.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/Background.kt similarity index 100% rename from core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Background.kt rename to core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/Background.kt diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Button.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/Button.kt similarity index 87% rename from core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Button.kt rename to core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/Button.kt index e4b437dfe..795c88d72 100644 --- a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Button.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/Button.kt @@ -21,15 +21,20 @@ import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.RowScope import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.sizeIn import androidx.compose.material3.Button import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.OutlinedButton +import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp +import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons +import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme /** * Now in Android filled button with generic content slot. Wraps Material 3 [Button]. @@ -129,7 +134,7 @@ fun NiaOutlinedButton( MaterialTheme.colorScheme.outline } else { MaterialTheme.colorScheme.onSurface.copy( - alpha = NiaButtonDefaults.DisabledOutlinedButtonBorderAlpha, + alpha = NiaButtonDefaults.DISABLED_OUTLINED_BUTTON_BORDER_ALPHA, ) }, ), @@ -260,13 +265,47 @@ private fun NiaButtonContent( } } +@ThemePreviews +@Composable +fun NiaButtonPreview() { + NiaTheme { + NiaBackground(modifier = Modifier.size(150.dp, 50.dp)) { + NiaButton(onClick = {}, text = { Text("Test button") }) + } + } +} + +@ThemePreviews +@Composable +fun NiaOutlinedButtonPreview() { + NiaTheme { + NiaBackground(modifier = Modifier.size(150.dp, 50.dp)) { + NiaOutlinedButton(onClick = {}, text = { Text("Test button") }) + } + } +} + +@ThemePreviews +@Composable +fun NiaButtonLeadingIconPreview() { + NiaTheme { + NiaBackground(modifier = Modifier.size(150.dp, 50.dp)) { + NiaButton( + onClick = {}, + text = { Text("Test button") }, + leadingIcon = { Icon(imageVector = NiaIcons.Add, contentDescription = null) }, + ) + } + } +} + /** * Now in Android button default values. */ object NiaButtonDefaults { // TODO: File bug // OutlinedButton border color doesn't respect disabled state by default - const val DisabledOutlinedButtonBorderAlpha = 0.12f + const val DISABLED_OUTLINED_BUTTON_BORDER_ALPHA = 0.12f // TODO: File bug // OutlinedButton default border width isn't exposed via ButtonDefaults diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Chip.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/Chip.kt similarity index 80% rename from core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Chip.kt rename to core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/Chip.kt index b291b3fa1..fe34cfaed 100644 --- a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Chip.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/Chip.kt @@ -16,18 +16,20 @@ package com.google.samples.apps.nowinandroid.core.designsystem.component +import androidx.compose.foundation.layout.size import androidx.compose.foundation.shape.CircleShape -import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.FilterChip import androidx.compose.material3.FilterChipDefaults import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ProvideTextStyle +import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.unit.dp import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons +import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme /** * Now in Android filter chip with included leading checked icon as well as text content slot. @@ -40,7 +42,6 @@ import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons * @param label The text label content. */ @Composable -@OptIn(ExperimentalMaterial3Api::class) fun NiaFilterChip( selected: Boolean, onSelectedChange: (Boolean) -> Unit, @@ -70,13 +71,15 @@ fun NiaFilterChip( }, shape = CircleShape, border = FilterChipDefaults.filterChipBorder( + enabled = enabled, + selected = selected, borderColor = MaterialTheme.colorScheme.onBackground, selectedBorderColor = MaterialTheme.colorScheme.onBackground, disabledBorderColor = MaterialTheme.colorScheme.onBackground.copy( - alpha = NiaChipDefaults.DisabledChipContentAlpha, + alpha = NiaChipDefaults.DISABLED_CHIP_CONTENT_ALPHA, ), disabledSelectedBorderColor = MaterialTheme.colorScheme.onBackground.copy( - alpha = NiaChipDefaults.DisabledChipContentAlpha, + alpha = NiaChipDefaults.DISABLED_CHIP_CONTENT_ALPHA, ), selectedBorderWidth = NiaChipDefaults.ChipBorderWidth, ), @@ -85,16 +88,16 @@ fun NiaFilterChip( iconColor = MaterialTheme.colorScheme.onBackground, disabledContainerColor = if (selected) { MaterialTheme.colorScheme.onBackground.copy( - alpha = NiaChipDefaults.DisabledChipContainerAlpha, + alpha = NiaChipDefaults.DISABLED_CHIP_CONTAINER_ALPHA, ) } else { Color.Transparent }, disabledLabelColor = MaterialTheme.colorScheme.onBackground.copy( - alpha = NiaChipDefaults.DisabledChipContentAlpha, + alpha = NiaChipDefaults.DISABLED_CHIP_CONTENT_ALPHA, ), disabledLeadingIconColor = MaterialTheme.colorScheme.onBackground.copy( - alpha = NiaChipDefaults.DisabledChipContentAlpha, + alpha = NiaChipDefaults.DISABLED_CHIP_CONTENT_ALPHA, ), selectedContainerColor = MaterialTheme.colorScheme.primaryContainer, selectedLabelColor = MaterialTheme.colorScheme.onBackground, @@ -103,13 +106,25 @@ fun NiaFilterChip( ) } +@ThemePreviews +@Composable +fun ChipPreview() { + NiaTheme { + NiaBackground(modifier = Modifier.size(80.dp, 20.dp)) { + NiaFilterChip(selected = true, onSelectedChange = {}) { + Text("Chip") + } + } + } +} + /** * Now in Android chip default values. */ object NiaChipDefaults { // TODO: File bug // FilterChip default values aren't exposed via FilterChipDefaults - const val DisabledChipContainerAlpha = 0.12f - const val DisabledChipContentAlpha = 0.38f + const val DISABLED_CHIP_CONTAINER_ALPHA = 0.12f + const val DISABLED_CHIP_CONTENT_ALPHA = 0.38f val ChipBorderWidth = 1.dp } diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/DynamicAsyncImage.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/DynamicAsyncImage.kt similarity index 92% rename from core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/DynamicAsyncImage.kt rename to core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/DynamicAsyncImage.kt index cc352107b..1557cac06 100644 --- a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/DynamicAsyncImage.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/DynamicAsyncImage.kt @@ -28,6 +28,7 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color.Companion.Unspecified import androidx.compose.ui.graphics.ColorFilter import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.layout.ContentScale @@ -49,7 +50,7 @@ fun DynamicAsyncImage( imageUrl: String, contentDescription: String?, modifier: Modifier = Modifier, - placeholder: Painter = painterResource(R.drawable.ic_placeholder_default), + placeholder: Painter = painterResource(R.drawable.core_designsystem_ic_placeholder_default), ) { val iconTint = LocalTintTheme.current.iconTint var isLoading by remember { mutableStateOf(true) } @@ -79,7 +80,7 @@ fun DynamicAsyncImage( contentScale = ContentScale.Crop, painter = if (isError.not() && !isLocalInspection) imageLoader else placeholder, contentDescription = contentDescription, - colorFilter = if (iconTint != null) ColorFilter.tint(iconTint) else null, + colorFilter = if (iconTint != Unspecified) ColorFilter.tint(iconTint) else null, ) } } diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/IconButton.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/IconButton.kt similarity index 66% rename from core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/IconButton.kt rename to core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/IconButton.kt index b0dda0af1..43ec11f0b 100644 --- a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/IconButton.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/IconButton.kt @@ -17,12 +17,15 @@ package com.google.samples.apps.nowinandroid.core.designsystem.component import androidx.compose.material3.FilledIconToggleButton +import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.IconButtonDefaults import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons +import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme /** * Now in Android toggle button with icon and checked icon content slots. Wraps Material 3 @@ -57,7 +60,7 @@ fun NiaIconToggleButton( checkedContentColor = MaterialTheme.colorScheme.onPrimaryContainer, disabledContainerColor = if (checked) { MaterialTheme.colorScheme.onBackground.copy( - alpha = NiaIconButtonDefaults.DisabledIconButtonContainerAlpha, + alpha = NiaIconButtonDefaults.DISABLED_ICON_BUTTON_CONTAINER_ALPHA, ) } else { Color.Transparent @@ -68,11 +71,57 @@ fun NiaIconToggleButton( } } +@ThemePreviews +@Composable +fun IconButtonPreview() { + NiaTheme { + NiaIconToggleButton( + checked = true, + onCheckedChange = { }, + icon = { + Icon( + imageVector = NiaIcons.BookmarkBorder, + contentDescription = null, + ) + }, + checkedIcon = { + Icon( + imageVector = NiaIcons.Bookmark, + contentDescription = null, + ) + }, + ) + } +} + +@ThemePreviews +@Composable +fun IconButtonPreviewUnchecked() { + NiaTheme { + NiaIconToggleButton( + checked = false, + onCheckedChange = { }, + icon = { + Icon( + imageVector = NiaIcons.BookmarkBorder, + contentDescription = null, + ) + }, + checkedIcon = { + Icon( + imageVector = NiaIcons.Bookmark, + contentDescription = null, + ) + }, + ) + } +} + /** * Now in Android icon button default values. */ object NiaIconButtonDefaults { // TODO: File bug // IconToggleButton disabled container alpha not exposed by IconButtonDefaults - const val DisabledIconButtonContainerAlpha = 0.12f + const val DISABLED_ICON_BUTTON_CONTAINER_ALPHA = 0.12f } diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheel.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheel.kt similarity index 99% rename from core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheel.kt rename to core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheel.kt index 10ef1bfce..ca168b4be 100644 --- a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheel.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/LoadingWheel.kt @@ -88,6 +88,7 @@ fun NiaLoadingWheel( // Specifies the color animation for the base-to-progress line color change val baseLineColor = MaterialTheme.colorScheme.onBackground val progressLineColor = MaterialTheme.colorScheme.inversePrimary + val colorAnimValues = (0 until NUM_OF_LINES).map { index -> infiniteTransition.animateColor( initialValue = baseLineColor, @@ -95,8 +96,8 @@ fun NiaLoadingWheel( animationSpec = infiniteRepeatable( animation = keyframes { durationMillis = ROTATION_TIME / 2 - progressLineColor at ROTATION_TIME / NUM_OF_LINES / 2 with LinearEasing - baseLineColor at ROTATION_TIME / NUM_OF_LINES with LinearEasing + progressLineColor at ROTATION_TIME / NUM_OF_LINES / 2 using LinearEasing + baseLineColor at ROTATION_TIME / NUM_OF_LINES using LinearEasing }, repeatMode = RepeatMode.Restart, initialStartOffset = StartOffset(ROTATION_TIME / NUM_OF_LINES / 2 * index), diff --git a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/Navigation.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/Navigation.kt new file mode 100644 index 000000000..4ac19b482 --- /dev/null +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/Navigation.kt @@ -0,0 +1,365 @@ +/* + * Copyright 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.core.designsystem.component + +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.NavigationBar +import androidx.compose.material3.NavigationBarItem +import androidx.compose.material3.NavigationBarItemDefaults +import androidx.compose.material3.NavigationDrawerItemDefaults +import androidx.compose.material3.NavigationRail +import androidx.compose.material3.NavigationRailItem +import androidx.compose.material3.NavigationRailItemDefaults +import androidx.compose.material3.Text +import androidx.compose.material3.adaptive.ExperimentalMaterial3AdaptiveApi +import androidx.compose.material3.adaptive.WindowAdaptiveInfo +import androidx.compose.material3.adaptive.currentWindowAdaptiveInfo +import androidx.compose.material3.adaptive.navigationsuite.ExperimentalMaterial3AdaptiveNavigationSuiteApi +import androidx.compose.material3.adaptive.navigationsuite.NavigationSuiteDefaults +import androidx.compose.material3.adaptive.navigationsuite.NavigationSuiteItemColors +import androidx.compose.material3.adaptive.navigationsuite.NavigationSuiteScaffold +import androidx.compose.material3.adaptive.navigationsuite.NavigationSuiteScaffoldDefaults +import androidx.compose.material3.adaptive.navigationsuite.NavigationSuiteScope +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.dp +import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons +import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme + +/** + * Now in Android navigation bar item with icon and label content slots. Wraps Material 3 + * [NavigationBarItem]. + * + * @param selected Whether this item is selected. + * @param onClick The callback to be invoked when this item is selected. + * @param icon The item icon content. + * @param modifier Modifier to be applied to this item. + * @param selectedIcon The item icon content when selected. + * @param enabled controls the enabled state of this item. When `false`, this item will not be + * clickable and will appear disabled to accessibility services. + * @param label The item text label content. + * @param alwaysShowLabel Whether to always show the label for this item. If false, the label will + * only be shown when this item is selected. + */ +@Composable +fun RowScope.NiaNavigationBarItem( + selected: Boolean, + onClick: () -> Unit, + modifier: Modifier = Modifier, + enabled: Boolean = true, + alwaysShowLabel: Boolean = true, + icon: @Composable () -> Unit, + selectedIcon: @Composable () -> Unit = icon, + label: @Composable (() -> Unit)? = null, +) { + NavigationBarItem( + selected = selected, + onClick = onClick, + icon = if (selected) selectedIcon else icon, + modifier = modifier, + enabled = enabled, + label = label, + alwaysShowLabel = alwaysShowLabel, + colors = NavigationBarItemDefaults.colors( + selectedIconColor = NiaNavigationDefaults.navigationSelectedItemColor(), + unselectedIconColor = NiaNavigationDefaults.navigationContentColor(), + selectedTextColor = NiaNavigationDefaults.navigationSelectedItemColor(), + unselectedTextColor = NiaNavigationDefaults.navigationContentColor(), + indicatorColor = NiaNavigationDefaults.navigationIndicatorColor(), + ), + ) +} + +/** + * Now in Android navigation bar with content slot. Wraps Material 3 [NavigationBar]. + * + * @param modifier Modifier to be applied to the navigation bar. + * @param content Destinations inside the navigation bar. This should contain multiple + * [NavigationBarItem]s. + */ +@Composable +fun NiaNavigationBar( + modifier: Modifier = Modifier, + content: @Composable RowScope.() -> Unit, +) { + NavigationBar( + modifier = modifier, + contentColor = NiaNavigationDefaults.navigationContentColor(), + tonalElevation = 0.dp, + content = content, + ) +} + +/** + * Now in Android navigation rail item with icon and label content slots. Wraps Material 3 + * [NavigationRailItem]. + * + * @param selected Whether this item is selected. + * @param onClick The callback to be invoked when this item is selected. + * @param icon The item icon content. + * @param modifier Modifier to be applied to this item. + * @param selectedIcon The item icon content when selected. + * @param enabled controls the enabled state of this item. When `false`, this item will not be + * clickable and will appear disabled to accessibility services. + * @param label The item text label content. + * @param alwaysShowLabel Whether to always show the label for this item. If false, the label will + * only be shown when this item is selected. + */ +@Composable +fun NiaNavigationRailItem( + selected: Boolean, + onClick: () -> Unit, + modifier: Modifier = Modifier, + enabled: Boolean = true, + alwaysShowLabel: Boolean = true, + icon: @Composable () -> Unit, + selectedIcon: @Composable () -> Unit = icon, + label: @Composable (() -> Unit)? = null, +) { + NavigationRailItem( + selected = selected, + onClick = onClick, + icon = if (selected) selectedIcon else icon, + modifier = modifier, + enabled = enabled, + label = label, + alwaysShowLabel = alwaysShowLabel, + colors = NavigationRailItemDefaults.colors( + selectedIconColor = NiaNavigationDefaults.navigationSelectedItemColor(), + unselectedIconColor = NiaNavigationDefaults.navigationContentColor(), + selectedTextColor = NiaNavigationDefaults.navigationSelectedItemColor(), + unselectedTextColor = NiaNavigationDefaults.navigationContentColor(), + indicatorColor = NiaNavigationDefaults.navigationIndicatorColor(), + ), + ) +} + +/** + * Now in Android navigation rail with header and content slots. Wraps Material 3 [NavigationRail]. + * + * @param modifier Modifier to be applied to the navigation rail. + * @param header Optional header that may hold a floating action button or a logo. + * @param content Destinations inside the navigation rail. This should contain multiple + * [NavigationRailItem]s. + */ +@Composable +fun NiaNavigationRail( + modifier: Modifier = Modifier, + header: @Composable (ColumnScope.() -> Unit)? = null, + content: @Composable ColumnScope.() -> Unit, +) { + NavigationRail( + modifier = modifier, + containerColor = Color.Transparent, + contentColor = NiaNavigationDefaults.navigationContentColor(), + header = header, + content = content, + ) +} + +/** + * Now in Android navigation suite scaffold with item and content slots. + * Wraps Material 3 [NavigationSuiteScaffold]. + * + * @param modifier Modifier to be applied to the navigation suite scaffold. + * @param navigationSuiteItems A slot to display multiple items via [NiaNavigationSuiteScope]. + * @param windowAdaptiveInfo The window adaptive info. + * @param content The app content inside the scaffold. + */ +@OptIn( + ExperimentalMaterial3AdaptiveNavigationSuiteApi::class, + ExperimentalMaterial3AdaptiveApi::class, +) +@Composable +fun NiaNavigationSuiteScaffold( + navigationSuiteItems: NiaNavigationSuiteScope.() -> Unit, + modifier: Modifier = Modifier, + windowAdaptiveInfo: WindowAdaptiveInfo = currentWindowAdaptiveInfo(), + content: @Composable () -> Unit, +) { + val layoutType = NavigationSuiteScaffoldDefaults + .calculateFromAdaptiveInfo(windowAdaptiveInfo) + val navigationSuiteItemColors = NavigationSuiteItemColors( + navigationBarItemColors = NavigationBarItemDefaults.colors( + selectedIconColor = NiaNavigationDefaults.navigationSelectedItemColor(), + unselectedIconColor = NiaNavigationDefaults.navigationContentColor(), + selectedTextColor = NiaNavigationDefaults.navigationSelectedItemColor(), + unselectedTextColor = NiaNavigationDefaults.navigationContentColor(), + indicatorColor = NiaNavigationDefaults.navigationIndicatorColor(), + ), + navigationRailItemColors = NavigationRailItemDefaults.colors( + selectedIconColor = NiaNavigationDefaults.navigationSelectedItemColor(), + unselectedIconColor = NiaNavigationDefaults.navigationContentColor(), + selectedTextColor = NiaNavigationDefaults.navigationSelectedItemColor(), + unselectedTextColor = NiaNavigationDefaults.navigationContentColor(), + indicatorColor = NiaNavigationDefaults.navigationIndicatorColor(), + ), + navigationDrawerItemColors = NavigationDrawerItemDefaults.colors( + selectedIconColor = NiaNavigationDefaults.navigationSelectedItemColor(), + unselectedIconColor = NiaNavigationDefaults.navigationContentColor(), + selectedTextColor = NiaNavigationDefaults.navigationSelectedItemColor(), + unselectedTextColor = NiaNavigationDefaults.navigationContentColor(), + ), + ) + + NavigationSuiteScaffold( + navigationSuiteItems = { + NiaNavigationSuiteScope( + navigationSuiteScope = this, + navigationSuiteItemColors = navigationSuiteItemColors, + ).run(navigationSuiteItems) + }, + layoutType = layoutType, + containerColor = Color.Transparent, + navigationSuiteColors = NavigationSuiteDefaults.colors( + navigationBarContentColor = NiaNavigationDefaults.navigationContentColor(), + navigationRailContainerColor = Color.Transparent, + ), + modifier = modifier, + ) { + content() + } +} + +/** + * A wrapper around [NavigationSuiteScope] to declare navigation items. + */ +@OptIn(ExperimentalMaterial3AdaptiveNavigationSuiteApi::class) +class NiaNavigationSuiteScope internal constructor( + private val navigationSuiteScope: NavigationSuiteScope, + private val navigationSuiteItemColors: NavigationSuiteItemColors, +) { + fun item( + selected: Boolean, + onClick: () -> Unit, + modifier: Modifier = Modifier, + icon: @Composable () -> Unit, + selectedIcon: @Composable () -> Unit = icon, + label: @Composable (() -> Unit)? = null, + ) = navigationSuiteScope.item( + selected = selected, + onClick = onClick, + icon = { + if (selected) { + selectedIcon() + } else { + icon() + } + }, + label = label, + colors = navigationSuiteItemColors, + modifier = modifier, + ) +} + +@ThemePreviews +@Composable +fun NiaNavigationBarPreview() { + val items = listOf("For you", "Saved", "Interests") + val icons = listOf( + NiaIcons.UpcomingBorder, + NiaIcons.BookmarksBorder, + NiaIcons.Grid3x3, + ) + val selectedIcons = listOf( + NiaIcons.Upcoming, + NiaIcons.Bookmarks, + NiaIcons.Grid3x3, + ) + + NiaTheme { + NiaNavigationBar { + items.forEachIndexed { index, item -> + NiaNavigationBarItem( + icon = { + Icon( + imageVector = icons[index], + contentDescription = item, + ) + }, + selectedIcon = { + Icon( + imageVector = selectedIcons[index], + contentDescription = item, + ) + }, + label = { Text(item) }, + selected = index == 0, + onClick = { }, + ) + } + } + } +} + +@ThemePreviews +@Composable +fun NiaNavigationRailPreview() { + val items = listOf("For you", "Saved", "Interests") + val icons = listOf( + NiaIcons.UpcomingBorder, + NiaIcons.BookmarksBorder, + NiaIcons.Grid3x3, + ) + val selectedIcons = listOf( + NiaIcons.Upcoming, + NiaIcons.Bookmarks, + NiaIcons.Grid3x3, + ) + + NiaTheme { + NiaNavigationRail { + items.forEachIndexed { index, item -> + NiaNavigationRailItem( + icon = { + Icon( + imageVector = icons[index], + contentDescription = item, + ) + }, + selectedIcon = { + Icon( + imageVector = selectedIcons[index], + contentDescription = item, + ) + }, + label = { Text(item) }, + selected = index == 0, + onClick = { }, + ) + } + } + } +} + +/** + * Now in Android navigation default values. + */ +object NiaNavigationDefaults { + @Composable + fun navigationContentColor() = MaterialTheme.colorScheme.onSurfaceVariant + + @Composable + fun navigationSelectedItemColor() = MaterialTheme.colorScheme.onPrimaryContainer + + @Composable + fun navigationIndicatorColor() = MaterialTheme.colorScheme.primaryContainer +} diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Tabs.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/Tabs.kt similarity index 84% rename from core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Tabs.kt rename to core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/Tabs.kt index ad2f3799c..74753ca9b 100644 --- a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Tabs.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/Tabs.kt @@ -24,11 +24,15 @@ import androidx.compose.material3.Tab import androidx.compose.material3.TabRow import androidx.compose.material3.TabRowDefaults import androidx.compose.material3.TabRowDefaults.tabIndicatorOffset +import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp +import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme /** * Now in Android tab. Wraps Material 3 [Tab] and shifts text label down. @@ -87,7 +91,7 @@ fun NiaTabRow( containerColor = Color.Transparent, contentColor = MaterialTheme.colorScheme.onSurface, indicator = { tabPositions -> - TabRowDefaults.Indicator( + TabRowDefaults.SecondaryIndicator( modifier = Modifier.tabIndicatorOffset(tabPositions[selectedTabIndex]), height = 2.dp, color = MaterialTheme.colorScheme.onSurface, @@ -97,6 +101,23 @@ fun NiaTabRow( ) } +@ThemePreviews +@Composable +fun TabsPreview() { + NiaTheme { + val titles = listOf("Topics", "People") + NiaTabRow(selectedTabIndex = 0) { + titles.forEachIndexed { index, title -> + NiaTab( + selected = index == 0, + onClick = { }, + text = { Text(text = title) }, + ) + } + } + } +} + object NiaTabDefaults { val TabTopPadding = 7.dp } diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Tag.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/Tag.kt similarity index 79% rename from core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Tag.kt rename to core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/Tag.kt index ba8fde1c9..290845936 100644 --- a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/Tag.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/Tag.kt @@ -20,10 +20,12 @@ import androidx.compose.foundation.layout.Box import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ProvideTextStyle +import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.material3.contentColorFor import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme @Composable fun NiaTopicTag( @@ -38,7 +40,7 @@ fun NiaTopicTag( MaterialTheme.colorScheme.primaryContainer } else { MaterialTheme.colorScheme.surfaceVariant.copy( - alpha = NiaTagDefaults.UnfollowedTopicTagContainerAlpha, + alpha = NiaTagDefaults.UNFOLLOWED_TOPIC_TAG_CONTAINER_ALPHA, ) } TextButton( @@ -48,7 +50,7 @@ fun NiaTopicTag( containerColor = containerColor, contentColor = contentColorFor(backgroundColor = containerColor), disabledContainerColor = MaterialTheme.colorScheme.onSurface.copy( - alpha = NiaTagDefaults.DisabledTopicTagContainerAlpha, + alpha = NiaTagDefaults.DISABLED_TOPIC_TAG_CONTAINER_ALPHA, ), ), ) { @@ -59,13 +61,23 @@ fun NiaTopicTag( } } +@ThemePreviews +@Composable +fun TagPreview() { + NiaTheme { + NiaTopicTag(followed = true, onClick = {}) { + Text("Topic".uppercase()) + } + } +} + /** * Now in Android tag default values. */ object NiaTagDefaults { - const val UnfollowedTopicTagContainerAlpha = 0.5f + const val UNFOLLOWED_TOPIC_TAG_CONTAINER_ALPHA = 0.5f // TODO: File bug // Button disabled container alpha value not exposed by ButtonDefaults - const val DisabledTopicTagContainerAlpha = 0.12f + const val DISABLED_TOPIC_TAG_CONTAINER_ALPHA = 0.12f } diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/TopAppBar.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/TopAppBar.kt similarity index 69% rename from core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/TopAppBar.kt rename to core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/TopAppBar.kt index 28007a3b1..f85c65677 100644 --- a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/TopAppBar.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/TopAppBar.kt @@ -34,15 +34,16 @@ import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons +import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme @OptIn(ExperimentalMaterial3Api::class) @Composable fun NiaTopAppBar( @StringRes titleRes: Int, navigationIcon: ImageVector, - navigationIconContentDescription: String?, + navigationIconContentDescription: String, actionIcon: ImageVector, - actionIconContentDescription: String?, + actionIconContentDescription: String, modifier: Modifier = Modifier, colors: TopAppBarColors = TopAppBarDefaults.centerAlignedTopAppBarColors(), onNavigationClick: () -> Unit = {}, @@ -73,44 +74,17 @@ fun NiaTopAppBar( ) } -/** - * Top app bar with action, displayed on the right - */ -@OptIn(ExperimentalMaterial3Api::class) -@Composable -fun NiaTopAppBar( - @StringRes titleRes: Int, - actionIcon: ImageVector, - actionIconContentDescription: String?, - modifier: Modifier = Modifier, - colors: TopAppBarColors = TopAppBarDefaults.centerAlignedTopAppBarColors(), - onActionClick: () -> Unit = {}, -) { - CenterAlignedTopAppBar( - title = { Text(text = stringResource(id = titleRes)) }, - actions = { - IconButton(onClick = onActionClick) { - Icon( - imageVector = actionIcon, - contentDescription = actionIconContentDescription, - tint = MaterialTheme.colorScheme.onSurface, - ) - } - }, - colors = colors, - modifier = modifier.testTag("niaTopAppBar"), - ) -} - @OptIn(ExperimentalMaterial3Api::class) @Preview("Top App Bar") @Composable private fun NiaTopAppBarPreview() { - NiaTopAppBar( - titleRes = android.R.string.untitled, - navigationIcon = NiaIcons.Search, - navigationIconContentDescription = "Navigation icon", - actionIcon = NiaIcons.MoreVert, - actionIconContentDescription = "Action icon", - ) + NiaTheme { + NiaTopAppBar( + titleRes = android.R.string.untitled, + navigationIcon = NiaIcons.Search, + navigationIconContentDescription = "Navigation icon", + actionIcon = NiaIcons.MoreVert, + actionIconContentDescription = "Action icon", + ) + } } diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/ViewToggle.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/ViewToggle.kt similarity index 81% rename from core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/ViewToggle.kt rename to core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/ViewToggle.kt index c6ec77a92..d368c46d7 100644 --- a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/ViewToggle.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/ViewToggle.kt @@ -24,11 +24,15 @@ import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.ProvideTextStyle +import androidx.compose.material3.Surface +import androidx.compose.material3.Text import androidx.compose.material3.TextButton import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier +import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons +import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme /** * Now in Android view toggle button with included trailing icon as well as compact and expanded @@ -105,6 +109,36 @@ private fun NiaViewToggleButtonContent( } } +@ThemePreviews +@Composable +fun ViewTogglePreviewExpanded() { + NiaTheme { + Surface { + NiaViewToggleButton( + expanded = true, + onExpandedChange = { }, + compactText = { Text(text = "Compact view") }, + expandedText = { Text(text = "Expanded view") }, + ) + } + } +} + +@Preview +@Composable +fun ViewTogglePreviewCompact() { + NiaTheme { + Surface { + NiaViewToggleButton( + expanded = false, + onExpandedChange = { }, + compactText = { Text(text = "Compact view") }, + expandedText = { Text(text = "Expanded view") }, + ) + } + } +} + /** * Now in Android view toggle default values. */ diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/AppScrollbars.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/AppScrollbars.kt similarity index 72% rename from core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/AppScrollbars.kt rename to core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/AppScrollbars.kt index fa913cb27..1086e280b 100644 --- a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/AppScrollbars.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/AppScrollbars.kt @@ -16,10 +16,10 @@ package com.google.samples.apps.nowinandroid.core.designsystem.component.scrollbar +import android.annotation.SuppressLint import androidx.compose.animation.animateColorAsState import androidx.compose.animation.core.Spring import androidx.compose.animation.core.SpringSpec -import androidx.compose.foundation.background import androidx.compose.foundation.gestures.Orientation import androidx.compose.foundation.gestures.Orientation.Horizontal import androidx.compose.foundation.gestures.Orientation.Vertical @@ -38,12 +38,22 @@ import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.State import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier +import androidx.compose.ui.geometry.Size import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.ColorProducer +import androidx.compose.ui.graphics.Outline +import androidx.compose.ui.graphics.drawOutline +import androidx.compose.ui.graphics.drawscope.ContentDrawScope +import androidx.compose.ui.node.DrawModifierNode +import androidx.compose.ui.node.ModifierNodeElement +import androidx.compose.ui.node.invalidateDraw +import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import com.google.samples.apps.nowinandroid.core.designsystem.component.scrollbar.ThumbState.Active import com.google.samples.apps.nowinandroid.core.designsystem.component.scrollbar.ThumbState.Dormant @@ -65,10 +75,10 @@ private const val SCROLLBAR_INACTIVE_TO_DORMANT_TIME_IN_MS = 2_000L */ @Composable fun ScrollableState.DraggableScrollbar( - modifier: Modifier = Modifier, state: ScrollbarState, orientation: Orientation, onThumbMoved: (Float) -> Unit, + modifier: Modifier = Modifier, ) { val interactionSource = remember { MutableInteractionSource() } Scrollbar( @@ -95,9 +105,9 @@ fun ScrollableState.DraggableScrollbar( */ @Composable fun ScrollableState.DecorativeScrollbar( - modifier: Modifier = Modifier, state: ScrollbarState, orientation: Orientation, + modifier: Modifier = Modifier, ) { val interactionSource = remember { MutableInteractionSource() } Scrollbar( @@ -130,12 +140,7 @@ private fun ScrollableState.DraggableScrollbarThumb( Horizontal -> height(12.dp).fillMaxWidth() } } - .background( - color = scrollbarThumbColor( - interactionSource = interactionSource, - ), - shape = RoundedCornerShape(16.dp), - ), + .scrollThumb(this, interactionSource), ) } @@ -155,31 +160,72 @@ private fun ScrollableState.DecorativeScrollbarThumb( Horizontal -> height(2.dp).fillMaxWidth() } } - .background( - color = scrollbarThumbColor( - interactionSource = interactionSource, - ), - shape = RoundedCornerShape(16.dp), - ), + .scrollThumb(this, interactionSource), ) } +// TODO: This lint is removed in 1.6 as the recommendation has changed +// remove when project is upgraded +@SuppressLint("ComposableModifierFactory") +@Composable +private fun Modifier.scrollThumb( + scrollableState: ScrollableState, + interactionSource: InteractionSource, +): Modifier { + val colorState = scrollbarThumbColor(scrollableState, interactionSource) + return this then ScrollThumbElement { colorState.value } +} + +private data class ScrollThumbElement(val colorProducer: ColorProducer) : + ModifierNodeElement() { + override fun create(): ScrollThumbNode = ScrollThumbNode(colorProducer) + override fun update(node: ScrollThumbNode) { + node.colorProducer = colorProducer + node.invalidateDraw() + } +} + +private class ScrollThumbNode(var colorProducer: ColorProducer) : DrawModifierNode, Modifier.Node() { + private val shape = RoundedCornerShape(16.dp) + + // naive cache outline calculation if size is the same + private var lastSize: Size? = null + private var lastLayoutDirection: LayoutDirection? = null + private var lastOutline: Outline? = null + + override fun ContentDrawScope.draw() { + val color = colorProducer() + val outline = + if (size == lastSize && layoutDirection == lastLayoutDirection) { + lastOutline!! + } else { + shape.createOutline(size, layoutDirection, this) + } + if (color != Color.Unspecified) drawOutline(outline, color = color) + + lastOutline = outline + lastSize = size + lastLayoutDirection = layoutDirection + } +} + /** * The color of the scrollbar thumb as a function of its interaction state. * @param interactionSource source of interactions in the scrolling container */ @Composable -private fun ScrollableState.scrollbarThumbColor( +private fun scrollbarThumbColor( + scrollableState: ScrollableState, interactionSource: InteractionSource, -): Color { +): State { var state by remember { mutableStateOf(Dormant) } val pressed by interactionSource.collectIsPressedAsState() val hovered by interactionSource.collectIsHoveredAsState() val dragged by interactionSource.collectIsDraggedAsState() - val active = (canScrollForward || canScrollForward) && - (pressed || hovered || dragged || isScrollInProgress) + val active = (scrollableState.canScrollForward || scrollableState.canScrollBackward) && + (pressed || hovered || dragged || scrollableState.isScrollInProgress) - val color by animateColorAsState( + val color = animateColorAsState( targetValue = when (state) { Active -> MaterialTheme.colorScheme.onSurface.copy(0.5f) Inactive -> MaterialTheme.colorScheme.onSurface.copy(alpha = 0.2f) @@ -205,5 +251,7 @@ private fun ScrollableState.scrollbarThumbColor( } private enum class ThumbState { - Active, Inactive, Dormant + Active, + Inactive, + Dormant, } diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/LazyScrollbarUtilities.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/LazyScrollbarUtilities.kt similarity index 56% rename from core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/LazyScrollbarUtilities.kt rename to core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/LazyScrollbarUtilities.kt index 8c4063b15..57e567b5d 100644 --- a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/LazyScrollbarUtilities.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/LazyScrollbarUtilities.kt @@ -17,79 +17,7 @@ package com.google.samples.apps.nowinandroid.core.designsystem.component.scrollbar import androidx.compose.foundation.gestures.ScrollableState -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.runtime.setValue -import androidx.compose.runtime.snapshotFlow -import kotlinx.coroutines.flow.distinctUntilChanged -import kotlinx.coroutines.flow.filterNotNull import kotlin.math.abs -import kotlin.math.min - -/** - * Calculates the [ScrollbarState] for lazy layouts. - * @param itemsAvailable the total amount of items available to scroll in the layout. - * @param visibleItems a list of items currently visible in the layout. - * @param firstVisibleItemIndex a function for interpolating the first visible index in the lazy layout - * as scrolling progresses for smooth and linear scrollbar thumb progression. - * [itemsAvailable]. - * @param reverseLayout if the items in the backing lazy layout are laid out in reverse order. - * */ -@Composable -internal inline fun LazyState.scrollbarState( - itemsAvailable: Int, - crossinline visibleItems: LazyState.() -> List, - crossinline firstVisibleItemIndex: LazyState.(List) -> Float, - crossinline itemPercentVisible: LazyState.(LazyStateItem) -> Float, - crossinline reverseLayout: LazyState.() -> Boolean, -): ScrollbarState { - var state by remember { mutableStateOf(ScrollbarState.FULL) } - - LaunchedEffect( - key1 = this, - key2 = itemsAvailable, - ) { - snapshotFlow { - if (itemsAvailable == 0) return@snapshotFlow null - - val visibleItemsInfo = visibleItems(this@scrollbarState) - if (visibleItemsInfo.isEmpty()) return@snapshotFlow null - - val firstIndex = min( - a = firstVisibleItemIndex(visibleItemsInfo), - b = itemsAvailable.toFloat(), - ) - if (firstIndex.isNaN()) return@snapshotFlow null - - val itemsVisible = visibleItemsInfo.sumOf { - itemPercentVisible(it).toDouble() - }.toFloat() - - val thumbTravelPercent = min( - a = firstIndex / itemsAvailable, - b = 1f, - ) - val thumbSizePercent = min( - a = itemsVisible / itemsAvailable, - b = 1f, - ) - ScrollbarState( - thumbSizePercent = thumbSizePercent, - thumbMovedPercent = when { - reverseLayout() -> 1f - thumbTravelPercent - else -> thumbTravelPercent - }, - ) - } - .filterNotNull() - .distinctUntilChanged() - .collect { state = it } - } - return state -} /** * Linearly interpolates the index for the first item in [visibleItems] for smooth scrollbar diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/Scrollbar.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/Scrollbar.kt similarity index 67% rename from core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/Scrollbar.kt rename to core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/Scrollbar.kt index 74d9e0467..002f36b31 100644 --- a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/Scrollbar.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/Scrollbar.kt @@ -16,8 +16,9 @@ package com.google.samples.apps.nowinandroid.core.designsystem.component.scrollbar -import androidx.compose.animation.core.animateDpAsState import androidx.compose.foundation.gestures.Orientation +import androidx.compose.foundation.gestures.Orientation.Horizontal +import androidx.compose.foundation.gestures.Orientation.Vertical import androidx.compose.foundation.gestures.detectHorizontalDragGestures import androidx.compose.foundation.gestures.detectTapGestures import androidx.compose.foundation.gestures.detectVerticalDragGestures @@ -28,30 +29,28 @@ import androidx.compose.foundation.interaction.PressInteraction import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth -import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.offset -import androidx.compose.foundation.layout.width import androidx.compose.runtime.Composable import androidx.compose.runtime.Immutable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableFloatStateOf +import androidx.compose.runtime.mutableLongStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberUpdatedState import androidx.compose.runtime.setValue -import androidx.compose.ui.Alignment +import androidx.compose.runtime.snapshotFlow import androidx.compose.ui.Modifier import androidx.compose.ui.geometry.Offset import androidx.compose.ui.input.pointer.PointerInputChange import androidx.compose.ui.input.pointer.pointerInput +import androidx.compose.ui.layout.Layout +import androidx.compose.ui.layout.layout import androidx.compose.ui.layout.onGloballyPositioned import androidx.compose.ui.layout.positionInRoot -import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.IntOffset import androidx.compose.ui.unit.IntSize import androidx.compose.ui.unit.dp -import androidx.compose.ui.unit.max import androidx.compose.ui.util.packFloats import androidx.compose.ui.util.unpackFloat1 import androidx.compose.ui.util.unpackFloat2 @@ -60,6 +59,7 @@ import kotlinx.coroutines.delay import kotlinx.coroutines.withTimeout import kotlin.math.max import kotlin.math.min +import kotlin.math.roundToInt /** * The delay between scrolls when a user long presses on the scrollbar track to initiate a scroll @@ -73,21 +73,59 @@ private const val SCROLLBAR_PRESS_DELAY_MS = 10L */ private const val SCROLLBAR_PRESS_DELTA_PCT = 0.02f +class ScrollbarState { + private var packedValue by mutableLongStateOf(0L) + + internal fun onScroll(stateValue: ScrollbarStateValue) { + packedValue = stateValue.packedValue + } + + /** + * Returns the thumb size of the scrollbar as a percentage of the total track size + */ + val thumbSizePercent + get() = unpackFloat1(packedValue) + + /** + * Returns the distance the thumb has traveled as a percentage of total track size + */ + val thumbMovedPercent + get() = unpackFloat2(packedValue) + + /** + * Returns the max distance the thumb can travel as a percentage of total track size + */ + val thumbTrackSizePercent + get() = 1f - thumbSizePercent +} + +/** + * Returns the size of the scrollbar track in pixels + */ +private val ScrollbarTrack.size + get() = unpackFloat2(packedValue) - unpackFloat1(packedValue) + +/** + * Returns the position of the scrollbar thumb on the track as a percentage + */ +private fun ScrollbarTrack.thumbPosition( + dimension: Float, +): Float = max( + a = min( + a = dimension / size, + b = 1f, + ), + b = 0f, +) + /** * Class definition for the core properties of a scroll bar */ @Immutable @JvmInline -value class ScrollbarState internal constructor( +value class ScrollbarStateValue internal constructor( internal val packedValue: Long, -) { - companion object { - val FULL = ScrollbarState( - thumbSizePercent = 1f, - thumbMovedPercent = 0f, - ) - } -} +) /** * Class definition for the core properties of a scroll bar track @@ -104,54 +142,23 @@ private value class ScrollbarTrack( } /** - * Creates a [ScrollbarState] with the listed properties + * Creates a [ScrollbarStateValue] with the listed properties * @param thumbSizePercent the thumb size of the scrollbar as a percentage of the total track size. * Refers to either the thumb width (for horizontal scrollbars) * or height (for vertical scrollbars). * @param thumbMovedPercent the distance the thumb has traveled as a percentage of total * track size. */ -fun ScrollbarState( +fun scrollbarStateValue( thumbSizePercent: Float, thumbMovedPercent: Float, -) = ScrollbarState( +) = ScrollbarStateValue( packFloats( val1 = thumbSizePercent, val2 = thumbMovedPercent, ), ) -/** - * Returns the thumb size of the scrollbar as a percentage of the total track size - */ -val ScrollbarState.thumbSizePercent - get() = unpackFloat1(packedValue) - -/** - * Returns the distance the thumb has traveled as a percentage of total track size - */ -val ScrollbarState.thumbMovedPercent - get() = unpackFloat2(packedValue) - -/** - * Returns the size of the scrollbar track in pixels - */ -private val ScrollbarTrack.size - get() = unpackFloat2(packedValue) - unpackFloat1(packedValue) - -/** - * Returns the position of the scrollbar thumb on the track as a percentage - */ -private fun ScrollbarTrack.thumbPosition( - dimension: Float, -): Float = max( - a = min( - a = dimension / size, - b = 1f, - ), - b = 0f, -) - /** * Returns the value of [offset] along the axis specified by [this] */ @@ -188,16 +195,14 @@ internal fun Orientation.valueOf(intOffset: IntOffset) = when (this) { */ @Composable fun Scrollbar( - modifier: Modifier = Modifier, orientation: Orientation, state: ScrollbarState, - minThumbSize: Dp = 40.dp, + modifier: Modifier = Modifier, interactionSource: MutableInteractionSource? = null, - thumb: @Composable () -> Unit, + minThumbSize: Dp = 40.dp, onThumbMoved: ((Float) -> Unit)? = null, + thumb: @Composable () -> Unit, ) { - val localDensity = LocalDensity.current - // Using Offset.Unspecified and Float.NaN instead of null // to prevent unnecessary boxing of primitives var pressedOffset by remember { mutableStateOf(Offset.Unspecified) } @@ -205,27 +210,10 @@ fun Scrollbar( // Used to immediately show drag feedback in the UI while the scrolling implementation // catches up - var interactionThumbTravelPercent by remember { mutableStateOf(Float.NaN) } + var interactionThumbTravelPercent by remember { mutableFloatStateOf(Float.NaN) } var track by remember { mutableStateOf(ScrollbarTrack(packedValue = 0)) } - val thumbTravelPercent = when { - interactionThumbTravelPercent.isNaN() -> state.thumbMovedPercent - else -> interactionThumbTravelPercent - } - val thumbSizePx = max( - a = state.thumbSizePercent * track.size, - b = with(localDensity) { minThumbSize.toPx() }, - ) - val thumbSizeDp by animateDpAsState( - targetValue = with(localDensity) { thumbSizePx.toDp() }, - label = "scrollbar thumb size", - ) - val thumbMovedPx = min( - a = track.size * thumbTravelPercent, - b = track.size - thumbSizePx, - ) - // scrollbar track container Box( modifier = modifier @@ -319,84 +307,113 @@ fun Scrollbar( } }, ) { - val scrollbarThumbMovedDp = max( - a = with(localDensity) { thumbMovedPx.toDp() }, - b = 0.dp, - ) // scrollbar thumb container - Box( - modifier = Modifier - .align(Alignment.TopStart) - .run { - when (orientation) { - Orientation.Horizontal -> width(thumbSizeDp) - Orientation.Vertical -> height(thumbSizeDp) - } - } - .offset( - y = when (orientation) { - Orientation.Horizontal -> 0.dp - Orientation.Vertical -> scrollbarThumbMovedDp - }, - x = when (orientation) { - Orientation.Horizontal -> scrollbarThumbMovedDp - Orientation.Vertical -> 0.dp + Layout(content = { thumb() }) { measurables, constraints -> + val measurable = measurables.first() + + val thumbSizePx = max( + a = state.thumbSizePercent * track.size, + b = minThumbSize.toPx(), + ) + + val trackSizePx = when (state.thumbTrackSizePercent) { + 0f -> track.size + else -> (track.size - thumbSizePx) / state.thumbTrackSizePercent + } + + val thumbTravelPercent = max( + a = min( + a = when { + interactionThumbTravelPercent.isNaN() -> state.thumbMovedPercent + else -> interactionThumbTravelPercent }, + b = state.thumbTrackSizePercent, ), - ) { - thumb() + b = 0f, + ) + + val thumbMovedPx = trackSizePx * thumbTravelPercent + + val y = when (orientation) { + Horizontal -> 0 + Vertical -> thumbMovedPx.roundToInt() + } + val x = when (orientation) { + Horizontal -> thumbMovedPx.roundToInt() + Vertical -> 0 + } + + val updatedConstraints = when (orientation) { + Horizontal -> { + constraints.copy( + minWidth = thumbSizePx.roundToInt(), + maxWidth = thumbSizePx.roundToInt(), + ) + } + Vertical -> { + constraints.copy( + minHeight = thumbSizePx.roundToInt(), + maxHeight = thumbSizePx.roundToInt(), + ) + } + } + + val placeable = measurable.measure(updatedConstraints) + layout(placeable.width, placeable.height) { + placeable.place(x, y) + } } } if (onThumbMoved == null) return - // State that will be read inside the effects that follow - // but will not cause re-triggering of them - val updatedState by rememberUpdatedState(state) - // Process presses - LaunchedEffect(pressedOffset) { - // Press ended, reset interactionThumbTravelPercent - if (pressedOffset == Offset.Unspecified) { - interactionThumbTravelPercent = Float.NaN - return@LaunchedEffect - } + LaunchedEffect(Unit) { + snapshotFlow { pressedOffset }.collect { pressedOffset -> + // Press ended, reset interactionThumbTravelPercent + if (pressedOffset == Offset.Unspecified) { + interactionThumbTravelPercent = Float.NaN + return@collect + } - var currentThumbMovedPercent = updatedState.thumbMovedPercent - val destinationThumbMovedPercent = track.thumbPosition( - dimension = orientation.valueOf(pressedOffset), - ) - val isPositive = currentThumbMovedPercent < destinationThumbMovedPercent - val delta = SCROLLBAR_PRESS_DELTA_PCT * if (isPositive) 1f else -1f - - while (currentThumbMovedPercent != destinationThumbMovedPercent) { - currentThumbMovedPercent = when { - isPositive -> min( - a = currentThumbMovedPercent + delta, - b = destinationThumbMovedPercent, - ) + var currentThumbMovedPercent = state.thumbMovedPercent + val destinationThumbMovedPercent = track.thumbPosition( + dimension = orientation.valueOf(pressedOffset), + ) + val isPositive = currentThumbMovedPercent < destinationThumbMovedPercent + val delta = SCROLLBAR_PRESS_DELTA_PCT * if (isPositive) 1f else -1f + + while (currentThumbMovedPercent != destinationThumbMovedPercent) { + currentThumbMovedPercent = when { + isPositive -> min( + a = currentThumbMovedPercent + delta, + b = destinationThumbMovedPercent, + ) - else -> max( - a = currentThumbMovedPercent + delta, - b = destinationThumbMovedPercent, - ) + else -> max( + a = currentThumbMovedPercent + delta, + b = destinationThumbMovedPercent, + ) + } + onThumbMoved(currentThumbMovedPercent) + interactionThumbTravelPercent = currentThumbMovedPercent + delay(SCROLLBAR_PRESS_DELAY_MS) } - onThumbMoved(currentThumbMovedPercent) - interactionThumbTravelPercent = currentThumbMovedPercent - delay(SCROLLBAR_PRESS_DELAY_MS) } } // Process drags - LaunchedEffect(draggedOffset) { - if (draggedOffset == Offset.Unspecified) { - interactionThumbTravelPercent = Float.NaN - return@LaunchedEffect + LaunchedEffect(Unit) { + snapshotFlow { draggedOffset }.collect { draggedOffset -> + if (draggedOffset == Offset.Unspecified) { + interactionThumbTravelPercent = Float.NaN + return@collect + } + val currentTravel = track.thumbPosition( + dimension = orientation.valueOf(draggedOffset), + ) + onThumbMoved(currentTravel) + interactionThumbTravelPercent = currentTravel } - val currentTravel = track.thumbPosition( - dimension = orientation.valueOf(draggedOffset), - ) - onThumbMoved(currentTravel) - interactionThumbTravelPercent = currentTravel } } diff --git a/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/ScrollbarExt.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/ScrollbarExt.kt new file mode 100644 index 000000000..3fcc8f2c0 --- /dev/null +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/ScrollbarExt.kt @@ -0,0 +1,234 @@ +/* + * Copyright 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.core.designsystem.component.scrollbar + +import androidx.compose.foundation.gestures.Orientation +import androidx.compose.foundation.lazy.LazyListItemInfo +import androidx.compose.foundation.lazy.LazyListState +import androidx.compose.foundation.lazy.grid.LazyGridItemInfo +import androidx.compose.foundation.lazy.grid.LazyGridState +import androidx.compose.foundation.lazy.staggeredgrid.LazyStaggeredGridItemInfo +import androidx.compose.foundation.lazy.staggeredgrid.LazyStaggeredGridState +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.remember +import androidx.compose.runtime.snapshotFlow +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.filterNotNull +import kotlin.math.min + +/** + * Calculates a [ScrollbarState] driven by the changes in a [LazyListState]. + * + * @param itemsAvailable the total amount of items available to scroll in the lazy list. + * @param itemIndex a lookup function for index of an item in the list relative to [itemsAvailable]. + */ +@Composable +fun LazyListState.scrollbarState( + itemsAvailable: Int, + itemIndex: (LazyListItemInfo) -> Int = LazyListItemInfo::index, +): ScrollbarState { + val state = remember { ScrollbarState() } + LaunchedEffect(this, itemsAvailable) { + snapshotFlow { + if (itemsAvailable == 0) return@snapshotFlow null + + val visibleItemsInfo = layoutInfo.visibleItemsInfo + if (visibleItemsInfo.isEmpty()) return@snapshotFlow null + + val firstIndex = min( + a = interpolateFirstItemIndex( + visibleItems = visibleItemsInfo, + itemSize = { it.size }, + offset = { it.offset }, + nextItemOnMainAxis = { first -> visibleItemsInfo.find { it != first } }, + itemIndex = itemIndex, + ), + b = itemsAvailable.toFloat(), + ) + if (firstIndex.isNaN()) return@snapshotFlow null + + val itemsVisible = visibleItemsInfo.floatSumOf { itemInfo -> + itemVisibilityPercentage( + itemSize = itemInfo.size, + itemStartOffset = itemInfo.offset, + viewportStartOffset = layoutInfo.viewportStartOffset, + viewportEndOffset = layoutInfo.viewportEndOffset, + ) + } + + val thumbTravelPercent = min( + a = firstIndex / itemsAvailable, + b = 1f, + ) + val thumbSizePercent = min( + a = itemsVisible / itemsAvailable, + b = 1f, + ) + scrollbarStateValue( + thumbSizePercent = thumbSizePercent, + thumbMovedPercent = when { + layoutInfo.reverseLayout -> 1f - thumbTravelPercent + else -> thumbTravelPercent + }, + ) + } + .filterNotNull() + .distinctUntilChanged() + .collect { state.onScroll(it) } + } + return state +} + +/** + * Calculates a [ScrollbarState] driven by the changes in a [LazyGridState] + * + * @param itemsAvailable the total amount of items available to scroll in the grid. + * @param itemIndex a lookup function for index of an item in the grid relative to [itemsAvailable]. + */ +@Composable +fun LazyGridState.scrollbarState( + itemsAvailable: Int, + itemIndex: (LazyGridItemInfo) -> Int = LazyGridItemInfo::index, +): ScrollbarState { + val state = remember { ScrollbarState() } + LaunchedEffect(this, itemsAvailable) { + snapshotFlow { + if (itemsAvailable == 0) return@snapshotFlow null + + val visibleItemsInfo = layoutInfo.visibleItemsInfo + if (visibleItemsInfo.isEmpty()) return@snapshotFlow null + + val firstIndex = min( + a = interpolateFirstItemIndex( + visibleItems = visibleItemsInfo, + itemSize = { layoutInfo.orientation.valueOf(it.size) }, + offset = { layoutInfo.orientation.valueOf(it.offset) }, + nextItemOnMainAxis = { first -> + when (layoutInfo.orientation) { + Orientation.Vertical -> visibleItemsInfo.find { + it != first && it.row != first.row + } + + Orientation.Horizontal -> visibleItemsInfo.find { + it != first && it.column != first.column + } + } + }, + itemIndex = itemIndex, + ), + b = itemsAvailable.toFloat(), + ) + if (firstIndex.isNaN()) return@snapshotFlow null + + val itemsVisible = visibleItemsInfo.floatSumOf { itemInfo -> + itemVisibilityPercentage( + itemSize = layoutInfo.orientation.valueOf(itemInfo.size), + itemStartOffset = layoutInfo.orientation.valueOf(itemInfo.offset), + viewportStartOffset = layoutInfo.viewportStartOffset, + viewportEndOffset = layoutInfo.viewportEndOffset, + ) + } + + val thumbTravelPercent = min( + a = firstIndex / itemsAvailable, + b = 1f, + ) + val thumbSizePercent = min( + a = itemsVisible / itemsAvailable, + b = 1f, + ) + scrollbarStateValue( + thumbSizePercent = thumbSizePercent, + thumbMovedPercent = when { + layoutInfo.reverseLayout -> 1f - thumbTravelPercent + else -> thumbTravelPercent + }, + ) + } + .filterNotNull() + .distinctUntilChanged() + .collect { state.onScroll(it) } + } + return state +} + +/** + * Remembers a [ScrollbarState] driven by the changes in a [LazyStaggeredGridState] + * + * @param itemsAvailable the total amount of items available to scroll in the staggered grid. + * @param itemIndex a lookup function for index of an item in the staggered grid relative + * to [itemsAvailable]. + */ +@Composable +fun LazyStaggeredGridState.scrollbarState( + itemsAvailable: Int, + itemIndex: (LazyStaggeredGridItemInfo) -> Int = LazyStaggeredGridItemInfo::index, +): ScrollbarState { + val state = remember { ScrollbarState() } + LaunchedEffect(this, itemsAvailable) { + snapshotFlow { + if (itemsAvailable == 0) return@snapshotFlow null + + val visibleItemsInfo = layoutInfo.visibleItemsInfo + if (visibleItemsInfo.isEmpty()) return@snapshotFlow null + + val firstIndex = min( + a = interpolateFirstItemIndex( + visibleItems = visibleItemsInfo, + itemSize = { layoutInfo.orientation.valueOf(it.size) }, + offset = { layoutInfo.orientation.valueOf(it.offset) }, + nextItemOnMainAxis = { first -> + visibleItemsInfo.find { it != first && it.lane == first.lane } + }, + itemIndex = itemIndex, + ), + b = itemsAvailable.toFloat(), + ) + if (firstIndex.isNaN()) return@snapshotFlow null + + val itemsVisible = visibleItemsInfo.floatSumOf { itemInfo -> + itemVisibilityPercentage( + itemSize = layoutInfo.orientation.valueOf(itemInfo.size), + itemStartOffset = layoutInfo.orientation.valueOf(itemInfo.offset), + viewportStartOffset = layoutInfo.viewportStartOffset, + viewportEndOffset = layoutInfo.viewportEndOffset, + ) + } + + val thumbTravelPercent = min( + a = firstIndex / itemsAvailable, + b = 1f, + ) + val thumbSizePercent = min( + a = itemsVisible / itemsAvailable, + b = 1f, + ) + scrollbarStateValue( + thumbSizePercent = thumbSizePercent, + thumbMovedPercent = thumbTravelPercent, + ) + } + .filterNotNull() + .distinctUntilChanged() + .collect { state.onScroll(it) } + } + return state +} + +private inline fun List.floatSumOf(selector: (T) -> Float): Float = + fold(initial = 0f) { accumulator, listItem -> accumulator + selector(listItem) } diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/ThumbExt.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/ThumbExt.kt similarity index 78% rename from core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/ThumbExt.kt rename to core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/ThumbExt.kt index 4d187e269..a267ec2ec 100644 --- a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/ThumbExt.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/component/scrollbar/ThumbExt.kt @@ -18,13 +18,15 @@ package com.google.samples.apps.nowinandroid.core.designsystem.component.scrollb import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.lazy.grid.LazyGridState +import androidx.compose.foundation.lazy.staggeredgrid.LazyStaggeredGridState import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.mutableFloatStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberUpdatedState import androidx.compose.runtime.setValue +import kotlin.math.roundToInt /** * Remembers a function to react to [Scrollbar] thumb position displacements for a [LazyListState] @@ -50,6 +52,19 @@ fun LazyGridState.rememberDraggableScroller( scroll = ::scrollToItem, ) +/** + * Remembers a function to react to [Scrollbar] thumb position displacements for a + * [LazyStaggeredGridState] + * @param itemsAvailable the amount of items in the staggered grid. + */ +@Composable +fun LazyStaggeredGridState.rememberDraggableScroller( + itemsAvailable: Int, +): (Float) -> Unit = rememberDraggableScroller( + itemsAvailable = itemsAvailable, + scroll = ::scrollToItem, +) + /** * Generic function to react to [Scrollbar] thumb displacements in a lazy layout. * @param itemsAvailable the total amount of items available to scroll in the layout. @@ -60,12 +75,12 @@ private inline fun rememberDraggableScroller( itemsAvailable: Int, crossinline scroll: suspend (index: Int) -> Unit, ): (Float) -> Unit { - var percentage by remember { mutableStateOf(Float.NaN) } + var percentage by remember { mutableFloatStateOf(Float.NaN) } val itemCount by rememberUpdatedState(itemsAvailable) LaunchedEffect(percentage) { if (percentage.isNaN()) return@LaunchedEffect - val indexToFind = (itemCount * percentage).toInt() + val indexToFind = (itemCount * percentage).roundToInt() scroll(indexToFind) } return remember { diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/icon/NiaIcons.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/icon/NiaIcons.kt similarity index 90% rename from core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/icon/NiaIcons.kt rename to core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/icon/NiaIcons.kt index 8db20689f..dfa68e772 100644 --- a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/icon/NiaIcons.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/icon/NiaIcons.kt @@ -17,11 +17,12 @@ package com.google.samples.apps.nowinandroid.core.designsystem.icon import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.automirrored.rounded.ArrowBack +import androidx.compose.material.icons.automirrored.rounded.ShortText import androidx.compose.material.icons.filled.MoreVert import androidx.compose.material.icons.outlined.Bookmarks import androidx.compose.material.icons.outlined.Upcoming import androidx.compose.material.icons.rounded.Add -import androidx.compose.material.icons.rounded.ArrowBack import androidx.compose.material.icons.rounded.Bookmark import androidx.compose.material.icons.rounded.BookmarkBorder import androidx.compose.material.icons.rounded.Bookmarks @@ -31,7 +32,6 @@ import androidx.compose.material.icons.rounded.Grid3x3 import androidx.compose.material.icons.rounded.Person import androidx.compose.material.icons.rounded.Search import androidx.compose.material.icons.rounded.Settings -import androidx.compose.material.icons.rounded.ShortText import androidx.compose.material.icons.rounded.Upcoming import androidx.compose.material.icons.rounded.ViewDay import androidx.compose.ui.graphics.vector.ImageVector @@ -41,7 +41,7 @@ import androidx.compose.ui.graphics.vector.ImageVector */ object NiaIcons { val Add = Icons.Rounded.Add - val ArrowBack = Icons.Rounded.ArrowBack + val ArrowBack = Icons.AutoMirrored.Rounded.ArrowBack val Bookmark = Icons.Rounded.Bookmark val BookmarkBorder = Icons.Rounded.BookmarkBorder val Bookmarks = Icons.Rounded.Bookmarks @@ -53,7 +53,7 @@ object NiaIcons { val Person = Icons.Rounded.Person val Search = Icons.Rounded.Search val Settings = Icons.Rounded.Settings - val ShortText = Icons.Rounded.ShortText + val ShortText = Icons.AutoMirrored.Rounded.ShortText val Upcoming = Icons.Rounded.Upcoming val UpcomingBorder = Icons.Outlined.Upcoming val ViewDay = Icons.Rounded.ViewDay diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/theme/Background.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/theme/Background.kt similarity index 100% rename from core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/theme/Background.kt rename to core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/theme/Background.kt diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/theme/Color.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/theme/Color.kt similarity index 100% rename from core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/theme/Color.kt rename to core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/theme/Color.kt diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/theme/Gradient.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/theme/Gradient.kt similarity index 100% rename from core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/theme/Gradient.kt rename to core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/theme/Gradient.kt diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/theme/Theme.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/theme/Theme.kt similarity index 100% rename from core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/theme/Theme.kt rename to core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/theme/Theme.kt diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/theme/Tint.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/theme/Tint.kt similarity index 95% rename from core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/theme/Tint.kt rename to core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/theme/Tint.kt index 848c8d8f5..75ab3a8f6 100644 --- a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/theme/Tint.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/theme/Tint.kt @@ -25,7 +25,7 @@ import androidx.compose.ui.graphics.Color */ @Immutable data class TintTheme( - val iconTint: Color? = null, + val iconTint: Color = Color.Unspecified, ) /** diff --git a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/theme/Type.kt b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/theme/Type.kt similarity index 75% rename from core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/theme/Type.kt rename to core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/theme/Type.kt index 0d3b06457..82d769863 100644 --- a/core/designsystem/src/main/java/com/google/samples/apps/nowinandroid/core/designsystem/theme/Type.kt +++ b/core/designsystem/src/main/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/theme/Type.kt @@ -19,6 +19,9 @@ package com.google.samples.apps.nowinandroid.core.designsystem.theme import androidx.compose.material3.Typography import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.LineHeightStyle +import androidx.compose.ui.text.style.LineHeightStyle.Alignment +import androidx.compose.ui.text.style.LineHeightStyle.Trim import androidx.compose.ui.unit.sp /** @@ -60,12 +63,20 @@ internal val NiaTypography = Typography( fontSize = 24.sp, lineHeight = 32.sp, letterSpacing = 0.sp, + lineHeightStyle = LineHeightStyle( + alignment = Alignment.Bottom, + trim = Trim.None, + ), ), titleLarge = TextStyle( fontWeight = FontWeight.Bold, fontSize = 22.sp, lineHeight = 28.sp, letterSpacing = 0.sp, + lineHeightStyle = LineHeightStyle( + alignment = Alignment.Bottom, + trim = Trim.LastLineBottom, + ), ), titleMedium = TextStyle( fontWeight = FontWeight.Bold, @@ -79,11 +90,16 @@ internal val NiaTypography = Typography( lineHeight = 20.sp, letterSpacing = 0.1.sp, ), + // Default text style bodyLarge = TextStyle( fontWeight = FontWeight.Normal, fontSize = 16.sp, lineHeight = 24.sp, letterSpacing = 0.5.sp, + lineHeightStyle = LineHeightStyle( + alignment = Alignment.Center, + trim = Trim.None, + ), ), bodyMedium = TextStyle( fontWeight = FontWeight.Normal, @@ -97,22 +113,37 @@ internal val NiaTypography = Typography( lineHeight = 16.sp, letterSpacing = 0.4.sp, ), + // Used for Button labelLarge = TextStyle( fontWeight = FontWeight.Medium, fontSize = 14.sp, lineHeight = 20.sp, letterSpacing = 0.1.sp, + lineHeightStyle = LineHeightStyle( + alignment = Alignment.Center, + trim = Trim.LastLineBottom, + ), ), + // Used for Navigation items labelMedium = TextStyle( fontWeight = FontWeight.Medium, fontSize = 12.sp, lineHeight = 16.sp, letterSpacing = 0.5.sp, + lineHeightStyle = LineHeightStyle( + alignment = Alignment.Center, + trim = Trim.LastLineBottom, + ), ), + // Used for Tag labelSmall = TextStyle( fontWeight = FontWeight.Medium, fontSize = 10.sp, - lineHeight = 16.sp, + lineHeight = 14.sp, letterSpacing = 0.sp, + lineHeightStyle = LineHeightStyle( + alignment = Alignment.Center, + trim = Trim.LastLineBottom, + ), ), ) diff --git a/core/designsystem/src/main/res/drawable/core_designsystem_ic_placeholder_default.xml b/core/designsystem/src/main/res/drawable/core_designsystem_ic_placeholder_default.xml new file mode 100644 index 000000000..f5d87a103 --- /dev/null +++ b/core/designsystem/src/main/res/drawable/core_designsystem_ic_placeholder_default.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + diff --git a/core/designsystem/src/main/res/drawable/ic_placeholder_default.xml b/core/designsystem/src/main/res/drawable/ic_placeholder_default.xml deleted file mode 100644 index a00c2de22..000000000 --- a/core/designsystem/src/main/res/drawable/ic_placeholder_default.xml +++ /dev/null @@ -1,63 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/BackgroundScreenshotTests.kt b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/BackgroundScreenshotTests.kt new file mode 100644 index 000000000..e8cfd9a96 --- /dev/null +++ b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/BackgroundScreenshotTests.kt @@ -0,0 +1,63 @@ +/* + * Copyright 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.core.designsystem + +import androidx.activity.ComponentActivity +import androidx.compose.foundation.layout.size +import androidx.compose.material3.Text +import androidx.compose.ui.Modifier +import androidx.compose.ui.test.junit4.createAndroidComposeRule +import androidx.compose.ui.unit.dp +import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaBackground +import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaGradientBackground +import com.google.samples.apps.nowinandroid.core.testing.util.captureMultiTheme +import dagger.hilt.android.testing.HiltTestApplication +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config +import org.robolectric.annotation.GraphicsMode +import org.robolectric.annotation.LooperMode + +@RunWith(RobolectricTestRunner::class) +@GraphicsMode(GraphicsMode.Mode.NATIVE) +@Config(application = HiltTestApplication::class, qualifiers = "480dpi") +@LooperMode(LooperMode.Mode.PAUSED) +class BackgroundScreenshotTests { + + @get:Rule + val composeTestRule = createAndroidComposeRule() + + @Test + fun niaBackground_multipleThemes() { + composeTestRule.captureMultiTheme("Background") { description -> + NiaBackground(Modifier.size(100.dp)) { + Text("$description background") + } + } + } + + @Test + fun niaGradientBackground_multipleThemes() { + composeTestRule.captureMultiTheme("Background", "GradientBackground") { description -> + NiaGradientBackground(Modifier.size(100.dp)) { + Text("$description background") + } + } + } +} diff --git a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/ButtonScreenshotTests.kt b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/ButtonScreenshotTests.kt new file mode 100644 index 000000000..2f6ab5370 --- /dev/null +++ b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/ButtonScreenshotTests.kt @@ -0,0 +1,80 @@ +/* + * Copyright 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.core.designsystem + +import androidx.activity.ComponentActivity +import androidx.compose.material3.Icon +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.ui.test.junit4.createAndroidComposeRule +import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaButton +import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaOutlinedButton +import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons +import com.google.samples.apps.nowinandroid.core.testing.util.captureMultiTheme +import dagger.hilt.android.testing.HiltTestApplication +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config +import org.robolectric.annotation.GraphicsMode +import org.robolectric.annotation.LooperMode + +@RunWith(RobolectricTestRunner::class) +@GraphicsMode(GraphicsMode.Mode.NATIVE) +@Config(application = HiltTestApplication::class, qualifiers = "480dpi") +@LooperMode(LooperMode.Mode.PAUSED) +class ButtonScreenshotTests { + + @get:Rule + val composeTestRule = createAndroidComposeRule() + + @Test + fun niaButton_multipleThemes() { + composeTestRule.captureMultiTheme("Button") { description -> + Surface { + NiaButton(onClick = {}, text = { Text("$description Button") }) + } + } + } + + @Test + fun niaOutlineButton_multipleThemes() { + composeTestRule.captureMultiTheme("Button", "OutlineButton") { description -> + Surface { + NiaOutlinedButton(onClick = {}, text = { Text("$description OutlineButton") }) + } + } + } + + @Test + fun niaButton_leadingIcon_multipleThemes() { + composeTestRule.captureMultiTheme( + name = "Button", + overrideFileName = "ButtonLeadingIcon", + shouldCompareAndroidTheme = false, + ) { description -> + Surface { + NiaButton( + onClick = {}, + text = { Text("$description Icon Button") }, + leadingIcon = { Icon(imageVector = NiaIcons.Add, contentDescription = null) }, + ) + } + } + } +} diff --git a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/FilterChipScreenshotTests.kt b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/FilterChipScreenshotTests.kt new file mode 100644 index 000000000..7a6a92a1d --- /dev/null +++ b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/FilterChipScreenshotTests.kt @@ -0,0 +1,104 @@ +/* + * Copyright 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.core.designsystem + +import androidx.activity.ComponentActivity +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.ui.platform.LocalInspectionMode +import androidx.compose.ui.test.DeviceConfigurationOverride +import androidx.compose.ui.test.FontScale +import androidx.compose.ui.test.ForcedSize +import androidx.compose.ui.test.junit4.createAndroidComposeRule +import androidx.compose.ui.test.onRoot +import androidx.compose.ui.test.then +import androidx.compose.ui.unit.DpSize +import androidx.compose.ui.unit.dp +import com.github.takahirom.roborazzi.captureRoboImage +import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaBackground +import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaFilterChip +import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme +import com.google.samples.apps.nowinandroid.core.testing.util.DefaultRoborazziOptions +import com.google.samples.apps.nowinandroid.core.testing.util.captureMultiTheme +import dagger.hilt.android.testing.HiltTestApplication +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config +import org.robolectric.annotation.GraphicsMode +import org.robolectric.annotation.LooperMode + +@RunWith(RobolectricTestRunner::class) +@GraphicsMode(GraphicsMode.Mode.NATIVE) +@Config(application = HiltTestApplication::class, qualifiers = "480dpi") +@LooperMode(LooperMode.Mode.PAUSED) +class FilterChipScreenshotTests { + + @get:Rule + val composeTestRule = createAndroidComposeRule() + + @Test + fun filterChip_multipleThemes() { + composeTestRule.captureMultiTheme("FilterChip") { + Surface { + NiaFilterChip(selected = false, onSelectedChange = {}) { + Text("Unselected chip") + } + } + } + } + + @Test + fun filterChip_multipleThemes_selected() { + composeTestRule.captureMultiTheme("FilterChip", "FilterChipSelected") { + Surface { + NiaFilterChip(selected = true, onSelectedChange = {}) { + Text("Selected Chip") + } + } + } + } + + @Test + fun filterChip_hugeFont() { + composeTestRule.setContent { + CompositionLocalProvider( + LocalInspectionMode provides true, + ) { + DeviceConfigurationOverride( + DeviceConfigurationOverride.FontScale(2f) then + DeviceConfigurationOverride.ForcedSize(DpSize(80.dp, 40.dp)), + ) { + NiaTheme { + NiaBackground { + NiaFilterChip(selected = true, onSelectedChange = {}) { + Text("Chip") + } + } + } + } + } + } + composeTestRule.onRoot() + .captureRoboImage( + "src/test/screenshots/FilterChip/FilterChip_fontScale2.png", + roborazziOptions = DefaultRoborazziOptions, + ) + } +} diff --git a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/IconButtonScreenshotTests.kt b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/IconButtonScreenshotTests.kt new file mode 100644 index 000000000..0104cfd47 --- /dev/null +++ b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/IconButtonScreenshotTests.kt @@ -0,0 +1,80 @@ +/* + * Copyright 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.core.designsystem + +import androidx.activity.ComponentActivity +import androidx.compose.material3.Icon +import androidx.compose.material3.Surface +import androidx.compose.runtime.Composable +import androidx.compose.ui.test.junit4.createAndroidComposeRule +import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaIconToggleButton +import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons +import com.google.samples.apps.nowinandroid.core.testing.util.captureMultiTheme +import dagger.hilt.android.testing.HiltTestApplication +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config +import org.robolectric.annotation.GraphicsMode +import org.robolectric.annotation.LooperMode + +@RunWith(RobolectricTestRunner::class) +@GraphicsMode(GraphicsMode.Mode.NATIVE) +@Config(application = HiltTestApplication::class, qualifiers = "480dpi") +@LooperMode(LooperMode.Mode.PAUSED) +class IconButtonScreenshotTests { + + @get:Rule + val composeTestRule = createAndroidComposeRule() + + @Test + fun iconButton_multipleThemes() { + composeTestRule.captureMultiTheme("IconButton") { + NiaIconToggleExample(false) + } + } + + @Test + fun iconButton_unchecked_multipleThemes() { + composeTestRule.captureMultiTheme("IconButton", "IconButtonUnchecked") { + Surface { + NiaIconToggleExample(true) + } + } + } + + @Composable + private fun NiaIconToggleExample(checked: Boolean) { + NiaIconToggleButton( + checked = checked, + onCheckedChange = { }, + icon = { + Icon( + imageVector = NiaIcons.BookmarkBorder, + contentDescription = null, + ) + }, + checkedIcon = { + Icon( + imageVector = NiaIcons.Bookmark, + contentDescription = null, + ) + }, + ) + } +} diff --git a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/LoadingWheelScreenshotTests.kt b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/LoadingWheelScreenshotTests.kt new file mode 100644 index 000000000..9bdaca670 --- /dev/null +++ b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/LoadingWheelScreenshotTests.kt @@ -0,0 +1,83 @@ +/* + * Copyright 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.core.designsystem + +import androidx.activity.ComponentActivity +import androidx.compose.material3.Surface +import androidx.compose.ui.test.junit4.createAndroidComposeRule +import androidx.compose.ui.test.onRoot +import com.github.takahirom.roborazzi.captureRoboImage +import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaLoadingWheel +import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaOverlayLoadingWheel +import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme +import com.google.samples.apps.nowinandroid.core.testing.util.DefaultRoborazziOptions +import com.google.samples.apps.nowinandroid.core.testing.util.captureMultiTheme +import dagger.hilt.android.testing.HiltTestApplication +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config +import org.robolectric.annotation.GraphicsMode +import org.robolectric.annotation.LooperMode + +@RunWith(RobolectricTestRunner::class) +@GraphicsMode(GraphicsMode.Mode.NATIVE) +@Config(application = HiltTestApplication::class, qualifiers = "480dpi") +@LooperMode(LooperMode.Mode.PAUSED) +class LoadingWheelScreenshotTests { + + @get:Rule + val composeTestRule = createAndroidComposeRule() + + @Test + fun loadingWheel_multipleThemes() { + composeTestRule.captureMultiTheme("LoadingWheel") { + Surface { + NiaLoadingWheel(contentDesc = "test") + } + } + } + + @Test + fun overlayLoadingWheel_multipleThemes() { + composeTestRule.captureMultiTheme("LoadingWheel", "OverlayLoadingWheel") { + Surface { + NiaOverlayLoadingWheel(contentDesc = "test") + } + } + } + + @Test + fun loadingWheelAnimation() { + composeTestRule.mainClock.autoAdvance = false + composeTestRule.setContent { + NiaTheme { + NiaLoadingWheel(contentDesc = "") + } + } + // Try multiple frames of the animation; some arbitrary, some synchronized with duration. + listOf(20L, 115L, 724L, 1000L).forEach { deltaTime -> + composeTestRule.mainClock.advanceTimeBy(deltaTime) + composeTestRule.onRoot() + .captureRoboImage( + "src/test/screenshots/LoadingWheel/LoadingWheel_animation_$deltaTime.png", + roborazziOptions = DefaultRoborazziOptions, + ) + } + } +} diff --git a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/NavigationScreenshotTests.kt b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/NavigationScreenshotTests.kt new file mode 100644 index 000000000..be2c6fa28 --- /dev/null +++ b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/NavigationScreenshotTests.kt @@ -0,0 +1,111 @@ +/* + * Copyright 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.core.designsystem + +import androidx.activity.ComponentActivity +import androidx.compose.material3.Icon +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.ui.platform.LocalInspectionMode +import androidx.compose.ui.test.DeviceConfigurationOverride +import androidx.compose.ui.test.FontScale +import androidx.compose.ui.test.junit4.createAndroidComposeRule +import androidx.compose.ui.test.onRoot +import com.github.takahirom.roborazzi.captureRoboImage +import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaNavigationBar +import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaNavigationBarItem +import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons +import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme +import com.google.samples.apps.nowinandroid.core.testing.util.DefaultRoborazziOptions +import com.google.samples.apps.nowinandroid.core.testing.util.captureMultiTheme +import dagger.hilt.android.testing.HiltTestApplication +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config +import org.robolectric.annotation.GraphicsMode +import org.robolectric.annotation.LooperMode + +@RunWith(RobolectricTestRunner::class) +@GraphicsMode(GraphicsMode.Mode.NATIVE) +@Config(application = HiltTestApplication::class, qualifiers = "480dpi") +@LooperMode(LooperMode.Mode.PAUSED) +class NavigationScreenshotTests { + + @get:Rule + val composeTestRule = createAndroidComposeRule() + + @Test + fun navigation_multipleThemes() { + composeTestRule.captureMultiTheme("Navigation") { + Surface { + NiaNavigationBarExample() + } + } + } + + @Test + fun navigation_hugeFont() { + composeTestRule.setContent { + CompositionLocalProvider( + LocalInspectionMode provides true, + ) { + DeviceConfigurationOverride( + DeviceConfigurationOverride.FontScale(2f), + ) { + NiaTheme { + NiaNavigationBarExample("Looong item") + } + } + } + } + composeTestRule.onRoot() + .captureRoboImage( + "src/test/screenshots/Navigation" + + "/Navigation_fontScale2.png", + roborazziOptions = DefaultRoborazziOptions, + ) + } + + @Composable + private fun NiaNavigationBarExample(label: String = "Item") { + NiaNavigationBar { + (0..2).forEach { index -> + NiaNavigationBarItem( + icon = { + Icon( + imageVector = NiaIcons.UpcomingBorder, + contentDescription = "", + ) + }, + selectedIcon = { + Icon( + imageVector = NiaIcons.Upcoming, + contentDescription = "", + ) + }, + label = { Text(label) }, + selected = index == 0, + onClick = { }, + ) + } + } + } +} diff --git a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/TabsScreenshotTests.kt b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/TabsScreenshotTests.kt new file mode 100644 index 000000000..8ab711505 --- /dev/null +++ b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/TabsScreenshotTests.kt @@ -0,0 +1,97 @@ +/* + * Copyright 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.core.designsystem + +import androidx.activity.ComponentActivity +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.ui.platform.LocalInspectionMode +import androidx.compose.ui.test.DeviceConfigurationOverride +import androidx.compose.ui.test.FontScale +import androidx.compose.ui.test.junit4.createAndroidComposeRule +import androidx.compose.ui.test.onRoot +import com.github.takahirom.roborazzi.captureRoboImage +import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaTab +import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaTabRow +import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme +import com.google.samples.apps.nowinandroid.core.testing.util.DefaultRoborazziOptions +import com.google.samples.apps.nowinandroid.core.testing.util.captureMultiTheme +import dagger.hilt.android.testing.HiltTestApplication +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config +import org.robolectric.annotation.GraphicsMode +import org.robolectric.annotation.LooperMode + +@RunWith(RobolectricTestRunner::class) +@GraphicsMode(GraphicsMode.Mode.NATIVE) +@Config(application = HiltTestApplication::class, qualifiers = "480dpi") +@LooperMode(LooperMode.Mode.PAUSED) +class TabsScreenshotTests { + + @get:Rule + val composeTestRule = createAndroidComposeRule() + + @Test + fun tabs_multipleThemes() { + composeTestRule.captureMultiTheme("Tabs") { + NiaTabsExample() + } + } + + @Test + fun tabs_hugeFont() { + composeTestRule.setContent { + CompositionLocalProvider( + LocalInspectionMode provides true, + ) { + DeviceConfigurationOverride( + DeviceConfigurationOverride.FontScale(2f), + ) { + NiaTheme { + NiaTabsExample("Looooong item") + } + } + } + } + composeTestRule.onRoot() + .captureRoboImage( + "src/test/screenshots/Tabs/Tabs_fontScale2.png", + roborazziOptions = DefaultRoborazziOptions, + ) + } + + @Composable + private fun NiaTabsExample(label: String = "Topics") { + Surface { + val titles = listOf(label, "People") + NiaTabRow(selectedTabIndex = 0) { + titles.forEachIndexed { index, title -> + NiaTab( + selected = index == 0, + onClick = { }, + text = { Text(text = title) }, + ) + } + } + } + } +} diff --git a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/TagScreenshotTests.kt b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/TagScreenshotTests.kt new file mode 100644 index 000000000..8a519942d --- /dev/null +++ b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/TagScreenshotTests.kt @@ -0,0 +1,82 @@ +/* + * Copyright 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.core.designsystem + +import androidx.activity.ComponentActivity +import androidx.compose.material3.Text +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.ui.platform.LocalInspectionMode +import androidx.compose.ui.test.DeviceConfigurationOverride +import androidx.compose.ui.test.FontScale +import androidx.compose.ui.test.junit4.createAndroidComposeRule +import androidx.compose.ui.test.onRoot +import com.github.takahirom.roborazzi.captureRoboImage +import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaTopicTag +import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme +import com.google.samples.apps.nowinandroid.core.testing.util.DefaultRoborazziOptions +import com.google.samples.apps.nowinandroid.core.testing.util.captureMultiTheme +import dagger.hilt.android.testing.HiltTestApplication +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config +import org.robolectric.annotation.GraphicsMode +import org.robolectric.annotation.LooperMode + +@RunWith(RobolectricTestRunner::class) +@GraphicsMode(GraphicsMode.Mode.NATIVE) +@Config(application = HiltTestApplication::class, qualifiers = "480dpi") +@LooperMode(LooperMode.Mode.PAUSED) +class TagScreenshotTests { + + @get:Rule + val composeTestRule = createAndroidComposeRule() + + @Test + fun Tag_multipleThemes() { + composeTestRule.captureMultiTheme("Tag") { + NiaTopicTag(followed = true, onClick = {}) { + Text("TOPIC") + } + } + } + + @Test + fun tag_hugeFont() { + composeTestRule.setContent { + CompositionLocalProvider( + LocalInspectionMode provides true, + ) { + DeviceConfigurationOverride( + DeviceConfigurationOverride.Companion.FontScale(2f), + ) { + NiaTheme { + NiaTopicTag(followed = true, onClick = {}) { + Text("LOOOOONG TOPIC") + } + } + } + } + } + composeTestRule.onRoot() + .captureRoboImage( + "src/test/screenshots/Tag/Tag_fontScale2.png", + roborazziOptions = DefaultRoborazziOptions, + ) + } +} diff --git a/core/designsystem/src/androidTest/java/com/google/samples/apps/nowinandroid/core/designsystem/ThemeTest.kt b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/ThemeTest.kt similarity index 90% rename from core/designsystem/src/androidTest/java/com/google/samples/apps/nowinandroid/core/designsystem/ThemeTest.kt rename to core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/ThemeTest.kt index b10df053c..1044a5443 100644 --- a/core/designsystem/src/androidTest/java/com/google/samples/apps/nowinandroid/core/designsystem/ThemeTest.kt +++ b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/ThemeTest.kt @@ -16,7 +16,8 @@ package com.google.samples.apps.nowinandroid.core.designsystem -import android.os.Build +import android.os.Build.VERSION.SDK_INT +import android.os.Build.VERSION_CODES import androidx.compose.material3.ColorScheme import androidx.compose.material3.MaterialTheme import androidx.compose.material3.dynamicDarkColorScheme @@ -43,6 +44,8 @@ import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme import com.google.samples.apps.nowinandroid.core.designsystem.theme.TintTheme import org.junit.Rule import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner import kotlin.test.assertEquals /** @@ -53,6 +56,7 @@ import kotlin.test.assertEquals * [LocalBackgroundTheme] — have the expected values for a given theme mode, as specified by the * design system. */ +@RunWith(RobolectricTestRunner::class) class ThemeTest { @get:Rule @@ -219,60 +223,41 @@ class ThemeTest { } @Composable - private fun dynamicLightColorSchemeWithFallback(): ColorScheme { - return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { - dynamicLightColorScheme(LocalContext.current) - } else { - LightDefaultColorScheme - } + private fun dynamicLightColorSchemeWithFallback(): ColorScheme = when { + SDK_INT >= VERSION_CODES.S -> dynamicLightColorScheme(LocalContext.current) + else -> LightDefaultColorScheme } @Composable - private fun dynamicDarkColorSchemeWithFallback(): ColorScheme { - return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { - dynamicDarkColorScheme(LocalContext.current) - } else { - DarkDefaultColorScheme - } + private fun dynamicDarkColorSchemeWithFallback(): ColorScheme = when { + SDK_INT >= VERSION_CODES.S -> dynamicDarkColorScheme(LocalContext.current) + else -> DarkDefaultColorScheme } - private fun emptyGradientColors(colorScheme: ColorScheme): GradientColors { - return GradientColors(container = colorScheme.surfaceColorAtElevation(2.dp)) - } + private fun emptyGradientColors(colorScheme: ColorScheme): GradientColors = + GradientColors(container = colorScheme.surfaceColorAtElevation(2.dp)) - private fun defaultGradientColors(colorScheme: ColorScheme): GradientColors { - return GradientColors( - top = colorScheme.inverseOnSurface, - bottom = colorScheme.primaryContainer, - container = colorScheme.surface, - ) - } + private fun defaultGradientColors(colorScheme: ColorScheme): GradientColors = GradientColors( + top = colorScheme.inverseOnSurface, + bottom = colorScheme.primaryContainer, + container = colorScheme.surface, + ) - private fun dynamicGradientColorsWithFallback(colorScheme: ColorScheme): GradientColors { - return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { - emptyGradientColors(colorScheme) - } else { - defaultGradientColors(colorScheme) - } + private fun dynamicGradientColorsWithFallback(colorScheme: ColorScheme): GradientColors = when { + SDK_INT >= VERSION_CODES.S -> emptyGradientColors(colorScheme) + else -> defaultGradientColors(colorScheme) } - private fun defaultBackgroundTheme(colorScheme: ColorScheme): BackgroundTheme { - return BackgroundTheme( - color = colorScheme.surface, - tonalElevation = 2.dp, - ) - } + private fun defaultBackgroundTheme(colorScheme: ColorScheme): BackgroundTheme = BackgroundTheme( + color = colorScheme.surface, + tonalElevation = 2.dp, + ) - private fun defaultTintTheme(): TintTheme { - return TintTheme() - } + private fun defaultTintTheme(): TintTheme = TintTheme() - private fun dynamicTintThemeWithFallback(colorScheme: ColorScheme): TintTheme { - return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { - TintTheme(colorScheme.primary) - } else { - TintTheme() - } + private fun dynamicTintThemeWithFallback(colorScheme: ColorScheme): TintTheme = when { + SDK_INT >= VERSION_CODES.S -> TintTheme(colorScheme.primary) + else -> TintTheme() } /** diff --git a/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/TopAppBarScreenshotTests.kt b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/TopAppBarScreenshotTests.kt new file mode 100644 index 000000000..5988ed592 --- /dev/null +++ b/core/designsystem/src/test/kotlin/com/google/samples/apps/nowinandroid/core/designsystem/TopAppBarScreenshotTests.kt @@ -0,0 +1,92 @@ +/* + * Copyright 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.core.designsystem + +import androidx.activity.ComponentActivity +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.ui.platform.LocalInspectionMode +import androidx.compose.ui.test.DeviceConfigurationOverride +import androidx.compose.ui.test.FontScale +import androidx.compose.ui.test.junit4.createAndroidComposeRule +import androidx.compose.ui.test.onRoot +import com.github.takahirom.roborazzi.captureRoboImage +import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaTopAppBar +import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons +import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme +import com.google.samples.apps.nowinandroid.core.testing.util.DefaultRoborazziOptions +import com.google.samples.apps.nowinandroid.core.testing.util.captureMultiTheme +import dagger.hilt.android.testing.HiltTestApplication +import org.junit.Rule +import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner +import org.robolectric.annotation.Config +import org.robolectric.annotation.GraphicsMode +import org.robolectric.annotation.LooperMode + +@OptIn(ExperimentalMaterial3Api::class) +@RunWith(RobolectricTestRunner::class) +@GraphicsMode(GraphicsMode.Mode.NATIVE) +@Config(application = HiltTestApplication::class, qualifiers = "480dpi") +@LooperMode(LooperMode.Mode.PAUSED) +class TopAppBarScreenshotTests { + + @get:Rule + val composeTestRule = createAndroidComposeRule() + + @Test + fun topAppBar_multipleThemes() { + composeTestRule.captureMultiTheme("TopAppBar") { + NiaTopAppBarExample() + } + } + + @Test + fun topAppBar_hugeFont() { + composeTestRule.setContent { + CompositionLocalProvider( + LocalInspectionMode provides true, + ) { + DeviceConfigurationOverride( + DeviceConfigurationOverride.FontScale(2f), + ) { + NiaTheme { + NiaTopAppBarExample() + } + } + } + } + composeTestRule.onRoot() + .captureRoboImage( + "src/test/screenshots/TopAppBar/TopAppBar_fontScale2.png", + roborazziOptions = DefaultRoborazziOptions, + ) + } + + @Composable + private fun NiaTopAppBarExample() { + NiaTopAppBar( + titleRes = android.R.string.untitled, + navigationIcon = NiaIcons.Search, + navigationIconContentDescription = "Navigation icon", + actionIcon = NiaIcons.MoreVert, + actionIconContentDescription = "Action icon", + ) + } +} diff --git a/core/designsystem/src/test/screenshots/Background/Background_dark_androidTheme_notDynamic.png b/core/designsystem/src/test/screenshots/Background/Background_dark_androidTheme_notDynamic.png new file mode 100644 index 000000000..34b6b9589 Binary files /dev/null and b/core/designsystem/src/test/screenshots/Background/Background_dark_androidTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Background/Background_dark_defaultTheme_dynamic.png b/core/designsystem/src/test/screenshots/Background/Background_dark_defaultTheme_dynamic.png new file mode 100644 index 000000000..67cafa03d Binary files /dev/null and b/core/designsystem/src/test/screenshots/Background/Background_dark_defaultTheme_dynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Background/Background_dark_defaultTheme_notDynamic.png b/core/designsystem/src/test/screenshots/Background/Background_dark_defaultTheme_notDynamic.png new file mode 100644 index 000000000..3f187d9d2 Binary files /dev/null and b/core/designsystem/src/test/screenshots/Background/Background_dark_defaultTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Background/Background_light_androidTheme_notDynamic.png b/core/designsystem/src/test/screenshots/Background/Background_light_androidTheme_notDynamic.png new file mode 100644 index 000000000..ebcf62c08 Binary files /dev/null and b/core/designsystem/src/test/screenshots/Background/Background_light_androidTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Background/Background_light_defaultTheme_dynamic.png b/core/designsystem/src/test/screenshots/Background/Background_light_defaultTheme_dynamic.png new file mode 100644 index 000000000..7f910a34b Binary files /dev/null and b/core/designsystem/src/test/screenshots/Background/Background_light_defaultTheme_dynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Background/Background_light_defaultTheme_notDynamic.png b/core/designsystem/src/test/screenshots/Background/Background_light_defaultTheme_notDynamic.png new file mode 100644 index 000000000..912480c6a Binary files /dev/null and b/core/designsystem/src/test/screenshots/Background/Background_light_defaultTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Background/GradientBackground_dark_androidTheme_notDynamic.png b/core/designsystem/src/test/screenshots/Background/GradientBackground_dark_androidTheme_notDynamic.png new file mode 100644 index 000000000..34b6b9589 Binary files /dev/null and b/core/designsystem/src/test/screenshots/Background/GradientBackground_dark_androidTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Background/GradientBackground_dark_defaultTheme_dynamic.png b/core/designsystem/src/test/screenshots/Background/GradientBackground_dark_defaultTheme_dynamic.png new file mode 100644 index 000000000..a9b2c8694 Binary files /dev/null and b/core/designsystem/src/test/screenshots/Background/GradientBackground_dark_defaultTheme_dynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Background/GradientBackground_dark_defaultTheme_notDynamic.png b/core/designsystem/src/test/screenshots/Background/GradientBackground_dark_defaultTheme_notDynamic.png new file mode 100644 index 000000000..f88a672c4 Binary files /dev/null and b/core/designsystem/src/test/screenshots/Background/GradientBackground_dark_defaultTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Background/GradientBackground_light_androidTheme_notDynamic.png b/core/designsystem/src/test/screenshots/Background/GradientBackground_light_androidTheme_notDynamic.png new file mode 100644 index 000000000..ebcf62c08 Binary files /dev/null and b/core/designsystem/src/test/screenshots/Background/GradientBackground_light_androidTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Background/GradientBackground_light_defaultTheme_dynamic.png b/core/designsystem/src/test/screenshots/Background/GradientBackground_light_defaultTheme_dynamic.png new file mode 100644 index 000000000..6fef6436a Binary files /dev/null and b/core/designsystem/src/test/screenshots/Background/GradientBackground_light_defaultTheme_dynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Background/GradientBackground_light_defaultTheme_notDynamic.png b/core/designsystem/src/test/screenshots/Background/GradientBackground_light_defaultTheme_notDynamic.png new file mode 100644 index 000000000..e619f1332 Binary files /dev/null and b/core/designsystem/src/test/screenshots/Background/GradientBackground_light_defaultTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Button/ButtonLeadingIcon_dark_defaultTheme_dynamic.png b/core/designsystem/src/test/screenshots/Button/ButtonLeadingIcon_dark_defaultTheme_dynamic.png new file mode 100644 index 000000000..cf0656fbd Binary files /dev/null and b/core/designsystem/src/test/screenshots/Button/ButtonLeadingIcon_dark_defaultTheme_dynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Button/ButtonLeadingIcon_dark_defaultTheme_notDynamic.png b/core/designsystem/src/test/screenshots/Button/ButtonLeadingIcon_dark_defaultTheme_notDynamic.png new file mode 100644 index 000000000..9514112f1 Binary files /dev/null and b/core/designsystem/src/test/screenshots/Button/ButtonLeadingIcon_dark_defaultTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Button/ButtonLeadingIcon_light_defaultTheme_dynamic.png b/core/designsystem/src/test/screenshots/Button/ButtonLeadingIcon_light_defaultTheme_dynamic.png new file mode 100644 index 000000000..7774a18bc Binary files /dev/null and b/core/designsystem/src/test/screenshots/Button/ButtonLeadingIcon_light_defaultTheme_dynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Button/ButtonLeadingIcon_light_defaultTheme_notDynamic.png b/core/designsystem/src/test/screenshots/Button/ButtonLeadingIcon_light_defaultTheme_notDynamic.png new file mode 100644 index 000000000..8858fb493 Binary files /dev/null and b/core/designsystem/src/test/screenshots/Button/ButtonLeadingIcon_light_defaultTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Button/Button_dark_androidTheme_notDynamic.png b/core/designsystem/src/test/screenshots/Button/Button_dark_androidTheme_notDynamic.png new file mode 100644 index 000000000..a5d3d4a3d Binary files /dev/null and b/core/designsystem/src/test/screenshots/Button/Button_dark_androidTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Button/Button_dark_defaultTheme_dynamic.png b/core/designsystem/src/test/screenshots/Button/Button_dark_defaultTheme_dynamic.png new file mode 100644 index 000000000..01538b44b Binary files /dev/null and b/core/designsystem/src/test/screenshots/Button/Button_dark_defaultTheme_dynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Button/Button_dark_defaultTheme_notDynamic.png b/core/designsystem/src/test/screenshots/Button/Button_dark_defaultTheme_notDynamic.png new file mode 100644 index 000000000..cd0c07df1 Binary files /dev/null and b/core/designsystem/src/test/screenshots/Button/Button_dark_defaultTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Button/Button_light_androidTheme_notDynamic.png b/core/designsystem/src/test/screenshots/Button/Button_light_androidTheme_notDynamic.png new file mode 100644 index 000000000..ab113beec Binary files /dev/null and b/core/designsystem/src/test/screenshots/Button/Button_light_androidTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Button/Button_light_defaultTheme_dynamic.png b/core/designsystem/src/test/screenshots/Button/Button_light_defaultTheme_dynamic.png new file mode 100644 index 000000000..fdbbb820d Binary files /dev/null and b/core/designsystem/src/test/screenshots/Button/Button_light_defaultTheme_dynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Button/Button_light_defaultTheme_notDynamic.png b/core/designsystem/src/test/screenshots/Button/Button_light_defaultTheme_notDynamic.png new file mode 100644 index 000000000..b567adf84 Binary files /dev/null and b/core/designsystem/src/test/screenshots/Button/Button_light_defaultTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Button/OutlineButton_dark_androidTheme_notDynamic.png b/core/designsystem/src/test/screenshots/Button/OutlineButton_dark_androidTheme_notDynamic.png new file mode 100644 index 000000000..a9ba099c0 Binary files /dev/null and b/core/designsystem/src/test/screenshots/Button/OutlineButton_dark_androidTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Button/OutlineButton_dark_defaultTheme_dynamic.png b/core/designsystem/src/test/screenshots/Button/OutlineButton_dark_defaultTheme_dynamic.png new file mode 100644 index 000000000..6fce27976 Binary files /dev/null and b/core/designsystem/src/test/screenshots/Button/OutlineButton_dark_defaultTheme_dynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Button/OutlineButton_dark_defaultTheme_notDynamic.png b/core/designsystem/src/test/screenshots/Button/OutlineButton_dark_defaultTheme_notDynamic.png new file mode 100644 index 000000000..ce30b66ba Binary files /dev/null and b/core/designsystem/src/test/screenshots/Button/OutlineButton_dark_defaultTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Button/OutlineButton_light_androidTheme_notDynamic.png b/core/designsystem/src/test/screenshots/Button/OutlineButton_light_androidTheme_notDynamic.png new file mode 100644 index 000000000..bb6aa592f Binary files /dev/null and b/core/designsystem/src/test/screenshots/Button/OutlineButton_light_androidTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Button/OutlineButton_light_defaultTheme_dynamic.png b/core/designsystem/src/test/screenshots/Button/OutlineButton_light_defaultTheme_dynamic.png new file mode 100644 index 000000000..c18a86878 Binary files /dev/null and b/core/designsystem/src/test/screenshots/Button/OutlineButton_light_defaultTheme_dynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Button/OutlineButton_light_defaultTheme_notDynamic.png b/core/designsystem/src/test/screenshots/Button/OutlineButton_light_defaultTheme_notDynamic.png new file mode 100644 index 000000000..d2059e4d7 Binary files /dev/null and b/core/designsystem/src/test/screenshots/Button/OutlineButton_light_defaultTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/FilterChip/FilterChipSelected_dark_androidTheme_notDynamic.png b/core/designsystem/src/test/screenshots/FilterChip/FilterChipSelected_dark_androidTheme_notDynamic.png new file mode 100644 index 000000000..5881f76b7 Binary files /dev/null and b/core/designsystem/src/test/screenshots/FilterChip/FilterChipSelected_dark_androidTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/FilterChip/FilterChipSelected_dark_defaultTheme_dynamic.png b/core/designsystem/src/test/screenshots/FilterChip/FilterChipSelected_dark_defaultTheme_dynamic.png new file mode 100644 index 000000000..4b5c91914 Binary files /dev/null and b/core/designsystem/src/test/screenshots/FilterChip/FilterChipSelected_dark_defaultTheme_dynamic.png differ diff --git a/core/designsystem/src/test/screenshots/FilterChip/FilterChipSelected_dark_defaultTheme_notDynamic.png b/core/designsystem/src/test/screenshots/FilterChip/FilterChipSelected_dark_defaultTheme_notDynamic.png new file mode 100644 index 000000000..f2e863865 Binary files /dev/null and b/core/designsystem/src/test/screenshots/FilterChip/FilterChipSelected_dark_defaultTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/FilterChip/FilterChipSelected_light_androidTheme_notDynamic.png b/core/designsystem/src/test/screenshots/FilterChip/FilterChipSelected_light_androidTheme_notDynamic.png new file mode 100644 index 000000000..1e3b04e50 Binary files /dev/null and b/core/designsystem/src/test/screenshots/FilterChip/FilterChipSelected_light_androidTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/FilterChip/FilterChipSelected_light_defaultTheme_dynamic.png b/core/designsystem/src/test/screenshots/FilterChip/FilterChipSelected_light_defaultTheme_dynamic.png new file mode 100644 index 000000000..865368ca1 Binary files /dev/null and b/core/designsystem/src/test/screenshots/FilterChip/FilterChipSelected_light_defaultTheme_dynamic.png differ diff --git a/core/designsystem/src/test/screenshots/FilterChip/FilterChipSelected_light_defaultTheme_notDynamic.png b/core/designsystem/src/test/screenshots/FilterChip/FilterChipSelected_light_defaultTheme_notDynamic.png new file mode 100644 index 000000000..be73f060d Binary files /dev/null and b/core/designsystem/src/test/screenshots/FilterChip/FilterChipSelected_light_defaultTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/FilterChip/FilterChip_dark_androidTheme_notDynamic.png b/core/designsystem/src/test/screenshots/FilterChip/FilterChip_dark_androidTheme_notDynamic.png new file mode 100644 index 000000000..364f59a47 Binary files /dev/null and b/core/designsystem/src/test/screenshots/FilterChip/FilterChip_dark_androidTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/FilterChip/FilterChip_dark_defaultTheme_dynamic.png b/core/designsystem/src/test/screenshots/FilterChip/FilterChip_dark_defaultTheme_dynamic.png new file mode 100644 index 000000000..8f90977fd Binary files /dev/null and b/core/designsystem/src/test/screenshots/FilterChip/FilterChip_dark_defaultTheme_dynamic.png differ diff --git a/core/designsystem/src/test/screenshots/FilterChip/FilterChip_dark_defaultTheme_notDynamic.png b/core/designsystem/src/test/screenshots/FilterChip/FilterChip_dark_defaultTheme_notDynamic.png new file mode 100644 index 000000000..5303eb64e Binary files /dev/null and b/core/designsystem/src/test/screenshots/FilterChip/FilterChip_dark_defaultTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/FilterChip/FilterChip_fontScale2.png b/core/designsystem/src/test/screenshots/FilterChip/FilterChip_fontScale2.png new file mode 100644 index 000000000..2dc430ca8 Binary files /dev/null and b/core/designsystem/src/test/screenshots/FilterChip/FilterChip_fontScale2.png differ diff --git a/core/designsystem/src/test/screenshots/FilterChip/FilterChip_light_androidTheme_notDynamic.png b/core/designsystem/src/test/screenshots/FilterChip/FilterChip_light_androidTheme_notDynamic.png new file mode 100644 index 000000000..fadd074d8 Binary files /dev/null and b/core/designsystem/src/test/screenshots/FilterChip/FilterChip_light_androidTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/FilterChip/FilterChip_light_defaultTheme_dynamic.png b/core/designsystem/src/test/screenshots/FilterChip/FilterChip_light_defaultTheme_dynamic.png new file mode 100644 index 000000000..2f3749cf3 Binary files /dev/null and b/core/designsystem/src/test/screenshots/FilterChip/FilterChip_light_defaultTheme_dynamic.png differ diff --git a/core/designsystem/src/test/screenshots/FilterChip/FilterChip_light_defaultTheme_notDynamic.png b/core/designsystem/src/test/screenshots/FilterChip/FilterChip_light_defaultTheme_notDynamic.png new file mode 100644 index 000000000..0cfaaefae Binary files /dev/null and b/core/designsystem/src/test/screenshots/FilterChip/FilterChip_light_defaultTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/IconButton/IconButtonUnchecked_dark_androidTheme_notDynamic.png b/core/designsystem/src/test/screenshots/IconButton/IconButtonUnchecked_dark_androidTheme_notDynamic.png new file mode 100644 index 000000000..a1512fa75 Binary files /dev/null and b/core/designsystem/src/test/screenshots/IconButton/IconButtonUnchecked_dark_androidTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/IconButton/IconButtonUnchecked_dark_defaultTheme_dynamic.png b/core/designsystem/src/test/screenshots/IconButton/IconButtonUnchecked_dark_defaultTheme_dynamic.png new file mode 100644 index 000000000..fe4b54ae2 Binary files /dev/null and b/core/designsystem/src/test/screenshots/IconButton/IconButtonUnchecked_dark_defaultTheme_dynamic.png differ diff --git a/core/designsystem/src/test/screenshots/IconButton/IconButtonUnchecked_dark_defaultTheme_notDynamic.png b/core/designsystem/src/test/screenshots/IconButton/IconButtonUnchecked_dark_defaultTheme_notDynamic.png new file mode 100644 index 000000000..f912ce3c1 Binary files /dev/null and b/core/designsystem/src/test/screenshots/IconButton/IconButtonUnchecked_dark_defaultTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/IconButton/IconButtonUnchecked_light_androidTheme_notDynamic.png b/core/designsystem/src/test/screenshots/IconButton/IconButtonUnchecked_light_androidTheme_notDynamic.png new file mode 100644 index 000000000..339479779 Binary files /dev/null and b/core/designsystem/src/test/screenshots/IconButton/IconButtonUnchecked_light_androidTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/IconButton/IconButtonUnchecked_light_defaultTheme_dynamic.png b/core/designsystem/src/test/screenshots/IconButton/IconButtonUnchecked_light_defaultTheme_dynamic.png new file mode 100644 index 000000000..92079273a Binary files /dev/null and b/core/designsystem/src/test/screenshots/IconButton/IconButtonUnchecked_light_defaultTheme_dynamic.png differ diff --git a/core/designsystem/src/test/screenshots/IconButton/IconButtonUnchecked_light_defaultTheme_notDynamic.png b/core/designsystem/src/test/screenshots/IconButton/IconButtonUnchecked_light_defaultTheme_notDynamic.png new file mode 100644 index 000000000..24580adf2 Binary files /dev/null and b/core/designsystem/src/test/screenshots/IconButton/IconButtonUnchecked_light_defaultTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/IconButton/IconButton_dark_androidTheme_notDynamic.png b/core/designsystem/src/test/screenshots/IconButton/IconButton_dark_androidTheme_notDynamic.png new file mode 100644 index 000000000..ce2cdf804 Binary files /dev/null and b/core/designsystem/src/test/screenshots/IconButton/IconButton_dark_androidTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/IconButton/IconButton_dark_defaultTheme_dynamic.png b/core/designsystem/src/test/screenshots/IconButton/IconButton_dark_defaultTheme_dynamic.png new file mode 100644 index 000000000..ce2cdf804 Binary files /dev/null and b/core/designsystem/src/test/screenshots/IconButton/IconButton_dark_defaultTheme_dynamic.png differ diff --git a/core/designsystem/src/test/screenshots/IconButton/IconButton_dark_defaultTheme_notDynamic.png b/core/designsystem/src/test/screenshots/IconButton/IconButton_dark_defaultTheme_notDynamic.png new file mode 100644 index 000000000..ce2cdf804 Binary files /dev/null and b/core/designsystem/src/test/screenshots/IconButton/IconButton_dark_defaultTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/IconButton/IconButton_light_androidTheme_notDynamic.png b/core/designsystem/src/test/screenshots/IconButton/IconButton_light_androidTheme_notDynamic.png new file mode 100644 index 000000000..ce2cdf804 Binary files /dev/null and b/core/designsystem/src/test/screenshots/IconButton/IconButton_light_androidTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/IconButton/IconButton_light_defaultTheme_dynamic.png b/core/designsystem/src/test/screenshots/IconButton/IconButton_light_defaultTheme_dynamic.png new file mode 100644 index 000000000..ce2cdf804 Binary files /dev/null and b/core/designsystem/src/test/screenshots/IconButton/IconButton_light_defaultTheme_dynamic.png differ diff --git a/core/designsystem/src/test/screenshots/IconButton/IconButton_light_defaultTheme_notDynamic.png b/core/designsystem/src/test/screenshots/IconButton/IconButton_light_defaultTheme_notDynamic.png new file mode 100644 index 000000000..ce2cdf804 Binary files /dev/null and b/core/designsystem/src/test/screenshots/IconButton/IconButton_light_defaultTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/LoadingWheel/LoadingWheel_animation_1000.png b/core/designsystem/src/test/screenshots/LoadingWheel/LoadingWheel_animation_1000.png new file mode 100644 index 000000000..450d55a09 Binary files /dev/null and b/core/designsystem/src/test/screenshots/LoadingWheel/LoadingWheel_animation_1000.png differ diff --git a/core/designsystem/src/test/screenshots/LoadingWheel/LoadingWheel_animation_115.png b/core/designsystem/src/test/screenshots/LoadingWheel/LoadingWheel_animation_115.png new file mode 100644 index 000000000..5aa1eb89a Binary files /dev/null and b/core/designsystem/src/test/screenshots/LoadingWheel/LoadingWheel_animation_115.png differ diff --git a/core/designsystem/src/test/screenshots/LoadingWheel/LoadingWheel_animation_20.png b/core/designsystem/src/test/screenshots/LoadingWheel/LoadingWheel_animation_20.png new file mode 100644 index 000000000..74309056f Binary files /dev/null and b/core/designsystem/src/test/screenshots/LoadingWheel/LoadingWheel_animation_20.png differ diff --git a/core/designsystem/src/test/screenshots/LoadingWheel/LoadingWheel_animation_724.png b/core/designsystem/src/test/screenshots/LoadingWheel/LoadingWheel_animation_724.png new file mode 100644 index 000000000..03bf6709e Binary files /dev/null and b/core/designsystem/src/test/screenshots/LoadingWheel/LoadingWheel_animation_724.png differ diff --git a/core/designsystem/src/test/screenshots/LoadingWheel/LoadingWheel_dark_androidTheme_notDynamic.png b/core/designsystem/src/test/screenshots/LoadingWheel/LoadingWheel_dark_androidTheme_notDynamic.png new file mode 100644 index 000000000..cf35893fd Binary files /dev/null and b/core/designsystem/src/test/screenshots/LoadingWheel/LoadingWheel_dark_androidTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/LoadingWheel/LoadingWheel_dark_defaultTheme_dynamic.png b/core/designsystem/src/test/screenshots/LoadingWheel/LoadingWheel_dark_defaultTheme_dynamic.png new file mode 100644 index 000000000..013aac763 Binary files /dev/null and b/core/designsystem/src/test/screenshots/LoadingWheel/LoadingWheel_dark_defaultTheme_dynamic.png differ diff --git a/core/designsystem/src/test/screenshots/LoadingWheel/LoadingWheel_dark_defaultTheme_notDynamic.png b/core/designsystem/src/test/screenshots/LoadingWheel/LoadingWheel_dark_defaultTheme_notDynamic.png new file mode 100644 index 000000000..19265495c Binary files /dev/null and b/core/designsystem/src/test/screenshots/LoadingWheel/LoadingWheel_dark_defaultTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/LoadingWheel/LoadingWheel_light_androidTheme_notDynamic.png b/core/designsystem/src/test/screenshots/LoadingWheel/LoadingWheel_light_androidTheme_notDynamic.png new file mode 100644 index 000000000..156fc1983 Binary files /dev/null and b/core/designsystem/src/test/screenshots/LoadingWheel/LoadingWheel_light_androidTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/LoadingWheel/LoadingWheel_light_defaultTheme_dynamic.png b/core/designsystem/src/test/screenshots/LoadingWheel/LoadingWheel_light_defaultTheme_dynamic.png new file mode 100644 index 000000000..36d79ab6c Binary files /dev/null and b/core/designsystem/src/test/screenshots/LoadingWheel/LoadingWheel_light_defaultTheme_dynamic.png differ diff --git a/core/designsystem/src/test/screenshots/LoadingWheel/LoadingWheel_light_defaultTheme_notDynamic.png b/core/designsystem/src/test/screenshots/LoadingWheel/LoadingWheel_light_defaultTheme_notDynamic.png new file mode 100644 index 000000000..89ea5e37c Binary files /dev/null and b/core/designsystem/src/test/screenshots/LoadingWheel/LoadingWheel_light_defaultTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/LoadingWheel/OverlayLoadingWheel_dark_androidTheme_notDynamic.png b/core/designsystem/src/test/screenshots/LoadingWheel/OverlayLoadingWheel_dark_androidTheme_notDynamic.png new file mode 100644 index 000000000..ac0065cc7 Binary files /dev/null and b/core/designsystem/src/test/screenshots/LoadingWheel/OverlayLoadingWheel_dark_androidTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/LoadingWheel/OverlayLoadingWheel_dark_defaultTheme_dynamic.png b/core/designsystem/src/test/screenshots/LoadingWheel/OverlayLoadingWheel_dark_defaultTheme_dynamic.png new file mode 100644 index 000000000..0133bc71a Binary files /dev/null and b/core/designsystem/src/test/screenshots/LoadingWheel/OverlayLoadingWheel_dark_defaultTheme_dynamic.png differ diff --git a/core/designsystem/src/test/screenshots/LoadingWheel/OverlayLoadingWheel_dark_defaultTheme_notDynamic.png b/core/designsystem/src/test/screenshots/LoadingWheel/OverlayLoadingWheel_dark_defaultTheme_notDynamic.png new file mode 100644 index 000000000..2f1d9767c Binary files /dev/null and b/core/designsystem/src/test/screenshots/LoadingWheel/OverlayLoadingWheel_dark_defaultTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/LoadingWheel/OverlayLoadingWheel_light_androidTheme_notDynamic.png b/core/designsystem/src/test/screenshots/LoadingWheel/OverlayLoadingWheel_light_androidTheme_notDynamic.png new file mode 100644 index 000000000..d90547cd8 Binary files /dev/null and b/core/designsystem/src/test/screenshots/LoadingWheel/OverlayLoadingWheel_light_androidTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/LoadingWheel/OverlayLoadingWheel_light_defaultTheme_dynamic.png b/core/designsystem/src/test/screenshots/LoadingWheel/OverlayLoadingWheel_light_defaultTheme_dynamic.png new file mode 100644 index 000000000..142051d68 Binary files /dev/null and b/core/designsystem/src/test/screenshots/LoadingWheel/OverlayLoadingWheel_light_defaultTheme_dynamic.png differ diff --git a/core/designsystem/src/test/screenshots/LoadingWheel/OverlayLoadingWheel_light_defaultTheme_notDynamic.png b/core/designsystem/src/test/screenshots/LoadingWheel/OverlayLoadingWheel_light_defaultTheme_notDynamic.png new file mode 100644 index 000000000..6949a8908 Binary files /dev/null and b/core/designsystem/src/test/screenshots/LoadingWheel/OverlayLoadingWheel_light_defaultTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Navigation/Navigation_dark_androidTheme_notDynamic.png b/core/designsystem/src/test/screenshots/Navigation/Navigation_dark_androidTheme_notDynamic.png new file mode 100644 index 000000000..b2a0fb99c Binary files /dev/null and b/core/designsystem/src/test/screenshots/Navigation/Navigation_dark_androidTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Navigation/Navigation_dark_defaultTheme_dynamic.png b/core/designsystem/src/test/screenshots/Navigation/Navigation_dark_defaultTheme_dynamic.png new file mode 100644 index 000000000..8836faebc Binary files /dev/null and b/core/designsystem/src/test/screenshots/Navigation/Navigation_dark_defaultTheme_dynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Navigation/Navigation_dark_defaultTheme_notDynamic.png b/core/designsystem/src/test/screenshots/Navigation/Navigation_dark_defaultTheme_notDynamic.png new file mode 100644 index 000000000..a4abd2d5b Binary files /dev/null and b/core/designsystem/src/test/screenshots/Navigation/Navigation_dark_defaultTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Navigation/Navigation_fontScale2.png b/core/designsystem/src/test/screenshots/Navigation/Navigation_fontScale2.png new file mode 100644 index 000000000..97bbb0892 Binary files /dev/null and b/core/designsystem/src/test/screenshots/Navigation/Navigation_fontScale2.png differ diff --git a/core/designsystem/src/test/screenshots/Navigation/Navigation_light_androidTheme_notDynamic.png b/core/designsystem/src/test/screenshots/Navigation/Navigation_light_androidTheme_notDynamic.png new file mode 100644 index 000000000..a526e36c7 Binary files /dev/null and b/core/designsystem/src/test/screenshots/Navigation/Navigation_light_androidTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Navigation/Navigation_light_defaultTheme_dynamic.png b/core/designsystem/src/test/screenshots/Navigation/Navigation_light_defaultTheme_dynamic.png new file mode 100644 index 000000000..5e27d2497 Binary files /dev/null and b/core/designsystem/src/test/screenshots/Navigation/Navigation_light_defaultTheme_dynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Navigation/Navigation_light_defaultTheme_notDynamic.png b/core/designsystem/src/test/screenshots/Navigation/Navigation_light_defaultTheme_notDynamic.png new file mode 100644 index 000000000..f5671cb14 Binary files /dev/null and b/core/designsystem/src/test/screenshots/Navigation/Navigation_light_defaultTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Tabs/Tabs_dark_androidTheme_notDynamic.png b/core/designsystem/src/test/screenshots/Tabs/Tabs_dark_androidTheme_notDynamic.png new file mode 100644 index 000000000..bdf5d18f3 Binary files /dev/null and b/core/designsystem/src/test/screenshots/Tabs/Tabs_dark_androidTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Tabs/Tabs_dark_defaultTheme_dynamic.png b/core/designsystem/src/test/screenshots/Tabs/Tabs_dark_defaultTheme_dynamic.png new file mode 100644 index 000000000..15cb061a0 Binary files /dev/null and b/core/designsystem/src/test/screenshots/Tabs/Tabs_dark_defaultTheme_dynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Tabs/Tabs_dark_defaultTheme_notDynamic.png b/core/designsystem/src/test/screenshots/Tabs/Tabs_dark_defaultTheme_notDynamic.png new file mode 100644 index 000000000..074f3dc8c Binary files /dev/null and b/core/designsystem/src/test/screenshots/Tabs/Tabs_dark_defaultTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Tabs/Tabs_fontScale2.png b/core/designsystem/src/test/screenshots/Tabs/Tabs_fontScale2.png new file mode 100644 index 000000000..f62ea3ced Binary files /dev/null and b/core/designsystem/src/test/screenshots/Tabs/Tabs_fontScale2.png differ diff --git a/core/designsystem/src/test/screenshots/Tabs/Tabs_light_androidTheme_notDynamic.png b/core/designsystem/src/test/screenshots/Tabs/Tabs_light_androidTheme_notDynamic.png new file mode 100644 index 000000000..5c38870dc Binary files /dev/null and b/core/designsystem/src/test/screenshots/Tabs/Tabs_light_androidTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Tabs/Tabs_light_defaultTheme_dynamic.png b/core/designsystem/src/test/screenshots/Tabs/Tabs_light_defaultTheme_dynamic.png new file mode 100644 index 000000000..0564b3881 Binary files /dev/null and b/core/designsystem/src/test/screenshots/Tabs/Tabs_light_defaultTheme_dynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Tabs/Tabs_light_defaultTheme_notDynamic.png b/core/designsystem/src/test/screenshots/Tabs/Tabs_light_defaultTheme_notDynamic.png new file mode 100644 index 000000000..759641c93 Binary files /dev/null and b/core/designsystem/src/test/screenshots/Tabs/Tabs_light_defaultTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Tag/Tag_dark_androidTheme_notDynamic.png b/core/designsystem/src/test/screenshots/Tag/Tag_dark_androidTheme_notDynamic.png new file mode 100644 index 000000000..522dcd301 Binary files /dev/null and b/core/designsystem/src/test/screenshots/Tag/Tag_dark_androidTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Tag/Tag_dark_defaultTheme_dynamic.png b/core/designsystem/src/test/screenshots/Tag/Tag_dark_defaultTheme_dynamic.png new file mode 100644 index 000000000..13345c365 Binary files /dev/null and b/core/designsystem/src/test/screenshots/Tag/Tag_dark_defaultTheme_dynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Tag/Tag_dark_defaultTheme_notDynamic.png b/core/designsystem/src/test/screenshots/Tag/Tag_dark_defaultTheme_notDynamic.png new file mode 100644 index 000000000..d6cfb48d0 Binary files /dev/null and b/core/designsystem/src/test/screenshots/Tag/Tag_dark_defaultTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Tag/Tag_fontScale2.png b/core/designsystem/src/test/screenshots/Tag/Tag_fontScale2.png new file mode 100644 index 000000000..475707556 Binary files /dev/null and b/core/designsystem/src/test/screenshots/Tag/Tag_fontScale2.png differ diff --git a/core/designsystem/src/test/screenshots/Tag/Tag_light_androidTheme_notDynamic.png b/core/designsystem/src/test/screenshots/Tag/Tag_light_androidTheme_notDynamic.png new file mode 100644 index 000000000..38ebe8b42 Binary files /dev/null and b/core/designsystem/src/test/screenshots/Tag/Tag_light_androidTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Tag/Tag_light_defaultTheme_dynamic.png b/core/designsystem/src/test/screenshots/Tag/Tag_light_defaultTheme_dynamic.png new file mode 100644 index 000000000..00144ba15 Binary files /dev/null and b/core/designsystem/src/test/screenshots/Tag/Tag_light_defaultTheme_dynamic.png differ diff --git a/core/designsystem/src/test/screenshots/Tag/Tag_light_defaultTheme_notDynamic.png b/core/designsystem/src/test/screenshots/Tag/Tag_light_defaultTheme_notDynamic.png new file mode 100644 index 000000000..53b1da266 Binary files /dev/null and b/core/designsystem/src/test/screenshots/Tag/Tag_light_defaultTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/TopAppBar/TopAppBar_dark_androidTheme_notDynamic.png b/core/designsystem/src/test/screenshots/TopAppBar/TopAppBar_dark_androidTheme_notDynamic.png new file mode 100644 index 000000000..753c13605 Binary files /dev/null and b/core/designsystem/src/test/screenshots/TopAppBar/TopAppBar_dark_androidTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/TopAppBar/TopAppBar_dark_defaultTheme_dynamic.png b/core/designsystem/src/test/screenshots/TopAppBar/TopAppBar_dark_defaultTheme_dynamic.png new file mode 100644 index 000000000..1c2d9b3ec Binary files /dev/null and b/core/designsystem/src/test/screenshots/TopAppBar/TopAppBar_dark_defaultTheme_dynamic.png differ diff --git a/core/designsystem/src/test/screenshots/TopAppBar/TopAppBar_dark_defaultTheme_notDynamic.png b/core/designsystem/src/test/screenshots/TopAppBar/TopAppBar_dark_defaultTheme_notDynamic.png new file mode 100644 index 000000000..1baa2362c Binary files /dev/null and b/core/designsystem/src/test/screenshots/TopAppBar/TopAppBar_dark_defaultTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/TopAppBar/TopAppBar_fontScale2.png b/core/designsystem/src/test/screenshots/TopAppBar/TopAppBar_fontScale2.png new file mode 100644 index 000000000..234304db1 Binary files /dev/null and b/core/designsystem/src/test/screenshots/TopAppBar/TopAppBar_fontScale2.png differ diff --git a/core/designsystem/src/test/screenshots/TopAppBar/TopAppBar_light_androidTheme_notDynamic.png b/core/designsystem/src/test/screenshots/TopAppBar/TopAppBar_light_androidTheme_notDynamic.png new file mode 100644 index 000000000..7c0348b04 Binary files /dev/null and b/core/designsystem/src/test/screenshots/TopAppBar/TopAppBar_light_androidTheme_notDynamic.png differ diff --git a/core/designsystem/src/test/screenshots/TopAppBar/TopAppBar_light_defaultTheme_dynamic.png b/core/designsystem/src/test/screenshots/TopAppBar/TopAppBar_light_defaultTheme_dynamic.png new file mode 100644 index 000000000..fbf61adc4 Binary files /dev/null and b/core/designsystem/src/test/screenshots/TopAppBar/TopAppBar_light_defaultTheme_dynamic.png differ diff --git a/core/designsystem/src/test/screenshots/TopAppBar/TopAppBar_light_defaultTheme_notDynamic.png b/core/designsystem/src/test/screenshots/TopAppBar/TopAppBar_light_defaultTheme_notDynamic.png new file mode 100644 index 000000000..078378bea Binary files /dev/null and b/core/designsystem/src/test/screenshots/TopAppBar/TopAppBar_light_defaultTheme_notDynamic.png differ diff --git a/core/domain/README.md b/core/domain/README.md new file mode 100644 index 000000000..cc6905846 --- /dev/null +++ b/core/domain/README.md @@ -0,0 +1,3 @@ +# :core:domain module +## Dependency graph +![Dependency graph](../../docs/images/graphs/dep_graph_core_domain.svg) diff --git a/core/domain/build.gradle.kts b/core/domain/build.gradle.kts index 0e3949aa3..191877459 100644 --- a/core/domain/build.gradle.kts +++ b/core/domain/build.gradle.kts @@ -14,9 +14,9 @@ * limitations under the License. */ plugins { - id("nowinandroid.android.library") - id("nowinandroid.android.library.jacoco") - kotlin("kapt") + alias(libs.plugins.nowinandroid.android.library) + alias(libs.plugins.nowinandroid.android.library.jacoco) + id("com.google.devtools.ksp") } android { @@ -24,13 +24,10 @@ android { } dependencies { - implementation(project(":core:data")) - implementation(project(":core:model")) - implementation(libs.hilt.android) - implementation(libs.kotlinx.coroutines.android) - implementation(libs.kotlinx.datetime) + api(projects.core.data) + api(projects.core.model) - kapt(libs.hilt.compiler) + implementation(libs.javax.inject) - testImplementation(project(":core:testing")) + testImplementation(projects.core.testing) } \ No newline at end of file diff --git a/core/domain/src/main/java/com/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCase.kt b/core/domain/src/main/kotlin/com/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCase.kt similarity index 75% rename from core/domain/src/main/java/com/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCase.kt rename to core/domain/src/main/kotlin/com/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCase.kt index c3c045d44..0167a3192 100644 --- a/core/domain/src/main/java/com/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCase.kt +++ b/core/domain/src/main/kotlin/com/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCase.kt @@ -37,22 +37,20 @@ class GetFollowableTopicsUseCase @Inject constructor( * * @param sortBy - the field used to sort the topics. Default NONE = no sorting. */ - operator fun invoke(sortBy: TopicSortField = NONE): Flow> { - return combine( - userDataRepository.userData, - topicsRepository.getTopics(), - ) { userData, topics -> - val followedTopics = topics - .map { topic -> - FollowableTopic( - topic = topic, - isFollowed = topic.id in userData.followedTopics, - ) - } - when (sortBy) { - NAME -> followedTopics.sortedBy { it.topic.name } - else -> followedTopics + operator fun invoke(sortBy: TopicSortField = NONE): Flow> = combine( + userDataRepository.userData, + topicsRepository.getTopics(), + ) { userData, topics -> + val followedTopics = topics + .map { topic -> + FollowableTopic( + topic = topic, + isFollowed = topic.id in userData.followedTopics, + ) } + when (sortBy) { + NAME -> followedTopics.sortedBy { it.topic.name } + else -> followedTopics } } } diff --git a/core/domain/src/main/java/com/google/samples/apps/nowinandroid/core/domain/GetRecentSearchQueriesUseCase.kt b/core/domain/src/main/kotlin/com/google/samples/apps/nowinandroid/core/domain/GetRecentSearchQueriesUseCase.kt similarity index 100% rename from core/domain/src/main/java/com/google/samples/apps/nowinandroid/core/domain/GetRecentSearchQueriesUseCase.kt rename to core/domain/src/main/kotlin/com/google/samples/apps/nowinandroid/core/domain/GetRecentSearchQueriesUseCase.kt diff --git a/core/domain/src/main/java/com/google/samples/apps/nowinandroid/core/domain/GetSearchContentsUseCase.kt b/core/domain/src/main/kotlin/com/google/samples/apps/nowinandroid/core/domain/GetSearchContentsUseCase.kt similarity index 100% rename from core/domain/src/main/java/com/google/samples/apps/nowinandroid/core/domain/GetSearchContentsUseCase.kt rename to core/domain/src/main/kotlin/com/google/samples/apps/nowinandroid/core/domain/GetSearchContentsUseCase.kt diff --git a/core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCaseTest.kt b/core/domain/src/test/kotlin/com/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCaseTest.kt similarity index 100% rename from core/domain/src/test/java/com/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCaseTest.kt rename to core/domain/src/test/kotlin/com/google/samples/apps/nowinandroid/core/domain/GetFollowableTopicsUseCaseTest.kt diff --git a/core/model/README.md b/core/model/README.md index 5279064f2..efd0eec76 100644 --- a/core/model/README.md +++ b/core/model/README.md @@ -1,3 +1,3 @@ # :core:model module - -![Dependency graph](../../docs/images/graphs/dep_graph_core_model.png) +## Dependency graph +![Dependency graph](../../docs/images/graphs/dep_graph_core_model.svg) diff --git a/core/model/build.gradle.kts b/core/model/build.gradle.kts index 55b49beb7..5d6cabfdf 100644 --- a/core/model/build.gradle.kts +++ b/core/model/build.gradle.kts @@ -15,9 +15,9 @@ */ plugins { - id("nowinandroid.jvm.library") + alias(libs.plugins.nowinandroid.jvm.library) } dependencies { - implementation(libs.kotlinx.datetime) + api(libs.kotlinx.datetime) } diff --git a/core/model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/DarkThemeConfig.kt b/core/model/src/main/kotlin/com/google/samples/apps/nowinandroid/core/model/data/DarkThemeConfig.kt similarity index 94% rename from core/model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/DarkThemeConfig.kt rename to core/model/src/main/kotlin/com/google/samples/apps/nowinandroid/core/model/data/DarkThemeConfig.kt index f130a70db..dcbcaa531 100644 --- a/core/model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/DarkThemeConfig.kt +++ b/core/model/src/main/kotlin/com/google/samples/apps/nowinandroid/core/model/data/DarkThemeConfig.kt @@ -17,5 +17,7 @@ package com.google.samples.apps.nowinandroid.core.model.data enum class DarkThemeConfig { - FOLLOW_SYSTEM, LIGHT, DARK + FOLLOW_SYSTEM, + LIGHT, + DARK, } diff --git a/core/model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/FollowableTopic.kt b/core/model/src/main/kotlin/com/google/samples/apps/nowinandroid/core/model/data/FollowableTopic.kt similarity index 90% rename from core/model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/FollowableTopic.kt rename to core/model/src/main/kotlin/com/google/samples/apps/nowinandroid/core/model/data/FollowableTopic.kt index cef319c5f..ae1d525c5 100644 --- a/core/model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/FollowableTopic.kt +++ b/core/model/src/main/kotlin/com/google/samples/apps/nowinandroid/core/model/data/FollowableTopic.kt @@ -19,7 +19,8 @@ package com.google.samples.apps.nowinandroid.core.model.data /** * A [topic] with the additional information for whether or not it is followed. */ -data class FollowableTopic( // TODO consider changing to UserTopic and flattening +// TODO consider changing to UserTopic and flattening +data class FollowableTopic( val topic: Topic, val isFollowed: Boolean, ) diff --git a/core/model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/NewsResource.kt b/core/model/src/main/kotlin/com/google/samples/apps/nowinandroid/core/model/data/NewsResource.kt similarity index 100% rename from core/model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/NewsResource.kt rename to core/model/src/main/kotlin/com/google/samples/apps/nowinandroid/core/model/data/NewsResource.kt diff --git a/core/model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/SearchResult.kt b/core/model/src/main/kotlin/com/google/samples/apps/nowinandroid/core/model/data/SearchResult.kt similarity index 100% rename from core/model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/SearchResult.kt rename to core/model/src/main/kotlin/com/google/samples/apps/nowinandroid/core/model/data/SearchResult.kt diff --git a/core/model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/ThemeBrand.kt b/core/model/src/main/kotlin/com/google/samples/apps/nowinandroid/core/model/data/ThemeBrand.kt similarity index 96% rename from core/model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/ThemeBrand.kt rename to core/model/src/main/kotlin/com/google/samples/apps/nowinandroid/core/model/data/ThemeBrand.kt index d8953df3c..431d4b573 100644 --- a/core/model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/ThemeBrand.kt +++ b/core/model/src/main/kotlin/com/google/samples/apps/nowinandroid/core/model/data/ThemeBrand.kt @@ -17,5 +17,6 @@ package com.google.samples.apps.nowinandroid.core.model.data enum class ThemeBrand { - DEFAULT, ANDROID + DEFAULT, + ANDROID, } diff --git a/core/model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/Topic.kt b/core/model/src/main/kotlin/com/google/samples/apps/nowinandroid/core/model/data/Topic.kt similarity index 100% rename from core/model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/Topic.kt rename to core/model/src/main/kotlin/com/google/samples/apps/nowinandroid/core/model/data/Topic.kt diff --git a/core/model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/UserData.kt b/core/model/src/main/kotlin/com/google/samples/apps/nowinandroid/core/model/data/UserData.kt similarity index 100% rename from core/model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/UserData.kt rename to core/model/src/main/kotlin/com/google/samples/apps/nowinandroid/core/model/data/UserData.kt diff --git a/core/model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/UserNewsResource.kt b/core/model/src/main/kotlin/com/google/samples/apps/nowinandroid/core/model/data/UserNewsResource.kt similarity index 85% rename from core/model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/UserNewsResource.kt rename to core/model/src/main/kotlin/com/google/samples/apps/nowinandroid/core/model/data/UserNewsResource.kt index 4ea830022..77dfa4394 100644 --- a/core/model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/UserNewsResource.kt +++ b/core/model/src/main/kotlin/com/google/samples/apps/nowinandroid/core/model/data/UserNewsResource.kt @@ -22,6 +22,7 @@ import kotlinx.datetime.Instant * A [NewsResource] with additional user information such as whether the user is following the * news resource's topics and whether they have saved (bookmarked) this news resource. */ +@ConsistentCopyVisibility data class UserNewsResource internal constructor( val id: String, val title: String, @@ -45,14 +46,13 @@ data class UserNewsResource internal constructor( followableTopics = newsResource.topics.map { topic -> FollowableTopic( topic = topic, - isFollowed = userData.followedTopics.contains(topic.id), + isFollowed = topic.id in userData.followedTopics, ) }, - isSaved = userData.bookmarkedNewsResources.contains(newsResource.id), - hasBeenViewed = userData.viewedNewsResources.contains(newsResource.id), + isSaved = newsResource.id in userData.bookmarkedNewsResources, + hasBeenViewed = newsResource.id in userData.viewedNewsResources, ) } -fun List.mapToUserNewsResources(userData: UserData): List { - return map { UserNewsResource(it, userData) } -} +fun List.mapToUserNewsResources(userData: UserData): List = + map { UserNewsResource(it, userData) } diff --git a/core/model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/UserSearchResult.kt b/core/model/src/main/kotlin/com/google/samples/apps/nowinandroid/core/model/data/UserSearchResult.kt similarity index 100% rename from core/model/src/main/java/com/google/samples/apps/nowinandroid/core/model/data/UserSearchResult.kt rename to core/model/src/main/kotlin/com/google/samples/apps/nowinandroid/core/model/data/UserSearchResult.kt diff --git a/core/network/README.md b/core/network/README.md index cfd9fd369..516aa2d38 100644 --- a/core/network/README.md +++ b/core/network/README.md @@ -1,3 +1,3 @@ # :core:network module - -![Dependency graph](../../docs/images/graphs/dep_graph_core_network.png) +## Dependency graph +![Dependency graph](../../docs/images/graphs/dep_graph_core_network.svg) diff --git a/core/network/build.gradle.kts b/core/network/build.gradle.kts index 633e2573d..d12482a56 100644 --- a/core/network/build.gradle.kts +++ b/core/network/build.gradle.kts @@ -15,9 +15,9 @@ */ plugins { - id("nowinandroid.android.library") - id("nowinandroid.android.library.jacoco") - id("nowinandroid.android.hilt") + alias(libs.plugins.nowinandroid.android.library) + alias(libs.plugins.nowinandroid.android.library.jacoco) + alias(libs.plugins.nowinandroid.hilt) id("kotlinx-serialization") id("com.google.android.libraries.mapsplatform.secrets-gradle-plugin") } @@ -39,16 +39,16 @@ secrets { } dependencies { - implementation(project(":core:common")) - implementation(project(":core:model")) + api(libs.kotlinx.datetime) + api(projects.core.common) + api(projects.core.model) + implementation(libs.coil.kt) implementation(libs.coil.kt.svg) - implementation(libs.kotlinx.coroutines.android) - implementation(libs.kotlinx.datetime) implementation(libs.kotlinx.serialization.json) implementation(libs.okhttp.logging) implementation(libs.retrofit.core) implementation(libs.retrofit.kotlin.serialization) - testImplementation(project(":core:testing")) + testImplementation(libs.kotlinx.coroutines.test) } diff --git a/core/network/lint.xml b/core/network/lint.xml index 59fd50bd5..07c0cae9e 100644 --- a/core/network/lint.xml +++ b/core/network/lint.xml @@ -20,6 +20,6 @@ java.lang.IllegalStateException: () -> kotlin.String at org.jetbrains.kotlin.asJava.classes.KtLightClassForFacadeImpl$Companion.createForFacadeNoCache --> - + diff --git a/core/network/src/demo/java/com/google/samples/apps/nowinandroid/core/network/di/FlavoredNetworkModule.kt b/core/network/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/network/di/FlavoredNetworkModule.kt similarity index 82% rename from core/network/src/demo/java/com/google/samples/apps/nowinandroid/core/network/di/FlavoredNetworkModule.kt rename to core/network/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/network/di/FlavoredNetworkModule.kt index ee8534c10..42c2ffe8f 100644 --- a/core/network/src/demo/java/com/google/samples/apps/nowinandroid/core/network/di/FlavoredNetworkModule.kt +++ b/core/network/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/network/di/FlavoredNetworkModule.kt @@ -17,7 +17,7 @@ package com.google.samples.apps.nowinandroid.core.network.di import com.google.samples.apps.nowinandroid.core.network.NiaNetworkDataSource -import com.google.samples.apps.nowinandroid.core.network.fake.FakeNiaNetworkDataSource +import com.google.samples.apps.nowinandroid.core.network.demo.DemoNiaNetworkDataSource import dagger.Binds import dagger.Module import dagger.hilt.InstallIn @@ -25,8 +25,8 @@ import dagger.hilt.components.SingletonComponent @Module @InstallIn(SingletonComponent::class) -interface FlavoredNetworkModule { +internal interface FlavoredNetworkModule { @Binds - fun FakeNiaNetworkDataSource.binds(): NiaNetworkDataSource + fun binds(impl: DemoNiaNetworkDataSource): NiaNetworkDataSource } diff --git a/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/model/util/InstantSerializer.kt b/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/model/util/InstantSerializer.kt deleted file mode 100644 index dec73dc10..000000000 --- a/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/model/util/InstantSerializer.kt +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright 2022 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.samples.apps.nowinandroid.core.network.model.util - -import kotlinx.datetime.Instant -import kotlinx.datetime.toInstant -import kotlinx.serialization.KSerializer -import kotlinx.serialization.descriptors.PrimitiveKind.STRING -import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor -import kotlinx.serialization.descriptors.SerialDescriptor -import kotlinx.serialization.encoding.Decoder -import kotlinx.serialization.encoding.Encoder - -object InstantSerializer : KSerializer { - override fun deserialize(decoder: Decoder): Instant = - decoder.decodeString().toInstant() - - override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor( - serialName = "Instant", - kind = STRING, - ) - - override fun serialize(encoder: Encoder, value: Instant) = - encoder.encodeString(value.toString()) -} diff --git a/core/network/src/main/java/JvmUnitTestFakeAssetManager.kt b/core/network/src/main/kotlin/JvmUnitTestDemoAssetManager.kt similarity index 88% rename from core/network/src/main/java/JvmUnitTestFakeAssetManager.kt rename to core/network/src/main/kotlin/JvmUnitTestDemoAssetManager.kt index 79370d5a8..2ef418517 100644 --- a/core/network/src/main/java/JvmUnitTestFakeAssetManager.kt +++ b/core/network/src/main/kotlin/JvmUnitTestDemoAssetManager.kt @@ -14,8 +14,7 @@ * limitations under the License. */ -import androidx.annotation.VisibleForTesting -import com.google.samples.apps.nowinandroid.core.network.fake.FakeAssetManager +import com.google.samples.apps.nowinandroid.core.network.demo.DemoAssetManager import java.io.File import java.io.InputStream import java.util.Properties @@ -25,8 +24,8 @@ import java.util.Properties * It must remain on the root package for an easier [Class.getResource] with relative paths. * @see UnitTestOptions */ -@VisibleForTesting -internal object JvmUnitTestFakeAssetManager : FakeAssetManager { + +internal object JvmUnitTestDemoAssetManager : DemoAssetManager { private val config = requireNotNull(javaClass.getResource("com/android/tools/test_config.properties")) { """ diff --git a/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/NiaNetworkDataSource.kt b/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/NiaNetworkDataSource.kt similarity index 100% rename from core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/NiaNetworkDataSource.kt rename to core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/NiaNetworkDataSource.kt diff --git a/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeAssetManager.kt b/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoAssetManager.kt similarity index 81% rename from core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeAssetManager.kt rename to core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoAssetManager.kt index 53ad7d48d..e5fb07bb3 100644 --- a/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeAssetManager.kt +++ b/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoAssetManager.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022 The Android Open Source Project + * Copyright 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,10 +14,10 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.core.network.fake +package com.google.samples.apps.nowinandroid.core.network.demo import java.io.InputStream -fun interface FakeAssetManager { +fun interface DemoAssetManager { fun open(fileName: String): InputStream } diff --git a/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource.kt b/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoNiaNetworkDataSource.kt similarity index 91% rename from core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource.kt rename to core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoNiaNetworkDataSource.kt index 6ef90ecff..b7c912c00 100644 --- a/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSource.kt +++ b/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoNiaNetworkDataSource.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022 The Android Open Source Project + * Copyright 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,9 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.core.network.fake +package com.google.samples.apps.nowinandroid.core.network.demo -import JvmUnitTestFakeAssetManager +import JvmUnitTestDemoAssetManager import com.google.samples.apps.nowinandroid.core.network.Dispatcher import com.google.samples.apps.nowinandroid.core.network.NiaDispatchers.IO import com.google.samples.apps.nowinandroid.core.network.NiaNetworkDataSource @@ -33,10 +33,10 @@ import javax.inject.Inject /** * [NiaNetworkDataSource] implementation that provides static news resources to aid development */ -class FakeNiaNetworkDataSource @Inject constructor( +class DemoNiaNetworkDataSource @Inject constructor( @Dispatcher(IO) private val ioDispatcher: CoroutineDispatcher, private val networkJson: Json, - private val assets: FakeAssetManager = JvmUnitTestFakeAssetManager, + private val assets: DemoAssetManager = JvmUnitTestDemoAssetManager, ) : NiaNetworkDataSource { @OptIn(ExperimentalSerializationApi::class) diff --git a/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/di/NetworkModule.kt b/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/di/NetworkModule.kt similarity index 59% rename from core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/di/NetworkModule.kt rename to core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/di/NetworkModule.kt index 98534ba93..a97540f2b 100644 --- a/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/di/NetworkModule.kt +++ b/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/di/NetworkModule.kt @@ -17,11 +17,12 @@ package com.google.samples.apps.nowinandroid.core.network.di import android.content.Context +import androidx.tracing.trace import coil.ImageLoader import coil.decode.SvgDecoder import coil.util.DebugLogger import com.google.samples.apps.nowinandroid.core.network.BuildConfig -import com.google.samples.apps.nowinandroid.core.network.fake.FakeAssetManager +import com.google.samples.apps.nowinandroid.core.network.demo.DemoAssetManager import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -35,7 +36,7 @@ import javax.inject.Singleton @Module @InstallIn(SingletonComponent::class) -object NetworkModule { +internal object NetworkModule { @Provides @Singleton @@ -45,22 +46,24 @@ object NetworkModule { @Provides @Singleton - fun providesFakeAssetManager( + fun providesDemoAssetManager( @ApplicationContext context: Context, - ): FakeAssetManager = FakeAssetManager(context.assets::open) + ): DemoAssetManager = DemoAssetManager(context.assets::open) @Provides @Singleton - fun okHttpCallFactory(): Call.Factory = OkHttpClient.Builder() - .addInterceptor( - HttpLoggingInterceptor() - .apply { - if (BuildConfig.DEBUG) { - setLevel(HttpLoggingInterceptor.Level.BODY) - } - }, - ) - .build() + fun okHttpCallFactory(): Call.Factory = trace("NiaOkHttpClient") { + OkHttpClient.Builder() + .addInterceptor( + HttpLoggingInterceptor() + .apply { + if (BuildConfig.DEBUG) { + setLevel(HttpLoggingInterceptor.Level.BODY) + } + }, + ) + .build() + } /** * Since we're displaying SVGs in the app, Coil needs an ImageLoader which supports this @@ -72,20 +75,21 @@ object NetworkModule { @Provides @Singleton fun imageLoader( - okHttpCallFactory: Call.Factory, + // We specifically request dagger.Lazy here, so that it's not instantiated from Dagger. + okHttpCallFactory: dagger.Lazy, @ApplicationContext application: Context, - ): ImageLoader = ImageLoader.Builder(application) - .callFactory(okHttpCallFactory) - .components { - add(SvgDecoder.Factory()) - } - // Assume most content images are versioned urls - // but some problematic images are fetching each time - .respectCacheHeaders(false) - .apply { - if (BuildConfig.DEBUG) { - logger(DebugLogger()) + ): ImageLoader = trace("NiaImageLoader") { + ImageLoader.Builder(application) + .callFactory { okHttpCallFactory.get() } + .components { add(SvgDecoder.Factory()) } + // Assume most content images are versioned urls + // but some problematic images are fetching each time + .respectCacheHeaders(false) + .apply { + if (BuildConfig.DEBUG) { + logger(DebugLogger()) + } } - } - .build() + .build() + } } diff --git a/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/model/NetworkChangeList.kt b/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/model/NetworkChangeList.kt similarity index 100% rename from core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/model/NetworkChangeList.kt rename to core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/model/NetworkChangeList.kt diff --git a/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/model/NetworkNewsResource.kt b/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/model/NetworkNewsResource.kt similarity index 68% rename from core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/model/NetworkNewsResource.kt rename to core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/model/NetworkNewsResource.kt index 42fbfa826..7b66af796 100644 --- a/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/model/NetworkNewsResource.kt +++ b/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/model/NetworkNewsResource.kt @@ -17,7 +17,6 @@ package com.google.samples.apps.nowinandroid.core.network.model import com.google.samples.apps.nowinandroid.core.model.data.NewsResource -import com.google.samples.apps.nowinandroid.core.network.model.util.InstantSerializer import kotlinx.datetime.Instant import kotlinx.serialization.Serializable @@ -31,24 +30,7 @@ data class NetworkNewsResource( val content: String, val url: String, val headerImageUrl: String, - @Serializable(InstantSerializer::class) val publishDate: Instant, val type: String, val topics: List = listOf(), ) - -/** - * Network representation of [NewsResource] when fetched from /newsresources/{id} - */ -@Serializable -data class NetworkNewsResourceExpanded( - val id: String, - val title: String, - val content: String, - val url: String, - val headerImageUrl: String, - @Serializable(InstantSerializer::class) - val publishDate: Instant, - val type: String, - val topics: List = listOf(), -) diff --git a/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/model/NetworkTopic.kt b/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/model/NetworkTopic.kt similarity index 82% rename from core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/model/NetworkTopic.kt rename to core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/model/NetworkTopic.kt index e1043938f..0d21c09e7 100644 --- a/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/model/NetworkTopic.kt +++ b/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/model/NetworkTopic.kt @@ -32,3 +32,13 @@ data class NetworkTopic( val imageUrl: String = "", val followed: Boolean = false, ) + +fun NetworkTopic.asExternalModel(): Topic = + Topic( + id = id, + name = name, + shortDescription = shortDescription, + longDescription = longDescription, + url = url, + imageUrl = imageUrl, + ) diff --git a/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/retrofit/RetrofitNiaNetwork.kt b/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/retrofit/RetrofitNiaNetwork.kt similarity index 79% rename from core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/retrofit/RetrofitNiaNetwork.kt rename to core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/retrofit/RetrofitNiaNetwork.kt index b86036ff0..bdd852f8b 100644 --- a/core/network/src/main/java/com/google/samples/apps/nowinandroid/core/network/retrofit/RetrofitNiaNetwork.kt +++ b/core/network/src/main/kotlin/com/google/samples/apps/nowinandroid/core/network/retrofit/RetrofitNiaNetwork.kt @@ -16,17 +16,18 @@ package com.google.samples.apps.nowinandroid.core.network.retrofit +import androidx.tracing.trace import com.google.samples.apps.nowinandroid.core.network.BuildConfig import com.google.samples.apps.nowinandroid.core.network.NiaNetworkDataSource import com.google.samples.apps.nowinandroid.core.network.model.NetworkChangeList import com.google.samples.apps.nowinandroid.core.network.model.NetworkNewsResource import com.google.samples.apps.nowinandroid.core.network.model.NetworkTopic -import com.jakewharton.retrofit2.converter.kotlinx.serialization.asConverterFactory import kotlinx.serialization.Serializable import kotlinx.serialization.json.Json import okhttp3.Call import okhttp3.MediaType.Companion.toMediaType import retrofit2.Retrofit +import retrofit2.converter.kotlinx.serialization.asConverterFactory import retrofit2.http.GET import retrofit2.http.Query import javax.inject.Inject @@ -71,19 +72,23 @@ private data class NetworkResponse( * [Retrofit] backed [NiaNetworkDataSource] */ @Singleton -class RetrofitNiaNetwork @Inject constructor( +internal class RetrofitNiaNetwork @Inject constructor( networkJson: Json, - okhttpCallFactory: Call.Factory, + okhttpCallFactory: dagger.Lazy, ) : NiaNetworkDataSource { - private val networkApi = Retrofit.Builder() - .baseUrl(NIA_BASE_URL) - .callFactory(okhttpCallFactory) - .addConverterFactory( - networkJson.asConverterFactory("application/json".toMediaType()), - ) - .build() - .create(RetrofitNiaNetworkApi::class.java) + private val networkApi = trace("RetrofitNiaNetwork") { + Retrofit.Builder() + .baseUrl(NIA_BASE_URL) + // We use callFactory lambda here with dagger.Lazy + // to prevent initializing OkHttp on the main thread. + .callFactory { okhttpCallFactory.get().newCall(it) } + .addConverterFactory( + networkJson.asConverterFactory("application/json".toMediaType()), + ) + .build() + .create(RetrofitNiaNetworkApi::class.java) + } override suspend fun getTopics(ids: List?): List = networkApi.getTopics(ids = ids).data diff --git a/core/network/src/prod/java/com/google/samples/apps/nowinandroid/core/network/di/FlavoredNetworkModule.kt b/core/network/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/network/di/FlavoredNetworkModule.kt similarity index 90% rename from core/network/src/prod/java/com/google/samples/apps/nowinandroid/core/network/di/FlavoredNetworkModule.kt rename to core/network/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/network/di/FlavoredNetworkModule.kt index ab463e99c..bff1ca5be 100644 --- a/core/network/src/prod/java/com/google/samples/apps/nowinandroid/core/network/di/FlavoredNetworkModule.kt +++ b/core/network/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/network/di/FlavoredNetworkModule.kt @@ -25,8 +25,8 @@ import dagger.hilt.components.SingletonComponent @Module @InstallIn(SingletonComponent::class) -interface FlavoredNetworkModule { +internal interface FlavoredNetworkModule { @Binds - fun RetrofitNiaNetwork.binds(): NiaNetworkDataSource + fun binds(impl: RetrofitNiaNetwork): NiaNetworkDataSource } diff --git a/core/network/src/test/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSourceTest.kt b/core/network/src/test/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoNiaNetworkDataSourceTest.kt similarity index 85% rename from core/network/src/test/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSourceTest.kt rename to core/network/src/test/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoNiaNetworkDataSourceTest.kt index 76c2accf2..e60cfeb3e 100644 --- a/core/network/src/test/java/com/google/samples/apps/nowinandroid/core/network/fake/FakeNiaNetworkDataSourceTest.kt +++ b/core/network/src/test/kotlin/com/google/samples/apps/nowinandroid/core/network/demo/DemoNiaNetworkDataSourceTest.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022 The Android Open Source Project + * Copyright 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,9 +14,9 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.core.network.fake +package com.google.samples.apps.nowinandroid.core.network.demo -import JvmUnitTestFakeAssetManager +import JvmUnitTestDemoAssetManager import com.google.samples.apps.nowinandroid.core.network.model.NetworkNewsResource import com.google.samples.apps.nowinandroid.core.network.model.NetworkTopic import kotlinx.coroutines.test.StandardTestDispatcher @@ -29,25 +29,25 @@ import org.junit.Before import org.junit.Test import kotlin.test.assertEquals -class FakeNiaNetworkDataSourceTest { +class DemoNiaNetworkDataSourceTest { - private lateinit var subject: FakeNiaNetworkDataSource + private lateinit var subject: DemoNiaNetworkDataSource private val testDispatcher = StandardTestDispatcher() @Before fun setUp() { - subject = FakeNiaNetworkDataSource( + subject = DemoNiaNetworkDataSource( ioDispatcher = testDispatcher, networkJson = Json { ignoreUnknownKeys = true }, - assets = JvmUnitTestFakeAssetManager, + assets = JvmUnitTestDemoAssetManager, ) } + @Suppress("ktlint:standard:max-line-length") @Test fun testDeserializationOfTopics() = runTest(testDispatcher) { assertEquals( - /* ktlint-disable max-line-length */ NetworkTopic( id = "1", name = "Headlines", @@ -56,15 +56,14 @@ class FakeNiaNetworkDataSourceTest { url = "", imageUrl = "https://firebasestorage.googleapis.com/v0/b/now-in-android.appspot.com/o/img%2Fic_topic_Headlines.svg?alt=media&token=506faab0-617a-4668-9e63-4a2fb996603f", ), - /* ktlint-enable max-line-length */ subject.getTopics().first(), ) } + @Suppress("ktlint:standard:max-line-length") @Test fun testDeserializationOfNewsResources() = runTest(testDispatcher) { assertEquals( - /* ktlint-disable max-line-length */ NetworkNewsResource( id = "125", title = "Android Basics with Compose", @@ -83,7 +82,6 @@ class FakeNiaNetworkDataSourceTest { type = "Codelab", topics = listOf("2", "3", "10"), ), - /* ktlint-enable max-line-length */ subject.getNewsResources().find { it.id == "125" }, ) } diff --git a/core/notifications/README.md b/core/notifications/README.md new file mode 100644 index 000000000..8f5607bdf --- /dev/null +++ b/core/notifications/README.md @@ -0,0 +1,3 @@ +# :core:notifications module +## Dependency graph +![Dependency graph](../../docs/images/graphs/dep_graph_core_notifications.svg) diff --git a/core/notifications/build.gradle.kts b/core/notifications/build.gradle.kts index 012c6f3f3..34393049b 100644 --- a/core/notifications/build.gradle.kts +++ b/core/notifications/build.gradle.kts @@ -14,9 +14,8 @@ * limitations under the License. */ plugins { - id("nowinandroid.android.library") - id("nowinandroid.android.library.compose") - id("nowinandroid.android.hilt") + alias(libs.plugins.nowinandroid.android.library) + alias(libs.plugins.nowinandroid.hilt) } android { @@ -24,14 +23,9 @@ android { } dependencies { - implementation(project(":core:common")) - implementation(project(":core:model")) + api(projects.core.model) - implementation(libs.kotlinx.coroutines.android) - implementation(libs.androidx.browser) - implementation(libs.androidx.compose.runtime) - implementation(libs.androidx.core.ktx) + implementation(projects.core.common) - implementation(platform(libs.firebase.bom)) - implementation(libs.firebase.cloud.messaging) + compileOnly(platform(libs.androidx.compose.bom)) } diff --git a/core/notifications/src/demo/java/com/google/samples/apps/nowinandroid/core/notifications/NotificationsModule.kt b/core/notifications/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/notifications/NotificationsModule.kt similarity index 95% rename from core/notifications/src/demo/java/com/google/samples/apps/nowinandroid/core/notifications/NotificationsModule.kt rename to core/notifications/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/notifications/NotificationsModule.kt index 9bb2b3fb9..99ba10fa7 100644 --- a/core/notifications/src/demo/java/com/google/samples/apps/nowinandroid/core/notifications/NotificationsModule.kt +++ b/core/notifications/src/demo/kotlin/com/google/samples/apps/nowinandroid/core/notifications/NotificationsModule.kt @@ -23,7 +23,7 @@ import dagger.hilt.components.SingletonComponent @Module @InstallIn(SingletonComponent::class) -abstract class NotificationsModule { +internal abstract class NotificationsModule { @Binds abstract fun bindNotifier( notifier: NoOpNotifier, diff --git a/core/notifications/src/main/java/com/google/samples/apps/nowinandroid/core/notifications/NoOpNotifier.kt b/core/notifications/src/main/kotlin/com/google/samples/apps/nowinandroid/core/notifications/NoOpNotifier.kt similarity index 93% rename from core/notifications/src/main/java/com/google/samples/apps/nowinandroid/core/notifications/NoOpNotifier.kt rename to core/notifications/src/main/kotlin/com/google/samples/apps/nowinandroid/core/notifications/NoOpNotifier.kt index d17005bca..863c1a662 100644 --- a/core/notifications/src/main/java/com/google/samples/apps/nowinandroid/core/notifications/NoOpNotifier.kt +++ b/core/notifications/src/main/kotlin/com/google/samples/apps/nowinandroid/core/notifications/NoOpNotifier.kt @@ -22,6 +22,6 @@ import javax.inject.Inject /** * Implementation of [Notifier] which does nothing. Useful for tests and previews. */ -class NoOpNotifier @Inject constructor() : Notifier { +internal class NoOpNotifier @Inject constructor() : Notifier { override fun postNewsNotifications(newsResources: List) = Unit } diff --git a/core/notifications/src/main/java/com/google/samples/apps/nowinandroid/core/notifications/Notifier.kt b/core/notifications/src/main/kotlin/com/google/samples/apps/nowinandroid/core/notifications/Notifier.kt similarity index 100% rename from core/notifications/src/main/java/com/google/samples/apps/nowinandroid/core/notifications/Notifier.kt rename to core/notifications/src/main/kotlin/com/google/samples/apps/nowinandroid/core/notifications/Notifier.kt diff --git a/core/notifications/src/main/java/com/google/samples/apps/nowinandroid/core/notifications/SystemTrayNotifier.kt b/core/notifications/src/main/kotlin/com/google/samples/apps/nowinandroid/core/notifications/SystemTrayNotifier.kt similarity index 73% rename from core/notifications/src/main/java/com/google/samples/apps/nowinandroid/core/notifications/SystemTrayNotifier.kt rename to core/notifications/src/main/kotlin/com/google/samples/apps/nowinandroid/core/notifications/SystemTrayNotifier.kt index b7fcc9b26..3fc8114dd 100644 --- a/core/notifications/src/main/java/com/google/samples/apps/nowinandroid/core/notifications/SystemTrayNotifier.kt +++ b/core/notifications/src/main/kotlin/com/google/samples/apps/nowinandroid/core/notifications/SystemTrayNotifier.kt @@ -24,10 +24,10 @@ import android.app.PendingIntent import android.content.ComponentName import android.content.Context import android.content.Intent -import android.content.pm.PackageManager +import android.content.pm.PackageManager.PERMISSION_GRANTED import android.os.Build.VERSION import android.os.Build.VERSION_CODES -import androidx.core.app.ActivityCompat +import androidx.core.app.ActivityCompat.checkSelfPermission import androidx.core.app.NotificationCompat import androidx.core.app.NotificationCompat.InboxStyle import androidx.core.app.NotificationManagerCompat @@ -44,53 +44,46 @@ private const val NEWS_NOTIFICATION_SUMMARY_ID = 1 private const val NEWS_NOTIFICATION_CHANNEL_ID = "" private const val NEWS_NOTIFICATION_GROUP = "NEWS_NOTIFICATIONS" private const val DEEP_LINK_SCHEME_AND_HOST = "https://www.nowinandroid.apps.samples.google.com" -private const val FOR_YOU_PATH = "foryou" +private const val DEEP_LINK_FOR_YOU_PATH = "foryou" +private const val DEEP_LINK_BASE_PATH = "$DEEP_LINK_SCHEME_AND_HOST/$DEEP_LINK_FOR_YOU_PATH" +const val DEEP_LINK_NEWS_RESOURCE_ID_KEY = "linkedNewsResourceId" +const val DEEP_LINK_URI_PATTERN = "$DEEP_LINK_BASE_PATH/{$DEEP_LINK_NEWS_RESOURCE_ID_KEY}" /** * Implementation of [Notifier] that displays notifications in the system tray. */ @Singleton -class SystemTrayNotifier @Inject constructor( +internal class SystemTrayNotifier @Inject constructor( @ApplicationContext private val context: Context, ) : Notifier { override fun postNewsNotifications( newsResources: List, ) = with(context) { - if (ActivityCompat.checkSelfPermission( - this, - permission.POST_NOTIFICATIONS, - ) != PackageManager.PERMISSION_GRANTED - ) { + if (checkSelfPermission(this, permission.POST_NOTIFICATIONS) != PERMISSION_GRANTED) { return } - val truncatedNewsResources = newsResources - .take(MAX_NUM_NOTIFICATIONS) + val truncatedNewsResources = newsResources.take(MAX_NUM_NOTIFICATIONS) - val newsNotifications = truncatedNewsResources - .map { newsResource -> - createNewsNotification { - setSmallIcon( - com.google.samples.apps.nowinandroid.core.common.R.drawable.ic_nia_notification, - ) - .setContentTitle(newsResource.title) - .setContentText(newsResource.content) - .setContentIntent(newsPendingIntent(newsResource)) - .setGroup(NEWS_NOTIFICATION_GROUP) - .setAutoCancel(true) - } + val newsNotifications = truncatedNewsResources.map { newsResource -> + createNewsNotification { + setSmallIcon(R.drawable.core_notifications_ic_nia_notification) + .setContentTitle(newsResource.title) + .setContentText(newsResource.content) + .setContentIntent(newsPendingIntent(newsResource)) + .setGroup(NEWS_NOTIFICATION_GROUP) + .setAutoCancel(true) } + } val summaryNotification = createNewsNotification { val title = getString( - R.string.news_notification_group_summary, + R.string.core_notifications_news_notification_group_summary, truncatedNewsResources.size, ) setContentTitle(title) .setContentText(title) - .setSmallIcon( - com.google.samples.apps.nowinandroid.core.common.R.drawable.ic_nia_notification, - ) + .setSmallIcon(R.drawable.core_notifications_ic_nia_notification) // Build summary info into InboxStyle template. .setStyle(newsNotificationStyle(truncatedNewsResources, title)) .setGroup(NEWS_NOTIFICATION_GROUP) @@ -117,9 +110,7 @@ class SystemTrayNotifier @Inject constructor( newsResources: List, title: String, ): InboxStyle = newsResources - .fold(InboxStyle()) { inboxStyle, newsResource -> - inboxStyle.addLine(newsResource.title) - } + .fold(InboxStyle()) { inboxStyle, newsResource -> inboxStyle.addLine(newsResource.title) } .setBigContentTitle(title) .setSummaryText(title) } @@ -141,17 +132,17 @@ private fun Context.createNewsNotification( } /** - * Ensures the a notification channel is is present if applicable + * Ensures that a notification channel is present if applicable */ private fun Context.ensureNotificationChannelExists() { if (VERSION.SDK_INT < VERSION_CODES.O) return val channel = NotificationChannel( NEWS_NOTIFICATION_CHANNEL_ID, - getString(R.string.news_notification_channel_name), + getString(R.string.core_notifications_news_notification_channel_name), NotificationManager.IMPORTANCE_DEFAULT, ).apply { - description = getString(R.string.news_notification_channel_description) + description = getString(R.string.core_notifications_news_notification_channel_description) } // Register the channel with the system NotificationManagerCompat.from(this).createNotificationChannel(channel) @@ -173,4 +164,4 @@ private fun Context.newsPendingIntent( PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE, ) -private fun NewsResource.newsDeepLinkUri() = "$DEEP_LINK_SCHEME_AND_HOST/$FOR_YOU_PATH/$id".toUri() +private fun NewsResource.newsDeepLinkUri() = "$DEEP_LINK_BASE_PATH/$id".toUri() diff --git a/core/common/src/main/res/drawable-anydpi-v24/ic_nia_notification.xml b/core/notifications/src/main/res/drawable-anydpi-v24/core_notifications_ic_nia_notification.xml similarity index 100% rename from core/common/src/main/res/drawable-anydpi-v24/ic_nia_notification.xml rename to core/notifications/src/main/res/drawable-anydpi-v24/core_notifications_ic_nia_notification.xml diff --git a/core/common/src/main/res/drawable-hdpi/ic_nia_notification.png b/core/notifications/src/main/res/drawable-hdpi/core_notifications_ic_nia_notification.png similarity index 100% rename from core/common/src/main/res/drawable-hdpi/ic_nia_notification.png rename to core/notifications/src/main/res/drawable-hdpi/core_notifications_ic_nia_notification.png diff --git a/core/common/src/main/res/drawable-mdpi/ic_nia_notification.png b/core/notifications/src/main/res/drawable-mdpi/core_notifications_ic_nia_notification.png similarity index 100% rename from core/common/src/main/res/drawable-mdpi/ic_nia_notification.png rename to core/notifications/src/main/res/drawable-mdpi/core_notifications_ic_nia_notification.png diff --git a/core/common/src/main/res/drawable-xhdpi/ic_nia_notification.png b/core/notifications/src/main/res/drawable-xhdpi/core_notifications_ic_nia_notification.png similarity index 100% rename from core/common/src/main/res/drawable-xhdpi/ic_nia_notification.png rename to core/notifications/src/main/res/drawable-xhdpi/core_notifications_ic_nia_notification.png diff --git a/core/common/src/main/res/drawable-xxhdpi/ic_nia_notification.png b/core/notifications/src/main/res/drawable-xxhdpi/core_notifications_ic_nia_notification.png similarity index 100% rename from core/common/src/main/res/drawable-xxhdpi/ic_nia_notification.png rename to core/notifications/src/main/res/drawable-xxhdpi/core_notifications_ic_nia_notification.png diff --git a/core/notifications/src/main/res/values/strings.xml b/core/notifications/src/main/res/values/strings.xml index 5bb37b23a..88e492e77 100644 --- a/core/notifications/src/main/res/values/strings.xml +++ b/core/notifications/src/main/res/values/strings.xml @@ -15,7 +15,7 @@ limitations under the License. --> - News updates - The latest updates on what\'s new in Android - %1$d news updates + News updates + The latest updates on what\'s new in Android + %1$d news updates diff --git a/core/notifications/src/prod/java/com/google/samples/apps/nowinandroid/core/notifications/NotificationsModule.kt b/core/notifications/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/notifications/NotificationsModule.kt similarity index 95% rename from core/notifications/src/prod/java/com/google/samples/apps/nowinandroid/core/notifications/NotificationsModule.kt rename to core/notifications/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/notifications/NotificationsModule.kt index 3c05e9c6e..c2e1f76ca 100644 --- a/core/notifications/src/prod/java/com/google/samples/apps/nowinandroid/core/notifications/NotificationsModule.kt +++ b/core/notifications/src/prod/kotlin/com/google/samples/apps/nowinandroid/core/notifications/NotificationsModule.kt @@ -23,7 +23,7 @@ import dagger.hilt.components.SingletonComponent @Module @InstallIn(SingletonComponent::class) -abstract class NotificationsModule { +internal abstract class NotificationsModule { @Binds abstract fun bindNotifier( notifier: SystemTrayNotifier, diff --git a/core/screenshot-testing/.gitignore b/core/screenshot-testing/.gitignore new file mode 100644 index 000000000..42afabfd2 --- /dev/null +++ b/core/screenshot-testing/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/core/screenshot-testing/README.md b/core/screenshot-testing/README.md new file mode 100644 index 000000000..9bd4f1f9c --- /dev/null +++ b/core/screenshot-testing/README.md @@ -0,0 +1,3 @@ +# :core:screenshot-testing module +## Dependency graph +![Dependency graph](../../docs/images/graphs/dep_graph_core_screenshot_testing.svg) diff --git a/core/screenshot-testing/build.gradle.kts b/core/screenshot-testing/build.gradle.kts new file mode 100644 index 000000000..794416ba9 --- /dev/null +++ b/core/screenshot-testing/build.gradle.kts @@ -0,0 +1,33 @@ +/* + * Copyright 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +plugins { + alias(libs.plugins.nowinandroid.android.library) + alias(libs.plugins.nowinandroid.android.library.compose) + alias(libs.plugins.nowinandroid.hilt) +} + +android { + namespace = "com.google.samples.apps.nowinandroid.core.screenshottesting" +} + +dependencies { + api(libs.bundles.androidx.compose.ui.test) + api(libs.roborazzi) + implementation(libs.androidx.compose.ui.test) + implementation(libs.androidx.activity.compose) + implementation(libs.robolectric) + implementation(projects.core.designsystem) +} diff --git a/core/common/src/main/AndroidManifest.xml b/core/screenshot-testing/src/main/AndroidManifest.xml similarity index 100% rename from core/common/src/main/AndroidManifest.xml rename to core/screenshot-testing/src/main/AndroidManifest.xml diff --git a/core/screenshot-testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/util/ScreenshotHelper.kt b/core/screenshot-testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/util/ScreenshotHelper.kt new file mode 100644 index 000000000..f11651220 --- /dev/null +++ b/core/screenshot-testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/util/ScreenshotHelper.kt @@ -0,0 +1,212 @@ +/* + * Copyright 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.core.testing.util + +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.getValue +import androidx.compose.runtime.key +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue +import androidx.compose.ui.platform.LocalInspectionMode +import androidx.compose.ui.test.DarkMode +import androidx.compose.ui.test.DeviceConfigurationOverride +import androidx.compose.ui.test.junit4.AndroidComposeTestRule +import androidx.compose.ui.test.onRoot +import androidx.test.ext.junit.rules.ActivityScenarioRule +import com.github.takahirom.roborazzi.RoborazziOptions +import com.github.takahirom.roborazzi.RoborazziOptions.CompareOptions +import com.github.takahirom.roborazzi.RoborazziOptions.RecordOptions +import com.github.takahirom.roborazzi.captureRoboImage +import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme +import org.robolectric.RuntimeEnvironment + +val DefaultRoborazziOptions = + RoborazziOptions( + // Pixel-perfect matching + compareOptions = CompareOptions(changeThreshold = 0f), + // Reduce the size of the PNGs + recordOptions = RecordOptions(resizeScale = 0.5), + ) + +enum class DefaultTestDevices(val description: String, val spec: String) { + PHONE("phone", "spec:shape=Normal,width=640,height=360,unit=dp,dpi=480"), + FOLDABLE("foldable", "spec:shape=Normal,width=673,height=841,unit=dp,dpi=480"), + TABLET("tablet", "spec:shape=Normal,width=1280,height=800,unit=dp,dpi=480"), +} +fun AndroidComposeTestRule, A>.captureMultiDevice( + screenshotName: String, + body: @Composable () -> Unit, +) { + DefaultTestDevices.entries.forEach { + this.captureForDevice(it.description, it.spec, screenshotName, body = body) + } +} + +fun AndroidComposeTestRule, A>.captureForDevice( + deviceName: String, + deviceSpec: String, + screenshotName: String, + roborazziOptions: RoborazziOptions = DefaultRoborazziOptions, + darkMode: Boolean = false, + body: @Composable () -> Unit, +) { + val (width, height, dpi) = extractSpecs(deviceSpec) + + // Set qualifiers from specs + RuntimeEnvironment.setQualifiers("w${width}dp-h${height}dp-${dpi}dpi") + + this.activity.setContent { + CompositionLocalProvider( + LocalInspectionMode provides true, + ) { + DeviceConfigurationOverride( + override = DeviceConfigurationOverride.Companion.DarkMode(darkMode), + ) { + body() + } + } + } + this.onRoot() + .captureRoboImage( + "src/test/screenshots/${screenshotName}_$deviceName.png", + roborazziOptions = roborazziOptions, + ) +} + +/** + * Takes six screenshots combining light/dark and default/Android themes and whether dynamic color + * is enabled. + */ +fun AndroidComposeTestRule, A>.captureMultiTheme( + name: String, + overrideFileName: String? = null, + shouldCompareDarkMode: Boolean = true, + shouldCompareDynamicColor: Boolean = true, + shouldCompareAndroidTheme: Boolean = true, + content: @Composable (desc: String) -> Unit, +) { + val darkModeValues = if (shouldCompareDarkMode) listOf(true, false) else listOf(false) + val dynamicThemingValues = if (shouldCompareDynamicColor) listOf(true, false) else listOf(false) + val androidThemeValues = if (shouldCompareAndroidTheme) listOf(true, false) else listOf(false) + + var darkMode by mutableStateOf(true) + var dynamicTheming by mutableStateOf(false) + var androidTheme by mutableStateOf(false) + + this.setContent { + CompositionLocalProvider( + LocalInspectionMode provides true, + ) { + NiaTheme( + androidTheme = androidTheme, + darkTheme = darkMode, + disableDynamicTheming = !dynamicTheming, + ) { + // Keying is necessary in some cases (e.g. animations) + key(androidTheme, darkMode, dynamicTheming) { + val description = generateDescription( + shouldCompareDarkMode, + darkMode, + shouldCompareAndroidTheme, + androidTheme, + shouldCompareDynamicColor, + dynamicTheming, + ) + content(description) + } + } + } + } + + // Create permutations + darkModeValues.forEach { isDarkMode -> + darkMode = isDarkMode + val darkModeDesc = if (isDarkMode) "dark" else "light" + + androidThemeValues.forEach { isAndroidTheme -> + androidTheme = isAndroidTheme + val androidThemeDesc = if (isAndroidTheme) "androidTheme" else "defaultTheme" + + dynamicThemingValues.forEach dynamicTheme@{ isDynamicTheming -> + // Skip tests with both Android Theme and Dynamic color as they're incompatible. + if (isAndroidTheme && isDynamicTheming) return@dynamicTheme + + dynamicTheming = isDynamicTheming + val dynamicThemingDesc = if (isDynamicTheming) "dynamic" else "notDynamic" + + val filename = overrideFileName ?: name + + this.onRoot() + .captureRoboImage( + "src/test/screenshots/" + + "$name/$filename" + + "_$darkModeDesc" + + "_$androidThemeDesc" + + "_$dynamicThemingDesc" + + ".png", + roborazziOptions = DefaultRoborazziOptions, + ) + } + } + } +} + +@Composable +private fun generateDescription( + shouldCompareDarkMode: Boolean, + darkMode: Boolean, + shouldCompareAndroidTheme: Boolean, + androidTheme: Boolean, + shouldCompareDynamicColor: Boolean, + dynamicTheming: Boolean, +): String { + val description = "" + + if (shouldCompareDarkMode) { + if (darkMode) "Dark" else "Light" + } else { + "" + } + + if (shouldCompareAndroidTheme) { + if (androidTheme) " Android" else " Default" + } else { + "" + } + + if (shouldCompareDynamicColor) { + if (dynamicTheming) " Dynamic" else "" + } else { + "" + } + + return description.trim() +} + +/** + * Extracts some properties from the spec string. Note that this function is not exhaustive. + */ +private fun extractSpecs(deviceSpec: String): TestDeviceSpecs { + val specs = deviceSpec.substringAfter("spec:") + .split(",").map { it.split("=") }.associate { it[0] to it[1] } + val width = specs["width"]?.toInt() ?: 640 + val height = specs["height"]?.toInt() ?: 480 + val dpi = specs["dpi"]?.toInt() ?: 480 + return TestDeviceSpecs(width, height, dpi) +} + +data class TestDeviceSpecs(val width: Int, val height: Int, val dpi: Int) diff --git a/core/testing/README.md b/core/testing/README.md index 8eea64ac9..5a35d379b 100644 --- a/core/testing/README.md +++ b/core/testing/README.md @@ -1,3 +1,3 @@ # :core:testing module - -![Dependency graph](../../docs/images/graphs/dep_graph_core_testing.png) +## Dependency graph +![Dependency graph](../../docs/images/graphs/dep_graph_core_testing.svg) diff --git a/core/testing/build.gradle.kts b/core/testing/build.gradle.kts index 6cba0086d..01696d5e8 100644 --- a/core/testing/build.gradle.kts +++ b/core/testing/build.gradle.kts @@ -14,9 +14,8 @@ * limitations under the License. */ plugins { - id("nowinandroid.android.library") - id("nowinandroid.android.library.compose") - id("nowinandroid.android.hilt") + alias(libs.plugins.nowinandroid.android.library) + alias(libs.plugins.nowinandroid.hilt) } android { @@ -24,27 +23,15 @@ android { } dependencies { - api(libs.accompanist.testharness) - api(libs.androidx.activity.compose) - api(libs.androidx.compose.ui.test) - api(libs.androidx.test.core) - api(libs.androidx.test.espresso.core) - api(libs.androidx.test.rules) - api(libs.androidx.test.runner) - api(libs.hilt.android.testing) - api(libs.junit4) api(libs.kotlinx.coroutines.test) - api(libs.roborazzi) - api(libs.robolectric.shadows) - api(libs.turbine) + api(projects.core.analytics) + api(projects.core.common) + api(projects.core.data) + api(projects.core.model) + api(projects.core.notifications) - debugApi(libs.androidx.compose.ui.testManifest) - implementation(project(":core:common")) - implementation(project(":core:data")) - implementation(project(":core:domain")) - implementation(project(":core:model")) - implementation(project(":core:notifications")) - implementation(project(":core:analytics")) + implementation(libs.androidx.test.rules) + implementation(libs.hilt.android.testing) implementation(libs.kotlinx.datetime) } diff --git a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/repository/TestSearchContentsRepository.kt b/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/repository/TestSearchContentsRepository.kt deleted file mode 100644 index 2aa54e463..000000000 --- a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/repository/TestSearchContentsRepository.kt +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.samples.apps.nowinandroid.core.testing.repository - -import com.google.samples.apps.nowinandroid.core.data.repository.SearchContentsRepository -import com.google.samples.apps.nowinandroid.core.model.data.NewsResource -import com.google.samples.apps.nowinandroid.core.model.data.SearchResult -import com.google.samples.apps.nowinandroid.core.model.data.Topic -import kotlinx.coroutines.flow.Flow -import kotlinx.coroutines.flow.flow -import kotlinx.coroutines.flow.flowOf - -class TestSearchContentsRepository : SearchContentsRepository { - - private val cachedTopics: MutableList = mutableListOf() - private val cachedNewsResources: MutableList = mutableListOf() - - override suspend fun populateFtsData() { /* no-op */ } - - override fun searchContents(searchQuery: String): Flow = flowOf( - SearchResult( - topics = cachedTopics.filter { - it.name.contains(searchQuery) || - it.shortDescription.contains(searchQuery) || - it.longDescription.contains(searchQuery) - }, - newsResources = cachedNewsResources.filter { - it.content.contains(searchQuery) || - it.title.contains(searchQuery) - }, - ), - ) - - override fun getSearchContentsCount(): Flow = flow { - emit(cachedTopics.size + cachedNewsResources.size) - } - - /** - * Test only method to add the topics to the stored list in memory - */ - fun addTopics(topics: List) { - cachedTopics.addAll(topics) - } - - /** - * Test only method to add the news resources to the stored list in memory - */ - fun addNewsResources(newsResources: List) { - cachedNewsResources.addAll(newsResources) - } -} diff --git a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/util/ScreenshotHelper.kt b/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/util/ScreenshotHelper.kt deleted file mode 100644 index e0756d16d..000000000 --- a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/util/ScreenshotHelper.kt +++ /dev/null @@ -1,90 +0,0 @@ -/* - * Copyright 2023 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.samples.apps.nowinandroid.core.testing.util - -import androidx.activity.ComponentActivity -import androidx.activity.compose.setContent -import androidx.compose.runtime.Composable -import androidx.compose.runtime.CompositionLocalProvider -import androidx.compose.ui.platform.LocalInspectionMode -import androidx.compose.ui.test.junit4.AndroidComposeTestRule -import androidx.compose.ui.test.onRoot -import androidx.test.ext.junit.rules.ActivityScenarioRule -import com.github.takahirom.roborazzi.RoborazziOptions -import com.github.takahirom.roborazzi.RoborazziOptions.CompareOptions -import com.github.takahirom.roborazzi.RoborazziOptions.RecordOptions -import com.github.takahirom.roborazzi.captureRoboImage -import org.robolectric.RuntimeEnvironment - -val DefaultRoborazziOptions = - RoborazziOptions( - compareOptions = CompareOptions(changeThreshold = 0f), // Pixel-perfect matching - recordOptions = RecordOptions(resizeScale = 0.5), // Reduce the size of the PNGs - ) - -fun AndroidComposeTestRule, A>.captureMultiDevice( - screenshotName: String, - body: @Composable () -> Unit, -) { - listOf( - "phone" to "spec:shape=Normal,width=640,height=360,unit=dp,dpi=480", - "foldable" to "spec:shape=Normal,width=673,height=841,unit=dp,dpi=480", - "tablet" to "spec:shape=Normal,width=1280,height=800,unit=dp,dpi=480", - ).forEach { - this.captureForDevice(it.first, it.second, screenshotName, body) - } -} - -fun AndroidComposeTestRule, A>.captureForDevice( - deviceName: String, - deviceSpec: String, - screenshotName: String, - body: @Composable () -> Unit, - roborazziOptions: RoborazziOptions = DefaultRoborazziOptions, -) { - val (width, height, dpi) = extractSpecs(deviceSpec) - - // Set qualifiers from specs - RuntimeEnvironment.setQualifiers("w${width}dp-h${height}dp-${dpi}dpi") - - this.activity.setContent { - CompositionLocalProvider( - LocalInspectionMode provides true, - ) { - body() - } - } - this.onRoot() - .captureRoboImage( - "src/test/screenshots/${screenshotName}_$deviceName.png", - roborazziOptions = roborazziOptions, - ) -} - -/** - * Extracts some properties from the spec string. Note that this function is not exhaustive. - */ -private fun extractSpecs(deviceSpec: String): TestDeviceSpecs { - val specs = deviceSpec.substringAfter("spec:") - .split(",").map { it.split("=") }.associate { it[0] to it[1] } - val width = specs["width"]?.toInt() ?: 640 - val height = specs["height"]?.toInt() ?: 480 - val dpi = specs["dpi"]?.toInt() ?: 480 - return TestDeviceSpecs(width, height, dpi) -} - -data class TestDeviceSpecs(val width: Int, val height: Int, val dpi: Int) diff --git a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/rules/GrantPostNotificationsPermissionRule.kt b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/rules/GrantPostNotificationsPermissionRule.kt similarity index 100% rename from core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/rules/GrantPostNotificationsPermissionRule.kt rename to core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/rules/GrantPostNotificationsPermissionRule.kt diff --git a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/NiaTestRunner.kt b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/NiaTestRunner.kt similarity index 83% rename from core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/NiaTestRunner.kt rename to core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/NiaTestRunner.kt index 30254a617..9b3b185df 100644 --- a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/NiaTestRunner.kt +++ b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/NiaTestRunner.kt @@ -25,7 +25,6 @@ import dagger.hilt.android.testing.HiltTestApplication * A custom runner to set up the instrumented application class for tests. */ class NiaTestRunner : AndroidJUnitRunner() { - override fun newApplication(cl: ClassLoader?, name: String?, context: Context?): Application { - return super.newApplication(cl, HiltTestApplication::class.java.name, context) - } + override fun newApplication(cl: ClassLoader, name: String, context: Context): Application = + super.newApplication(cl, HiltTestApplication::class.java.name, context) } diff --git a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/data/FollowableTopicTestData.kt b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/data/FollowableTopicTestData.kt similarity index 98% rename from core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/data/FollowableTopicTestData.kt rename to core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/data/FollowableTopicTestData.kt index a96326a62..9b85516e7 100644 --- a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/data/FollowableTopicTestData.kt +++ b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/data/FollowableTopicTestData.kt @@ -14,12 +14,13 @@ * limitations under the License. */ +@file:Suppress("ktlint:standard:max-line-length") + package com.google.samples.apps.nowinandroid.core.testing.data import com.google.samples.apps.nowinandroid.core.model.data.FollowableTopic import com.google.samples.apps.nowinandroid.core.model.data.Topic -/* ktlint-disable max-line-length */ val followableTopicTestData: List = listOf( FollowableTopic( topic = Topic( diff --git a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/data/NewsResourcesTestData.kt b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/data/NewsResourcesTestData.kt similarity index 98% rename from core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/data/NewsResourcesTestData.kt rename to core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/data/NewsResourcesTestData.kt index ef845dc58..b3fff7ca0 100644 --- a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/data/NewsResourcesTestData.kt +++ b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/data/NewsResourcesTestData.kt @@ -14,12 +14,13 @@ * limitations under the License. */ +@file:Suppress("ktlint:standard:max-line-length") + package com.google.samples.apps.nowinandroid.core.testing.data import com.google.samples.apps.nowinandroid.core.model.data.NewsResource import kotlinx.datetime.Instant -/* ktlint-disable max-line-length */ val newsResourcesTestData: List = listOf( NewsResource( id = "1", diff --git a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/data/TopicsTestData.kt b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/data/TopicsTestData.kt similarity index 98% rename from core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/data/TopicsTestData.kt rename to core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/data/TopicsTestData.kt index 90e9166a5..fc6ef62a6 100644 --- a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/data/TopicsTestData.kt +++ b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/data/TopicsTestData.kt @@ -14,11 +14,12 @@ * limitations under the License. */ +@file:Suppress("ktlint:standard:max-line-length") + package com.google.samples.apps.nowinandroid.core.testing.data import com.google.samples.apps.nowinandroid.core.model.data.Topic -/* ktlint-disable max-line-length */ val topicsTestData: List = listOf( Topic( id = "2", diff --git a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/data/UserNewsResourcesTestData.kt b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/data/UserNewsResourcesTestData.kt similarity index 99% rename from core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/data/UserNewsResourcesTestData.kt rename to core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/data/UserNewsResourcesTestData.kt index 97acad088..4174391df 100644 --- a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/data/UserNewsResourcesTestData.kt +++ b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/data/UserNewsResourcesTestData.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +@file:Suppress("ktlint:standard:max-line-length") + package com.google.samples.apps.nowinandroid.core.testing.data import com.google.samples.apps.nowinandroid.core.model.data.DarkThemeConfig @@ -26,7 +28,6 @@ import kotlinx.datetime.LocalDateTime import kotlinx.datetime.TimeZone import kotlinx.datetime.toInstant -/* ktlint-disable max-line-length */ val userNewsResourcesTestData: List = UserData( bookmarkedNewsResources = setOf("1", "4"), viewedNewsResources = setOf("1", "2", "4"), diff --git a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/di/TestDispatcherModule.kt b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/di/TestDispatcherModule.kt similarity index 96% rename from core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/di/TestDispatcherModule.kt rename to core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/di/TestDispatcherModule.kt index 66d52dabe..09c739243 100644 --- a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/di/TestDispatcherModule.kt +++ b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/di/TestDispatcherModule.kt @@ -26,7 +26,7 @@ import javax.inject.Singleton @Module @InstallIn(SingletonComponent::class) -object TestDispatcherModule { +internal object TestDispatcherModule { @Provides @Singleton fun providesTestDispatcher(): TestDispatcher = UnconfinedTestDispatcher() diff --git a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/di/TestDispatchersModule.kt b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/di/TestDispatchersModule.kt similarity index 97% rename from core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/di/TestDispatchersModule.kt rename to core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/di/TestDispatchersModule.kt index f2134105a..4f5d15be1 100644 --- a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/di/TestDispatchersModule.kt +++ b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/di/TestDispatchersModule.kt @@ -32,7 +32,7 @@ import kotlinx.coroutines.test.TestDispatcher components = [SingletonComponent::class], replaces = [DispatchersModule::class], ) -object TestDispatchersModule { +internal object TestDispatchersModule { @Provides @Dispatcher(IO) fun providesIODispatcher(testDispatcher: TestDispatcher): CoroutineDispatcher = testDispatcher diff --git a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/notifications/TestNotifier.kt b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/notifications/TestNotifier.kt similarity index 100% rename from core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/notifications/TestNotifier.kt rename to core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/notifications/TestNotifier.kt diff --git a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/repository/TestNewsRepository.kt b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/repository/TestNewsRepository.kt similarity index 95% rename from core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/repository/TestNewsRepository.kt rename to core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/repository/TestNewsRepository.kt index d0bfd21a1..ef065a9f8 100644 --- a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/repository/TestNewsRepository.kt +++ b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/repository/TestNewsRepository.kt @@ -43,9 +43,7 @@ class TestNewsRepository : NewsRepository { } } query.filterNewsIds?.let { filterNewsIds -> - result = newsResources.filter { - filterNewsIds.contains(it.id) - } + result = newsResources.filter { it.id in filterNewsIds } } result } diff --git a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/repository/TestRecentSearchRepository.kt b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/repository/TestRecentSearchRepository.kt similarity index 93% rename from core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/repository/TestRecentSearchRepository.kt rename to core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/repository/TestRecentSearchRepository.kt index 961473401..f700bdc31 100644 --- a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/repository/TestRecentSearchRepository.kt +++ b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/repository/TestRecentSearchRepository.kt @@ -32,7 +32,5 @@ class TestRecentSearchRepository : RecentSearchRepository { cachedRecentSearches.add(RecentSearchQuery(searchQuery)) } - override suspend fun clearRecentSearches() { - cachedRecentSearches.clear() - } + override suspend fun clearRecentSearches() = cachedRecentSearches.clear() } diff --git a/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/repository/TestSearchContentsRepository.kt b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/repository/TestSearchContentsRepository.kt new file mode 100644 index 000000000..5436cd10f --- /dev/null +++ b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/repository/TestSearchContentsRepository.kt @@ -0,0 +1,56 @@ +/* + * Copyright 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.core.testing.repository + +import com.google.samples.apps.nowinandroid.core.data.repository.SearchContentsRepository +import com.google.samples.apps.nowinandroid.core.model.data.NewsResource +import com.google.samples.apps.nowinandroid.core.model.data.SearchResult +import com.google.samples.apps.nowinandroid.core.model.data.Topic +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.update +import org.jetbrains.annotations.TestOnly + +class TestSearchContentsRepository : SearchContentsRepository { + + private val cachedTopics = MutableStateFlow(emptyList()) + private val cachedNewsResources = MutableStateFlow(emptyList()) + + override suspend fun populateFtsData() = Unit + + override fun searchContents(searchQuery: String): Flow = + combine(cachedTopics, cachedNewsResources) { topics, news -> + SearchResult( + topics = topics.filter { + searchQuery in it.name || searchQuery in it.shortDescription || searchQuery in it.longDescription + }, + newsResources = news.filter { + searchQuery in it.content || searchQuery in it.title + }, + ) + } + + override fun getSearchContentsCount(): Flow = combine(cachedTopics, cachedNewsResources) { topics, news -> topics.size + news.size } + + @TestOnly + fun addTopics(topics: List) = cachedTopics.update { it + topics } + + @TestOnly + fun addNewsResources(newsResources: List) = + cachedNewsResources.update { it + newsResources } +} diff --git a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/repository/TestTopicsRepository.kt b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/repository/TestTopicsRepository.kt similarity index 92% rename from core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/repository/TestTopicsRepository.kt rename to core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/repository/TestTopicsRepository.kt index a95469d83..ddccbbe35 100644 --- a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/repository/TestTopicsRepository.kt +++ b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/repository/TestTopicsRepository.kt @@ -33,9 +33,8 @@ class TestTopicsRepository : TopicsRepository { override fun getTopics(): Flow> = topicsFlow - override fun getTopic(id: String): Flow { - return topicsFlow.map { topics -> topics.find { it.id == id }!! } - } + override fun getTopic(id: String): Flow = + topicsFlow.map { topics -> topics.find { it.id == id }!! } /** * A test-only API to allow controlling the list of topics from tests. diff --git a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/repository/TestUserDataRepository.kt b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/repository/TestUserDataRepository.kt similarity index 95% rename from core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/repository/TestUserDataRepository.kt rename to core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/repository/TestUserDataRepository.kt index 9d1650c98..be76112dc 100644 --- a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/repository/TestUserDataRepository.kt +++ b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/repository/TestUserDataRepository.kt @@ -49,7 +49,7 @@ class TestUserDataRepository : UserDataRepository { _userData.tryEmit(currentUserData.copy(followedTopics = followedTopicIds)) } - override suspend fun toggleFollowedTopicId(followedTopicId: String, followed: Boolean) { + override suspend fun setTopicIdFollowed(followedTopicId: String, followed: Boolean) { currentUserData.let { current -> val followedTopics = if (followed) { current.followedTopics + followedTopicId @@ -61,7 +61,7 @@ class TestUserDataRepository : UserDataRepository { } } - override suspend fun updateNewsResourceBookmark(newsResourceId: String, bookmarked: Boolean) { + override suspend fun setNewsResourceBookmarked(newsResourceId: String, bookmarked: Boolean) { currentUserData.let { current -> val bookmarkedNews = if (bookmarked) { current.bookmarkedNewsResources + newsResourceId diff --git a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/util/MainDispatcherRule.kt b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/util/MainDispatcherRule.kt similarity index 81% rename from core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/util/MainDispatcherRule.kt rename to core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/util/MainDispatcherRule.kt index 5b8807b75..666c4edd4 100644 --- a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/util/MainDispatcherRule.kt +++ b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/util/MainDispatcherRule.kt @@ -30,13 +30,9 @@ import org.junit.runner.Description * for the duration of the test. */ class MainDispatcherRule( - val testDispatcher: TestDispatcher = UnconfinedTestDispatcher(), + private val testDispatcher: TestDispatcher = UnconfinedTestDispatcher(), ) : TestWatcher() { - override fun starting(description: Description) { - Dispatchers.setMain(testDispatcher) - } + override fun starting(description: Description) = Dispatchers.setMain(testDispatcher) - override fun finished(description: Description) { - Dispatchers.resetMain() - } + override fun finished(description: Description) = Dispatchers.resetMain() } diff --git a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/util/TestAnalyticsHelper.kt b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/util/TestAnalyticsHelper.kt similarity index 93% rename from core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/util/TestAnalyticsHelper.kt rename to core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/util/TestAnalyticsHelper.kt index 005784c21..5f72d30e6 100644 --- a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/util/TestAnalyticsHelper.kt +++ b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/util/TestAnalyticsHelper.kt @@ -26,5 +26,5 @@ class TestAnalyticsHelper : AnalyticsHelper { events.add(event) } - fun hasLogged(event: AnalyticsEvent) = events.contains(event) + fun hasLogged(event: AnalyticsEvent) = event in events } diff --git a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/util/TestNetworkMonitor.kt b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/util/TestNetworkMonitor.kt similarity index 100% rename from core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/util/TestNetworkMonitor.kt rename to core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/util/TestNetworkMonitor.kt diff --git a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/util/TestSyncManager.kt b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/util/TestSyncManager.kt similarity index 93% rename from core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/util/TestSyncManager.kt rename to core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/util/TestSyncManager.kt index 999b67195..ff1e2fdd9 100644 --- a/core/testing/src/main/java/com/google/samples/apps/nowinandroid/core/testing/util/TestSyncManager.kt +++ b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/util/TestSyncManager.kt @@ -26,9 +26,7 @@ class TestSyncManager : SyncManager { override val isSyncing: Flow = syncStatusFlow - override fun requestSync() { - TODO("Not yet implemented") - } + override fun requestSync(): Unit = TODO("Not yet implemented") /** * A test-only API to set the sync status from tests. diff --git a/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/util/TestTimeZoneMonitor.kt b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/util/TestTimeZoneMonitor.kt new file mode 100644 index 000000000..cc71ab2ca --- /dev/null +++ b/core/testing/src/main/kotlin/com/google/samples/apps/nowinandroid/core/testing/util/TestTimeZoneMonitor.kt @@ -0,0 +1,40 @@ +/* + * Copyright 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.core.testing.util + +import com.google.samples.apps.nowinandroid.core.data.util.TimeZoneMonitor +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.datetime.TimeZone + +class TestTimeZoneMonitor : TimeZoneMonitor { + + private val timeZoneFlow = MutableStateFlow(defaultTimeZone) + + override val currentTimeZone: Flow = timeZoneFlow + + /** + * A test-only API to set the from tests. + */ + fun setTimeZone(zoneId: TimeZone) { + timeZoneFlow.value = zoneId + } + + companion object { + val defaultTimeZone: TimeZone = TimeZone.of("Europe/Warsaw") + } +} diff --git a/core/ui/README.md b/core/ui/README.md index 88c3561f1..38e514d01 100644 --- a/core/ui/README.md +++ b/core/ui/README.md @@ -1,3 +1,3 @@ # :core:ui module - -![Dependency graph](../../docs/images/graphs/dep_graph_core_ui.png) +## Dependency graph +![Dependency graph](../../docs/images/graphs/dep_graph_core_ui.svg) diff --git a/core/ui/build.gradle.kts b/core/ui/build.gradle.kts index 044abedaf..5606cb5d1 100644 --- a/core/ui/build.gradle.kts +++ b/core/ui/build.gradle.kts @@ -14,42 +14,25 @@ * limitations under the License. */ plugins { - id("nowinandroid.android.library") - id("nowinandroid.android.library.compose") - id("nowinandroid.android.library.jacoco") + alias(libs.plugins.nowinandroid.android.library) + alias(libs.plugins.nowinandroid.android.library.compose) + alias(libs.plugins.nowinandroid.android.library.jacoco) } android { - defaultConfig { - testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" - } namespace = "com.google.samples.apps.nowinandroid.core.ui" } dependencies { - api(libs.androidx.compose.foundation) - api(libs.androidx.compose.foundation.layout) - api(libs.androidx.compose.material.iconsExtended) - api(libs.androidx.compose.material3) - api(libs.androidx.compose.runtime) - api(libs.androidx.compose.runtime.livedata) - api(libs.androidx.compose.ui.tooling.preview) - api(libs.androidx.compose.ui.util) api(libs.androidx.metrics) - api(libs.androidx.tracing.ktx) + api(projects.core.analytics) + api(projects.core.designsystem) + api(projects.core.model) - debugApi(libs.androidx.compose.ui.tooling) - - implementation(project(":core:analytics")) - implementation(project(":core:designsystem")) - implementation(project(":core:domain")) - implementation(project(":core:model")) - implementation(libs.androidx.activity.compose) implementation(libs.androidx.browser) - implementation(libs.androidx.core.ktx) implementation(libs.coil.kt) implementation(libs.coil.kt.compose) - implementation(libs.kotlinx.datetime) - androidTestImplementation(project(":core:testing")) + androidTestImplementation(libs.bundles.androidx.compose.ui.test) + androidTestImplementation(projects.core.testing) } diff --git a/core/ui/src/androidTest/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCardTest.kt b/core/ui/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCardTest.kt similarity index 95% rename from core/ui/src/androidTest/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCardTest.kt rename to core/ui/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCardTest.kt index a2fdbaee1..d0a124316 100644 --- a/core/ui/src/androidTest/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCardTest.kt +++ b/core/ui/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCardTest.kt @@ -52,7 +52,7 @@ class NewsResourceCardTest { composeTestRule .onNodeWithText( composeTestRule.activity.getString( - R.string.card_meta_data_text, + R.string.core_ui_card_meta_data_text, dateFormatted, newsWithKnownResourceType.type, ), @@ -123,7 +123,7 @@ class NewsResourceCardTest { composeTestRule .onNodeWithContentDescription( composeTestRule.activity.getString( - R.string.unread_resource_dot_content_description, + R.string.core_ui_unread_resource_dot_content_description, ), ) .assertIsDisplayed() @@ -147,7 +147,7 @@ class NewsResourceCardTest { composeTestRule .onNodeWithContentDescription( composeTestRule.activity.getString( - R.string.unread_resource_dot_content_description, + R.string.core_ui_unread_resource_dot_content_description, ), ) .assertDoesNotExist() diff --git a/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/TimeZoneBroadcastReceiver.kt b/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/TimeZoneBroadcastReceiver.kt deleted file mode 100644 index f7ae813c4..000000000 --- a/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/TimeZoneBroadcastReceiver.kt +++ /dev/null @@ -1,50 +0,0 @@ -/* - * Copyright 2022 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.samples.apps.nowinandroid.core.ui - -import android.content.BroadcastReceiver -import android.content.Context -import android.content.Intent -import android.content.IntentFilter - -class TimeZoneBroadcastReceiver( - val onTimeZoneChanged: () -> Unit, -) : BroadcastReceiver() { - private var registered = false - - override fun onReceive(context: Context, intent: Intent) { - if (intent.action == Intent.ACTION_TIMEZONE_CHANGED) { - onTimeZoneChanged() - } - } - - fun register(context: Context) { - if (!registered) { - val filter = IntentFilter() - filter.addAction(Intent.ACTION_TIMEZONE_CHANGED) - context.registerReceiver(this, filter) - registered = true - } - } - - fun unregister(context: Context) { - if (registered) { - context.unregisterReceiver(this) - registered = false - } - } -} diff --git a/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/AnalyticsExtensions.kt b/core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/AnalyticsExtensions.kt similarity index 100% rename from core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/AnalyticsExtensions.kt rename to core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/AnalyticsExtensions.kt diff --git a/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/DevicePreviews.kt b/core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/DevicePreviews.kt similarity index 100% rename from core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/DevicePreviews.kt rename to core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/DevicePreviews.kt diff --git a/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/FollowableTopicPreviewParameterProvider.kt b/core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/FollowableTopicPreviewParameterProvider.kt similarity index 98% rename from core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/FollowableTopicPreviewParameterProvider.kt rename to core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/FollowableTopicPreviewParameterProvider.kt index 2132f5b16..16ae1eced 100644 --- a/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/FollowableTopicPreviewParameterProvider.kt +++ b/core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/FollowableTopicPreviewParameterProvider.kt @@ -14,13 +14,14 @@ * limitations under the License. */ +@file:Suppress("ktlint:standard:max-line-length") + package com.google.samples.apps.nowinandroid.core.ui import androidx.compose.ui.tooling.preview.PreviewParameterProvider import com.google.samples.apps.nowinandroid.core.model.data.FollowableTopic import com.google.samples.apps.nowinandroid.core.model.data.Topic -/* ktlint-disable max-line-length */ /** * This [PreviewParameterProvider](https://developer.android.com/reference/kotlin/androidx/compose/ui/tooling/preview/PreviewParameterProvider) * provides list of [FollowableTopic] for Composable previews. diff --git a/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/InterestsItem.kt b/core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/InterestsItem.kt similarity index 80% rename from feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/InterestsItem.kt rename to core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/InterestsItem.kt index 7456ba92b..c74a21ed5 100644 --- a/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/InterestsItem.kt +++ b/core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/InterestsItem.kt @@ -1,5 +1,5 @@ /* - * Copyright 2022 The Android Open Source Project + * Copyright 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.interests +package com.google.samples.apps.nowinandroid.core.ui import androidx.compose.foundation.background import androidx.compose.foundation.clickable @@ -30,6 +30,7 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.stringResource +import androidx.compose.ui.semantics.selected import androidx.compose.ui.semantics.semantics import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp @@ -37,7 +38,7 @@ import com.google.samples.apps.nowinandroid.core.designsystem.component.DynamicA import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaIconToggleButton import com.google.samples.apps.nowinandroid.core.designsystem.icon.NiaIcons import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme -import com.google.samples.apps.nowinandroid.feature.interests.R.string +import com.google.samples.apps.nowinandroid.core.ui.R.string @Composable fun InterestsItem( @@ -49,10 +50,11 @@ fun InterestsItem( modifier: Modifier = Modifier, iconModifier: Modifier = Modifier, description: String = "", + isSelected: Boolean = false, ) { ListItem( leadingContent = { - InterestsIcon(topicImageUrl, iconModifier.size(64.dp)) + InterestsIcon(topicImageUrl, iconModifier.size(48.dp)) }, headlineContent = { Text(text = name) @@ -68,7 +70,7 @@ fun InterestsItem( Icon( imageVector = NiaIcons.Add, contentDescription = stringResource( - id = string.card_follow_button_content_desc, + id = string.core_ui_interests_card_follow_button_content_desc, ), ) }, @@ -76,17 +78,23 @@ fun InterestsItem( Icon( imageVector = NiaIcons.Check, contentDescription = stringResource( - id = string.card_unfollow_button_content_desc, + id = string.core_ui_interests_card_unfollow_button_content_desc, ), ) }, ) }, colors = ListItemDefaults.colors( - containerColor = Color.Transparent, + containerColor = if (isSelected) { + MaterialTheme.colorScheme.surfaceVariant + } else { + Color.Transparent + }, ), modifier = modifier - .semantics(mergeDescendants = true) { /* no-op */ } + .semantics(mergeDescendants = true) { + selected = isSelected + } .clickable(enabled = true, onClick = onClick), ) } @@ -99,7 +107,8 @@ private fun InterestsIcon(topicImageUrl: String, modifier: Modifier = Modifier) .background(MaterialTheme.colorScheme.surface) .padding(4.dp), imageVector = NiaIcons.Person, - contentDescription = null, // decorative image + // decorative image + contentDescription = null, ) } else { DynamicAsyncImage( @@ -178,3 +187,21 @@ private fun InterestsCardWithEmptyDescriptionPreview() { } } } + +@Preview +@Composable +private fun InterestsCardSelectedPreview() { + NiaTheme { + Surface { + InterestsItem( + name = "Compose", + description = "", + following = true, + topicImageUrl = "", + onClick = { }, + onFollowButtonClick = { }, + isSelected = true, + ) + } + } +} diff --git a/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/JankStatsExtensions.kt b/core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/JankStatsExtensions.kt similarity index 98% rename from core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/JankStatsExtensions.kt rename to core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/JankStatsExtensions.kt index c9fee1ac8..ef3de1059 100644 --- a/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/JankStatsExtensions.kt +++ b/core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/JankStatsExtensions.kt @@ -50,7 +50,7 @@ fun rememberMetricsStateHolder(): Holder { */ @Composable fun TrackJank( - vararg keys: Any?, + vararg keys: Any, reportMetric: suspend CoroutineScope.(state: Holder) -> Unit, ) { val metrics = rememberMetricsStateHolder() @@ -65,7 +65,7 @@ fun TrackJank( */ @Composable fun TrackDisposableJank( - vararg keys: Any?, + vararg keys: Any, reportMetric: DisposableEffectScope.(state: Holder) -> DisposableEffectResult, ) { val metrics = rememberMetricsStateHolder() diff --git a/core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/LocalTimeZone.kt b/core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/LocalTimeZone.kt new file mode 100644 index 000000000..2d9948488 --- /dev/null +++ b/core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/LocalTimeZone.kt @@ -0,0 +1,26 @@ +/* + * Copyright 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.core.ui + +import androidx.compose.runtime.compositionLocalOf +import kotlinx.datetime.TimeZone + +/** + * TimeZone that can be provided with the TimeZoneMonitor. + * This way, it's not needed to pass every single composable the time zone to show in UI. + */ +val LocalTimeZone = compositionLocalOf { TimeZone.currentSystemDefault() } diff --git a/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsFeed.kt b/core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/NewsFeed.kt similarity index 85% rename from core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsFeed.kt rename to core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/NewsFeed.kt index 4a9f5d7c9..c22a02fa1 100644 --- a/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsFeed.kt +++ b/core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/NewsFeed.kt @@ -21,17 +21,15 @@ import android.net.Uri import androidx.annotation.ColorInt import androidx.browser.customtabs.CustomTabColorSchemeParams import androidx.browser.customtabs.CustomTabsIntent +import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.layout.padding import androidx.compose.foundation.lazy.LazyListScope -import androidx.compose.foundation.lazy.grid.GridCells -import androidx.compose.foundation.lazy.grid.LazyGridScope -import androidx.compose.foundation.lazy.grid.LazyVerticalGrid -import androidx.compose.foundation.lazy.grid.items +import androidx.compose.foundation.lazy.staggeredgrid.LazyStaggeredGridScope +import androidx.compose.foundation.lazy.staggeredgrid.LazyVerticalStaggeredGrid +import androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridCells +import androidx.compose.foundation.lazy.staggeredgrid.items import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable -import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.platform.LocalContext @@ -47,7 +45,8 @@ import com.google.samples.apps.nowinandroid.core.model.data.UserNewsResource * An extension on [LazyListScope] defining a feed with news resources. * Depending on the [feedState], this might emit no items. */ -fun LazyGridScope.newsFeed( +@OptIn(ExperimentalFoundationApi::class) +fun LazyStaggeredGridScope.newsFeed( feedState: NewsFeedUiState, onNewsResourcesCheckedChanged: (String, Boolean) -> Unit, onNewsResourceViewed: (String) -> Unit, @@ -62,9 +61,6 @@ fun LazyGridScope.newsFeed( key = { it.id }, contentType = { "newsFeedItem" }, ) { userNewsResource -> - val resourceUrl by remember { - mutableStateOf(Uri.parse(userNewsResource.url)) - } val context = LocalContext.current val analyticsHelper = LocalAnalyticsHelper.current val backgroundColor = MaterialTheme.colorScheme.background.toArgb() @@ -77,7 +73,8 @@ fun LazyGridScope.newsFeed( analyticsHelper.logNewsResourceOpened( newsResourceId = userNewsResource.id, ) - launchCustomChromeTab(context, resourceUrl, backgroundColor) + launchCustomChromeTab(context, Uri.parse(userNewsResource.url), backgroundColor) + onNewsResourceViewed(userNewsResource.id) }, hasBeenViewed = userNewsResource.hasBeenViewed, @@ -88,7 +85,9 @@ fun LazyGridScope.newsFeed( ) }, onTopicClick = onTopicClick, - modifier = Modifier.padding(horizontal = 8.dp), + modifier = Modifier + .padding(horizontal = 8.dp) + .animateItem(), ) } } @@ -129,7 +128,7 @@ sealed interface NewsFeedUiState { @Composable private fun NewsFeedLoadingPreview() { NiaTheme { - LazyVerticalGrid(columns = GridCells.Adaptive(300.dp)) { + LazyVerticalStaggeredGrid(columns = StaggeredGridCells.Adaptive(300.dp)) { newsFeed( feedState = NewsFeedUiState.Loading, onNewsResourcesCheckedChanged = { _, _ -> }, @@ -148,7 +147,7 @@ private fun NewsFeedContentPreview( userNewsResources: List, ) { NiaTheme { - LazyVerticalGrid(columns = GridCells.Adaptive(300.dp)) { + LazyVerticalStaggeredGrid(columns = StaggeredGridCells.Adaptive(300.dp)) { newsFeed( feedState = NewsFeedUiState.Success(userNewsResources), onNewsResourcesCheckedChanged = { _, _ -> }, diff --git a/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCard.kt b/core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCard.kt similarity index 75% rename from core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCard.kt rename to core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCard.kt index de4aec9d7..2395eb156 100644 --- a/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCard.kt +++ b/core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCard.kt @@ -16,8 +16,15 @@ package com.google.samples.apps.nowinandroid.core.ui +import android.content.ClipData +import android.os.Build.VERSION +import android.os.Build.VERSION_CODES +import android.view.View import androidx.compose.foundation.Canvas +import androidx.compose.foundation.ExperimentalFoundationApi import androidx.compose.foundation.Image +import androidx.compose.foundation.draganddrop.dragAndDropSource +import androidx.compose.foundation.gestures.detectTapGestures import androidx.compose.foundation.horizontalScroll import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box @@ -33,24 +40,23 @@ import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.Card import androidx.compose.material3.CardDefaults import androidx.compose.material3.CircularProgressIndicator -import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider -import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.draganddrop.DragAndDropTransferData import androidx.compose.ui.graphics.Color import androidx.compose.ui.layout.ContentScale -import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalInspectionMode +import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.semantics.contentDescription @@ -71,7 +77,7 @@ import com.google.samples.apps.nowinandroid.core.model.data.NewsResource import com.google.samples.apps.nowinandroid.core.model.data.UserNewsResource import kotlinx.datetime.Instant import kotlinx.datetime.toJavaInstant -import java.time.ZoneId +import kotlinx.datetime.toJavaZoneId import java.time.format.DateTimeFormatter import java.time.format.FormatStyle import java.util.Locale @@ -80,7 +86,7 @@ import java.util.Locale * [NewsResource] card used on the following screens: For You, Saved */ -@OptIn(ExperimentalMaterial3Api::class) +@OptIn(ExperimentalFoundationApi::class) @Composable fun NewsResourceCardExpanded( userNewsResource: UserNewsResource, @@ -91,16 +97,31 @@ fun NewsResourceCardExpanded( onTopicClick: (String) -> Unit, modifier: Modifier = Modifier, ) { - val clickActionLabel = stringResource(R.string.card_tap_action) + val clickActionLabel = stringResource(R.string.core_ui_card_tap_action) + val sharingLabel = stringResource(R.string.core_ui_feed_sharing) + val sharingContent = stringResource( + R.string.core_ui_feed_sharing_data, + userNewsResource.title, + userNewsResource.url, + ) + + val dragAndDropFlags = if (VERSION.SDK_INT >= VERSION_CODES.N) { + View.DRAG_FLAG_GLOBAL + } else { + 0 + } + Card( onClick = onClick, shape = RoundedCornerShape(16.dp), colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surface), // Use custom label for accessibility services to communicate button's action to user. // Pass null for action to only override the label and not the actual action. - modifier = modifier.semantics { - onClick(label = clickActionLabel, action = null) - }, + modifier = modifier + .semantics { + onClick(label = clickActionLabel, action = null) + } + .testTag("newsResourceCard:${userNewsResource.id}"), ) { Column { if (!userNewsResource.headerImageUrl.isNullOrEmpty()) { @@ -116,12 +137,28 @@ fun NewsResourceCardExpanded( Row { NewsResourceTitle( userNewsResource.title, - modifier = Modifier.fillMaxWidth((.8f)), + modifier = Modifier + .fillMaxWidth((.8f)) + .dragAndDropSource { + detectTapGestures( + onLongPress = { + startTransfer( + DragAndDropTransferData( + ClipData.newPlainText( + sharingLabel, + sharingContent, + ), + flags = dragAndDropFlags, + ), + ) + }, + ) + }, ) Spacer(modifier = Modifier.weight(1f)) BookmarkButton(isBookmarked, onToggleBookmark) } - Spacer(modifier = Modifier.height(12.dp)) + Spacer(modifier = Modifier.height(14.dp)) Row(verticalAlignment = Alignment.CenterVertically) { if (!hasBeenViewed) { NotificationDot( @@ -132,7 +169,7 @@ fun NewsResourceCardExpanded( } NewsResourceMetaData(userNewsResource.publishDate, userNewsResource.type) } - Spacer(modifier = Modifier.height(12.dp)) + Spacer(modifier = Modifier.height(14.dp)) NewsResourceShortDescription(userNewsResource.content) Spacer(modifier = Modifier.height(12.dp)) NewsResourceTopics( @@ -183,10 +220,11 @@ fun NewsResourceHeaderImage( painter = if (isError.not() && !isLocalInspection) { imageLoader } else { - painterResource(drawable.ic_placeholder_default) + painterResource(drawable.core_designsystem_ic_placeholder_default) }, // TODO b/226661685: Investigate using alt text of image to populate content description - contentDescription = null, // decorative image, + // decorative image, + contentDescription = null, ) } } @@ -212,13 +250,13 @@ fun BookmarkButton( icon = { Icon( imageVector = NiaIcons.BookmarkBorder, - contentDescription = stringResource(R.string.bookmark), + contentDescription = stringResource(R.string.core_ui_bookmark), ) }, checkedIcon = { Icon( imageVector = NiaIcons.Bookmark, - contentDescription = stringResource(R.string.unbookmark), + contentDescription = stringResource(R.string.core_ui_unbookmark), ) }, ) @@ -229,7 +267,7 @@ fun NotificationDot( color: Color, modifier: Modifier = Modifier, ) { - val description = stringResource(R.string.unread_resource_dot_content_description) + val description = stringResource(R.string.core_ui_unread_resource_dot_content_description) Canvas( modifier = modifier .semantics { contentDescription = description }, @@ -243,27 +281,11 @@ fun NotificationDot( } @Composable -fun dateFormatted(publishDate: Instant): String { - var zoneId by remember { mutableStateOf(ZoneId.systemDefault()) } - - val context = LocalContext.current - - DisposableEffect(context) { - val receiver = TimeZoneBroadcastReceiver( - onTimeZoneChanged = { zoneId = ZoneId.systemDefault() }, - ) - receiver.register(context) - onDispose { - receiver.unregister(context) - } - } - - return DateTimeFormatter - .ofLocalizedDate(FormatStyle.MEDIUM) - .withLocale(Locale.getDefault()) - .withZone(zoneId) - .format(publishDate.toJavaInstant()) -} +fun dateFormatted(publishDate: Instant): String = DateTimeFormatter + .ofLocalizedDate(FormatStyle.MEDIUM) + .withLocale(Locale.getDefault()) + .withZone(LocalTimeZone.current.toJavaZoneId()) + .format(publishDate.toJavaInstant()) @Composable fun NewsResourceMetaData( @@ -273,7 +295,7 @@ fun NewsResourceMetaData( val formattedDate = dateFormatted(publishDate) Text( if (resourceType.isNotBlank()) { - stringResource(R.string.card_meta_data_text, formattedDate, resourceType) + stringResource(R.string.core_ui_card_meta_data_text, formattedDate, resourceType) } else { formattedDate }, @@ -295,7 +317,8 @@ fun NewsResourceTopics( modifier: Modifier = Modifier, ) { Row( - modifier = modifier.horizontalScroll(rememberScrollState()), // causes narrow chips + // causes narrow chips + modifier = modifier.horizontalScroll(rememberScrollState()), horizontalArrangement = Arrangement.spacedBy(4.dp), ) { for (followableTopic in topics) { @@ -305,20 +328,22 @@ fun NewsResourceTopics( text = { val contentDescription = if (followableTopic.isFollowed) { stringResource( - R.string.topic_chip_content_description_when_followed, + R.string.core_ui_topic_chip_content_description_when_followed, followableTopic.topic.name, ) } else { stringResource( - R.string.topic_chip_content_description_when_not_followed, + R.string.core_ui_topic_chip_content_description_when_not_followed, followableTopic.topic.name, ) } Text( text = followableTopic.topic.name.uppercase(Locale.getDefault()), - modifier = Modifier.semantics { - this.contentDescription = contentDescription - }, + modifier = Modifier + .semantics { + this.contentDescription = contentDescription + } + .testTag("topicTag:${followableTopic.topic.id}"), ) }, ) diff --git a/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCardList.kt b/core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCardList.kt similarity index 100% rename from core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCardList.kt rename to core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/NewsResourceCardList.kt diff --git a/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/UserNewsResourcePreviewParameterProvider.kt b/core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/UserNewsResourcePreviewParameterProvider.kt similarity index 99% rename from core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/UserNewsResourcePreviewParameterProvider.kt rename to core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/UserNewsResourcePreviewParameterProvider.kt index 493788314..3189e8403 100644 --- a/core/ui/src/main/java/com/google/samples/apps/nowinandroid/core/ui/UserNewsResourcePreviewParameterProvider.kt +++ b/core/ui/src/main/kotlin/com/google/samples/apps/nowinandroid/core/ui/UserNewsResourcePreviewParameterProvider.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +@file:Suppress("ktlint:standard:max-line-length") + package com.google.samples.apps.nowinandroid.core.ui import androidx.compose.ui.tooling.preview.PreviewParameterProvider @@ -29,7 +31,6 @@ import kotlinx.datetime.LocalDateTime import kotlinx.datetime.TimeZone import kotlinx.datetime.toInstant -/* ktlint-disable max-line-length */ /** * This [PreviewParameterProvider](https://developer.android.com/reference/kotlin/androidx/compose/ui/tooling/preview/PreviewParameterProvider) * provides list of [UserNewsResource] for Composable previews. diff --git a/core/ui/src/main/res/values/strings.xml b/core/ui/src/main/res/values/strings.xml index d21a5ea36..a97746a9c 100644 --- a/core/ui/src/main/res/values/strings.xml +++ b/core/ui/src/main/res/values/strings.xml @@ -15,15 +15,20 @@ limitations under the License. --> - Bookmark - Unbookmark - Back + Bookmark + Unbookmark + Back - Unread + Unread - Open Resource Link - %1$s • %2$s + Open Resource Link + %1$s • %2$s - %1$s is followed - %1$s is not followed + %1$s is followed + %1$s is not followed + + Follow interest + Unfollow interest + Feed sharing + %1$s: %2$s diff --git a/docs/ArchitectureLearningJourney.md b/docs/ArchitectureLearningJourney.md index 925858111..d98dadf1e 100644 --- a/docs/ArchitectureLearningJourney.md +++ b/docs/ArchitectureLearningJourney.md @@ -25,6 +25,8 @@ The app architecture has three layers: a [data layer](https://developer.android. Diagram showing overall app architecture +> [!NOTE] +> The official Android architecture is different from other architectures, such as "Clean Architecture". Concepts from other architectures may not apply here, or be applied in different ways. [More discussion here](https://github.com/android/nowinandroid/discussions/1273). The architecture follows a reactive programming model with [unidirectional data flow](https://developer.android.com/jetpack/guide/ui-layer#udf). With the data layer at the bottom, the key concepts are: diff --git a/docs/images/graphs/dep_graph_app.png b/docs/images/graphs/dep_graph_app.png deleted file mode 100644 index dc1e0b7d7..000000000 Binary files a/docs/images/graphs/dep_graph_app.png and /dev/null differ diff --git a/docs/images/graphs/dep_graph_app.svg b/docs/images/graphs/dep_graph_app.svg new file mode 100644 index 000000000..8e5d9d429 --- /dev/null +++ b/docs/images/graphs/dep_graph_app.svg @@ -0,0 +1,305 @@ + + + + + + :app + + + + :feature:interests + + + + + + + + :feature:foryou + + + + + + + + :feature:bookmarks + + + + + + + + :feature:topic + + + + + + + + :feature:search + + + + + + + + :feature:settings + + + + + + + + :core:common + + + + + + + + :core:ui + + + + + + + + :core:designsystem + + + + + + + + :core:data + + + + + + + + :core:model + + + + + + + + :core:analytics + + + + + + + + :sync:work + + + + + + + + + + + + + + + + + + + + :core:domain + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + :core:database + + + + + + + + :core:datastore + + + + + + + + :core:network + + + + + + + + :core:notifications + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + :core:datastore-proto + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/images/graphs/dep_graph_app_nia_catalog.png b/docs/images/graphs/dep_graph_app_nia_catalog.png deleted file mode 100644 index e2698f0b0..000000000 Binary files a/docs/images/graphs/dep_graph_app_nia_catalog.png and /dev/null differ diff --git a/docs/images/graphs/dep_graph_app_nia_catalog.svg b/docs/images/graphs/dep_graph_app_nia_catalog.svg new file mode 100644 index 000000000..151ee63ad --- /dev/null +++ b/docs/images/graphs/dep_graph_app_nia_catalog.svg @@ -0,0 +1,45 @@ + + + + + + :app-nia-catalog + + + + :core:designsystem + + + + + + + + :core:ui + + + + + + + + + + + + :core:analytics + + + + + + + + :core:model + + + + + + + diff --git a/docs/images/graphs/dep_graph_benchmark.png b/docs/images/graphs/dep_graph_benchmark.png deleted file mode 100644 index a724c2fca..000000000 Binary files a/docs/images/graphs/dep_graph_benchmark.png and /dev/null differ diff --git a/docs/images/graphs/dep_graph_core_analytics.svg b/docs/images/graphs/dep_graph_core_analytics.svg new file mode 100644 index 000000000..45f1c1eb0 --- /dev/null +++ b/docs/images/graphs/dep_graph_core_analytics.svg @@ -0,0 +1,9 @@ + + + + + + :core:analytics + + + diff --git a/docs/images/graphs/dep_graph_core_common.png b/docs/images/graphs/dep_graph_core_common.png deleted file mode 100644 index 8e5628068..000000000 Binary files a/docs/images/graphs/dep_graph_core_common.png and /dev/null differ diff --git a/docs/images/graphs/dep_graph_core_common.svg b/docs/images/graphs/dep_graph_core_common.svg new file mode 100644 index 000000000..91033eaa0 --- /dev/null +++ b/docs/images/graphs/dep_graph_core_common.svg @@ -0,0 +1,9 @@ + + + + + + :core:common + + + diff --git a/docs/images/graphs/dep_graph_core_data.png b/docs/images/graphs/dep_graph_core_data.png deleted file mode 100644 index fc30029b7..000000000 Binary files a/docs/images/graphs/dep_graph_core_data.png and /dev/null differ diff --git a/docs/images/graphs/dep_graph_core_data.svg b/docs/images/graphs/dep_graph_core_data.svg new file mode 100644 index 000000000..ab91bafb2 --- /dev/null +++ b/docs/images/graphs/dep_graph_core_data.svg @@ -0,0 +1,97 @@ + + + + + + :core:data + + + + :core:common + + + + + + + + :core:database + + + + + + + + :core:datastore + + + + + + + + :core:network + + + + + + + + :core:analytics + + + + + + + + :core:notifications + + + + + + + + :core:model + + + + + + + + + + + + + + + + :core:datastore-proto + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/images/graphs/dep_graph_core_data_test.png b/docs/images/graphs/dep_graph_core_data_test.png deleted file mode 100644 index c3762b600..000000000 Binary files a/docs/images/graphs/dep_graph_core_data_test.png and /dev/null differ diff --git a/docs/images/graphs/dep_graph_core_data_test.svg b/docs/images/graphs/dep_graph_core_data_test.svg new file mode 100644 index 000000000..b9736c859 --- /dev/null +++ b/docs/images/graphs/dep_graph_core_data_test.svg @@ -0,0 +1,105 @@ + + + + + + :core:data-test + + + + :core:data + + + + + + + + :core:common + + + + + + + + :core:database + + + + + + + + :core:datastore + + + + + + + + :core:network + + + + + + + + :core:analytics + + + + + + + + :core:notifications + + + + + + + + :core:model + + + + + + + + + + + + + + + + :core:datastore-proto + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/images/graphs/dep_graph_core_database.png b/docs/images/graphs/dep_graph_core_database.png deleted file mode 100644 index dc3e65756..000000000 Binary files a/docs/images/graphs/dep_graph_core_database.png and /dev/null differ diff --git a/docs/images/graphs/dep_graph_core_database.svg b/docs/images/graphs/dep_graph_core_database.svg new file mode 100644 index 000000000..e82d46436 --- /dev/null +++ b/docs/images/graphs/dep_graph_core_database.svg @@ -0,0 +1,17 @@ + + + + + + :core:database + + + + :core:model + + + + + + + diff --git a/docs/images/graphs/dep_graph_core_datastore.png b/docs/images/graphs/dep_graph_core_datastore.png deleted file mode 100644 index 861c2498a..000000000 Binary files a/docs/images/graphs/dep_graph_core_datastore.png and /dev/null differ diff --git a/docs/images/graphs/dep_graph_core_datastore.svg b/docs/images/graphs/dep_graph_core_datastore.svg new file mode 100644 index 000000000..f7502e55b --- /dev/null +++ b/docs/images/graphs/dep_graph_core_datastore.svg @@ -0,0 +1,33 @@ + + + + + + :core:datastore + + + + :core:datastore-proto + + + + + + + + :core:model + + + + + + + + :core:common + + + + + + + diff --git a/docs/images/graphs/dep_graph_core_datastore_proto.svg b/docs/images/graphs/dep_graph_core_datastore_proto.svg new file mode 100644 index 000000000..7fcfb8358 --- /dev/null +++ b/docs/images/graphs/dep_graph_core_datastore_proto.svg @@ -0,0 +1,9 @@ + + + + + + :core:datastore-proto + + + diff --git a/docs/images/graphs/dep_graph_core_datastore_test.png b/docs/images/graphs/dep_graph_core_datastore_test.png deleted file mode 100644 index efe51c7de..000000000 Binary files a/docs/images/graphs/dep_graph_core_datastore_test.png and /dev/null differ diff --git a/docs/images/graphs/dep_graph_core_datastore_test.svg b/docs/images/graphs/dep_graph_core_datastore_test.svg new file mode 100644 index 000000000..37521a05f --- /dev/null +++ b/docs/images/graphs/dep_graph_core_datastore_test.svg @@ -0,0 +1,45 @@ + + + + + + :core:datastore-test + + + + :core:common + + + + + + + + :core:datastore + + + + + + + + + + + + :core:datastore-proto + + + + + + + + :core:model + + + + + + + diff --git a/docs/images/graphs/dep_graph_core_designsystem.png b/docs/images/graphs/dep_graph_core_designsystem.png deleted file mode 100644 index 1d6002d2a..000000000 Binary files a/docs/images/graphs/dep_graph_core_designsystem.png and /dev/null differ diff --git a/docs/images/graphs/dep_graph_core_designsystem.svg b/docs/images/graphs/dep_graph_core_designsystem.svg new file mode 100644 index 000000000..737140876 --- /dev/null +++ b/docs/images/graphs/dep_graph_core_designsystem.svg @@ -0,0 +1,9 @@ + + + + + + :core:designsystem + + + diff --git a/docs/images/graphs/dep_graph_core_domain.svg b/docs/images/graphs/dep_graph_core_domain.svg new file mode 100644 index 000000000..fe3740d2f --- /dev/null +++ b/docs/images/graphs/dep_graph_core_domain.svg @@ -0,0 +1,109 @@ + + + + + + :core:domain + + + + :core:data + + + + + + + + :core:model + + + + + + + + :core:common + + + + + + + + :core:database + + + + + + + + :core:datastore + + + + + + + + :core:network + + + + + + + + :core:analytics + + + + + + + + :core:notifications + + + + + + + + + + + + + + + + + + + + :core:datastore-proto + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/images/graphs/dep_graph_core_model.png b/docs/images/graphs/dep_graph_core_model.png deleted file mode 100644 index 205583afa..000000000 Binary files a/docs/images/graphs/dep_graph_core_model.png and /dev/null differ diff --git a/docs/images/graphs/dep_graph_core_model.svg b/docs/images/graphs/dep_graph_core_model.svg new file mode 100644 index 000000000..125684a08 --- /dev/null +++ b/docs/images/graphs/dep_graph_core_model.svg @@ -0,0 +1,9 @@ + + + + + + :core:model + + + diff --git a/docs/images/graphs/dep_graph_core_navigation.png b/docs/images/graphs/dep_graph_core_navigation.png deleted file mode 100644 index 5ceab49b8..000000000 Binary files a/docs/images/graphs/dep_graph_core_navigation.png and /dev/null differ diff --git a/docs/images/graphs/dep_graph_core_network.png b/docs/images/graphs/dep_graph_core_network.png deleted file mode 100644 index 908715660..000000000 Binary files a/docs/images/graphs/dep_graph_core_network.png and /dev/null differ diff --git a/docs/images/graphs/dep_graph_core_network.svg b/docs/images/graphs/dep_graph_core_network.svg new file mode 100644 index 000000000..3022a86ee --- /dev/null +++ b/docs/images/graphs/dep_graph_core_network.svg @@ -0,0 +1,25 @@ + + + + + + :core:network + + + + :core:common + + + + + + + + :core:model + + + + + + + diff --git a/docs/images/graphs/dep_graph_core_notifications.svg b/docs/images/graphs/dep_graph_core_notifications.svg new file mode 100644 index 000000000..d96d28769 --- /dev/null +++ b/docs/images/graphs/dep_graph_core_notifications.svg @@ -0,0 +1,25 @@ + + + + + + :core:notifications + + + + :core:model + + + + + + + + :core:common + + + + + + + diff --git a/docs/images/graphs/dep_graph_core_screenshot_testing.svg b/docs/images/graphs/dep_graph_core_screenshot_testing.svg new file mode 100644 index 000000000..a7d58b0ea --- /dev/null +++ b/docs/images/graphs/dep_graph_core_screenshot_testing.svg @@ -0,0 +1,17 @@ + + + + + + :core:screenshot-testing + + + + :core:designsystem + + + + + + + diff --git a/docs/images/graphs/dep_graph_core_testing.png b/docs/images/graphs/dep_graph_core_testing.png deleted file mode 100644 index 162830ae7..000000000 Binary files a/docs/images/graphs/dep_graph_core_testing.png and /dev/null differ diff --git a/docs/images/graphs/dep_graph_core_testing.svg b/docs/images/graphs/dep_graph_core_testing.svg new file mode 100644 index 000000000..d441858e5 --- /dev/null +++ b/docs/images/graphs/dep_graph_core_testing.svg @@ -0,0 +1,121 @@ + + + + + + :core:testing + + + + :core:analytics + + + + + + + + :core:common + + + + + + + + :core:data + + + + + + + + :core:model + + + + + + + + :core:notifications + + + + + + + + + + + + + + + + + + + + :core:database + + + + + + + + :core:datastore + + + + + + + + :core:network + + + + + + + + + + + + + + + + + + + + + + + + + + + + :core:datastore-proto + + + + + + + + + + + + + + + diff --git a/docs/images/graphs/dep_graph_core_ui.png b/docs/images/graphs/dep_graph_core_ui.png deleted file mode 100644 index 31c9e6715..000000000 Binary files a/docs/images/graphs/dep_graph_core_ui.png and /dev/null differ diff --git a/docs/images/graphs/dep_graph_core_ui.svg b/docs/images/graphs/dep_graph_core_ui.svg new file mode 100644 index 000000000..2cd972357 --- /dev/null +++ b/docs/images/graphs/dep_graph_core_ui.svg @@ -0,0 +1,33 @@ + + + + + + :core:ui + + + + :core:analytics + + + + + + + + :core:designsystem + + + + + + + + :core:model + + + + + + + diff --git a/docs/images/graphs/dep_graph_feature_author.png b/docs/images/graphs/dep_graph_feature_author.png deleted file mode 100644 index ddd1f03f6..000000000 Binary files a/docs/images/graphs/dep_graph_feature_author.png and /dev/null differ diff --git a/docs/images/graphs/dep_graph_feature_bookmarks.png b/docs/images/graphs/dep_graph_feature_bookmarks.png deleted file mode 100644 index f07fe891e..000000000 Binary files a/docs/images/graphs/dep_graph_feature_bookmarks.png and /dev/null differ diff --git a/docs/images/graphs/dep_graph_feature_bookmarks.svg b/docs/images/graphs/dep_graph_feature_bookmarks.svg new file mode 100644 index 000000000..0391eb39c --- /dev/null +++ b/docs/images/graphs/dep_graph_feature_bookmarks.svg @@ -0,0 +1,133 @@ + + + + + + :feature:bookmarks + + + + :core:ui + + + + + + + + :core:designsystem + + + + + + + + :core:data + + + + + + + + + + + + :core:analytics + + + + + + + + :core:model + + + + + + + + + + + + :core:common + + + + + + + + :core:database + + + + + + + + :core:datastore + + + + + + + + :core:network + + + + + + + + :core:notifications + + + + + + + + + + + + + + + + + + + + :core:datastore-proto + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/images/graphs/dep_graph_feature_foryou.png b/docs/images/graphs/dep_graph_feature_foryou.png deleted file mode 100644 index cf483f1b1..000000000 Binary files a/docs/images/graphs/dep_graph_feature_foryou.png and /dev/null differ diff --git a/docs/images/graphs/dep_graph_feature_foryou.svg b/docs/images/graphs/dep_graph_feature_foryou.svg new file mode 100644 index 000000000..63a154a87 --- /dev/null +++ b/docs/images/graphs/dep_graph_feature_foryou.svg @@ -0,0 +1,149 @@ + + + + + + :feature:foryou + + + + :core:ui + + + + + + + + :core:designsystem + + + + + + + + :core:data + + + + + + + + :core:domain + + + + + + + + + + + + :core:analytics + + + + + + + + :core:model + + + + + + + + + + + + :core:common + + + + + + + + :core:database + + + + + + + + :core:datastore + + + + + + + + :core:network + + + + + + + + :core:notifications + + + + + + + + + + + + + + + + + + + + + + + + + + + + :core:datastore-proto + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/images/graphs/dep_graph_feature_interests.png b/docs/images/graphs/dep_graph_feature_interests.png deleted file mode 100644 index 09c74f995..000000000 Binary files a/docs/images/graphs/dep_graph_feature_interests.png and /dev/null differ diff --git a/docs/images/graphs/dep_graph_feature_interests.svg b/docs/images/graphs/dep_graph_feature_interests.svg new file mode 100644 index 000000000..2de1fc61f --- /dev/null +++ b/docs/images/graphs/dep_graph_feature_interests.svg @@ -0,0 +1,149 @@ + + + + + + :feature:interests + + + + :core:ui + + + + + + + + :core:designsystem + + + + + + + + :core:data + + + + + + + + :core:domain + + + + + + + + + + + + :core:analytics + + + + + + + + :core:model + + + + + + + + + + + + :core:common + + + + + + + + :core:database + + + + + + + + :core:datastore + + + + + + + + :core:network + + + + + + + + :core:notifications + + + + + + + + + + + + + + + + + + + + + + + + + + + + :core:datastore-proto + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/images/graphs/dep_graph_feature_search.svg b/docs/images/graphs/dep_graph_feature_search.svg new file mode 100644 index 000000000..7f8f29777 --- /dev/null +++ b/docs/images/graphs/dep_graph_feature_search.svg @@ -0,0 +1,149 @@ + + + + + + :feature:search + + + + :core:ui + + + + + + + + :core:designsystem + + + + + + + + :core:data + + + + + + + + :core:domain + + + + + + + + + + + + :core:analytics + + + + + + + + :core:model + + + + + + + + + + + + :core:common + + + + + + + + :core:database + + + + + + + + :core:datastore + + + + + + + + :core:network + + + + + + + + :core:notifications + + + + + + + + + + + + + + + + + + + + + + + + + + + + :core:datastore-proto + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/images/graphs/dep_graph_feature_settings.svg b/docs/images/graphs/dep_graph_feature_settings.svg new file mode 100644 index 000000000..3f0d35df2 --- /dev/null +++ b/docs/images/graphs/dep_graph_feature_settings.svg @@ -0,0 +1,133 @@ + + + + + + :feature:settings + + + + :core:ui + + + + + + + + :core:designsystem + + + + + + + + :core:data + + + + + + + + + + + + :core:analytics + + + + + + + + :core:model + + + + + + + + + + + + :core:common + + + + + + + + :core:database + + + + + + + + :core:datastore + + + + + + + + :core:network + + + + + + + + :core:notifications + + + + + + + + + + + + + + + + + + + + :core:datastore-proto + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/images/graphs/dep_graph_feature_topic.png b/docs/images/graphs/dep_graph_feature_topic.png deleted file mode 100644 index 8385d1ed6..000000000 Binary files a/docs/images/graphs/dep_graph_feature_topic.png and /dev/null differ diff --git a/docs/images/graphs/dep_graph_feature_topic.svg b/docs/images/graphs/dep_graph_feature_topic.svg new file mode 100644 index 000000000..b7c7dd26c --- /dev/null +++ b/docs/images/graphs/dep_graph_feature_topic.svg @@ -0,0 +1,133 @@ + + + + + + :feature:topic + + + + :core:ui + + + + + + + + :core:designsystem + + + + + + + + :core:data + + + + + + + + + + + + :core:analytics + + + + + + + + :core:model + + + + + + + + + + + + :core:common + + + + + + + + :core:database + + + + + + + + :core:datastore + + + + + + + + :core:network + + + + + + + + :core:notifications + + + + + + + + + + + + + + + + + + + + :core:datastore-proto + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/images/graphs/dep_graph_lint.png b/docs/images/graphs/dep_graph_lint.png deleted file mode 100644 index 176d1de5d..000000000 Binary files a/docs/images/graphs/dep_graph_lint.png and /dev/null differ diff --git a/docs/images/graphs/dep_graph_sync.png b/docs/images/graphs/dep_graph_sync.png deleted file mode 100644 index 26b79b9bc..000000000 Binary files a/docs/images/graphs/dep_graph_sync.png and /dev/null differ diff --git a/docs/images/graphs/dep_graph_sync_sync_test.svg b/docs/images/graphs/dep_graph_sync_sync_test.svg new file mode 100644 index 000000000..7a083ba54 --- /dev/null +++ b/docs/images/graphs/dep_graph_sync_sync_test.svg @@ -0,0 +1,121 @@ + + + + + + :sync:sync-test + + + + :core:data + + + + + + + + :sync:work + + + + + + + + :core:common + + + + + + + + :core:database + + + + + + + + :core:datastore + + + + + + + + :core:network + + + + + + + + :core:analytics + + + + + + + + :core:notifications + + + + + + + + + + + + + + + + :core:model + + + + + + + + + + + + + + + + :core:datastore-proto + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/images/graphs/dep_graph_sync_work.svg b/docs/images/graphs/dep_graph_sync_work.svg new file mode 100644 index 000000000..c649f2397 --- /dev/null +++ b/docs/images/graphs/dep_graph_sync_work.svg @@ -0,0 +1,109 @@ + + + + + + :sync:work + + + + :core:analytics + + + + + + + + :core:data + + + + + + + + + + + + :core:common + + + + + + + + :core:database + + + + + + + + :core:datastore + + + + + + + + :core:network + + + + + + + + :core:notifications + + + + + + + + :core:model + + + + + + + + + + + + + + + + :core:datastore-proto + + + + + + + + + + + + + + + + + + + + + + + diff --git a/feature/bookmarks/README.md b/feature/bookmarks/README.md index e2b8c65ac..54cbf91d0 100644 --- a/feature/bookmarks/README.md +++ b/feature/bookmarks/README.md @@ -1,3 +1,3 @@ # :feature:bookmarks module - -![Dependency graph](../../docs/images/graphs/dep_graph_feature_bookmarks.png) +## Dependency graph +![Dependency graph](../../docs/images/graphs/dep_graph_feature_bookmarks.svg) diff --git a/feature/bookmarks/build.gradle.kts b/feature/bookmarks/build.gradle.kts index 667e674ec..51a15ce7a 100644 --- a/feature/bookmarks/build.gradle.kts +++ b/feature/bookmarks/build.gradle.kts @@ -15,9 +15,9 @@ */ plugins { - id("nowinandroid.android.feature") - id("nowinandroid.android.library.compose") - id("nowinandroid.android.library.jacoco") + alias(libs.plugins.nowinandroid.android.feature) + alias(libs.plugins.nowinandroid.android.library.compose) + alias(libs.plugins.nowinandroid.android.library.jacoco) } android { @@ -25,5 +25,10 @@ android { } dependencies { - implementation(libs.androidx.compose.material3.windowSizeClass) + implementation(projects.core.data) + + testImplementation(projects.core.testing) + + androidTestImplementation(libs.bundles.androidx.compose.ui.test) + androidTestImplementation(projects.core.testing) } diff --git a/feature/bookmarks/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreenTest.kt b/feature/bookmarks/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreenTest.kt similarity index 78% rename from feature/bookmarks/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreenTest.kt rename to feature/bookmarks/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreenTest.kt index 6e432f2ab..dd01b84c9 100644 --- a/feature/bookmarks/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreenTest.kt +++ b/feature/bookmarks/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreenTest.kt @@ -17,6 +17,7 @@ package com.google.samples.apps.nowinandroid.feature.bookmarks import androidx.activity.ComponentActivity +import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.ui.test.assertCountEquals import androidx.compose.ui.test.assertHasClickAction import androidx.compose.ui.test.filter @@ -30,8 +31,12 @@ import androidx.compose.ui.test.onNodeWithContentDescription import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.test.performClick import androidx.compose.ui.test.performScrollToNode +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.compose.LocalLifecycleOwner +import androidx.lifecycle.testing.TestLifecycleOwner import com.google.samples.apps.nowinandroid.core.testing.data.userNewsResourcesTestData import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState +import kotlinx.coroutines.test.runTest import org.junit.Rule import org.junit.Test import kotlin.test.assertEquals @@ -59,7 +64,7 @@ class BookmarksScreenTest { composeTestRule .onNodeWithContentDescription( - composeTestRule.activity.resources.getString(R.string.saved_loading), + composeTestRule.activity.resources.getString(R.string.feature_bookmarks_loading), ) .assertExists() } @@ -125,7 +130,7 @@ class BookmarksScreenTest { composeTestRule .onAllNodesWithContentDescription( composeTestRule.activity.getString( - com.google.samples.apps.nowinandroid.core.ui.R.string.unbookmark, + com.google.samples.apps.nowinandroid.core.ui.R.string.core_ui_unbookmark, ), ).filter( hasAnyAncestor( @@ -156,14 +161,39 @@ class BookmarksScreenTest { composeTestRule .onNodeWithText( - composeTestRule.activity.getString(R.string.bookmarks_empty_error), + composeTestRule.activity.getString(R.string.feature_bookmarks_empty_error), ) .assertExists() composeTestRule .onNodeWithText( - composeTestRule.activity.getString(R.string.bookmarks_empty_description), + composeTestRule.activity.getString(R.string.feature_bookmarks_empty_description), ) .assertExists() } + + @Test + fun feed_whenLifecycleStops_undoBookmarkedStateIsCleared() = runTest { + var undoStateCleared = false + val testLifecycleOwner = TestLifecycleOwner(initialState = Lifecycle.State.STARTED) + + composeTestRule.setContent { + CompositionLocalProvider(LocalLifecycleOwner provides testLifecycleOwner) { + BookmarksScreen( + feedState = NewsFeedUiState.Success(emptyList()), + onShowSnackbar = { _, _ -> false }, + removeFromBookmarks = {}, + onTopicClick = {}, + onNewsResourceViewed = {}, + clearUndoState = { + undoStateCleared = true + }, + ) + } + } + + assertEquals(false, undoStateCleared) + testLifecycleOwner.handleLifecycleEvent(event = Lifecycle.Event.ON_STOP) + assertEquals(true, undoStateCleared) + } } diff --git a/feature/bookmarks/src/main/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreen.kt b/feature/bookmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreen.kt similarity index 85% rename from feature/bookmarks/src/main/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreen.kt rename to feature/bookmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreen.kt index e46ada015..7c229c5ea 100644 --- a/feature/bookmarks/src/main/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreen.kt +++ b/feature/bookmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksScreen.kt @@ -35,20 +35,19 @@ import androidx.compose.foundation.layout.systemBars import androidx.compose.foundation.layout.windowInsetsBottomHeight import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.foundation.layout.wrapContentSize -import androidx.compose.foundation.lazy.grid.GridCells.Adaptive -import androidx.compose.foundation.lazy.grid.GridItemSpan -import androidx.compose.foundation.lazy.grid.LazyVerticalGrid -import androidx.compose.foundation.lazy.grid.rememberLazyGridState +import androidx.compose.foundation.lazy.staggeredgrid.LazyVerticalStaggeredGrid +import androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridCells +import androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridItemSpan +import androidx.compose.foundation.lazy.staggeredgrid.rememberLazyStaggeredGridState import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text import androidx.compose.runtime.Composable -import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.ColorFilter -import androidx.compose.ui.platform.LocalLifecycleOwner import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource @@ -59,7 +58,7 @@ import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.Lifecycle -import androidx.lifecycle.LifecycleEventObserver +import androidx.lifecycle.compose.LifecycleEventEffect import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaLoadingWheel import com.google.samples.apps.nowinandroid.core.designsystem.component.scrollbar.DraggableScrollbar @@ -113,8 +112,8 @@ internal fun BookmarksScreen( undoBookmarkRemoval: () -> Unit = {}, clearUndoState: () -> Unit = {}, ) { - val bookmarkRemovedMessage = stringResource(id = R.string.bookmark_removed) - val undoText = stringResource(id = R.string.undo) + val bookmarkRemovedMessage = stringResource(id = R.string.feature_bookmarks_removed) + val undoText = stringResource(id = R.string.feature_bookmarks_undo) LaunchedEffect(shouldDisplayUndoBookmark) { if (shouldDisplayUndoBookmark) { @@ -127,15 +126,8 @@ internal fun BookmarksScreen( } } - val lifecycleOwner = LocalLifecycleOwner.current - DisposableEffect(lifecycleOwner) { - val observer = LifecycleEventObserver { _, event -> - if (event == Lifecycle.Event.ON_STOP) { - clearUndoState() - } - } - lifecycleOwner.lifecycle.addObserver(observer) - onDispose { lifecycleOwner.lifecycle.removeObserver(observer) } + LifecycleEventEffect(Lifecycle.Event.ON_STOP) { + clearUndoState() } when (feedState) { @@ -163,7 +155,7 @@ private fun LoadingState(modifier: Modifier = Modifier) { .fillMaxWidth() .wrapContentSize() .testTag("forYou:loading"), - contentDesc = stringResource(id = R.string.saved_loading), + contentDesc = stringResource(id = R.string.feature_bookmarks_loading), ) } @@ -175,17 +167,17 @@ private fun BookmarksGrid( onTopicClick: (String) -> Unit, modifier: Modifier = Modifier, ) { - val scrollableState = rememberLazyGridState() + val scrollableState = rememberLazyStaggeredGridState() TrackScrollJank(scrollableState = scrollableState, stateName = "bookmarks:grid") Box( modifier = modifier .fillMaxSize(), ) { - LazyVerticalGrid( - columns = Adaptive(300.dp), + LazyVerticalStaggeredGrid( + columns = StaggeredGridCells.Adaptive(300.dp), contentPadding = PaddingValues(16.dp), horizontalArrangement = Arrangement.spacedBy(16.dp), - verticalArrangement = Arrangement.spacedBy(24.dp), + verticalItemSpacing = 24.dp, state = scrollableState, modifier = Modifier .fillMaxSize() @@ -197,7 +189,7 @@ private fun BookmarksGrid( onNewsResourceViewed = onNewsResourceViewed, onTopicClick = onTopicClick, ) - item(span = { GridItemSpan(maxLineSpan) }) { + item(span = StaggeredGridItemSpan.FullLine) { Spacer(Modifier.windowInsetsBottomHeight(WindowInsets.safeDrawing)) } } @@ -236,15 +228,15 @@ private fun EmptyState(modifier: Modifier = Modifier) { val iconTint = LocalTintTheme.current.iconTint Image( modifier = Modifier.fillMaxWidth(), - painter = painterResource(id = R.drawable.img_empty_bookmarks), - colorFilter = if (iconTint != null) ColorFilter.tint(iconTint) else null, + painter = painterResource(id = R.drawable.feature_bookmarks_img_empty_bookmarks), + colorFilter = if (iconTint != Color.Unspecified) ColorFilter.tint(iconTint) else null, contentDescription = null, ) Spacer(modifier = Modifier.height(48.dp)) Text( - text = stringResource(id = R.string.bookmarks_empty_error), + text = stringResource(id = R.string.feature_bookmarks_empty_error), modifier = Modifier.fillMaxWidth(), textAlign = TextAlign.Center, style = MaterialTheme.typography.titleMedium, @@ -254,7 +246,7 @@ private fun EmptyState(modifier: Modifier = Modifier) { Spacer(modifier = Modifier.height(8.dp)) Text( - text = stringResource(id = R.string.bookmarks_empty_description), + text = stringResource(id = R.string.feature_bookmarks_empty_description), modifier = Modifier.fillMaxWidth(), textAlign = TextAlign.Center, style = MaterialTheme.typography.bodyMedium, diff --git a/feature/bookmarks/src/main/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel.kt b/feature/bookmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel.kt similarity index 95% rename from feature/bookmarks/src/main/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel.kt rename to feature/bookmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel.kt index 7b6cac76a..f93602485 100644 --- a/feature/bookmarks/src/main/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel.kt +++ b/feature/bookmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModel.kt @@ -58,7 +58,7 @@ class BookmarksViewModel @Inject constructor( viewModelScope.launch { shouldDisplayUndoBookmark = true lastRemovedBookmarkId = newsResourceId - userDataRepository.updateNewsResourceBookmark(newsResourceId, false) + userDataRepository.setNewsResourceBookmarked(newsResourceId, false) } } @@ -71,7 +71,7 @@ class BookmarksViewModel @Inject constructor( fun undoBookmarkRemoval() { viewModelScope.launch { lastRemovedBookmarkId?.let { - userDataRepository.updateNewsResourceBookmark(it, true) + userDataRepository.setNewsResourceBookmarked(it, true) } } clearUndoState() diff --git a/feature/bookmarks/src/main/java/com/google/samples/apps/nowinandroid/feature/bookmarks/navigation/BookmarksNavigation.kt b/feature/bookmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/navigation/BookmarksNavigation.kt similarity index 83% rename from feature/bookmarks/src/main/java/com/google/samples/apps/nowinandroid/feature/bookmarks/navigation/BookmarksNavigation.kt rename to feature/bookmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/navigation/BookmarksNavigation.kt index ebcde4ab1..ea8d525ab 100644 --- a/feature/bookmarks/src/main/java/com/google/samples/apps/nowinandroid/feature/bookmarks/navigation/BookmarksNavigation.kt +++ b/feature/bookmarks/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/navigation/BookmarksNavigation.kt @@ -21,18 +21,18 @@ import androidx.navigation.NavGraphBuilder import androidx.navigation.NavOptions import androidx.navigation.compose.composable import com.google.samples.apps.nowinandroid.feature.bookmarks.BookmarksRoute +import kotlinx.serialization.Serializable -const val bookmarksRoute = "bookmarks_route" +@Serializable object BookmarksRoute -fun NavController.navigateToBookmarks(navOptions: NavOptions? = null) { - this.navigate(bookmarksRoute, navOptions) -} +fun NavController.navigateToBookmarks(navOptions: NavOptions) = + navigate(route = BookmarksRoute, navOptions) fun NavGraphBuilder.bookmarksScreen( onTopicClick: (String) -> Unit, onShowSnackbar: suspend (String, String?) -> Boolean, ) { - composable(route = bookmarksRoute) { + composable { BookmarksRoute(onTopicClick, onShowSnackbar) } } diff --git a/feature/bookmarks/src/main/res/drawable/img_empty_bookmarks.xml b/feature/bookmarks/src/main/res/drawable/feature_bookmarks_img_empty_bookmarks.xml similarity index 100% rename from feature/bookmarks/src/main/res/drawable/img_empty_bookmarks.xml rename to feature/bookmarks/src/main/res/drawable/feature_bookmarks_img_empty_bookmarks.xml diff --git a/feature/bookmarks/src/main/res/values/strings.xml b/feature/bookmarks/src/main/res/values/strings.xml index 875a90a0b..6e2b23043 100644 --- a/feature/bookmarks/src/main/res/values/strings.xml +++ b/feature/bookmarks/src/main/res/values/strings.xml @@ -15,10 +15,10 @@ limitations under the License. --> - Saved - Loading saved… - No saved updates - Updates you save will be stored here\nto read later - Bookmark removed - UNDO + Saved + Loading saved… + No saved updates + Updates you save will be stored here\nto read later + Bookmark removed + UNDO diff --git a/feature/bookmarks/src/test/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt b/feature/bookmarks/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt similarity index 88% rename from feature/bookmarks/src/test/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt rename to feature/bookmarks/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt index 6469a684b..19ab0ad85 100644 --- a/feature/bookmarks/src/test/java/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt +++ b/feature/bookmarks/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/bookmarks/BookmarksViewModelTest.kt @@ -64,31 +64,27 @@ class BookmarksViewModelTest { @Test fun oneBookmark_showsInFeed() = runTest { - val collectJob = launch(UnconfinedTestDispatcher()) { viewModel.feedUiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.feedUiState.collect() } newsRepository.sendNewsResources(newsResourcesTestData) - userDataRepository.updateNewsResourceBookmark(newsResourcesTestData[0].id, true) + userDataRepository.setNewsResourceBookmarked(newsResourcesTestData[0].id, true) val item = viewModel.feedUiState.value assertIs(item) assertEquals(item.feed.size, 1) - - collectJob.cancel() } @Test fun oneBookmark_whenRemoving_removesFromFeed() = runTest { - val collectJob = launch(UnconfinedTestDispatcher()) { viewModel.feedUiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.feedUiState.collect() } // Set the news resources to be used by this test newsRepository.sendNewsResources(newsResourcesTestData) // Start with the resource saved - userDataRepository.updateNewsResourceBookmark(newsResourcesTestData[0].id, true) + userDataRepository.setNewsResourceBookmarked(newsResourcesTestData[0].id, true) // Use viewModel to remove saved resource viewModel.removeFromSavedResources(newsResourcesTestData[0].id) // Verify list of saved resources is now empty val item = viewModel.feedUiState.value assertIs(item) assertEquals(item.feed.size, 0) - - collectJob.cancel() } } diff --git a/feature/foryou/README.md b/feature/foryou/README.md index 1ca599859..0f08cb827 100644 --- a/feature/foryou/README.md +++ b/feature/foryou/README.md @@ -1,3 +1,3 @@ # :feature:foryou module - -![Dependency graph](../../docs/images/graphs/dep_graph_feature_foryou.png) +## Dependency graph +![Dependency graph](../../docs/images/graphs/dep_graph_feature_foryou.svg) diff --git a/feature/foryou/build.gradle.kts b/feature/foryou/build.gradle.kts index bd633e3d2..41d5b16a2 100644 --- a/feature/foryou/build.gradle.kts +++ b/feature/foryou/build.gradle.kts @@ -15,9 +15,10 @@ */ plugins { - id("nowinandroid.android.feature") - id("nowinandroid.android.library.compose") - id("nowinandroid.android.library.jacoco") + alias(libs.plugins.nowinandroid.android.feature) + alias(libs.plugins.nowinandroid.android.library.compose) + alias(libs.plugins.nowinandroid.android.library.jacoco) + alias(libs.plugins.roborazzi) } android { @@ -25,7 +26,16 @@ android { } dependencies { - implementation(libs.kotlinx.datetime) - implementation(libs.androidx.activity.compose) implementation(libs.accompanist.permissions) + implementation(projects.core.data) + implementation(projects.core.domain) + implementation(project(":core:notifications")) + + testImplementation(libs.hilt.android.testing) + testImplementation(libs.robolectric) + testImplementation(projects.core.testing) + testDemoImplementation(projects.core.screenshotTesting) + + androidTestImplementation(libs.bundles.androidx.compose.ui.test) + androidTestImplementation(projects.core.testing) } diff --git a/feature/foryou/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenTest.kt b/feature/foryou/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenTest.kt similarity index 96% rename from feature/foryou/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenTest.kt rename to feature/foryou/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenTest.kt index 7431555ba..c3ec5c560 100644 --- a/feature/foryou/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenTest.kt +++ b/feature/foryou/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenTest.kt @@ -17,7 +17,7 @@ package com.google.samples.apps.nowinandroid.feature.foryou import androidx.activity.ComponentActivity -import androidx.compose.foundation.layout.BoxWithConstraints +import androidx.compose.foundation.layout.Box import androidx.compose.ui.test.assertHasClickAction import androidx.compose.ui.test.assertIsEnabled import androidx.compose.ui.test.assertIsNotEnabled @@ -45,14 +45,14 @@ class ForYouScreenTest { private val doneButtonMatcher by lazy { hasText( - composeTestRule.activity.resources.getString(R.string.done), + composeTestRule.activity.resources.getString(R.string.feature_foryou_done), ) } @Test fun circularProgressIndicator_whenScreenIsLoading_exists() { composeTestRule.setContent { - BoxWithConstraints { + Box { ForYouScreen( isSyncing = false, onboardingUiState = OnboardingUiState.Loading, @@ -70,7 +70,7 @@ class ForYouScreenTest { composeTestRule .onNodeWithContentDescription( - composeTestRule.activity.resources.getString(R.string.for_you_loading), + composeTestRule.activity.resources.getString(R.string.feature_foryou_loading), ) .assertExists() } @@ -78,7 +78,7 @@ class ForYouScreenTest { @Test fun circularProgressIndicator_whenScreenIsSyncing_exists() { composeTestRule.setContent { - BoxWithConstraints { + Box { ForYouScreen( isSyncing = true, onboardingUiState = OnboardingUiState.NotShown, @@ -96,7 +96,7 @@ class ForYouScreenTest { composeTestRule .onNodeWithContentDescription( - composeTestRule.activity.resources.getString(R.string.for_you_loading), + composeTestRule.activity.resources.getString(R.string.feature_foryou_loading), ) .assertExists() } @@ -106,7 +106,7 @@ class ForYouScreenTest { val testData = followableTopicTestData.map { it.copy(isFollowed = false) } composeTestRule.setContent { - BoxWithConstraints { + Box { ForYouScreen( isSyncing = false, onboardingUiState = OnboardingUiState.Shown( @@ -149,7 +149,7 @@ class ForYouScreenTest { @Test fun topicSelector_whenSomeTopicsSelected_showsTopicChipsAndEnabledDoneButton() { composeTestRule.setContent { - BoxWithConstraints { + Box { ForYouScreen( isSyncing = false, onboardingUiState = @@ -196,7 +196,7 @@ class ForYouScreenTest { @Test fun feed_whenInterestsSelectedAndLoading_showsLoadingIndicator() { composeTestRule.setContent { - BoxWithConstraints { + Box { ForYouScreen( isSyncing = false, onboardingUiState = @@ -215,7 +215,7 @@ class ForYouScreenTest { composeTestRule .onNodeWithContentDescription( - composeTestRule.activity.resources.getString(R.string.for_you_loading), + composeTestRule.activity.resources.getString(R.string.feature_foryou_loading), ) .assertExists() } @@ -223,7 +223,7 @@ class ForYouScreenTest { @Test fun feed_whenNoInterestsSelectionAndLoading_showsLoadingIndicator() { composeTestRule.setContent { - BoxWithConstraints { + Box { ForYouScreen( isSyncing = false, onboardingUiState = OnboardingUiState.NotShown, @@ -241,7 +241,7 @@ class ForYouScreenTest { composeTestRule .onNodeWithContentDescription( - composeTestRule.activity.resources.getString(R.string.for_you_loading), + composeTestRule.activity.resources.getString(R.string.feature_foryou_loading), ) .assertExists() } diff --git a/feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/navigation/ForYouNavigation.kt b/feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/navigation/ForYouNavigation.kt deleted file mode 100644 index 705495cc2..000000000 --- a/feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/navigation/ForYouNavigation.kt +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright 2022 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.samples.apps.nowinandroid.feature.foryou.navigation - -import androidx.navigation.NavController -import androidx.navigation.NavGraphBuilder -import androidx.navigation.NavOptions -import androidx.navigation.NavType -import androidx.navigation.compose.composable -import androidx.navigation.navArgument -import androidx.navigation.navDeepLink -import com.google.samples.apps.nowinandroid.feature.foryou.ForYouRoute - -const val LINKED_NEWS_RESOURCE_ID = "linkedNewsResourceId" -const val forYouNavigationRoute = "for_you_route/{$LINKED_NEWS_RESOURCE_ID}" -private const val DEEP_LINK_URI_PATTERN = - "https://www.nowinandroid.apps.samples.google.com/foryou/{$LINKED_NEWS_RESOURCE_ID}" - -fun NavController.navigateToForYou(navOptions: NavOptions? = null) { - this.navigate(forYouNavigationRoute, navOptions) -} - -fun NavGraphBuilder.forYouScreen(onTopicClick: (String) -> Unit) { - composable( - route = forYouNavigationRoute, - deepLinks = listOf( - navDeepLink { uriPattern = DEEP_LINK_URI_PATTERN }, - ), - arguments = listOf( - navArgument(LINKED_NEWS_RESOURCE_ID) { type = NavType.StringType }, - ), - ) { - ForYouRoute(onTopicClick) - } -} diff --git a/feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreen.kt b/feature/foryou/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreen.kt similarity index 81% rename from feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreen.kt rename to feature/foryou/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreen.kt index a24a91f1a..1a3325996 100644 --- a/feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreen.kt +++ b/feature/foryou/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreen.kt @@ -28,7 +28,6 @@ import androidx.compose.animation.slideOutVertically import androidx.compose.foundation.gestures.Orientation import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box -import androidx.compose.foundation.layout.BoxWithConstraints import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row @@ -49,13 +48,14 @@ import androidx.compose.foundation.layout.windowInsetsBottomHeight import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.foundation.lazy.LazyListScope import androidx.compose.foundation.lazy.grid.GridCells -import androidx.compose.foundation.lazy.grid.GridCells.Adaptive -import androidx.compose.foundation.lazy.grid.GridItemSpan -import androidx.compose.foundation.lazy.grid.LazyGridScope import androidx.compose.foundation.lazy.grid.LazyHorizontalGrid -import androidx.compose.foundation.lazy.grid.LazyVerticalGrid import androidx.compose.foundation.lazy.grid.items import androidx.compose.foundation.lazy.grid.rememberLazyGridState +import androidx.compose.foundation.lazy.staggeredgrid.LazyStaggeredGridScope +import androidx.compose.foundation.lazy.staggeredgrid.LazyVerticalStaggeredGrid +import androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridCells +import androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridItemSpan +import androidx.compose.foundation.lazy.staggeredgrid.rememberLazyStaggeredGridState import androidx.compose.foundation.shape.CornerSize import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.Icon @@ -80,7 +80,6 @@ import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.max import androidx.compose.ui.unit.sp -import androidx.compose.ui.util.trace import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.google.accompanist.permissions.ExperimentalPermissionsApi @@ -106,7 +105,7 @@ import com.google.samples.apps.nowinandroid.core.ui.launchCustomChromeTab import com.google.samples.apps.nowinandroid.core.ui.newsFeed @Composable -internal fun ForYouRoute( +internal fun ForYouScreen( onTopicClick: (String) -> Unit, modifier: Modifier = Modifier, viewModel: ForYouViewModel = hiltViewModel(), @@ -153,7 +152,7 @@ internal fun ForYouScreen( val itemsAvailable = feedItemsSize(feedState, onboardingUiState) - val state = rememberLazyGridState() + val state = rememberLazyStaggeredGridState() val scrollbarState = state.scrollbarState( itemsAvailable = itemsAvailable, ) @@ -163,11 +162,11 @@ internal fun ForYouScreen( modifier = modifier .fillMaxSize(), ) { - LazyVerticalGrid( - columns = Adaptive(300.dp), + LazyVerticalStaggeredGrid( + columns = StaggeredGridCells.Adaptive(300.dp), contentPadding = PaddingValues(16.dp), horizontalArrangement = Arrangement.spacedBy(16.dp), - verticalArrangement = Arrangement.spacedBy(24.dp), + verticalItemSpacing = 24.dp, modifier = Modifier .testTag("forYou:feed"), state = state, @@ -197,7 +196,7 @@ internal fun ForYouScreen( onTopicClick = onTopicClick, ) - item(span = { GridItemSpan(maxLineSpan) }, contentType = "bottomSpacing") { + item(span = StaggeredGridItemSpan.FullLine, contentType = "bottomSpacing") { Column { Spacer(modifier = Modifier.height(8.dp)) // Add space for the content to clear the "offline" snackbar. @@ -216,7 +215,7 @@ internal fun ForYouScreen( targetOffsetY = { fullHeight -> -fullHeight }, ) + fadeOut(), ) { - val loadingContentDescription = stringResource(id = R.string.for_you_loading) + val loadingContentDescription = stringResource(id = R.string.feature_foryou_loading) Box( modifier = Modifier .fillMaxWidth() @@ -255,7 +254,7 @@ internal fun ForYouScreen( * Depending on the [onboardingUiState], this might emit no items. * */ -private fun LazyGridScope.onboarding( +private fun LazyStaggeredGridScope.onboarding( onboardingUiState: OnboardingUiState, onTopicCheckedChanged: (String, Boolean) -> Unit, saveFollowedTopics: () -> Unit, @@ -268,10 +267,10 @@ private fun LazyGridScope.onboarding( -> Unit is OnboardingUiState.Shown -> { - item(span = { GridItemSpan(maxLineSpan) }, contentType = "onboarding") { + item(span = StaggeredGridItemSpan.FullLine, contentType = "onboarding") { Column(modifier = interestsItemModifier) { Text( - text = stringResource(R.string.onboarding_guidance_title), + text = stringResource(R.string.feature_foryou_onboarding_guidance_title), textAlign = TextAlign.Center, modifier = Modifier .fillMaxWidth() @@ -279,7 +278,7 @@ private fun LazyGridScope.onboarding( style = MaterialTheme.typography.titleMedium, ) Text( - text = stringResource(R.string.onboarding_guidance_subtitle), + text = stringResource(R.string.feature_foryou_onboarding_guidance_subtitle), modifier = Modifier .fillMaxWidth() .padding(top = 8.dp, start = 24.dp, end = 24.dp), @@ -305,7 +304,7 @@ private fun LazyGridScope.onboarding( .fillMaxWidth(), ) { Text( - text = stringResource(R.string.done), + text = stringResource(R.string.feature_foryou_done), ) } } @@ -320,7 +319,7 @@ private fun TopicSelection( onboardingUiState: OnboardingUiState.Shown, onTopicCheckedChanged: (String, Boolean) -> Unit, modifier: Modifier = Modifier, -) = trace("TopicSelection") { +) { val lazyGridState = rememberLazyGridState() val topicSelectionTestTag = "forYou:topicSelection" @@ -381,7 +380,7 @@ private fun SingleTopicButton( imageUrl: String, isSelected: Boolean, onClick: (String, Boolean) -> Unit, -) = trace("SingleTopicButton") { +) { Surface( modifier = Modifier .width(312.dp) @@ -434,9 +433,10 @@ fun TopicIcon( modifier: Modifier = Modifier, ) { DynamicAsyncImage( - placeholder = painterResource(R.drawable.ic_icon_placeholder), + placeholder = painterResource(R.drawable.feature_foryou_ic_icon_placeholder), imageUrl = imageUrl, - contentDescription = null, // decorative + // decorative + contentDescription = null, modifier = modifier .padding(10.dp) .size(32.dp), @@ -506,23 +506,21 @@ fun ForYouScreenPopulatedFeed( @PreviewParameter(UserNewsResourcePreviewParameterProvider::class) userNewsResources: List, ) { - BoxWithConstraints { - NiaTheme { - ForYouScreen( - isSyncing = false, - onboardingUiState = OnboardingUiState.NotShown, - feedState = NewsFeedUiState.Success( - feed = userNewsResources, - ), - deepLinkedUserNewsResource = null, - onTopicCheckedChanged = { _, _ -> }, - saveFollowedTopics = {}, - onNewsResourcesCheckedChanged = { _, _ -> }, - onNewsResourceViewed = {}, - onTopicClick = {}, - onDeepLinkOpened = {}, - ) - } + NiaTheme { + ForYouScreen( + isSyncing = false, + onboardingUiState = OnboardingUiState.NotShown, + feedState = NewsFeedUiState.Success( + feed = userNewsResources, + ), + deepLinkedUserNewsResource = null, + onTopicCheckedChanged = { _, _ -> }, + saveFollowedTopics = {}, + onNewsResourcesCheckedChanged = { _, _ -> }, + onNewsResourceViewed = {}, + onTopicClick = {}, + onDeepLinkOpened = {}, + ) } } @@ -532,23 +530,21 @@ fun ForYouScreenOfflinePopulatedFeed( @PreviewParameter(UserNewsResourcePreviewParameterProvider::class) userNewsResources: List, ) { - BoxWithConstraints { - NiaTheme { - ForYouScreen( - isSyncing = false, - onboardingUiState = OnboardingUiState.NotShown, - feedState = NewsFeedUiState.Success( - feed = userNewsResources, - ), - deepLinkedUserNewsResource = null, - onTopicCheckedChanged = { _, _ -> }, - saveFollowedTopics = {}, - onNewsResourcesCheckedChanged = { _, _ -> }, - onNewsResourceViewed = {}, - onTopicClick = {}, - onDeepLinkOpened = {}, - ) - } + NiaTheme { + ForYouScreen( + isSyncing = false, + onboardingUiState = OnboardingUiState.NotShown, + feedState = NewsFeedUiState.Success( + feed = userNewsResources, + ), + deepLinkedUserNewsResource = null, + onTopicCheckedChanged = { _, _ -> }, + saveFollowedTopics = {}, + onNewsResourcesCheckedChanged = { _, _ -> }, + onNewsResourceViewed = {}, + onTopicClick = {}, + onDeepLinkOpened = {}, + ) } } @@ -558,47 +554,43 @@ fun ForYouScreenTopicSelection( @PreviewParameter(UserNewsResourcePreviewParameterProvider::class) userNewsResources: List, ) { - BoxWithConstraints { - NiaTheme { - ForYouScreen( - isSyncing = false, - onboardingUiState = OnboardingUiState.Shown( - topics = userNewsResources.flatMap { news -> news.followableTopics } - .distinctBy { it.topic.id }, - ), - feedState = NewsFeedUiState.Success( - feed = userNewsResources, - ), - deepLinkedUserNewsResource = null, - onTopicCheckedChanged = { _, _ -> }, - saveFollowedTopics = {}, - onNewsResourcesCheckedChanged = { _, _ -> }, - onNewsResourceViewed = {}, - onTopicClick = {}, - onDeepLinkOpened = {}, - ) - } + NiaTheme { + ForYouScreen( + isSyncing = false, + onboardingUiState = OnboardingUiState.Shown( + topics = userNewsResources.flatMap { news -> news.followableTopics } + .distinctBy { it.topic.id }, + ), + feedState = NewsFeedUiState.Success( + feed = userNewsResources, + ), + deepLinkedUserNewsResource = null, + onTopicCheckedChanged = { _, _ -> }, + saveFollowedTopics = {}, + onNewsResourcesCheckedChanged = { _, _ -> }, + onNewsResourceViewed = {}, + onTopicClick = {}, + onDeepLinkOpened = {}, + ) } } @DevicePreviews @Composable fun ForYouScreenLoading() { - BoxWithConstraints { - NiaTheme { - ForYouScreen( - isSyncing = false, - onboardingUiState = OnboardingUiState.Loading, - feedState = NewsFeedUiState.Loading, - deepLinkedUserNewsResource = null, - onTopicCheckedChanged = { _, _ -> }, - saveFollowedTopics = {}, - onNewsResourcesCheckedChanged = { _, _ -> }, - onNewsResourceViewed = {}, - onTopicClick = {}, - onDeepLinkOpened = {}, - ) - } + NiaTheme { + ForYouScreen( + isSyncing = false, + onboardingUiState = OnboardingUiState.Loading, + feedState = NewsFeedUiState.Loading, + deepLinkedUserNewsResource = null, + onTopicCheckedChanged = { _, _ -> }, + saveFollowedTopics = {}, + onNewsResourcesCheckedChanged = { _, _ -> }, + onNewsResourceViewed = {}, + onTopicClick = {}, + onDeepLinkOpened = {}, + ) } } @@ -608,22 +600,20 @@ fun ForYouScreenPopulatedAndLoading( @PreviewParameter(UserNewsResourcePreviewParameterProvider::class) userNewsResources: List, ) { - BoxWithConstraints { - NiaTheme { - ForYouScreen( - isSyncing = true, - onboardingUiState = OnboardingUiState.Loading, - feedState = NewsFeedUiState.Success( - feed = userNewsResources, - ), - deepLinkedUserNewsResource = null, - onTopicCheckedChanged = { _, _ -> }, - saveFollowedTopics = {}, - onNewsResourcesCheckedChanged = { _, _ -> }, - onNewsResourceViewed = {}, - onTopicClick = {}, - onDeepLinkOpened = {}, - ) - } + NiaTheme { + ForYouScreen( + isSyncing = true, + onboardingUiState = OnboardingUiState.Loading, + feedState = NewsFeedUiState.Success( + feed = userNewsResources, + ), + deepLinkedUserNewsResource = null, + onTopicCheckedChanged = { _, _ -> }, + saveFollowedTopics = {}, + onNewsResourcesCheckedChanged = { _, _ -> }, + onNewsResourceViewed = {}, + onTopicClick = {}, + onDeepLinkOpened = {}, + ) } } diff --git a/feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel.kt b/feature/foryou/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel.kt similarity index 92% rename from feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel.kt rename to feature/foryou/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel.kt index 9427cd74c..4b6cd39c9 100644 --- a/feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel.kt +++ b/feature/foryou/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModel.kt @@ -27,8 +27,8 @@ import com.google.samples.apps.nowinandroid.core.data.repository.UserDataReposit import com.google.samples.apps.nowinandroid.core.data.repository.UserNewsResourceRepository import com.google.samples.apps.nowinandroid.core.data.util.SyncManager import com.google.samples.apps.nowinandroid.core.domain.GetFollowableTopicsUseCase +import com.google.samples.apps.nowinandroid.core.notifications.DEEP_LINK_NEWS_RESOURCE_ID_KEY import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState -import com.google.samples.apps.nowinandroid.feature.foryou.navigation.LINKED_NEWS_RESOURCE_ID import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.SharingStarted @@ -55,7 +55,7 @@ class ForYouViewModel @Inject constructor( userDataRepository.userData.map { !it.shouldHideOnboarding } val deepLinkedNewsResource = savedStateHandle.getStateFlow( - key = LINKED_NEWS_RESOURCE_ID, + key = DEEP_LINK_NEWS_RESOURCE_ID_KEY, null, ) .flatMapLatest { newsResourceId -> @@ -111,13 +111,13 @@ class ForYouViewModel @Inject constructor( fun updateTopicSelection(topicId: String, isChecked: Boolean) { viewModelScope.launch { - userDataRepository.toggleFollowedTopicId(topicId, isChecked) + userDataRepository.setTopicIdFollowed(topicId, isChecked) } } fun updateNewsResourceSaved(newsResourceId: String, isChecked: Boolean) { viewModelScope.launch { - userDataRepository.updateNewsResourceBookmark(newsResourceId, isChecked) + userDataRepository.setNewsResourceBookmarked(newsResourceId, isChecked) } } @@ -129,7 +129,7 @@ class ForYouViewModel @Inject constructor( fun onDeepLinkOpened(newsResourceId: String) { if (newsResourceId == deepLinkedNewsResource.value?.id) { - savedStateHandle[LINKED_NEWS_RESOURCE_ID] = null + savedStateHandle[DEEP_LINK_NEWS_RESOURCE_ID_KEY] = null } analyticsHelper.logNewsDeepLinkOpen(newsResourceId = newsResourceId) viewModelScope.launch { @@ -153,7 +153,7 @@ private fun AnalyticsHelper.logNewsDeepLinkOpen(newsResourceId: String) = type = "news_deep_link_opened", extras = listOf( Param( - key = LINKED_NEWS_RESOURCE_ID, + key = DEEP_LINK_NEWS_RESOURCE_ID_KEY, value = newsResourceId, ), ), diff --git a/feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState.kt b/feature/foryou/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState.kt similarity index 100% rename from feature/foryou/src/main/java/com/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState.kt rename to feature/foryou/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/OnboardingUiState.kt diff --git a/feature/foryou/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/navigation/ForYouNavigation.kt b/feature/foryou/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/navigation/ForYouNavigation.kt new file mode 100644 index 000000000..b77ce72a0 --- /dev/null +++ b/feature/foryou/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/navigation/ForYouNavigation.kt @@ -0,0 +1,65 @@ +/* + * Copyright 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.feature.foryou.navigation + +import androidx.navigation.NavController +import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavOptions +import androidx.navigation.compose.composable +import androidx.navigation.compose.navigation +import androidx.navigation.navDeepLink +import com.google.samples.apps.nowinandroid.core.notifications.DEEP_LINK_URI_PATTERN +import com.google.samples.apps.nowinandroid.feature.foryou.ForYouScreen +import kotlinx.serialization.Serializable + +@Serializable data object ForYouRoute // route to ForYou screen + +@Serializable data object ForYouBaseRoute // route to base navigation graph + +fun NavController.navigateToForYou(navOptions: NavOptions) = navigate(route = ForYouRoute, navOptions) + +/** + * The ForYou section of the app. It can also display information about topics. + * This should be supplied from a separate module. + * + * @param onTopicClick - Called when a topic is clicked, contains the ID of the topic + * @param topicDestination - Destination for topic content + */ +fun NavGraphBuilder.forYouSection( + onTopicClick: (String) -> Unit, + topicDestination: NavGraphBuilder.() -> Unit, +) { + navigation(startDestination = ForYouRoute) { + composable( + deepLinks = listOf( + navDeepLink { + /** + * This destination has a deep link that enables a specific news resource to be + * opened from a notification (@see SystemTrayNotifier for more). The news resource + * ID is sent in the URI rather than being modelled in the route type because it's + * transient data (stored in SavedStateHandle) that is cleared after the user has + * opened the news resource. + */ + uriPattern = DEEP_LINK_URI_PATTERN + }, + ), + ) { + ForYouScreen(onTopicClick) + } + topicDestination() + } +} diff --git a/feature/foryou/src/main/res/drawable/ic_icon_placeholder.xml b/feature/foryou/src/main/res/drawable/feature_foryou_ic_icon_placeholder.xml similarity index 100% rename from feature/foryou/src/main/res/drawable/ic_icon_placeholder.xml rename to feature/foryou/src/main/res/drawable/feature_foryou_ic_icon_placeholder.xml diff --git a/feature/foryou/src/main/res/values/strings.xml b/feature/foryou/src/main/res/values/strings.xml index 5a33bc9c8..166749664 100644 --- a/feature/foryou/src/main/res/values/strings.xml +++ b/feature/foryou/src/main/res/values/strings.xml @@ -15,11 +15,11 @@ limitations under the License. --> - For you - Done - Loading for you… - Navigate up - What are you interested in? - Updates from topics you follow will appear here. Follow some things to get started. + For you + Done + Loading for you… + Navigate up + What are you interested in? + Updates from topics you follow will appear here. Follow some things to get started. diff --git a/feature/foryou/src/test/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenScreenshotTests.kt b/feature/foryou/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenScreenshotTests.kt similarity index 65% rename from feature/foryou/src/test/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenScreenshotTests.kt rename to feature/foryou/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenScreenshotTests.kt index 410619638..14b67c64e 100644 --- a/feature/foryou/src/test/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenScreenshotTests.kt +++ b/feature/foryou/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouScreenScreenshotTests.kt @@ -17,14 +17,19 @@ package com.google.samples.apps.nowinandroid.feature.foryou import androidx.activity.ComponentActivity +import androidx.compose.runtime.Composable import androidx.compose.ui.test.junit4.createAndroidComposeRule +import com.google.samples.apps.nowinandroid.core.designsystem.component.NiaBackground import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme +import com.google.samples.apps.nowinandroid.core.testing.util.DefaultTestDevices +import com.google.samples.apps.nowinandroid.core.testing.util.captureForDevice import com.google.samples.apps.nowinandroid.core.testing.util.captureMultiDevice import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState.Success import com.google.samples.apps.nowinandroid.core.ui.UserNewsResourcePreviewParameterProvider import com.google.samples.apps.nowinandroid.feature.foryou.OnboardingUiState.Loading import com.google.samples.apps.nowinandroid.feature.foryou.OnboardingUiState.NotShown +import com.google.samples.apps.nowinandroid.feature.foryou.OnboardingUiState.Shown import dagger.hilt.android.testing.HiltTestApplication import org.junit.Before import org.junit.Rule @@ -41,7 +46,7 @@ import java.util.TimeZone */ @RunWith(RobolectricTestRunner::class) @GraphicsMode(GraphicsMode.Mode.NATIVE) -@Config(application = HiltTestApplication::class, sdk = [33]) +@Config(application = HiltTestApplication::class) @LooperMode(LooperMode.Mode.PAUSED) class ForYouScreenScreenshotTests { @@ -60,7 +65,7 @@ class ForYouScreenScreenshotTests { } @Test - fun testForYouScreenPopulatedFeed() { + fun forYouScreenPopulatedFeed() { composeTestRule.captureMultiDevice("ForYouScreenPopulatedFeed") { NiaTheme { ForYouScreen( @@ -82,7 +87,7 @@ class ForYouScreenScreenshotTests { } @Test - fun testForYouScreenLoading() { + fun forYouScreenLoading() { composeTestRule.captureMultiDevice("ForYouScreenLoading") { NiaTheme { ForYouScreen( @@ -102,16 +107,54 @@ class ForYouScreenScreenshotTests { } @Test - fun testForYouScreenTopicSelection() { + fun forYouScreenTopicSelection() { composeTestRule.captureMultiDevice("ForYouScreenTopicSelection") { - NiaTheme { + ForYouScreenTopicSelection() + } + } + + @Test + fun forYouScreenTopicSelection_dark() { + composeTestRule.captureForDevice( + deviceName = "phone_dark", + deviceSpec = DefaultTestDevices.PHONE.spec, + screenshotName = "ForYouScreenTopicSelection", + darkMode = true, + ) { + ForYouScreenTopicSelection() + } + } + + @Test + fun forYouScreenPopulatedAndLoading() { + composeTestRule.captureMultiDevice("ForYouScreenPopulatedAndLoading") { + ForYouScreenPopulatedAndLoading() + } + } + + @Test + fun forYouScreenPopulatedAndLoading_dark() { + composeTestRule.captureForDevice( + deviceName = "phone_dark", + deviceSpec = DefaultTestDevices.PHONE.spec, + screenshotName = "ForYouScreenPopulatedAndLoading", + darkMode = true, + ) { + ForYouScreenPopulatedAndLoading() + } + } + + @Composable + private fun ForYouScreenTopicSelection() { + NiaTheme { + NiaBackground { ForYouScreen( isSyncing = false, - onboardingUiState = OnboardingUiState.Shown( + onboardingUiState = Shown( topics = userNewsResources.flatMap { news -> news.followableTopics } .distinctBy { it.topic.id }, ), - feedState = NewsFeedUiState.Success( + feedState = Success( feed = userNewsResources, ), onTopicCheckedChanged = { _, _ -> }, @@ -126,24 +169,26 @@ class ForYouScreenScreenshotTests { } } - @Test - fun testForYouScreenPopulatedAndLoading() { - composeTestRule.captureMultiDevice("ForYouScreenPopulatedAndLoading") { - NiaTheme { - ForYouScreen( - isSyncing = true, - onboardingUiState = OnboardingUiState.Loading, - feedState = NewsFeedUiState.Success( - feed = userNewsResources, - ), - onTopicCheckedChanged = { _, _ -> }, - saveFollowedTopics = {}, - onNewsResourcesCheckedChanged = { _, _ -> }, - onNewsResourceViewed = {}, - onTopicClick = {}, - deepLinkedUserNewsResource = null, - onDeepLinkOpened = {}, - ) + @Composable + private fun ForYouScreenPopulatedAndLoading() { + NiaTheme { + NiaBackground { + NiaTheme { + ForYouScreen( + isSyncing = true, + onboardingUiState = Loading, + feedState = Success( + feed = userNewsResources, + ), + onTopicCheckedChanged = { _, _ -> }, + saveFollowedTopics = {}, + onNewsResourcesCheckedChanged = { _, _ -> }, + onNewsResourceViewed = {}, + onTopicClick = {}, + deepLinkedUserNewsResource = null, + onDeepLinkOpened = {}, + ) + } } } } diff --git a/feature/foryou/src/test/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt b/feature/foryou/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt similarity index 87% rename from feature/foryou/src/test/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt rename to feature/foryou/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt index b75573975..812544c0c 100644 --- a/feature/foryou/src/test/java/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt +++ b/feature/foryou/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/foryou/ForYouViewModelTest.kt @@ -26,6 +26,7 @@ import com.google.samples.apps.nowinandroid.core.model.data.NewsResource import com.google.samples.apps.nowinandroid.core.model.data.Topic import com.google.samples.apps.nowinandroid.core.model.data.UserNewsResource import com.google.samples.apps.nowinandroid.core.model.data.mapToUserNewsResources +import com.google.samples.apps.nowinandroid.core.notifications.DEEP_LINK_NEWS_RESOURCE_ID_KEY import com.google.samples.apps.nowinandroid.core.testing.repository.TestNewsRepository import com.google.samples.apps.nowinandroid.core.testing.repository.TestTopicsRepository import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserDataRepository @@ -34,8 +35,8 @@ import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule import com.google.samples.apps.nowinandroid.core.testing.util.TestAnalyticsHelper import com.google.samples.apps.nowinandroid.core.testing.util.TestSyncManager import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState -import com.google.samples.apps.nowinandroid.feature.foryou.navigation.LINKED_NEWS_RESOURCE_ID import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch import kotlinx.coroutines.test.UnconfinedTestDispatcher import kotlinx.coroutines.test.advanceUntilIdle @@ -70,6 +71,7 @@ class ForYouViewModelTest { topicsRepository = topicsRepository, userDataRepository = userDataRepository, ) + private val savedStateHandle = SavedStateHandle() private lateinit var viewModel: ForYouViewModel @@ -96,9 +98,8 @@ class ForYouViewModelTest { @Test fun stateIsLoadingWhenFollowedTopicsAreLoading() = runTest { - val collectJob1 = - launch(UnconfinedTestDispatcher()) { viewModel.onboardingUiState.collect() } - val collectJob2 = launch(UnconfinedTestDispatcher()) { viewModel.feedState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.onboardingUiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.feedState.collect() } topicsRepository.sendTopics(sampleTopics) @@ -107,31 +108,24 @@ class ForYouViewModelTest { viewModel.onboardingUiState.value, ) assertEquals(NewsFeedUiState.Loading, viewModel.feedState.value) - - collectJob1.cancel() - collectJob2.cancel() } @Test fun stateIsLoadingWhenAppIsSyncingWithNoInterests() = runTest { syncManager.setSyncing(true) - val collectJob = - launch(UnconfinedTestDispatcher()) { viewModel.isSyncing.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.isSyncing.collect() } assertEquals( true, viewModel.isSyncing.value, ) - - collectJob.cancel() } @Test fun onboardingStateIsLoadingWhenTopicsAreLoading() = runTest { - val collectJob1 = - launch(UnconfinedTestDispatcher()) { viewModel.onboardingUiState.collect() } - val collectJob2 = launch(UnconfinedTestDispatcher()) { viewModel.feedState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.onboardingUiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.feedState.collect() } userDataRepository.setFollowedTopicIds(emptySet()) @@ -140,16 +134,12 @@ class ForYouViewModelTest { viewModel.onboardingUiState.value, ) assertEquals(NewsFeedUiState.Success(emptyList()), viewModel.feedState.value) - - collectJob1.cancel() - collectJob2.cancel() } @Test fun onboardingIsShownWhenNewsResourcesAreLoading() = runTest { - val collectJob1 = - launch(UnconfinedTestDispatcher()) { viewModel.onboardingUiState.collect() } - val collectJob2 = launch(UnconfinedTestDispatcher()) { viewModel.feedState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.onboardingUiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.feedState.collect() } topicsRepository.sendTopics(sampleTopics) userDataRepository.setFollowedTopicIds(emptySet()) @@ -200,16 +190,12 @@ class ForYouViewModelTest { ), viewModel.feedState.value, ) - - collectJob1.cancel() - collectJob2.cancel() } @Test fun onboardingIsShownAfterLoadingEmptyFollowedTopics() = runTest { - val collectJob1 = - launch(UnconfinedTestDispatcher()) { viewModel.onboardingUiState.collect() } - val collectJob2 = launch(UnconfinedTestDispatcher()) { viewModel.feedState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.onboardingUiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.feedState.collect() } topicsRepository.sendTopics(sampleTopics) userDataRepository.setFollowedTopicIds(emptySet()) @@ -261,16 +247,12 @@ class ForYouViewModelTest { ), viewModel.feedState.value, ) - - collectJob1.cancel() - collectJob2.cancel() } @Test fun onboardingIsNotShownAfterUserDismissesOnboarding() = runTest { - val collectJob1 = - launch(UnconfinedTestDispatcher()) { viewModel.onboardingUiState.collect() } - val collectJob2 = launch(UnconfinedTestDispatcher()) { viewModel.feedState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.onboardingUiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.feedState.collect() } topicsRepository.sendTopics(sampleTopics) @@ -297,16 +279,12 @@ class ForYouViewModelTest { ), viewModel.feedState.value, ) - - collectJob1.cancel() - collectJob2.cancel() } @Test fun topicSelectionUpdatesAfterSelectingTopic() = runTest { - val collectJob1 = - launch(UnconfinedTestDispatcher()) { viewModel.onboardingUiState.collect() } - val collectJob2 = launch(UnconfinedTestDispatcher()) { viewModel.feedState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.onboardingUiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.feedState.collect() } topicsRepository.sendTopics(sampleTopics) userDataRepository.setFollowedTopicIds(emptySet()) @@ -350,16 +328,12 @@ class ForYouViewModelTest { ), viewModel.feedState.value, ) - - collectJob1.cancel() - collectJob2.cancel() } @Test fun topicSelectionUpdatesAfterUnselectingTopic() = runTest { - val collectJob1 = - launch(UnconfinedTestDispatcher()) { viewModel.onboardingUiState.collect() } - val collectJob2 = launch(UnconfinedTestDispatcher()) { viewModel.feedState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.onboardingUiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.feedState.collect() } topicsRepository.sendTopics(sampleTopics) userDataRepository.setFollowedTopicIds(emptySet()) @@ -414,16 +388,12 @@ class ForYouViewModelTest { ), viewModel.feedState.value, ) - - collectJob1.cancel() - collectJob2.cancel() } @Test fun newsResourceSelectionUpdatesAfterLoadingFollowedTopics() = runTest { - val collectJob1 = - launch(UnconfinedTestDispatcher()) { viewModel.onboardingUiState.collect() } - val collectJob2 = launch(UnconfinedTestDispatcher()) { viewModel.feedState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.onboardingUiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.feedState.collect() } val followedTopicIds = setOf("1") val userData = emptyUserData.copy( @@ -458,19 +428,15 @@ class ForYouViewModelTest { ), viewModel.feedState.value, ) - - collectJob1.cancel() - collectJob2.cancel() } @Test fun deepLinkedNewsResourceIsFetchedAndResetAfterViewing() = runTest { - val collectJob = - launch(UnconfinedTestDispatcher()) { viewModel.deepLinkedNewsResource.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.deepLinkedNewsResource.collect() } newsRepository.sendNewsResources(sampleNewsResources) userDataRepository.setUserData(emptyUserData) - savedStateHandle[LINKED_NEWS_RESOURCE_ID] = sampleNewsResources.first().id + savedStateHandle[DEEP_LINK_NEWS_RESOURCE_ID_KEY] = sampleNewsResources.first().id assertEquals( expected = UserNewsResource( @@ -494,15 +460,31 @@ class ForYouViewModelTest { type = "news_deep_link_opened", extras = listOf( Param( - key = LINKED_NEWS_RESOURCE_ID, + key = DEEP_LINK_NEWS_RESOURCE_ID_KEY, value = sampleNewsResources.first().id, ), ), ), ), ) + } + + @Test + fun whenUpdateNewsResourceSavedIsCalled_bookmarkStateIsUpdated() = runTest { + val newsResourceId = "123" + viewModel.updateNewsResourceSaved(newsResourceId, true) - collectJob.cancel() + assertEquals( + expected = setOf(newsResourceId), + actual = userDataRepository.userData.first().bookmarkedNewsResources, + ) + + viewModel.updateNewsResourceSaved(newsResourceId, false) + + assertEquals( + expected = emptySet(), + actual = userDataRepository.userData.first().bookmarkedNewsResources, + ) } } diff --git a/feature/foryou/src/test/screenshots/ForYouScreenPopulatedAndLoading_foldable.png b/feature/foryou/src/test/screenshots/ForYouScreenPopulatedAndLoading_foldable.png index aa2c12203..1972b1ca2 100644 Binary files a/feature/foryou/src/test/screenshots/ForYouScreenPopulatedAndLoading_foldable.png and b/feature/foryou/src/test/screenshots/ForYouScreenPopulatedAndLoading_foldable.png differ diff --git a/feature/foryou/src/test/screenshots/ForYouScreenPopulatedAndLoading_phone.png b/feature/foryou/src/test/screenshots/ForYouScreenPopulatedAndLoading_phone.png index de141fa02..16df589f9 100644 Binary files a/feature/foryou/src/test/screenshots/ForYouScreenPopulatedAndLoading_phone.png and b/feature/foryou/src/test/screenshots/ForYouScreenPopulatedAndLoading_phone.png differ diff --git a/feature/foryou/src/test/screenshots/ForYouScreenPopulatedAndLoading_phone_dark.png b/feature/foryou/src/test/screenshots/ForYouScreenPopulatedAndLoading_phone_dark.png new file mode 100644 index 000000000..d28704e49 Binary files /dev/null and b/feature/foryou/src/test/screenshots/ForYouScreenPopulatedAndLoading_phone_dark.png differ diff --git a/feature/foryou/src/test/screenshots/ForYouScreenPopulatedAndLoading_tablet.png b/feature/foryou/src/test/screenshots/ForYouScreenPopulatedAndLoading_tablet.png index 3fe5194d8..c2a01f2d8 100644 Binary files a/feature/foryou/src/test/screenshots/ForYouScreenPopulatedAndLoading_tablet.png and b/feature/foryou/src/test/screenshots/ForYouScreenPopulatedAndLoading_tablet.png differ diff --git a/feature/foryou/src/test/screenshots/ForYouScreenPopulatedFeed_foldable.png b/feature/foryou/src/test/screenshots/ForYouScreenPopulatedFeed_foldable.png index 54ae3be02..0b539aeca 100644 Binary files a/feature/foryou/src/test/screenshots/ForYouScreenPopulatedFeed_foldable.png and b/feature/foryou/src/test/screenshots/ForYouScreenPopulatedFeed_foldable.png differ diff --git a/feature/foryou/src/test/screenshots/ForYouScreenPopulatedFeed_phone.png b/feature/foryou/src/test/screenshots/ForYouScreenPopulatedFeed_phone.png index 0c36a8913..b19c8d708 100644 Binary files a/feature/foryou/src/test/screenshots/ForYouScreenPopulatedFeed_phone.png and b/feature/foryou/src/test/screenshots/ForYouScreenPopulatedFeed_phone.png differ diff --git a/feature/foryou/src/test/screenshots/ForYouScreenPopulatedFeed_tablet.png b/feature/foryou/src/test/screenshots/ForYouScreenPopulatedFeed_tablet.png index 021958401..bdf44b2a3 100644 Binary files a/feature/foryou/src/test/screenshots/ForYouScreenPopulatedFeed_tablet.png and b/feature/foryou/src/test/screenshots/ForYouScreenPopulatedFeed_tablet.png differ diff --git a/feature/foryou/src/test/screenshots/ForYouScreenTopicSelection_foldable.png b/feature/foryou/src/test/screenshots/ForYouScreenTopicSelection_foldable.png index 95333c1d1..b095c1a7a 100644 Binary files a/feature/foryou/src/test/screenshots/ForYouScreenTopicSelection_foldable.png and b/feature/foryou/src/test/screenshots/ForYouScreenTopicSelection_foldable.png differ diff --git a/feature/foryou/src/test/screenshots/ForYouScreenTopicSelection_phone.png b/feature/foryou/src/test/screenshots/ForYouScreenTopicSelection_phone.png index ab86a2301..140fa8d6d 100644 Binary files a/feature/foryou/src/test/screenshots/ForYouScreenTopicSelection_phone.png and b/feature/foryou/src/test/screenshots/ForYouScreenTopicSelection_phone.png differ diff --git a/feature/foryou/src/test/screenshots/ForYouScreenTopicSelection_phone_dark.png b/feature/foryou/src/test/screenshots/ForYouScreenTopicSelection_phone_dark.png new file mode 100644 index 000000000..5d90732a0 Binary files /dev/null and b/feature/foryou/src/test/screenshots/ForYouScreenTopicSelection_phone_dark.png differ diff --git a/feature/foryou/src/test/screenshots/ForYouScreenTopicSelection_tablet.png b/feature/foryou/src/test/screenshots/ForYouScreenTopicSelection_tablet.png index 292fc22f6..3dd62e765 100644 Binary files a/feature/foryou/src/test/screenshots/ForYouScreenTopicSelection_tablet.png and b/feature/foryou/src/test/screenshots/ForYouScreenTopicSelection_tablet.png differ diff --git a/feature/interests/README.md b/feature/interests/README.md index b7601ecbc..90a4fbc9c 100644 --- a/feature/interests/README.md +++ b/feature/interests/README.md @@ -1,3 +1,3 @@ # :feature:interests module - -![Dependency graph](../../docs/images/graphs/dep_graph_feature_interests.png) +## Dependency graph +![Dependency graph](../../docs/images/graphs/dep_graph_feature_interests.svg) diff --git a/feature/interests/build.gradle.kts b/feature/interests/build.gradle.kts index 5c4b0360a..2b84b135f 100644 --- a/feature/interests/build.gradle.kts +++ b/feature/interests/build.gradle.kts @@ -15,10 +15,21 @@ */ plugins { - id("nowinandroid.android.feature") - id("nowinandroid.android.library.compose") - id("nowinandroid.android.library.jacoco") + alias(libs.plugins.nowinandroid.android.feature) + alias(libs.plugins.nowinandroid.android.library.compose) + alias(libs.plugins.nowinandroid.android.library.jacoco) } android { namespace = "com.google.samples.apps.nowinandroid.feature.interests" } + +dependencies { + implementation(projects.core.data) + implementation(projects.core.domain) + + testImplementation(projects.core.testing) + testImplementation(libs.robolectric) + + androidTestImplementation(libs.bundles.androidx.compose.ui.test) + androidTestImplementation(projects.core.testing) +} diff --git a/feature/interests/src/androidTest/java/com/google/samples/apps/nowinandroid/interests/InterestsScreenTest.kt b/feature/interests/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/interests/InterestsScreenTest.kt similarity index 84% rename from feature/interests/src/androidTest/java/com/google/samples/apps/nowinandroid/interests/InterestsScreenTest.kt rename to feature/interests/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/interests/InterestsScreenTest.kt index 492e91fa3..a441f5a9d 100644 --- a/feature/interests/src/androidTest/java/com/google/samples/apps/nowinandroid/interests/InterestsScreenTest.kt +++ b/feature/interests/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/interests/InterestsScreenTest.kt @@ -27,10 +27,11 @@ import androidx.compose.ui.test.onNodeWithText import com.google.samples.apps.nowinandroid.core.testing.data.followableTopicTestData import com.google.samples.apps.nowinandroid.feature.interests.InterestsScreen import com.google.samples.apps.nowinandroid.feature.interests.InterestsUiState -import com.google.samples.apps.nowinandroid.feature.interests.R import org.junit.Before import org.junit.Rule import org.junit.Test +import com.google.samples.apps.nowinandroid.core.ui.R as CoreUiR +import com.google.samples.apps.nowinandroid.feature.interests.R as InterestsR /** * UI test for checking the correct behaviour of the Interests screen; @@ -50,12 +51,12 @@ class InterestsScreenTest { @Before fun setup() { composeTestRule.activity.apply { - interestsLoading = getString(R.string.loading) - interestsEmptyHeader = getString(R.string.empty_header) + interestsLoading = getString(InterestsR.string.feature_interests_loading) + interestsEmptyHeader = getString(InterestsR.string.feature_interests_empty_header) interestsTopicCardFollowButton = - getString(R.string.card_follow_button_content_desc) + getString(CoreUiR.string.core_ui_interests_card_follow_button_content_desc) interestsTopicCardUnfollowButton = - getString(R.string.card_unfollow_button_content_desc) + getString(CoreUiR.string.core_ui_interests_card_unfollow_button_content_desc) } } @@ -74,7 +75,10 @@ class InterestsScreenTest { fun interestsWithTopics_whenTopicsFollowed_showFollowedAndUnfollowedTopicsWithInfo() { composeTestRule.setContent { InterestsScreen( - uiState = InterestsUiState.Interests(topics = followableTopicTestData), + uiState = InterestsUiState.Interests( + topics = followableTopicTestData, + selectedTopicId = null, + ), ) } diff --git a/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/InterestsScreen.kt b/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/InterestsScreen.kt similarity index 86% rename from feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/InterestsScreen.kt rename to feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/InterestsScreen.kt index e618c1c9f..468550878 100644 --- a/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/InterestsScreen.kt +++ b/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/InterestsScreen.kt @@ -35,9 +35,10 @@ import com.google.samples.apps.nowinandroid.core.ui.FollowableTopicPreviewParame import com.google.samples.apps.nowinandroid.core.ui.TrackScreenViewEvent @Composable -internal fun InterestsRoute( +fun InterestsRoute( onTopicClick: (String) -> Unit, modifier: Modifier = Modifier, + highlightSelectedTopic: Boolean = false, viewModel: InterestsViewModel = hiltViewModel(), ) { val uiState by viewModel.uiState.collectAsStateWithLifecycle() @@ -45,7 +46,11 @@ internal fun InterestsRoute( InterestsScreen( uiState = uiState, followTopic = viewModel::followTopic, - onTopicClick = onTopicClick, + onTopicClick = { + viewModel.onTopicClick(it) + onTopicClick(it) + }, + highlightSelectedTopic = highlightSelectedTopic, modifier = modifier, ) } @@ -56,6 +61,7 @@ internal fun InterestsScreen( followTopic: (String, Boolean) -> Unit, onTopicClick: (String) -> Unit, modifier: Modifier = Modifier, + highlightSelectedTopic: Boolean = false, ) { Column( modifier = modifier, @@ -65,15 +71,19 @@ internal fun InterestsScreen( InterestsUiState.Loading -> NiaLoadingWheel( modifier = modifier, - contentDesc = stringResource(id = R.string.loading), + contentDesc = stringResource(id = R.string.feature_interests_loading), ) + is InterestsUiState.Interests -> TopicsTabContent( topics = uiState.topics, onTopicClick = onTopicClick, onFollowButtonClick = followTopic, + selectedTopicId = uiState.selectedTopicId, + highlightSelectedTopic = highlightSelectedTopic, modifier = modifier, ) + is InterestsUiState.Empty -> InterestsEmptyScreen() } } @@ -82,7 +92,7 @@ internal fun InterestsScreen( @Composable private fun InterestsEmptyScreen() { - Text(text = stringResource(id = R.string.empty_header)) + Text(text = stringResource(id = R.string.feature_interests_empty_header)) } @DevicePreviews @@ -95,6 +105,7 @@ fun InterestsScreenPopulated( NiaBackground { InterestsScreen( uiState = InterestsUiState.Interests( + selectedTopicId = null, topics = followableTopics, ), followTopic = { _, _ -> }, diff --git a/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel.kt b/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel.kt similarity index 60% rename from feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel.kt rename to feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel.kt index c3d5ab6e8..67cc8884f 100644 --- a/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel.kt +++ b/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/InterestsViewModel.kt @@ -16,46 +16,65 @@ package com.google.samples.apps.nowinandroid.feature.interests +import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import androidx.navigation.toRoute import com.google.samples.apps.nowinandroid.core.data.repository.UserDataRepository import com.google.samples.apps.nowinandroid.core.domain.GetFollowableTopicsUseCase import com.google.samples.apps.nowinandroid.core.domain.TopicSortField import com.google.samples.apps.nowinandroid.core.model.data.FollowableTopic +import com.google.samples.apps.nowinandroid.feature.interests.navigation.InterestsRoute import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow -import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch import javax.inject.Inject @HiltViewModel class InterestsViewModel @Inject constructor( + private val savedStateHandle: SavedStateHandle, val userDataRepository: UserDataRepository, getFollowableTopics: GetFollowableTopicsUseCase, ) : ViewModel() { - val uiState: StateFlow = - getFollowableTopics(sortBy = TopicSortField.NAME).map( - InterestsUiState::Interests, - ).stateIn( - scope = viewModelScope, - started = SharingStarted.WhileSubscribed(5_000), - initialValue = InterestsUiState.Loading, - ) + // Key used to save and retrieve the currently selected topic id from saved state. + private val selectedTopicIdKey = "selectedTopicIdKey" + + private val interestsRoute: InterestsRoute = savedStateHandle.toRoute() + private val selectedTopicId = savedStateHandle.getStateFlow( + key = selectedTopicIdKey, + initialValue = interestsRoute.initialTopicId, + ) + + val uiState: StateFlow = combine( + selectedTopicId, + getFollowableTopics(sortBy = TopicSortField.NAME), + InterestsUiState::Interests, + ).stateIn( + scope = viewModelScope, + started = SharingStarted.WhileSubscribed(5_000), + initialValue = InterestsUiState.Loading, + ) fun followTopic(followedTopicId: String, followed: Boolean) { viewModelScope.launch { - userDataRepository.toggleFollowedTopicId(followedTopicId, followed) + userDataRepository.setTopicIdFollowed(followedTopicId, followed) } } + + fun onTopicClick(topicId: String?) { + savedStateHandle[selectedTopicIdKey] = topicId + } } sealed interface InterestsUiState { data object Loading : InterestsUiState data class Interests( + val selectedTopicId: String?, val topics: List, ) : InterestsUiState diff --git a/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/TabContent.kt b/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/TabContent.kt similarity index 93% rename from feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/TabContent.kt rename to feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/TabContent.kt index d865f5e1a..83058c12e 100644 --- a/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/TabContent.kt +++ b/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/TabContent.kt @@ -39,6 +39,7 @@ import com.google.samples.apps.nowinandroid.core.designsystem.component.scrollba import com.google.samples.apps.nowinandroid.core.designsystem.component.scrollbar.rememberDraggableScroller import com.google.samples.apps.nowinandroid.core.designsystem.component.scrollbar.scrollbarState import com.google.samples.apps.nowinandroid.core.model.data.FollowableTopic +import com.google.samples.apps.nowinandroid.core.ui.InterestsItem @Composable fun TopicsTabContent( @@ -47,6 +48,8 @@ fun TopicsTabContent( onFollowButtonClick: (String, Boolean) -> Unit, modifier: Modifier = Modifier, withBottomSpacer: Boolean = true, + selectedTopicId: String? = null, + highlightSelectedTopic: Boolean = false, ) { Box( modifier = modifier @@ -63,6 +66,7 @@ fun TopicsTabContent( topics.forEach { followableTopic -> val topicId = followableTopic.topic.id item(key = topicId) { + val isSelected = highlightSelectedTopic && topicId == selectedTopicId InterestsItem( name = followableTopic.topic.name, following = followableTopic.isFollowed, @@ -70,6 +74,7 @@ fun TopicsTabContent( topicImageUrl = followableTopic.topic.imageUrl, onClick = { onTopicClick(topicId) }, onFollowButtonClick = { onFollowButtonClick(topicId, it) }, + isSelected = isSelected, ) } } diff --git a/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/navigation/InterestsNavigation.kt b/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/navigation/InterestsNavigation.kt new file mode 100644 index 000000000..d83e4a9b2 --- /dev/null +++ b/feature/interests/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/interests/navigation/InterestsNavigation.kt @@ -0,0 +1,33 @@ +/* + * Copyright 2022 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.feature.interests.navigation + +import androidx.navigation.NavController +import androidx.navigation.NavOptions +import kotlinx.serialization.Serializable + +@Serializable data class InterestsRoute( + // The ID of the topic which will be initially selected at this destination + val initialTopicId: String? = null, +) + +fun NavController.navigateToInterests( + initialTopicId: String? = null, + navOptions: NavOptions? = null, +) { + navigate(route = InterestsRoute(initialTopicId), navOptions) +} diff --git a/feature/interests/src/main/res/values/strings.xml b/feature/interests/src/main/res/values/strings.xml index 384cb1deb..8d5322859 100644 --- a/feature/interests/src/main/res/values/strings.xml +++ b/feature/interests/src/main/res/values/strings.xml @@ -15,9 +15,7 @@ limitations under the License. --> - Interests - Loading data - "No available data" - Follow interest - Unfollow interest + Interests + Loading data + "No available data" diff --git a/feature/interests/src/test/java/com/google/samples/apps/nowinandroid/interests/InterestsViewModelTest.kt b/feature/interests/src/test/kotlin/com/google/samples/apps/nowinandroid/interests/InterestsViewModelTest.kt similarity index 82% rename from feature/interests/src/test/java/com/google/samples/apps/nowinandroid/interests/InterestsViewModelTest.kt rename to feature/interests/src/test/kotlin/com/google/samples/apps/nowinandroid/interests/InterestsViewModelTest.kt index c46cb7780..cdf21f325 100644 --- a/feature/interests/src/test/java/com/google/samples/apps/nowinandroid/interests/InterestsViewModelTest.kt +++ b/feature/interests/src/test/kotlin/com/google/samples/apps/nowinandroid/interests/InterestsViewModelTest.kt @@ -16,6 +16,8 @@ package com.google.samples.apps.nowinandroid.interests +import androidx.lifecycle.SavedStateHandle +import androidx.navigation.testing.invoke import com.google.samples.apps.nowinandroid.core.domain.GetFollowableTopicsUseCase import com.google.samples.apps.nowinandroid.core.model.data.FollowableTopic import com.google.samples.apps.nowinandroid.core.model.data.Topic @@ -24,6 +26,7 @@ import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserData import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule import com.google.samples.apps.nowinandroid.feature.interests.InterestsUiState import com.google.samples.apps.nowinandroid.feature.interests.InterestsViewModel +import com.google.samples.apps.nowinandroid.feature.interests.navigation.InterestsRoute import kotlinx.coroutines.flow.collect import kotlinx.coroutines.launch import kotlinx.coroutines.test.UnconfinedTestDispatcher @@ -31,12 +34,21 @@ import kotlinx.coroutines.test.runTest import org.junit.Before import org.junit.Rule import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner import kotlin.test.assertEquals /** * To learn more about how this test handles Flows created with stateIn, see * https://developer.android.com/kotlin/flow/test#statein + * + * These tests use Robolectric because the subject under test (the ViewModel) uses + * `SavedStateHandle.toRoute` which has a dependency on `android.os.Bundle`. + * + * TODO: Remove Robolectric if/when AndroidX Navigation API is updated to remove Android dependency. + * See https://issuetracker.google.com/340966212. */ +@RunWith(RobolectricTestRunner::class) class InterestsViewModelTest { @get:Rule @@ -53,6 +65,9 @@ class InterestsViewModelTest { @Before fun setup() { viewModel = InterestsViewModel( + savedStateHandle = SavedStateHandle( + route = InterestsRoute(initialTopicId = testInputTopics[0].topic.id), + ), userDataRepository = userDataRepository, getFollowableTopics = getFollowableTopicsUseCase, ) @@ -65,17 +80,15 @@ class InterestsViewModelTest { @Test fun uiState_whenFollowedTopicsAreLoading_thenShowLoading() = runTest { - val collectJob = launch(UnconfinedTestDispatcher()) { viewModel.uiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.uiState.collect() } userDataRepository.setFollowedTopicIds(emptySet()) assertEquals(InterestsUiState.Loading, viewModel.uiState.value) - - collectJob.cancel() } @Test fun uiState_whenFollowingNewTopic_thenShowUpdatedTopics() = runTest { - val collectJob = launch(UnconfinedTestDispatcher()) { viewModel.uiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.uiState.collect() } val toggleTopicId = testOutputTopics[1].topic.id topicsRepository.sendTopics(testInputTopics.map { it.topic }) @@ -93,16 +106,17 @@ class InterestsViewModelTest { ) assertEquals( - InterestsUiState.Interests(topics = testOutputTopics), + InterestsUiState.Interests( + topics = testOutputTopics, + selectedTopicId = testInputTopics[0].topic.id, + ), viewModel.uiState.value, ) - - collectJob.cancel() } @Test fun uiState_whenUnfollowingTopics_thenShowUpdatedTopics() = runTest { - val collectJob = launch(UnconfinedTestDispatcher()) { viewModel.uiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.uiState.collect() } val toggleTopicId = testOutputTopics[1].topic.id @@ -123,11 +137,12 @@ class InterestsViewModelTest { ) assertEquals( - InterestsUiState.Interests(topics = testInputTopics), + InterestsUiState.Interests( + topics = testInputTopics, + selectedTopicId = testInputTopics[0].topic.id, + ), viewModel.uiState.value, ) - - collectJob.cancel() } } diff --git a/feature/search/README.md b/feature/search/README.md new file mode 100644 index 000000000..e205970f0 --- /dev/null +++ b/feature/search/README.md @@ -0,0 +1,3 @@ +# :feature:search module +## Dependency graph +![Dependency graph](../../docs/images/graphs/dep_graph_feature_search.svg) diff --git a/feature/search/build.gradle.kts b/feature/search/build.gradle.kts index cbaa767bc..5bb659c35 100644 --- a/feature/search/build.gradle.kts +++ b/feature/search/build.gradle.kts @@ -15,9 +15,9 @@ */ plugins { - id("nowinandroid.android.feature") - id("nowinandroid.android.library.compose") - id("nowinandroid.android.library.jacoco") + alias(libs.plugins.nowinandroid.android.feature) + alias(libs.plugins.nowinandroid.android.library.compose) + alias(libs.plugins.nowinandroid.android.library.jacoco) } android { @@ -25,9 +25,12 @@ android { } dependencies { - implementation(project(":feature:bookmarks")) - implementation(project(":feature:foryou")) - implementation(project(":feature:interests")) - implementation(libs.kotlinx.datetime) + implementation(projects.core.data) + implementation(projects.core.domain) + + testImplementation(projects.core.testing) + + androidTestImplementation(libs.bundles.androidx.compose.ui.test) + androidTestImplementation(projects.core.testing) } diff --git a/feature/search/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/search/SearchScreenTest.kt b/feature/search/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreenTest.kt similarity index 90% rename from feature/search/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/search/SearchScreenTest.kt rename to feature/search/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreenTest.kt index d6c07221e..a9e2fa98f 100644 --- a/feature/search/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/search/SearchScreenTest.kt +++ b/feature/search/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreenTest.kt @@ -35,10 +35,10 @@ import com.google.samples.apps.nowinandroid.core.model.data.UserData import com.google.samples.apps.nowinandroid.core.model.data.UserNewsResource import com.google.samples.apps.nowinandroid.core.testing.data.followableTopicTestData import com.google.samples.apps.nowinandroid.core.testing.data.newsResourcesTestData +import com.google.samples.apps.nowinandroid.core.ui.R.string import org.junit.Before import org.junit.Rule import org.junit.Test -import com.google.samples.apps.nowinandroid.feature.interests.R as interestsR /** * UI test for checking the correct behaviour of the Search screen. @@ -70,17 +70,17 @@ class SearchScreenTest { @Before fun setup() { composeTestRule.activity.apply { - clearSearchContentDesc = getString(R.string.clear_search_text_content_desc) - clearRecentSearchesContentDesc = getString(R.string.clear_recent_searches_content_desc) + clearSearchContentDesc = getString(R.string.feature_search_clear_search_text_content_desc) + clearRecentSearchesContentDesc = getString(R.string.feature_search_clear_recent_searches_content_desc) followButtonContentDesc = - getString(interestsR.string.card_follow_button_content_desc) + getString(string.core_ui_interests_card_follow_button_content_desc) unfollowButtonContentDesc = - getString(interestsR.string.card_unfollow_button_content_desc) - topicsString = getString(R.string.topics) - updatesString = getString(R.string.updates) - tryAnotherSearchString = getString(R.string.try_another_search) + - " " + getString(R.string.interests) + " " + getString(R.string.to_browse_topics) - searchNotReadyString = getString(R.string.search_not_ready) + getString(string.core_ui_interests_card_unfollow_button_content_desc) + topicsString = getString(R.string.feature_search_topics) + updatesString = getString(R.string.feature_search_updates) + tryAnotherSearchString = getString(R.string.feature_search_try_another_search) + + " " + getString(R.string.feature_search_interests) + " " + getString(R.string.feature_search_to_browse_topics) + searchNotReadyString = getString(R.string.feature_search_not_ready) } } diff --git a/feature/search/src/main/java/com/google/samples/apps/nowinandroid/feature/search/RecentSearchQueriesUiState.kt b/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/RecentSearchQueriesUiState.kt similarity index 100% rename from feature/search/src/main/java/com/google/samples/apps/nowinandroid/feature/search/RecentSearchQueriesUiState.kt rename to feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/RecentSearchQueriesUiState.kt diff --git a/feature/search/src/main/java/com/google/samples/apps/nowinandroid/feature/search/SearchResultUiState.kt b/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchResultUiState.kt similarity index 100% rename from feature/search/src/main/java/com/google/samples/apps/nowinandroid/feature/search/SearchResultUiState.kt rename to feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchResultUiState.kt diff --git a/feature/search/src/main/java/com/google/samples/apps/nowinandroid/feature/search/SearchScreen.kt b/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreen.kt similarity index 86% rename from feature/search/src/main/java/com/google/samples/apps/nowinandroid/feature/search/SearchScreen.kt rename to feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreen.kt index 944d17630..b617f98a9 100644 --- a/feature/search/src/main/java/com/google/samples/apps/nowinandroid/feature/search/SearchScreen.kt +++ b/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchScreen.kt @@ -35,13 +35,12 @@ import androidx.compose.foundation.layout.windowInsetsBottomHeight import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.foundation.layout.windowInsetsTopHeight import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.foundation.lazy.grid.GridCells.Adaptive -import androidx.compose.foundation.lazy.grid.GridItemSpan -import androidx.compose.foundation.lazy.grid.LazyVerticalGrid -import androidx.compose.foundation.lazy.grid.rememberLazyGridState import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.lazy.staggeredgrid.LazyVerticalStaggeredGrid +import androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridCells +import androidx.compose.foundation.lazy.staggeredgrid.StaggeredGridItemSpan +import androidx.compose.foundation.lazy.staggeredgrid.rememberLazyStaggeredGridState import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.foundation.text.ClickableText import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material3.Icon @@ -55,7 +54,6 @@ import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.remember import androidx.compose.ui.Alignment -import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester @@ -67,6 +65,7 @@ import androidx.compose.ui.platform.LocalSoftwareKeyboardController import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.text.LinkAnnotation import androidx.compose.ui.text.SpanStyle import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.buildAnnotatedString @@ -74,6 +73,7 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.input.ImeAction import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextDecoration +import androidx.compose.ui.text.withLink import androidx.compose.ui.text.withStyle import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewParameter @@ -88,62 +88,56 @@ import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme import com.google.samples.apps.nowinandroid.core.model.data.FollowableTopic import com.google.samples.apps.nowinandroid.core.model.data.UserNewsResource import com.google.samples.apps.nowinandroid.core.ui.DevicePreviews +import com.google.samples.apps.nowinandroid.core.ui.InterestsItem import com.google.samples.apps.nowinandroid.core.ui.NewsFeedUiState.Success import com.google.samples.apps.nowinandroid.core.ui.R.string import com.google.samples.apps.nowinandroid.core.ui.TrackScreenViewEvent import com.google.samples.apps.nowinandroid.core.ui.newsFeed -import com.google.samples.apps.nowinandroid.feature.bookmarks.BookmarksViewModel -import com.google.samples.apps.nowinandroid.feature.foryou.ForYouViewModel -import com.google.samples.apps.nowinandroid.feature.interests.InterestsItem -import com.google.samples.apps.nowinandroid.feature.interests.InterestsViewModel import com.google.samples.apps.nowinandroid.feature.search.R as searchR @Composable internal fun SearchRoute( - modifier: Modifier = Modifier, onBackClick: () -> Unit, onInterestsClick: () -> Unit, onTopicClick: (String) -> Unit, - bookmarksViewModel: BookmarksViewModel = hiltViewModel(), - interestsViewModel: InterestsViewModel = hiltViewModel(), + modifier: Modifier = Modifier, searchViewModel: SearchViewModel = hiltViewModel(), - forYouViewModel: ForYouViewModel = hiltViewModel(), ) { val recentSearchQueriesUiState by searchViewModel.recentSearchQueriesUiState.collectAsStateWithLifecycle() val searchResultUiState by searchViewModel.searchResultUiState.collectAsStateWithLifecycle() val searchQuery by searchViewModel.searchQuery.collectAsStateWithLifecycle() SearchScreen( modifier = modifier, - onBackClick = onBackClick, - onClearRecentSearches = searchViewModel::clearRecentSearches, - onFollowButtonClick = interestsViewModel::followTopic, - onInterestsClick = onInterestsClick, + searchQuery = searchQuery, + recentSearchesUiState = recentSearchQueriesUiState, + searchResultUiState = searchResultUiState, onSearchQueryChanged = searchViewModel::onSearchQueryChanged, onSearchTriggered = searchViewModel::onSearchTriggered, + onClearRecentSearches = searchViewModel::clearRecentSearches, + onNewsResourcesCheckedChanged = searchViewModel::setNewsResourceBookmarked, + onNewsResourceViewed = { searchViewModel.setNewsResourceViewed(it, true) }, + onFollowButtonClick = searchViewModel::followTopic, + onBackClick = onBackClick, + onInterestsClick = onInterestsClick, onTopicClick = onTopicClick, - onNewsResourcesCheckedChanged = forYouViewModel::updateNewsResourceSaved, - onNewsResourceViewed = { bookmarksViewModel.setNewsResourceViewed(it, true) }, - recentSearchesUiState = recentSearchQueriesUiState, - searchQuery = searchQuery, - searchResultUiState = searchResultUiState, ) } @Composable internal fun SearchScreen( modifier: Modifier = Modifier, - onBackClick: () -> Unit = {}, + searchQuery: String = "", + recentSearchesUiState: RecentSearchQueriesUiState = RecentSearchQueriesUiState.Loading, + searchResultUiState: SearchResultUiState = SearchResultUiState.Loading, + onSearchQueryChanged: (String) -> Unit = {}, + onSearchTriggered: (String) -> Unit = {}, onClearRecentSearches: () -> Unit = {}, - onFollowButtonClick: (String, Boolean) -> Unit = { _, _ -> }, - onInterestsClick: () -> Unit = {}, onNewsResourcesCheckedChanged: (String, Boolean) -> Unit = { _, _ -> }, onNewsResourceViewed: (String) -> Unit = {}, - onSearchQueryChanged: (String) -> Unit = {}, - onSearchTriggered: (String) -> Unit = {}, + onFollowButtonClick: (String, Boolean) -> Unit = { _, _ -> }, + onBackClick: () -> Unit = {}, + onInterestsClick: () -> Unit = {}, onTopicClick: (String) -> Unit = {}, - searchQuery: String = "", - recentSearchesUiState: RecentSearchQueriesUiState = RecentSearchQueriesUiState.Loading, - searchResultUiState: SearchResultUiState = SearchResultUiState.Loading, ) { TrackScreenViewEvent(screenName = "Search") Column(modifier = modifier) { @@ -177,8 +171,8 @@ internal fun SearchScreen( is SearchResultUiState.Success -> { if (searchResultUiState.isEmpty()) { EmptySearchResultBody( - onInterestsClick = onInterestsClick, searchQuery = searchQuery, + onInterestsClick = onInterestsClick, ) if (recentSearchesUiState is RecentSearchQueriesUiState.Success) { RecentSearchesBody( @@ -192,14 +186,14 @@ internal fun SearchScreen( } } else { SearchResultBody( + searchQuery = searchQuery, topics = searchResultUiState.topics, - onFollowButtonClick = onFollowButtonClick, - onNewsResourcesCheckedChanged = onNewsResourcesCheckedChanged, - onNewsResourceViewed = onNewsResourceViewed, + newsResources = searchResultUiState.newsResources, onSearchTriggered = onSearchTriggered, onTopicClick = onTopicClick, - newsResources = searchResultUiState.newsResources, - searchQuery = searchQuery, + onNewsResourcesCheckedChanged = onNewsResourcesCheckedChanged, + onNewsResourceViewed = onNewsResourceViewed, + onFollowButtonClick = onFollowButtonClick, ) } } @@ -210,14 +204,14 @@ internal fun SearchScreen( @Composable fun EmptySearchResultBody( - onInterestsClick: () -> Unit, searchQuery: String, + onInterestsClick: () -> Unit, ) { Column( horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier.padding(horizontal = 48.dp), ) { - val message = stringResource(id = searchR.string.search_result_not_found, searchQuery) + val message = stringResource(id = searchR.string.feature_search_result_not_found, searchQuery) val start = message.indexOf(searchQuery) Text( text = AnnotatedString( @@ -234,23 +228,31 @@ fun EmptySearchResultBody( textAlign = TextAlign.Center, modifier = Modifier.padding(vertical = 24.dp), ) - val interests = stringResource(id = searchR.string.interests) val tryAnotherSearchString = buildAnnotatedString { - append(stringResource(id = searchR.string.try_another_search)) + append(stringResource(id = searchR.string.feature_search_try_another_search)) append(" ") - withStyle( - style = SpanStyle( - textDecoration = TextDecoration.Underline, - fontWeight = FontWeight.Bold, + withLink( + LinkAnnotation.Clickable( + tag = "", + linkInteractionListener = { + onInterestsClick() + }, ), ) { - pushStringAnnotation(tag = interests, annotation = interests) - append(interests) + withStyle( + style = SpanStyle( + textDecoration = TextDecoration.Underline, + fontWeight = FontWeight.Bold, + ), + ) { + append(stringResource(id = searchR.string.feature_search_interests)) + } } + append(" ") - append(stringResource(id = searchR.string.to_browse_topics)) + append(stringResource(id = searchR.string.feature_search_to_browse_topics)) } - ClickableText( + Text( text = tryAnotherSearchString, style = MaterialTheme.typography.bodyLarge.merge( TextStyle( @@ -259,15 +261,8 @@ fun EmptySearchResultBody( ), ), modifier = Modifier - .padding(start = 36.dp, end = 36.dp, bottom = 24.dp) - .clickable {}, - ) { offset -> - tryAnotherSearchString.getStringAnnotations(start = offset, end = offset) - .firstOrNull() - ?.let { - onInterestsClick() - } - } + .padding(start = 36.dp, end = 36.dp, bottom = 24.dp), + ) } } @@ -278,7 +273,7 @@ private fun SearchNotReadyBody() { modifier = Modifier.padding(horizontal = 48.dp), ) { Text( - text = stringResource(id = searchR.string.search_not_ready), + text = stringResource(id = searchR.string.feature_search_not_ready), style = MaterialTheme.typography.bodyLarge, textAlign = TextAlign.Center, modifier = Modifier.padding(vertical = 24.dp), @@ -288,25 +283,25 @@ private fun SearchNotReadyBody() { @Composable private fun SearchResultBody( + searchQuery: String, topics: List, newsResources: List, - onFollowButtonClick: (String, Boolean) -> Unit, - onNewsResourcesCheckedChanged: (String, Boolean) -> Unit, - onNewsResourceViewed: (String) -> Unit, onSearchTriggered: (String) -> Unit, onTopicClick: (String) -> Unit, - searchQuery: String = "", + onNewsResourcesCheckedChanged: (String, Boolean) -> Unit, + onNewsResourceViewed: (String) -> Unit, + onFollowButtonClick: (String, Boolean) -> Unit, ) { - val state = rememberLazyGridState() + val state = rememberLazyStaggeredGridState() Box( modifier = Modifier .fillMaxSize(), ) { - LazyVerticalGrid( - columns = Adaptive(300.dp), + LazyVerticalStaggeredGrid( + columns = StaggeredGridCells.Adaptive(300.dp), contentPadding = PaddingValues(16.dp), horizontalArrangement = Arrangement.spacedBy(16.dp), - verticalArrangement = Arrangement.spacedBy(24.dp), + verticalItemSpacing = 24.dp, modifier = Modifier .fillMaxSize() .testTag("search:newsResources"), @@ -314,14 +309,12 @@ private fun SearchResultBody( ) { if (topics.isNotEmpty()) { item( - span = { - GridItemSpan(maxLineSpan) - }, + span = StaggeredGridItemSpan.FullLine, ) { Text( text = buildAnnotatedString { withStyle(style = SpanStyle(fontWeight = FontWeight.Bold)) { - append(stringResource(id = searchR.string.topics)) + append(stringResource(id = searchR.string.feature_search_topics)) } }, modifier = Modifier.padding(horizontal = 16.dp, vertical = 8.dp), @@ -330,10 +323,9 @@ private fun SearchResultBody( topics.forEach { followableTopic -> val topicId = followableTopic.topic.id item( - key = "topic-$topicId", // Append a prefix to distinguish a key for news resources - span = { - GridItemSpan(maxLineSpan) - }, + // Append a prefix to distinguish a key for news resources + key = "topic-$topicId", + span = StaggeredGridItemSpan.FullLine, ) { InterestsItem( name = followableTopic.topic.name, @@ -353,14 +345,12 @@ private fun SearchResultBody( if (newsResources.isNotEmpty()) { item( - span = { - GridItemSpan(maxLineSpan) - }, + span = StaggeredGridItemSpan.FullLine, ) { Text( text = buildAnnotatedString { withStyle(style = SpanStyle(fontWeight = FontWeight.Bold)) { - append(stringResource(id = searchR.string.updates)) + append(stringResource(id = searchR.string.feature_search_updates)) } }, modifier = Modifier.padding(horizontal = 16.dp, vertical = 8.dp), @@ -399,9 +389,9 @@ private fun SearchResultBody( @Composable private fun RecentSearchesBody( + recentSearchQueries: List, onClearRecentSearches: () -> Unit, onRecentSearchClicked: (String) -> Unit, - recentSearchQueries: List, ) { Column { Row( @@ -412,7 +402,7 @@ private fun RecentSearchesBody( Text( text = buildAnnotatedString { withStyle(style = SpanStyle(fontWeight = FontWeight.Bold)) { - append(stringResource(id = searchR.string.recent_searches)) + append(stringResource(id = searchR.string.feature_search_recent_searches)) } }, modifier = Modifier.padding(horizontal = 16.dp, vertical = 8.dp), @@ -427,7 +417,7 @@ private fun RecentSearchesBody( Icon( imageVector = NiaIcons.Close, contentDescription = stringResource( - id = searchR.string.clear_recent_searches_content_desc, + id = searchR.string.feature_search_clear_recent_searches_content_desc, ), tint = MaterialTheme.colorScheme.onSurface, ) @@ -451,11 +441,11 @@ private fun RecentSearchesBody( @Composable private fun SearchToolbar( - modifier: Modifier = Modifier, - onBackClick: () -> Unit, + searchQuery: String, onSearchQueryChanged: (String) -> Unit, - searchQuery: String = "", onSearchTriggered: (String) -> Unit, + onBackClick: () -> Unit, + modifier: Modifier = Modifier, ) { Row( verticalAlignment = Alignment.CenterVertically, @@ -465,7 +455,7 @@ private fun SearchToolbar( Icon( imageVector = NiaIcons.ArrowBack, contentDescription = stringResource( - id = string.back, + id = string.core_ui_back, ), ) } @@ -477,11 +467,10 @@ private fun SearchToolbar( } } -@OptIn(ExperimentalComposeUiApi::class) @Composable private fun SearchTextField( - onSearchQueryChanged: (String) -> Unit, searchQuery: String, + onSearchQueryChanged: (String) -> Unit, onSearchTriggered: (String) -> Unit, ) { val focusRequester = remember { FocusRequester() } @@ -502,7 +491,7 @@ private fun SearchTextField( Icon( imageVector = NiaIcons.Search, contentDescription = stringResource( - id = searchR.string.search, + id = searchR.string.feature_search_title, ), tint = MaterialTheme.colorScheme.onSurface, ) @@ -517,7 +506,7 @@ private fun SearchTextField( Icon( imageVector = NiaIcons.Close, contentDescription = stringResource( - id = searchR.string.clear_search_text_content_desc, + id = searchR.string.feature_search_clear_search_text_content_desc, ), tint = MaterialTheme.colorScheme.onSurface, ) @@ -525,9 +514,7 @@ private fun SearchTextField( } }, onValueChange = { - if (!it.contains("\n")) { - onSearchQueryChanged(it) - } + if ("\n" !in it) onSearchQueryChanged(it) }, modifier = Modifier .fillMaxWidth() @@ -535,6 +522,7 @@ private fun SearchTextField( .focusRequester(focusRequester) .onKeyEvent { if (it.key == Key.Enter) { + if (searchQuery.isBlank()) return@onKeyEvent false onSearchExplicitlyTriggered() true } else { @@ -549,6 +537,7 @@ private fun SearchTextField( ), keyboardActions = KeyboardActions( onSearch = { + if (searchQuery.isBlank()) return@KeyboardActions onSearchExplicitlyTriggered() }, ), @@ -565,6 +554,7 @@ private fun SearchTextField( private fun SearchToolbarPreview() { NiaTheme { SearchToolbar( + searchQuery = "", onBackClick = {}, onSearchQueryChanged = {}, onSearchTriggered = {}, diff --git a/feature/search/src/main/java/com/google/samples/apps/nowinandroid/feature/search/SearchUiStatePreviewParameterProvider.kt b/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchUiStatePreviewParameterProvider.kt similarity index 96% rename from feature/search/src/main/java/com/google/samples/apps/nowinandroid/feature/search/SearchUiStatePreviewParameterProvider.kt rename to feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchUiStatePreviewParameterProvider.kt index 4268893da..257d8b68e 100644 --- a/feature/search/src/main/java/com/google/samples/apps/nowinandroid/feature/search/SearchUiStatePreviewParameterProvider.kt +++ b/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchUiStatePreviewParameterProvider.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +@file:Suppress("ktlint:standard:max-line-length") + package com.google.samples.apps.nowinandroid.feature.search import androidx.compose.ui.tooling.preview.PreviewParameterProvider @@ -21,7 +23,6 @@ import com.google.samples.apps.nowinandroid.core.model.data.FollowableTopic import com.google.samples.apps.nowinandroid.core.ui.PreviewParameterData.newsResources import com.google.samples.apps.nowinandroid.core.ui.PreviewParameterData.topics -/* ktlint-disable max-line-length */ /** * This [PreviewParameterProvider](https://developer.android.com/reference/kotlin/androidx/compose/ui/tooling/preview/PreviewParameterProvider) * provides list of [SearchResultUiState] for Composable previews. diff --git a/feature/search/src/main/java/com/google/samples/apps/nowinandroid/feature/search/SearchViewModel.kt b/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModel.kt similarity index 72% rename from feature/search/src/main/java/com/google/samples/apps/nowinandroid/feature/search/SearchViewModel.kt rename to feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModel.kt index 6dd93ceb6..36947880e 100644 --- a/feature/search/src/main/java/com/google/samples/apps/nowinandroid/feature/search/SearchViewModel.kt +++ b/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModel.kt @@ -23,14 +23,15 @@ import com.google.samples.apps.nowinandroid.core.analytics.AnalyticsEvent import com.google.samples.apps.nowinandroid.core.analytics.AnalyticsEvent.Param import com.google.samples.apps.nowinandroid.core.analytics.AnalyticsHelper import com.google.samples.apps.nowinandroid.core.data.repository.RecentSearchRepository +import com.google.samples.apps.nowinandroid.core.data.repository.SearchContentsRepository +import com.google.samples.apps.nowinandroid.core.data.repository.UserDataRepository import com.google.samples.apps.nowinandroid.core.domain.GetRecentSearchQueriesUseCase -import com.google.samples.apps.nowinandroid.core.domain.GetSearchContentsCountUseCase import com.google.samples.apps.nowinandroid.core.domain.GetSearchContentsUseCase -import com.google.samples.apps.nowinandroid.core.result.Result -import com.google.samples.apps.nowinandroid.core.result.asResult +import com.google.samples.apps.nowinandroid.core.model.data.UserSearchResult import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.SharingStarted import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.catch import kotlinx.coroutines.flow.flatMapLatest import kotlinx.coroutines.flow.flowOf import kotlinx.coroutines.flow.map @@ -41,9 +42,10 @@ import javax.inject.Inject @HiltViewModel class SearchViewModel @Inject constructor( getSearchContentsUseCase: GetSearchContentsUseCase, - getSearchContentsCountUseCase: GetSearchContentsCountUseCase, recentSearchQueriesUseCase: GetRecentSearchQueriesUseCase, + private val searchContentsRepository: SearchContentsRepository, private val recentSearchRepository: RecentSearchRepository, + private val userDataRepository: UserDataRepository, private val savedStateHandle: SavedStateHandle, private val analyticsHelper: AnalyticsHelper, ) : ViewModel() { @@ -51,28 +53,25 @@ class SearchViewModel @Inject constructor( val searchQuery = savedStateHandle.getStateFlow(key = SEARCH_QUERY, initialValue = "") val searchResultUiState: StateFlow = - getSearchContentsCountUseCase() + searchContentsRepository.getSearchContentsCount() .flatMapLatest { totalCount -> if (totalCount < SEARCH_MIN_FTS_ENTITY_COUNT) { flowOf(SearchResultUiState.SearchNotReady) } else { searchQuery.flatMapLatest { query -> - if (query.length < SEARCH_QUERY_MIN_LENGTH) { + if (query.trim().length < SEARCH_QUERY_MIN_LENGTH) { flowOf(SearchResultUiState.EmptyQuery) } else { getSearchContentsUseCase(query) - .asResult() - .map { result -> - when (result) { - is Result.Success -> SearchResultUiState.Success( - topics = result.data.topics, - newsResources = result.data.newsResources, - ) - - is Result.Loading -> SearchResultUiState.Loading - is Result.Error -> SearchResultUiState.LoadFailed - } + // Not using .asResult() here, because it emits Loading state every + // time the user types a letter in the search box, which flickers the screen. + .map { data -> + SearchResultUiState.Success( + topics = data.topics, + newsResources = data.newsResources, + ) } + .catch { emit(SearchResultUiState.LoadFailed) } } } } @@ -103,6 +102,7 @@ class SearchViewModel @Inject constructor( * search query in the search text field, defining this method. */ fun onSearchTriggered(query: String) { + if (query.isBlank()) return viewModelScope.launch { recentSearchRepository.insertOrReplaceRecentSearch(searchQuery = query) } @@ -114,6 +114,24 @@ class SearchViewModel @Inject constructor( recentSearchRepository.clearRecentSearches() } } + + fun setNewsResourceBookmarked(newsResourceId: String, isChecked: Boolean) { + viewModelScope.launch { + userDataRepository.setNewsResourceBookmarked(newsResourceId, isChecked) + } + } + + fun followTopic(followedTopicId: String, followed: Boolean) { + viewModelScope.launch { + userDataRepository.setTopicIdFollowed(followedTopicId, followed) + } + } + + fun setNewsResourceViewed(newsResourceId: String, viewed: Boolean) { + viewModelScope.launch { + userDataRepository.setNewsResourceViewed(newsResourceId, viewed) + } + } } private fun AnalyticsHelper.logEventSearchTriggered(query: String) = diff --git a/feature/search/src/main/java/com/google/samples/apps/nowinandroid/feature/search/navigation/SearchNavigation.kt b/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/navigation/SearchNavigation.kt similarity index 91% rename from feature/search/src/main/java/com/google/samples/apps/nowinandroid/feature/search/navigation/SearchNavigation.kt rename to feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/navigation/SearchNavigation.kt index 42bf3f475..81f3576b4 100644 --- a/feature/search/src/main/java/com/google/samples/apps/nowinandroid/feature/search/navigation/SearchNavigation.kt +++ b/feature/search/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/search/navigation/SearchNavigation.kt @@ -22,11 +22,9 @@ import androidx.navigation.NavOptions import androidx.navigation.compose.composable import com.google.samples.apps.nowinandroid.feature.search.SearchRoute -const val searchRoute = "search_route" +const val SEARCH_ROUTE = "search_route" -fun NavController.navigateToSearch(navOptions: NavOptions? = null) { - this.navigate(searchRoute, navOptions) -} +fun NavController.navigateToSearch(navOptions: NavOptions? = null) = navigate(SEARCH_ROUTE, navOptions) fun NavGraphBuilder.searchScreen( onBackClick: () -> Unit, @@ -35,7 +33,7 @@ fun NavGraphBuilder.searchScreen( ) { // TODO: Handle back stack for each top-level destination. At the moment each top-level // destination may have own search screen's back stack. - composable(route = searchRoute) { + composable(route = SEARCH_ROUTE) { SearchRoute( onBackClick = onBackClick, onInterestsClick = onInterestsClick, diff --git a/feature/search/src/main/res/values/strings.xml b/feature/search/src/main/res/values/strings.xml index 2a824653e..e11576747 100644 --- a/feature/search/src/main/res/values/strings.xml +++ b/feature/search/src/main/res/values/strings.xml @@ -15,15 +15,15 @@ limitations under the License. --> - Search - Clear search text - Sorry, there is no content found for your search \"%1$s\" - Sorry, we are still processing the search index. Please come back later. - Try another search or explorer - Interests - to browse topics - Topics - Updates - Recent searches - Clear searches + Search + Clear search text + Sorry, there is no content found for your search \"%1$s\" + Sorry, we are still processing the search index. Please come back later + Try another search or explorer + Interests + to browse topics + Topics + Updates + Recent searches + Clear searches diff --git a/feature/search/src/test/java/com/google/samples/apps/nowinandroid/feature/search/SearchViewModelTest.kt b/feature/search/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModelTest.kt similarity index 66% rename from feature/search/src/test/java/com/google/samples/apps/nowinandroid/feature/search/SearchViewModelTest.kt rename to feature/search/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModelTest.kt index fc9c20549..1b866cec2 100644 --- a/feature/search/src/test/java/com/google/samples/apps/nowinandroid/feature/search/SearchViewModelTest.kt +++ b/feature/search/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/search/SearchViewModelTest.kt @@ -19,19 +19,20 @@ package com.google.samples.apps.nowinandroid.feature.search import androidx.lifecycle.SavedStateHandle import com.google.samples.apps.nowinandroid.core.analytics.NoOpAnalyticsHelper import com.google.samples.apps.nowinandroid.core.domain.GetRecentSearchQueriesUseCase -import com.google.samples.apps.nowinandroid.core.domain.GetSearchContentsCountUseCase import com.google.samples.apps.nowinandroid.core.domain.GetSearchContentsUseCase import com.google.samples.apps.nowinandroid.core.testing.data.newsResourcesTestData import com.google.samples.apps.nowinandroid.core.testing.data.topicsTestData import com.google.samples.apps.nowinandroid.core.testing.repository.TestRecentSearchRepository import com.google.samples.apps.nowinandroid.core.testing.repository.TestSearchContentsRepository import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserDataRepository +import com.google.samples.apps.nowinandroid.core.testing.repository.emptyUserData import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule import com.google.samples.apps.nowinandroid.feature.search.RecentSearchQueriesUiState.Success import com.google.samples.apps.nowinandroid.feature.search.SearchResultUiState.EmptyQuery import com.google.samples.apps.nowinandroid.feature.search.SearchResultUiState.Loading import com.google.samples.apps.nowinandroid.feature.search.SearchResultUiState.SearchNotReady import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.flow.first import kotlinx.coroutines.launch import kotlinx.coroutines.test.UnconfinedTestDispatcher import kotlinx.coroutines.test.runTest @@ -40,6 +41,7 @@ import org.junit.Rule import org.junit.Test import kotlin.test.assertEquals import kotlin.test.assertIs +import kotlin.test.assertNull /** * To learn more about how this test handles Flows created with stateIn, see @@ -58,19 +60,21 @@ class SearchViewModelTest { ) private val recentSearchRepository = TestRecentSearchRepository() private val getRecentQueryUseCase = GetRecentSearchQueriesUseCase(recentSearchRepository) - private val getSearchContentsCountUseCase = GetSearchContentsCountUseCase(searchContentsRepository) + private lateinit var viewModel: SearchViewModel @Before fun setup() { viewModel = SearchViewModel( getSearchContentsUseCase = getSearchContentsUseCase, - getSearchContentsCountUseCase = getSearchContentsCountUseCase, recentSearchQueriesUseCase = getRecentQueryUseCase, + searchContentsRepository = searchContentsRepository, savedStateHandle = SavedStateHandle(), recentSearchRepository = recentSearchRepository, + userDataRepository = userDataRepository, analyticsHelper = NoOpAnalyticsHelper(), ) + userDataRepository.setUserData(emptyUserData) } @Test @@ -82,49 +86,95 @@ class SearchViewModelTest { fun stateIsEmptyQuery_withEmptySearchQuery() = runTest { searchContentsRepository.addNewsResources(newsResourcesTestData) searchContentsRepository.addTopics(topicsTestData) - val collectJob = launch(UnconfinedTestDispatcher()) { viewModel.searchResultUiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.searchResultUiState.collect() } viewModel.onSearchQueryChanged("") assertEquals(EmptyQuery, viewModel.searchResultUiState.value) - - collectJob.cancel() } @Test fun emptyResultIsReturned_withNotMatchingQuery() = runTest { - val collectJob = launch(UnconfinedTestDispatcher()) { viewModel.searchResultUiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.searchResultUiState.collect() } viewModel.onSearchQueryChanged("XXX") searchContentsRepository.addNewsResources(newsResourcesTestData) searchContentsRepository.addTopics(topicsTestData) val result = viewModel.searchResultUiState.value - // TODO: Figure out to get the latest emitted ui State? The result is emitted as EmptyQuery - // assertIs(result) - - collectJob.cancel() + assertIs(result) } @Test fun recentSearches_verifyUiStateIsSuccess() = runTest { - val collectJob = launch(UnconfinedTestDispatcher()) { viewModel.recentSearchQueriesUiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.recentSearchQueriesUiState.collect() } viewModel.onSearchTriggered("kotlin") val result = viewModel.recentSearchQueriesUiState.value assertIs(result) - - collectJob.cancel() } @Test fun searchNotReady_withNoFtsTableEntity() = runTest { - val collectJob = launch(UnconfinedTestDispatcher()) { viewModel.searchResultUiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.searchResultUiState.collect() } viewModel.onSearchQueryChanged("") assertEquals(SearchNotReady, viewModel.searchResultUiState.value) + } + + @Test + fun emptySearchText_isNotAddedToRecentSearches() = runTest { + viewModel.onSearchTriggered("") + + val recentSearchQueriesStream = getRecentQueryUseCase() + val recentSearchQueries = recentSearchQueriesStream.first() + val recentSearchQuery = recentSearchQueries.firstOrNull() + + assertNull(recentSearchQuery) + } + + @Test + fun searchTextWithThreeSpaces_isEmptyQuery() = runTest { + searchContentsRepository.addNewsResources(newsResourcesTestData) + searchContentsRepository.addTopics(topicsTestData) + val collectJob = launch(UnconfinedTestDispatcher()) { viewModel.searchResultUiState.collect() } + + viewModel.onSearchQueryChanged(" ") + + assertIs(viewModel.searchResultUiState.value) + + collectJob.cancel() + } + + @Test + fun searchTextWithThreeSpacesAndOneLetter_isEmptyQuery() = runTest { + searchContentsRepository.addNewsResources(newsResourcesTestData) + searchContentsRepository.addTopics(topicsTestData) + val collectJob = launch(UnconfinedTestDispatcher()) { viewModel.searchResultUiState.collect() } + + viewModel.onSearchQueryChanged(" a") + + assertIs(viewModel.searchResultUiState.value) collectJob.cancel() } + + @Test + fun whenToggleNewsResourceSavedIsCalled_bookmarkStateIsUpdated() = runTest { + val newsResourceId = "123" + viewModel.setNewsResourceBookmarked(newsResourceId, true) + + assertEquals( + expected = setOf(newsResourceId), + actual = userDataRepository.userData.first().bookmarkedNewsResources, + ) + + viewModel.setNewsResourceBookmarked(newsResourceId, false) + + assertEquals( + expected = emptySet(), + actual = userDataRepository.userData.first().bookmarkedNewsResources, + ) + } } diff --git a/feature/settings/README.md b/feature/settings/README.md new file mode 100644 index 000000000..7a4df04fe --- /dev/null +++ b/feature/settings/README.md @@ -0,0 +1,3 @@ +# :feature:settings module +## Dependency graph +![Dependency graph](../../docs/images/graphs/dep_graph_feature_settings.svg) diff --git a/feature/settings/build.gradle.kts b/feature/settings/build.gradle.kts index ef367d612..15d65204d 100644 --- a/feature/settings/build.gradle.kts +++ b/feature/settings/build.gradle.kts @@ -15,9 +15,9 @@ */ plugins { - id("nowinandroid.android.feature") - id("nowinandroid.android.library.compose") - id("nowinandroid.android.library.jacoco") + alias(libs.plugins.nowinandroid.android.feature) + alias(libs.plugins.nowinandroid.android.library.compose) + alias(libs.plugins.nowinandroid.android.library.jacoco) } android { @@ -26,7 +26,10 @@ android { dependencies { implementation(libs.androidx.appcompat) - implementation(libs.google.oss.licenses) { - exclude(group = "androidx.appcompat") - } + implementation(libs.google.oss.licenses) + implementation(projects.core.data) + + testImplementation(projects.core.testing) + + androidTestImplementation(libs.bundles.androidx.compose.ui.test) } diff --git a/feature/settings/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/settings/SettingsDialogTest.kt b/feature/settings/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/settings/SettingsDialogTest.kt similarity index 69% rename from feature/settings/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/settings/SettingsDialogTest.kt rename to feature/settings/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/settings/SettingsDialogTest.kt index febc606b0..790b5964d 100644 --- a/feature/settings/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/settings/SettingsDialogTest.kt +++ b/feature/settings/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/settings/SettingsDialogTest.kt @@ -48,7 +48,7 @@ class SettingsDialogTest { } composeTestRule - .onNodeWithText(getString(R.string.loading)) + .onNodeWithText(getString(R.string.feature_settings_loading)) .assertExists() } @@ -71,17 +71,17 @@ class SettingsDialogTest { } // Check that all the possible settings are displayed. - composeTestRule.onNodeWithText(getString(R.string.brand_default)).assertExists() - composeTestRule.onNodeWithText(getString(R.string.brand_android)).assertExists() + composeTestRule.onNodeWithText(getString(R.string.feature_settings_brand_default)).assertExists() + composeTestRule.onNodeWithText(getString(R.string.feature_settings_brand_android)).assertExists() composeTestRule.onNodeWithText( - getString(R.string.dark_mode_config_system_default), + getString(R.string.feature_settings_dark_mode_config_system_default), ).assertExists() - composeTestRule.onNodeWithText(getString(R.string.dark_mode_config_light)).assertExists() - composeTestRule.onNodeWithText(getString(R.string.dark_mode_config_dark)).assertExists() + composeTestRule.onNodeWithText(getString(R.string.feature_settings_dark_mode_config_light)).assertExists() + composeTestRule.onNodeWithText(getString(R.string.feature_settings_dark_mode_config_dark)).assertExists() // Check that the correct settings are selected. - composeTestRule.onNodeWithText(getString(R.string.brand_android)).assertIsSelected() - composeTestRule.onNodeWithText(getString(R.string.dark_mode_config_dark)).assertIsSelected() + composeTestRule.onNodeWithText(getString(R.string.feature_settings_brand_android)).assertIsSelected() + composeTestRule.onNodeWithText(getString(R.string.feature_settings_dark_mode_config_dark)).assertIsSelected() } @Test @@ -103,12 +103,12 @@ class SettingsDialogTest { ) } - composeTestRule.onNodeWithText(getString(R.string.dynamic_color_preference)).assertExists() - composeTestRule.onNodeWithText(getString(R.string.dynamic_color_yes)).assertExists() - composeTestRule.onNodeWithText(getString(R.string.dynamic_color_no)).assertExists() + composeTestRule.onNodeWithText(getString(R.string.feature_settings_dynamic_color_preference)).assertExists() + composeTestRule.onNodeWithText(getString(R.string.feature_settings_dynamic_color_yes)).assertExists() + composeTestRule.onNodeWithText(getString(R.string.feature_settings_dynamic_color_no)).assertExists() // Check that the correct default dynamic color setting is selected. - composeTestRule.onNodeWithText(getString(R.string.dynamic_color_no)).assertIsSelected() + composeTestRule.onNodeWithText(getString(R.string.feature_settings_dynamic_color_no)).assertIsSelected() } @Test @@ -129,10 +129,10 @@ class SettingsDialogTest { ) } - composeTestRule.onNodeWithText(getString(R.string.dynamic_color_preference)) + composeTestRule.onNodeWithText(getString(R.string.feature_settings_dynamic_color_preference)) .assertDoesNotExist() - composeTestRule.onNodeWithText(getString(R.string.dynamic_color_yes)).assertDoesNotExist() - composeTestRule.onNodeWithText(getString(R.string.dynamic_color_no)).assertDoesNotExist() + composeTestRule.onNodeWithText(getString(R.string.feature_settings_dynamic_color_yes)).assertDoesNotExist() + composeTestRule.onNodeWithText(getString(R.string.feature_settings_dynamic_color_no)).assertDoesNotExist() } @Test @@ -153,10 +153,10 @@ class SettingsDialogTest { ) } - composeTestRule.onNodeWithText(getString(R.string.dynamic_color_preference)) + composeTestRule.onNodeWithText(getString(R.string.feature_settings_dynamic_color_preference)) .assertDoesNotExist() - composeTestRule.onNodeWithText(getString(R.string.dynamic_color_yes)).assertDoesNotExist() - composeTestRule.onNodeWithText(getString(R.string.dynamic_color_no)).assertDoesNotExist() + composeTestRule.onNodeWithText(getString(R.string.feature_settings_dynamic_color_yes)).assertDoesNotExist() + composeTestRule.onNodeWithText(getString(R.string.feature_settings_dynamic_color_no)).assertDoesNotExist() } @Test @@ -177,9 +177,9 @@ class SettingsDialogTest { ) } - composeTestRule.onNodeWithText(getString(R.string.privacy_policy)).assertExists() - composeTestRule.onNodeWithText(getString(R.string.licenses)).assertExists() - composeTestRule.onNodeWithText(getString(R.string.brand_guidelines)).assertExists() - composeTestRule.onNodeWithText(getString(R.string.feedback)).assertExists() + composeTestRule.onNodeWithText(getString(R.string.feature_settings_privacy_policy)).assertExists() + composeTestRule.onNodeWithText(getString(R.string.feature_settings_licenses)).assertExists() + composeTestRule.onNodeWithText(getString(R.string.feature_settings_brand_guidelines)).assertExists() + composeTestRule.onNodeWithText(getString(R.string.feature_settings_feedback)).assertExists() } } diff --git a/feature/settings/src/main/java/com/google/samples/apps/nowinandroid/feature/settings/SettingsDialog.kt b/feature/settings/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/settings/SettingsDialog.kt similarity index 87% rename from feature/settings/src/main/java/com/google/samples/apps/nowinandroid/feature/settings/SettingsDialog.kt rename to feature/settings/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/settings/SettingsDialog.kt index 01ec30e74..db60a6447 100644 --- a/feature/settings/src/main/java/com/google/samples/apps/nowinandroid/feature/settings/SettingsDialog.kt +++ b/feature/settings/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/settings/SettingsDialog.kt @@ -14,6 +14,8 @@ * limitations under the License. */ +@file:Suppress("ktlint:standard:max-line-length") + package com.google.samples.apps.nowinandroid.feature.settings import android.content.Intent @@ -35,7 +37,7 @@ import androidx.compose.foundation.selection.selectable import androidx.compose.foundation.selection.selectableGroup import androidx.compose.foundation.verticalScroll import androidx.compose.material3.AlertDialog -import androidx.compose.material3.Divider +import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.MaterialTheme import androidx.compose.material3.RadioButton import androidx.compose.material3.Text @@ -108,17 +110,17 @@ fun SettingsDialog( onDismissRequest = { onDismiss() }, title = { Text( - text = stringResource(string.settings_title), + text = stringResource(string.feature_settings_title), style = MaterialTheme.typography.titleLarge, ) }, text = { - Divider() + HorizontalDivider() Column(Modifier.verticalScroll(rememberScrollState())) { when (settingsUiState) { Loading -> { Text( - text = stringResource(string.loading), + text = stringResource(string.feature_settings_loading), modifier = Modifier.padding(vertical = 16.dp), ) } @@ -133,14 +135,14 @@ fun SettingsDialog( ) } } - Divider(Modifier.padding(top = 8.dp)) + HorizontalDivider(Modifier.padding(top = 8.dp)) LinksPanel() } TrackScreenViewEvent(screenName = "Settings") }, confirmButton = { Text( - text = stringResource(string.dismiss_dialog_button_text), + text = stringResource(string.feature_settings_dismiss_dialog_button_text), style = MaterialTheme.typography.labelLarge, color = MaterialTheme.colorScheme.primary, modifier = Modifier @@ -160,50 +162,50 @@ private fun ColumnScope.SettingsPanel( onChangeDynamicColorPreference: (useDynamicColor: Boolean) -> Unit, onChangeDarkThemeConfig: (darkThemeConfig: DarkThemeConfig) -> Unit, ) { - SettingsDialogSectionTitle(text = stringResource(string.theme)) + SettingsDialogSectionTitle(text = stringResource(string.feature_settings_theme)) Column(Modifier.selectableGroup()) { SettingsDialogThemeChooserRow( - text = stringResource(string.brand_default), + text = stringResource(string.feature_settings_brand_default), selected = settings.brand == DEFAULT, onClick = { onChangeThemeBrand(DEFAULT) }, ) SettingsDialogThemeChooserRow( - text = stringResource(string.brand_android), + text = stringResource(string.feature_settings_brand_android), selected = settings.brand == ANDROID, onClick = { onChangeThemeBrand(ANDROID) }, ) } AnimatedVisibility(visible = settings.brand == DEFAULT && supportDynamicColor) { Column { - SettingsDialogSectionTitle(text = stringResource(string.dynamic_color_preference)) + SettingsDialogSectionTitle(text = stringResource(string.feature_settings_dynamic_color_preference)) Column(Modifier.selectableGroup()) { SettingsDialogThemeChooserRow( - text = stringResource(string.dynamic_color_yes), + text = stringResource(string.feature_settings_dynamic_color_yes), selected = settings.useDynamicColor, onClick = { onChangeDynamicColorPreference(true) }, ) SettingsDialogThemeChooserRow( - text = stringResource(string.dynamic_color_no), + text = stringResource(string.feature_settings_dynamic_color_no), selected = !settings.useDynamicColor, onClick = { onChangeDynamicColorPreference(false) }, ) } } } - SettingsDialogSectionTitle(text = stringResource(string.dark_mode_preference)) + SettingsDialogSectionTitle(text = stringResource(string.feature_settings_dark_mode_preference)) Column(Modifier.selectableGroup()) { SettingsDialogThemeChooserRow( - text = stringResource(string.dark_mode_config_system_default), + text = stringResource(string.feature_settings_dark_mode_config_system_default), selected = settings.darkThemeConfig == FOLLOW_SYSTEM, onClick = { onChangeDarkThemeConfig(FOLLOW_SYSTEM) }, ) SettingsDialogThemeChooserRow( - text = stringResource(string.dark_mode_config_light), + text = stringResource(string.feature_settings_dark_mode_config_light), selected = settings.darkThemeConfig == LIGHT, onClick = { onChangeDarkThemeConfig(LIGHT) }, ) SettingsDialogThemeChooserRow( - text = stringResource(string.dark_mode_config_dark), + text = stringResource(string.feature_settings_dark_mode_config_dark), selected = settings.darkThemeConfig == DARK, onClick = { onChangeDarkThemeConfig(DARK) }, ) @@ -259,7 +261,7 @@ private fun LinksPanel() { NiaTextButton( onClick = { uriHandler.openUri(PRIVACY_POLICY_URL) }, ) { - Text(text = stringResource(string.privacy_policy)) + Text(text = stringResource(string.feature_settings_privacy_policy)) } val context = LocalContext.current NiaTextButton( @@ -267,17 +269,17 @@ private fun LinksPanel() { context.startActivity(Intent(context, OssLicensesMenuActivity::class.java)) }, ) { - Text(text = stringResource(string.licenses)) + Text(text = stringResource(string.feature_settings_licenses)) } NiaTextButton( onClick = { uriHandler.openUri(BRAND_GUIDELINES_URL) }, ) { - Text(text = stringResource(string.brand_guidelines)) + Text(text = stringResource(string.feature_settings_brand_guidelines)) } NiaTextButton( onClick = { uriHandler.openUri(FEEDBACK_URL) }, ) { - Text(text = stringResource(string.feedback)) + Text(text = stringResource(string.feature_settings_feedback)) } } } @@ -316,7 +318,6 @@ private fun PreviewSettingsDialogLoading() { } } -/* ktlint-disable max-line-length */ private const val PRIVACY_POLICY_URL = "https://policies.google.com/privacy" private const val BRAND_GUIDELINES_URL = "https://developer.android.com/distribute/marketing-tools/brand-guidelines" private const val FEEDBACK_URL = "https://goo.gle/nia-app-feedback" diff --git a/feature/settings/src/main/java/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModel.kt b/feature/settings/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModel.kt similarity index 81% rename from feature/settings/src/main/java/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModel.kt rename to feature/settings/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModel.kt index 33bf58a2c..123c84d1c 100644 --- a/feature/settings/src/main/java/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModel.kt +++ b/feature/settings/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModel.kt @@ -24,12 +24,13 @@ import com.google.samples.apps.nowinandroid.core.model.data.ThemeBrand import com.google.samples.apps.nowinandroid.feature.settings.SettingsUiState.Loading import com.google.samples.apps.nowinandroid.feature.settings.SettingsUiState.Success import dagger.hilt.android.lifecycle.HiltViewModel -import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.SharingStarted.Companion.WhileSubscribed import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.map import kotlinx.coroutines.flow.stateIn import kotlinx.coroutines.launch import javax.inject.Inject +import kotlin.time.Duration.Companion.seconds @HiltViewModel class SettingsViewModel @Inject constructor( @@ -48,13 +49,7 @@ class SettingsViewModel @Inject constructor( } .stateIn( scope = viewModelScope, - // Starting eagerly means the user data is ready when the SettingsDialog is laid out - // for the first time. Without this, due to b/221643630 the layout is done using the - // "Loading" text, then replaced with the user editable fields once loaded, however, - // the layout height doesn't change meaning all the fields are squashed into a small - // scrollable column. - // TODO: Change to SharingStarted.WhileSubscribed(5_000) when b/221643630 is fixed - started = SharingStarted.Eagerly, + started = WhileSubscribed(5.seconds.inWholeMilliseconds), initialValue = Loading, ) @@ -87,6 +82,6 @@ data class UserEditableSettings( ) sealed interface SettingsUiState { - object Loading : SettingsUiState + data object Loading : SettingsUiState data class Success(val settings: UserEditableSettings) : SettingsUiState } diff --git a/feature/settings/src/main/res/values/strings.xml b/feature/settings/src/main/res/values/strings.xml index ad56f6b08..887539bd5 100644 --- a/feature/settings/src/main/res/values/strings.xml +++ b/feature/settings/src/main/res/values/strings.xml @@ -15,23 +15,23 @@ limitations under the License. --> - Settings - Search - Settings - Loading… - Privacy policy - Licenses - Brand Guidelines - Feedback - Theme - Default - Android - Dark mode preference - System default - Light - Dark - Use Dynamic Color - Yes - No - OK + Settings + Search + Settings + Loading… + Privacy policy + Licenses + Brand Guidelines + Feedback + Theme + Default + Android + Dark mode preference + System default + Light + Dark + Use Dynamic Color + Yes + No + OK diff --git a/feature/settings/src/test/java/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModelTest.kt b/feature/settings/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModelTest.kt similarity index 94% rename from feature/settings/src/test/java/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModelTest.kt rename to feature/settings/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModelTest.kt index 9062abee6..f977612a1 100644 --- a/feature/settings/src/test/java/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModelTest.kt +++ b/feature/settings/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/settings/SettingsViewModelTest.kt @@ -52,8 +52,7 @@ class SettingsViewModelTest { @Test fun stateIsSuccessAfterUserDataLoaded() = runTest { - val collectJob = - launch(UnconfinedTestDispatcher()) { viewModel.settingsUiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.settingsUiState.collect() } userDataRepository.setThemeBrand(ANDROID) userDataRepository.setDarkThemeConfig(DARK) @@ -68,7 +67,5 @@ class SettingsViewModelTest { ), viewModel.settingsUiState.value, ) - - collectJob.cancel() } } diff --git a/feature/topic/README.md b/feature/topic/README.md index d74517e63..84588929c 100644 --- a/feature/topic/README.md +++ b/feature/topic/README.md @@ -1,3 +1,3 @@ # :feature:topic module - -![Dependency graph](../../docs/images/graphs/dep_graph_feature_topic.png) +## Dependency graph +![Dependency graph](../../docs/images/graphs/dep_graph_feature_topic.svg) diff --git a/feature/topic/build.gradle.kts b/feature/topic/build.gradle.kts index ecb0630ce..bd8b59ec8 100644 --- a/feature/topic/build.gradle.kts +++ b/feature/topic/build.gradle.kts @@ -15,9 +15,9 @@ */ plugins { - id("nowinandroid.android.feature") - id("nowinandroid.android.library.compose") - id("nowinandroid.android.library.jacoco") + alias(libs.plugins.nowinandroid.android.feature) + alias(libs.plugins.nowinandroid.android.library.compose) + alias(libs.plugins.nowinandroid.android.library.jacoco) } android { @@ -25,5 +25,11 @@ android { } dependencies { - implementation(libs.kotlinx.datetime) + implementation(projects.core.data) + + testImplementation(projects.core.testing) + testImplementation(libs.robolectric) + + androidTestImplementation(libs.bundles.androidx.compose.ui.test) + androidTestImplementation(projects.core.testing) } \ No newline at end of file diff --git a/feature/topic/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/topic/TopicScreenTest.kt b/feature/topic/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicScreenTest.kt similarity index 95% rename from feature/topic/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/topic/TopicScreenTest.kt rename to feature/topic/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicScreenTest.kt index 94f86a8e4..2b87baf9e 100644 --- a/feature/topic/src/androidTest/java/com/google/samples/apps/nowinandroid/feature/topic/TopicScreenTest.kt +++ b/feature/topic/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicScreenTest.kt @@ -45,7 +45,7 @@ class TopicScreenTest { @Before fun setup() { composeTestRule.activity.apply { - topicLoading = getString(R.string.topic_loading) + topicLoading = getString(R.string.feature_topic_loading) } } @@ -55,6 +55,7 @@ class TopicScreenTest { TopicScreen( topicUiState = TopicUiState.Loading, newsUiState = NewsUiState.Loading, + showBackButton = true, onBackClick = {}, onFollowClick = {}, onTopicClick = {}, @@ -75,6 +76,7 @@ class TopicScreenTest { TopicScreen( topicUiState = TopicUiState.Success(testTopic), newsUiState = NewsUiState.Loading, + showBackButton = true, onBackClick = {}, onFollowClick = {}, onTopicClick = {}, @@ -100,6 +102,7 @@ class TopicScreenTest { TopicScreen( topicUiState = TopicUiState.Loading, newsUiState = NewsUiState.Success(userNewsResourcesTestData), + showBackButton = true, onBackClick = {}, onFollowClick = {}, onTopicClick = {}, @@ -123,6 +126,7 @@ class TopicScreenTest { newsUiState = NewsUiState.Success( userNewsResourcesTestData, ), + showBackButton = true, onBackClick = {}, onFollowClick = {}, onTopicClick = {}, diff --git a/feature/topic/src/main/java/com/google/samples/apps/nowinandroid/feature/topic/navigation/TopicNavigation.kt b/feature/topic/src/main/java/com/google/samples/apps/nowinandroid/feature/topic/navigation/TopicNavigation.kt deleted file mode 100644 index c29b57d47..000000000 --- a/feature/topic/src/main/java/com/google/samples/apps/nowinandroid/feature/topic/navigation/TopicNavigation.kt +++ /dev/null @@ -1,60 +0,0 @@ -/* - * Copyright 2022 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * https://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.samples.apps.nowinandroid.feature.topic.navigation - -import androidx.annotation.VisibleForTesting -import androidx.lifecycle.SavedStateHandle -import androidx.navigation.NavController -import androidx.navigation.NavGraphBuilder -import androidx.navigation.NavType -import androidx.navigation.compose.composable -import androidx.navigation.navArgument -import com.google.samples.apps.nowinandroid.feature.topic.TopicRoute -import java.net.URLDecoder -import java.net.URLEncoder -import kotlin.text.Charsets.UTF_8 - -private val URL_CHARACTER_ENCODING = UTF_8.name() - -@VisibleForTesting -internal const val topicIdArg = "topicId" - -internal class TopicArgs(val topicId: String) { - constructor(savedStateHandle: SavedStateHandle) : - this(URLDecoder.decode(checkNotNull(savedStateHandle[topicIdArg]), URL_CHARACTER_ENCODING)) -} - -fun NavController.navigateToTopic(topicId: String) { - val encodedId = URLEncoder.encode(topicId, URL_CHARACTER_ENCODING) - this.navigate("topic_route/$encodedId") { - launchSingleTop = true - } -} - -fun NavGraphBuilder.topicScreen( - onBackClick: () -> Unit, - onTopicClick: (String) -> Unit, -) { - composable( - route = "topic_route/{$topicIdArg}", - arguments = listOf( - navArgument(topicIdArg) { type = NavType.StringType }, - ), - ) { - TopicRoute(onBackClick = onBackClick, onTopicClick = onTopicClick) - } -} diff --git a/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicDetailPlaceholder.kt b/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicDetailPlaceholder.kt new file mode 100644 index 000000000..627fb8fb3 --- /dev/null +++ b/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicDetailPlaceholder.kt @@ -0,0 +1,71 @@ +/* + * Copyright 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.feature.topic + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Card +import androidx.compose.material3.CardDefaults +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import com.google.samples.apps.nowinandroid.core.designsystem.theme.NiaTheme + +@Composable +fun TopicDetailPlaceholder(modifier: Modifier = Modifier) { + Card( + modifier = modifier, + colors = CardDefaults.cardColors(containerColor = MaterialTheme.colorScheme.surfaceVariant), + shape = RoundedCornerShape(24.dp, 24.dp, 0.dp, 0.dp), + ) { + Column( + modifier = Modifier.fillMaxSize(), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy( + 20.dp, + alignment = Alignment.CenterVertically, + ), + ) { + Icon( + painter = painterResource(id = R.drawable.feature_topic_ic_topic_placeholder), + contentDescription = null, + tint = MaterialTheme.colorScheme.primary, + ) + Text( + text = stringResource(id = R.string.feature_topic_select_an_interest), + style = MaterialTheme.typography.titleLarge, + ) + } + } +} + +@Preview(widthDp = 200, heightDp = 300) +@Composable +fun TopicDetailPlaceholderPreview() { + NiaTheme { + TopicDetailPlaceholder() + } +} diff --git a/feature/topic/src/main/java/com/google/samples/apps/nowinandroid/feature/topic/TopicScreen.kt b/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicScreen.kt similarity index 91% rename from feature/topic/src/main/java/com/google/samples/apps/nowinandroid/feature/topic/TopicScreen.kt rename to feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicScreen.kt index 3dbbe7da8..8ef0d786d 100644 --- a/feature/topic/src/main/java/com/google/samples/apps/nowinandroid/feature/topic/TopicScreen.kt +++ b/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicScreen.kt @@ -30,6 +30,7 @@ import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.safeDrawing import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.systemBars +import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.windowInsetsBottomHeight import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.foundation.layout.windowInsetsTopHeight @@ -44,6 +45,7 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewParameter @@ -69,20 +71,22 @@ import com.google.samples.apps.nowinandroid.core.ui.userNewsResourceCardItems import com.google.samples.apps.nowinandroid.feature.topic.R.string @Composable -internal fun TopicRoute( +fun TopicScreen( + showBackButton: Boolean, onBackClick: () -> Unit, onTopicClick: (String) -> Unit, modifier: Modifier = Modifier, viewModel: TopicViewModel = hiltViewModel(), ) { val topicUiState: TopicUiState by viewModel.topicUiState.collectAsStateWithLifecycle() - val newsUiState: NewsUiState by viewModel.newUiState.collectAsStateWithLifecycle() + val newsUiState: NewsUiState by viewModel.newsUiState.collectAsStateWithLifecycle() TrackScreenViewEvent(screenName = "Topic: ${viewModel.topicId}") TopicScreen( topicUiState = topicUiState, newsUiState = newsUiState, - modifier = modifier, + modifier = modifier.testTag("topic:${viewModel.topicId}"), + showBackButton = showBackButton, onBackClick = onBackClick, onFollowClick = viewModel::followTopicToggle, onBookmarkChanged = viewModel::bookmarkNews, @@ -96,6 +100,7 @@ internal fun TopicRoute( internal fun TopicScreen( topicUiState: TopicUiState, newsUiState: NewsUiState, + showBackButton: Boolean, onBackClick: () -> Unit, onFollowClick: (Boolean) -> Unit, onTopicClick: (String) -> Unit, @@ -119,7 +124,7 @@ internal fun TopicScreen( TopicUiState.Loading -> item { NiaLoadingWheel( modifier = modifier, - contentDesc = stringResource(id = string.topic_loading), + contentDesc = stringResource(id = string.feature_topic_loading), ) } @@ -127,6 +132,7 @@ internal fun TopicScreen( is TopicUiState.Success -> { item { TopicToolbar( + showBackButton = showBackButton, onBackClick = onBackClick, onFollowClick = onFollowClick, uiState = topicUiState.followableTopic, @@ -206,7 +212,7 @@ private fun TopicHeader(name: String, description: String, imageUrl: String) { contentDescription = null, modifier = Modifier .align(Alignment.CenterHorizontally) - .size(216.dp) + .size(132.dp) .padding(bottom = 12.dp), ) Text(name, style = MaterialTheme.typography.displayMedium) @@ -270,6 +276,7 @@ private fun TopicBodyPreview() { private fun TopicToolbar( uiState: FollowableTopic, modifier: Modifier = Modifier, + showBackButton: Boolean = true, onBackClick: () -> Unit = {}, onFollowClick: (Boolean) -> Unit = {}, ) { @@ -280,13 +287,18 @@ private fun TopicToolbar( .fillMaxWidth() .padding(bottom = 32.dp), ) { - IconButton(onClick = { onBackClick() }) { - Icon( - imageVector = NiaIcons.ArrowBack, - contentDescription = stringResource( - id = com.google.samples.apps.nowinandroid.core.ui.R.string.back, - ), - ) + if (showBackButton) { + IconButton(onClick = { onBackClick() }) { + Icon( + imageVector = NiaIcons.ArrowBack, + contentDescription = stringResource( + id = com.google.samples.apps.nowinandroid.core.ui.R.string.core_ui_back, + ), + ) + } + } else { + // Keeps the NiaFilterChip aligned to the end of the Row. + Spacer(modifier = Modifier.width(1.dp)) } val selected = uiState.isFollowed NiaFilterChip( @@ -314,6 +326,7 @@ fun TopicScreenPopulated( TopicScreen( topicUiState = TopicUiState.Success(userNewsResources[0].followableTopics[0]), newsUiState = NewsUiState.Success(userNewsResources), + showBackButton = true, onBackClick = {}, onFollowClick = {}, onBookmarkChanged = { _, _ -> }, @@ -332,6 +345,7 @@ fun TopicScreenLoading() { TopicScreen( topicUiState = TopicUiState.Loading, newsUiState = NewsUiState.Loading, + showBackButton = true, onBackClick = {}, onFollowClick = {}, onBookmarkChanged = { _, _ -> }, diff --git a/feature/topic/src/main/java/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModel.kt b/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModel.kt similarity index 79% rename from feature/topic/src/main/java/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModel.kt rename to feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModel.kt index 7f8c6067e..ba8baad14 100644 --- a/feature/topic/src/main/java/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModel.kt +++ b/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModel.kt @@ -19,6 +19,7 @@ package com.google.samples.apps.nowinandroid.feature.topic import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope +import androidx.navigation.toRoute import com.google.samples.apps.nowinandroid.core.data.repository.NewsResourceQuery import com.google.samples.apps.nowinandroid.core.data.repository.TopicsRepository import com.google.samples.apps.nowinandroid.core.data.repository.UserDataRepository @@ -28,7 +29,7 @@ import com.google.samples.apps.nowinandroid.core.model.data.Topic import com.google.samples.apps.nowinandroid.core.model.data.UserNewsResource import com.google.samples.apps.nowinandroid.core.result.Result import com.google.samples.apps.nowinandroid.core.result.asResult -import com.google.samples.apps.nowinandroid.feature.topic.navigation.TopicArgs +import com.google.samples.apps.nowinandroid.feature.topic.navigation.TopicRoute import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.SharingStarted @@ -47,12 +48,10 @@ class TopicViewModel @Inject constructor( userNewsResourceRepository: UserNewsResourceRepository, ) : ViewModel() { - private val topicArgs: TopicArgs = TopicArgs(savedStateHandle) - - val topicId = topicArgs.topicId + val topicId = savedStateHandle.toRoute().id val topicUiState: StateFlow = topicUiState( - topicId = topicArgs.topicId, + topicId = topicId, userDataRepository = userDataRepository, topicsRepository = topicsRepository, ) @@ -62,8 +61,8 @@ class TopicViewModel @Inject constructor( initialValue = TopicUiState.Loading, ) - val newUiState: StateFlow = newsUiState( - topicId = topicArgs.topicId, + val newsUiState: StateFlow = newsUiState( + topicId = topicId, userDataRepository = userDataRepository, userNewsResourceRepository = userNewsResourceRepository, ) @@ -75,13 +74,13 @@ class TopicViewModel @Inject constructor( fun followTopicToggle(followed: Boolean) { viewModelScope.launch { - userDataRepository.toggleFollowedTopicId(topicArgs.topicId, followed) + userDataRepository.setTopicIdFollowed(topicId, followed) } } fun bookmarkNews(newsResourceId: String, bookmarked: Boolean) { viewModelScope.launch { - userDataRepository.updateNewsResourceBookmark(newsResourceId, bookmarked) + userDataRepository.setNewsResourceBookmarked(newsResourceId, bookmarked) } } @@ -117,22 +116,16 @@ private fun topicUiState( when (followedTopicToTopicResult) { is Result.Success -> { val (followedTopics, topic) = followedTopicToTopicResult.data - val followed = followedTopics.contains(topicId) TopicUiState.Success( followableTopic = FollowableTopic( topic = topic, - isFollowed = followed, + isFollowed = topicId in followedTopics, ), ) } - is Result.Loading -> { - TopicUiState.Loading - } - - is Result.Error -> { - TopicUiState.Error - } + is Result.Loading -> TopicUiState.Loading + is Result.Error -> TopicUiState.Error } } } @@ -151,38 +144,25 @@ private fun newsUiState( val bookmark: Flow> = userDataRepository.userData .map { it.bookmarkedNewsResources } - return combine( - newsStream, - bookmark, - ::Pair, - ) + return combine(newsStream, bookmark, ::Pair) .asResult() .map { newsToBookmarksResult -> when (newsToBookmarksResult) { - is Result.Success -> { - val news = newsToBookmarksResult.data.first - NewsUiState.Success(news) - } - - is Result.Loading -> { - NewsUiState.Loading - } - - is Result.Error -> { - NewsUiState.Error - } + is Result.Success -> NewsUiState.Success(newsToBookmarksResult.data.first) + is Result.Loading -> NewsUiState.Loading + is Result.Error -> NewsUiState.Error } } } sealed interface TopicUiState { data class Success(val followableTopic: FollowableTopic) : TopicUiState - object Error : TopicUiState - object Loading : TopicUiState + data object Error : TopicUiState + data object Loading : TopicUiState } sealed interface NewsUiState { data class Success(val news: List) : NewsUiState - object Error : NewsUiState - object Loading : NewsUiState + data object Error : NewsUiState + data object Loading : NewsUiState } diff --git a/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/navigation/InterestsNavigation.kt b/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/navigation/TopicNavigation.kt similarity index 50% rename from feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/navigation/InterestsNavigation.kt rename to feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/navigation/TopicNavigation.kt index 7558ec48d..fabb82b10 100644 --- a/feature/interests/src/main/java/com/google/samples/apps/nowinandroid/feature/interests/navigation/InterestsNavigation.kt +++ b/feature/topic/src/main/kotlin/com/google/samples/apps/nowinandroid/feature/topic/navigation/TopicNavigation.kt @@ -14,33 +14,33 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.feature.interests.navigation +package com.google.samples.apps.nowinandroid.feature.topic.navigation import androidx.navigation.NavController import androidx.navigation.NavGraphBuilder -import androidx.navigation.NavOptions +import androidx.navigation.NavOptionsBuilder import androidx.navigation.compose.composable -import androidx.navigation.navigation -import com.google.samples.apps.nowinandroid.feature.interests.InterestsRoute +import com.google.samples.apps.nowinandroid.feature.topic.TopicScreen +import kotlinx.serialization.Serializable -private const val INTERESTS_GRAPH_ROUTE_PATTERN = "interests_graph" -const val interestsRoute = "interests_route" +@Serializable data class TopicRoute(val id: String) -fun NavController.navigateToInterestsGraph(navOptions: NavOptions? = null) { - this.navigate(INTERESTS_GRAPH_ROUTE_PATTERN, navOptions) +fun NavController.navigateToTopic(topicId: String, navOptions: NavOptionsBuilder.() -> Unit = {}) { + navigate(route = TopicRoute(topicId)) { + navOptions() + } } -fun NavGraphBuilder.interestsGraph( +fun NavGraphBuilder.topicScreen( + showBackButton: Boolean, + onBackClick: () -> Unit, onTopicClick: (String) -> Unit, - nestedGraphs: NavGraphBuilder.() -> Unit, ) { - navigation( - route = INTERESTS_GRAPH_ROUTE_PATTERN, - startDestination = interestsRoute, - ) { - composable(route = interestsRoute) { - InterestsRoute(onTopicClick) - } - nestedGraphs() + composable { + TopicScreen( + showBackButton = showBackButton, + onBackClick = onBackClick, + onTopicClick = onTopicClick, + ) } } diff --git a/feature/topic/src/main/res/drawable/feature_topic_ic_topic_placeholder.xml b/feature/topic/src/main/res/drawable/feature_topic_ic_topic_placeholder.xml new file mode 100644 index 000000000..0518401da --- /dev/null +++ b/feature/topic/src/main/res/drawable/feature_topic_ic_topic_placeholder.xml @@ -0,0 +1,55 @@ + + + + + + + + + + diff --git a/feature/topic/src/main/res/values/strings.xml b/feature/topic/src/main/res/values/strings.xml index 284f2f7b2..fe4a6dc29 100644 --- a/feature/topic/src/main/res/values/strings.xml +++ b/feature/topic/src/main/res/values/strings.xml @@ -15,5 +15,6 @@ limitations under the License. --> - Loading topic + Loading topic + Select an Interest diff --git a/feature/topic/src/test/java/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModelTest.kt b/feature/topic/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModelTest.kt similarity index 87% rename from feature/topic/src/test/java/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModelTest.kt rename to feature/topic/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModelTest.kt index 8c6253d60..34f21a59a 100644 --- a/feature/topic/src/test/java/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModelTest.kt +++ b/feature/topic/src/test/kotlin/com/google/samples/apps/nowinandroid/feature/topic/TopicViewModelTest.kt @@ -17,6 +17,7 @@ package com.google.samples.apps.nowinandroid.feature.topic import androidx.lifecycle.SavedStateHandle +import androidx.navigation.testing.invoke import com.google.samples.apps.nowinandroid.core.data.repository.CompositeUserNewsResourceRepository import com.google.samples.apps.nowinandroid.core.model.data.FollowableTopic import com.google.samples.apps.nowinandroid.core.model.data.NewsResource @@ -25,7 +26,7 @@ import com.google.samples.apps.nowinandroid.core.testing.repository.TestNewsRepo import com.google.samples.apps.nowinandroid.core.testing.repository.TestTopicsRepository import com.google.samples.apps.nowinandroid.core.testing.repository.TestUserDataRepository import com.google.samples.apps.nowinandroid.core.testing.util.MainDispatcherRule -import com.google.samples.apps.nowinandroid.feature.topic.navigation.topicIdArg +import com.google.samples.apps.nowinandroid.feature.topic.navigation.TopicRoute import kotlinx.coroutines.flow.collect import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.first @@ -36,13 +37,22 @@ import kotlinx.datetime.Instant import org.junit.Before import org.junit.Rule import org.junit.Test +import org.junit.runner.RunWith +import org.robolectric.RobolectricTestRunner import kotlin.test.assertEquals import kotlin.test.assertIs /** * To learn more about how this test handles Flows created with stateIn, see * https://developer.android.com/kotlin/flow/test#statein + * + * These tests use Robolectric because the subject under test (the ViewModel) uses + * `SavedStateHandle.toRoute` which has a dependency on `android.os.Bundle`. + * + * TODO: Remove Robolectric if/when AndroidX Navigation API is updated to remove Android dependency. + * * See b/340966212. */ +@RunWith(RobolectricTestRunner::class) class TopicViewModelTest { @get:Rule @@ -60,7 +70,9 @@ class TopicViewModelTest { @Before fun setup() { viewModel = TopicViewModel( - savedStateHandle = SavedStateHandle(mapOf(topicIdArg to testInputTopics[0].topic.id)), + savedStateHandle = SavedStateHandle( + route = TopicRoute(id = testInputTopics[0].topic.id), + ), userDataRepository = userDataRepository, topicsRepository = topicsRepository, userNewsResourceRepository = userNewsResourceRepository, @@ -73,7 +85,7 @@ class TopicViewModelTest { @Test fun uiStateTopic_whenSuccess_matchesTopicFromRepository() = runTest { - val collectJob = launch(UnconfinedTestDispatcher()) { viewModel.topicUiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.topicUiState.collect() } topicsRepository.sendTopics(testInputTopics.map(FollowableTopic::topic)) userDataRepository.setFollowedTopicIds(setOf(testInputTopics[1].topic.id)) @@ -85,13 +97,11 @@ class TopicViewModelTest { ).first() assertEquals(topicFromRepository, item.followableTopic.topic) - - collectJob.cancel() } @Test fun uiStateNews_whenInitialized_thenShowLoading() = runTest { - assertEquals(NewsUiState.Loading, viewModel.newUiState.value) + assertEquals(NewsUiState.Loading, viewModel.newsUiState.value) } @Test @@ -101,37 +111,33 @@ class TopicViewModelTest { @Test fun uiStateTopic_whenFollowedIdsSuccessAndTopicLoading_thenShowLoading() = runTest { - val collectJob = launch(UnconfinedTestDispatcher()) { viewModel.topicUiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.topicUiState.collect() } userDataRepository.setFollowedTopicIds(setOf(testInputTopics[1].topic.id)) assertEquals(TopicUiState.Loading, viewModel.topicUiState.value) - - collectJob.cancel() } @Test fun uiStateTopic_whenFollowedIdsSuccessAndTopicSuccess_thenTopicSuccessAndNewsLoading() = runTest { - val collectJob = launch(UnconfinedTestDispatcher()) { viewModel.topicUiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.topicUiState.collect() } topicsRepository.sendTopics(testInputTopics.map { it.topic }) userDataRepository.setFollowedTopicIds(setOf(testInputTopics[1].topic.id)) val topicUiState = viewModel.topicUiState.value - val newsUiState = viewModel.newUiState.value + val newsUiState = viewModel.newsUiState.value assertIs(topicUiState) assertIs(newsUiState) - - collectJob.cancel() } @Test fun uiStateTopic_whenFollowedIdsSuccessAndTopicSuccessAndNewsIsSuccess_thenAllSuccess() = runTest { - val collectJob = launch(UnconfinedTestDispatcher()) { + backgroundScope.launch(UnconfinedTestDispatcher()) { combine( viewModel.topicUiState, - viewModel.newUiState, + viewModel.newsUiState, ::Pair, ).collect() } @@ -139,17 +145,15 @@ class TopicViewModelTest { userDataRepository.setFollowedTopicIds(setOf(testInputTopics[1].topic.id)) newsRepository.sendNewsResources(sampleNewsResources) val topicUiState = viewModel.topicUiState.value - val newsUiState = viewModel.newUiState.value + val newsUiState = viewModel.newsUiState.value assertIs(topicUiState) assertIs(newsUiState) - - collectJob.cancel() } @Test fun uiStateTopic_whenFollowingTopic_thenShowUpdatedTopic() = runTest { - val collectJob = launch(UnconfinedTestDispatcher()) { viewModel.topicUiState.collect() } + backgroundScope.launch(UnconfinedTestDispatcher()) { viewModel.topicUiState.collect() } topicsRepository.sendTopics(testInputTopics.map { it.topic }) // Set which topic IDs are followed, not including 0. @@ -161,8 +165,6 @@ class TopicViewModelTest { TopicUiState.Success(followableTopic = testOutputTopics[0]), viewModel.topicUiState.value, ) - - collectJob.cancel() } } diff --git a/generateModuleGraphs.sh b/generateModuleGraphs.sh new file mode 100755 index 000000000..3c3583e67 --- /dev/null +++ b/generateModuleGraphs.sh @@ -0,0 +1,130 @@ +#!/bin/bash +# +# Copyright 2024 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# Script to generate dependency graphs for each of the modules. The --exclude-module parameter can +# be used to exclude modules which are not part of the root dependency graph (and which, if included +# would cause the script to fail. +# +# Usage: generateModuleGraphs.sh --exclude-module :benchmarks --exclude-module :lint --exclude-module :ui-test-hilt-manifest + +# Check if the dot command is available +if ! command -v dot &> /dev/null +then + echo "The 'dot' command is not found. This is required to generate SVGs from the Graphviz files." + echo "Installation instructions:" + echo " - On macOS: You can install Graphviz using Homebrew with the command: 'brew install graphviz'" + echo " - On Ubuntu: You can install Graphviz using APT with the command: 'sudo apt-get install graphviz'" + exit 1 +fi + +# Check if the svgo command is available +if ! command -v svgo &> /dev/null +then + echo "The 'svgo' command is not found. This is required to cleanup and compress SVGs." + echo "Installation instructions available at https://github.com/svg/svgo." + exit 1 +fi + +# Check for a version of grep which supports Perl regex. +# On MacOS the OS installed grep doesn't support Perl regex so check for the existence of the +# GNU version instead which is prefixed with 'g' to distinguish it from the OS installed version. + if grep -P "" /dev/null > /dev/null 2>&1; then + GREP_COMMAND=grep +elif command -v ggrep &> /dev/null; then + GREP_COMMAND=ggrep +else + echo "You don't have a version of 'grep' installed which supports Perl regular expressions." + echo "On MacOS you can install one using Homebrew with the command: 'brew install grep'" + exit 1 +fi + +# Initialize an array to store excluded modules +excluded_modules=() + +# Parse command-line arguments for excluded modules +while [[ $# -gt 0 ]]; do + case "$1" in + --exclude-module) + excluded_modules+=("$2") + shift # Past argument + shift # Past value + ;; + *) + echo "Unknown parameter passed: $1" + exit 1 + ;; + esac +done + +# Get the module paths +module_paths=$(${GREP_COMMAND} -oP 'include\("\K[^"]+' settings.gradle.kts) + +# Ensure the output directory exists +mkdir -p docs/images/graphs/ + +# Function to check and create a README.md for modules which don't have one. +check_and_create_readme() { + local module_path="$1" + local file_name="$2" + + local readme_path="${module_path:1}" # Remove leading colon + readme_path=${readme_path//:/\/} # Replace colons with slashes + readme_path="${readme_path}/README.md" #Append the filename + + # Check if README.md exists and create it if not + if [[ ! -f "$readme_path" ]]; then + echo "Creating README.md for ${module_path}" + + # Determine the depth of the module based on the number of colons + local depth=$(awk -F: '{print NF-1}' <<< "${module_path}") + + # Construct the relative image path with the correct number of "../" + local relative_image_path="../" + for ((i=1; i<$depth; i++)); do + relative_image_path+="../" + done + relative_image_path+="docs/images/graphs/${file_name}.svg" + + echo "# ${module_path} module" > "$readme_path" + echo "## Dependency graph" >> "$readme_path" + echo "![Dependency graph](${relative_image_path})" >> "$readme_path" + fi +} + +# Loop through each module path +echo "$module_paths" | while read -r module_path; do + # Check if the module is in the excluded list + if [[ ! " ${excluded_modules[@]} " =~ " ${module_path} " ]]; then + # Derive the filename from the module path + file_name="dep_graph${module_path//:/_}" # Replace colons with underscores + file_name="${file_name//-/_}" # Replace dashes with underscores + + check_and_create_readme "$module_path" "$file_name" + + # Generate the .gv file in a temporary location + # /dev/null && printf '%s +' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -144,7 +148,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac @@ -152,7 +156,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then '' | soft) :;; #( *) # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -201,11 +205,11 @@ fi # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ diff --git a/gradlew.bat b/gradlew.bat index 6689b85be..9b42019c7 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## @@ -43,11 +45,11 @@ set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 if %ERRORLEVEL% equ 0 goto execute -echo. -echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail @@ -57,11 +59,11 @@ set JAVA_EXE=%JAVA_HOME%/bin/java.exe if exist "%JAVA_EXE%" goto execute -echo. -echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% -echo. -echo Please set the JAVA_HOME variable in your environment to match the -echo location of your Java installation. +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 goto fail diff --git a/lint/README.md b/lint/README.md deleted file mode 100644 index 3eceb434b..000000000 --- a/lint/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# :lint module - -![Dependency graph](../docs/images/graphs/dep_graph_lint.png) diff --git a/lint/build.gradle.kts b/lint/build.gradle.kts index 35b6ec1e8..f1722fa78 100644 --- a/lint/build.gradle.kts +++ b/lint/build.gradle.kts @@ -14,12 +14,12 @@ * limitations under the License. */ -import org.jetbrains.kotlin.gradle.tasks.KotlinCompile +import org.jetbrains.kotlin.gradle.dsl.JvmTarget plugins { `java-library` kotlin("jvm") - id("nowinandroid.android.lint") + alias(libs.plugins.nowinandroid.android.lint) } java { @@ -29,13 +29,16 @@ java { targetCompatibility = JavaVersion.VERSION_11 } -tasks.withType().configureEach { - kotlinOptions { - jvmTarget = JavaVersion.VERSION_11.toString() +kotlin { + compilerOptions { + jvmTarget = JvmTarget.JVM_11 } } dependencies { compileOnly(libs.kotlin.stdlib) compileOnly(libs.lint.api) + testImplementation(libs.kotlin.test) + testImplementation(libs.lint.checks) + testImplementation(libs.lint.tests) } diff --git a/lint/src/main/java/com/google/samples/apps/nowinandroid/lint/designsystem/DesignSystemIssueRegistry.kt b/lint/src/main/kotlin/com/google/samples/apps/nowinandroid/lint/NiaIssueRegistry.kt similarity index 76% rename from lint/src/main/java/com/google/samples/apps/nowinandroid/lint/designsystem/DesignSystemIssueRegistry.kt rename to lint/src/main/kotlin/com/google/samples/apps/nowinandroid/lint/NiaIssueRegistry.kt index bb7e971e3..b806312fd 100644 --- a/lint/src/main/java/com/google/samples/apps/nowinandroid/lint/designsystem/DesignSystemIssueRegistry.kt +++ b/lint/src/main/kotlin/com/google/samples/apps/nowinandroid/lint/NiaIssueRegistry.kt @@ -14,18 +14,20 @@ * limitations under the License. */ -package com.google.samples.apps.nowinandroid.lint.designsystem +package com.google.samples.apps.nowinandroid.lint import com.android.tools.lint.client.api.IssueRegistry import com.android.tools.lint.client.api.Vendor import com.android.tools.lint.detector.api.CURRENT_API +import com.google.samples.apps.nowinandroid.lint.designsystem.DesignSystemDetector -/** - * An issue registry that checks for incorrect usages of Compose Material APIs over equivalents in - * the Now in Android design system module. - */ -class DesignSystemIssueRegistry : IssueRegistry() { - override val issues = listOf(DesignSystemDetector.ISSUE) +class NiaIssueRegistry : IssueRegistry() { + + override val issues = listOf( + DesignSystemDetector.ISSUE, + TestMethodNameDetector.FORMAT, + TestMethodNameDetector.PREFIX, + ) override val api: Int = CURRENT_API diff --git a/lint/src/main/kotlin/com/google/samples/apps/nowinandroid/lint/TestMethodNameDetector.kt b/lint/src/main/kotlin/com/google/samples/apps/nowinandroid/lint/TestMethodNameDetector.kt new file mode 100644 index 000000000..532994d99 --- /dev/null +++ b/lint/src/main/kotlin/com/google/samples/apps/nowinandroid/lint/TestMethodNameDetector.kt @@ -0,0 +1,126 @@ +/* + * Copyright 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.lint + +import com.android.tools.lint.detector.api.AnnotationInfo +import com.android.tools.lint.detector.api.AnnotationUsageInfo +import com.android.tools.lint.detector.api.Category.Companion.TESTING +import com.android.tools.lint.detector.api.Detector +import com.android.tools.lint.detector.api.Implementation +import com.android.tools.lint.detector.api.Issue +import com.android.tools.lint.detector.api.JavaContext +import com.android.tools.lint.detector.api.LintFix +import com.android.tools.lint.detector.api.Scope.JAVA_FILE +import com.android.tools.lint.detector.api.Scope.TEST_SOURCES +import com.android.tools.lint.detector.api.Severity.WARNING +import com.android.tools.lint.detector.api.SourceCodeScanner +import com.android.tools.lint.detector.api.TextFormat.RAW +import com.intellij.psi.PsiMethod +import org.jetbrains.uast.UElement +import java.util.EnumSet +import kotlin.io.path.Path + +/** + * A detector that checks for common patterns in naming the test methods: + * - [detectPrefix] removes unnecessary "test" prefix in all unit test. + * - [detectFormat] Checks the `given_when_then` format of Android instrumented tests (backticks are not supported). + */ +class TestMethodNameDetector : Detector(), SourceCodeScanner { + + override fun applicableAnnotations() = listOf("org.junit.Test") + + override fun visitAnnotationUsage( + context: JavaContext, + element: UElement, + annotationInfo: AnnotationInfo, + usageInfo: AnnotationUsageInfo, + ) { + val method = usageInfo.referenced as? PsiMethod ?: return + + method.detectPrefix(context, usageInfo) + method.detectFormat(context, usageInfo) + } + + private fun JavaContext.isAndroidTest() = Path("androidTest") in file.toPath() + + private fun PsiMethod.detectPrefix( + context: JavaContext, + usageInfo: AnnotationUsageInfo, + ) { + if (!name.startsWith("test")) return + context.report( + issue = PREFIX, + scope = usageInfo.usage, + location = context.getNameLocation(this), + message = PREFIX.getBriefDescription(RAW), + quickfixData = LintFix.create() + .name("Remove prefix") + .replace().pattern("""test[\s_]*""") + .with("") + .autoFix() + .build(), + ) + } + + private fun PsiMethod.detectFormat( + context: JavaContext, + usageInfo: AnnotationUsageInfo, + ) { + if (!context.isAndroidTest()) return + if ("""[^\W_]+(_[^\W_]+){1,2}""".toRegex().matches(name)) return + context.report( + issue = FORMAT, + scope = usageInfo.usage, + location = context.getNameLocation(this), + message = FORMAT.getBriefDescription(RAW), + ) + } + + companion object { + + private fun issue( + id: String, + briefDescription: String, + explanation: String, + ): Issue = Issue.create( + id = id, + briefDescription = briefDescription, + explanation = explanation, + category = TESTING, + priority = 5, + severity = WARNING, + implementation = Implementation( + TestMethodNameDetector::class.java, + EnumSet.of(JAVA_FILE, TEST_SOURCES), + ), + ) + + @JvmField + val PREFIX: Issue = issue( + id = "TestMethodPrefix", + briefDescription = "Test method starts with `test`", + explanation = "Test method should not start with `test`.", + ) + + @JvmField + val FORMAT: Issue = issue( + id = "TestMethodFormat", + briefDescription = "Test method does not follow the `given_when_then` or `when_then` format", + explanation = "Test method should follow the `given_when_then` or `when_then` format.", + ) + } +} diff --git a/lint/src/main/java/com/google/samples/apps/nowinandroid/lint/designsystem/DesignSystemDetector.kt b/lint/src/main/kotlin/com/google/samples/apps/nowinandroid/lint/designsystem/DesignSystemDetector.kt similarity index 95% rename from lint/src/main/java/com/google/samples/apps/nowinandroid/lint/designsystem/DesignSystemDetector.kt rename to lint/src/main/kotlin/com/google/samples/apps/nowinandroid/lint/designsystem/DesignSystemDetector.kt index 4c9d55764..09af17db9 100644 --- a/lint/src/main/java/com/google/samples/apps/nowinandroid/lint/designsystem/DesignSystemDetector.kt +++ b/lint/src/main/kotlin/com/google/samples/apps/nowinandroid/lint/designsystem/DesignSystemDetector.kt @@ -34,15 +34,13 @@ import org.jetbrains.uast.UQualifiedReferenceExpression */ class DesignSystemDetector : Detector(), Detector.UastScanner { - override fun getApplicableUastTypes(): List> { - return listOf( - UCallExpression::class.java, - UQualifiedReferenceExpression::class.java, - ) - } + override fun getApplicableUastTypes(): List> = listOf( + UCallExpression::class.java, + UQualifiedReferenceExpression::class.java, + ) - override fun createUastHandler(context: JavaContext): UElementHandler { - return object : UElementHandler() { + override fun createUastHandler(context: JavaContext): UElementHandler = + object : UElementHandler() { override fun visitCallExpression(node: UCallExpression) { val name = node.methodName ?: return val preferredName = METHOD_NAMES[name] ?: return @@ -55,7 +53,6 @@ class DesignSystemDetector : Detector(), Detector.UastScanner { reportIssue(context, node, name, preferredName) } } - } companion object { @JvmField diff --git a/lint/src/main/resources/META-INF/services/com.android.tools.lint.client.api.IssueRegistry b/lint/src/main/resources/META-INF/services/com.android.tools.lint.client.api.IssueRegistry index 4b8002da2..e673c27ff 100644 --- a/lint/src/main/resources/META-INF/services/com.android.tools.lint.client.api.IssueRegistry +++ b/lint/src/main/resources/META-INF/services/com.android.tools.lint.client.api.IssueRegistry @@ -14,4 +14,4 @@ # limitations under the License. # -com.google.samples.apps.nowinandroid.lint.designsystem.DesignSystemIssueRegistry +com.google.samples.apps.nowinandroid.lint.NiaIssueRegistry diff --git a/lint/src/test/kotlin/com/google/samples/apps/nowinandroid/lint/TestMethodNameDetectorTest.kt b/lint/src/test/kotlin/com/google/samples/apps/nowinandroid/lint/TestMethodNameDetectorTest.kt new file mode 100644 index 000000000..8da173285 --- /dev/null +++ b/lint/src/test/kotlin/com/google/samples/apps/nowinandroid/lint/TestMethodNameDetectorTest.kt @@ -0,0 +1,123 @@ +/* + * Copyright 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.lint + +import com.android.tools.lint.checks.infrastructure.TestFile +import com.android.tools.lint.checks.infrastructure.TestFiles.kotlin +import com.android.tools.lint.checks.infrastructure.TestLintTask.lint +import com.google.samples.apps.nowinandroid.lint.TestMethodNameDetector.Companion.FORMAT +import com.google.samples.apps.nowinandroid.lint.TestMethodNameDetector.Companion.PREFIX +import org.junit.Test + +class TestMethodNameDetectorTest { + + @Test + fun `detect prefix`() { + lint().issues(PREFIX) + .files( + JUNIT_TEST_STUB, + kotlin( + """ + import org.junit.Test + class Test { + @Test + fun foo() = Unit + @Test + fun test_foo() = Unit + @Test + fun `test foo`() = Unit + } + """, + ).indented(), + ) + .run() + .expect( + """ + src/Test.kt:6: Warning: Test method starts with test [TestMethodPrefix] + fun test_foo() = Unit + ~~~~~~~~ + src/Test.kt:8: Warning: Test method starts with test [TestMethodPrefix] + fun `test foo`() = Unit + ~~~~~~~~~~ + 0 errors, 2 warnings + """.trimIndent(), + ) + .expectFixDiffs( + """ + Autofix for src/Test.kt line 6: Remove prefix: + @@ -6 +6 + - fun test_foo() = Unit + + fun foo() = Unit + Autofix for src/Test.kt line 8: Remove prefix: + @@ -8 +8 + - fun `test foo`() = Unit + + fun `foo`() = Unit + """.trimIndent(), + ) + } + + @Test + fun `detect format`() { + lint().issues(FORMAT) + .files( + JUNIT_TEST_STUB, + kotlin( + "src/androidTest/com/example/Test.kt", + """ + import org.junit.Test + class Test { + @Test + fun when_then() = Unit + @Test + fun given_when_then() = Unit + + @Test + fun foo() = Unit + @Test + fun foo_bar_baz_qux() = Unit + @Test + fun `foo bar baz`() = Unit + } + """, + ).indented(), + ) + .run() + .expect( + """ + src/androidTest/com/example/Test.kt:9: Warning: Test method does not follow the given_when_then or when_then format [TestMethodFormat] + fun foo() = Unit + ~~~ + src/androidTest/com/example/Test.kt:11: Warning: Test method does not follow the given_when_then or when_then format [TestMethodFormat] + fun foo_bar_baz_qux() = Unit + ~~~~~~~~~~~~~~~ + src/androidTest/com/example/Test.kt:13: Warning: Test method does not follow the given_when_then or when_then format [TestMethodFormat] + fun `foo bar baz`() = Unit + ~~~~~~~~~~~~~ + 0 errors, 3 warnings + """.trimIndent(), + ) + } + + private companion object { + private val JUNIT_TEST_STUB: TestFile = kotlin( + """ + package org.junit + annotation class Test + """, + ).indented() + } +} diff --git a/lint/src/test/kotlin/com/google/samples/apps/nowinandroid/lint/designsystem/DesignSystemDetectorTest.kt b/lint/src/test/kotlin/com/google/samples/apps/nowinandroid/lint/designsystem/DesignSystemDetectorTest.kt new file mode 100644 index 000000000..188a52ee0 --- /dev/null +++ b/lint/src/test/kotlin/com/google/samples/apps/nowinandroid/lint/designsystem/DesignSystemDetectorTest.kt @@ -0,0 +1,164 @@ +/* + * Copyright 2023 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.samples.apps.nowinandroid.lint.designsystem + +import com.android.tools.lint.checks.infrastructure.TestFile +import com.android.tools.lint.checks.infrastructure.TestFiles.kotlin +import com.android.tools.lint.checks.infrastructure.TestLintTask.lint +import com.google.samples.apps.nowinandroid.lint.designsystem.DesignSystemDetector.Companion.ISSUE +import com.google.samples.apps.nowinandroid.lint.designsystem.DesignSystemDetector.Companion.METHOD_NAMES +import com.google.samples.apps.nowinandroid.lint.designsystem.DesignSystemDetector.Companion.RECEIVER_NAMES +import org.junit.Test + +class DesignSystemDetectorTest { + + @Test + fun `detect replacements of Composable`() { + lint() + .issues(ISSUE) + .allowMissingSdk() + .files( + COMPOSABLE_STUB, + STUBS, + @Suppress("LintImplTrimIndent") + kotlin( + """ + |import androidx.compose.runtime.Composable + | + |@Composable + |fun App() { + ${METHOD_NAMES.keys.joinToString("\n") { "| $it()" }} + |} + """.trimMargin(), + ).indented(), + ) + .run() + .expect( + """ + src/test.kt:5: Error: Using MaterialTheme instead of NiaTheme [DesignSystem] + MaterialTheme() + ~~~~~~~~~~~~~~~ + src/test.kt:6: Error: Using Button instead of NiaButton [DesignSystem] + Button() + ~~~~~~~~ + src/test.kt:7: Error: Using OutlinedButton instead of NiaOutlinedButton [DesignSystem] + OutlinedButton() + ~~~~~~~~~~~~~~~~ + src/test.kt:8: Error: Using TextButton instead of NiaTextButton [DesignSystem] + TextButton() + ~~~~~~~~~~~~ + src/test.kt:9: Error: Using FilterChip instead of NiaFilterChip [DesignSystem] + FilterChip() + ~~~~~~~~~~~~ + src/test.kt:10: Error: Using ElevatedFilterChip instead of NiaFilterChip [DesignSystem] + ElevatedFilterChip() + ~~~~~~~~~~~~~~~~~~~~ + src/test.kt:11: Error: Using NavigationBar instead of NiaNavigationBar [DesignSystem] + NavigationBar() + ~~~~~~~~~~~~~~~ + src/test.kt:12: Error: Using NavigationBarItem instead of NiaNavigationBarItem [DesignSystem] + NavigationBarItem() + ~~~~~~~~~~~~~~~~~~~ + src/test.kt:13: Error: Using NavigationRail instead of NiaNavigationRail [DesignSystem] + NavigationRail() + ~~~~~~~~~~~~~~~~ + src/test.kt:14: Error: Using NavigationRailItem instead of NiaNavigationRailItem [DesignSystem] + NavigationRailItem() + ~~~~~~~~~~~~~~~~~~~~ + src/test.kt:15: Error: Using TabRow instead of NiaTabRow [DesignSystem] + TabRow() + ~~~~~~~~ + src/test.kt:16: Error: Using Tab instead of NiaTab [DesignSystem] + Tab() + ~~~~~ + src/test.kt:17: Error: Using IconToggleButton instead of NiaIconToggleButton [DesignSystem] + IconToggleButton() + ~~~~~~~~~~~~~~~~~~ + src/test.kt:18: Error: Using FilledIconToggleButton instead of NiaIconToggleButton [DesignSystem] + FilledIconToggleButton() + ~~~~~~~~~~~~~~~~~~~~~~~~ + src/test.kt:19: Error: Using FilledTonalIconToggleButton instead of NiaIconToggleButton [DesignSystem] + FilledTonalIconToggleButton() + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + src/test.kt:20: Error: Using OutlinedIconToggleButton instead of NiaIconToggleButton [DesignSystem] + OutlinedIconToggleButton() + ~~~~~~~~~~~~~~~~~~~~~~~~~~ + src/test.kt:21: Error: Using CenterAlignedTopAppBar instead of NiaTopAppBar [DesignSystem] + CenterAlignedTopAppBar() + ~~~~~~~~~~~~~~~~~~~~~~~~ + src/test.kt:22: Error: Using SmallTopAppBar instead of NiaTopAppBar [DesignSystem] + SmallTopAppBar() + ~~~~~~~~~~~~~~~~ + src/test.kt:23: Error: Using MediumTopAppBar instead of NiaTopAppBar [DesignSystem] + MediumTopAppBar() + ~~~~~~~~~~~~~~~~~ + src/test.kt:24: Error: Using LargeTopAppBar instead of NiaTopAppBar [DesignSystem] + LargeTopAppBar() + ~~~~~~~~~~~~~~~~ + 20 errors, 0 warnings + """.trimIndent(), + ) + } + + @Test + fun `detect replacements of Receiver`() { + lint() + .issues(ISSUE) + .allowMissingSdk() + .files( + COMPOSABLE_STUB, + STUBS, + @Suppress("LintImplTrimIndent") + kotlin( + """ + |fun main() { + ${RECEIVER_NAMES.keys.joinToString("\n") { "| $it.toString()" }} + |} + """.trimMargin(), + ).indented(), + ) + .run() + .expect( + """ + src/test.kt:2: Error: Using Icons instead of NiaIcons [DesignSystem] + Icons.toString() + ~~~~~~~~~~~~~~~~ + 1 errors, 0 warnings + """.trimIndent(), + ) + } + + private companion object { + + private val COMPOSABLE_STUB: TestFile = kotlin( + """ + package androidx.compose.runtime + annotation class Composable + """.trimIndent(), + ).indented() + + private val STUBS: TestFile = kotlin( + """ + |import androidx.compose.runtime.Composable + | + ${METHOD_NAMES.keys.joinToString("\n") { "|@Composable fun $it() = {}" }} + ${RECEIVER_NAMES.keys.joinToString("\n") { "|object $it" }} + | + """.trimMargin(), + ).indented() + } +} diff --git a/settings.gradle.kts b/settings.gradle.kts index d0c477b3d..2b8c6e45c 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -17,37 +17,53 @@ pluginManagement { includeBuild("build-logic") repositories { - google() + google { + content { + includeGroupByRegex("com\\.android.*") + includeGroupByRegex("com\\.google.*") + includeGroupByRegex("androidx.*") + } + } mavenCentral() gradlePluginPortal() } } dependencyResolutionManagement { - repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositoriesMode = RepositoriesMode.FAIL_ON_PROJECT_REPOS repositories { - google() + google { + content { + includeGroupByRegex("com\\.android.*") + includeGroupByRegex("com\\.google.*") + includeGroupByRegex("androidx.*") + } + } mavenCentral() } } rootProject.name = "nowinandroid" + +enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") include(":app") include(":app-nia-catalog") include(":benchmarks") +include(":core:analytics") include(":core:common") include(":core:data") include(":core:data-test") include(":core:database") include(":core:datastore") +include(":core:datastore-proto") include(":core:datastore-test") include(":core:designsystem") include(":core:domain") include(":core:model") include(":core:network") -include(":core:ui") -include(":core:testing") -include(":core:analytics") include(":core:notifications") +include(":core:screenshot-testing") +include(":core:testing") +include(":core:ui") include(":feature:foryou") include(":feature:interests") @@ -59,3 +75,11 @@ include(":lint") include(":sync:work") include(":sync:sync-test") include(":ui-test-hilt-manifest") + +check(JavaVersion.current().isCompatibleWith(JavaVersion.VERSION_17)) { + """ + Now in Android requires JDK 17+ but it is currently using JDK ${JavaVersion.current()}. + Java Home: [${System.getProperty("java.home")}] + https://developer.android.com/build/jdks#jdk-config-in-studio + """.trimIndent() +} diff --git a/sync/README.md b/sync/README.md deleted file mode 100644 index b100e27ad..000000000 --- a/sync/README.md +++ /dev/null @@ -1,3 +0,0 @@ -# :sync module - -![Dependency graph](../docs/images/graphs/dep_graph_sync.png) diff --git a/sync/sync-test/README.md b/sync/sync-test/README.md new file mode 100644 index 000000000..78876290f --- /dev/null +++ b/sync/sync-test/README.md @@ -0,0 +1,3 @@ +# :sync:sync-test module +## Dependency graph +![Dependency graph](../../docs/images/graphs/dep_graph_sync_sync_test.svg) diff --git a/sync/sync-test/build.gradle.kts b/sync/sync-test/build.gradle.kts index 99909af6b..fd9af1882 100644 --- a/sync/sync-test/build.gradle.kts +++ b/sync/sync-test/build.gradle.kts @@ -14,8 +14,8 @@ * limitations under the License. */ plugins { - id("nowinandroid.android.library") - id("nowinandroid.android.hilt") + alias(libs.plugins.nowinandroid.android.library) + alias(libs.plugins.nowinandroid.hilt) } android { @@ -23,7 +23,7 @@ android { } dependencies { - api(project(":sync:work")) - implementation(project(":core:data")) - implementation(project(":core:testing")) + implementation(libs.hilt.android.testing) + implementation(projects.core.data) + implementation(projects.sync.work) } diff --git a/sync/sync-test/src/main/java/com/google/samples/apps/nowinandroid/core/sync/test/NeverSyncingSyncManager.kt b/sync/sync-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/sync/test/NeverSyncingSyncManager.kt similarity index 92% rename from sync/sync-test/src/main/java/com/google/samples/apps/nowinandroid/core/sync/test/NeverSyncingSyncManager.kt rename to sync/sync-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/sync/test/NeverSyncingSyncManager.kt index 2b0b4fb6a..c13b409e6 100644 --- a/sync/sync-test/src/main/java/com/google/samples/apps/nowinandroid/core/sync/test/NeverSyncingSyncManager.kt +++ b/sync/sync-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/sync/test/NeverSyncingSyncManager.kt @@ -21,7 +21,7 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOf import javax.inject.Inject -class NeverSyncingSyncManager @Inject constructor() : SyncManager { +internal class NeverSyncingSyncManager @Inject constructor() : SyncManager { override val isSyncing: Flow = flowOf(false) override fun requestSync() = Unit } diff --git a/sync/sync-test/src/main/java/com/google/samples/apps/nowinandroid/core/sync/test/TestSyncModule.kt b/sync/sync-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/sync/test/TestSyncModule.kt similarity index 80% rename from sync/sync-test/src/main/java/com/google/samples/apps/nowinandroid/core/sync/test/TestSyncModule.kt rename to sync/sync-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/sync/test/TestSyncModule.kt index 0089450b5..ceca1cb5c 100644 --- a/sync/sync-test/src/main/java/com/google/samples/apps/nowinandroid/core/sync/test/TestSyncModule.kt +++ b/sync/sync-test/src/main/kotlin/com/google/samples/apps/nowinandroid/core/sync/test/TestSyncModule.kt @@ -18,6 +18,8 @@ package com.google.samples.apps.nowinandroid.core.sync.test import com.google.samples.apps.nowinandroid.core.data.util.SyncManager import com.google.samples.apps.nowinandroid.sync.di.SyncModule +import com.google.samples.apps.nowinandroid.sync.status.StubSyncSubscriber +import com.google.samples.apps.nowinandroid.sync.status.SyncSubscriber import dagger.Binds import dagger.Module import dagger.hilt.components.SingletonComponent @@ -28,9 +30,14 @@ import dagger.hilt.testing.TestInstallIn components = [SingletonComponent::class], replaces = [SyncModule::class], ) -interface TestSyncModule { +internal interface TestSyncModule { @Binds fun bindsSyncStatusMonitor( syncStatusMonitor: NeverSyncingSyncManager, ): SyncManager + + @Binds + fun bindsSyncSubscriber( + syncSubscriber: StubSyncSubscriber, + ): SyncSubscriber } diff --git a/sync/work/README.md b/sync/work/README.md new file mode 100644 index 000000000..2fe66d616 --- /dev/null +++ b/sync/work/README.md @@ -0,0 +1,3 @@ +# :sync:work module +## Dependency graph +![Dependency graph](../../docs/images/graphs/dep_graph_sync_work.svg) diff --git a/sync/work/build.gradle.kts b/sync/work/build.gradle.kts index 79902e486..7b4b55a18 100644 --- a/sync/work/build.gradle.kts +++ b/sync/work/build.gradle.kts @@ -14,9 +14,9 @@ * limitations under the License. */ plugins { - id("nowinandroid.android.library") - id("nowinandroid.android.library.jacoco") - id("nowinandroid.android.hilt") + alias(libs.plugins.nowinandroid.android.library) + alias(libs.plugins.nowinandroid.android.library.jacoco) + alias(libs.plugins.nowinandroid.hilt) } android { @@ -27,22 +27,20 @@ android { } dependencies { - implementation(project(":core:analytics")) - implementation(project(":core:common")) - implementation(project(":core:data")) - implementation(project(":core:datastore")) - implementation(project(":core:model")) - implementation(libs.androidx.lifecycle.livedata.ktx) + ksp(libs.hilt.ext.compiler) + implementation(libs.androidx.tracing.ktx) implementation(libs.androidx.work.ktx) - implementation(libs.firebase.cloud.messaging) implementation(libs.hilt.ext.work) - implementation(libs.kotlinx.coroutines.android) - - kapt(libs.hilt.ext.compiler) + implementation(projects.core.analytics) + implementation(projects.core.data) + implementation(projects.core.notifications) - testImplementation(project(":core:testing")) + prodImplementation(libs.firebase.cloud.messaging) + prodImplementation(platform(libs.firebase.bom)) - androidTestImplementation(project(":core:testing")) androidTestImplementation(libs.androidx.work.testing) + androidTestImplementation(libs.hilt.android.testing) + androidTestImplementation(libs.kotlinx.coroutines.guava) + androidTestImplementation(projects.core.testing) } diff --git a/sync/work/src/androidTest/java/com/google/samples/apps/nowinandroid/sync/workers/SyncWorkerTest.kt b/sync/work/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/sync/workers/SyncWorkerTest.kt similarity index 100% rename from sync/work/src/androidTest/java/com/google/samples/apps/nowinandroid/sync/workers/SyncWorkerTest.kt rename to sync/work/src/androidTest/kotlin/com/google/samples/apps/nowinandroid/sync/workers/SyncWorkerTest.kt diff --git a/sync/work/src/demo/java/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt b/sync/work/src/demo/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt similarity index 91% rename from sync/work/src/demo/java/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt rename to sync/work/src/demo/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt index 40d094cd2..91ef476f6 100644 --- a/sync/work/src/demo/java/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt +++ b/sync/work/src/demo/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt @@ -27,14 +27,14 @@ import dagger.hilt.components.SingletonComponent @Module @InstallIn(SingletonComponent::class) -interface SyncModule { +abstract class SyncModule { @Binds - fun bindsSyncStatusMonitor( + internal abstract fun bindsSyncStatusMonitor( syncStatusMonitor: WorkManagerSyncManager, ): SyncManager @Binds - fun bindsSyncSubscriber( + internal abstract fun bindsSyncSubscriber( syncSubscriber: StubSyncSubscriber, ): SyncSubscriber } diff --git a/sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/initializers/SyncInitializer.kt b/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/initializers/SyncInitializer.kt similarity index 94% rename from sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/initializers/SyncInitializer.kt rename to sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/initializers/SyncInitializer.kt index 00f61f17d..0a631534b 100644 --- a/sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/initializers/SyncInitializer.kt +++ b/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/initializers/SyncInitializer.kt @@ -28,7 +28,7 @@ object Sync { WorkManager.getInstance(context).apply { // Run sync on app startup and ensure only one sync worker runs at any time enqueueUniqueWork( - SyncWorkName, + SYNC_WORK_NAME, ExistingWorkPolicy.KEEP, SyncWorker.startUpSyncWork(), ) @@ -37,4 +37,4 @@ object Sync { } // This name should not be changed otherwise the app may have concurrent sync requests running -internal const val SyncWorkName = "SyncWorkName" +internal const val SYNC_WORK_NAME = "SyncWorkName" diff --git a/sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/initializers/SyncWorkHelpers.kt b/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/initializers/SyncWorkHelpers.kt similarity index 87% rename from sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/initializers/SyncWorkHelpers.kt rename to sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/initializers/SyncWorkHelpers.kt index 5abf2eee5..6c4a29373 100644 --- a/sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/initializers/SyncWorkHelpers.kt +++ b/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/initializers/SyncWorkHelpers.kt @@ -54,10 +54,10 @@ private fun Context.syncWorkNotification(): Notification { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { val channel = NotificationChannel( SYNC_NOTIFICATION_CHANNEL_ID, - getString(R.string.sync_notification_channel_name), + getString(R.string.sync_work_notification_channel_name), NotificationManager.IMPORTANCE_DEFAULT, ).apply { - description = getString(R.string.sync_notification_channel_description) + description = getString(R.string.sync_work_notification_channel_description) } // Register the channel with the system val notificationManager: NotificationManager? = @@ -71,9 +71,9 @@ private fun Context.syncWorkNotification(): Notification { SYNC_NOTIFICATION_CHANNEL_ID, ) .setSmallIcon( - com.google.samples.apps.nowinandroid.core.common.R.drawable.ic_nia_notification, + com.google.samples.apps.nowinandroid.core.notifications.R.drawable.core_notifications_ic_nia_notification, ) - .setContentTitle(getString(R.string.sync_notification_title)) + .setContentTitle(getString(R.string.sync_work_notification_title)) .setPriority(NotificationCompat.PRIORITY_DEFAULT) .build() } diff --git a/sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/status/StubSyncSubscriber.kt b/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/status/StubSyncSubscriber.kt similarity index 100% rename from sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/status/StubSyncSubscriber.kt rename to sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/status/StubSyncSubscriber.kt diff --git a/sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/status/SyncSubscriber.kt b/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/status/SyncSubscriber.kt similarity index 100% rename from sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/status/SyncSubscriber.kt rename to sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/status/SyncSubscriber.kt diff --git a/sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/status/WorkManagerSyncManager.kt b/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/status/WorkManagerSyncManager.kt similarity index 90% rename from sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/status/WorkManagerSyncManager.kt rename to sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/status/WorkManagerSyncManager.kt index 9131e4888..d4b6e0df6 100644 --- a/sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/status/WorkManagerSyncManager.kt +++ b/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/status/WorkManagerSyncManager.kt @@ -22,7 +22,7 @@ import androidx.work.WorkInfo import androidx.work.WorkInfo.State import androidx.work.WorkManager import com.google.samples.apps.nowinandroid.core.data.util.SyncManager -import com.google.samples.apps.nowinandroid.sync.initializers.SyncWorkName +import com.google.samples.apps.nowinandroid.sync.initializers.SYNC_WORK_NAME import com.google.samples.apps.nowinandroid.sync.workers.SyncWorker import dagger.hilt.android.qualifiers.ApplicationContext import kotlinx.coroutines.flow.Flow @@ -33,11 +33,11 @@ import javax.inject.Inject /** * [SyncManager] backed by [WorkInfo] from [WorkManager] */ -class WorkManagerSyncManager @Inject constructor( +internal class WorkManagerSyncManager @Inject constructor( @ApplicationContext private val context: Context, ) : SyncManager { override val isSyncing: Flow = - WorkManager.getInstance(context).getWorkInfosForUniqueWorkFlow(SyncWorkName) + WorkManager.getInstance(context).getWorkInfosForUniqueWorkFlow(SYNC_WORK_NAME) .map(List::anyRunning) .conflate() @@ -45,7 +45,7 @@ class WorkManagerSyncManager @Inject constructor( val workManager = WorkManager.getInstance(context) // Run sync on app startup and ensure only one sync worker runs at any time workManager.enqueueUniqueWork( - SyncWorkName, + SYNC_WORK_NAME, ExistingWorkPolicy.KEEP, SyncWorker.startUpSyncWork(), ) diff --git a/sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/workers/AnalyticsExtensions.kt b/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/workers/AnalyticsExtensions.kt similarity index 89% rename from sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/workers/AnalyticsExtensions.kt rename to sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/workers/AnalyticsExtensions.kt index d5250b330..f2d9283c0 100644 --- a/sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/workers/AnalyticsExtensions.kt +++ b/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/workers/AnalyticsExtensions.kt @@ -19,12 +19,12 @@ package com.google.samples.apps.nowinandroid.sync.workers import com.google.samples.apps.nowinandroid.core.analytics.AnalyticsEvent import com.google.samples.apps.nowinandroid.core.analytics.AnalyticsHelper -fun AnalyticsHelper.logSyncStarted() = +internal fun AnalyticsHelper.logSyncStarted() = logEvent( AnalyticsEvent(type = "network_sync_started"), ) -fun AnalyticsHelper.logSyncFinished(syncedSuccessfully: Boolean) { +internal fun AnalyticsHelper.logSyncFinished(syncedSuccessfully: Boolean) { val eventType = if (syncedSuccessfully) "network_sync_successful" else "network_sync_failed" logEvent( AnalyticsEvent(type = eventType), diff --git a/sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/workers/DelegatingWorker.kt b/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/workers/DelegatingWorker.kt similarity index 100% rename from sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/workers/DelegatingWorker.kt rename to sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/workers/DelegatingWorker.kt diff --git a/sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/workers/SyncWorker.kt b/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/workers/SyncWorker.kt similarity index 98% rename from sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/workers/SyncWorker.kt rename to sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/workers/SyncWorker.kt index 1948b49a3..ea5f36042 100644 --- a/sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/workers/SyncWorker.kt +++ b/sync/work/src/main/kotlin/com/google/samples/apps/nowinandroid/sync/workers/SyncWorker.kt @@ -48,7 +48,7 @@ import kotlinx.coroutines.withContext * sync functionality. */ @HiltWorker -class SyncWorker @AssistedInject constructor( +internal class SyncWorker @AssistedInject constructor( @Assisted private val appContext: Context, @Assisted workerParams: WorkerParameters, private val niaPreferences: NiaPreferencesDataSource, diff --git a/sync/work/src/main/res/values/strings.xml b/sync/work/src/main/res/values/strings.xml index e3fd73ff8..4d77f6a7b 100644 --- a/sync/work/src/main/res/values/strings.xml +++ b/sync/work/src/main/res/values/strings.xml @@ -15,8 +15,8 @@ limitations under the License. --> - Now in Android - Sync - Background tasks for Now in Android + Now in Android + Sync + Background tasks for Now in Android diff --git a/sync/work/src/main/AndroidManifest.xml b/sync/work/src/prod/AndroidManifest.xml similarity index 100% rename from sync/work/src/main/AndroidManifest.xml rename to sync/work/src/prod/AndroidManifest.xml diff --git a/sync/work/src/prod/java/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt b/sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt similarity index 83% rename from sync/work/src/prod/java/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt rename to sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt index af4508406..ceeb39548 100644 --- a/sync/work/src/prod/java/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt +++ b/sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/di/SyncModule.kt @@ -16,9 +16,9 @@ package com.google.samples.apps.nowinandroid.sync.di -import com.google.firebase.ktx.Firebase +import com.google.firebase.Firebase import com.google.firebase.messaging.FirebaseMessaging -import com.google.firebase.messaging.ktx.messaging +import com.google.firebase.messaging.messaging import com.google.samples.apps.nowinandroid.core.data.util.SyncManager import com.google.samples.apps.nowinandroid.sync.status.FirebaseSyncSubscriber import com.google.samples.apps.nowinandroid.sync.status.SyncSubscriber @@ -32,20 +32,20 @@ import javax.inject.Singleton @Module @InstallIn(SingletonComponent::class) -interface SyncModule { +abstract class SyncModule { @Binds - fun bindsSyncStatusMonitor( + internal abstract fun bindsSyncStatusMonitor( syncStatusMonitor: WorkManagerSyncManager, ): SyncManager @Binds - fun bindsSyncSubscriber( + internal abstract fun bindsSyncSubscriber( syncSubscriber: FirebaseSyncSubscriber, ): SyncSubscriber companion object { @Provides @Singleton - fun provideFirebaseMessaging(): FirebaseMessaging = Firebase.messaging + internal fun provideFirebaseMessaging(): FirebaseMessaging = Firebase.messaging } } diff --git a/sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/services/SyncNotificationsService.kt b/sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/services/SyncNotificationsService.kt similarity index 94% rename from sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/services/SyncNotificationsService.kt rename to sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/services/SyncNotificationsService.kt index e51e30164..c7297dd1a 100644 --- a/sync/work/src/main/java/com/google/samples/apps/nowinandroid/sync/services/SyncNotificationsService.kt +++ b/sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/services/SyncNotificationsService.kt @@ -25,7 +25,7 @@ import javax.inject.Inject private const val SYNC_TOPIC_SENDER = "/topics/sync" @AndroidEntryPoint -class SyncNotificationsService : FirebaseMessagingService() { +internal class SyncNotificationsService : FirebaseMessagingService() { @Inject lateinit var syncManager: SyncManager diff --git a/sync/work/src/prod/java/com/google/samples/apps/nowinandroid/sync/status/FirebaseSyncSubscriber.kt b/sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/status/FirebaseSyncSubscriber.kt similarity index 95% rename from sync/work/src/prod/java/com/google/samples/apps/nowinandroid/sync/status/FirebaseSyncSubscriber.kt rename to sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/status/FirebaseSyncSubscriber.kt index c2405bccc..2c48488e6 100644 --- a/sync/work/src/prod/java/com/google/samples/apps/nowinandroid/sync/status/FirebaseSyncSubscriber.kt +++ b/sync/work/src/prod/kotlin/com/google/samples/apps/nowinandroid/sync/status/FirebaseSyncSubscriber.kt @@ -24,7 +24,7 @@ import javax.inject.Inject /** * Implementation of [SyncSubscriber] that subscribes to the FCM [SYNC_TOPIC] */ -class FirebaseSyncSubscriber @Inject constructor( +internal class FirebaseSyncSubscriber @Inject constructor( private val firebaseMessaging: FirebaseMessaging, ) : SyncSubscriber { override suspend fun subscribe() { diff --git a/tools/setup.sh b/tools/setup.sh index 1467bbad0..b0f204268 100755 --- a/tools/setup.sh +++ b/tools/setup.sh @@ -35,7 +35,7 @@ cp "${GIT_ROOT}/tools/pre-push" "${GIT_DIR}/hooks/pre-push" \ cat <<-EOF Checking the following settings helps avoid miscellaneous issues: * Settings -> Editor -> General -> Remove trailing spaces on: Modified lines - * Settings -> Editor -> General -> Ensure every file ends with a line break + * Settings -> Editor -> General -> Ensure every saved file ends with a line break * Settings -> Editor -> General -> Auto Import -> Optimize imports on the fly (for both Kotlin\ and Java) EOF diff --git a/ui-test-hilt-manifest/build.gradle.kts b/ui-test-hilt-manifest/build.gradle.kts index b55036591..3f084c6df 100644 --- a/ui-test-hilt-manifest/build.gradle.kts +++ b/ui-test-hilt-manifest/build.gradle.kts @@ -14,8 +14,8 @@ * limitations under the License. */ plugins { - id("nowinandroid.android.library") - id("nowinandroid.android.hilt") + alias(libs.plugins.nowinandroid.android.library) + alias(libs.plugins.nowinandroid.hilt) } android { diff --git a/ui-test-hilt-manifest/src/main/java/com/google/samples/apps/nowinandroid/uitesthiltmanifest/HiltComponentActivity.kt b/ui-test-hilt-manifest/src/main/kotlin/com/google/samples/apps/nowinandroid/uitesthiltmanifest/HiltComponentActivity.kt similarity index 100% rename from ui-test-hilt-manifest/src/main/java/com/google/samples/apps/nowinandroid/uitesthiltmanifest/HiltComponentActivity.kt rename to ui-test-hilt-manifest/src/main/kotlin/com/google/samples/apps/nowinandroid/uitesthiltmanifest/HiltComponentActivity.kt