diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 3fc36420a3d..b8d553e208f 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -26,6 +26,11 @@ android { } } + lint { + // Until we fully migrate to Material3 this lint issue is too verbose https://github.com/home-assistant/android/issues/5420 + disable += listOf("UsingMaterialAndMaterial3Libraries") + } + experimentalProperties["android.experimental.enableScreenshotTest"] = true screenshotTests { diff --git a/app/gradle.lockfile b/app/gradle.lockfile index fd0693a249e..057154f1cbe 100644 --- a/app/gradle.lockfile +++ b/app/gradle.lockfile @@ -37,6 +37,8 @@ androidx.compose.foundation:foundation-android:1.8.3=fullDebugAndroidTestCompile androidx.compose.foundation:foundation-layout-android:1.8.3=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugScreenshotTestCompileClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestCompileClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestCompileClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestCompileClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath androidx.compose.foundation:foundation-layout:1.8.3=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugScreenshotTestCompileClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestCompileClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestCompileClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestCompileClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath androidx.compose.foundation:foundation:1.8.3=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugScreenshotTestCompileClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestCompileClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestCompileClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestCompileClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath +androidx.compose.material3:material3-android:1.3.2=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath +androidx.compose.material3:material3:1.3.2=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath androidx.compose.material:material-android:1.8.3=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugScreenshotTestCompileClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestCompileClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestCompileClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestCompileClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath androidx.compose.material:material-icons-core-android:1.7.8=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugScreenshotTestCompileClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestCompileClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestCompileClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestCompileClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath androidx.compose.material:material-icons-core:1.7.8=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugScreenshotTestCompileClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestCompileClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestCompileClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestCompileClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath @@ -169,7 +171,6 @@ androidx.media3:media3-exoplayer:1.7.1=fullDebugAndroidTestCompileClasspath,full androidx.media3:media3-extractor:1.7.1=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugScreenshotTestCompileClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestCompileClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestCompileClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestCompileClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath androidx.media3:media3-session:1.7.1=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugScreenshotTestCompileClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestCompileClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestCompileClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestCompileClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath androidx.media3:media3-ui-compose:1.7.1=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugScreenshotTestCompileClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestCompileClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestCompileClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestCompileClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath -androidx.media3:media3-ui:1.7.1=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugScreenshotTestCompileClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestCompileClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestCompileClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestCompileClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath androidx.media:media:1.7.0=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath androidx.navigation:navigation-common-android:2.9.0=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugScreenshotTestCompileClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestCompileClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestCompileClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestCompileClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath androidx.navigation:navigation-common:2.9.0=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugScreenshotTestCompileClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestCompileClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestCompileClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestCompileClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath @@ -220,9 +221,10 @@ androidx.test:core:1.6.1=androidTestImplementationDependenciesMetadata,fullDebug androidx.test:monitor:1.7.2=androidTestImplementationDependenciesMetadata,fullDebugAndroidTestCompileClasspath,fullDebugAndroidTestRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugAndroidTestRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath,testImplementationDependenciesMetadata androidx.test:rules:1.6.1=androidTestImplementationDependenciesMetadata,fullDebugAndroidTestCompileClasspath,fullDebugAndroidTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugAndroidTestRuntimeClasspath androidx.test:runner:1.6.2=androidTestImplementationDependenciesMetadata,fullDebugAndroidTestCompileClasspath,fullDebugAndroidTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugAndroidTestRuntimeClasspath -androidx.tracing:tracing-ktx:1.2.0=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath +androidx.tracing:tracing-android:1.3.0=fullDebugAndroidTestCompileClasspath,fullDebugAndroidTestRuntimeClasspath,fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugAndroidTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath +androidx.tracing:tracing-ktx:1.3.0=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath androidx.tracing:tracing:1.1.0=androidTestImplementationDependenciesMetadata -androidx.tracing:tracing:1.2.0=fullDebugAndroidTestCompileClasspath,fullDebugAndroidTestRuntimeClasspath,fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugAndroidTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath +androidx.tracing:tracing:1.3.0=fullDebugAndroidTestCompileClasspath,fullDebugAndroidTestRuntimeClasspath,fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugAndroidTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath androidx.transition:transition:1.5.0=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugScreenshotTestCompileClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestCompileClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestCompileClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestCompileClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath androidx.vectordrawable:vectordrawable-animated:1.1.0=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugScreenshotTestCompileClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestCompileClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestCompileClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestCompileClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath androidx.vectordrawable:vectordrawable:1.1.0=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugScreenshotTestCompileClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestCompileClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestCompileClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestCompileClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath @@ -429,6 +431,10 @@ com.squareup:javawriter:2.1.1=fullDebugAndroidTestRuntimeClasspath,minimalDebugA com.squareup:kotlinpoet:1.11.0=_agp_internal_javaPreCompileFullDebug_kspClasspath,_agp_internal_javaPreCompileFullRelease_kspClasspath,_agp_internal_javaPreCompileMinimalDebug_kspClasspath,_agp_internal_javaPreCompileMinimalRelease_kspClasspath,hiltAnnotationProcessorFullDebug,hiltAnnotationProcessorFullDebugAndroidTest,hiltAnnotationProcessorFullDebugUnitTest,hiltAnnotationProcessorFullRelease,hiltAnnotationProcessorFullReleaseUnitTest,hiltAnnotationProcessorMinimalDebug,hiltAnnotationProcessorMinimalDebugAndroidTest,hiltAnnotationProcessorMinimalDebugUnitTest,hiltAnnotationProcessorMinimalRelease,hiltAnnotationProcessorMinimalReleaseUnitTest,kspFullDebugAndroidTestKotlinProcessorClasspath,kspFullDebugKotlinProcessorClasspath,kspFullDebugScreenshotTestKotlinProcessorClasspath,kspFullDebugUnitTestKotlinProcessorClasspath,kspFullReleaseKotlinProcessorClasspath,kspFullReleaseScreenshotTestKotlinProcessorClasspath,kspFullReleaseUnitTestKotlinProcessorClasspath,kspMinimalDebugAndroidTestKotlinProcessorClasspath,kspMinimalDebugKotlinProcessorClasspath,kspMinimalDebugScreenshotTestKotlinProcessorClasspath,kspMinimalDebugUnitTestKotlinProcessorClasspath,kspMinimalReleaseKotlinProcessorClasspath,kspMinimalReleaseScreenshotTestKotlinProcessorClasspath,kspMinimalReleaseUnitTestKotlinProcessorClasspath com.vdurmont:emoji-java:5.1.1=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath commons-io:commons-io:2.16.1=_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention +dev.chrisbanes.haze:haze-android:1.6.4=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugScreenshotTestCompileClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestCompileClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestCompileClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestCompileClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath +dev.chrisbanes.haze:haze-materials-android:1.6.4=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugScreenshotTestCompileClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestCompileClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestCompileClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestCompileClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath +dev.chrisbanes.haze:haze-materials:1.6.4=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugScreenshotTestCompileClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestCompileClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestCompileClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestCompileClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath +dev.chrisbanes.haze:haze:1.6.4=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugScreenshotTestCompileClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestCompileClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestCompileClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestCompileClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath dev.drewhamilton.poko:poko-annotations-jvm:0.15.0=ktlint,ktlintBaselineReporter,ktlintRuleset dev.drewhamilton.poko:poko-annotations:0.15.0=ktlint,ktlintBaselineReporter,ktlintRuleset info.picocli:picocli:4.7.5=ktlint @@ -530,24 +536,30 @@ org.ec4j.core:ec4j-core:0.3.0=ktlint,ktlintBaselineReporter,ktlintRuleset org.hamcrest:hamcrest-core:1.3=androidTestImplementationDependenciesMetadata,fullDebugAndroidTestCompileClasspath,fullDebugAndroidTestRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugAndroidTestRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath,testImplementationDependenciesMetadata org.hamcrest:hamcrest-integration:1.3=fullDebugAndroidTestRuntimeClasspath,minimalDebugAndroidTestRuntimeClasspath org.hamcrest:hamcrest-library:1.3=fullDebugAndroidTestRuntimeClasspath,minimalDebugAndroidTestRuntimeClasspath -org.jetbrains.androidx.lifecycle:lifecycle-common:2.8.3=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath -org.jetbrains.androidx.lifecycle:lifecycle-runtime-compose:2.8.3=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath -org.jetbrains.androidx.lifecycle:lifecycle-runtime:2.8.3=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath -org.jetbrains.androidx.lifecycle:lifecycle-viewmodel:2.8.3=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath -org.jetbrains.compose.animation:animation-core:1.7.0=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath -org.jetbrains.compose.animation:animation:1.7.0=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath -org.jetbrains.compose.annotation-internal:annotation:1.7.0=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath -org.jetbrains.compose.collection-internal:collection:1.7.0=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath -org.jetbrains.compose.foundation:foundation-layout:1.7.0=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath -org.jetbrains.compose.foundation:foundation:1.7.0=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath -org.jetbrains.compose.runtime:runtime-saveable:1.7.0=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath -org.jetbrains.compose.runtime:runtime:1.7.0=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath -org.jetbrains.compose.ui:ui-geometry:1.7.0=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath -org.jetbrains.compose.ui:ui-graphics:1.7.0=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath -org.jetbrains.compose.ui:ui-text:1.7.0=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath -org.jetbrains.compose.ui:ui-unit:1.7.0=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath -org.jetbrains.compose.ui:ui-util:1.7.0=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath -org.jetbrains.compose.ui:ui:1.7.0=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.androidx.lifecycle:lifecycle-common:2.8.4=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugScreenshotTestCompileClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestCompileClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestCompileClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestCompileClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.androidx.lifecycle:lifecycle-runtime-compose:2.8.4=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.androidx.lifecycle:lifecycle-runtime:2.8.4=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.androidx.lifecycle:lifecycle-viewmodel:2.8.4=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.compose.animation:animation-core:1.8.0=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.compose.animation:animation:1.8.0=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.compose.annotation-internal:annotation:1.6.11=fullDebugAndroidTestCompileClasspath,minimalDebugAndroidTestCompileClasspath +org.jetbrains.compose.annotation-internal:annotation:1.8.0=fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugScreenshotTestCompileClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestCompileClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestCompileClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestCompileClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.compose.collection-internal:collection:1.8.0=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.compose.foundation:foundation-layout:1.8.0=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.compose.foundation:foundation:1.8.0=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.compose.material3:material3:1.8.0=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.compose.material:material-ripple:1.8.0=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.compose.runtime:runtime-saveable:1.8.0=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugScreenshotTestCompileClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestCompileClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestCompileClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestCompileClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.compose.runtime:runtime:1.8.0=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugScreenshotTestCompileClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestCompileClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestCompileClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestCompileClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.compose.ui:ui-backhandler-android-debug:1.8.0=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath +org.jetbrains.compose.ui:ui-backhandler-android:1.8.0=fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.compose.ui:ui-backhandler:1.8.0=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.compose.ui:ui-geometry:1.8.0=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugScreenshotTestCompileClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestCompileClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestCompileClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestCompileClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.compose.ui:ui-graphics:1.8.0=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugScreenshotTestCompileClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestCompileClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestCompileClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestCompileClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.compose.ui:ui-text:1.8.0=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugScreenshotTestCompileClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestCompileClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestCompileClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestCompileClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.compose.ui:ui-unit:1.8.0=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugScreenshotTestCompileClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestCompileClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestCompileClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestCompileClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.compose.ui:ui-util:1.8.0=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugScreenshotTestCompileClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestCompileClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestCompileClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestCompileClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.compose.ui:ui:1.8.0=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugScreenshotTestCompileClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestCompileClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestCompileClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestCompileClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath org.jetbrains.intellij.deps:trove4j:1.0.20200330=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathFullDebug,kotlinCompilerPluginClasspathFullDebugAndroidTest,kotlinCompilerPluginClasspathFullDebugUnitTest,kotlinCompilerPluginClasspathFullRelease,kotlinCompilerPluginClasspathFullReleaseUnitTest,kotlinCompilerPluginClasspathMinimalDebug,kotlinCompilerPluginClasspathMinimalDebugAndroidTest,kotlinCompilerPluginClasspathMinimalDebugUnitTest,kotlinCompilerPluginClasspathMinimalRelease,kotlinCompilerPluginClasspathMinimalReleaseUnitTest,kotlinKlibCommonizerClasspath,ktlint,ktlintBaselineReporter,ktlintRuleset org.jetbrains.kotlin:kotlin-android-extensions-runtime:2.1.21=fullDebugAndroidTestCompileClasspath,fullDebugAndroidTestRuntimeClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugAndroidTestRuntimeClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath org.jetbrains.kotlin:kotlin-bom:1.8.22=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath @@ -608,11 +620,9 @@ org.jetbrains.kotlin:kotlin-stdlib:2.1.0=_internal-screenshot-validation-junit-e org.jetbrains.kotlin:kotlin-stdlib:2.1.10=_agp_internal_javaPreCompileFullDebug_kspClasspath,_agp_internal_javaPreCompileFullRelease_kspClasspath,_agp_internal_javaPreCompileMinimalDebug_kspClasspath,_agp_internal_javaPreCompileMinimalRelease_kspClasspath,hiltAnnotationProcessorFullDebug,hiltAnnotationProcessorFullDebugAndroidTest,hiltAnnotationProcessorFullDebugUnitTest,hiltAnnotationProcessorFullRelease,hiltAnnotationProcessorFullReleaseUnitTest,hiltAnnotationProcessorMinimalDebug,hiltAnnotationProcessorMinimalDebugAndroidTest,hiltAnnotationProcessorMinimalDebugUnitTest,hiltAnnotationProcessorMinimalRelease,hiltAnnotationProcessorMinimalReleaseUnitTest,kspFullDebugAndroidTestKotlinProcessorClasspath,kspFullDebugKotlinProcessorClasspath,kspFullDebugScreenshotTestKotlinProcessorClasspath,kspFullDebugUnitTestKotlinProcessorClasspath,kspFullReleaseKotlinProcessorClasspath,kspFullReleaseScreenshotTestKotlinProcessorClasspath,kspFullReleaseUnitTestKotlinProcessorClasspath,kspMinimalDebugAndroidTestKotlinProcessorClasspath,kspMinimalDebugKotlinProcessorClasspath,kspMinimalDebugScreenshotTestKotlinProcessorClasspath,kspMinimalDebugUnitTestKotlinProcessorClasspath,kspMinimalReleaseKotlinProcessorClasspath,kspMinimalReleaseScreenshotTestKotlinProcessorClasspath,kspMinimalReleaseUnitTestKotlinProcessorClasspath org.jetbrains.kotlin:kotlin-stdlib:2.1.21=fullDebugAndroidTestCompileClasspath,fullDebugAndroidTestRuntimeClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugScreenshotTestCompileClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestCompileClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathFullDebug,kotlinCompilerPluginClasspathFullDebugAndroidTest,kotlinCompilerPluginClasspathFullDebugUnitTest,kotlinCompilerPluginClasspathFullRelease,kotlinCompilerPluginClasspathFullReleaseUnitTest,kotlinCompilerPluginClasspathMinimalDebug,kotlinCompilerPluginClasspathMinimalDebugAndroidTest,kotlinCompilerPluginClasspathMinimalDebugUnitTest,kotlinCompilerPluginClasspathMinimalRelease,kotlinCompilerPluginClasspathMinimalReleaseUnitTest,kotlinKlibCommonizerClasspath,kspPluginClasspath,kspPluginClasspathNonEmbeddable,minimalDebugAndroidTestCompileClasspath,minimalDebugAndroidTestRuntimeClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestCompileClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestCompileClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath org.jetbrains.kotlinx:atomicfu-jvm:0.22.0=_internal-unified-test-platform-android-driver-instrumentation,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-device-info,_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-logcat,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-launcher -org.jetbrains.kotlinx:atomicfu-jvm:0.23.2=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath org.jetbrains.kotlinx:atomicfu:0.21.0=androidTestImplementationDependenciesMetadata -org.jetbrains.kotlinx:atomicfu:0.22.0=_internal-unified-test-platform-android-driver-instrumentation,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-device-info,_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-logcat,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-launcher -org.jetbrains.kotlinx:atomicfu:0.23.1=fullImplementationDependenciesMetadata,testImplementationDependenciesMetadata -org.jetbrains.kotlinx:atomicfu:0.23.2=fullDebugRuntimeClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.kotlinx:atomicfu:0.22.0=_internal-unified-test-platform-android-driver-instrumentation,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-device-info,_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-logcat,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-launcher +org.jetbrains.kotlinx:atomicfu:0.23.1=fullImplementationDependenciesMetadata,testImplementationDependenciesMetadata,testImplementationDependenciesMetadata org.jetbrains.kotlinx:kotlinx-coroutines-android:1.10.2=fullDebugAndroidTestCompileClasspath,fullDebugAndroidTestRuntimeClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugScreenshotTestCompileClasspath,fullDebugScreenshotTestRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullImplementationDependenciesMetadata,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseScreenshotTestCompileClasspath,fullReleaseScreenshotTestRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugAndroidTestRuntimeClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugScreenshotTestCompileClasspath,minimalDebugScreenshotTestRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseScreenshotTestCompileClasspath,minimalReleaseScreenshotTestRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1=testImplementationDependenciesMetadata org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3=androidTestImplementationDependenciesMetadata diff --git a/app/lint-baseline.xml b/app/lint-baseline.xml index 79886ad6ef1..9fb13d8772c 100644 --- a/app/lint-baseline.xml +++ b/app/lint-baseline.xml @@ -1,5 +1,5 @@ - + @@ -85,7 +85,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -118,7 +118,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -129,7 +129,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -474,145 +474,6 @@ column="20"/> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -807,7 +668,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -829,7 +690,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -840,7 +701,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1009,17 +870,6 @@ column="12"/> - - - - - - - - + + + + + + + + + + + + - - - - @@ -1304,7 +1165,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1315,7 +1176,7 @@ errorLine2=" ^"> @@ -1326,7 +1187,7 @@ errorLine2=" ^"> @@ -1337,7 +1198,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1348,7 +1209,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1359,7 +1220,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1370,7 +1231,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1381,7 +1242,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1392,7 +1253,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1403,7 +1264,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1414,7 +1275,7 @@ errorLine2=" ^"> @@ -1425,7 +1286,7 @@ errorLine2=" ^"> @@ -1458,7 +1319,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1469,7 +1330,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1480,7 +1341,7 @@ errorLine2=" ~~~~~~~~~~~~~~~"> @@ -1491,7 +1352,7 @@ errorLine2=" ~~~~~~~~~~~~~~~"> @@ -1502,7 +1363,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1513,7 +1374,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1524,7 +1385,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1535,7 +1396,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1546,7 +1407,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~"> @@ -1557,7 +1418,7 @@ errorLine2=" ^"> @@ -1568,7 +1429,7 @@ errorLine2=" ^"> @@ -1579,7 +1440,7 @@ errorLine2=" ^"> @@ -1590,7 +1451,7 @@ errorLine2=" ^"> @@ -1601,7 +1462,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1612,7 +1473,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1623,7 +1484,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1634,7 +1495,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1645,7 +1506,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1656,7 +1517,7 @@ errorLine2=" ~~~~~~~~~~~~~~"> @@ -1667,7 +1528,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1678,7 +1539,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1689,7 +1550,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1700,7 +1561,7 @@ errorLine2=" ~~~~~~~~~~~~~~"> @@ -1711,7 +1572,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1748,72 +1609,6 @@ column="41"/> - - - - - - - - - - - - - - - - - - - - - - - - @@ -1854,7 +1649,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> diff --git a/app/src/debug/res/layout/activity_demo_exo_player.xml b/app/src/debug/res/layout/activity_demo_exo_player.xml deleted file mode 100644 index 4fe3071a02b..00000000000 --- a/app/src/debug/res/layout/activity_demo_exo_player.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/fullDebug/screenshotTest/reference/io/homeassistant/companion/android/webview/WebViewContentScreenScreenshotTest/WebView with app locked_0.png b/app/src/fullDebug/screenshotTest/reference/io/homeassistant/companion/android/webview/WebViewContentScreenScreenshotTest/WebView with app locked_0.png new file mode 100644 index 00000000000..9f72e6fea09 Binary files /dev/null and b/app/src/fullDebug/screenshotTest/reference/io/homeassistant/companion/android/webview/WebViewContentScreenScreenshotTest/WebView with app locked_0.png differ diff --git a/app/src/fullDebug/screenshotTest/reference/io/homeassistant/companion/android/webview/WebViewContentScreenScreenshotTest/WebView with app unlocked_0.png b/app/src/fullDebug/screenshotTest/reference/io/homeassistant/companion/android/webview/WebViewContentScreenScreenshotTest/WebView with app unlocked_0.png new file mode 100644 index 00000000000..a7e27dd5ff0 Binary files /dev/null and b/app/src/fullDebug/screenshotTest/reference/io/homeassistant/companion/android/webview/WebViewContentScreenScreenshotTest/WebView with app unlocked_0.png differ diff --git a/app/src/fullDebug/screenshotTest/reference/io/homeassistant/companion/android/webview/WebViewContentScreenScreenshotTest/WebView with player_0.png b/app/src/fullDebug/screenshotTest/reference/io/homeassistant/companion/android/webview/WebViewContentScreenScreenshotTest/WebView with player_0.png new file mode 100644 index 00000000000..c98f2382a77 Binary files /dev/null and b/app/src/fullDebug/screenshotTest/reference/io/homeassistant/companion/android/webview/WebViewContentScreenScreenshotTest/WebView with player_0.png differ diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/onboarding/authentication/AuthenticationFragment.kt b/app/src/main/kotlin/io/homeassistant/companion/android/onboarding/authentication/AuthenticationFragment.kt index 307c99bbef7..1951ddf32ec 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/onboarding/authentication/AuthenticationFragment.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/onboarding/authentication/AuthenticationFragment.kt @@ -1,7 +1,6 @@ package io.homeassistant.companion.android.onboarding.authentication import android.annotation.SuppressLint -import android.net.Uri import android.net.http.SslError import android.os.Build import android.os.Bundle @@ -18,7 +17,7 @@ import android.widget.Toast import androidx.annotation.RequiresApi import androidx.appcompat.app.AlertDialog import androidx.compose.ui.platform.ComposeView -import androidx.compose.ui.viewinterop.AndroidView +import androidx.core.net.toUri import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels import dagger.hilt.android.AndroidEntryPoint @@ -32,6 +31,7 @@ import io.homeassistant.companion.android.onboarding.integration.MobileAppIntegr import io.homeassistant.companion.android.themes.ThemesManager import io.homeassistant.companion.android.util.TLSWebViewClient import io.homeassistant.companion.android.util.compose.HomeAssistantAppTheme +import io.homeassistant.companion.android.util.compose.webview.HAWebView import io.homeassistant.companion.android.util.isStarted import javax.inject.Inject import javax.inject.Named @@ -66,15 +66,19 @@ class AuthenticationFragment : Fragment() { return ComposeView(requireContext()).apply { setContent { HomeAssistantAppTheme { - AndroidView({ - WebView(requireContext()).apply { + HAWebView( + configure = { themesManager.setThemeForWebView(requireContext(), settings) settings.javaScriptEnabled = true settings.domStorageEnabled = true - settings.userAgentString = settings.userAgentString + " ${HomeAssistantApis.USER_AGENT_STRING}" + settings.userAgentString = + settings.userAgentString + " ${HomeAssistantApis.USER_AGENT_STRING}" webViewClient = object : TLSWebViewClient(keyChainRepository) { @Deprecated("Deprecated in Java") - override fun shouldOverrideUrlLoading(view: WebView?, url: String): Boolean { + override fun shouldOverrideUrlLoading( + view: WebView?, + url: String, + ): Boolean { return onRedirect(url) } @@ -96,7 +100,7 @@ class AuthenticationFragment : Fragment() { if (error?.description.isNullOrBlank()) { commonR.string.no_description } else { - error?.description + error.description }, ), null, @@ -135,7 +139,7 @@ class AuthenticationFragment : Fragment() { if (errorResponse?.reasonPhrase.isNullOrBlank()) { requireContext().getString(commonR.string.no_description) } else { - errorResponse?.reasonPhrase + errorResponse.reasonPhrase }, ), null, @@ -157,8 +161,8 @@ class AuthenticationFragment : Fragment() { } authUrl = buildAuthUrl(viewModel.manualUrl.value) loadUrl(authUrl!!) - } - }) + }, + ) } } } @@ -191,7 +195,7 @@ class AuthenticationFragment : Fragment() { } private fun onRedirect(url: String): Boolean { - val code = Uri.parse(url).getQueryParameter("code") + val code = url.toUri().getQueryParameter("code") return if (url.startsWith(AUTH_CALLBACK) && !code.isNullOrBlank()) { viewModel.registerAuthCode(code) parentFragmentManager diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/util/compose/media/player/HAMediaPlayer.kt b/app/src/main/kotlin/io/homeassistant/companion/android/util/compose/media/player/HAMediaPlayer.kt index a582646b960..d8be91a4038 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/util/compose/media/player/HAMediaPlayer.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/util/compose/media/player/HAMediaPlayer.kt @@ -94,6 +94,7 @@ fun HAMediaPlayer( contentScale: ContentScale, modifier: Modifier = Modifier, fullscreenModifier: Modifier = Modifier, + onFullscreenClicked: (isFullscreen: Boolean) -> Unit = {}, ) { var showControls by remember { mutableStateOf(true) } @@ -106,7 +107,7 @@ fun HAMediaPlayer( HAMediaPlayer(player, showControls, contentScale, modifier, fullscreenModifier, onPlayerClicked = { showControls = !showControls - }) + }, onFullscreenClicked = onFullscreenClicked) } /** @@ -122,6 +123,7 @@ fun HAMediaPlayer( * @param modifier The `Modifier` to be applied to the main player container. * @param fullscreenModifier The `Modifier` to be applied to the player container when it is in fullscreen mode. * @param onPlayerClicked Callback invoked when the player's surface (outside of controls) is clicked. + * @param onFullscreenClicked Callback invoked when the fullscreen button is clicked `isFullscreen` indicates the new state. */ @Composable @OptIn(UnstableApi::class) @@ -132,6 +134,7 @@ fun HAMediaPlayer( modifier: Modifier = Modifier, fullscreenModifier: Modifier = Modifier, onPlayerClicked: () -> Unit = {}, + onFullscreenClicked: (isFullscreen: Boolean) -> Unit = {}, ) { var isFullscreen by remember { mutableStateOf(false) } val presentationState = rememberPresentationState(player) @@ -150,6 +153,7 @@ fun HAMediaPlayer( isFullScreen = isFullscreen, onClickFullscreen = { isFullscreen = !isFullscreen + onFullscreenClicked(isFullscreen) }, onPlayerClicked = onPlayerClicked, ) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/util/compose/webview/HAWebView.kt b/app/src/main/kotlin/io/homeassistant/companion/android/util/compose/webview/HAWebView.kt new file mode 100644 index 00000000000..f09a4014857 --- /dev/null +++ b/app/src/main/kotlin/io/homeassistant/companion/android/util/compose/webview/HAWebView.kt @@ -0,0 +1,41 @@ +package io.homeassistant.companion.android.util.compose.webview + +import android.webkit.WebView +import android.widget.FrameLayout +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.viewinterop.AndroidView + +/** + * A composable that displays a WebView. + * + * This function provides a convenient way to embed a WebView in a Jetpack Compose UI. + * It allows for customization of the WebView through the [configure] lambda. + * + * The WebView will be sized to match the [modifier]. + * + * @param factory A lambda that creates the WebView instance. If this returns null, a new + * WebView will be created with the current context. This is useful for providing + * a pre-configured WebView instance. + */ +@Composable +fun HAWebView( + modifier: Modifier = Modifier, + configure: WebView.() -> Unit = {}, + factory: () -> WebView? = { null }, +) { + AndroidView( + factory = { context -> + (factory() ?: WebView(context)).apply { + // We want the modifier to determine the size so the WebView should match the parent + this.layoutParams = FrameLayout.LayoutParams( + FrameLayout.LayoutParams.MATCH_PARENT, + FrameLayout.LayoutParams.MATCH_PARENT, + ) + + configure(this) + } + }, + modifier = modifier, + ) +} diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/webview/WebViewActivity.kt b/app/src/main/kotlin/io/homeassistant/companion/android/webview/WebViewActivity.kt index 5ea9b33228b..b6791b9bbfa 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/webview/WebViewActivity.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/webview/WebViewActivity.kt @@ -8,7 +8,6 @@ import android.content.Context import android.content.Intent import android.content.pm.ActivityInfo import android.content.pm.PackageManager -import android.content.res.Configuration import android.graphics.Color import android.graphics.Rect import android.net.Uri @@ -42,14 +41,18 @@ import android.webkit.WebResourceRequest import android.webkit.WebResourceResponse import android.webkit.WebView import android.widget.FrameLayout -import android.widget.ImageButton import android.widget.Toast import androidx.activity.OnBackPressedCallback +import androidx.activity.compose.setContent import androidx.activity.result.IntentSenderRequest import androidx.activity.result.contract.ActivityResultContracts import androidx.annotation.OptIn -import androidx.annotation.RequiresApi import androidx.appcompat.app.AlertDialog +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.unit.DpSize +import androidx.compose.ui.unit.dp import androidx.core.app.ActivityCompat import androidx.core.content.getSystemService import androidx.core.content.res.ResourcesCompat @@ -62,12 +65,8 @@ import androidx.lifecycle.repeatOnLifecycle import androidx.media3.common.MediaItem import androidx.media3.common.Player import androidx.media3.common.VideoSize -import androidx.media3.datasource.cronet.CronetDataSource -import androidx.media3.exoplayer.DefaultLoadControl +import androidx.media3.common.util.UnstableApi import androidx.media3.exoplayer.ExoPlayer -import androidx.media3.exoplayer.source.DefaultMediaSourceFactory -import androidx.media3.ui.AspectRatioFrameLayout -import androidx.media3.ui.PlayerView import androidx.webkit.WebViewCompat import androidx.webkit.WebViewFeature import dagger.hilt.android.AndroidEntryPoint @@ -84,7 +83,6 @@ import io.homeassistant.companion.android.common.data.servers.ServerManager import io.homeassistant.companion.android.common.util.DisabledLocationHandler import io.homeassistant.companion.android.database.authentication.Authentication import io.homeassistant.companion.android.database.authentication.AuthenticationDao -import io.homeassistant.companion.android.databinding.ActivityWebviewBinding import io.homeassistant.companion.android.databinding.DialogAuthenticationBinding import io.homeassistant.companion.android.improv.ui.ImprovPermissionDialog import io.homeassistant.companion.android.improv.ui.ImprovSetupDialog @@ -100,28 +98,25 @@ import io.homeassistant.companion.android.util.DataUriDownloadManager import io.homeassistant.companion.android.util.LifecycleHandler import io.homeassistant.companion.android.util.OnSwipeListener import io.homeassistant.companion.android.util.TLSWebViewClient +import io.homeassistant.companion.android.util.compose.initializePlayer import io.homeassistant.companion.android.util.isStarted import io.homeassistant.companion.android.websocket.WebsocketManager import io.homeassistant.companion.android.webview.WebView.ErrorType import io.homeassistant.companion.android.webview.externalbus.ExternalBusMessage import io.homeassistant.companion.android.webview.externalbus.NavigateTo -import java.util.concurrent.Executors import javax.inject.Inject import javax.inject.Named import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.Job import kotlinx.coroutines.delay import kotlinx.coroutines.launch import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.withContext import okhttp3.HttpUrl.Companion.toHttpUrl -import org.chromium.net.CronetEngine import org.json.JSONObject import timber.log.Timber -@OptIn(androidx.media3.common.util.UnstableApi::class) @AndroidEntryPoint class WebViewActivity : BaseActivity(), io.homeassistant.companion.android.webview.WebView { @@ -203,13 +198,12 @@ class WebViewActivity : BaseActivity(), io.homeassistant.companion.android.webvi @Named("keyChainRepository") lateinit var keyChainRepository: KeyChainRepository - private lateinit var binding: ActivityWebviewBinding private lateinit var webView: WebView private lateinit var loadedUrl: String private lateinit var decor: FrameLayout - private lateinit var myCustomView: View + private var customViewFromWebView = mutableStateOf(null) private lateinit var authenticator: Authenticator - private lateinit var exoPlayerView: PlayerView + private lateinit var windowInsetsController: WindowInsetsControllerCompat private var mFilePathCallback: ValueCallback>? = null @@ -221,15 +215,13 @@ class WebViewActivity : BaseActivity(), io.homeassistant.companion.android.webvi private var videoHeight = 0 private var firstAuthTime: Long = 0 private var resourceURL: String = "" - private var appLocked = true + private var appLocked = mutableStateOf(true) private var unlockingApp = false - private var exoPlayer: ExoPlayer? = null + private var exoPlayer = mutableStateOf(null) private var isExoFullScreen = false - private var exoTop = 0 // These margins are from the DOM and scaled to screen - private var exoLeft = 0 - private var exoRight = 0 - private var exoBottom = 0 - private var exoMute = true + private var playerSize = mutableStateOf(null) + private var playerTop = mutableStateOf(0.dp) + private var playerLeft = mutableStateOf(0.dp) private var failedConnection = "external" private var clearHistory = false private var moreInfoEntity = "" @@ -252,9 +244,6 @@ class WebViewActivity : BaseActivity(), io.homeassistant.companion.android.webvi super.onCreate(savedInstanceState) - binding = ActivityWebviewBinding.inflate(layoutInflater) - setContentView(binding.root) - if (intent.extras?.containsKey(EXTRA_SERVER) == true) { intent.extras?.getInt(EXTRA_SERVER)?.let { presenter.setActiveServer(it) @@ -268,66 +257,82 @@ class WebViewActivity : BaseActivity(), io.homeassistant.companion.android.webvi val colorLaunchScreenBackground = ResourcesCompat.getColor(resources, commonR.color.colorLaunchScreenBackground, theme) setStatusBarAndNavigationBarColor(colorLaunchScreenBackground, colorLaunchScreenBackground) - binding.blurView.setupWith(binding.root) - .setBlurRadius(8f) - - exoPlayerView = binding.exoplayerView - exoPlayerView.visibility = View.GONE - exoPlayerView.setBackgroundColor(Color.BLACK) - exoPlayerView.alpha = 1f - exoPlayerView.controllerShowTimeoutMs = 2000 - - appLocked = presenter.isAppLocked() - binding.blurView.setBlurEnabled(appLocked) + webView = WebView(this) + + appLocked.value = presenter.isAppLocked() + + setContent { + val player by remember { exoPlayer } + val playerSize by remember { playerSize } + val playerTop by remember { playerTop } + val playerLeft by remember { playerLeft } + val currentAppLocked by remember { appLocked } + val customViewFromWebView by remember { customViewFromWebView } + + WebViewContentScreen( + webView, + player, + playerSize, + playerTop, + playerLeft, + currentAppLocked, + customViewFromWebView, + ) { isFullScreen -> + isExoFullScreen = isFullScreen + if (isFullScreen) hideSystemUI() else showSystemUI() + } + } authenticator = Authenticator(this, this, ::authenticationResult) decor = window.decorView as FrameLayout - webView = binding.webview - val onBackPressed = object : OnBackPressedCallback(webView.canGoBack()) { override fun handleOnBackPressed() { if (webView.canGoBack()) webView.goBack() } } + onBackPressedDispatcher.addCallback(this, onBackPressed) webView.apply { - setOnTouchListener(object : OnSwipeListener(this@WebViewActivity) { - override fun onSwipe( - e1: MotionEvent, - e2: MotionEvent, - velocity: Float, - direction: SwipeDirection, - pointerCount: Int, - ): Boolean { - if (pointerCount == 3 && velocity >= 75) { - when (direction) { - SwipeDirection.LEFT -> presenter.nextServer() - SwipeDirection.RIGHT -> presenter.previousServer() - SwipeDirection.UP -> { - val serverChooser = ServerChooserFragment() - supportFragmentManager.setFragmentResultListener(ServerChooserFragment.RESULT_KEY, this@WebViewActivity) { _, bundle -> - if (bundle.containsKey(ServerChooserFragment.RESULT_SERVER)) { - presenter.switchActiveServer(bundle.getInt(ServerChooserFragment.RESULT_SERVER)) + setOnTouchListener( + object : OnSwipeListener(this@WebViewActivity) { + override fun onSwipe( + e1: MotionEvent, + e2: MotionEvent, + velocity: Float, + direction: SwipeDirection, + pointerCount: Int, + ): Boolean { + if (pointerCount == 3 && velocity >= 75) { + when (direction) { + SwipeDirection.LEFT -> presenter.nextServer() + SwipeDirection.RIGHT -> presenter.previousServer() + SwipeDirection.UP -> { + val serverChooser = ServerChooserFragment() + supportFragmentManager.setFragmentResultListener(ServerChooserFragment.RESULT_KEY, this@WebViewActivity) { _, bundle -> + if (bundle.containsKey(ServerChooserFragment.RESULT_SERVER)) { + presenter.switchActiveServer(bundle.getInt(ServerChooserFragment.RESULT_SERVER)) + } + supportFragmentManager.clearFragmentResultListener(ServerChooserFragment.RESULT_KEY) } - supportFragmentManager.clearFragmentResultListener(ServerChooserFragment.RESULT_KEY) + serverChooser.show(supportFragmentManager, ServerChooserFragment.TAG) + } + + SwipeDirection.DOWN -> { + dispatchKeyEvent(KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_E)) } - serverChooser.show(supportFragmentManager, ServerChooserFragment.TAG) - } - SwipeDirection.DOWN -> { - dispatchKeyEvent(KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_E)) } } + return appLocked.value } - return appLocked - } - override fun onMotionEventHandled(v: View?, event: MotionEvent?): Boolean { - return appLocked - } - }) + override fun onMotionEventHandled(v: View?, event: MotionEvent?): Boolean { + return appLocked.value + } + }, + ) settings.minimumFontSize = 5 settings.javaScriptEnabled = true @@ -585,20 +590,13 @@ class WebViewActivity : BaseActivity(), io.homeassistant.companion.android.webvi } override fun onShowCustomView(view: View, callback: CustomViewCallback) { - myCustomView = view - binding.content.addView( - view, - FrameLayout.LayoutParams( - FrameLayout.LayoutParams.WRAP_CONTENT, - FrameLayout.LayoutParams.WRAP_CONTENT, - ), - ) + customViewFromWebView.value = view hideSystemUI() isVideoFullScreen = true } override fun onHideCustomView() { - binding.content.removeView(myCustomView) + customViewFromWebView.value = null if (!presenter.isFullScreen()) { showSystemUI() } @@ -612,7 +610,7 @@ class WebViewActivity : BaseActivity(), io.homeassistant.companion.android.webvi // Set WebView background color to transparent, so that the theme of the android activity has control over it. // This enables the ability to have the launch screen behind the WebView until the web frontend gets rendered - binding.webview.setBackgroundColor(Color.TRANSPARENT) + webView.setBackgroundColor(Color.TRANSPARENT) themesManager.setThemeForWebView(this, webView.settings) @@ -652,6 +650,7 @@ class WebViewActivity : BaseActivity(), io.homeassistant.companion.android.webvi commissionMatterDevice.launch(IntentSenderRequest.Builder(intentSender).build()) } } + MatterThreadStep.THREAD_NONE -> { alertDialog?.cancel() AlertDialog.Builder(this@WebViewActivity) @@ -660,15 +659,18 @@ class WebViewActivity : BaseActivity(), io.homeassistant.companion.android.webvi .show() presenter.finishMatterThreadFlow() } + MatterThreadStep.THREAD_SENT -> { Toast.makeText(this@WebViewActivity, commonR.string.thread_export_success, Toast.LENGTH_SHORT).show() alertDialog?.cancel() presenter.finishMatterThreadFlow() } + MatterThreadStep.ERROR_MATTER -> { Toast.makeText(this@WebViewActivity, commonR.string.matter_commissioning_unavailable, Toast.LENGTH_SHORT).show() presenter.finishMatterThreadFlow() } + MatterThreadStep.ERROR_THREAD_LOCAL_NETWORK -> { alertDialog?.cancel() AlertDialog.Builder(this@WebViewActivity) @@ -677,12 +679,14 @@ class WebViewActivity : BaseActivity(), io.homeassistant.companion.android.webvi .show() presenter.finishMatterThreadFlow() } + MatterThreadStep.ERROR_THREAD_OTHER -> { Toast.makeText(this@WebViewActivity, commonR.string.thread_export_unavailable, Toast.LENGTH_SHORT).show() alertDialog?.cancel() presenter.finishMatterThreadFlow() } - else -> { } // Do nothing + + else -> {} // Do nothing } } } @@ -699,7 +703,7 @@ class WebViewActivity : BaseActivity(), io.homeassistant.companion.android.webvi fun onHomeAssistantSetTheme() { // We need to launch the getAndSetStatusBarNavigationBarColors in another thread, because otherwise the evaluateJavascript inside the method // will not trigger it's callback method :/ - GlobalScope.launch(Dispatchers.Main) { + lifecycleScope.launch(Dispatchers.Main) { getAndSetStatusBarNavigationBarColors() } } @@ -735,6 +739,7 @@ class WebViewActivity : BaseActivity(), io.homeassistant.companion.android.webvi presenter.checkSecurityVersion() } } + "config/get" -> { val pm: PackageManager = context.packageManager val hasNfc = pm.hasSystemFeature(PackageManager.FEATURE_NFC) @@ -785,6 +790,7 @@ class WebViewActivity : BaseActivity(), io.homeassistant.companion.android.webvi null, ) } + "assist/show" -> { val payload = if (json.has("payload")) json.getJSONObject("payload") else null startActivity( @@ -796,10 +802,12 @@ class WebViewActivity : BaseActivity(), io.homeassistant.companion.android.webvi ), ) } + "config_screen/show" -> startActivity( SettingsActivity.newInstance(this@WebViewActivity), ) + "tag/write" -> writeNfcTag.launch( WriteNfcTag.Input( @@ -807,6 +815,7 @@ class WebViewActivity : BaseActivity(), io.homeassistant.companion.android.webvi messageId = JSONObject(message).getInt("id"), ), ) + "matter/commission" -> presenter.startCommissioningMatterDevice(this@WebViewActivity) "thread/import_credentials" -> { presenter.exportThreadCredentials(this@WebViewActivity) @@ -816,6 +825,7 @@ class WebViewActivity : BaseActivity(), io.homeassistant.companion.android.webvi .create() alertDialog?.show() } + "bar_code/scan" -> { val payload = if (json.has("payload")) json.getJSONObject("payload") else null if (payload?.has("title") != true || !payload.has("description")) return@post @@ -829,12 +839,14 @@ class WebViewActivity : BaseActivity(), io.homeassistant.companion.android.webvi ), ) } + "improv/scan" -> scanForImprov() "improv/configure_device" -> { val payload = if (json.has("payload")) json.getJSONObject("payload") else null if (payload?.has("name") != true) return@post configureImprovDevice(payload.getString("name")) } + "exoplayer/play_hls" -> exoPlayHls(json) "exoplayer/stop" -> exoStopHls() "exoplayer/resize" -> exoResizeHls(json) @@ -858,25 +870,21 @@ class WebViewActivity : BaseActivity(), io.homeassistant.companion.android.webvi "document.getElementsByTagName('html')[0].computedStyleMap().get('--primary-background-color')[0]" + "].join('" + htmlArraySpacer + "')", ) { webViewColors -> - GlobalScope.launch { - withContext(Dispatchers.Main) { - var statusBarColor = 0 - var navigationBarColor = 0 + lifecycleScope.launch(Dispatchers.Main) { + var statusBarColor = 0 + var navigationBarColor = 0 - if (!webViewColors.isNullOrEmpty() && webViewColors != "null") { - val trimmedColorString = webViewColors.substring(1, webViewColors.length - 1).trim() - val colors = trimmedColorString.split(htmlArraySpacer) - - for (color in colors) { - Timber.d("Color from webview is \"$trimmedColorString\"") - } + if (!webViewColors.isNullOrEmpty() && webViewColors != "null") { + val trimmedColorString = webViewColors.substring(1, webViewColors.length - 1).trim() + val colors = trimmedColorString.split(htmlArraySpacer) - statusBarColor = presenter.parseWebViewColor(colors[0].trim()) - navigationBarColor = presenter.parseWebViewColor(colors[1].trim()) - } + Timber.d("Color from webview is \"$trimmedColorString\"") - setStatusBarAndNavigationBarColor(statusBarColor, navigationBarColor) + statusBarColor = presenter.parseWebViewColor(colors[0].trim()) + navigationBarColor = presenter.parseWebViewColor(colors[1].trim()) } + + setStatusBarAndNavigationBarColor(statusBarColor, navigationBarColor) } } } @@ -894,8 +902,7 @@ class WebViewActivity : BaseActivity(), io.homeassistant.companion.android.webvi presenter.updateActiveServer() - appLocked = presenter.isAppLocked() - binding.blurView.setBlurEnabled(appLocked) + appLocked.value = presenter.isAppLocked() setWebViewZoom() @@ -969,46 +976,28 @@ class WebViewActivity : BaseActivity(), io.homeassistant.companion.android.webvi fun exoPlayHls(json: JSONObject) { val payload = json.getJSONObject("payload") val uri = Uri.parse(payload.getString("url")) - exoMute = payload.optBoolean("muted") + val isMuted = payload.optBoolean("muted") runOnUiThread { - exoPlayer = ExoPlayer.Builder(applicationContext).setMediaSourceFactory( - DefaultMediaSourceFactory( - CronetDataSource.Factory( - CronetEngine.Builder(applicationContext).enableQuic(true).build(), - Executors.newSingleThreadExecutor(), - ), - ).setLiveMaxSpeed(8.0f), - ).setLoadControl( - DefaultLoadControl.Builder().setBufferDurationsMs( - 0, - 30000, - 0, - 0, - ).build(), - ).build() - exoPlayer?.setMediaItem(MediaItem.fromUri(uri)) - exoPlayer?.playWhenReady = true - exoPlayer?.addListener(object : Player.Listener { - override fun onVideoSizeChanged(videoSize: VideoSize) { - super.onVideoSizeChanged(videoSize) - if (videoSize.height == 0 || videoSize.width == 0) return - exoBottom = - exoTop + ((exoRight - exoLeft) * videoSize.height / videoSize.width) - runOnUiThread { - exoResizeLayout() - } - } - }) - exoPlayer?.prepare() - exoMute = !exoMute // Invert because exoToggleMute() will invert again - exoToggleMute() - exoPlayerView.setFullscreenButtonClickListener { isFullScreen -> - isExoFullScreen = isFullScreen - exoResizeLayout() + exoPlayer.value = initializePlayer(this).apply { + setMediaItem(MediaItem.fromUri(uri)) + playWhenReady = true + addListener( + object : Player.Listener { + override fun onVideoSizeChanged(videoSize: VideoSize) { + super.onVideoSizeChanged(videoSize) + if (videoSize.height == 0 || videoSize.width == 0) return + playerSize.value?.let { + // If height is already set, it means the frontend has imposed a constraint; avoid overriding. + if (it.height == 0.dp) { + playerSize.value = DpSize(it.width, it.width * videoSize.height / videoSize.width) + } + } + } + }, + ) + prepare() + volume = if (isMuted) 0f else 1f } - exoPlayerView.player = exoPlayer - exoPlayerView.visibility = View.VISIBLE - findViewById(R.id.exo_ha_mute)?.setOnClickListener { exoToggleMute() } } sendExternalBusMessage( ExternalBusMessage( @@ -1024,69 +1013,44 @@ class WebViewActivity : BaseActivity(), io.homeassistant.companion.android.webvi fun exoStopHls() { runOnUiThread { - exoPlayerView.visibility = View.GONE - exoPlayerView.player = null - exoPlayer?.release() - exoPlayer = null + // We might be in fullscreen mode, so we display back the system UI just in case + // same for the fullscreen status of ExoPlayer + isExoFullScreen = false + showSystemUI() + exoPlayer.value?.release() + exoPlayer.value = null + playerSize.value = null + playerTop.value = 0.dp + playerLeft.value = 0.dp } } + @OptIn(UnstableApi::class) fun exoResizeHls(json: JSONObject) { - val rect = json.getJSONObject("payload") - val displayMetrics = applicationContext.resources.displayMetrics - exoLeft = (rect.getInt("left") * displayMetrics.density).toInt() - exoTop = (rect.getInt("top") * displayMetrics.density).toInt() - exoRight = (rect.getInt("right") * displayMetrics.density).toInt() - exoBottom = if ((exoPlayer == null) || (exoPlayer!!.videoFormat == null)) { - // only set exoBottom if we can't calculate it from the video - (rect.getInt("bottom") * displayMetrics.density).toInt() - } else { - exoTop + (exoRight - exoLeft) * exoPlayer!!.videoFormat!!.height / - exoPlayer!!.videoFormat!!.width - } - runOnUiThread { - exoResizeLayout() - } - } - - private fun exoToggleMute() { - exoMute = !exoMute - if (exoMute) { - exoPlayer?.volume = 0f - findViewById(R.id.exo_ha_mute)?.setImageResource(R.drawable.ic_baseline_volume_off_24) - } else { - exoPlayer?.volume = 1f - findViewById(R.id.exo_ha_mute)?.setImageResource(R.drawable.ic_baseline_volume_up_24) - } - } - - fun exoResizeLayout() { - val exoLayoutParams = exoPlayerView.layoutParams as FrameLayout.LayoutParams - if (isExoFullScreen) { - if (resources.configuration.orientation == Configuration.ORIENTATION_LANDSCAPE) { - exoPlayerView.resizeMode = AspectRatioFrameLayout.RESIZE_MODE_FILL + val payload = json.getJSONObject("payload") + // Payload is https://developer.mozilla.org/en-US/docs/Web/API/Element/getBoundingClientRect + // The values are already scaled to the screen. + // We only need to store the top left corner for the offset and the player size + + val left = payload.getInt("left") + val top = payload.getInt("top") + val right = payload.getInt("right") + // if the bottom value is not 0 we should take it it is a constraint from the frontend, otherwise we try to compute the + // height based on the video's aspect ratio if available. + val bottom = payload.getInt("bottom").takeIf { it > 0 } ?: exoPlayer.value?.videoFormat?.let { videoFormat -> + if (videoFormat.width > 0) { + // Calculate height of the video based on aspect ratio + val width = right - left + val videoHeight = width * videoFormat.height / videoFormat.width + (top + videoHeight) } else { - exoPlayerView.resizeMode = AspectRatioFrameLayout.RESIZE_MODE_FIXED_WIDTH + payload.getInt("bottom") } - exoLayoutParams.setMargins(0, 0, 0, 0) - exoPlayerView.layoutParams.height = FrameLayout.LayoutParams.MATCH_PARENT - exoPlayerView.layoutParams.width = FrameLayout.LayoutParams.MATCH_PARENT - hideSystemUI() - } else { - exoPlayerView.resizeMode = AspectRatioFrameLayout.RESIZE_MODE_FILL - exoPlayerView.layoutParams.height = FrameLayout.LayoutParams.WRAP_CONTENT - exoPlayerView.layoutParams.width = FrameLayout.LayoutParams.MATCH_PARENT - val screenWidth: Int = resources.displayMetrics.widthPixels - val screenHeight: Int = resources.displayMetrics.heightPixels - exoLayoutParams.setMargins( - exoLeft, - exoTop, - maxOf(screenWidth - exoRight, 0), - maxOf(screenHeight - exoBottom, 0), - ) - showSystemUI() - } - exoPlayerView.requestLayout() + } ?: payload.getInt("bottom") + + playerTop.value = top.dp + playerLeft.value = left.dp + playerSize.value = DpSize((right - left).dp, (bottom - top).dp) } fun processHaptic(hapticType: String) { @@ -1102,6 +1066,7 @@ class WebViewActivity : BaseActivity(), io.homeassistant.companion.android.webvi vm?.vibrate(500) } } + "warning" -> { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { vm?.vibrate(VibrationEffect.createOneShot(400, VibrationEffect.EFFECT_HEAVY_CLICK)) @@ -1110,6 +1075,7 @@ class WebViewActivity : BaseActivity(), io.homeassistant.companion.android.webvi vm?.vibrate(1500) } } + "failure" -> { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { webView.performHapticFeedback(HapticFeedbackConstants.REJECT) @@ -1118,15 +1084,19 @@ class WebViewActivity : BaseActivity(), io.homeassistant.companion.android.webvi vm?.vibrate(1000) } } + "light" -> { webView.performHapticFeedback(HapticFeedbackConstants.KEYBOARD_TAP) } + "medium" -> { webView.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY) } + "heavy" -> { webView.performHapticFeedback(HapticFeedbackConstants.LONG_PRESS) } + "selection" -> { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { webView.performHapticFeedback(HapticFeedbackConstants.GESTURE_START) @@ -1137,18 +1107,20 @@ class WebViewActivity : BaseActivity(), io.homeassistant.companion.android.webvi } } } + private fun authenticationResult(result: Int) { when (result) { Authenticator.SUCCESS -> { Timber.d("Authentication successful, unlocking app") - appLocked = false + appLocked.value = false presenter.setAppActive(true) - binding.blurView.setBlurEnabled(false) } + Authenticator.CANCELED -> { Timber.d("Authentication canceled by user, closing activity") finishAffinity() } + else -> Timber.d("Authentication failed, retry attempts allowed") } unlockingApp = false @@ -1185,15 +1157,12 @@ class WebViewActivity : BaseActivity(), io.homeassistant.companion.android.webvi } override fun unlockAppIfNeeded() { - appLocked = presenter.isAppLocked() - if (appLocked) { - binding.blurView.setBlurEnabled(true) + appLocked.value = presenter.isAppLocked() + if (appLocked.value) { if (!unlockingApp) { authenticator.authenticate(getString(commonR.string.biometric_title)) } unlockingApp = true - } else { - binding.blurView.setBlurEnabled(false) } } @@ -1206,22 +1175,6 @@ class WebViewActivity : BaseActivity(), io.homeassistant.companion.android.webvi windowInsetsController.show(WindowInsetsCompat.Type.systemBars()) } - @RequiresApi(Build.VERSION_CODES.O) - override fun onPictureInPictureModeChanged( - isInPictureInPictureMode: Boolean, - newConfig: Configuration, - ) { - super.onPictureInPictureModeChanged(isInPictureInPictureMode, newConfig) - if (exoPlayerView.visibility != View.VISIBLE && ::binding.isInitialized) { - binding.exoviewGroup.layoutParams.height = if (isInPictureInPictureMode) { - FrameLayout.LayoutParams.MATCH_PARENT - } else { - videoHeight - } - decor.requestLayout() - } - } - override fun onUserLeaveHint() { super.onUserLeaveHint() presenter.setAppActive(false) @@ -1606,11 +1559,13 @@ class WebViewActivity : BaseActivity(), io.homeassistant.companion.android.webvi getSystemService()?.enqueue(request) ?: Timber.d("Unable to start download, cannot get DownloadManager") } + "data" -> { lifecycleScope.launch { DataUriDownloadManager.saveDataUri(this@WebViewActivity, url, mimetype) } } + else -> { Timber.d("Received download request for unsupported scheme, forwarding to system") try { diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/webview/WebViewContentScreen.kt b/app/src/main/kotlin/io/homeassistant/companion/android/webview/WebViewContentScreen.kt new file mode 100644 index 00000000000..140d4a795bf --- /dev/null +++ b/app/src/main/kotlin/io/homeassistant/companion/android/webview/WebViewContentScreen.kt @@ -0,0 +1,96 @@ +package io.homeassistant.companion.android.webview + +import android.view.View +import android.webkit.WebView +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.offset +import androidx.compose.foundation.layout.size +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.res.colorResource +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.DpSize +import androidx.compose.ui.unit.dp +import androidx.compose.ui.viewinterop.AndroidView +import androidx.media3.common.Player +import dev.chrisbanes.haze.hazeEffect +import dev.chrisbanes.haze.materials.ExperimentalHazeMaterialsApi +import dev.chrisbanes.haze.materials.HazeMaterials +import io.homeassistant.companion.android.common.R as commonR +import io.homeassistant.companion.android.util.compose.HomeAssistantAppTheme +import io.homeassistant.companion.android.util.compose.media.player.HAMediaPlayer +import io.homeassistant.companion.android.util.compose.webview.HAWebView + +@OptIn(ExperimentalHazeMaterialsApi::class) +@Composable +internal fun WebViewContentScreen( + webView: WebView?, + player: Player?, + playerSize: DpSize?, + playerTop: Dp, + playerLeft: Dp, + currentAppLocked: Boolean, + customViewFromWebView: View?, + onFullscreenClicked: (isFullscreen: Boolean) -> Unit, +) { + HomeAssistantAppTheme { + Box( + modifier = Modifier + .fillMaxSize() + .background(colorResource(commonR.color.colorLaunchScreenBackground)), + ) { + HAWebView( + factory = { + webView + }, + modifier = Modifier + .fillMaxSize() + .background(Color.Transparent) + .then(if (currentAppLocked) Modifier.hazeEffect(style = HazeMaterials.thin()) else Modifier), + ) + + player?.let { player -> + playerSize?.let { playerSize -> + HAMediaPlayer( + player = player, + contentScale = ContentScale.Inside, + modifier = Modifier + .offset(playerLeft, playerTop) + .size(playerSize), + fullscreenModifier = Modifier + .fillMaxSize() + .background(Color.Black), + onFullscreenClicked = onFullscreenClicked, + ) + } + } + customViewFromWebView?.let { customViewFromWebView -> + AndroidView( + factory = { + customViewFromWebView + }, + modifier = Modifier.fillMaxSize(), + ) + } + } + } +} + +@Preview +@Composable +private fun WebViewContentScreenPreview() { + WebViewContentScreen( + webView = null, + player = null, + playerSize = null, + playerTop = 0.dp, + playerLeft = 0.dp, + currentAppLocked = false, + customViewFromWebView = null, + ) { } +} diff --git a/app/src/main/res/drawable/ic_baseline_volume_off_24.xml b/app/src/main/res/drawable/ic_baseline_volume_off_24.xml deleted file mode 100644 index 9a8a9e8a6a5..00000000000 --- a/app/src/main/res/drawable/ic_baseline_volume_off_24.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/drawable/ic_baseline_volume_up_24.xml b/app/src/main/res/drawable/ic_baseline_volume_up_24.xml deleted file mode 100644 index 0dc6b0ca513..00000000000 --- a/app/src/main/res/drawable/ic_baseline_volume_up_24.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - diff --git a/app/src/main/res/layout/activity_webview.xml b/app/src/main/res/layout/activity_webview.xml deleted file mode 100644 index dc99669076b..00000000000 --- a/app/src/main/res/layout/activity_webview.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/exo_player_control_view.xml b/app/src/main/res/layout/exo_player_control_view.xml deleted file mode 100644 index 28ac7bf8f13..00000000000 --- a/app/src/main/res/layout/exo_player_control_view.xml +++ /dev/null @@ -1,136 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index ea7ff3bb369..faad5077ab4 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -123,17 +123,12 @@ @color/colorAccent - - - diff --git a/app/src/screenshotTest/kotlin/io/homeassistant/companion/android/webview/WebViewContentScreenScreenshotTest.kt b/app/src/screenshotTest/kotlin/io/homeassistant/companion/android/webview/WebViewContentScreenScreenshotTest.kt new file mode 100644 index 00000000000..92aea110d60 --- /dev/null +++ b/app/src/screenshotTest/kotlin/io/homeassistant/companion/android/webview/WebViewContentScreenScreenshotTest.kt @@ -0,0 +1,52 @@ +package io.homeassistant.companion.android.webview + +import androidx.compose.runtime.Composable +import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.DpSize +import androidx.compose.ui.unit.dp +import io.homeassistant.companion.android.util.compose.media.player.FakePlayer + +class WebViewContentScreenScreenshotTest { + + @Preview + @Composable + fun `WebView with app unlocked`() { + WebViewContentScreen( + webView = null, + player = null, + playerSize = null, + playerTop = 0.dp, + playerLeft = 0.dp, + currentAppLocked = false, + customViewFromWebView = null, + ) { } + } + + @Preview + @Composable + fun `WebView with app locked`() { + WebViewContentScreen( + webView = null, + player = null, + playerSize = null, + playerTop = 0.dp, + playerLeft = 0.dp, + currentAppLocked = true, + customViewFromWebView = null, + ) { } + } + + @Preview + @Composable + fun `WebView with player`() { + WebViewContentScreen( + webView = null, + player = FakePlayer(), + playerSize = DpSize(100.dp, 100.dp), + playerTop = 50.dp, + playerLeft = 10.dp, + currentAppLocked = false, + customViewFromWebView = null, + ) { } + } +} diff --git a/automotive/build.gradle.kts b/automotive/build.gradle.kts index d5de8933ff0..633abdc9c50 100644 --- a/automotive/build.gradle.kts +++ b/automotive/build.gradle.kts @@ -30,6 +30,9 @@ android { // We disable the lint tasks for release only for automotive because the baseline cannot be parsed in release builds due to the fact that we share sources between app and automotive. // It is not an issue since we still check the :app module and the code is exactly the same. checkReleaseBuilds = false + + // Until we fully migrate to Material3 this lint issue is too verbose https://github.com/home-assistant/android/issues/5420 + disable += listOf("UsingMaterialAndMaterial3Libraries") } } diff --git a/automotive/gradle.lockfile b/automotive/gradle.lockfile index b0a0f81b4b9..1072c3370fd 100644 --- a/automotive/gradle.lockfile +++ b/automotive/gradle.lockfile @@ -37,6 +37,8 @@ androidx.compose.foundation:foundation-android:1.8.3=fullDebugAndroidTestCompile androidx.compose.foundation:foundation-layout-android:1.8.3=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath androidx.compose.foundation:foundation-layout:1.8.3=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath androidx.compose.foundation:foundation:1.8.3=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath +androidx.compose.material3:material3-android:1.3.2=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath +androidx.compose.material3:material3:1.3.2=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath androidx.compose.material:material-android:1.8.3=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath androidx.compose.material:material-icons-core-android:1.7.8=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath androidx.compose.material:material-icons-core:1.7.8=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath @@ -169,7 +171,6 @@ androidx.media3:media3-exoplayer:1.7.1=fullDebugAndroidTestCompileClasspath,full androidx.media3:media3-extractor:1.7.1=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath androidx.media3:media3-session:1.7.1=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath androidx.media3:media3-ui-compose:1.7.1=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath -androidx.media3:media3-ui:1.7.1=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath androidx.media:media:1.7.0=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath androidx.navigation:navigation-common-android:2.9.0=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath androidx.navigation:navigation-common:2.9.0=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath @@ -220,9 +221,10 @@ androidx.test:core:1.6.1=androidTestImplementationDependenciesMetadata,fullDebug androidx.test:monitor:1.7.2=androidTestImplementationDependenciesMetadata,fullDebugAndroidTestCompileClasspath,fullDebugAndroidTestRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugAndroidTestRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath,testImplementationDependenciesMetadata androidx.test:rules:1.6.1=androidTestImplementationDependenciesMetadata,fullDebugAndroidTestCompileClasspath,fullDebugAndroidTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugAndroidTestRuntimeClasspath androidx.test:runner:1.6.2=androidTestImplementationDependenciesMetadata,fullDebugAndroidTestCompileClasspath,fullDebugAndroidTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugAndroidTestRuntimeClasspath -androidx.tracing:tracing-ktx:1.2.0=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath +androidx.tracing:tracing-android:1.3.0=fullDebugAndroidTestCompileClasspath,fullDebugAndroidTestRuntimeClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugAndroidTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath +androidx.tracing:tracing-ktx:1.3.0=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath androidx.tracing:tracing:1.1.0=androidTestImplementationDependenciesMetadata -androidx.tracing:tracing:1.2.0=fullDebugAndroidTestCompileClasspath,fullDebugAndroidTestRuntimeClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugAndroidTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath +androidx.tracing:tracing:1.3.0=fullDebugAndroidTestCompileClasspath,fullDebugAndroidTestRuntimeClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugAndroidTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath androidx.transition:transition:1.5.0=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath androidx.vectordrawable:vectordrawable-animated:1.1.0=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath androidx.vectordrawable:vectordrawable:1.1.0=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath @@ -422,6 +424,10 @@ com.squareup:javawriter:2.1.1=fullDebugAndroidTestRuntimeClasspath,minimalDebugA com.squareup:kotlinpoet:1.11.0=_agp_internal_javaPreCompileFullDebug_kspClasspath,_agp_internal_javaPreCompileFullRelease_kspClasspath,_agp_internal_javaPreCompileMinimalDebug_kspClasspath,_agp_internal_javaPreCompileMinimalRelease_kspClasspath,hiltAnnotationProcessorFullDebug,hiltAnnotationProcessorFullDebugAndroidTest,hiltAnnotationProcessorFullDebugUnitTest,hiltAnnotationProcessorFullRelease,hiltAnnotationProcessorFullReleaseUnitTest,hiltAnnotationProcessorMinimalDebug,hiltAnnotationProcessorMinimalDebugAndroidTest,hiltAnnotationProcessorMinimalDebugUnitTest,hiltAnnotationProcessorMinimalRelease,hiltAnnotationProcessorMinimalReleaseUnitTest,kspFullDebugAndroidTestKotlinProcessorClasspath,kspFullDebugKotlinProcessorClasspath,kspFullDebugUnitTestKotlinProcessorClasspath,kspFullReleaseKotlinProcessorClasspath,kspFullReleaseUnitTestKotlinProcessorClasspath,kspMinimalDebugAndroidTestKotlinProcessorClasspath,kspMinimalDebugKotlinProcessorClasspath,kspMinimalDebugUnitTestKotlinProcessorClasspath,kspMinimalReleaseKotlinProcessorClasspath,kspMinimalReleaseUnitTestKotlinProcessorClasspath com.vdurmont:emoji-java:5.1.1=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath commons-io:commons-io:2.16.1=_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention +dev.chrisbanes.haze:haze-android:1.6.4=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath +dev.chrisbanes.haze:haze-materials-android:1.6.4=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath +dev.chrisbanes.haze:haze-materials:1.6.4=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath +dev.chrisbanes.haze:haze:1.6.4=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath dev.drewhamilton.poko:poko-annotations-jvm:0.15.0=ktlint,ktlintBaselineReporter,ktlintRuleset dev.drewhamilton.poko:poko-annotations:0.15.0=ktlint,ktlintBaselineReporter,ktlintRuleset info.picocli:picocli:4.7.5=ktlint @@ -523,24 +529,30 @@ org.ec4j.core:ec4j-core:0.3.0=ktlint,ktlintBaselineReporter,ktlintRuleset org.hamcrest:hamcrest-core:1.3=androidTestImplementationDependenciesMetadata,fullDebugAndroidTestCompileClasspath,fullDebugAndroidTestRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugAndroidTestRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath,testImplementationDependenciesMetadata org.hamcrest:hamcrest-integration:1.3=fullDebugAndroidTestRuntimeClasspath,minimalDebugAndroidTestRuntimeClasspath org.hamcrest:hamcrest-library:1.3=fullDebugAndroidTestRuntimeClasspath,minimalDebugAndroidTestRuntimeClasspath -org.jetbrains.androidx.lifecycle:lifecycle-common:2.8.3=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath -org.jetbrains.androidx.lifecycle:lifecycle-runtime-compose:2.8.3=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath -org.jetbrains.androidx.lifecycle:lifecycle-runtime:2.8.3=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath -org.jetbrains.androidx.lifecycle:lifecycle-viewmodel:2.8.3=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath -org.jetbrains.compose.animation:animation-core:1.7.0=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath -org.jetbrains.compose.animation:animation:1.7.0=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath -org.jetbrains.compose.annotation-internal:annotation:1.7.0=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath -org.jetbrains.compose.collection-internal:collection:1.7.0=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath -org.jetbrains.compose.foundation:foundation-layout:1.7.0=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath -org.jetbrains.compose.foundation:foundation:1.7.0=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath -org.jetbrains.compose.runtime:runtime-saveable:1.7.0=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath -org.jetbrains.compose.runtime:runtime:1.7.0=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath -org.jetbrains.compose.ui:ui-geometry:1.7.0=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath -org.jetbrains.compose.ui:ui-graphics:1.7.0=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath -org.jetbrains.compose.ui:ui-text:1.7.0=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath -org.jetbrains.compose.ui:ui-unit:1.7.0=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath -org.jetbrains.compose.ui:ui-util:1.7.0=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath -org.jetbrains.compose.ui:ui:1.7.0=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.androidx.lifecycle:lifecycle-common:2.8.4=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.androidx.lifecycle:lifecycle-runtime-compose:2.8.4=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.androidx.lifecycle:lifecycle-runtime:2.8.4=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.androidx.lifecycle:lifecycle-viewmodel:2.8.4=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.compose.animation:animation-core:1.8.0=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.compose.animation:animation:1.8.0=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.compose.annotation-internal:annotation:1.6.11=fullDebugAndroidTestCompileClasspath,minimalDebugAndroidTestCompileClasspath +org.jetbrains.compose.annotation-internal:annotation:1.8.0=fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.compose.collection-internal:collection:1.8.0=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.compose.foundation:foundation-layout:1.8.0=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.compose.foundation:foundation:1.8.0=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.compose.material3:material3:1.8.0=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.compose.material:material-ripple:1.8.0=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.compose.runtime:runtime-saveable:1.8.0=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.compose.runtime:runtime:1.8.0=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.compose.ui:ui-backhandler-android-debug:1.8.0=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath +org.jetbrains.compose.ui:ui-backhandler-android:1.8.0=fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.compose.ui:ui-backhandler:1.8.0=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.compose.ui:ui-geometry:1.8.0=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.compose.ui:ui-graphics:1.8.0=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.compose.ui:ui-text:1.8.0=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.compose.ui:ui-unit:1.8.0=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.compose.ui:ui-util:1.8.0=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath +org.jetbrains.compose.ui:ui:1.8.0=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath org.jetbrains.intellij.deps:trove4j:1.0.20200330=kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathFullDebug,kotlinCompilerPluginClasspathFullDebugAndroidTest,kotlinCompilerPluginClasspathFullDebugUnitTest,kotlinCompilerPluginClasspathFullRelease,kotlinCompilerPluginClasspathFullReleaseUnitTest,kotlinCompilerPluginClasspathMinimalDebug,kotlinCompilerPluginClasspathMinimalDebugAndroidTest,kotlinCompilerPluginClasspathMinimalDebugUnitTest,kotlinCompilerPluginClasspathMinimalRelease,kotlinCompilerPluginClasspathMinimalReleaseUnitTest,kotlinKlibCommonizerClasspath,ktlint,ktlintBaselineReporter,ktlintRuleset org.jetbrains.kotlin:kotlin-android-extensions-runtime:2.1.21=fullDebugAndroidTestCompileClasspath,fullDebugAndroidTestRuntimeClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugAndroidTestRuntimeClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath org.jetbrains.kotlin:kotlin-bom:1.8.22=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath @@ -601,11 +613,9 @@ org.jetbrains.kotlin:kotlin-stdlib:2.1.0=_internal-unified-test-platform-android org.jetbrains.kotlin:kotlin-stdlib:2.1.10=_agp_internal_javaPreCompileFullDebug_kspClasspath,_agp_internal_javaPreCompileFullRelease_kspClasspath,_agp_internal_javaPreCompileMinimalDebug_kspClasspath,_agp_internal_javaPreCompileMinimalRelease_kspClasspath,hiltAnnotationProcessorFullDebug,hiltAnnotationProcessorFullDebugAndroidTest,hiltAnnotationProcessorFullDebugUnitTest,hiltAnnotationProcessorFullRelease,hiltAnnotationProcessorFullReleaseUnitTest,hiltAnnotationProcessorMinimalDebug,hiltAnnotationProcessorMinimalDebugAndroidTest,hiltAnnotationProcessorMinimalDebugUnitTest,hiltAnnotationProcessorMinimalRelease,hiltAnnotationProcessorMinimalReleaseUnitTest,kspFullDebugAndroidTestKotlinProcessorClasspath,kspFullDebugKotlinProcessorClasspath,kspFullDebugUnitTestKotlinProcessorClasspath,kspFullReleaseKotlinProcessorClasspath,kspFullReleaseUnitTestKotlinProcessorClasspath,kspMinimalDebugAndroidTestKotlinProcessorClasspath,kspMinimalDebugKotlinProcessorClasspath,kspMinimalDebugUnitTestKotlinProcessorClasspath,kspMinimalReleaseKotlinProcessorClasspath,kspMinimalReleaseUnitTestKotlinProcessorClasspath org.jetbrains.kotlin:kotlin-stdlib:2.1.21=fullDebugAndroidTestCompileClasspath,fullDebugAndroidTestRuntimeClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,kotlinBuildToolsApiClasspath,kotlinCompilerClasspath,kotlinCompilerPluginClasspathFullDebug,kotlinCompilerPluginClasspathFullDebugAndroidTest,kotlinCompilerPluginClasspathFullDebugUnitTest,kotlinCompilerPluginClasspathFullRelease,kotlinCompilerPluginClasspathFullReleaseUnitTest,kotlinCompilerPluginClasspathMinimalDebug,kotlinCompilerPluginClasspathMinimalDebugAndroidTest,kotlinCompilerPluginClasspathMinimalDebugUnitTest,kotlinCompilerPluginClasspathMinimalRelease,kotlinCompilerPluginClasspathMinimalReleaseUnitTest,kotlinKlibCommonizerClasspath,kspPluginClasspath,kspPluginClasspathNonEmbeddable,minimalDebugAndroidTestCompileClasspath,minimalDebugAndroidTestRuntimeClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath org.jetbrains.kotlinx:atomicfu-jvm:0.22.0=_internal-unified-test-platform-android-driver-instrumentation,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-device-info,_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-logcat,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-launcher -org.jetbrains.kotlinx:atomicfu-jvm:0.23.2=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath org.jetbrains.kotlinx:atomicfu:0.21.0=androidTestImplementationDependenciesMetadata org.jetbrains.kotlinx:atomicfu:0.22.0=_internal-unified-test-platform-android-driver-instrumentation,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-device-info,_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-logcat,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-launcher org.jetbrains.kotlinx:atomicfu:0.23.1=fullImplementationDependenciesMetadata,testImplementationDependenciesMetadata -org.jetbrains.kotlinx:atomicfu:0.23.2=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath org.jetbrains.kotlinx:kotlinx-coroutines-android:1.10.2=fullDebugAndroidTestCompileClasspath,fullDebugAndroidTestRuntimeClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullImplementationDependenciesMetadata,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugAndroidTestRuntimeClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.1=testImplementationDependenciesMetadata org.jetbrains.kotlinx:kotlinx-coroutines-android:1.7.3=androidTestImplementationDependenciesMetadata diff --git a/automotive/lint-baseline.xml b/automotive/lint-baseline.xml index d1d4e2d3e43..e1ab99d6c29 100644 --- a/automotive/lint-baseline.xml +++ b/automotive/lint-baseline.xml @@ -386,145 +386,6 @@ column="20"/> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -774,7 +635,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -785,7 +646,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -2600,7 +2461,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -2611,7 +2472,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -2622,7 +2483,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -2633,7 +2494,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -2644,7 +2505,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -2655,7 +2516,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -2666,7 +2527,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -2980,17 +2841,6 @@ column="12"/> - - - - - - - - - - - - @@ -3572,7 +3400,7 @@ errorLine2=" ^"> @@ -3583,7 +3411,7 @@ errorLine2=" ^"> @@ -3594,7 +3422,7 @@ errorLine2=" ^"> @@ -3605,7 +3433,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -3616,7 +3444,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -3627,7 +3455,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -3638,7 +3466,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -3649,7 +3477,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -3752,72 +3580,6 @@ column="41"/> - - - - - - - - - - - - - - - - - - - - - - - - { "implementation"(project(":common")) "implementation"(libs.blurView) + "implementation"(libs.haze) + "implementation"(libs.haze.materials) "fullImplementation"(libs.androidx.health.connect.client) "implementation"(libs.kotlin.stdlib) diff --git a/build-logic/convention/src/main/kotlin/AndroidCommonConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidCommonConventionPlugin.kt index 44b831b411c..275eb57e367 100644 --- a/build-logic/convention/src/main/kotlin/AndroidCommonConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidCommonConventionPlugin.kt @@ -79,7 +79,10 @@ class AndroidCommonConventionPlugin : Plugin { baseline = file("lint-baseline.xml") // We already have renovate for this checkDependencies = false - disable += listOf("GradleDependency", "AndroidGradlePluginVersion") + disable += listOf( + "GradleDependency", + "AndroidGradlePluginVersion", + ) // Since we use baseline we should not have full path in the files absolutePaths = false diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index ddfa9f0ed37..b04ab83d917 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -37,6 +37,7 @@ glance = "1.1.1" googleServices = "4.4.2" guava = "33.4.6-android" healthServicesClient = "1.1.0-alpha05" +haze = "1.6.4" hilt = "2.56.2" iconics = "5.4.0" improv = "0.1.1" @@ -168,6 +169,8 @@ firebase-messaging = { module = "com.google.firebase:firebase-messaging" } fragment-ktx = { module = "androidx.fragment:fragment-ktx", version.ref = "fragment-ktx" } constraintlayout = { module = "androidx.constraintlayout:constraintlayout", version.ref = "constraintlayout" } guava = { module = "com.google.guava:guava", version.ref = "guava" } +haze = { module = "dev.chrisbanes.haze:haze", version.ref = "haze" } +haze-materials = { module = "dev.chrisbanes.haze:haze-materials", version.ref = "haze" } hilt-android-compiler = { module = "com.google.dagger:hilt-android-compiler", version.ref = "hilt" } hilt-android = { module = "com.google.dagger:hilt-android", version.ref = "hilt" } iconics-compose = { module = "com.mikepenz:iconics-compose", version.ref = "iconics" } @@ -201,7 +204,6 @@ media3-datasource-cronet = { module = "androidx.media3:media3-datasource-cronet" media3-exoplayer = { module = "androidx.media3:media3-exoplayer", version.ref = "media3" } media3-exoplayer-hls = { module = "androidx.media3:media3-exoplayer-hls", version.ref = "media3" } media3-session = { module = "androidx.media3:media3-session", version.ref = "media3" } -media3-ui = { module = "androidx.media3:media3-ui", version.ref = "media3" } media3-ui-compose = { module = "androidx.media3:media3-ui-compose", version.ref = "media3" } mockk = { module = "io.mockk:mockk", version.ref = "mockk" } paging-runtime = { module = "androidx.paging:paging-runtime", version.ref = "paging" } @@ -242,6 +244,6 @@ androidx-compose-ui-test = ["compose-ui-test", "compose-ui-testManifest"] androidx-glance = ["androidx-glance-appwidget", "androidx-glance-appwidget-preview", "androidx-glance-material", "androidx-glance-preview"] androidx-glance-testing = ["androidx-glance-testing", "androidx-glance-appwidget-testing"] coil = ["coil-views", "coil-oktthp", "coil-svg"] -media3 = ["media3-exoplayer", "media3-exoplayer-hls", "media3-ui", "media3-ui-compose", "media3-session"] +media3 = ["media3-exoplayer", "media3-exoplayer-hls", "media3-ui-compose", "media3-session"] paging = ["paging-runtime", "paging-compose"] wear-tiles = ["wear-tiles", "wear-protolayout-main", "wear-protolayout-expression", "wear-protolayout-material"] pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy