From 5822ab7d913e2b5d76071860516640e6bc6939e5 Mon Sep 17 00:00:00 2001 From: lone-faerie Date: Fri, 25 Apr 2025 23:09:02 -0700 Subject: [PATCH 01/15] Add org.unifiedpush.android.connector to dependencies --- app/gradle.lockfile | 3 +++ automotive/gradle.lockfile | 3 +++ .../AndroidApplicationDependenciesConventionPlugin.kt | 2 ++ common/build.gradle.kts | 2 ++ common/gradle.lockfile | 6 +++++- gradle/libs.versions.toml | 5 ++++- wear/gradle.lockfile | 5 ++++- 7 files changed, 23 insertions(+), 3 deletions(-) diff --git a/app/gradle.lockfile b/app/gradle.lockfile index b1b99fbd882..fbd6c888269 100644 --- a/app/gradle.lockfile +++ b/app/gradle.lockfile @@ -268,6 +268,7 @@ com.google.code.findbugs:jsr305:3.0.2=_agp_internal_javaPreCompileFullDebug_kspC com.google.code.gson:gson:2.10.1=_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle,_internal-unified-test-platform-core com.google.code.gson:gson:2.11.0=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath com.google.code.gson:gson:2.8.9=_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-logcat,_internal-unified-test-platform-launcher +com.google.crypto.tink:tink:1.17.0=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath com.google.crypto.tink:tink:1.7.0=_internal-unified-test-platform-android-test-plugin-host-emulator-control com.google.dagger:dagger-compiler:2.56.2=_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.google.dagger:dagger-lint-aar:2.56.2=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath @@ -312,6 +313,7 @@ com.google.j2objc:j2objc-annotations:3.0.0=fullDebugRuntimeClasspath,fullDebugUn com.google.protobuf:protobuf-java-util:3.22.3=_internal-unified-test-platform-core com.google.protobuf:protobuf-java-util:3.24.4=_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 com.google.protobuf:protobuf-java:3.24.4=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-driver-instrumentation,_internal-unified-test-platform-android-test-plugin,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_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-result-listener-gradle,_internal-unified-test-platform-core,_internal-unified-test-platform-launcher +com.google.protobuf:protobuf-java:4.28.2=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath com.google.protobuf:protobuf-javalite:3.22.3=minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath com.google.protobuf:protobuf-kotlin:3.24.4=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-driver-instrumentation,_internal-unified-test-platform-android-test-plugin,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_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-result-listener-gradle,_internal-unified-test-platform-core,_internal-unified-test-platform-launcher com.google.testing.platform:android-device-provider-local:0.0.9-alpha03=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_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-result-listener-gradle @@ -526,4 +528,5 @@ org.jetbrains:annotations:23.0.0=_internal-unified-test-platform-android-device- org.jspecify:jspecify:1.0.0=_agp_internal_javaPreCompileFullDebug_kspClasspath,_agp_internal_javaPreCompileFullRelease_kspClasspath,_agp_internal_javaPreCompileMinimalDebug_kspClasspath,_agp_internal_javaPreCompileMinimalRelease_kspClasspath,fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullImplementationDependenciesMetadata,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,hiltAnnotationProcessorFullDebug,hiltAnnotationProcessorFullDebugAndroidTest,hiltAnnotationProcessorFullDebugUnitTest,hiltAnnotationProcessorFullRelease,hiltAnnotationProcessorFullReleaseUnitTest,hiltAnnotationProcessorMinimalDebug,hiltAnnotationProcessorMinimalDebugAndroidTest,hiltAnnotationProcessorMinimalDebugUnitTest,hiltAnnotationProcessorMinimalRelease,hiltAnnotationProcessorMinimalReleaseUnitTest,kspFullDebugAndroidTestKotlinProcessorClasspath,kspFullDebugKotlinProcessorClasspath,kspFullDebugUnitTestKotlinProcessorClasspath,kspFullReleaseKotlinProcessorClasspath,kspFullReleaseUnitTestKotlinProcessorClasspath,kspMinimalDebugAndroidTestKotlinProcessorClasspath,kspMinimalDebugKotlinProcessorClasspath,kspMinimalDebugUnitTestKotlinProcessorClasspath,kspMinimalReleaseKotlinProcessorClasspath,kspMinimalReleaseUnitTestKotlinProcessorClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath org.openhomefoundation.improv-wifi:sdk-android:0.1.1=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath org.slf4j:slf4j-api:2.0.4=ktlint +org.unifiedpush.android:connector:3.0.9=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath empty=_agp_internal_javaPreCompileFullDebugAndroidTest_kspClasspath,_agp_internal_javaPreCompileFullDebugUnitTest_kspClasspath,_agp_internal_javaPreCompileFullReleaseUnitTest_kspClasspath,_agp_internal_javaPreCompileMinimalDebugAndroidTest_kspClasspath,_agp_internal_javaPreCompileMinimalDebugUnitTest_kspClasspath,_agp_internal_javaPreCompileMinimalReleaseUnitTest_kspClasspath,androidApis,androidJdkImage,androidTestApiDependenciesMetadata,androidTestCompileOnlyDependenciesMetadata,androidTestDebugApiDependenciesMetadata,androidTestDebugCompileOnlyDependenciesMetadata,androidTestDebugImplementationDependenciesMetadata,androidTestDebugIntransitiveDependenciesMetadata,androidTestFullApiDependenciesMetadata,androidTestFullCompileOnlyDependenciesMetadata,androidTestFullDebugApiDependenciesMetadata,androidTestFullDebugCompileOnlyDependenciesMetadata,androidTestFullDebugImplementationDependenciesMetadata,androidTestFullDebugIntransitiveDependenciesMetadata,androidTestFullImplementationDependenciesMetadata,androidTestFullIntransitiveDependenciesMetadata,androidTestIntransitiveDependenciesMetadata,androidTestMinimalApiDependenciesMetadata,androidTestMinimalCompileOnlyDependenciesMetadata,androidTestMinimalDebugApiDependenciesMetadata,androidTestMinimalDebugCompileOnlyDependenciesMetadata,androidTestMinimalDebugImplementationDependenciesMetadata,androidTestMinimalDebugIntransitiveDependenciesMetadata,androidTestMinimalImplementationDependenciesMetadata,androidTestMinimalIntransitiveDependenciesMetadata,androidTestReleaseApiDependenciesMetadata,androidTestReleaseCompileOnlyDependenciesMetadata,androidTestReleaseImplementationDependenciesMetadata,androidTestReleaseIntransitiveDependenciesMetadata,androidTestUtil,compileOnlyDependenciesMetadata,debugApiDependenciesMetadata,debugCompileOnlyDependenciesMetadata,debugIntransitiveDependenciesMetadata,fullApiDependenciesMetadata,fullCompileOnlyDependenciesMetadata,fullDebugAndroidTestAnnotationProcessorClasspath,fullDebugAndroidTestApiDependenciesMetadata,fullDebugAndroidTestCompileOnlyDependenciesMetadata,fullDebugAndroidTestImplementationDependenciesMetadata,fullDebugAndroidTestIntransitiveDependenciesMetadata,fullDebugAnnotationProcessorClasspath,fullDebugApiDependenciesMetadata,fullDebugCompileOnlyDependenciesMetadata,fullDebugImplementationDependenciesMetadata,fullDebugIntransitiveDependenciesMetadata,fullDebugReverseMetadataValues,fullDebugUnitTestAnnotationProcessorClasspath,fullDebugUnitTestApiDependenciesMetadata,fullDebugUnitTestCompileOnlyDependenciesMetadata,fullDebugUnitTestImplementationDependenciesMetadata,fullDebugUnitTestIntransitiveDependenciesMetadata,fullDebugWearBundling,fullIntransitiveDependenciesMetadata,fullReleaseAnnotationProcessorClasspath,fullReleaseApiDependenciesMetadata,fullReleaseCompileOnlyDependenciesMetadata,fullReleaseImplementationDependenciesMetadata,fullReleaseIntransitiveDependenciesMetadata,fullReleaseReverseMetadataValues,fullReleaseUnitTestAnnotationProcessorClasspath,fullReleaseUnitTestApiDependenciesMetadata,fullReleaseUnitTestCompileOnlyDependenciesMetadata,fullReleaseUnitTestImplementationDependenciesMetadata,fullReleaseUnitTestIntransitiveDependenciesMetadata,fullReleaseWearBundling,hiltCompileOnlyFullDebug,hiltCompileOnlyFullDebugAndroidTest,hiltCompileOnlyFullDebugUnitTest,hiltCompileOnlyFullRelease,hiltCompileOnlyFullReleaseUnitTest,hiltCompileOnlyMinimalDebug,hiltCompileOnlyMinimalDebugAndroidTest,hiltCompileOnlyMinimalDebugUnitTest,hiltCompileOnlyMinimalRelease,hiltCompileOnlyMinimalReleaseUnitTest,intransitiveDependenciesMetadata,kotlinCompilerPluginClasspath,kotlinNativeCompilerPluginClasspath,lintChecks,lintPublish,minimalApiDependenciesMetadata,minimalCompileOnlyDependenciesMetadata,minimalDebugAndroidTestAnnotationProcessorClasspath,minimalDebugAndroidTestApiDependenciesMetadata,minimalDebugAndroidTestCompileOnlyDependenciesMetadata,minimalDebugAndroidTestImplementationDependenciesMetadata,minimalDebugAndroidTestIntransitiveDependenciesMetadata,minimalDebugAnnotationProcessorClasspath,minimalDebugApiDependenciesMetadata,minimalDebugCompileOnlyDependenciesMetadata,minimalDebugImplementationDependenciesMetadata,minimalDebugIntransitiveDependenciesMetadata,minimalDebugReverseMetadataValues,minimalDebugUnitTestAnnotationProcessorClasspath,minimalDebugUnitTestApiDependenciesMetadata,minimalDebugUnitTestCompileOnlyDependenciesMetadata,minimalDebugUnitTestImplementationDependenciesMetadata,minimalDebugUnitTestIntransitiveDependenciesMetadata,minimalDebugWearBundling,minimalIntransitiveDependenciesMetadata,minimalReleaseAnnotationProcessorClasspath,minimalReleaseApiDependenciesMetadata,minimalReleaseCompileOnlyDependenciesMetadata,minimalReleaseImplementationDependenciesMetadata,minimalReleaseIntransitiveDependenciesMetadata,minimalReleaseReverseMetadataValues,minimalReleaseUnitTestAnnotationProcessorClasspath,minimalReleaseUnitTestApiDependenciesMetadata,minimalReleaseUnitTestCompileOnlyDependenciesMetadata,minimalReleaseUnitTestImplementationDependenciesMetadata,minimalReleaseUnitTestIntransitiveDependenciesMetadata,minimalReleaseWearBundling,releaseApiDependenciesMetadata,releaseCompileOnlyDependenciesMetadata,releaseImplementationDependenciesMetadata,releaseIntransitiveDependenciesMetadata,testApiDependenciesMetadata,testCompileOnlyDependenciesMetadata,testDebugApiDependenciesMetadata,testDebugCompileOnlyDependenciesMetadata,testDebugImplementationDependenciesMetadata,testDebugIntransitiveDependenciesMetadata,testFixturesApiDependenciesMetadata,testFixturesCompileOnlyDependenciesMetadata,testFixturesDebugApiDependenciesMetadata,testFixturesDebugCompileOnlyDependenciesMetadata,testFixturesDebugImplementationDependenciesMetadata,testFixturesDebugIntransitiveDependenciesMetadata,testFixturesFullApiDependenciesMetadata,testFixturesFullCompileOnlyDependenciesMetadata,testFixturesFullImplementationDependenciesMetadata,testFixturesFullIntransitiveDependenciesMetadata,testFixturesImplementationDependenciesMetadata,testFixturesIntransitiveDependenciesMetadata,testFixturesMinimalApiDependenciesMetadata,testFixturesMinimalCompileOnlyDependenciesMetadata,testFixturesMinimalImplementationDependenciesMetadata,testFixturesMinimalIntransitiveDependenciesMetadata,testFixturesReleaseApiDependenciesMetadata,testFixturesReleaseCompileOnlyDependenciesMetadata,testFixturesReleaseImplementationDependenciesMetadata,testFixturesReleaseIntransitiveDependenciesMetadata,testFullApiDependenciesMetadata,testFullCompileOnlyDependenciesMetadata,testFullDebugApiDependenciesMetadata,testFullDebugCompileOnlyDependenciesMetadata,testFullDebugImplementationDependenciesMetadata,testFullDebugIntransitiveDependenciesMetadata,testFullImplementationDependenciesMetadata,testFullIntransitiveDependenciesMetadata,testFullReleaseApiDependenciesMetadata,testFullReleaseCompileOnlyDependenciesMetadata,testFullReleaseImplementationDependenciesMetadata,testFullReleaseIntransitiveDependenciesMetadata,testImplementationDependenciesMetadata,testIntransitiveDependenciesMetadata,testMinimalApiDependenciesMetadata,testMinimalCompileOnlyDependenciesMetadata,testMinimalDebugApiDependenciesMetadata,testMinimalDebugCompileOnlyDependenciesMetadata,testMinimalDebugImplementationDependenciesMetadata,testMinimalDebugIntransitiveDependenciesMetadata,testMinimalImplementationDependenciesMetadata,testMinimalIntransitiveDependenciesMetadata,testMinimalReleaseApiDependenciesMetadata,testMinimalReleaseCompileOnlyDependenciesMetadata,testMinimalReleaseImplementationDependenciesMetadata,testMinimalReleaseIntransitiveDependenciesMetadata,testReleaseApiDependenciesMetadata,testReleaseCompileOnlyDependenciesMetadata,testReleaseImplementationDependenciesMetadata,testReleaseIntransitiveDependenciesMetadata diff --git a/automotive/gradle.lockfile b/automotive/gradle.lockfile index ba8586680bf..e9e5ba36f32 100644 --- a/automotive/gradle.lockfile +++ b/automotive/gradle.lockfile @@ -269,6 +269,7 @@ com.google.code.findbugs:jsr305:3.0.2=_agp_internal_javaPreCompileFullDebug_kspC com.google.code.gson:gson:2.10.1=_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle,_internal-unified-test-platform-core com.google.code.gson:gson:2.11.0=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath com.google.code.gson:gson:2.8.9=_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-logcat,_internal-unified-test-platform-launcher +com.google.crypto.tink:tink:1.17.0=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath com.google.crypto.tink:tink:1.7.0=_internal-unified-test-platform-android-test-plugin-host-emulator-control com.google.dagger:dagger-compiler:2.56.2=_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.google.dagger:dagger-lint-aar:2.56.2=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath @@ -313,6 +314,7 @@ com.google.j2objc:j2objc-annotations:3.0.0=fullDebugRuntimeClasspath,fullDebugUn com.google.protobuf:protobuf-java-util:3.22.3=_internal-unified-test-platform-core com.google.protobuf:protobuf-java-util:3.24.4=_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 com.google.protobuf:protobuf-java:3.24.4=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-driver-instrumentation,_internal-unified-test-platform-android-test-plugin,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_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-result-listener-gradle,_internal-unified-test-platform-core,_internal-unified-test-platform-launcher +com.google.protobuf:protobuf-java:4.28.2=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath com.google.protobuf:protobuf-javalite:3.22.3=minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath com.google.protobuf:protobuf-kotlin:3.24.4=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-driver-instrumentation,_internal-unified-test-platform-android-test-plugin,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_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-result-listener-gradle,_internal-unified-test-platform-core,_internal-unified-test-platform-launcher com.google.testing.platform:android-device-provider-local:0.0.9-alpha03=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_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-result-listener-gradle @@ -527,4 +529,5 @@ org.jetbrains:annotations:23.0.0=_internal-unified-test-platform-android-device- org.jspecify:jspecify:1.0.0=_agp_internal_javaPreCompileFullDebug_kspClasspath,_agp_internal_javaPreCompileFullRelease_kspClasspath,_agp_internal_javaPreCompileMinimalDebug_kspClasspath,_agp_internal_javaPreCompileMinimalRelease_kspClasspath,fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullImplementationDependenciesMetadata,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,hiltAnnotationProcessorFullDebug,hiltAnnotationProcessorFullDebugAndroidTest,hiltAnnotationProcessorFullDebugUnitTest,hiltAnnotationProcessorFullRelease,hiltAnnotationProcessorFullReleaseUnitTest,hiltAnnotationProcessorMinimalDebug,hiltAnnotationProcessorMinimalDebugAndroidTest,hiltAnnotationProcessorMinimalDebugUnitTest,hiltAnnotationProcessorMinimalRelease,hiltAnnotationProcessorMinimalReleaseUnitTest,kspFullDebugAndroidTestKotlinProcessorClasspath,kspFullDebugKotlinProcessorClasspath,kspFullDebugUnitTestKotlinProcessorClasspath,kspFullReleaseKotlinProcessorClasspath,kspFullReleaseUnitTestKotlinProcessorClasspath,kspMinimalDebugAndroidTestKotlinProcessorClasspath,kspMinimalDebugKotlinProcessorClasspath,kspMinimalDebugUnitTestKotlinProcessorClasspath,kspMinimalReleaseKotlinProcessorClasspath,kspMinimalReleaseUnitTestKotlinProcessorClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath org.openhomefoundation.improv-wifi:sdk-android:0.1.1=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath org.slf4j:slf4j-api:2.0.4=ktlint +org.unifiedpush.android:connector:3.0.9=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath empty=_agp_internal_javaPreCompileFullDebugAndroidTest_kspClasspath,_agp_internal_javaPreCompileFullDebugUnitTest_kspClasspath,_agp_internal_javaPreCompileFullReleaseUnitTest_kspClasspath,_agp_internal_javaPreCompileMinimalDebugAndroidTest_kspClasspath,_agp_internal_javaPreCompileMinimalDebugUnitTest_kspClasspath,_agp_internal_javaPreCompileMinimalReleaseUnitTest_kspClasspath,androidApis,androidJdkImage,androidTestApiDependenciesMetadata,androidTestCompileOnlyDependenciesMetadata,androidTestDebugApiDependenciesMetadata,androidTestDebugCompileOnlyDependenciesMetadata,androidTestDebugImplementationDependenciesMetadata,androidTestDebugIntransitiveDependenciesMetadata,androidTestFullApiDependenciesMetadata,androidTestFullCompileOnlyDependenciesMetadata,androidTestFullDebugApiDependenciesMetadata,androidTestFullDebugCompileOnlyDependenciesMetadata,androidTestFullDebugImplementationDependenciesMetadata,androidTestFullDebugIntransitiveDependenciesMetadata,androidTestFullImplementationDependenciesMetadata,androidTestFullIntransitiveDependenciesMetadata,androidTestIntransitiveDependenciesMetadata,androidTestMinimalApiDependenciesMetadata,androidTestMinimalCompileOnlyDependenciesMetadata,androidTestMinimalDebugApiDependenciesMetadata,androidTestMinimalDebugCompileOnlyDependenciesMetadata,androidTestMinimalDebugImplementationDependenciesMetadata,androidTestMinimalDebugIntransitiveDependenciesMetadata,androidTestMinimalImplementationDependenciesMetadata,androidTestMinimalIntransitiveDependenciesMetadata,androidTestReleaseApiDependenciesMetadata,androidTestReleaseCompileOnlyDependenciesMetadata,androidTestReleaseImplementationDependenciesMetadata,androidTestReleaseIntransitiveDependenciesMetadata,androidTestUtil,compileOnlyDependenciesMetadata,debugApiDependenciesMetadata,debugCompileOnlyDependenciesMetadata,debugIntransitiveDependenciesMetadata,fullApiDependenciesMetadata,fullCompileOnlyDependenciesMetadata,fullDebugAndroidTestAnnotationProcessorClasspath,fullDebugAndroidTestApiDependenciesMetadata,fullDebugAndroidTestCompileOnlyDependenciesMetadata,fullDebugAndroidTestImplementationDependenciesMetadata,fullDebugAndroidTestIntransitiveDependenciesMetadata,fullDebugAnnotationProcessorClasspath,fullDebugApiDependenciesMetadata,fullDebugCompileOnlyDependenciesMetadata,fullDebugImplementationDependenciesMetadata,fullDebugIntransitiveDependenciesMetadata,fullDebugReverseMetadataValues,fullDebugUnitTestAnnotationProcessorClasspath,fullDebugUnitTestApiDependenciesMetadata,fullDebugUnitTestCompileOnlyDependenciesMetadata,fullDebugUnitTestImplementationDependenciesMetadata,fullDebugUnitTestIntransitiveDependenciesMetadata,fullDebugWearBundling,fullIntransitiveDependenciesMetadata,fullReleaseAnnotationProcessorClasspath,fullReleaseApiDependenciesMetadata,fullReleaseCompileOnlyDependenciesMetadata,fullReleaseImplementationDependenciesMetadata,fullReleaseIntransitiveDependenciesMetadata,fullReleaseReverseMetadataValues,fullReleaseUnitTestAnnotationProcessorClasspath,fullReleaseUnitTestApiDependenciesMetadata,fullReleaseUnitTestCompileOnlyDependenciesMetadata,fullReleaseUnitTestImplementationDependenciesMetadata,fullReleaseUnitTestIntransitiveDependenciesMetadata,fullReleaseWearBundling,hiltCompileOnlyFullDebug,hiltCompileOnlyFullDebugAndroidTest,hiltCompileOnlyFullDebugUnitTest,hiltCompileOnlyFullRelease,hiltCompileOnlyFullReleaseUnitTest,hiltCompileOnlyMinimalDebug,hiltCompileOnlyMinimalDebugAndroidTest,hiltCompileOnlyMinimalDebugUnitTest,hiltCompileOnlyMinimalRelease,hiltCompileOnlyMinimalReleaseUnitTest,intransitiveDependenciesMetadata,kotlinCompilerPluginClasspath,kotlinNativeCompilerPluginClasspath,lintChecks,lintPublish,minimalApiDependenciesMetadata,minimalCompileOnlyDependenciesMetadata,minimalDebugAndroidTestAnnotationProcessorClasspath,minimalDebugAndroidTestApiDependenciesMetadata,minimalDebugAndroidTestCompileOnlyDependenciesMetadata,minimalDebugAndroidTestImplementationDependenciesMetadata,minimalDebugAndroidTestIntransitiveDependenciesMetadata,minimalDebugAnnotationProcessorClasspath,minimalDebugApiDependenciesMetadata,minimalDebugCompileOnlyDependenciesMetadata,minimalDebugImplementationDependenciesMetadata,minimalDebugIntransitiveDependenciesMetadata,minimalDebugReverseMetadataValues,minimalDebugUnitTestAnnotationProcessorClasspath,minimalDebugUnitTestApiDependenciesMetadata,minimalDebugUnitTestCompileOnlyDependenciesMetadata,minimalDebugUnitTestImplementationDependenciesMetadata,minimalDebugUnitTestIntransitiveDependenciesMetadata,minimalDebugWearBundling,minimalIntransitiveDependenciesMetadata,minimalReleaseAnnotationProcessorClasspath,minimalReleaseApiDependenciesMetadata,minimalReleaseCompileOnlyDependenciesMetadata,minimalReleaseImplementationDependenciesMetadata,minimalReleaseIntransitiveDependenciesMetadata,minimalReleaseReverseMetadataValues,minimalReleaseUnitTestAnnotationProcessorClasspath,minimalReleaseUnitTestApiDependenciesMetadata,minimalReleaseUnitTestCompileOnlyDependenciesMetadata,minimalReleaseUnitTestImplementationDependenciesMetadata,minimalReleaseUnitTestIntransitiveDependenciesMetadata,minimalReleaseWearBundling,releaseApiDependenciesMetadata,releaseCompileOnlyDependenciesMetadata,releaseImplementationDependenciesMetadata,releaseIntransitiveDependenciesMetadata,testApiDependenciesMetadata,testCompileOnlyDependenciesMetadata,testDebugApiDependenciesMetadata,testDebugCompileOnlyDependenciesMetadata,testDebugImplementationDependenciesMetadata,testDebugIntransitiveDependenciesMetadata,testFixturesApiDependenciesMetadata,testFixturesCompileOnlyDependenciesMetadata,testFixturesDebugApiDependenciesMetadata,testFixturesDebugCompileOnlyDependenciesMetadata,testFixturesDebugImplementationDependenciesMetadata,testFixturesDebugIntransitiveDependenciesMetadata,testFixturesFullApiDependenciesMetadata,testFixturesFullCompileOnlyDependenciesMetadata,testFixturesFullImplementationDependenciesMetadata,testFixturesFullIntransitiveDependenciesMetadata,testFixturesImplementationDependenciesMetadata,testFixturesIntransitiveDependenciesMetadata,testFixturesMinimalApiDependenciesMetadata,testFixturesMinimalCompileOnlyDependenciesMetadata,testFixturesMinimalImplementationDependenciesMetadata,testFixturesMinimalIntransitiveDependenciesMetadata,testFixturesReleaseApiDependenciesMetadata,testFixturesReleaseCompileOnlyDependenciesMetadata,testFixturesReleaseImplementationDependenciesMetadata,testFixturesReleaseIntransitiveDependenciesMetadata,testFullApiDependenciesMetadata,testFullCompileOnlyDependenciesMetadata,testFullDebugApiDependenciesMetadata,testFullDebugCompileOnlyDependenciesMetadata,testFullDebugImplementationDependenciesMetadata,testFullDebugIntransitiveDependenciesMetadata,testFullImplementationDependenciesMetadata,testFullIntransitiveDependenciesMetadata,testFullReleaseApiDependenciesMetadata,testFullReleaseCompileOnlyDependenciesMetadata,testFullReleaseImplementationDependenciesMetadata,testFullReleaseIntransitiveDependenciesMetadata,testImplementationDependenciesMetadata,testIntransitiveDependenciesMetadata,testMinimalApiDependenciesMetadata,testMinimalCompileOnlyDependenciesMetadata,testMinimalDebugApiDependenciesMetadata,testMinimalDebugCompileOnlyDependenciesMetadata,testMinimalDebugImplementationDependenciesMetadata,testMinimalDebugIntransitiveDependenciesMetadata,testMinimalImplementationDependenciesMetadata,testMinimalIntransitiveDependenciesMetadata,testMinimalReleaseApiDependenciesMetadata,testMinimalReleaseCompileOnlyDependenciesMetadata,testMinimalReleaseImplementationDependenciesMetadata,testMinimalReleaseIntransitiveDependenciesMetadata,testReleaseApiDependenciesMetadata,testReleaseCompileOnlyDependenciesMetadata,testReleaseImplementationDependenciesMetadata,testReleaseIntransitiveDependenciesMetadata diff --git a/build-logic/convention/src/main/kotlin/AndroidApplicationDependenciesConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidApplicationDependenciesConventionPlugin.kt index 754a37fa6b3..8bd65151d7a 100644 --- a/build-logic/convention/src/main/kotlin/AndroidApplicationDependenciesConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidApplicationDependenciesConventionPlugin.kt @@ -52,6 +52,8 @@ class AndroidApplicationDependenciesConventionPlugin : Plugin { "implementation"(libs.jackson.module.kotlin) "implementation"(libs.okhttp) + "implementation"(libs.unifiedpush.connector) + "implementation"(libs.bundles.coil) "fullImplementation"(libs.play.services.location) diff --git a/common/build.gradle.kts b/common/build.gradle.kts index 59503743498..50f58ddda50 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -50,6 +50,8 @@ dependencies { implementation(libs.jackson.module.kotlin) implementation(libs.android.beacon.library) + implementation(libs.unifiedpush.connector) + implementation(libs.iconics.core) implementation(libs.community.material.typeface) diff --git a/common/gradle.lockfile b/common/gradle.lockfile index eb6b38b44d8..b8dbb8f7773 100644 --- a/common/gradle.lockfile +++ b/common/gradle.lockfile @@ -134,8 +134,9 @@ com.google.auto.value:auto-value-annotations:1.11.0=debugUnitTestCompileClasspat com.google.auto.value:auto-value-annotations:1.6.3=_agp_internal_javaPreCompileDebug_kspClasspath,_agp_internal_javaPreCompileRelease_kspClasspath,hiltAnnotationProcessorDebugAndroidTest,hiltAnnotationProcessorDebugUnitTest,hiltAnnotationProcessorReleaseUnitTest,kspDebugAndroidTestKotlinProcessorClasspath,kspDebugKotlinProcessorClasspath,kspDebugUnitTestKotlinProcessorClasspath,kspReleaseKotlinProcessorClasspath,kspReleaseUnitTestKotlinProcessorClasspath com.google.auto:auto-common:1.2.1=_agp_internal_javaPreCompileDebug_kspClasspath,_agp_internal_javaPreCompileRelease_kspClasspath,_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-driver-instrumentation,_internal-unified-test-platform-android-test-plugin,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_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-result-listener-gradle,hiltAnnotationProcessorDebugAndroidTest,hiltAnnotationProcessorDebugUnitTest,hiltAnnotationProcessorReleaseUnitTest,kspDebugAndroidTestKotlinProcessorClasspath,kspDebugKotlinProcessorClasspath,kspDebugUnitTestKotlinProcessorClasspath,kspReleaseKotlinProcessorClasspath,kspReleaseUnitTestKotlinProcessorClasspath com.google.code.findbugs:jsr305:3.0.2=_agp_internal_javaPreCompileDebug_kspClasspath,_agp_internal_javaPreCompileRelease_kspClasspath,_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-driver-instrumentation,_internal-unified-test-platform-android-test-plugin,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_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-result-listener-gradle,_internal-unified-test-platform-core,_internal-unified-test-platform-launcher,debugAndroidTestCompileClasspath,debugAndroidTestRuntimeClasspath,debugCompileClasspath,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,hiltAnnotationProcessorDebugAndroidTest,hiltAnnotationProcessorDebugUnitTest,hiltAnnotationProcessorReleaseUnitTest,implementationDependenciesMetadata,kspDebugAndroidTestKotlinProcessorClasspath,kspDebugKotlinProcessorClasspath,kspDebugUnitTestKotlinProcessorClasspath,kspReleaseKotlinProcessorClasspath,kspReleaseUnitTestKotlinProcessorClasspath,releaseCompileClasspath,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath,testImplementationDependenciesMetadata -com.google.code.gson:gson:2.10.1=_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle,_internal-unified-test-platform-core +com.google.code.gson:gson:2.10.1=_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle,_internal-unified-test-platform-core,debugAndroidTestRuntimeClasspath,debugRuntimeClasspath,debugUnitTestRuntimeClasspath,releaseRuntimeClasspath,releaseUnitTestRuntimeClasspath com.google.code.gson:gson:2.8.9=_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-logcat,_internal-unified-test-platform-launcher +com.google.crypto.tink:tink:1.17.0=debugAndroidTestRuntimeClasspath,debugRuntimeClasspath,debugUnitTestRuntimeClasspath,releaseRuntimeClasspath,releaseUnitTestRuntimeClasspath com.google.crypto.tink:tink:1.7.0=_internal-unified-test-platform-android-test-plugin-host-emulator-control com.google.dagger:dagger-compiler:2.56.2=_agp_internal_javaPreCompileDebug_kspClasspath,_agp_internal_javaPreCompileRelease_kspClasspath,hiltAnnotationProcessorDebugAndroidTest,hiltAnnotationProcessorDebugUnitTest,hiltAnnotationProcessorReleaseUnitTest,kspDebugAndroidTestKotlinProcessorClasspath,kspDebugKotlinProcessorClasspath,kspDebugUnitTestKotlinProcessorClasspath,kspReleaseKotlinProcessorClasspath,kspReleaseUnitTestKotlinProcessorClasspath com.google.dagger:dagger-lint-aar:2.56.2=debugAndroidTestCompileClasspath,debugAndroidTestRuntimeClasspath,debugCompileClasspath,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,implementationDependenciesMetadata,releaseCompileClasspath,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath @@ -151,6 +152,7 @@ com.google.devtools.ksp:symbol-processing-api:2.1.20-2.0.0=kotlinCompilerPluginC com.google.devtools.ksp:symbol-processing-cmdline:2.1.20-2.0.0=kspPluginClasspathNonEmbeddable com.google.devtools.ksp:symbol-processing:2.1.20-2.0.0=kotlinCompilerPluginClasspathDebug,kotlinCompilerPluginClasspathDebugAndroidTest,kotlinCompilerPluginClasspathDebugUnitTest,kotlinCompilerPluginClasspathRelease,kotlinCompilerPluginClasspathReleaseUnitTest,kspPluginClasspath com.google.errorprone:error_prone_annotation:2.34.0=debugUnitTestRuntimeClasspath,releaseUnitTestRuntimeClasspath +com.google.errorprone:error_prone_annotations:2.22.0=debugAndroidTestRuntimeClasspath,debugRuntimeClasspath,releaseRuntimeClasspath com.google.errorprone:error_prone_annotations:2.23.0=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-driver-instrumentation,_internal-unified-test-platform-android-test-plugin,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_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-result-listener-gradle,_internal-unified-test-platform-core,_internal-unified-test-platform-launcher com.google.errorprone:error_prone_annotations:2.26.1=_agp_internal_javaPreCompileDebug_kspClasspath,_agp_internal_javaPreCompileRelease_kspClasspath,hiltAnnotationProcessorDebugAndroidTest,hiltAnnotationProcessorDebugUnitTest,hiltAnnotationProcessorReleaseUnitTest,kspDebugAndroidTestKotlinProcessorClasspath,kspDebugKotlinProcessorClasspath,kspDebugUnitTestKotlinProcessorClasspath,kspReleaseKotlinProcessorClasspath,kspReleaseUnitTestKotlinProcessorClasspath com.google.errorprone:error_prone_annotations:2.28.0=debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath,testImplementationDependenciesMetadata @@ -168,6 +170,7 @@ com.google.j2objc:j2objc-annotations:3.0.0=debugUnitTestCompileClasspath,debugUn com.google.protobuf:protobuf-java-util:3.22.3=_internal-unified-test-platform-core com.google.protobuf:protobuf-java-util:3.24.4=_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 com.google.protobuf:protobuf-java:3.24.4=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-driver-instrumentation,_internal-unified-test-platform-android-test-plugin,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_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-result-listener-gradle,_internal-unified-test-platform-core,_internal-unified-test-platform-launcher +com.google.protobuf:protobuf-java:4.28.2=debugAndroidTestRuntimeClasspath,debugRuntimeClasspath,debugUnitTestRuntimeClasspath,releaseRuntimeClasspath,releaseUnitTestRuntimeClasspath com.google.protobuf:protobuf-kotlin:3.24.4=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-driver-instrumentation,_internal-unified-test-platform-android-test-plugin,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_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-result-listener-gradle,_internal-unified-test-platform-core,_internal-unified-test-platform-launcher com.google.testing.platform:android-device-provider-local:0.0.9-alpha03=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_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-result-listener-gradle com.google.testing.platform:android-driver-instrumentation:0.0.9-alpha03=_internal-unified-test-platform-android-driver-instrumentation,_internal-unified-test-platform-android-test-plugin-host-emulator-control @@ -381,6 +384,7 @@ org.robolectric:shadows-framework:4.14.1=debugUnitTestCompileClasspath,debugUnit org.robolectric:utils-reflector:4.14.1=debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath,testImplementationDependenciesMetadata org.robolectric:utils:4.14.1=debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath,testImplementationDependenciesMetadata org.slf4j:slf4j-api:2.0.4=ktlint +org.unifiedpush.android:connector:3.0.9=debugAndroidTestCompileClasspath,debugAndroidTestRuntimeClasspath,debugCompileClasspath,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,releaseCompileClasspath,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath org.xerial:sqlite-jdbc:3.41.2.2=_agp_internal_javaPreCompileDebug_kspClasspath,_agp_internal_javaPreCompileRelease_kspClasspath,hiltAnnotationProcessorDebugAndroidTest,hiltAnnotationProcessorDebugUnitTest,hiltAnnotationProcessorReleaseUnitTest,kspDebugAndroidTestKotlinProcessorClasspath,kspDebugKotlinProcessorClasspath,kspDebugUnitTestKotlinProcessorClasspath,kspReleaseKotlinProcessorClasspath,kspReleaseUnitTestKotlinProcessorClasspath org.yaml:snakeyaml:2.3=debugUnitTestRuntimeClasspath,releaseUnitTestRuntimeClasspath empty=_agp_internal_javaPreCompileDebugAndroidTest_kspClasspath,_agp_internal_javaPreCompileDebugUnitTest_kspClasspath,_agp_internal_javaPreCompileReleaseUnitTest_kspClasspath,androidApis,androidJdkImage,androidTestApiDependenciesMetadata,androidTestCompileOnlyDependenciesMetadata,androidTestDebugApiDependenciesMetadata,androidTestDebugCompileOnlyDependenciesMetadata,androidTestDebugImplementationDependenciesMetadata,androidTestDebugIntransitiveDependenciesMetadata,androidTestIntransitiveDependenciesMetadata,androidTestReleaseApiDependenciesMetadata,androidTestReleaseCompileOnlyDependenciesMetadata,androidTestReleaseImplementationDependenciesMetadata,androidTestReleaseIntransitiveDependenciesMetadata,androidTestUtil,compileOnlyDependenciesMetadata,coreLibraryDesugaring,debugAndroidTestAnnotationProcessorClasspath,debugAndroidTestApiDependenciesMetadata,debugAndroidTestCompileOnlyDependenciesMetadata,debugAndroidTestImplementationDependenciesMetadata,debugAndroidTestIntransitiveDependenciesMetadata,debugAnnotationProcessorClasspath,debugApiDependenciesMetadata,debugCompileOnlyDependenciesMetadata,debugImplementationDependenciesMetadata,debugIntransitiveDependenciesMetadata,debugUnitTestAnnotationProcessorClasspath,debugUnitTestApiDependenciesMetadata,debugUnitTestCompileOnlyDependenciesMetadata,debugUnitTestImplementationDependenciesMetadata,debugUnitTestIntransitiveDependenciesMetadata,hiltCompileOnlyDebugAndroidTest,hiltCompileOnlyDebugUnitTest,hiltCompileOnlyReleaseUnitTest,intransitiveDependenciesMetadata,kotlinCompilerPluginClasspath,kotlinNativeCompilerPluginClasspath,lintPublish,releaseAnnotationProcessorClasspath,releaseApiDependenciesMetadata,releaseCompileOnlyDependenciesMetadata,releaseImplementationDependenciesMetadata,releaseIntransitiveDependenciesMetadata,releaseUnitTestAnnotationProcessorClasspath,releaseUnitTestApiDependenciesMetadata,releaseUnitTestCompileOnlyDependenciesMetadata,releaseUnitTestImplementationDependenciesMetadata,releaseUnitTestIntransitiveDependenciesMetadata,testApiDependenciesMetadata,testCompileOnlyDependenciesMetadata,testDebugApiDependenciesMetadata,testDebugCompileOnlyDependenciesMetadata,testDebugImplementationDependenciesMetadata,testDebugIntransitiveDependenciesMetadata,testFixturesApiDependenciesMetadata,testFixturesCompileOnlyDependenciesMetadata,testFixturesDebugApiDependenciesMetadata,testFixturesDebugCompileOnlyDependenciesMetadata,testFixturesDebugImplementationDependenciesMetadata,testFixturesDebugIntransitiveDependenciesMetadata,testFixturesImplementationDependenciesMetadata,testFixturesIntransitiveDependenciesMetadata,testFixturesReleaseApiDependenciesMetadata,testFixturesReleaseCompileOnlyDependenciesMetadata,testFixturesReleaseImplementationDependenciesMetadata,testFixturesReleaseIntransitiveDependenciesMetadata,testIntransitiveDependenciesMetadata,testReleaseApiDependenciesMetadata,testReleaseCompileOnlyDependenciesMetadata,testReleaseImplementationDependenciesMetadata,testReleaseIntransitiveDependenciesMetadata diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index e6fe399d6a9..4b3d5ee9251 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -70,6 +70,7 @@ screenshot = "0.0.1-alpha09" sentry-android = "8.8.0" timber = "5.0.1" tools-desugar-jdk-libs = "2.1.5" +unifiedpush-connector = "3.0.9" watchfaceComplicationsDataSourceKtx = "1.2.1" wear = "1.3.0" wear-compose-foundation = "1.4.1" @@ -201,6 +202,7 @@ robolectric = { module = "org.robolectric:robolectric", version.ref = "robolectr sentry-android-core = { module = "io.sentry:sentry-android-core", version.ref = "sentry-android" } timber = { module = "com.jakewharton.timber:timber", version.ref = "timber" } tools-desugar-jdk = { module = "com.android.tools:desugar_jdk_libs", version.ref = "tools-desugar-jdk-libs" } +unifiedpush-connector = { module = "org.unifiedpush.android:connector", version.ref = "unifiedpush-connector" } wear = { module = "androidx.wear:wear", version.ref = "wear" } wear-compose-foundation = { module = "androidx.wear.compose:compose-foundation", version.ref = "wear-compose-foundation" } wear-compose-material = { module = "androidx.wear.compose:compose-material3", version.ref = "wear-compose-material" } @@ -222,4 +224,5 @@ media3 = ["media3-exoplayer", "media3-exoplayer-hls", "media3-ui"] paging = ["paging-runtime", "paging-compose"] wear-tiles = ["wear-tiles", "wear-protolayout-main", "wear-protolayout-expression", "wear-protolayout-material"] androidx-test =["androidx-test-core", "androidx-test-ext", "androidx-test-rules", "androidx-test-runner"] -androidx-compose-ui-test = ["compose-ui-test", "compose-ui-testManifest"] \ No newline at end of file +androidx-compose-ui-test = ["compose-ui-test", "compose-ui-testManifest"] +unifiedpush = ["unifiedpush-connector"] \ No newline at end of file diff --git a/wear/gradle.lockfile b/wear/gradle.lockfile index b7c3e1e6ec8..46128a72e3b 100644 --- a/wear/gradle.lockfile +++ b/wear/gradle.lockfile @@ -266,9 +266,10 @@ com.google.auto.service:auto-service-annotations:1.1.1=_internal-unified-test-pl com.google.auto.service:auto-service:1.1.1=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-driver-instrumentation,_internal-unified-test-platform-android-test-plugin,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_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-result-listener-gradle com.google.auto:auto-common:1.2.1=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-driver-instrumentation,_internal-unified-test-platform-android-test-plugin,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_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-result-listener-gradle com.google.code.findbugs:jsr305:3.0.2=_agp_internal_javaPreCompileDebug_kspClasspath,_agp_internal_javaPreCompileRelease_kspClasspath,_internal-screenshot-validation-junit-engine,_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-driver-instrumentation,_internal-unified-test-platform-android-test-plugin,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_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-result-listener-gradle,_internal-unified-test-platform-core,_internal-unified-test-platform-launcher,debugAndroidTestCompileClasspath,debugAndroidTestRuntimeClasspath,debugCompileClasspath,debugRuntimeClasspath,debugScreenshotTestCompileClasspath,debugScreenshotTestRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,hiltAnnotationProcessorDebug,hiltAnnotationProcessorDebugAndroidTest,hiltAnnotationProcessorDebugUnitTest,hiltAnnotationProcessorRelease,hiltAnnotationProcessorReleaseUnitTest,kspDebugAndroidTestKotlinProcessorClasspath,kspDebugKotlinProcessorClasspath,kspDebugUnitTestKotlinProcessorClasspath,kspReleaseKotlinProcessorClasspath,kspReleaseUnitTestKotlinProcessorClasspath,releaseCompileClasspath,releaseRuntimeClasspath,releaseScreenshotTestCompileClasspath,releaseScreenshotTestRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath -com.google.code.gson:gson:2.10.1=_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle,_internal-unified-test-platform-core +com.google.code.gson:gson:2.10.1=_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle,_internal-unified-test-platform-core,debugRuntimeClasspath,debugScreenshotTestRuntimeClasspath,debugUnitTestRuntimeClasspath,releaseRuntimeClasspath,releaseScreenshotTestRuntimeClasspath,releaseUnitTestRuntimeClasspath com.google.code.gson:gson:2.11.0=_internal-screenshot-validation-junit-engine com.google.code.gson:gson:2.8.9=_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-logcat,_internal-unified-test-platform-launcher +com.google.crypto.tink:tink:1.17.0=debugRuntimeClasspath,debugScreenshotTestRuntimeClasspath,debugUnitTestRuntimeClasspath,releaseRuntimeClasspath,releaseScreenshotTestRuntimeClasspath,releaseUnitTestRuntimeClasspath com.google.crypto.tink:tink:1.7.0=_internal-unified-test-platform-android-test-plugin-host-emulator-control com.google.dagger:dagger-compiler:2.56.2=_agp_internal_javaPreCompileDebug_kspClasspath,_agp_internal_javaPreCompileRelease_kspClasspath,hiltAnnotationProcessorDebug,hiltAnnotationProcessorDebugAndroidTest,hiltAnnotationProcessorDebugUnitTest,hiltAnnotationProcessorRelease,hiltAnnotationProcessorReleaseUnitTest,kspDebugAndroidTestKotlinProcessorClasspath,kspDebugKotlinProcessorClasspath,kspDebugUnitTestKotlinProcessorClasspath,kspReleaseKotlinProcessorClasspath,kspReleaseUnitTestKotlinProcessorClasspath com.google.dagger:dagger-lint-aar:2.56.2=debugAndroidTestCompileClasspath,debugCompileClasspath,debugRuntimeClasspath,debugScreenshotTestCompileClasspath,debugScreenshotTestRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,releaseCompileClasspath,releaseRuntimeClasspath,releaseScreenshotTestCompileClasspath,releaseScreenshotTestRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath @@ -317,6 +318,7 @@ com.google.protobuf:protobuf-java-util:3.24.4=_internal-unified-test-platform-an com.google.protobuf:protobuf-java-util:3.25.5=_internal-screenshot-validation-junit-engine com.google.protobuf:protobuf-java:3.24.4=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-driver-instrumentation,_internal-unified-test-platform-android-test-plugin,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_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-result-listener-gradle,_internal-unified-test-platform-core,_internal-unified-test-platform-launcher com.google.protobuf:protobuf-java:3.25.5=_internal-screenshot-validation-junit-engine +com.google.protobuf:protobuf-java:4.28.2=debugRuntimeClasspath,debugScreenshotTestRuntimeClasspath,debugUnitTestRuntimeClasspath,releaseRuntimeClasspath,releaseScreenshotTestRuntimeClasspath,releaseUnitTestRuntimeClasspath com.google.protobuf:protobuf-javalite:3.19.1=debugAndroidTestRuntimeClasspath com.google.protobuf:protobuf-kotlin:3.24.4=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-driver-instrumentation,_internal-unified-test-platform-android-test-plugin,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_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-result-listener-gradle,_internal-unified-test-platform-core,_internal-unified-test-platform-launcher com.google.testing.platform:android-device-provider-local:0.0.9-alpha03=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_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-result-listener-gradle @@ -508,4 +510,5 @@ org.junit.platform:junit-platform-launcher:1.9.2=_internal-screenshot-validation org.junit:junit-bom:5.9.2=_internal-screenshot-validation-junit-engine org.opentest4j:opentest4j:1.2.0=_internal-screenshot-validation-junit-engine org.slf4j:slf4j-api:2.0.4=ktlint +org.unifiedpush.android:connector:3.0.9=debugRuntimeClasspath,debugScreenshotTestRuntimeClasspath,debugUnitTestRuntimeClasspath,releaseRuntimeClasspath,releaseScreenshotTestRuntimeClasspath,releaseUnitTestRuntimeClasspath empty=_agp_internal_javaPreCompileDebugAndroidTest_kspClasspath,_agp_internal_javaPreCompileDebugScreenshotTest_kspClasspath,_agp_internal_javaPreCompileDebugUnitTest_kspClasspath,_agp_internal_javaPreCompileReleaseScreenshotTest_kspClasspath,_agp_internal_javaPreCompileReleaseUnitTest_kspClasspath,androidApis,androidJdkImage,androidTestApiDependenciesMetadata,androidTestCompileOnlyDependenciesMetadata,androidTestDebugApiDependenciesMetadata,androidTestDebugCompileOnlyDependenciesMetadata,androidTestDebugImplementationDependenciesMetadata,androidTestDebugIntransitiveDependenciesMetadata,androidTestIntransitiveDependenciesMetadata,androidTestReleaseApiDependenciesMetadata,androidTestReleaseCompileOnlyDependenciesMetadata,androidTestReleaseImplementationDependenciesMetadata,androidTestReleaseIntransitiveDependenciesMetadata,androidTestUtil,compileOnlyDependenciesMetadata,debugAndroidTestAnnotationProcessorClasspath,debugAndroidTestApiDependenciesMetadata,debugAndroidTestCompileOnlyDependenciesMetadata,debugAndroidTestImplementationDependenciesMetadata,debugAndroidTestIntransitiveDependenciesMetadata,debugAnnotationProcessorClasspath,debugApiDependenciesMetadata,debugCompileOnlyDependenciesMetadata,debugIntransitiveDependenciesMetadata,debugReverseMetadataValues,debugScreenshotTestAnnotationProcessorClasspath,debugUnitTestAnnotationProcessorClasspath,debugUnitTestApiDependenciesMetadata,debugUnitTestCompileOnlyDependenciesMetadata,debugUnitTestImplementationDependenciesMetadata,debugUnitTestIntransitiveDependenciesMetadata,debugWearBundling,hiltCompileOnlyDebug,hiltCompileOnlyDebugAndroidTest,hiltCompileOnlyDebugUnitTest,hiltCompileOnlyRelease,hiltCompileOnlyReleaseUnitTest,intransitiveDependenciesMetadata,kotlinCompilerPluginClasspath,kotlinNativeCompilerPluginClasspath,lintChecks,lintPublish,releaseAnnotationProcessorClasspath,releaseApiDependenciesMetadata,releaseCompileOnlyDependenciesMetadata,releaseImplementationDependenciesMetadata,releaseIntransitiveDependenciesMetadata,releaseReverseMetadataValues,releaseScreenshotTestAnnotationProcessorClasspath,releaseUnitTestAnnotationProcessorClasspath,releaseUnitTestApiDependenciesMetadata,releaseUnitTestCompileOnlyDependenciesMetadata,releaseUnitTestImplementationDependenciesMetadata,releaseUnitTestIntransitiveDependenciesMetadata,releaseWearBundling,screenshotTestApiDependenciesMetadata,screenshotTestCompileOnlyDependenciesMetadata,screenshotTestDebugApiDependenciesMetadata,screenshotTestDebugCompileOnlyDependenciesMetadata,screenshotTestDebugImplementationDependenciesMetadata,screenshotTestDebugIntransitiveDependenciesMetadata,screenshotTestIntransitiveDependenciesMetadata,screenshotTestReleaseApiDependenciesMetadata,screenshotTestReleaseCompileOnlyDependenciesMetadata,screenshotTestReleaseImplementationDependenciesMetadata,screenshotTestReleaseIntransitiveDependenciesMetadata,testApiDependenciesMetadata,testCompileOnlyDependenciesMetadata,testDebugApiDependenciesMetadata,testDebugCompileOnlyDependenciesMetadata,testDebugImplementationDependenciesMetadata,testDebugIntransitiveDependenciesMetadata,testFixturesApiDependenciesMetadata,testFixturesCompileOnlyDependenciesMetadata,testFixturesDebugApiDependenciesMetadata,testFixturesDebugCompileOnlyDependenciesMetadata,testFixturesDebugImplementationDependenciesMetadata,testFixturesDebugIntransitiveDependenciesMetadata,testFixturesImplementationDependenciesMetadata,testFixturesIntransitiveDependenciesMetadata,testFixturesReleaseApiDependenciesMetadata,testFixturesReleaseCompileOnlyDependenciesMetadata,testFixturesReleaseImplementationDependenciesMetadata,testFixturesReleaseIntransitiveDependenciesMetadata,testImplementationDependenciesMetadata,testIntransitiveDependenciesMetadata,testReleaseApiDependenciesMetadata,testReleaseCompileOnlyDependenciesMetadata,testReleaseImplementationDependenciesMetadata,testReleaseIntransitiveDependenciesMetadata From acf6e0493e2fee001220f716abb2c26c83665e96 Mon Sep 17 00:00:00 2001 From: lone-faerie Date: Fri, 25 Apr 2025 23:09:48 -0700 Subject: [PATCH 02/15] Add UnifiedPush distributor setting --- .../android/settings/SettingsFragment.kt | 46 +++++++++++++++++++ .../android/settings/SettingsPresenterImpl.kt | 2 + app/src/main/res/xml/preferences.xml | 6 +++ .../common/data/prefs/PrefsRepository.kt | 4 ++ .../common/data/prefs/PrefsRepositoryImpl.kt | 12 +++++ common/src/main/res/values/strings.xml | 1 + 6 files changed, 71 insertions(+) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsFragment.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsFragment.kt index 797d7bd0dda..12598a6bb3b 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsFragment.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsFragment.kt @@ -56,6 +56,7 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock +import org.unifiedpush.android.connector.UnifiedPush import timber.log.Timber class SettingsFragment( @@ -229,6 +230,7 @@ class SettingsFragment( } updateNotificationChannelPrefs() + updateNotificationUnifiedPushPrefs() if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { findPreference("notification_permission")?.let { @@ -260,6 +262,13 @@ class SettingsFragment( } } + findPreference("notification_unifiedpush")?.let { + it.setOnPreferenceChangeListener { _, newValue -> + registerUnifiedPushDistributor(newValue as String) + return@setOnPreferenceChangeListener true + } + } + if (BuildConfig.FLAVOR == "full") { findPreference("notification_rate_limit")?.let { lifecycleScope.launch(Dispatchers.Main) { @@ -284,6 +293,8 @@ class SettingsFragment( } } } + + findPreference("crash_reporting")?.let { it.isVisible = BuildConfig.FLAVOR == "full" } @@ -480,6 +491,29 @@ class SettingsFragment( } } + private fun updateNotificationUnifiedPushPrefs() { + val notificationsEnabled = + Build.VERSION.SDK_INT < Build.VERSION_CODES.O || + NotificationManagerCompat.from(requireContext()).areNotificationsEnabled() + + findPreference("notification_unifiedpush")?.let { + val distributors = UnifiedPush.getDistributors(requireContext()) + it.isVisible = notificationsEnabled && distributors.isNotEmpty() + val pm = requireContext().packageManager + it.entries = distributors.map { distributor -> + try { + pm.getApplicationLabel(pm.getApplicationInfo(distributor, PackageManager.GET_META_DATA)).toString() + } catch (_: PackageManager.NameNotFoundException) { + distributor + } + }.toTypedArray() + "Disabled" + it.entryValues = distributors.toTypedArray() + "disabled" + if (it.value == null) { + it.value = "disabled" + } + } + } + private fun onServerLockResult(result: Int): Boolean { if (result == Authenticator.SUCCESS && serverAuth != null) { (activity as? SettingsActivity)?.setAppActive(serverAuth, true) @@ -502,6 +536,18 @@ class SettingsFragment( } } + private fun registerUnifiedPushDistributor(distributor: String) { + lifecycleScope.launch { + val context = requireContext() + if (distributor == "disabled") { + UnifiedPush.unregister(context) + } else { + UnifiedPush.saveDistributor(context, distributor) + UnifiedPush.register(context) + } + } + } + @SuppressLint("BatteryLife") private fun requestBackgroundAccess() { if (!isIgnoringBatteryOptimizations()) { diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsPresenterImpl.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsPresenterImpl.kt index 3bdb886b806..edb415f673c 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsPresenterImpl.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsPresenterImpl.kt @@ -108,6 +108,7 @@ class SettingsPresenterImpl @Inject constructor( "languages" -> langsManager.getCurrentLang() "page_zoom" -> prefsRepository.getPageZoomLevel().toString() "screen_orientation" -> prefsRepository.getScreenOrientation() + "notification_unifiedpush" -> prefsRepository.getUnifiedPushDistributor() else -> throw IllegalArgumentException("No string found by this key: $key") } } @@ -119,6 +120,7 @@ class SettingsPresenterImpl @Inject constructor( "languages" -> langsManager.saveLang(value) "page_zoom" -> prefsRepository.setPageZoomLevel(value?.toIntOrNull()) "screen_orientation" -> prefsRepository.saveScreenOrientation(value) + "notification_unifiedpush" -> prefsRepository.setUnifiedPushDistributor(value) else -> throw IllegalArgumentException("No string found by this key: $key") } } diff --git a/app/src/main/res/xml/preferences.xml b/app/src/main/res/xml/preferences.xml index 775c21d0077..ad479d3f990 100644 --- a/app/src/main/res/xml/preferences.xml +++ b/app/src/main/res/xml/preferences.xml @@ -127,6 +127,12 @@ app:enableCopying="true" android:icon="@drawable/ic_notifications" android:summary="@string/rate_limit_summary"/> + Failed to initialize a text to speech engine. Please set the text for text to speech to process Unable to register application + UnifiedPush Unknown address Update pinned shortcut data Update shortcut data From 4a9aaeb1e260d60ab606fc6b7e281ae160e62444 Mon Sep 17 00:00:00 2001 From: lone-faerie Date: Sat, 26 Apr 2025 17:51:54 -0700 Subject: [PATCH 03/15] Add UnifiedPush service --- app/src/main/AndroidManifest.xml | 8 ++ .../android/notifications/MessagingManager.kt | 38 ++++++++ .../notifications/UnifiedPushService.kt | 87 +++++++++++++++++++ .../android/settings/SettingsFragment.kt | 10 +-- .../android/settings/SettingsPresenter.kt | 1 + .../android/settings/SettingsPresenterImpl.kt | 10 +++ .../android/websocket/WebsocketManager.kt | 29 +------ .../data/integration/DeviceRegistration.kt | 1 + .../impl/IntegrationRepositoryImpl.kt | 13 ++- .../common/data/prefs/PrefsRepository.kt | 2 +- .../MobileAppIntegrationPresenterImpl.kt | 1 + 11 files changed, 162 insertions(+), 38 deletions(-) create mode 100644 app/src/main/kotlin/io/homeassistant/companion/android/notifications/UnifiedPushService.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3a1febe0174..de697460643 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -915,6 +915,14 @@ android:value="true" /> + + + + + + , source: String, serverId: Int = ServerManager.SERVER_ID_ACTIVE) { + val flattened = mutableMapOf() + if (notificationData.containsKey("data")) { + for ((key, value) in notificationData["data"] as Map<*, *>) { + if (key == "actions" && value is List<*>) { + value.forEachIndexed { i, action -> + if (action is Map<*, *>) { + flattened["action_${i + 1}_key"] = action["action"].toString() + flattened["action_${i + 1}_title"] = action["title"].toString() + action["uri"]?.let { uri -> flattened["action_${i + 1}_uri"] = uri.toString() } + action["behavior"]?.let { behavior -> flattened["action_${i + 1}_behavior"] = behavior.toString() } + } + } + } else { + flattened[key.toString()] = value.toString() + } + } + } + // Message and title are in the root unlike all the others. + listOf("message", "title").forEach { key -> + if (notificationData.containsKey(key)) { + flattened[key] = notificationData[key].toString() + } + } + if (notificationData.containsKey("registration_info")) { + val registrationInfo = notificationData["registration_info"] + if (registrationInfo is Map<*, *> && registrationInfo.containsKey("webhook_id")) { + flattened["webhook_id"] = registrationInfo["webhook_id"].toString() + } + } + if (!flattened.containsKey("webhook_id")) { + serverManager.getServer(serverId)?.let { server -> + flattened["webhook_id"] = server.connection.webhookId.toString() + } + } + handleMessage(flattened, source) + } + fun handleMessage(notificationData: Map, source: String) { var now = System.currentTimeMillis() var jsonData = notificationData diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/notifications/UnifiedPushService.kt b/app/src/main/kotlin/io/homeassistant/companion/android/notifications/UnifiedPushService.kt new file mode 100644 index 00000000000..6744b1ac1d5 --- /dev/null +++ b/app/src/main/kotlin/io/homeassistant/companion/android/notifications/UnifiedPushService.kt @@ -0,0 +1,87 @@ +package io.homeassistant.companion.android.notifications + +import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper +import com.fasterxml.jackson.module.kotlin.readValue +import dagger.hilt.android.AndroidEntryPoint +import io.homeassistant.companion.android.common.data.integration.DeviceRegistration +import io.homeassistant.companion.android.common.data.servers.ServerManager +import javax.inject.Inject +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job +import kotlinx.coroutines.launch +import org.unifiedpush.android.connector.FailedReason +import org.unifiedpush.android.connector.PushService +import org.unifiedpush.android.connector.data.PushEndpoint +import org.unifiedpush.android.connector.data.PushMessage +import timber.log.Timber + +@AndroidEntryPoint +class UnifiedPushService : PushService() { + companion object { + private const val SOURCE = "UnifiedPush" + } + + @Inject + lateinit var serverManager: ServerManager + + @Inject + lateinit var messagingManager: MessagingManager + + private val mainScope: CoroutineScope = CoroutineScope(Dispatchers.Main + Job()) + + override fun onMessage(message: PushMessage, instance: String) { + Timber.d("From: $instance") + + val data: Map = jacksonObjectMapper().readValue(message.content) + messagingManager.handleMessage(data, SOURCE) + } + + override fun onNewEndpoint(endpoint: PushEndpoint, instance: String) { + mainScope.launch { + Timber.d("New Endpoint: ${endpoint.url} for $instance") + if (!serverManager.isRegistered()) { + Timber.d("Not trying to update registration since we aren't authenticated.") + return@launch + } + serverManager.defaultServers.forEach { + launch { + try { + serverManager.integrationRepository(it.id).updateRegistration( + deviceRegistration = DeviceRegistration(pushUrl = endpoint.url), + allowReregistration = false + ) + } catch (e: Exception) { + Timber.e(e, "Issue updating push url") + } + } + } + } + } + + override fun onRegistrationFailed(reason: FailedReason, instance: String) { + Timber.e("Issue registering: $reason") + } + + override fun onUnregistered(instance: String) { + mainScope.launch { + Timber.d("Unregistered: $instance") + if (!serverManager.isRegistered()) { + Timber.d("Not trying to update registration since we aren't authenticated.") + return@launch + } + serverManager.defaultServers.forEach { + launch { + try { + serverManager.integrationRepository(it.id).updateRegistration( + deviceRegistration = DeviceRegistration(pushUrl = null), + allowReregistration = false + ) + } catch (e: Exception) { + Timber.e(e, "Issue updating push url") + } + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsFragment.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsFragment.kt index 12598a6bb3b..da9f141df2b 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsFragment.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsFragment.kt @@ -506,7 +506,7 @@ class SettingsFragment( } catch (_: PackageManager.NameNotFoundException) { distributor } - }.toTypedArray() + "Disabled" + }.toTypedArray() + getString(commonR.string.disabled) it.entryValues = distributors.toTypedArray() + "disabled" if (it.value == null) { it.value = "disabled" @@ -538,13 +538,7 @@ class SettingsFragment( private fun registerUnifiedPushDistributor(distributor: String) { lifecycleScope.launch { - val context = requireContext() - if (distributor == "disabled") { - UnifiedPush.unregister(context) - } else { - UnifiedPush.saveDistributor(context, distributor) - UnifiedPush.register(context) - } + presenter.registerUnifiedPushDistributor(requireContext(), distributor) } } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsPresenter.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsPresenter.kt index 0f377c73682..06332bc7eb2 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsPresenter.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsPresenter.kt @@ -23,5 +23,6 @@ interface SettingsPresenter { fun getServersFlow(): StateFlow> fun getServerCount(): Int suspend fun getNotificationRateLimits(): RateLimitResponse? + fun registerUnifiedPushDistributor(context: Context, distributor: String) fun showChangeLog(context: Context) } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsPresenterImpl.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsPresenterImpl.kt index edb415f673c..5351e3f8bf0 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsPresenterImpl.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsPresenterImpl.kt @@ -43,6 +43,7 @@ import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking import kotlinx.coroutines.withContext +import org.unifiedpush.android.connector.UnifiedPush import timber.log.Timber class SettingsPresenterImpl @Inject constructor( @@ -157,6 +158,15 @@ class SettingsPresenterImpl @Inject constructor( } } + override fun registerUnifiedPushDistributor(context: Context, distributor: String) { + if (distributor == "disabled") { + UnifiedPush.unregister(context) + } else { + UnifiedPush.saveDistributor(context, distributor) + UnifiedPush.register(context) + } + } + override fun showChangeLog(context: Context) { changeLog.showChangeLog(context, true) } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/websocket/WebsocketManager.kt b/app/src/main/kotlin/io/homeassistant/companion/android/websocket/WebsocketManager.kt index bae55e7dc09..18604d55846 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/websocket/WebsocketManager.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/websocket/WebsocketManager.kt @@ -178,33 +178,8 @@ class WebsocketManager( Timber.e(e, "Unable to confirm received notification") } } - val flattened = mutableMapOf() - if (it.containsKey("data")) { - for ((key, value) in it["data"] as Map<*, *>) { - if (key == "actions" && value is List<*>) { - value.forEachIndexed { i, action -> - if (action is Map<*, *>) { - flattened["action_${i + 1}_key"] = action["action"].toString() - flattened["action_${i + 1}_title"] = action["title"].toString() - action["uri"]?.let { uri -> flattened["action_${i + 1}_uri"] = uri.toString() } - action["behavior"]?.let { behavior -> flattened["action_${i + 1}_behavior"] = behavior.toString() } - } - } - } else { - flattened[key.toString()] = value.toString() - } - } - } - // Message and title are in the root unlike all the others. - listOf("message", "title").forEach { key -> - if (it.containsKey(key)) { - flattened[key] = it[key].toString() - } - } - serverManager.getServer(serverId)?.let { server -> - flattened["webhook_id"] = server.connection.webhookId.toString() - } - messagingManager.handleMessage(flattened, SOURCE) + + messagingManager.handleMessage(it, SOURCE, serverId) } } diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/DeviceRegistration.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/DeviceRegistration.kt index 90a3e16f860..879a33266e0 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/DeviceRegistration.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/DeviceRegistration.kt @@ -4,5 +4,6 @@ data class DeviceRegistration( val appVersion: String? = null, val deviceName: String? = null, var pushToken: String? = null, + var pushUrl: String? = null, var pushWebsocket: Boolean = true ) diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/impl/IntegrationRepositoryImpl.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/impl/IntegrationRepositoryImpl.kt index 268b0303a48..54c0aa12925 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/impl/IntegrationRepositoryImpl.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/impl/IntegrationRepositoryImpl.kt @@ -57,6 +57,7 @@ class IntegrationRepositoryImpl @AssistedInject constructor( private const val PREF_APP_VERSION = "app_version" // Note: _not_ server-specific private const val PREF_PUSH_TOKEN = "push_token" // Note: _not_ server-specific + private const val PREF_PUSH_URL = "push_url" // Note: _not_ server-specific private const val PREF_ORPHANED_THREAD_BORDER_AGENT_IDS = "orphaned_thread_border_agent_ids" // Note: _not_ server-specific private const val PREF_CHECK_SENSOR_REGISTRATION_NEXT = "sensor_reg_last" @@ -167,7 +168,8 @@ class IntegrationRepositoryImpl @AssistedInject constructor( return DeviceRegistration( localStorage.getString(PREF_APP_VERSION), server.deviceName, - localStorage.getString(PREF_PUSH_TOKEN) + localStorage.getString(PREF_PUSH_TOKEN), + localStorage.getString(PREF_PUSH_URL) ) } @@ -181,6 +183,9 @@ class IntegrationRepositoryImpl @AssistedInject constructor( if (deviceRegistration.pushToken != null) { localStorage.putString(PREF_PUSH_TOKEN, deviceRegistration.pushToken) } + if (deviceRegistration.pushUrl != null) { + localStorage.putString(PREF_PUSH_URL, deviceRegistration.pushUrl) + } } override suspend fun deletePreferences() { @@ -815,11 +820,15 @@ class IntegrationRepositoryImpl @AssistedInject constructor( private suspend fun createUpdateRegistrationRequest(deviceRegistration: DeviceRegistration): RegisterDeviceRequest { val oldDeviceRegistration = getRegistration() val pushToken = deviceRegistration.pushToken ?: oldDeviceRegistration.pushToken + val pushUrl = deviceRegistration.pushUrl ?: oldDeviceRegistration.pushUrl val appData = mutableMapOf("push_websocket_channel" to deviceRegistration.pushWebsocket) if (!pushToken.isNullOrBlank()) { - appData["push_url"] = PUSH_URL + appData["push_url"] = pushUrl ?: PUSH_URL appData["push_token"] = pushToken + } else if (!pushUrl.isNullOrBlank()) { + appData["push_url"] = pushUrl + appData["push_token"] = "" } return RegisterDeviceRequest( diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepository.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepository.kt index 9d11b260773..11928e742c3 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepository.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepository.kt @@ -97,7 +97,7 @@ interface PrefsRepository { suspend fun getUnifiedPushDistributor(): String? - suspend fun setUnifiedPushDistributor(source: String?) + suspend fun setUnifiedPushDistributor(distributor: String?) /** Clean up any app-level preferences that might reference servers */ suspend fun removeServer(serverId: Int) diff --git a/wear/src/main/kotlin/io/homeassistant/companion/android/onboarding/integration/MobileAppIntegrationPresenterImpl.kt b/wear/src/main/kotlin/io/homeassistant/companion/android/onboarding/integration/MobileAppIntegrationPresenterImpl.kt index 2e7263fbae2..f2409ac5255 100644 --- a/wear/src/main/kotlin/io/homeassistant/companion/android/onboarding/integration/MobileAppIntegrationPresenterImpl.kt +++ b/wear/src/main/kotlin/io/homeassistant/companion/android/onboarding/integration/MobileAppIntegrationPresenterImpl.kt @@ -31,6 +31,7 @@ class MobileAppIntegrationPresenterImpl @Inject constructor( "${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})", deviceName, getMessagingToken(), + null, false ) } From 2aa58420d2feec13b6fa310c7b253d313452e279 Mon Sep 17 00:00:00 2001 From: lone-faerie Date: Sun, 27 Apr 2025 00:43:27 -0700 Subject: [PATCH 04/15] Fix minimal dependencies --- app/gradle.lockfile | 4 ++-- automotive/gradle.lockfile | 4 ++-- .../AndroidApplicationDependenciesConventionPlugin.kt | 5 ++++- common/build.gradle.kts | 2 +- common/gradle.lockfile | 6 +----- gradle/libs.versions.toml | 2 +- wear/gradle.lockfile | 5 +---- 7 files changed, 12 insertions(+), 16 deletions(-) diff --git a/app/gradle.lockfile b/app/gradle.lockfile index fbd6c888269..b381be70812 100644 --- a/app/gradle.lockfile +++ b/app/gradle.lockfile @@ -313,7 +313,7 @@ com.google.j2objc:j2objc-annotations:3.0.0=fullDebugRuntimeClasspath,fullDebugUn com.google.protobuf:protobuf-java-util:3.22.3=_internal-unified-test-platform-core com.google.protobuf:protobuf-java-util:3.24.4=_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 com.google.protobuf:protobuf-java:3.24.4=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-driver-instrumentation,_internal-unified-test-platform-android-test-plugin,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_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-result-listener-gradle,_internal-unified-test-platform-core,_internal-unified-test-platform-launcher -com.google.protobuf:protobuf-java:4.28.2=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath +com.google.protobuf:protobuf-java:4.28.2=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath com.google.protobuf:protobuf-javalite:3.22.3=minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath com.google.protobuf:protobuf-kotlin:3.24.4=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-driver-instrumentation,_internal-unified-test-platform-android-test-plugin,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_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-result-listener-gradle,_internal-unified-test-platform-core,_internal-unified-test-platform-launcher com.google.testing.platform:android-device-provider-local:0.0.9-alpha03=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_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-result-listener-gradle @@ -528,5 +528,5 @@ org.jetbrains:annotations:23.0.0=_internal-unified-test-platform-android-device- org.jspecify:jspecify:1.0.0=_agp_internal_javaPreCompileFullDebug_kspClasspath,_agp_internal_javaPreCompileFullRelease_kspClasspath,_agp_internal_javaPreCompileMinimalDebug_kspClasspath,_agp_internal_javaPreCompileMinimalRelease_kspClasspath,fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullImplementationDependenciesMetadata,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,hiltAnnotationProcessorFullDebug,hiltAnnotationProcessorFullDebugAndroidTest,hiltAnnotationProcessorFullDebugUnitTest,hiltAnnotationProcessorFullRelease,hiltAnnotationProcessorFullReleaseUnitTest,hiltAnnotationProcessorMinimalDebug,hiltAnnotationProcessorMinimalDebugAndroidTest,hiltAnnotationProcessorMinimalDebugUnitTest,hiltAnnotationProcessorMinimalRelease,hiltAnnotationProcessorMinimalReleaseUnitTest,kspFullDebugAndroidTestKotlinProcessorClasspath,kspFullDebugKotlinProcessorClasspath,kspFullDebugUnitTestKotlinProcessorClasspath,kspFullReleaseKotlinProcessorClasspath,kspFullReleaseUnitTestKotlinProcessorClasspath,kspMinimalDebugAndroidTestKotlinProcessorClasspath,kspMinimalDebugKotlinProcessorClasspath,kspMinimalDebugUnitTestKotlinProcessorClasspath,kspMinimalReleaseKotlinProcessorClasspath,kspMinimalReleaseUnitTestKotlinProcessorClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath org.openhomefoundation.improv-wifi:sdk-android:0.1.1=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath org.slf4j:slf4j-api:2.0.4=ktlint -org.unifiedpush.android:connector:3.0.9=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath +org.unifiedpush.android:connector:3.0.8=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullImplementationDependenciesMetadata,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalImplementationDependenciesMetadata,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath empty=_agp_internal_javaPreCompileFullDebugAndroidTest_kspClasspath,_agp_internal_javaPreCompileFullDebugUnitTest_kspClasspath,_agp_internal_javaPreCompileFullReleaseUnitTest_kspClasspath,_agp_internal_javaPreCompileMinimalDebugAndroidTest_kspClasspath,_agp_internal_javaPreCompileMinimalDebugUnitTest_kspClasspath,_agp_internal_javaPreCompileMinimalReleaseUnitTest_kspClasspath,androidApis,androidJdkImage,androidTestApiDependenciesMetadata,androidTestCompileOnlyDependenciesMetadata,androidTestDebugApiDependenciesMetadata,androidTestDebugCompileOnlyDependenciesMetadata,androidTestDebugImplementationDependenciesMetadata,androidTestDebugIntransitiveDependenciesMetadata,androidTestFullApiDependenciesMetadata,androidTestFullCompileOnlyDependenciesMetadata,androidTestFullDebugApiDependenciesMetadata,androidTestFullDebugCompileOnlyDependenciesMetadata,androidTestFullDebugImplementationDependenciesMetadata,androidTestFullDebugIntransitiveDependenciesMetadata,androidTestFullImplementationDependenciesMetadata,androidTestFullIntransitiveDependenciesMetadata,androidTestIntransitiveDependenciesMetadata,androidTestMinimalApiDependenciesMetadata,androidTestMinimalCompileOnlyDependenciesMetadata,androidTestMinimalDebugApiDependenciesMetadata,androidTestMinimalDebugCompileOnlyDependenciesMetadata,androidTestMinimalDebugImplementationDependenciesMetadata,androidTestMinimalDebugIntransitiveDependenciesMetadata,androidTestMinimalImplementationDependenciesMetadata,androidTestMinimalIntransitiveDependenciesMetadata,androidTestReleaseApiDependenciesMetadata,androidTestReleaseCompileOnlyDependenciesMetadata,androidTestReleaseImplementationDependenciesMetadata,androidTestReleaseIntransitiveDependenciesMetadata,androidTestUtil,compileOnlyDependenciesMetadata,debugApiDependenciesMetadata,debugCompileOnlyDependenciesMetadata,debugIntransitiveDependenciesMetadata,fullApiDependenciesMetadata,fullCompileOnlyDependenciesMetadata,fullDebugAndroidTestAnnotationProcessorClasspath,fullDebugAndroidTestApiDependenciesMetadata,fullDebugAndroidTestCompileOnlyDependenciesMetadata,fullDebugAndroidTestImplementationDependenciesMetadata,fullDebugAndroidTestIntransitiveDependenciesMetadata,fullDebugAnnotationProcessorClasspath,fullDebugApiDependenciesMetadata,fullDebugCompileOnlyDependenciesMetadata,fullDebugImplementationDependenciesMetadata,fullDebugIntransitiveDependenciesMetadata,fullDebugReverseMetadataValues,fullDebugUnitTestAnnotationProcessorClasspath,fullDebugUnitTestApiDependenciesMetadata,fullDebugUnitTestCompileOnlyDependenciesMetadata,fullDebugUnitTestImplementationDependenciesMetadata,fullDebugUnitTestIntransitiveDependenciesMetadata,fullDebugWearBundling,fullIntransitiveDependenciesMetadata,fullReleaseAnnotationProcessorClasspath,fullReleaseApiDependenciesMetadata,fullReleaseCompileOnlyDependenciesMetadata,fullReleaseImplementationDependenciesMetadata,fullReleaseIntransitiveDependenciesMetadata,fullReleaseReverseMetadataValues,fullReleaseUnitTestAnnotationProcessorClasspath,fullReleaseUnitTestApiDependenciesMetadata,fullReleaseUnitTestCompileOnlyDependenciesMetadata,fullReleaseUnitTestImplementationDependenciesMetadata,fullReleaseUnitTestIntransitiveDependenciesMetadata,fullReleaseWearBundling,hiltCompileOnlyFullDebug,hiltCompileOnlyFullDebugAndroidTest,hiltCompileOnlyFullDebugUnitTest,hiltCompileOnlyFullRelease,hiltCompileOnlyFullReleaseUnitTest,hiltCompileOnlyMinimalDebug,hiltCompileOnlyMinimalDebugAndroidTest,hiltCompileOnlyMinimalDebugUnitTest,hiltCompileOnlyMinimalRelease,hiltCompileOnlyMinimalReleaseUnitTest,intransitiveDependenciesMetadata,kotlinCompilerPluginClasspath,kotlinNativeCompilerPluginClasspath,lintChecks,lintPublish,minimalApiDependenciesMetadata,minimalCompileOnlyDependenciesMetadata,minimalDebugAndroidTestAnnotationProcessorClasspath,minimalDebugAndroidTestApiDependenciesMetadata,minimalDebugAndroidTestCompileOnlyDependenciesMetadata,minimalDebugAndroidTestImplementationDependenciesMetadata,minimalDebugAndroidTestIntransitiveDependenciesMetadata,minimalDebugAnnotationProcessorClasspath,minimalDebugApiDependenciesMetadata,minimalDebugCompileOnlyDependenciesMetadata,minimalDebugImplementationDependenciesMetadata,minimalDebugIntransitiveDependenciesMetadata,minimalDebugReverseMetadataValues,minimalDebugUnitTestAnnotationProcessorClasspath,minimalDebugUnitTestApiDependenciesMetadata,minimalDebugUnitTestCompileOnlyDependenciesMetadata,minimalDebugUnitTestImplementationDependenciesMetadata,minimalDebugUnitTestIntransitiveDependenciesMetadata,minimalDebugWearBundling,minimalIntransitiveDependenciesMetadata,minimalReleaseAnnotationProcessorClasspath,minimalReleaseApiDependenciesMetadata,minimalReleaseCompileOnlyDependenciesMetadata,minimalReleaseImplementationDependenciesMetadata,minimalReleaseIntransitiveDependenciesMetadata,minimalReleaseReverseMetadataValues,minimalReleaseUnitTestAnnotationProcessorClasspath,minimalReleaseUnitTestApiDependenciesMetadata,minimalReleaseUnitTestCompileOnlyDependenciesMetadata,minimalReleaseUnitTestImplementationDependenciesMetadata,minimalReleaseUnitTestIntransitiveDependenciesMetadata,minimalReleaseWearBundling,releaseApiDependenciesMetadata,releaseCompileOnlyDependenciesMetadata,releaseImplementationDependenciesMetadata,releaseIntransitiveDependenciesMetadata,testApiDependenciesMetadata,testCompileOnlyDependenciesMetadata,testDebugApiDependenciesMetadata,testDebugCompileOnlyDependenciesMetadata,testDebugImplementationDependenciesMetadata,testDebugIntransitiveDependenciesMetadata,testFixturesApiDependenciesMetadata,testFixturesCompileOnlyDependenciesMetadata,testFixturesDebugApiDependenciesMetadata,testFixturesDebugCompileOnlyDependenciesMetadata,testFixturesDebugImplementationDependenciesMetadata,testFixturesDebugIntransitiveDependenciesMetadata,testFixturesFullApiDependenciesMetadata,testFixturesFullCompileOnlyDependenciesMetadata,testFixturesFullImplementationDependenciesMetadata,testFixturesFullIntransitiveDependenciesMetadata,testFixturesImplementationDependenciesMetadata,testFixturesIntransitiveDependenciesMetadata,testFixturesMinimalApiDependenciesMetadata,testFixturesMinimalCompileOnlyDependenciesMetadata,testFixturesMinimalImplementationDependenciesMetadata,testFixturesMinimalIntransitiveDependenciesMetadata,testFixturesReleaseApiDependenciesMetadata,testFixturesReleaseCompileOnlyDependenciesMetadata,testFixturesReleaseImplementationDependenciesMetadata,testFixturesReleaseIntransitiveDependenciesMetadata,testFullApiDependenciesMetadata,testFullCompileOnlyDependenciesMetadata,testFullDebugApiDependenciesMetadata,testFullDebugCompileOnlyDependenciesMetadata,testFullDebugImplementationDependenciesMetadata,testFullDebugIntransitiveDependenciesMetadata,testFullImplementationDependenciesMetadata,testFullIntransitiveDependenciesMetadata,testFullReleaseApiDependenciesMetadata,testFullReleaseCompileOnlyDependenciesMetadata,testFullReleaseImplementationDependenciesMetadata,testFullReleaseIntransitiveDependenciesMetadata,testImplementationDependenciesMetadata,testIntransitiveDependenciesMetadata,testMinimalApiDependenciesMetadata,testMinimalCompileOnlyDependenciesMetadata,testMinimalDebugApiDependenciesMetadata,testMinimalDebugCompileOnlyDependenciesMetadata,testMinimalDebugImplementationDependenciesMetadata,testMinimalDebugIntransitiveDependenciesMetadata,testMinimalImplementationDependenciesMetadata,testMinimalIntransitiveDependenciesMetadata,testMinimalReleaseApiDependenciesMetadata,testMinimalReleaseCompileOnlyDependenciesMetadata,testMinimalReleaseImplementationDependenciesMetadata,testMinimalReleaseIntransitiveDependenciesMetadata,testReleaseApiDependenciesMetadata,testReleaseCompileOnlyDependenciesMetadata,testReleaseImplementationDependenciesMetadata,testReleaseIntransitiveDependenciesMetadata diff --git a/automotive/gradle.lockfile b/automotive/gradle.lockfile index e9e5ba36f32..b80174b12fb 100644 --- a/automotive/gradle.lockfile +++ b/automotive/gradle.lockfile @@ -314,7 +314,7 @@ com.google.j2objc:j2objc-annotations:3.0.0=fullDebugRuntimeClasspath,fullDebugUn com.google.protobuf:protobuf-java-util:3.22.3=_internal-unified-test-platform-core com.google.protobuf:protobuf-java-util:3.24.4=_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 com.google.protobuf:protobuf-java:3.24.4=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-driver-instrumentation,_internal-unified-test-platform-android-test-plugin,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_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-result-listener-gradle,_internal-unified-test-platform-core,_internal-unified-test-platform-launcher -com.google.protobuf:protobuf-java:4.28.2=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath +com.google.protobuf:protobuf-java:4.28.2=fullDebugRuntimeClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestRuntimeClasspath com.google.protobuf:protobuf-javalite:3.22.3=minimalDebugRuntimeClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestRuntimeClasspath com.google.protobuf:protobuf-kotlin:3.24.4=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-driver-instrumentation,_internal-unified-test-platform-android-test-plugin,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_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-result-listener-gradle,_internal-unified-test-platform-core,_internal-unified-test-platform-launcher com.google.testing.platform:android-device-provider-local:0.0.9-alpha03=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_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-result-listener-gradle @@ -529,5 +529,5 @@ org.jetbrains:annotations:23.0.0=_internal-unified-test-platform-android-device- org.jspecify:jspecify:1.0.0=_agp_internal_javaPreCompileFullDebug_kspClasspath,_agp_internal_javaPreCompileFullRelease_kspClasspath,_agp_internal_javaPreCompileMinimalDebug_kspClasspath,_agp_internal_javaPreCompileMinimalRelease_kspClasspath,fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullImplementationDependenciesMetadata,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,hiltAnnotationProcessorFullDebug,hiltAnnotationProcessorFullDebugAndroidTest,hiltAnnotationProcessorFullDebugUnitTest,hiltAnnotationProcessorFullRelease,hiltAnnotationProcessorFullReleaseUnitTest,hiltAnnotationProcessorMinimalDebug,hiltAnnotationProcessorMinimalDebugAndroidTest,hiltAnnotationProcessorMinimalDebugUnitTest,hiltAnnotationProcessorMinimalRelease,hiltAnnotationProcessorMinimalReleaseUnitTest,kspFullDebugAndroidTestKotlinProcessorClasspath,kspFullDebugKotlinProcessorClasspath,kspFullDebugUnitTestKotlinProcessorClasspath,kspFullReleaseKotlinProcessorClasspath,kspFullReleaseUnitTestKotlinProcessorClasspath,kspMinimalDebugAndroidTestKotlinProcessorClasspath,kspMinimalDebugKotlinProcessorClasspath,kspMinimalDebugUnitTestKotlinProcessorClasspath,kspMinimalReleaseKotlinProcessorClasspath,kspMinimalReleaseUnitTestKotlinProcessorClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath org.openhomefoundation.improv-wifi:sdk-android:0.1.1=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath org.slf4j:slf4j-api:2.0.4=ktlint -org.unifiedpush.android:connector:3.0.9=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath +org.unifiedpush.android:connector:3.0.8=fullDebugAndroidTestCompileClasspath,fullDebugCompileClasspath,fullDebugRuntimeClasspath,fullDebugUnitTestCompileClasspath,fullDebugUnitTestRuntimeClasspath,fullImplementationDependenciesMetadata,fullReleaseCompileClasspath,fullReleaseRuntimeClasspath,fullReleaseUnitTestCompileClasspath,fullReleaseUnitTestRuntimeClasspath,minimalDebugAndroidTestCompileClasspath,minimalDebugCompileClasspath,minimalDebugRuntimeClasspath,minimalDebugUnitTestCompileClasspath,minimalDebugUnitTestRuntimeClasspath,minimalImplementationDependenciesMetadata,minimalReleaseCompileClasspath,minimalReleaseRuntimeClasspath,minimalReleaseUnitTestCompileClasspath,minimalReleaseUnitTestRuntimeClasspath empty=_agp_internal_javaPreCompileFullDebugAndroidTest_kspClasspath,_agp_internal_javaPreCompileFullDebugUnitTest_kspClasspath,_agp_internal_javaPreCompileFullReleaseUnitTest_kspClasspath,_agp_internal_javaPreCompileMinimalDebugAndroidTest_kspClasspath,_agp_internal_javaPreCompileMinimalDebugUnitTest_kspClasspath,_agp_internal_javaPreCompileMinimalReleaseUnitTest_kspClasspath,androidApis,androidJdkImage,androidTestApiDependenciesMetadata,androidTestCompileOnlyDependenciesMetadata,androidTestDebugApiDependenciesMetadata,androidTestDebugCompileOnlyDependenciesMetadata,androidTestDebugImplementationDependenciesMetadata,androidTestDebugIntransitiveDependenciesMetadata,androidTestFullApiDependenciesMetadata,androidTestFullCompileOnlyDependenciesMetadata,androidTestFullDebugApiDependenciesMetadata,androidTestFullDebugCompileOnlyDependenciesMetadata,androidTestFullDebugImplementationDependenciesMetadata,androidTestFullDebugIntransitiveDependenciesMetadata,androidTestFullImplementationDependenciesMetadata,androidTestFullIntransitiveDependenciesMetadata,androidTestIntransitiveDependenciesMetadata,androidTestMinimalApiDependenciesMetadata,androidTestMinimalCompileOnlyDependenciesMetadata,androidTestMinimalDebugApiDependenciesMetadata,androidTestMinimalDebugCompileOnlyDependenciesMetadata,androidTestMinimalDebugImplementationDependenciesMetadata,androidTestMinimalDebugIntransitiveDependenciesMetadata,androidTestMinimalImplementationDependenciesMetadata,androidTestMinimalIntransitiveDependenciesMetadata,androidTestReleaseApiDependenciesMetadata,androidTestReleaseCompileOnlyDependenciesMetadata,androidTestReleaseImplementationDependenciesMetadata,androidTestReleaseIntransitiveDependenciesMetadata,androidTestUtil,compileOnlyDependenciesMetadata,debugApiDependenciesMetadata,debugCompileOnlyDependenciesMetadata,debugIntransitiveDependenciesMetadata,fullApiDependenciesMetadata,fullCompileOnlyDependenciesMetadata,fullDebugAndroidTestAnnotationProcessorClasspath,fullDebugAndroidTestApiDependenciesMetadata,fullDebugAndroidTestCompileOnlyDependenciesMetadata,fullDebugAndroidTestImplementationDependenciesMetadata,fullDebugAndroidTestIntransitiveDependenciesMetadata,fullDebugAnnotationProcessorClasspath,fullDebugApiDependenciesMetadata,fullDebugCompileOnlyDependenciesMetadata,fullDebugImplementationDependenciesMetadata,fullDebugIntransitiveDependenciesMetadata,fullDebugReverseMetadataValues,fullDebugUnitTestAnnotationProcessorClasspath,fullDebugUnitTestApiDependenciesMetadata,fullDebugUnitTestCompileOnlyDependenciesMetadata,fullDebugUnitTestImplementationDependenciesMetadata,fullDebugUnitTestIntransitiveDependenciesMetadata,fullDebugWearBundling,fullIntransitiveDependenciesMetadata,fullReleaseAnnotationProcessorClasspath,fullReleaseApiDependenciesMetadata,fullReleaseCompileOnlyDependenciesMetadata,fullReleaseImplementationDependenciesMetadata,fullReleaseIntransitiveDependenciesMetadata,fullReleaseReverseMetadataValues,fullReleaseUnitTestAnnotationProcessorClasspath,fullReleaseUnitTestApiDependenciesMetadata,fullReleaseUnitTestCompileOnlyDependenciesMetadata,fullReleaseUnitTestImplementationDependenciesMetadata,fullReleaseUnitTestIntransitiveDependenciesMetadata,fullReleaseWearBundling,hiltCompileOnlyFullDebug,hiltCompileOnlyFullDebugAndroidTest,hiltCompileOnlyFullDebugUnitTest,hiltCompileOnlyFullRelease,hiltCompileOnlyFullReleaseUnitTest,hiltCompileOnlyMinimalDebug,hiltCompileOnlyMinimalDebugAndroidTest,hiltCompileOnlyMinimalDebugUnitTest,hiltCompileOnlyMinimalRelease,hiltCompileOnlyMinimalReleaseUnitTest,intransitiveDependenciesMetadata,kotlinCompilerPluginClasspath,kotlinNativeCompilerPluginClasspath,lintChecks,lintPublish,minimalApiDependenciesMetadata,minimalCompileOnlyDependenciesMetadata,minimalDebugAndroidTestAnnotationProcessorClasspath,minimalDebugAndroidTestApiDependenciesMetadata,minimalDebugAndroidTestCompileOnlyDependenciesMetadata,minimalDebugAndroidTestImplementationDependenciesMetadata,minimalDebugAndroidTestIntransitiveDependenciesMetadata,minimalDebugAnnotationProcessorClasspath,minimalDebugApiDependenciesMetadata,minimalDebugCompileOnlyDependenciesMetadata,minimalDebugImplementationDependenciesMetadata,minimalDebugIntransitiveDependenciesMetadata,minimalDebugReverseMetadataValues,minimalDebugUnitTestAnnotationProcessorClasspath,minimalDebugUnitTestApiDependenciesMetadata,minimalDebugUnitTestCompileOnlyDependenciesMetadata,minimalDebugUnitTestImplementationDependenciesMetadata,minimalDebugUnitTestIntransitiveDependenciesMetadata,minimalDebugWearBundling,minimalIntransitiveDependenciesMetadata,minimalReleaseAnnotationProcessorClasspath,minimalReleaseApiDependenciesMetadata,minimalReleaseCompileOnlyDependenciesMetadata,minimalReleaseImplementationDependenciesMetadata,minimalReleaseIntransitiveDependenciesMetadata,minimalReleaseReverseMetadataValues,minimalReleaseUnitTestAnnotationProcessorClasspath,minimalReleaseUnitTestApiDependenciesMetadata,minimalReleaseUnitTestCompileOnlyDependenciesMetadata,minimalReleaseUnitTestImplementationDependenciesMetadata,minimalReleaseUnitTestIntransitiveDependenciesMetadata,minimalReleaseWearBundling,releaseApiDependenciesMetadata,releaseCompileOnlyDependenciesMetadata,releaseImplementationDependenciesMetadata,releaseIntransitiveDependenciesMetadata,testApiDependenciesMetadata,testCompileOnlyDependenciesMetadata,testDebugApiDependenciesMetadata,testDebugCompileOnlyDependenciesMetadata,testDebugImplementationDependenciesMetadata,testDebugIntransitiveDependenciesMetadata,testFixturesApiDependenciesMetadata,testFixturesCompileOnlyDependenciesMetadata,testFixturesDebugApiDependenciesMetadata,testFixturesDebugCompileOnlyDependenciesMetadata,testFixturesDebugImplementationDependenciesMetadata,testFixturesDebugIntransitiveDependenciesMetadata,testFixturesFullApiDependenciesMetadata,testFixturesFullCompileOnlyDependenciesMetadata,testFixturesFullImplementationDependenciesMetadata,testFixturesFullIntransitiveDependenciesMetadata,testFixturesImplementationDependenciesMetadata,testFixturesIntransitiveDependenciesMetadata,testFixturesMinimalApiDependenciesMetadata,testFixturesMinimalCompileOnlyDependenciesMetadata,testFixturesMinimalImplementationDependenciesMetadata,testFixturesMinimalIntransitiveDependenciesMetadata,testFixturesReleaseApiDependenciesMetadata,testFixturesReleaseCompileOnlyDependenciesMetadata,testFixturesReleaseImplementationDependenciesMetadata,testFixturesReleaseIntransitiveDependenciesMetadata,testFullApiDependenciesMetadata,testFullCompileOnlyDependenciesMetadata,testFullDebugApiDependenciesMetadata,testFullDebugCompileOnlyDependenciesMetadata,testFullDebugImplementationDependenciesMetadata,testFullDebugIntransitiveDependenciesMetadata,testFullImplementationDependenciesMetadata,testFullIntransitiveDependenciesMetadata,testFullReleaseApiDependenciesMetadata,testFullReleaseCompileOnlyDependenciesMetadata,testFullReleaseImplementationDependenciesMetadata,testFullReleaseIntransitiveDependenciesMetadata,testImplementationDependenciesMetadata,testIntransitiveDependenciesMetadata,testMinimalApiDependenciesMetadata,testMinimalCompileOnlyDependenciesMetadata,testMinimalDebugApiDependenciesMetadata,testMinimalDebugCompileOnlyDependenciesMetadata,testMinimalDebugImplementationDependenciesMetadata,testMinimalDebugIntransitiveDependenciesMetadata,testMinimalImplementationDependenciesMetadata,testMinimalIntransitiveDependenciesMetadata,testMinimalReleaseApiDependenciesMetadata,testMinimalReleaseCompileOnlyDependenciesMetadata,testMinimalReleaseImplementationDependenciesMetadata,testMinimalReleaseIntransitiveDependenciesMetadata,testReleaseApiDependenciesMetadata,testReleaseCompileOnlyDependenciesMetadata,testReleaseImplementationDependenciesMetadata,testReleaseIntransitiveDependenciesMetadata diff --git a/build-logic/convention/src/main/kotlin/AndroidApplicationDependenciesConventionPlugin.kt b/build-logic/convention/src/main/kotlin/AndroidApplicationDependenciesConventionPlugin.kt index 8bd65151d7a..6526695bace 100644 --- a/build-logic/convention/src/main/kotlin/AndroidApplicationDependenciesConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/AndroidApplicationDependenciesConventionPlugin.kt @@ -52,7 +52,10 @@ class AndroidApplicationDependenciesConventionPlugin : Plugin { "implementation"(libs.jackson.module.kotlin) "implementation"(libs.okhttp) - "implementation"(libs.unifiedpush.connector) + "fullImplementation"(libs.unifiedpush.connector) + "minimalImplementation"(libs.unifiedpush.connector) { + exclude(group = "com.google.protobuf", module = "protobuf-java") + } "implementation"(libs.bundles.coil) diff --git a/common/build.gradle.kts b/common/build.gradle.kts index 50f58ddda50..70de991b600 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -50,7 +50,7 @@ dependencies { implementation(libs.jackson.module.kotlin) implementation(libs.android.beacon.library) - implementation(libs.unifiedpush.connector) + //implementation(libs.unifiedpush.connector) implementation(libs.iconics.core) implementation(libs.community.material.typeface) diff --git a/common/gradle.lockfile b/common/gradle.lockfile index b8dbb8f7773..eb6b38b44d8 100644 --- a/common/gradle.lockfile +++ b/common/gradle.lockfile @@ -134,9 +134,8 @@ com.google.auto.value:auto-value-annotations:1.11.0=debugUnitTestCompileClasspat com.google.auto.value:auto-value-annotations:1.6.3=_agp_internal_javaPreCompileDebug_kspClasspath,_agp_internal_javaPreCompileRelease_kspClasspath,hiltAnnotationProcessorDebugAndroidTest,hiltAnnotationProcessorDebugUnitTest,hiltAnnotationProcessorReleaseUnitTest,kspDebugAndroidTestKotlinProcessorClasspath,kspDebugKotlinProcessorClasspath,kspDebugUnitTestKotlinProcessorClasspath,kspReleaseKotlinProcessorClasspath,kspReleaseUnitTestKotlinProcessorClasspath com.google.auto:auto-common:1.2.1=_agp_internal_javaPreCompileDebug_kspClasspath,_agp_internal_javaPreCompileRelease_kspClasspath,_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-driver-instrumentation,_internal-unified-test-platform-android-test-plugin,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_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-result-listener-gradle,hiltAnnotationProcessorDebugAndroidTest,hiltAnnotationProcessorDebugUnitTest,hiltAnnotationProcessorReleaseUnitTest,kspDebugAndroidTestKotlinProcessorClasspath,kspDebugKotlinProcessorClasspath,kspDebugUnitTestKotlinProcessorClasspath,kspReleaseKotlinProcessorClasspath,kspReleaseUnitTestKotlinProcessorClasspath com.google.code.findbugs:jsr305:3.0.2=_agp_internal_javaPreCompileDebug_kspClasspath,_agp_internal_javaPreCompileRelease_kspClasspath,_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-driver-instrumentation,_internal-unified-test-platform-android-test-plugin,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_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-result-listener-gradle,_internal-unified-test-platform-core,_internal-unified-test-platform-launcher,debugAndroidTestCompileClasspath,debugAndroidTestRuntimeClasspath,debugCompileClasspath,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,hiltAnnotationProcessorDebugAndroidTest,hiltAnnotationProcessorDebugUnitTest,hiltAnnotationProcessorReleaseUnitTest,implementationDependenciesMetadata,kspDebugAndroidTestKotlinProcessorClasspath,kspDebugKotlinProcessorClasspath,kspDebugUnitTestKotlinProcessorClasspath,kspReleaseKotlinProcessorClasspath,kspReleaseUnitTestKotlinProcessorClasspath,releaseCompileClasspath,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath,testImplementationDependenciesMetadata -com.google.code.gson:gson:2.10.1=_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle,_internal-unified-test-platform-core,debugAndroidTestRuntimeClasspath,debugRuntimeClasspath,debugUnitTestRuntimeClasspath,releaseRuntimeClasspath,releaseUnitTestRuntimeClasspath +com.google.code.gson:gson:2.10.1=_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle,_internal-unified-test-platform-core com.google.code.gson:gson:2.8.9=_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-logcat,_internal-unified-test-platform-launcher -com.google.crypto.tink:tink:1.17.0=debugAndroidTestRuntimeClasspath,debugRuntimeClasspath,debugUnitTestRuntimeClasspath,releaseRuntimeClasspath,releaseUnitTestRuntimeClasspath com.google.crypto.tink:tink:1.7.0=_internal-unified-test-platform-android-test-plugin-host-emulator-control com.google.dagger:dagger-compiler:2.56.2=_agp_internal_javaPreCompileDebug_kspClasspath,_agp_internal_javaPreCompileRelease_kspClasspath,hiltAnnotationProcessorDebugAndroidTest,hiltAnnotationProcessorDebugUnitTest,hiltAnnotationProcessorReleaseUnitTest,kspDebugAndroidTestKotlinProcessorClasspath,kspDebugKotlinProcessorClasspath,kspDebugUnitTestKotlinProcessorClasspath,kspReleaseKotlinProcessorClasspath,kspReleaseUnitTestKotlinProcessorClasspath com.google.dagger:dagger-lint-aar:2.56.2=debugAndroidTestCompileClasspath,debugAndroidTestRuntimeClasspath,debugCompileClasspath,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,implementationDependenciesMetadata,releaseCompileClasspath,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath @@ -152,7 +151,6 @@ com.google.devtools.ksp:symbol-processing-api:2.1.20-2.0.0=kotlinCompilerPluginC com.google.devtools.ksp:symbol-processing-cmdline:2.1.20-2.0.0=kspPluginClasspathNonEmbeddable com.google.devtools.ksp:symbol-processing:2.1.20-2.0.0=kotlinCompilerPluginClasspathDebug,kotlinCompilerPluginClasspathDebugAndroidTest,kotlinCompilerPluginClasspathDebugUnitTest,kotlinCompilerPluginClasspathRelease,kotlinCompilerPluginClasspathReleaseUnitTest,kspPluginClasspath com.google.errorprone:error_prone_annotation:2.34.0=debugUnitTestRuntimeClasspath,releaseUnitTestRuntimeClasspath -com.google.errorprone:error_prone_annotations:2.22.0=debugAndroidTestRuntimeClasspath,debugRuntimeClasspath,releaseRuntimeClasspath com.google.errorprone:error_prone_annotations:2.23.0=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-driver-instrumentation,_internal-unified-test-platform-android-test-plugin,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_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-result-listener-gradle,_internal-unified-test-platform-core,_internal-unified-test-platform-launcher com.google.errorprone:error_prone_annotations:2.26.1=_agp_internal_javaPreCompileDebug_kspClasspath,_agp_internal_javaPreCompileRelease_kspClasspath,hiltAnnotationProcessorDebugAndroidTest,hiltAnnotationProcessorDebugUnitTest,hiltAnnotationProcessorReleaseUnitTest,kspDebugAndroidTestKotlinProcessorClasspath,kspDebugKotlinProcessorClasspath,kspDebugUnitTestKotlinProcessorClasspath,kspReleaseKotlinProcessorClasspath,kspReleaseUnitTestKotlinProcessorClasspath com.google.errorprone:error_prone_annotations:2.28.0=debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath,testImplementationDependenciesMetadata @@ -170,7 +168,6 @@ com.google.j2objc:j2objc-annotations:3.0.0=debugUnitTestCompileClasspath,debugUn com.google.protobuf:protobuf-java-util:3.22.3=_internal-unified-test-platform-core com.google.protobuf:protobuf-java-util:3.24.4=_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 com.google.protobuf:protobuf-java:3.24.4=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-driver-instrumentation,_internal-unified-test-platform-android-test-plugin,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_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-result-listener-gradle,_internal-unified-test-platform-core,_internal-unified-test-platform-launcher -com.google.protobuf:protobuf-java:4.28.2=debugAndroidTestRuntimeClasspath,debugRuntimeClasspath,debugUnitTestRuntimeClasspath,releaseRuntimeClasspath,releaseUnitTestRuntimeClasspath com.google.protobuf:protobuf-kotlin:3.24.4=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-driver-instrumentation,_internal-unified-test-platform-android-test-plugin,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_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-result-listener-gradle,_internal-unified-test-platform-core,_internal-unified-test-platform-launcher com.google.testing.platform:android-device-provider-local:0.0.9-alpha03=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_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-result-listener-gradle com.google.testing.platform:android-driver-instrumentation:0.0.9-alpha03=_internal-unified-test-platform-android-driver-instrumentation,_internal-unified-test-platform-android-test-plugin-host-emulator-control @@ -384,7 +381,6 @@ org.robolectric:shadows-framework:4.14.1=debugUnitTestCompileClasspath,debugUnit org.robolectric:utils-reflector:4.14.1=debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath,testImplementationDependenciesMetadata org.robolectric:utils:4.14.1=debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath,testImplementationDependenciesMetadata org.slf4j:slf4j-api:2.0.4=ktlint -org.unifiedpush.android:connector:3.0.9=debugAndroidTestCompileClasspath,debugAndroidTestRuntimeClasspath,debugCompileClasspath,debugRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,releaseCompileClasspath,releaseRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath org.xerial:sqlite-jdbc:3.41.2.2=_agp_internal_javaPreCompileDebug_kspClasspath,_agp_internal_javaPreCompileRelease_kspClasspath,hiltAnnotationProcessorDebugAndroidTest,hiltAnnotationProcessorDebugUnitTest,hiltAnnotationProcessorReleaseUnitTest,kspDebugAndroidTestKotlinProcessorClasspath,kspDebugKotlinProcessorClasspath,kspDebugUnitTestKotlinProcessorClasspath,kspReleaseKotlinProcessorClasspath,kspReleaseUnitTestKotlinProcessorClasspath org.yaml:snakeyaml:2.3=debugUnitTestRuntimeClasspath,releaseUnitTestRuntimeClasspath empty=_agp_internal_javaPreCompileDebugAndroidTest_kspClasspath,_agp_internal_javaPreCompileDebugUnitTest_kspClasspath,_agp_internal_javaPreCompileReleaseUnitTest_kspClasspath,androidApis,androidJdkImage,androidTestApiDependenciesMetadata,androidTestCompileOnlyDependenciesMetadata,androidTestDebugApiDependenciesMetadata,androidTestDebugCompileOnlyDependenciesMetadata,androidTestDebugImplementationDependenciesMetadata,androidTestDebugIntransitiveDependenciesMetadata,androidTestIntransitiveDependenciesMetadata,androidTestReleaseApiDependenciesMetadata,androidTestReleaseCompileOnlyDependenciesMetadata,androidTestReleaseImplementationDependenciesMetadata,androidTestReleaseIntransitiveDependenciesMetadata,androidTestUtil,compileOnlyDependenciesMetadata,coreLibraryDesugaring,debugAndroidTestAnnotationProcessorClasspath,debugAndroidTestApiDependenciesMetadata,debugAndroidTestCompileOnlyDependenciesMetadata,debugAndroidTestImplementationDependenciesMetadata,debugAndroidTestIntransitiveDependenciesMetadata,debugAnnotationProcessorClasspath,debugApiDependenciesMetadata,debugCompileOnlyDependenciesMetadata,debugImplementationDependenciesMetadata,debugIntransitiveDependenciesMetadata,debugUnitTestAnnotationProcessorClasspath,debugUnitTestApiDependenciesMetadata,debugUnitTestCompileOnlyDependenciesMetadata,debugUnitTestImplementationDependenciesMetadata,debugUnitTestIntransitiveDependenciesMetadata,hiltCompileOnlyDebugAndroidTest,hiltCompileOnlyDebugUnitTest,hiltCompileOnlyReleaseUnitTest,intransitiveDependenciesMetadata,kotlinCompilerPluginClasspath,kotlinNativeCompilerPluginClasspath,lintPublish,releaseAnnotationProcessorClasspath,releaseApiDependenciesMetadata,releaseCompileOnlyDependenciesMetadata,releaseImplementationDependenciesMetadata,releaseIntransitiveDependenciesMetadata,releaseUnitTestAnnotationProcessorClasspath,releaseUnitTestApiDependenciesMetadata,releaseUnitTestCompileOnlyDependenciesMetadata,releaseUnitTestImplementationDependenciesMetadata,releaseUnitTestIntransitiveDependenciesMetadata,testApiDependenciesMetadata,testCompileOnlyDependenciesMetadata,testDebugApiDependenciesMetadata,testDebugCompileOnlyDependenciesMetadata,testDebugImplementationDependenciesMetadata,testDebugIntransitiveDependenciesMetadata,testFixturesApiDependenciesMetadata,testFixturesCompileOnlyDependenciesMetadata,testFixturesDebugApiDependenciesMetadata,testFixturesDebugCompileOnlyDependenciesMetadata,testFixturesDebugImplementationDependenciesMetadata,testFixturesDebugIntransitiveDependenciesMetadata,testFixturesImplementationDependenciesMetadata,testFixturesIntransitiveDependenciesMetadata,testFixturesReleaseApiDependenciesMetadata,testFixturesReleaseCompileOnlyDependenciesMetadata,testFixturesReleaseImplementationDependenciesMetadata,testFixturesReleaseIntransitiveDependenciesMetadata,testIntransitiveDependenciesMetadata,testReleaseApiDependenciesMetadata,testReleaseCompileOnlyDependenciesMetadata,testReleaseImplementationDependenciesMetadata,testReleaseIntransitiveDependenciesMetadata diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4b3d5ee9251..accaa1f8e67 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -70,7 +70,7 @@ screenshot = "0.0.1-alpha09" sentry-android = "8.8.0" timber = "5.0.1" tools-desugar-jdk-libs = "2.1.5" -unifiedpush-connector = "3.0.9" +unifiedpush-connector = "3.0.8" watchfaceComplicationsDataSourceKtx = "1.2.1" wear = "1.3.0" wear-compose-foundation = "1.4.1" diff --git a/wear/gradle.lockfile b/wear/gradle.lockfile index 46128a72e3b..b7c3e1e6ec8 100644 --- a/wear/gradle.lockfile +++ b/wear/gradle.lockfile @@ -266,10 +266,9 @@ com.google.auto.service:auto-service-annotations:1.1.1=_internal-unified-test-pl com.google.auto.service:auto-service:1.1.1=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-driver-instrumentation,_internal-unified-test-platform-android-test-plugin,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_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-result-listener-gradle com.google.auto:auto-common:1.2.1=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-driver-instrumentation,_internal-unified-test-platform-android-test-plugin,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_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-result-listener-gradle com.google.code.findbugs:jsr305:3.0.2=_agp_internal_javaPreCompileDebug_kspClasspath,_agp_internal_javaPreCompileRelease_kspClasspath,_internal-screenshot-validation-junit-engine,_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-driver-instrumentation,_internal-unified-test-platform-android-test-plugin,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_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-result-listener-gradle,_internal-unified-test-platform-core,_internal-unified-test-platform-launcher,debugAndroidTestCompileClasspath,debugAndroidTestRuntimeClasspath,debugCompileClasspath,debugRuntimeClasspath,debugScreenshotTestCompileClasspath,debugScreenshotTestRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,hiltAnnotationProcessorDebug,hiltAnnotationProcessorDebugAndroidTest,hiltAnnotationProcessorDebugUnitTest,hiltAnnotationProcessorRelease,hiltAnnotationProcessorReleaseUnitTest,kspDebugAndroidTestKotlinProcessorClasspath,kspDebugKotlinProcessorClasspath,kspDebugUnitTestKotlinProcessorClasspath,kspReleaseKotlinProcessorClasspath,kspReleaseUnitTestKotlinProcessorClasspath,releaseCompileClasspath,releaseRuntimeClasspath,releaseScreenshotTestCompileClasspath,releaseScreenshotTestRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath -com.google.code.gson:gson:2.10.1=_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle,_internal-unified-test-platform-core,debugRuntimeClasspath,debugScreenshotTestRuntimeClasspath,debugUnitTestRuntimeClasspath,releaseRuntimeClasspath,releaseScreenshotTestRuntimeClasspath,releaseUnitTestRuntimeClasspath +com.google.code.gson:gson:2.10.1=_internal-unified-test-platform-android-test-plugin-host-emulator-control,_internal-unified-test-platform-android-test-plugin-host-retention,_internal-unified-test-platform-android-test-plugin-result-listener-gradle,_internal-unified-test-platform-core com.google.code.gson:gson:2.11.0=_internal-screenshot-validation-junit-engine com.google.code.gson:gson:2.8.9=_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-logcat,_internal-unified-test-platform-launcher -com.google.crypto.tink:tink:1.17.0=debugRuntimeClasspath,debugScreenshotTestRuntimeClasspath,debugUnitTestRuntimeClasspath,releaseRuntimeClasspath,releaseScreenshotTestRuntimeClasspath,releaseUnitTestRuntimeClasspath com.google.crypto.tink:tink:1.7.0=_internal-unified-test-platform-android-test-plugin-host-emulator-control com.google.dagger:dagger-compiler:2.56.2=_agp_internal_javaPreCompileDebug_kspClasspath,_agp_internal_javaPreCompileRelease_kspClasspath,hiltAnnotationProcessorDebug,hiltAnnotationProcessorDebugAndroidTest,hiltAnnotationProcessorDebugUnitTest,hiltAnnotationProcessorRelease,hiltAnnotationProcessorReleaseUnitTest,kspDebugAndroidTestKotlinProcessorClasspath,kspDebugKotlinProcessorClasspath,kspDebugUnitTestKotlinProcessorClasspath,kspReleaseKotlinProcessorClasspath,kspReleaseUnitTestKotlinProcessorClasspath com.google.dagger:dagger-lint-aar:2.56.2=debugAndroidTestCompileClasspath,debugCompileClasspath,debugRuntimeClasspath,debugScreenshotTestCompileClasspath,debugScreenshotTestRuntimeClasspath,debugUnitTestCompileClasspath,debugUnitTestRuntimeClasspath,releaseCompileClasspath,releaseRuntimeClasspath,releaseScreenshotTestCompileClasspath,releaseScreenshotTestRuntimeClasspath,releaseUnitTestCompileClasspath,releaseUnitTestRuntimeClasspath @@ -318,7 +317,6 @@ com.google.protobuf:protobuf-java-util:3.24.4=_internal-unified-test-platform-an com.google.protobuf:protobuf-java-util:3.25.5=_internal-screenshot-validation-junit-engine com.google.protobuf:protobuf-java:3.24.4=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-driver-instrumentation,_internal-unified-test-platform-android-test-plugin,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_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-result-listener-gradle,_internal-unified-test-platform-core,_internal-unified-test-platform-launcher com.google.protobuf:protobuf-java:3.25.5=_internal-screenshot-validation-junit-engine -com.google.protobuf:protobuf-java:4.28.2=debugRuntimeClasspath,debugScreenshotTestRuntimeClasspath,debugUnitTestRuntimeClasspath,releaseRuntimeClasspath,releaseScreenshotTestRuntimeClasspath,releaseUnitTestRuntimeClasspath com.google.protobuf:protobuf-javalite:3.19.1=debugAndroidTestRuntimeClasspath com.google.protobuf:protobuf-kotlin:3.24.4=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-driver-instrumentation,_internal-unified-test-platform-android-test-plugin,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_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-result-listener-gradle,_internal-unified-test-platform-core,_internal-unified-test-platform-launcher com.google.testing.platform:android-device-provider-local:0.0.9-alpha03=_internal-unified-test-platform-android-device-provider-ddmlib,_internal-unified-test-platform-android-device-provider-gradle,_internal-unified-test-platform-android-test-plugin-host-additional-test-output,_internal-unified-test-platform-android-test-plugin-host-apk-installer,_internal-unified-test-platform-android-test-plugin-host-coverage,_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-result-listener-gradle @@ -510,5 +508,4 @@ org.junit.platform:junit-platform-launcher:1.9.2=_internal-screenshot-validation org.junit:junit-bom:5.9.2=_internal-screenshot-validation-junit-engine org.opentest4j:opentest4j:1.2.0=_internal-screenshot-validation-junit-engine org.slf4j:slf4j-api:2.0.4=ktlint -org.unifiedpush.android:connector:3.0.9=debugRuntimeClasspath,debugScreenshotTestRuntimeClasspath,debugUnitTestRuntimeClasspath,releaseRuntimeClasspath,releaseScreenshotTestRuntimeClasspath,releaseUnitTestRuntimeClasspath empty=_agp_internal_javaPreCompileDebugAndroidTest_kspClasspath,_agp_internal_javaPreCompileDebugScreenshotTest_kspClasspath,_agp_internal_javaPreCompileDebugUnitTest_kspClasspath,_agp_internal_javaPreCompileReleaseScreenshotTest_kspClasspath,_agp_internal_javaPreCompileReleaseUnitTest_kspClasspath,androidApis,androidJdkImage,androidTestApiDependenciesMetadata,androidTestCompileOnlyDependenciesMetadata,androidTestDebugApiDependenciesMetadata,androidTestDebugCompileOnlyDependenciesMetadata,androidTestDebugImplementationDependenciesMetadata,androidTestDebugIntransitiveDependenciesMetadata,androidTestIntransitiveDependenciesMetadata,androidTestReleaseApiDependenciesMetadata,androidTestReleaseCompileOnlyDependenciesMetadata,androidTestReleaseImplementationDependenciesMetadata,androidTestReleaseIntransitiveDependenciesMetadata,androidTestUtil,compileOnlyDependenciesMetadata,debugAndroidTestAnnotationProcessorClasspath,debugAndroidTestApiDependenciesMetadata,debugAndroidTestCompileOnlyDependenciesMetadata,debugAndroidTestImplementationDependenciesMetadata,debugAndroidTestIntransitiveDependenciesMetadata,debugAnnotationProcessorClasspath,debugApiDependenciesMetadata,debugCompileOnlyDependenciesMetadata,debugIntransitiveDependenciesMetadata,debugReverseMetadataValues,debugScreenshotTestAnnotationProcessorClasspath,debugUnitTestAnnotationProcessorClasspath,debugUnitTestApiDependenciesMetadata,debugUnitTestCompileOnlyDependenciesMetadata,debugUnitTestImplementationDependenciesMetadata,debugUnitTestIntransitiveDependenciesMetadata,debugWearBundling,hiltCompileOnlyDebug,hiltCompileOnlyDebugAndroidTest,hiltCompileOnlyDebugUnitTest,hiltCompileOnlyRelease,hiltCompileOnlyReleaseUnitTest,intransitiveDependenciesMetadata,kotlinCompilerPluginClasspath,kotlinNativeCompilerPluginClasspath,lintChecks,lintPublish,releaseAnnotationProcessorClasspath,releaseApiDependenciesMetadata,releaseCompileOnlyDependenciesMetadata,releaseImplementationDependenciesMetadata,releaseIntransitiveDependenciesMetadata,releaseReverseMetadataValues,releaseScreenshotTestAnnotationProcessorClasspath,releaseUnitTestAnnotationProcessorClasspath,releaseUnitTestApiDependenciesMetadata,releaseUnitTestCompileOnlyDependenciesMetadata,releaseUnitTestImplementationDependenciesMetadata,releaseUnitTestIntransitiveDependenciesMetadata,releaseWearBundling,screenshotTestApiDependenciesMetadata,screenshotTestCompileOnlyDependenciesMetadata,screenshotTestDebugApiDependenciesMetadata,screenshotTestDebugCompileOnlyDependenciesMetadata,screenshotTestDebugImplementationDependenciesMetadata,screenshotTestDebugIntransitiveDependenciesMetadata,screenshotTestIntransitiveDependenciesMetadata,screenshotTestReleaseApiDependenciesMetadata,screenshotTestReleaseCompileOnlyDependenciesMetadata,screenshotTestReleaseImplementationDependenciesMetadata,screenshotTestReleaseIntransitiveDependenciesMetadata,testApiDependenciesMetadata,testCompileOnlyDependenciesMetadata,testDebugApiDependenciesMetadata,testDebugCompileOnlyDependenciesMetadata,testDebugImplementationDependenciesMetadata,testDebugIntransitiveDependenciesMetadata,testFixturesApiDependenciesMetadata,testFixturesCompileOnlyDependenciesMetadata,testFixturesDebugApiDependenciesMetadata,testFixturesDebugCompileOnlyDependenciesMetadata,testFixturesDebugImplementationDependenciesMetadata,testFixturesDebugIntransitiveDependenciesMetadata,testFixturesImplementationDependenciesMetadata,testFixturesIntransitiveDependenciesMetadata,testFixturesReleaseApiDependenciesMetadata,testFixturesReleaseCompileOnlyDependenciesMetadata,testFixturesReleaseImplementationDependenciesMetadata,testFixturesReleaseIntransitiveDependenciesMetadata,testImplementationDependenciesMetadata,testIntransitiveDependenciesMetadata,testReleaseApiDependenciesMetadata,testReleaseCompileOnlyDependenciesMetadata,testReleaseImplementationDependenciesMetadata,testReleaseIntransitiveDependenciesMetadata From 9c877eba162c67c6b4a11dd2f310ee2e64d6226c Mon Sep 17 00:00:00 2001 From: lone-faerie Date: Tue, 29 Apr 2025 16:03:16 -0700 Subject: [PATCH 05/15] Fix memory leak --- app/src/main/AndroidManifest.xml | 14 ++- .../notifications/UnifiedPushService.kt | 87 -------------- .../android/settings/SettingsFragment.kt | 20 +--- .../android/settings/SettingsPresenter.kt | 2 +- .../android/settings/SettingsPresenterImpl.kt | 16 +-- .../android/unifiedpush/UnifiedPushManager.kt | 109 ++++++++++++++++++ .../unifiedpush/UnifiedPushReceiver.kt | 49 ++++++++ .../impl/IntegrationRepositoryImpl.kt | 2 +- 8 files changed, 179 insertions(+), 120 deletions(-) delete mode 100644 app/src/main/kotlin/io/homeassistant/companion/android/notifications/UnifiedPushService.kt create mode 100644 app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushManager.kt create mode 100644 app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushReceiver.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index de697460643..1fece505318 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -915,13 +915,17 @@ android:value="true" /> - + - + + + + - + = jacksonObjectMapper().readValue(message.content) - messagingManager.handleMessage(data, SOURCE) - } - - override fun onNewEndpoint(endpoint: PushEndpoint, instance: String) { - mainScope.launch { - Timber.d("New Endpoint: ${endpoint.url} for $instance") - if (!serverManager.isRegistered()) { - Timber.d("Not trying to update registration since we aren't authenticated.") - return@launch - } - serverManager.defaultServers.forEach { - launch { - try { - serverManager.integrationRepository(it.id).updateRegistration( - deviceRegistration = DeviceRegistration(pushUrl = endpoint.url), - allowReregistration = false - ) - } catch (e: Exception) { - Timber.e(e, "Issue updating push url") - } - } - } - } - } - - override fun onRegistrationFailed(reason: FailedReason, instance: String) { - Timber.e("Issue registering: $reason") - } - - override fun onUnregistered(instance: String) { - mainScope.launch { - Timber.d("Unregistered: $instance") - if (!serverManager.isRegistered()) { - Timber.d("Not trying to update registration since we aren't authenticated.") - return@launch - } - serverManager.defaultServers.forEach { - launch { - try { - serverManager.integrationRepository(it.id).updateRegistration( - deviceRegistration = DeviceRegistration(pushUrl = null), - allowReregistration = false - ) - } catch (e: Exception) { - Timber.e(e, "Issue updating push url") - } - } - } - } - } -} \ No newline at end of file diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsFragment.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsFragment.kt index da9f141df2b..d222bf2662d 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsFragment.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsFragment.kt @@ -47,6 +47,7 @@ import io.homeassistant.companion.android.settings.vehicle.ManageAndroidAutoSett import io.homeassistant.companion.android.settings.wear.SettingsWearActivity import io.homeassistant.companion.android.settings.wear.SettingsWearDetection import io.homeassistant.companion.android.settings.widgets.ManageWidgetsSettingsFragment +import io.homeassistant.companion.android.unifiedpush.UnifiedPushManager import io.homeassistant.companion.android.webview.WebViewActivity import java.time.Instant import java.time.ZoneId @@ -262,13 +263,6 @@ class SettingsFragment( } } - findPreference("notification_unifiedpush")?.let { - it.setOnPreferenceChangeListener { _, newValue -> - registerUnifiedPushDistributor(newValue as String) - return@setOnPreferenceChangeListener true - } - } - if (BuildConfig.FLAVOR == "full") { findPreference("notification_rate_limit")?.let { lifecycleScope.launch(Dispatchers.Main) { @@ -497,7 +491,7 @@ class SettingsFragment( NotificationManagerCompat.from(requireContext()).areNotificationsEnabled() findPreference("notification_unifiedpush")?.let { - val distributors = UnifiedPush.getDistributors(requireContext()) + val distributors = presenter.getUnifiedPushDistributors() it.isVisible = notificationsEnabled && distributors.isNotEmpty() val pm = requireContext().packageManager it.entries = distributors.map { distributor -> @@ -507,9 +501,9 @@ class SettingsFragment( distributor } }.toTypedArray() + getString(commonR.string.disabled) - it.entryValues = distributors.toTypedArray() + "disabled" + it.entryValues = distributors.toTypedArray() + UnifiedPushManager.DISTRIBUTOR_DISABLED if (it.value == null) { - it.value = "disabled" + it.value = UnifiedPushManager.DISTRIBUTOR_DISABLED } } } @@ -536,12 +530,6 @@ class SettingsFragment( } } - private fun registerUnifiedPushDistributor(distributor: String) { - lifecycleScope.launch { - presenter.registerUnifiedPushDistributor(requireContext(), distributor) - } - } - @SuppressLint("BatteryLife") private fun requestBackgroundAccess() { if (!isIgnoringBatteryOptimizations()) { diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsPresenter.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsPresenter.kt index 06332bc7eb2..eaf384b092e 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsPresenter.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsPresenter.kt @@ -23,6 +23,6 @@ interface SettingsPresenter { fun getServersFlow(): StateFlow> fun getServerCount(): Int suspend fun getNotificationRateLimits(): RateLimitResponse? - fun registerUnifiedPushDistributor(context: Context, distributor: String) + fun getUnifiedPushDistributors(): List fun showChangeLog(context: Context) } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsPresenterImpl.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsPresenterImpl.kt index 5351e3f8bf0..0a45871d52e 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsPresenterImpl.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsPresenterImpl.kt @@ -31,6 +31,7 @@ import io.homeassistant.companion.android.onboarding.getMessagingToken import io.homeassistant.companion.android.sensors.LocationSensorManager import io.homeassistant.companion.android.settings.language.LanguagesManager import io.homeassistant.companion.android.themes.ThemesManager +import io.homeassistant.companion.android.unifiedpush.UnifiedPushManager import io.homeassistant.companion.android.util.ChangeLog import io.homeassistant.companion.android.util.UrlUtil import javax.inject.Inject @@ -51,6 +52,7 @@ class SettingsPresenterImpl @Inject constructor( private val prefsRepository: PrefsRepository, private val themesManager: ThemesManager, private val langsManager: LanguagesManager, + private val unifiedPushManager: UnifiedPushManager, private val changeLog: ChangeLog, private val settingsDao: SettingsDao, private val sensorDao: SensorDao @@ -109,7 +111,7 @@ class SettingsPresenterImpl @Inject constructor( "languages" -> langsManager.getCurrentLang() "page_zoom" -> prefsRepository.getPageZoomLevel().toString() "screen_orientation" -> prefsRepository.getScreenOrientation() - "notification_unifiedpush" -> prefsRepository.getUnifiedPushDistributor() + "notification_unifiedpush" -> unifiedPushManager.getDistributor() else -> throw IllegalArgumentException("No string found by this key: $key") } } @@ -121,7 +123,7 @@ class SettingsPresenterImpl @Inject constructor( "languages" -> langsManager.saveLang(value) "page_zoom" -> prefsRepository.setPageZoomLevel(value?.toIntOrNull()) "screen_orientation" -> prefsRepository.saveScreenOrientation(value) - "notification_unifiedpush" -> prefsRepository.setUnifiedPushDistributor(value) + "notification_unifiedpush" -> unifiedPushManager.saveDistributor(value) else -> throw IllegalArgumentException("No string found by this key: $key") } } @@ -158,14 +160,8 @@ class SettingsPresenterImpl @Inject constructor( } } - override fun registerUnifiedPushDistributor(context: Context, distributor: String) { - if (distributor == "disabled") { - UnifiedPush.unregister(context) - } else { - UnifiedPush.saveDistributor(context, distributor) - UnifiedPush.register(context) - } - } + override fun getUnifiedPushDistributors(): List = + unifiedPushManager.getDistributors() override fun showChangeLog(context: Context) { changeLog.showChangeLog(context, true) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushManager.kt b/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushManager.kt new file mode 100644 index 00000000000..dd96e1cc7b4 --- /dev/null +++ b/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushManager.kt @@ -0,0 +1,109 @@ +package io.homeassistant.companion.android.unifiedpush + +import android.content.ComponentName +import android.content.Context +import android.content.pm.PackageManager +import android.net.ConnectivityManager +import android.net.ConnectivityManager.NetworkCallback +import android.net.Network +import android.os.Build +import androidx.core.content.getSystemService +import dagger.hilt.android.qualifiers.ApplicationContext +import io.homeassistant.companion.android.common.data.integration.DeviceRegistration +import io.homeassistant.companion.android.common.data.prefs.PrefsRepository +import io.homeassistant.companion.android.common.data.servers.ServerManager +import javax.inject.Inject +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job +import kotlinx.coroutines.channels.Channel +import kotlinx.coroutines.launch +import org.unifiedpush.android.connector.FailedReason +import org.unifiedpush.android.connector.UnifiedPush +import org.unifiedpush.android.connector.data.PushMessage +import timber.log.Timber + +class UnifiedPushManager @Inject constructor( + @ApplicationContext val context: Context, + private val serverManager: ServerManager, +) { + companion object { + const val DISTRIBUTOR_DISABLED = "disabled" + } + + private var distributors: List = emptyList() + + private val mainScope: CoroutineScope = CoroutineScope(Dispatchers.Main + Job()) + + private val networkCallback = object : NetworkCallback() { + override fun onAvailable(network: Network) { + super.onAvailable(network) + UnifiedPush.register(context) + val cm = context.getSystemService() + cm?.unregisterNetworkCallback(this) + } + } + + private var retried = false + + fun saveDistributor(distributor: String?) { + if (distributor == null || distributor == DISTRIBUTOR_DISABLED) { + UnifiedPush.unregister(context) + retried = false + } else { + UnifiedPush.saveDistributor(context, distributor) + UnifiedPush.register(context) + } + } + + fun getDistributors(): List { + if (distributors.isEmpty()) { + distributors = UnifiedPush.getDistributors(context) + } + return distributors + } + + fun getDistributor(): String? = + UnifiedPush.getAckDistributor(context) + + fun updateEndpoint(endpoint: String?) { + mainScope.launch { + if (!serverManager.isRegistered()) { + Timber.d("Not trying to update registration since we aren't authenticated.") + return@launch + } + val url = endpoint.orEmpty() + serverManager.defaultServers.forEach { + launch { + try { + serverManager.integrationRepository(it.id).updateRegistration( + deviceRegistration = DeviceRegistration(pushUrl = url), + allowReregistration = false + ) + } catch (e: Exception) { + Timber.e(e, "Issue updating push url") + } + } + } + } + } + + fun onRegistrationFailed(reason: FailedReason) { + if (!retried) { + retried = true + when (reason) { + FailedReason.INTERNAL_ERROR -> UnifiedPush.register(context) + FailedReason.NETWORK -> { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + val cm = context.getSystemService() + cm?.registerDefaultNetworkCallback(networkCallback) + } + } + + else -> {} + } + } else { + Timber.d("Already retried registering") + } + } +} \ No newline at end of file diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushReceiver.kt b/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushReceiver.kt new file mode 100644 index 00000000000..7ab365aa03e --- /dev/null +++ b/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushReceiver.kt @@ -0,0 +1,49 @@ +package io.homeassistant.companion.android.unifiedpush + +import android.content.Context +import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper +import com.fasterxml.jackson.module.kotlin.readValue +import dagger.hilt.android.AndroidEntryPoint +import io.homeassistant.companion.android.notifications.MessagingManager +import javax.inject.Inject +import org.unifiedpush.android.connector.FailedReason +import org.unifiedpush.android.connector.MessagingReceiver +import org.unifiedpush.android.connector.data.PushEndpoint +import org.unifiedpush.android.connector.data.PushMessage +import timber.log.Timber + +@AndroidEntryPoint +class UnifiedPushReceiver : MessagingReceiver() { + companion object { + const val SOURCE = "UnifiedPush" + } + + @Inject + lateinit var unifiedPushManager: UnifiedPushManager + + @Inject + lateinit var messagingManager: MessagingManager + + override fun onMessage(context: Context, message: PushMessage, instance: String) { + Timber.d("From: $instance") + + val data: Map = jacksonObjectMapper().readValue(message.content) + messagingManager.handleMessage(data, SOURCE) + } + + override fun onNewEndpoint(context: Context, endpoint: PushEndpoint, instance: String) { + Timber.d("New Endpoint: ${endpoint.url} for $instance") + unifiedPushManager.updateEndpoint(endpoint.url) + } + + override fun onRegistrationFailed(context: Context, reason: FailedReason, instance: String) { + Timber.e("Issue registering: $reason") + unifiedPushManager.onRegistrationFailed(reason) + } + + override fun onUnregistered(context: Context, instance: String) { + Timber.d("Unregistered: $instance") + unifiedPushManager.saveDistributor(UnifiedPushManager.DISTRIBUTOR_DISABLED) + unifiedPushManager.updateEndpoint("") + } +} \ No newline at end of file diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/impl/IntegrationRepositoryImpl.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/impl/IntegrationRepositoryImpl.kt index 54c0aa12925..a16c5b8f983 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/impl/IntegrationRepositoryImpl.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/impl/IntegrationRepositoryImpl.kt @@ -820,7 +820,7 @@ class IntegrationRepositoryImpl @AssistedInject constructor( private suspend fun createUpdateRegistrationRequest(deviceRegistration: DeviceRegistration): RegisterDeviceRequest { val oldDeviceRegistration = getRegistration() val pushToken = deviceRegistration.pushToken ?: oldDeviceRegistration.pushToken - val pushUrl = deviceRegistration.pushUrl ?: oldDeviceRegistration.pushUrl + val pushUrl = deviceRegistration.pushUrl?.ifBlank { PUSH_URL } ?: oldDeviceRegistration.pushUrl val appData = mutableMapOf("push_websocket_channel" to deviceRegistration.pushWebsocket) if (!pushToken.isNullOrBlank()) { From a3367d990c813d2630542e7b6a3e349ad75604cf Mon Sep 17 00:00:00 2001 From: lone-faerie Date: Wed, 30 Apr 2025 00:20:18 -0700 Subject: [PATCH 06/15] Use UnifiedPush public key as push token --- .../FirebaseCloudMessagingService.kt | 6 ++ .../android/onboarding/MessagingToken.kt | 1 + .../android/notifications/MessagingManager.kt | 8 ++ .../android/settings/SettingsFragment.kt | 1 + .../android/unifiedpush/UnifiedPushManager.kt | 81 ++++++++++++++----- .../unifiedpush/UnifiedPushReceiver.kt | 7 +- .../android/unifiedpush/UnifiedPushWorker.kt | 48 +++++++++++ .../impl/IntegrationRepositoryImpl.kt | 2 +- 8 files changed, 132 insertions(+), 22 deletions(-) create mode 100644 app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushWorker.kt diff --git a/app/src/full/kotlin/io/homeassistant/companion/android/notifications/FirebaseCloudMessagingService.kt b/app/src/full/kotlin/io/homeassistant/companion/android/notifications/FirebaseCloudMessagingService.kt index 499f0c02432..5c163deb826 100644 --- a/app/src/full/kotlin/io/homeassistant/companion/android/notifications/FirebaseCloudMessagingService.kt +++ b/app/src/full/kotlin/io/homeassistant/companion/android/notifications/FirebaseCloudMessagingService.kt @@ -40,6 +40,12 @@ class FirebaseCloudMessagingService : FirebaseMessagingService() { override fun onNewToken(token: String) { mainScope.launch { Timber.d("Refreshed token: $token") + messagingManager.fcmToken = token + if (messagingManager.upToken.isNotBlank()) { + // Updating registration while using UnifiedPush will overwrite its token, so ignore new FCM tokens. + Timber.d("Not trying to update registration since UnifiedPush is being used.") + return@launch + } if (!serverManager.isRegistered()) { Timber.d("Not trying to update registration since we aren't authenticated.") return@launch diff --git a/app/src/full/kotlin/io/homeassistant/companion/android/onboarding/MessagingToken.kt b/app/src/full/kotlin/io/homeassistant/companion/android/onboarding/MessagingToken.kt index 5a0a61f49c7..215ccef569b 100644 --- a/app/src/full/kotlin/io/homeassistant/companion/android/onboarding/MessagingToken.kt +++ b/app/src/full/kotlin/io/homeassistant/companion/android/onboarding/MessagingToken.kt @@ -2,6 +2,7 @@ package io.homeassistant.companion.android.onboarding import com.google.firebase.messaging.FirebaseMessaging import kotlinx.coroutines.tasks.await +import org.unifiedpush.android.connector.keys.DefaultKeyManager import timber.log.Timber suspend fun getMessagingToken(): String { diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/notifications/MessagingManager.kt b/app/src/main/kotlin/io/homeassistant/companion/android/notifications/MessagingManager.kt index c4f0678a1d5..a536bdd90a8 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/notifications/MessagingManager.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/notifications/MessagingManager.kt @@ -96,8 +96,12 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.withContext import okhttp3.OkHttpClient import okhttp3.Request @@ -272,6 +276,10 @@ class MessagingManager @Inject constructor( private val mainScope: CoroutineScope = CoroutineScope(Dispatchers.Main + Job()) + // Keep reference to push tokens so UnifiedPush and FCM don't conflict. + var fcmToken = "" + var upToken = "" + fun handleMessage(notificationData: Map, source: String, serverId: Int = ServerManager.SERVER_ID_ACTIVE) { val flattened = mutableMapOf() if (notificationData.containsKey("data")) { diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsFragment.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsFragment.kt index d222bf2662d..ad00a99ffe5 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsFragment.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsFragment.kt @@ -495,6 +495,7 @@ class SettingsFragment( it.isVisible = notificationsEnabled && distributors.isNotEmpty() val pm = requireContext().packageManager it.entries = distributors.map { distributor -> + // Map package name to app display name. try { pm.getApplicationLabel(pm.getApplicationInfo(distributor, PackageManager.GET_META_DATA)).toString() } catch (_: PackageManager.NameNotFoundException) { diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushManager.kt b/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushManager.kt index dd96e1cc7b4..63f4e19a5d3 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushManager.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushManager.kt @@ -8,24 +8,43 @@ import android.net.ConnectivityManager.NetworkCallback import android.net.Network import android.os.Build import androidx.core.content.getSystemService +import androidx.work.Constraints +import androidx.work.CoroutineWorker +import androidx.work.NetworkType +import androidx.work.OneTimeWorkRequestBuilder +import androidx.work.WorkManager +import androidx.work.WorkerParameters +import dagger.hilt.EntryPoint +import dagger.hilt.InstallIn +import dagger.hilt.android.EntryPointAccessors import dagger.hilt.android.qualifiers.ApplicationContext +import dagger.hilt.components.SingletonComponent +import io.homeassistant.companion.android.BuildConfig import io.homeassistant.companion.android.common.data.integration.DeviceRegistration import io.homeassistant.companion.android.common.data.prefs.PrefsRepository import io.homeassistant.companion.android.common.data.servers.ServerManager +import io.homeassistant.companion.android.notifications.MessagingManager +import io.homeassistant.companion.android.onboarding.getMessagingToken import javax.inject.Inject import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.launch +import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock +import kotlinx.coroutines.withContext import org.unifiedpush.android.connector.FailedReason import org.unifiedpush.android.connector.UnifiedPush +import org.unifiedpush.android.connector.data.PushEndpoint import org.unifiedpush.android.connector.data.PushMessage import timber.log.Timber class UnifiedPushManager @Inject constructor( @ApplicationContext val context: Context, private val serverManager: ServerManager, + private val messagingManager: MessagingManager ) { companion object { const val DISTRIBUTOR_DISABLED = "disabled" @@ -35,24 +54,26 @@ class UnifiedPushManager @Inject constructor( private val mainScope: CoroutineScope = CoroutineScope(Dispatchers.Main + Job()) - private val networkCallback = object : NetworkCallback() { - override fun onAvailable(network: Network) { - super.onAvailable(network) - UnifiedPush.register(context) - val cm = context.getSystemService() - cm?.unregisterNetworkCallback(this) - } + private var retried = false + + // Synchronize registration for when it is called from UnifiedPushWorker. + @Synchronized + internal fun register() { + UnifiedPush.register(context) } - private var retried = false + @Synchronized + private fun unregister() { + UnifiedPush.unregister(context) + } fun saveDistributor(distributor: String?) { if (distributor == null || distributor == DISTRIBUTOR_DISABLED) { - UnifiedPush.unregister(context) + unregister() retried = false } else { UnifiedPush.saveDistributor(context, distributor) - UnifiedPush.register(context) + register() } } @@ -66,18 +87,40 @@ class UnifiedPushManager @Inject constructor( fun getDistributor(): String? = UnifiedPush.getAckDistributor(context) - fun updateEndpoint(endpoint: String?) { + fun tryRegisterDefaultDistributor(): Boolean { + var result = false + UnifiedPush.tryUseCurrentOrDefaultDistributor(context) { success -> + if (success) { + register() + } + result = success + } + return result + } + + fun updateEndpoint(endpoint: PushEndpoint?) { mainScope.launch { + val url = endpoint?.url.orEmpty() + val token = if (endpoint != null) { + endpoint.pubKeySet?.let { it.auth + ":" + it.pubKey } + } else { + // Restore FCM token when UnifiedPush is disabled. + messagingManager.fcmToken.ifBlank { getMessagingToken() } + } + messagingManager.upToken = token.orEmpty() + if (!serverManager.isRegistered()) { Timber.d("Not trying to update registration since we aren't authenticated.") return@launch } - val url = endpoint.orEmpty() serverManager.defaultServers.forEach { launch { try { serverManager.integrationRepository(it.id).updateRegistration( - deviceRegistration = DeviceRegistration(pushUrl = url), + deviceRegistration = DeviceRegistration( + pushUrl = url, + pushToken = token, + ), allowReregistration = false ) } catch (e: Exception) { @@ -89,15 +132,15 @@ class UnifiedPushManager @Inject constructor( } fun onRegistrationFailed(reason: FailedReason) { - if (!retried) { + if (!retried) { // Only retry once to prevent infinite loop. retried = true when (reason) { - FailedReason.INTERNAL_ERROR -> UnifiedPush.register(context) + FailedReason.INTERNAL_ERROR -> UnifiedPushWorker.start(context) FailedReason.NETWORK -> { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { - val cm = context.getSystemService() - cm?.registerDefaultNetworkCallback(networkCallback) - } + val constraints = Constraints.Builder() + .setRequiredNetworkType(NetworkType.CONNECTED) + .build() + UnifiedPushWorker.start(context, constraints) } else -> {} diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushReceiver.kt b/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushReceiver.kt index 7ab365aa03e..c5419917b9c 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushReceiver.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushReceiver.kt @@ -6,6 +6,9 @@ import com.fasterxml.jackson.module.kotlin.readValue import dagger.hilt.android.AndroidEntryPoint import io.homeassistant.companion.android.notifications.MessagingManager import javax.inject.Inject +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job import org.unifiedpush.android.connector.FailedReason import org.unifiedpush.android.connector.MessagingReceiver import org.unifiedpush.android.connector.data.PushEndpoint @@ -33,7 +36,7 @@ class UnifiedPushReceiver : MessagingReceiver() { override fun onNewEndpoint(context: Context, endpoint: PushEndpoint, instance: String) { Timber.d("New Endpoint: ${endpoint.url} for $instance") - unifiedPushManager.updateEndpoint(endpoint.url) + unifiedPushManager.updateEndpoint(endpoint) } override fun onRegistrationFailed(context: Context, reason: FailedReason, instance: String) { @@ -44,6 +47,6 @@ class UnifiedPushReceiver : MessagingReceiver() { override fun onUnregistered(context: Context, instance: String) { Timber.d("Unregistered: $instance") unifiedPushManager.saveDistributor(UnifiedPushManager.DISTRIBUTOR_DISABLED) - unifiedPushManager.updateEndpoint("") + unifiedPushManager.updateEndpoint(null) } } \ No newline at end of file diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushWorker.kt b/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushWorker.kt new file mode 100644 index 00000000000..0122eefe11b --- /dev/null +++ b/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushWorker.kt @@ -0,0 +1,48 @@ +package io.homeassistant.companion.android.unifiedpush + +import android.content.Context +import androidx.work.Constraints +import androidx.work.CoroutineWorker +import androidx.work.ExistingWorkPolicy +import androidx.work.OneTimeWorkRequestBuilder +import androidx.work.WorkManager +import androidx.work.WorkerParameters +import dagger.hilt.EntryPoint +import dagger.hilt.InstallIn +import dagger.hilt.android.EntryPointAccessors +import dagger.hilt.components.SingletonComponent +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext + +class UnifiedPushWorker( + appContext: Context, + workerParams: WorkerParameters +) : CoroutineWorker(appContext, workerParams) { + + companion object { + const val TAG = "UnifiedPushWorker" + + fun start(context: Context, constraints: Constraints = Constraints.NONE) { + val request = OneTimeWorkRequestBuilder() + .setConstraints(constraints) + .build() + WorkManager.getInstance(context).enqueueUniqueWork(TAG, ExistingWorkPolicy.REPLACE, request) + } + } + + private val entryPoint = EntryPointAccessors + .fromApplication(applicationContext, UnifiedPushWorkerEntryPoint::class.java) + + private val unifiedPushManager = entryPoint.unifiedPushManager() + + @EntryPoint + @InstallIn(SingletonComponent::class) + interface UnifiedPushWorkerEntryPoint { + fun unifiedPushManager(): UnifiedPushManager + } + + override suspend fun doWork(): Result = withContext(Dispatchers.IO) { + unifiedPushManager.register() + Result.success() + } +} \ No newline at end of file diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/impl/IntegrationRepositoryImpl.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/impl/IntegrationRepositoryImpl.kt index a16c5b8f983..f1511fb0dce 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/impl/IntegrationRepositoryImpl.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/impl/IntegrationRepositoryImpl.kt @@ -169,7 +169,7 @@ class IntegrationRepositoryImpl @AssistedInject constructor( localStorage.getString(PREF_APP_VERSION), server.deviceName, localStorage.getString(PREF_PUSH_TOKEN), - localStorage.getString(PREF_PUSH_URL) + localStorage.getString(PREF_PUSH_URL), ) } From bca5f3f66519febb18c855ba2671a8b8b21694bd Mon Sep 17 00:00:00 2001 From: lone-faerie Date: Wed, 30 Apr 2025 00:53:01 -0700 Subject: [PATCH 07/15] Remove unused imports --- .../android/onboarding/MessagingToken.kt | 1 - .../android/notifications/MessagingManager.kt | 6 +---- .../android/settings/SettingsFragment.kt | 3 +-- .../android/settings/SettingsPresenterImpl.kt | 3 +-- .../android/unifiedpush/UnifiedPushManager.kt | 23 ------------------- .../unifiedpush/UnifiedPushReceiver.kt | 3 --- 6 files changed, 3 insertions(+), 36 deletions(-) diff --git a/app/src/full/kotlin/io/homeassistant/companion/android/onboarding/MessagingToken.kt b/app/src/full/kotlin/io/homeassistant/companion/android/onboarding/MessagingToken.kt index 215ccef569b..5a0a61f49c7 100644 --- a/app/src/full/kotlin/io/homeassistant/companion/android/onboarding/MessagingToken.kt +++ b/app/src/full/kotlin/io/homeassistant/companion/android/onboarding/MessagingToken.kt @@ -2,7 +2,6 @@ package io.homeassistant.companion.android.onboarding import com.google.firebase.messaging.FirebaseMessaging import kotlinx.coroutines.tasks.await -import org.unifiedpush.android.connector.keys.DefaultKeyManager import timber.log.Timber suspend fun getMessagingToken(): String { diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/notifications/MessagingManager.kt b/app/src/main/kotlin/io/homeassistant/companion/android/notifications/MessagingManager.kt index a536bdd90a8..bd95ff01e6b 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/notifications/MessagingManager.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/notifications/MessagingManager.kt @@ -46,7 +46,6 @@ import com.fasterxml.jackson.module.kotlin.readValue import dagger.hilt.android.qualifiers.ApplicationContext import io.homeassistant.companion.android.R import io.homeassistant.companion.android.authenticator.Authenticator -import io.homeassistant.companion.android.common.R as commonR import io.homeassistant.companion.android.common.data.prefs.PrefsRepository import io.homeassistant.companion.android.common.data.servers.ServerManager import io.homeassistant.companion.android.common.notifications.DeviceCommandData @@ -96,18 +95,15 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking -import kotlinx.coroutines.sync.Mutex -import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.withContext import okhttp3.OkHttpClient import okhttp3.Request import okio.sink import org.json.JSONObject import timber.log.Timber +import io.homeassistant.companion.android.common.R as commonR class MessagingManager @Inject constructor( @ApplicationContext val context: Context, diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsFragment.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsFragment.kt index ad00a99ffe5..c6684acd636 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsFragment.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsFragment.kt @@ -29,7 +29,6 @@ import com.google.android.material.snackbar.Snackbar import io.homeassistant.companion.android.BuildConfig import io.homeassistant.companion.android.R import io.homeassistant.companion.android.authenticator.Authenticator -import io.homeassistant.companion.android.common.R as commonR import io.homeassistant.companion.android.database.server.Server import io.homeassistant.companion.android.nfc.NfcSetupActivity import io.homeassistant.companion.android.onboarding.OnboardApp @@ -57,8 +56,8 @@ import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock -import org.unifiedpush.android.connector.UnifiedPush import timber.log.Timber +import io.homeassistant.companion.android.common.R as commonR class SettingsFragment( private val presenter: SettingsPresenter, diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsPresenterImpl.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsPresenterImpl.kt index 0a45871d52e..795587bc542 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsPresenterImpl.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsPresenterImpl.kt @@ -11,7 +11,6 @@ import androidx.core.content.getSystemService import androidx.preference.PreferenceDataStore import io.homeassistant.companion.android.BuildConfig import io.homeassistant.companion.android.R -import io.homeassistant.companion.android.common.R as commonR import io.homeassistant.companion.android.common.data.integration.DeviceRegistration import io.homeassistant.companion.android.common.data.integration.impl.entities.RateLimitResponse import io.homeassistant.companion.android.common.data.prefs.PrefsRepository @@ -44,8 +43,8 @@ import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking import kotlinx.coroutines.withContext -import org.unifiedpush.android.connector.UnifiedPush import timber.log.Timber +import io.homeassistant.companion.android.common.R as commonR class SettingsPresenterImpl @Inject constructor( private val serverManager: ServerManager, diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushManager.kt b/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushManager.kt index 63f4e19a5d3..93b6457fd12 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushManager.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushManager.kt @@ -1,27 +1,10 @@ package io.homeassistant.companion.android.unifiedpush -import android.content.ComponentName import android.content.Context -import android.content.pm.PackageManager -import android.net.ConnectivityManager -import android.net.ConnectivityManager.NetworkCallback -import android.net.Network -import android.os.Build -import androidx.core.content.getSystemService import androidx.work.Constraints -import androidx.work.CoroutineWorker import androidx.work.NetworkType -import androidx.work.OneTimeWorkRequestBuilder -import androidx.work.WorkManager -import androidx.work.WorkerParameters -import dagger.hilt.EntryPoint -import dagger.hilt.InstallIn -import dagger.hilt.android.EntryPointAccessors import dagger.hilt.android.qualifiers.ApplicationContext -import dagger.hilt.components.SingletonComponent -import io.homeassistant.companion.android.BuildConfig import io.homeassistant.companion.android.common.data.integration.DeviceRegistration -import io.homeassistant.companion.android.common.data.prefs.PrefsRepository import io.homeassistant.companion.android.common.data.servers.ServerManager import io.homeassistant.companion.android.notifications.MessagingManager import io.homeassistant.companion.android.onboarding.getMessagingToken @@ -29,16 +12,10 @@ import javax.inject.Inject import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job -import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.launch -import kotlinx.coroutines.runBlocking -import kotlinx.coroutines.sync.Mutex -import kotlinx.coroutines.sync.withLock -import kotlinx.coroutines.withContext import org.unifiedpush.android.connector.FailedReason import org.unifiedpush.android.connector.UnifiedPush import org.unifiedpush.android.connector.data.PushEndpoint -import org.unifiedpush.android.connector.data.PushMessage import timber.log.Timber class UnifiedPushManager @Inject constructor( diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushReceiver.kt b/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushReceiver.kt index c5419917b9c..268a978c751 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushReceiver.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushReceiver.kt @@ -6,9 +6,6 @@ import com.fasterxml.jackson.module.kotlin.readValue import dagger.hilt.android.AndroidEntryPoint import io.homeassistant.companion.android.notifications.MessagingManager import javax.inject.Inject -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.Job import org.unifiedpush.android.connector.FailedReason import org.unifiedpush.android.connector.MessagingReceiver import org.unifiedpush.android.connector.data.PushEndpoint From 507445fe6e61c7f11b6353e554baed9eef20b943 Mon Sep 17 00:00:00 2001 From: lone-faerie Date: Wed, 30 Apr 2025 23:53:02 -0700 Subject: [PATCH 08/15] Register UnifiedPush on launch --- .../android/launch/LaunchPresenterImpl.kt | 16 ++++- .../FirebaseCloudMessagingService.kt | 3 +- .../android/launch/LaunchActivity.kt | 26 ++++++-- .../android/launch/LaunchPresenterBase.kt | 2 +- .../android/notifications/MessagingManager.kt | 10 ++- .../android/unifiedpush/UnifiedPushManager.kt | 61 ++++++++----------- .../unifiedpush/UnifiedPushReceiver.kt | 3 +- .../android/unifiedpush/UnifiedPushWorker.kt | 13 +--- .../android/util/UnifiedPushExtensions.kt | 15 +++++ .../android/launch/LaunchPresenterImpl.kt | 7 ++- .../data/integration/DeviceRegistration.kt | 3 +- .../impl/IntegrationRepositoryImpl.kt | 8 ++- .../common/data/prefs/PrefsRepository.kt | 4 +- .../common/data/prefs/PrefsRepositoryImpl.kt | 15 ++--- 14 files changed, 107 insertions(+), 79 deletions(-) create mode 100644 app/src/main/kotlin/io/homeassistant/companion/android/util/UnifiedPushExtensions.kt diff --git a/app/src/full/kotlin/io/homeassistant/companion/android/launch/LaunchPresenterImpl.kt b/app/src/full/kotlin/io/homeassistant/companion/android/launch/LaunchPresenterImpl.kt index aa55964c5b1..4270eaed214 100644 --- a/app/src/full/kotlin/io/homeassistant/companion/android/launch/LaunchPresenterImpl.kt +++ b/app/src/full/kotlin/io/homeassistant/companion/android/launch/LaunchPresenterImpl.kt @@ -7,8 +7,10 @@ import io.homeassistant.companion.android.BuildConfig import io.homeassistant.companion.android.common.data.integration.DeviceRegistration import io.homeassistant.companion.android.common.data.servers.ServerManager import io.homeassistant.companion.android.onboarding.getMessagingToken +import io.homeassistant.companion.android.util.tryRegisterCurrentOrDefaultDistributor import javax.inject.Inject import kotlinx.coroutines.launch +import org.unifiedpush.android.connector.UnifiedPush import timber.log.Timber @ActivityScoped @@ -21,11 +23,19 @@ class LaunchPresenterImpl @Inject constructor( serverManager.defaultServers.forEach { ioScope.launch { try { + // Don't get a new push token if using UnifiedPush. + val messagingToken = if (!UnifiedPush.tryRegisterCurrentOrDefaultDistributor(view as Context)) { + getMessagingToken() + } else { + null + } serverManager.integrationRepository(it.id).updateRegistration( DeviceRegistration( - "${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})", - null, - getMessagingToken() + appVersion = "${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})", + deviceName = null, + pushToken = messagingToken, + pushUrl = messagingToken?.let { "" }, // A blank url indicates to use the build-time push url. + pushEncrypt = messagingToken == null && UnifiedPush.getAckDistributor(view as Context) != null ) ) serverManager.integrationRepository(it.id).getConfig() // Update cached data diff --git a/app/src/full/kotlin/io/homeassistant/companion/android/notifications/FirebaseCloudMessagingService.kt b/app/src/full/kotlin/io/homeassistant/companion/android/notifications/FirebaseCloudMessagingService.kt index 5c163deb826..80b2e867f3d 100644 --- a/app/src/full/kotlin/io/homeassistant/companion/android/notifications/FirebaseCloudMessagingService.kt +++ b/app/src/full/kotlin/io/homeassistant/companion/android/notifications/FirebaseCloudMessagingService.kt @@ -40,8 +40,7 @@ class FirebaseCloudMessagingService : FirebaseMessagingService() { override fun onNewToken(token: String) { mainScope.launch { Timber.d("Refreshed token: $token") - messagingManager.fcmToken = token - if (messagingManager.upToken.isNotBlank()) { + if (messagingManager.isUnifiedPushEnabled()) { // Updating registration while using UnifiedPush will overwrite its token, so ignore new FCM tokens. Timber.d("Not trying to update registration since UnifiedPush is being used.") return@launch diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/launch/LaunchActivity.kt b/app/src/main/kotlin/io/homeassistant/companion/android/launch/LaunchActivity.kt index 717fe6266f6..a917d7e414d 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/launch/LaunchActivity.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/launch/LaunchActivity.kt @@ -16,6 +16,7 @@ import dagger.hilt.android.AndroidEntryPoint import io.homeassistant.companion.android.BuildConfig import io.homeassistant.companion.android.common.R as commonR import io.homeassistant.companion.android.common.data.integration.DeviceRegistration +import io.homeassistant.companion.android.common.data.prefs.PrefsRepository import io.homeassistant.companion.android.common.data.servers.ServerManager import io.homeassistant.companion.android.database.sensor.SensorDao import io.homeassistant.companion.android.database.server.Server @@ -31,6 +32,7 @@ import io.homeassistant.companion.android.settings.SettingViewModel import io.homeassistant.companion.android.settings.server.ServerChooserFragment import io.homeassistant.companion.android.util.UrlUtil import io.homeassistant.companion.android.util.compose.HomeAssistantAppTheme +import io.homeassistant.companion.android.util.tryRegisterCurrentOrDefaultDistributor import io.homeassistant.companion.android.webview.WebViewActivity import javax.inject.Inject import javax.net.ssl.SSLException @@ -39,6 +41,7 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.launch +import org.unifiedpush.android.connector.UnifiedPush import retrofit2.HttpException import timber.log.Timber @@ -54,6 +57,9 @@ class LaunchActivity : AppCompatActivity(), LaunchView { @Inject lateinit var sensorDao: SensorDao + @Inject + lateinit var prefsRepository: PrefsRepository + private val mainScope = CoroutineScope(Dispatchers.Main + Job()) private val settingViewModel: SettingViewModel by viewModels() @@ -138,8 +144,13 @@ class LaunchActivity : AppCompatActivity(), LaunchView { mainScope.launch { if (result != null) { val (url, authCode, deviceName, deviceTrackingEnabled, notificationsEnabled) = result - val messagingToken = getMessagingToken() - if (messagingToken.isBlank() && BuildConfig.FLAVOR == "full") { + // Try UnifiedPush first, then fallback to FCM token. + val messagingToken = if (!UnifiedPush.tryRegisterCurrentOrDefaultDistributor(this@LaunchActivity)) { + getMessagingToken() + } else { + null + } + if (messagingToken != null && messagingToken.isBlank() && BuildConfig.FLAVOR == "full") { AlertDialog.Builder(this@LaunchActivity) .setTitle(commonR.string.firebase_error_title) .setMessage(commonR.string.firebase_error_message) @@ -176,7 +187,7 @@ class LaunchActivity : AppCompatActivity(), LaunchView { url: String, authCode: String, deviceName: String, - messagingToken: String, + messagingToken: String?, deviceTrackingEnabled: Boolean, notificationsEnabled: Boolean ) { @@ -196,12 +207,15 @@ class LaunchActivity : AppCompatActivity(), LaunchView { serverManager.authenticationRepository(serverId).registerAuthorizationCode(authCode) serverManager.integrationRepository(serverId).registerDevice( DeviceRegistration( - "${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})", - deviceName, - messagingToken + appVersion = "${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})", + deviceName = deviceName, + pushToken = messagingToken, + pushUrl = messagingToken?.let { "" }, // A blank url indicates to use the build-time push url. + pushEncrypt = messagingToken == null && !UnifiedPush.getAckDistributor(this.applicationContext).isNullOrBlank() ) ) serverId = serverManager.convertTemporaryServer(serverId) + prefsRepository.setUnifiedPushEnabled(messagingToken == null) } catch (e: Exception) { // Fatal errors: if one of these calls fail, the app cannot proceed. // Show an error, clean up the session and require new registration. diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/launch/LaunchPresenterBase.kt b/app/src/main/kotlin/io/homeassistant/companion/android/launch/LaunchPresenterBase.kt index 60a96b0a906..cfecb32cf92 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/launch/LaunchPresenterBase.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/launch/LaunchPresenterBase.kt @@ -9,7 +9,7 @@ import kotlinx.coroutines.cancel import kotlinx.coroutines.launch abstract class LaunchPresenterBase( - private val view: LaunchView, + internal val view: LaunchView, internal val serverManager: ServerManager ) : LaunchPresenter { diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/notifications/MessagingManager.kt b/app/src/main/kotlin/io/homeassistant/companion/android/notifications/MessagingManager.kt index bd95ff01e6b..031570ab62e 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/notifications/MessagingManager.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/notifications/MessagingManager.kt @@ -97,6 +97,8 @@ import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.withContext import okhttp3.OkHttpClient import okhttp3.Request @@ -272,9 +274,11 @@ class MessagingManager @Inject constructor( private val mainScope: CoroutineScope = CoroutineScope(Dispatchers.Main + Job()) - // Keep reference to push tokens so UnifiedPush and FCM don't conflict. - var fcmToken = "" - var upToken = "" + suspend fun isUnifiedPushEnabled(): Boolean = + prefsRepository.isUnifiedPushEnabled() + + suspend fun setUnifiedPushEnabled(enabled: Boolean) = + prefsRepository.setUnifiedPushEnabled(enabled) fun handleMessage(notificationData: Map, source: String, serverId: Int = ServerManager.SERVER_ID_ACTIVE) { val flattened = mutableMapOf() diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushManager.kt b/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushManager.kt index 93b6457fd12..e1b13434e0e 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushManager.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushManager.kt @@ -5,6 +5,7 @@ import androidx.work.Constraints import androidx.work.NetworkType import dagger.hilt.android.qualifiers.ApplicationContext import io.homeassistant.companion.android.common.data.integration.DeviceRegistration +import io.homeassistant.companion.android.common.data.prefs.PrefsRepository import io.homeassistant.companion.android.common.data.servers.ServerManager import io.homeassistant.companion.android.notifications.MessagingManager import io.homeassistant.companion.android.onboarding.getMessagingToken @@ -21,36 +22,37 @@ import timber.log.Timber class UnifiedPushManager @Inject constructor( @ApplicationContext val context: Context, private val serverManager: ServerManager, - private val messagingManager: MessagingManager + private val messagingManager: MessagingManager, + private val prefsRepository: PrefsRepository ) { companion object { const val DISTRIBUTOR_DISABLED = "disabled" - } - private var distributors: List = emptyList() + // Synchronize registration for when it is called from UnifiedPushWorker. + @Synchronized + fun register(context: Context) = + UnifiedPush.register(context) + + @Synchronized + fun unregister(context: Context) = + UnifiedPush.unregister(context) + } private val mainScope: CoroutineScope = CoroutineScope(Dispatchers.Main + Job()) + private var distributors: List = emptyList() private var retried = false - // Synchronize registration for when it is called from UnifiedPushWorker. - @Synchronized - internal fun register() { - UnifiedPush.register(context) - } - - @Synchronized - private fun unregister() { - UnifiedPush.unregister(context) - } fun saveDistributor(distributor: String?) { + Timber.d("saveDistributor $distributor") if (distributor == null || distributor == DISTRIBUTOR_DISABLED) { - unregister() + unregister(context) + updateEndpoint(null) retried = false } else { UnifiedPush.saveDistributor(context, distributor) - register() + register(context) } } @@ -64,27 +66,16 @@ class UnifiedPushManager @Inject constructor( fun getDistributor(): String? = UnifiedPush.getAckDistributor(context) - fun tryRegisterDefaultDistributor(): Boolean { - var result = false - UnifiedPush.tryUseCurrentOrDefaultDistributor(context) { success -> - if (success) { - register() - } - result = success - } - return result - } - fun updateEndpoint(endpoint: PushEndpoint?) { + Timber.d("updateEndpoint ${endpoint?.url}") mainScope.launch { val url = endpoint?.url.orEmpty() val token = if (endpoint != null) { - endpoint.pubKeySet?.let { it.auth + ":" + it.pubKey } + endpoint.pubKeySet?.let { it.auth + ":" + it.pubKey } ?: "" } else { - // Restore FCM token when UnifiedPush is disabled. - messagingManager.fcmToken.ifBlank { getMessagingToken() } + getMessagingToken() } - messagingManager.upToken = token.orEmpty() + messagingManager.setUnifiedPushEnabled(endpoint != null) if (!serverManager.isRegistered()) { Timber.d("Not trying to update registration since we aren't authenticated.") @@ -97,6 +88,7 @@ class UnifiedPushManager @Inject constructor( deviceRegistration = DeviceRegistration( pushUrl = url, pushToken = token, + pushEncrypt = endpoint != null && token.isNotBlank() ), allowReregistration = false ) @@ -112,15 +104,16 @@ class UnifiedPushManager @Inject constructor( if (!retried) { // Only retry once to prevent infinite loop. retried = true when (reason) { - FailedReason.INTERNAL_ERROR -> UnifiedPushWorker.start(context) - FailedReason.NETWORK -> { + FailedReason.INTERNAL_ERROR -> UnifiedPushWorker.start(context) // Retry immediately + FailedReason.NETWORK -> { // Retry once network is connected val constraints = Constraints.Builder() .setRequiredNetworkType(NetworkType.CONNECTED) .build() UnifiedPushWorker.start(context, constraints) } - - else -> {} + else -> mainScope.launch { + prefsRepository.setUnifiedPushEnabled(false) + } } } else { Timber.d("Already retried registering") diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushReceiver.kt b/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushReceiver.kt index 268a978c751..517c8c38133 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushReceiver.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushReceiver.kt @@ -43,7 +43,6 @@ class UnifiedPushReceiver : MessagingReceiver() { override fun onUnregistered(context: Context, instance: String) { Timber.d("Unregistered: $instance") - unifiedPushManager.saveDistributor(UnifiedPushManager.DISTRIBUTOR_DISABLED) - unifiedPushManager.updateEndpoint(null) + unifiedPushManager.saveDistributor(null) } } \ No newline at end of file diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushWorker.kt b/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushWorker.kt index 0122eefe11b..8746da0de2c 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushWorker.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushWorker.kt @@ -30,19 +30,8 @@ class UnifiedPushWorker( } } - private val entryPoint = EntryPointAccessors - .fromApplication(applicationContext, UnifiedPushWorkerEntryPoint::class.java) - - private val unifiedPushManager = entryPoint.unifiedPushManager() - - @EntryPoint - @InstallIn(SingletonComponent::class) - interface UnifiedPushWorkerEntryPoint { - fun unifiedPushManager(): UnifiedPushManager - } - override suspend fun doWork(): Result = withContext(Dispatchers.IO) { - unifiedPushManager.register() + UnifiedPushManager.register(this@UnifiedPushWorker.applicationContext) Result.success() } } \ No newline at end of file diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/util/UnifiedPushExtensions.kt b/app/src/main/kotlin/io/homeassistant/companion/android/util/UnifiedPushExtensions.kt new file mode 100644 index 00000000000..179a50e1bcc --- /dev/null +++ b/app/src/main/kotlin/io/homeassistant/companion/android/util/UnifiedPushExtensions.kt @@ -0,0 +1,15 @@ +package io.homeassistant.companion.android.util + +import android.content.Context +import org.unifiedpush.android.connector.UnifiedPush + +fun UnifiedPush.tryRegisterCurrentOrDefaultDistributor(context: Context): Boolean { + var result = false + tryUseCurrentOrDefaultDistributor(context) { success -> + if (success) { + register(context) + } + result = success + } + return result +} \ No newline at end of file diff --git a/app/src/minimal/kotlin/io/homeassistant/companion/android/launch/LaunchPresenterImpl.kt b/app/src/minimal/kotlin/io/homeassistant/companion/android/launch/LaunchPresenterImpl.kt index dceccecd1c7..ad4930ede76 100644 --- a/app/src/minimal/kotlin/io/homeassistant/companion/android/launch/LaunchPresenterImpl.kt +++ b/app/src/minimal/kotlin/io/homeassistant/companion/android/launch/LaunchPresenterImpl.kt @@ -1,10 +1,13 @@ package io.homeassistant.companion.android.launch +import android.content.Context import io.homeassistant.companion.android.BuildConfig import io.homeassistant.companion.android.common.data.integration.DeviceRegistration import io.homeassistant.companion.android.common.data.servers.ServerManager +import io.homeassistant.companion.android.util.tryRegisterCurrentOrDefaultDistributor import javax.inject.Inject import kotlinx.coroutines.launch +import org.unifiedpush.android.connector.UnifiedPush import timber.log.Timber class LaunchPresenterImpl @Inject constructor( @@ -13,12 +16,14 @@ class LaunchPresenterImpl @Inject constructor( ) : LaunchPresenterBase(view, serverManager) { override fun resyncRegistration() { if (!serverManager.isRegistered()) return + UnifiedPush.tryRegisterCurrentOrDefaultDistributor(view as Context) serverManager.defaultServers.forEach { ioScope.launch { try { serverManager.integrationRepository(it.id).updateRegistration( DeviceRegistration( - "${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})" + appVersion = "${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})", + pushEncrypt = UnifiedPush.getAckDistributor(view as Context) != null ) ) serverManager.integrationRepository(it.id).getConfig() // Update cached data diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/DeviceRegistration.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/DeviceRegistration.kt index 879a33266e0..bf73e0927fe 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/DeviceRegistration.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/DeviceRegistration.kt @@ -5,5 +5,6 @@ data class DeviceRegistration( val deviceName: String? = null, var pushToken: String? = null, var pushUrl: String? = null, - var pushWebsocket: Boolean = true + var pushWebsocket: Boolean = true, + var pushEncrypt: Boolean = false ) diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/impl/IntegrationRepositoryImpl.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/impl/IntegrationRepositoryImpl.kt index f1511fb0dce..bb3cd57f94a 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/impl/IntegrationRepositoryImpl.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/impl/IntegrationRepositoryImpl.kt @@ -820,15 +820,19 @@ class IntegrationRepositoryImpl @AssistedInject constructor( private suspend fun createUpdateRegistrationRequest(deviceRegistration: DeviceRegistration): RegisterDeviceRequest { val oldDeviceRegistration = getRegistration() val pushToken = deviceRegistration.pushToken ?: oldDeviceRegistration.pushToken - val pushUrl = deviceRegistration.pushUrl?.ifBlank { PUSH_URL } ?: oldDeviceRegistration.pushUrl + var pushUrl = deviceRegistration.pushUrl ?: oldDeviceRegistration.pushUrl val appData = mutableMapOf("push_websocket_channel" to deviceRegistration.pushWebsocket) if (!pushToken.isNullOrBlank()) { - appData["push_url"] = pushUrl ?: PUSH_URL + pushUrl = pushUrl?.ifBlank { PUSH_URL } ?: PUSH_URL + appData["push_url"] = pushUrl appData["push_token"] = pushToken + // UnifiedPush notifications should be encrypted when possible. + appData["push_encrypt"] = deviceRegistration.pushEncrypt && pushUrl != PUSH_URL } else if (!pushUrl.isNullOrBlank()) { appData["push_url"] = pushUrl appData["push_token"] = "" + appData["push_encrypt"] = false } return RegisterDeviceRequest( diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepository.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepository.kt index 11928e742c3..d5a25244b54 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepository.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepository.kt @@ -95,9 +95,9 @@ interface PrefsRepository { suspend fun addImprovPermissionDisplayedCount() - suspend fun getUnifiedPushDistributor(): String? + suspend fun isUnifiedPushEnabled(): Boolean - suspend fun setUnifiedPushDistributor(distributor: String?) + suspend fun setUnifiedPushEnabled(enabled: Boolean) /** Clean up any app-level preferences that might reference servers */ suspend fun removeServer(serverId: Int) diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepositoryImpl.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepositoryImpl.kt index 3cccc4dfcdf..f8dca098559 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepositoryImpl.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/prefs/PrefsRepositoryImpl.kt @@ -38,7 +38,7 @@ class PrefsRepositoryImpl @Inject constructor( private const val PREF_AUTO_FAVORITES = "auto_favorites" private const val PREF_LOCATION_HISTORY_DISABLED = "location_history" private const val PREF_IMPROV_PERMISSION_DISPLAYED = "improv_permission_displayed" - private const val PREF_UNIFIEDPUSH_DISTRIBUTOR = "unifiedpush_distributor" + private const val PREF_UNIFIEDPUSH_ENABLED = "unifiedpush_enabled" } init { @@ -261,16 +261,11 @@ class PrefsRepositoryImpl @Inject constructor( localStorage.putInt(PREF_IMPROV_PERMISSION_DISPLAYED, getImprovPermissionDisplayedCount() + 1) } - override suspend fun getUnifiedPushDistributor(): String? = - localStorage.getString(PREF_UNIFIEDPUSH_DISTRIBUTOR) + override suspend fun isUnifiedPushEnabled(): Boolean = + localStorage.getBoolean(PREF_UNIFIEDPUSH_ENABLED) - override suspend fun setUnifiedPushDistributor(distributor: String?) { - if (distributor.isNullOrBlank() || distributor == "disabled") { - localStorage.remove(PREF_UNIFIEDPUSH_DISTRIBUTOR) - } else { - localStorage.putString(PREF_UNIFIEDPUSH_DISTRIBUTOR, distributor) - } - } + override suspend fun setUnifiedPushEnabled(enabled: Boolean) = + localStorage.putBoolean(PREF_UNIFIEDPUSH_ENABLED, enabled) override suspend fun removeServer(serverId: Int) { val controlsAuthEntities = getControlsAuthEntities().filter { it.split(".")[0].toIntOrNull() != serverId } From 7da91b29995b6ae8de22792ef975eb28a1e3fdbc Mon Sep 17 00:00:00 2001 From: lone-faerie Date: Thu, 1 May 2025 12:56:15 -0700 Subject: [PATCH 09/15] Show toast when UnifiedPush is first enabled --- .../companion/android/unifiedpush/UnifiedPushManager.kt | 8 +++++++- common/src/main/res/values/strings.xml | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushManager.kt b/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushManager.kt index e1b13434e0e..bc050767109 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushManager.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushManager.kt @@ -1,6 +1,7 @@ package io.homeassistant.companion.android.unifiedpush import android.content.Context +import android.widget.Toast import androidx.work.Constraints import androidx.work.NetworkType import dagger.hilt.android.qualifiers.ApplicationContext @@ -18,6 +19,7 @@ import org.unifiedpush.android.connector.FailedReason import org.unifiedpush.android.connector.UnifiedPush import org.unifiedpush.android.connector.data.PushEndpoint import timber.log.Timber +import io.homeassistant.companion.android.common.R as commonR class UnifiedPushManager @Inject constructor( @ApplicationContext val context: Context, @@ -43,7 +45,6 @@ class UnifiedPushManager @Inject constructor( private var distributors: List = emptyList() private var retried = false - fun saveDistributor(distributor: String?) { Timber.d("saveDistributor $distributor") if (distributor == null || distributor == DISTRIBUTOR_DISABLED) { @@ -73,8 +74,10 @@ class UnifiedPushManager @Inject constructor( val token = if (endpoint != null) { endpoint.pubKeySet?.let { it.auth + ":" + it.pubKey } ?: "" } else { + // Revert to FCM token when disabling UnifiedPush. getMessagingToken() } + val registered = messagingManager.isUnifiedPushEnabled() messagingManager.setUnifiedPushEnabled(endpoint != null) if (!serverManager.isRegistered()) { @@ -97,6 +100,9 @@ class UnifiedPushManager @Inject constructor( } } } + if (!registered) { + Toast.makeText(context, commonR.string.unifiedpush_enabled, Toast.LENGTH_SHORT).show() + } } } diff --git a/common/src/main/res/values/strings.xml b/common/src/main/res/values/strings.xml index 601c2b08baa..f526dcd8e91 100644 --- a/common/src/main/res/values/strings.xml +++ b/common/src/main/res/values/strings.xml @@ -977,6 +977,7 @@ Please set the text for text to speech to process Unable to register application UnifiedPush + UnifiedPush enabled Unknown address Update pinned shortcut data Update shortcut data From a4d332ff36b12ace3492cbdf5a3665d33f2eb5b1 Mon Sep 17 00:00:00 2001 From: lone-faerie Date: Thu, 1 May 2025 13:13:50 -0700 Subject: [PATCH 10/15] Code refactor --- .../companion/android/notifications/MessagingManager.kt | 4 +--- .../companion/android/settings/SettingsFragment.kt | 4 +--- .../companion/android/settings/SettingsPresenterImpl.kt | 2 +- .../companion/android/websocket/WebsocketManager.kt | 1 - .../data/integration/impl/IntegrationRepositoryImpl.kt | 7 +++---- 5 files changed, 6 insertions(+), 12 deletions(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/notifications/MessagingManager.kt b/app/src/main/kotlin/io/homeassistant/companion/android/notifications/MessagingManager.kt index 031570ab62e..5d6e90d3cf2 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/notifications/MessagingManager.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/notifications/MessagingManager.kt @@ -46,6 +46,7 @@ import com.fasterxml.jackson.module.kotlin.readValue import dagger.hilt.android.qualifiers.ApplicationContext import io.homeassistant.companion.android.R import io.homeassistant.companion.android.authenticator.Authenticator +import io.homeassistant.companion.android.common.R as commonR import io.homeassistant.companion.android.common.data.prefs.PrefsRepository import io.homeassistant.companion.android.common.data.servers.ServerManager import io.homeassistant.companion.android.common.notifications.DeviceCommandData @@ -97,15 +98,12 @@ import kotlinx.coroutines.async import kotlinx.coroutines.awaitAll import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking -import kotlinx.coroutines.sync.Mutex -import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.withContext import okhttp3.OkHttpClient import okhttp3.Request import okio.sink import org.json.JSONObject import timber.log.Timber -import io.homeassistant.companion.android.common.R as commonR class MessagingManager @Inject constructor( @ApplicationContext val context: Context, diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsFragment.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsFragment.kt index c6684acd636..d24c0f9e589 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsFragment.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsFragment.kt @@ -29,6 +29,7 @@ import com.google.android.material.snackbar.Snackbar import io.homeassistant.companion.android.BuildConfig import io.homeassistant.companion.android.R import io.homeassistant.companion.android.authenticator.Authenticator +import io.homeassistant.companion.android.common.R as commonR import io.homeassistant.companion.android.database.server.Server import io.homeassistant.companion.android.nfc.NfcSetupActivity import io.homeassistant.companion.android.onboarding.OnboardApp @@ -57,7 +58,6 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import timber.log.Timber -import io.homeassistant.companion.android.common.R as commonR class SettingsFragment( private val presenter: SettingsPresenter, @@ -286,8 +286,6 @@ class SettingsFragment( } } } - - findPreference("crash_reporting")?.let { it.isVisible = BuildConfig.FLAVOR == "full" } diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsPresenterImpl.kt b/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsPresenterImpl.kt index 795587bc542..964b62772b6 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsPresenterImpl.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/settings/SettingsPresenterImpl.kt @@ -11,6 +11,7 @@ import androidx.core.content.getSystemService import androidx.preference.PreferenceDataStore import io.homeassistant.companion.android.BuildConfig import io.homeassistant.companion.android.R +import io.homeassistant.companion.android.common.R as commonR import io.homeassistant.companion.android.common.data.integration.DeviceRegistration import io.homeassistant.companion.android.common.data.integration.impl.entities.RateLimitResponse import io.homeassistant.companion.android.common.data.prefs.PrefsRepository @@ -44,7 +45,6 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking import kotlinx.coroutines.withContext import timber.log.Timber -import io.homeassistant.companion.android.common.R as commonR class SettingsPresenterImpl @Inject constructor( private val serverManager: ServerManager, diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/websocket/WebsocketManager.kt b/app/src/main/kotlin/io/homeassistant/companion/android/websocket/WebsocketManager.kt index 18604d55846..7b058b67c41 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/websocket/WebsocketManager.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/websocket/WebsocketManager.kt @@ -178,7 +178,6 @@ class WebsocketManager( Timber.e(e, "Unable to confirm received notification") } } - messagingManager.handleMessage(it, SOURCE, serverId) } } diff --git a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/impl/IntegrationRepositoryImpl.kt b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/impl/IntegrationRepositoryImpl.kt index bb3cd57f94a..d60bb0bb29d 100644 --- a/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/impl/IntegrationRepositoryImpl.kt +++ b/common/src/main/kotlin/io/homeassistant/companion/android/common/data/integration/impl/IntegrationRepositoryImpl.kt @@ -820,15 +820,14 @@ class IntegrationRepositoryImpl @AssistedInject constructor( private suspend fun createUpdateRegistrationRequest(deviceRegistration: DeviceRegistration): RegisterDeviceRequest { val oldDeviceRegistration = getRegistration() val pushToken = deviceRegistration.pushToken ?: oldDeviceRegistration.pushToken - var pushUrl = deviceRegistration.pushUrl ?: oldDeviceRegistration.pushUrl + val pushUrl = deviceRegistration.pushUrl ?: oldDeviceRegistration.pushUrl val appData = mutableMapOf("push_websocket_channel" to deviceRegistration.pushWebsocket) if (!pushToken.isNullOrBlank()) { - pushUrl = pushUrl?.ifBlank { PUSH_URL } ?: PUSH_URL - appData["push_url"] = pushUrl + appData["push_url"] = pushUrl?.ifBlank { PUSH_URL } ?: PUSH_URL appData["push_token"] = pushToken // UnifiedPush notifications should be encrypted when possible. - appData["push_encrypt"] = deviceRegistration.pushEncrypt && pushUrl != PUSH_URL + appData["push_encrypt"] = deviceRegistration.pushEncrypt && (pushUrl.isNullOrBlank() || pushUrl == PUSH_URL) } else if (!pushUrl.isNullOrBlank()) { appData["push_url"] = pushUrl appData["push_token"] = "" From e564177c8864c6df6ce21b7e3ae2004f4be778b0 Mon Sep 17 00:00:00 2001 From: lone-faerie Date: Thu, 1 May 2025 13:32:32 -0700 Subject: [PATCH 11/15] Fix wear build --- .../io/homeassistant/companion/android/home/HomePresenterImpl.kt | 1 + .../companion/android/phone/PhoneSettingsListener.kt | 1 + 2 files changed, 2 insertions(+) diff --git a/wear/src/main/kotlin/io/homeassistant/companion/android/home/HomePresenterImpl.kt b/wear/src/main/kotlin/io/homeassistant/companion/android/home/HomePresenterImpl.kt index 50477391194..e11b21f9640 100644 --- a/wear/src/main/kotlin/io/homeassistant/companion/android/home/HomePresenterImpl.kt +++ b/wear/src/main/kotlin/io/homeassistant/companion/android/home/HomePresenterImpl.kt @@ -187,6 +187,7 @@ class HomePresenterImpl @Inject constructor( "${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})", null, getMessagingToken(), + null, false ) ) diff --git a/wear/src/main/kotlin/io/homeassistant/companion/android/phone/PhoneSettingsListener.kt b/wear/src/main/kotlin/io/homeassistant/companion/android/phone/PhoneSettingsListener.kt index 8ee3e365f78..6f584ce19c0 100755 --- a/wear/src/main/kotlin/io/homeassistant/companion/android/phone/PhoneSettingsListener.kt +++ b/wear/src/main/kotlin/io/homeassistant/companion/android/phone/PhoneSettingsListener.kt @@ -181,6 +181,7 @@ class PhoneSettingsListener : WearableListenerService(), DataClient.OnDataChange "${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})", deviceName, getMessagingToken(), + null, false ) ) From 8ed8cf2a6121210877172247483bbd129e9aa531 Mon Sep 17 00:00:00 2001 From: lone-faerie Date: Thu, 1 May 2025 13:46:21 -0700 Subject: [PATCH 12/15] Lint code --- .../companion/android/launch/LaunchPresenterImpl.kt | 3 ++- .../companion/android/launch/LaunchActivity.kt | 5 +++-- .../companion/android/unifiedpush/UnifiedPushManager.kt | 6 +++--- .../companion/android/unifiedpush/UnifiedPushReceiver.kt | 2 +- .../companion/android/unifiedpush/UnifiedPushWorker.kt | 6 +----- .../companion/android/util/UnifiedPushExtensions.kt | 2 +- common/build.gradle.kts | 2 +- 7 files changed, 12 insertions(+), 14 deletions(-) diff --git a/app/src/full/kotlin/io/homeassistant/companion/android/launch/LaunchPresenterImpl.kt b/app/src/full/kotlin/io/homeassistant/companion/android/launch/LaunchPresenterImpl.kt index 4270eaed214..ff6e9a200b3 100644 --- a/app/src/full/kotlin/io/homeassistant/companion/android/launch/LaunchPresenterImpl.kt +++ b/app/src/full/kotlin/io/homeassistant/companion/android/launch/LaunchPresenterImpl.kt @@ -34,7 +34,8 @@ class LaunchPresenterImpl @Inject constructor( appVersion = "${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})", deviceName = null, pushToken = messagingToken, - pushUrl = messagingToken?.let { "" }, // A blank url indicates to use the build-time push url. + // A blank url indicates to use the build-time push url. + pushUrl = messagingToken?.let { "" }, pushEncrypt = messagingToken == null && UnifiedPush.getAckDistributor(view as Context) != null ) ) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/launch/LaunchActivity.kt b/app/src/main/kotlin/io/homeassistant/companion/android/launch/LaunchActivity.kt index a917d7e414d..4e72e808975 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/launch/LaunchActivity.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/launch/LaunchActivity.kt @@ -209,8 +209,9 @@ class LaunchActivity : AppCompatActivity(), LaunchView { DeviceRegistration( appVersion = "${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})", deviceName = deviceName, - pushToken = messagingToken, - pushUrl = messagingToken?.let { "" }, // A blank url indicates to use the build-time push url. + pushToken = messagingToken, + // A blank url indicates to use the build-time push url. + pushUrl = messagingToken?.let { "" }, pushEncrypt = messagingToken == null && !UnifiedPush.getAckDistributor(this.applicationContext).isNullOrBlank() ) ) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushManager.kt b/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushManager.kt index bc050767109..d958a040bcc 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushManager.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushManager.kt @@ -5,6 +5,7 @@ import android.widget.Toast import androidx.work.Constraints import androidx.work.NetworkType import dagger.hilt.android.qualifiers.ApplicationContext +import io.homeassistant.companion.android.common.R as commonR import io.homeassistant.companion.android.common.data.integration.DeviceRegistration import io.homeassistant.companion.android.common.data.prefs.PrefsRepository import io.homeassistant.companion.android.common.data.servers.ServerManager @@ -19,7 +20,6 @@ import org.unifiedpush.android.connector.FailedReason import org.unifiedpush.android.connector.UnifiedPush import org.unifiedpush.android.connector.data.PushEndpoint import timber.log.Timber -import io.homeassistant.companion.android.common.R as commonR class UnifiedPushManager @Inject constructor( @ApplicationContext val context: Context, @@ -72,7 +72,7 @@ class UnifiedPushManager @Inject constructor( mainScope.launch { val url = endpoint?.url.orEmpty() val token = if (endpoint != null) { - endpoint.pubKeySet?.let { it.auth + ":" + it.pubKey } ?: "" + endpoint.pubKeySet?.let { it.auth + ":" + it.pubKey } ?: "" } else { // Revert to FCM token when disabling UnifiedPush. getMessagingToken() @@ -125,4 +125,4 @@ class UnifiedPushManager @Inject constructor( Timber.d("Already retried registering") } } -} \ No newline at end of file +} diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushReceiver.kt b/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushReceiver.kt index 517c8c38133..7def24bd1f6 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushReceiver.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushReceiver.kt @@ -45,4 +45,4 @@ class UnifiedPushReceiver : MessagingReceiver() { Timber.d("Unregistered: $instance") unifiedPushManager.saveDistributor(null) } -} \ No newline at end of file +} diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushWorker.kt b/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushWorker.kt index 8746da0de2c..ba25edb5194 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushWorker.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushWorker.kt @@ -7,10 +7,6 @@ import androidx.work.ExistingWorkPolicy import androidx.work.OneTimeWorkRequestBuilder import androidx.work.WorkManager import androidx.work.WorkerParameters -import dagger.hilt.EntryPoint -import dagger.hilt.InstallIn -import dagger.hilt.android.EntryPointAccessors -import dagger.hilt.components.SingletonComponent import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext @@ -34,4 +30,4 @@ class UnifiedPushWorker( UnifiedPushManager.register(this@UnifiedPushWorker.applicationContext) Result.success() } -} \ No newline at end of file +} diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/util/UnifiedPushExtensions.kt b/app/src/main/kotlin/io/homeassistant/companion/android/util/UnifiedPushExtensions.kt index 179a50e1bcc..9fb19cd7502 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/util/UnifiedPushExtensions.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/util/UnifiedPushExtensions.kt @@ -12,4 +12,4 @@ fun UnifiedPush.tryRegisterCurrentOrDefaultDistributor(context: Context): Boolea result = success } return result -} \ No newline at end of file +} diff --git a/common/build.gradle.kts b/common/build.gradle.kts index 70de991b600..4111cac3b7e 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -50,7 +50,7 @@ dependencies { implementation(libs.jackson.module.kotlin) implementation(libs.android.beacon.library) - //implementation(libs.unifiedpush.connector) + // implementation(libs.unifiedpush.connector) implementation(libs.iconics.core) implementation(libs.community.material.typeface) From 9abd069b51ddada5fcae6d3e3d80ca9b68d3aeab Mon Sep 17 00:00:00 2001 From: lone-faerie Date: Thu, 1 May 2025 16:29:29 -0700 Subject: [PATCH 13/15] Update lint baseline --- app/lint-baseline.xml | 51 ++++++++----- automotive/lint-baseline.xml | 141 +++++++++++++++++++---------------- common/lint-baseline.xml | 26 +++---- wear/lint-baseline.xml | 30 ++++---- 4 files changed, 135 insertions(+), 113 deletions(-) diff --git a/app/lint-baseline.xml b/app/lint-baseline.xml index 71a441ea626..733d7ea625c 100644 --- a/app/lint-baseline.xml +++ b/app/lint-baseline.xml @@ -360,7 +360,7 @@ errorLine2=" ~~~~~~~~~~~~~~"> @@ -624,6 +624,17 @@ column="10"/> + + + + @@ -719,7 +730,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1227,7 +1238,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1238,7 +1249,7 @@ errorLine2=" ^"> @@ -1249,7 +1260,7 @@ errorLine2=" ^"> @@ -1260,7 +1271,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1271,7 +1282,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1282,7 +1293,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1293,7 +1304,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1304,7 +1315,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1315,7 +1326,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1326,7 +1337,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1337,7 +1348,7 @@ errorLine2=" ^"> @@ -1348,7 +1359,7 @@ errorLine2=" ^"> @@ -1403,7 +1414,7 @@ errorLine2=" ~~~~~~~~~~~~~~~"> @@ -1414,7 +1425,7 @@ errorLine2=" ~~~~~~~~~~~~~~~"> @@ -1425,7 +1436,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1436,7 +1447,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1447,7 +1458,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> diff --git a/automotive/lint-baseline.xml b/automotive/lint-baseline.xml index 711cf107af2..a7d8a42379e 100644 --- a/automotive/lint-baseline.xml +++ b/automotive/lint-baseline.xml @@ -283,7 +283,7 @@ errorLine2=" ~~~~~~~~~~~~~~"> @@ -1313,7 +1313,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1324,7 +1324,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1335,7 +1335,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1346,7 +1346,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1357,7 +1357,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1368,7 +1368,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1379,7 +1379,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1390,7 +1390,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1401,7 +1401,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1412,7 +1412,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1423,7 +1423,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1434,7 +1434,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1445,7 +1445,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1456,7 +1456,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1467,7 +1467,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1478,7 +1478,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1489,7 +1489,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1500,7 +1500,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1511,7 +1511,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1522,7 +1522,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1533,7 +1533,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1544,7 +1544,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1555,7 +1555,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1566,7 +1566,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1577,7 +1577,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1588,7 +1588,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1599,7 +1599,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1610,7 +1610,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1742,7 +1742,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1753,7 +1753,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1764,7 +1764,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1775,7 +1775,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1786,7 +1786,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1797,7 +1797,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1808,7 +1808,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1819,7 +1819,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1830,7 +1830,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1841,7 +1841,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1852,10 +1852,21 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> + + + + @@ -1874,7 +1885,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1885,7 +1896,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1896,7 +1907,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1907,7 +1918,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -1918,7 +1929,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -2633,7 +2644,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -2644,7 +2655,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -3220,7 +3231,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -3231,7 +3242,7 @@ errorLine2=" ^"> @@ -3242,7 +3253,7 @@ errorLine2=" ^"> @@ -3253,7 +3264,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -3264,7 +3275,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -3275,7 +3286,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -3286,7 +3297,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -3297,7 +3308,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -3308,7 +3319,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -3319,7 +3330,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -3330,7 +3341,7 @@ errorLine2=" ^"> @@ -3341,7 +3352,7 @@ errorLine2=" ^"> @@ -3396,7 +3407,7 @@ errorLine2=" ~~~~~~~~~~~~~~~"> @@ -3407,7 +3418,7 @@ errorLine2=" ~~~~~~~~~~~~~~~"> @@ -3418,7 +3429,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -3429,7 +3440,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -3440,7 +3451,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> diff --git a/common/lint-baseline.xml b/common/lint-baseline.xml index bb11330100a..36d9cb407ba 100644 --- a/common/lint-baseline.xml +++ b/common/lint-baseline.xml @@ -1,5 +1,5 @@ - + @@ -30,7 +30,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -41,7 +41,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -63,7 +63,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -74,7 +74,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -85,7 +85,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -162,7 +162,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -173,7 +173,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -184,7 +184,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -195,7 +195,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -250,7 +250,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -261,7 +261,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> diff --git a/wear/lint-baseline.xml b/wear/lint-baseline.xml index 1c110c43de7..49bd6d22f8c 100644 --- a/wear/lint-baseline.xml +++ b/wear/lint-baseline.xml @@ -1,5 +1,5 @@ - + @@ -151,7 +151,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -162,7 +162,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -596,7 +596,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> @@ -607,7 +607,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> @@ -618,7 +618,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> @@ -629,7 +629,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~"> @@ -662,7 +662,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -673,7 +673,7 @@ errorLine2=" ~~~~~~~~~~~~~~"> @@ -684,7 +684,7 @@ errorLine2=" ~~~~~~~~~~~~~~"> @@ -695,7 +695,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -706,7 +706,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -717,7 +717,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> @@ -728,7 +728,7 @@ errorLine2=" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"> From 54e93db8825145287e3fdaa1e211625ee34aaf9a Mon Sep 17 00:00:00 2001 From: lone-faerie Date: Thu, 1 May 2025 19:07:40 -0700 Subject: [PATCH 14/15] Don't register default distributor on reregistration --- .../android/launch/LaunchPresenterImpl.kt | 4 ++-- .../android/unifiedpush/UnifiedPushManager.kt | 18 +++++++++++------- .../android/util/UnifiedPushExtensions.kt | 8 ++++++++ .../android/launch/LaunchPresenterImpl.kt | 6 +++--- common/build.gradle.kts | 2 -- 5 files changed, 24 insertions(+), 14 deletions(-) diff --git a/app/src/full/kotlin/io/homeassistant/companion/android/launch/LaunchPresenterImpl.kt b/app/src/full/kotlin/io/homeassistant/companion/android/launch/LaunchPresenterImpl.kt index ff6e9a200b3..e06f0933dff 100644 --- a/app/src/full/kotlin/io/homeassistant/companion/android/launch/LaunchPresenterImpl.kt +++ b/app/src/full/kotlin/io/homeassistant/companion/android/launch/LaunchPresenterImpl.kt @@ -7,7 +7,7 @@ import io.homeassistant.companion.android.BuildConfig import io.homeassistant.companion.android.common.data.integration.DeviceRegistration import io.homeassistant.companion.android.common.data.servers.ServerManager import io.homeassistant.companion.android.onboarding.getMessagingToken -import io.homeassistant.companion.android.util.tryRegisterCurrentOrDefaultDistributor +import io.homeassistant.companion.android.util.tryRegisterCurrentDistributor import javax.inject.Inject import kotlinx.coroutines.launch import org.unifiedpush.android.connector.UnifiedPush @@ -24,7 +24,7 @@ class LaunchPresenterImpl @Inject constructor( ioScope.launch { try { // Don't get a new push token if using UnifiedPush. - val messagingToken = if (!UnifiedPush.tryRegisterCurrentOrDefaultDistributor(view as Context)) { + val messagingToken = if (!UnifiedPush.tryRegisterCurrentDistributor(view as Context)) { getMessagingToken() } else { null diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushManager.kt b/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushManager.kt index d958a040bcc..80e40c10aab 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushManager.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/unifiedpush/UnifiedPushManager.kt @@ -7,7 +7,6 @@ import androidx.work.NetworkType import dagger.hilt.android.qualifiers.ApplicationContext import io.homeassistant.companion.android.common.R as commonR import io.homeassistant.companion.android.common.data.integration.DeviceRegistration -import io.homeassistant.companion.android.common.data.prefs.PrefsRepository import io.homeassistant.companion.android.common.data.servers.ServerManager import io.homeassistant.companion.android.notifications.MessagingManager import io.homeassistant.companion.android.onboarding.getMessagingToken @@ -25,7 +24,6 @@ class UnifiedPushManager @Inject constructor( @ApplicationContext val context: Context, private val serverManager: ServerManager, private val messagingManager: MessagingManager, - private val prefsRepository: PrefsRepository ) { companion object { const val DISTRIBUTOR_DISABLED = "disabled" @@ -46,7 +44,7 @@ class UnifiedPushManager @Inject constructor( private var retried = false fun saveDistributor(distributor: String?) { - Timber.d("saveDistributor $distributor") + Timber.d("saveDistributor(): $distributor") if (distributor == null || distributor == DISTRIBUTOR_DISABLED) { unregister(context) updateEndpoint(null) @@ -68,10 +66,11 @@ class UnifiedPushManager @Inject constructor( UnifiedPush.getAckDistributor(context) fun updateEndpoint(endpoint: PushEndpoint?) { - Timber.d("updateEndpoint ${endpoint?.url}") + Timber.d("updateEndpoint(): ${endpoint?.url}") mainScope.launch { val url = endpoint?.url.orEmpty() val token = if (endpoint != null) { + // Use public key as push token to allow for encryption. endpoint.pubKeySet?.let { it.auth + ":" + it.pubKey } ?: "" } else { // Revert to FCM token when disabling UnifiedPush. @@ -84,6 +83,7 @@ class UnifiedPushManager @Inject constructor( Timber.d("Not trying to update registration since we aren't authenticated.") return@launch } + val encrypt = endpoint != null && token.isNotBlank() serverManager.defaultServers.forEach { launch { try { @@ -91,7 +91,7 @@ class UnifiedPushManager @Inject constructor( deviceRegistration = DeviceRegistration( pushUrl = url, pushToken = token, - pushEncrypt = endpoint != null && token.isNotBlank() + pushEncrypt = encrypt ), allowReregistration = false ) @@ -110,15 +110,19 @@ class UnifiedPushManager @Inject constructor( if (!retried) { // Only retry once to prevent infinite loop. retried = true when (reason) { - FailedReason.INTERNAL_ERROR -> UnifiedPushWorker.start(context) // Retry immediately + FailedReason.INTERNAL_ERROR -> { + Timber.d("Retrying registration.") + UnifiedPushWorker.start(context) // Retry immediately + } FailedReason.NETWORK -> { // Retry once network is connected + Timber.d("Retrying registration once network is connected.") val constraints = Constraints.Builder() .setRequiredNetworkType(NetworkType.CONNECTED) .build() UnifiedPushWorker.start(context, constraints) } else -> mainScope.launch { - prefsRepository.setUnifiedPushEnabled(false) + messagingManager.setUnifiedPushEnabled(false) } } } else { diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/util/UnifiedPushExtensions.kt b/app/src/main/kotlin/io/homeassistant/companion/android/util/UnifiedPushExtensions.kt index 9fb19cd7502..0ca3299c62b 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/util/UnifiedPushExtensions.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/util/UnifiedPushExtensions.kt @@ -13,3 +13,11 @@ fun UnifiedPush.tryRegisterCurrentOrDefaultDistributor(context: Context): Boolea } return result } + +fun UnifiedPush.tryRegisterCurrentDistributor(context: Context): Boolean { + val hasDistributor = !getAckDistributor(context).isNullOrBlank() + if (hasDistributor) { + register(context) + } + return hasDistributor +} \ No newline at end of file diff --git a/app/src/minimal/kotlin/io/homeassistant/companion/android/launch/LaunchPresenterImpl.kt b/app/src/minimal/kotlin/io/homeassistant/companion/android/launch/LaunchPresenterImpl.kt index ad4930ede76..f13c06e0538 100644 --- a/app/src/minimal/kotlin/io/homeassistant/companion/android/launch/LaunchPresenterImpl.kt +++ b/app/src/minimal/kotlin/io/homeassistant/companion/android/launch/LaunchPresenterImpl.kt @@ -4,7 +4,7 @@ import android.content.Context import io.homeassistant.companion.android.BuildConfig import io.homeassistant.companion.android.common.data.integration.DeviceRegistration import io.homeassistant.companion.android.common.data.servers.ServerManager -import io.homeassistant.companion.android.util.tryRegisterCurrentOrDefaultDistributor +import io.homeassistant.companion.android.util.tryRegisterCurrentDistributor import javax.inject.Inject import kotlinx.coroutines.launch import org.unifiedpush.android.connector.UnifiedPush @@ -16,14 +16,14 @@ class LaunchPresenterImpl @Inject constructor( ) : LaunchPresenterBase(view, serverManager) { override fun resyncRegistration() { if (!serverManager.isRegistered()) return - UnifiedPush.tryRegisterCurrentOrDefaultDistributor(view as Context) + val hasDistributor = UnifiedPush.tryRegisterCurrentDistributor(view as Context) serverManager.defaultServers.forEach { ioScope.launch { try { serverManager.integrationRepository(it.id).updateRegistration( DeviceRegistration( appVersion = "${BuildConfig.VERSION_NAME} (${BuildConfig.VERSION_CODE})", - pushEncrypt = UnifiedPush.getAckDistributor(view as Context) != null + pushEncrypt = hasDistributor ) ) serverManager.integrationRepository(it.id).getConfig() // Update cached data diff --git a/common/build.gradle.kts b/common/build.gradle.kts index 4111cac3b7e..59503743498 100644 --- a/common/build.gradle.kts +++ b/common/build.gradle.kts @@ -50,8 +50,6 @@ dependencies { implementation(libs.jackson.module.kotlin) implementation(libs.android.beacon.library) - // implementation(libs.unifiedpush.connector) - implementation(libs.iconics.core) implementation(libs.community.material.typeface) From 5706f38204c3d1229091867b7fbb62b549e5e316 Mon Sep 17 00:00:00 2001 From: lone-faerie Date: Thu, 1 May 2025 22:26:37 -0700 Subject: [PATCH 15/15] Fix linting --- .../companion/android/util/UnifiedPushExtensions.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/kotlin/io/homeassistant/companion/android/util/UnifiedPushExtensions.kt b/app/src/main/kotlin/io/homeassistant/companion/android/util/UnifiedPushExtensions.kt index 0ca3299c62b..29cc1fe98fd 100644 --- a/app/src/main/kotlin/io/homeassistant/companion/android/util/UnifiedPushExtensions.kt +++ b/app/src/main/kotlin/io/homeassistant/companion/android/util/UnifiedPushExtensions.kt @@ -20,4 +20,4 @@ fun UnifiedPush.tryRegisterCurrentDistributor(context: Context): Boolean { register(context) } return hasDistributor -} \ No newline at end of file +}