From 30f11f583b640fd676162cad09b6178bb7b7a8b1 Mon Sep 17 00:00:00 2001 From: ziyiw Date: Fri, 1 Aug 2025 18:41:35 +0000 Subject: [PATCH] Add HelloUwb ranging demoapp. Change-Id: Ib49abaaaf50a5bc30f27b90bd4302b8eb3ee65f3 --- app/build.gradle.kts | 3 +- .../com/example/platform/app/ApiSurface.kt | 7 + .../com/example/platform/app/SampleDemo.kt | 9 + build.gradle.kts | 1 + gradle/libs.versions.toml | 7 + .../UwbRanging/.idea/workspace.xml | 249 ++++++++++++++++++ samples/connectivity/UwbRanging/README.md | 74 ++++++ .../connectivity/UwbRanging/build.gradle.kts | 104 ++++++++ .../UwbRanging/src/main/AndroidManifest.xml | 39 +++ .../com/google/uwb/hellouwb/AppContainer.kt | 29 ++ .../uwb/hellouwb/HelloUwbApplication.kt | 31 +++ .../uwb/hellouwb/data/AppContainerImpl.kt | 62 +++++ .../google/uwb/hellouwb/data/SettingsStore.kt | 33 +++ .../uwb/hellouwb/data/SettingsStoreImpl.kt | 98 +++++++ .../hellouwb/data/UwbRangingControlSource.kt | 43 +++ .../data/UwbRangingControlSourceImpl.kt | 124 +++++++++ .../com/google/uwb/hellouwb/ui/HelloUwbApp.kt | 43 +++ .../java/com/google/uwb/hellouwb/ui/Screen.kt | 33 +++ .../uwb/hellouwb/ui/UwbRangingActivity.kt | 120 +++++++++ .../uwb/hellouwb/ui/control/ControlRoute.kt | 31 +++ .../uwb/hellouwb/ui/control/ControlScreen.kt | 90 +++++++ .../hellouwb/ui/control/ControlViewModel.kt | 116 ++++++++ .../google/uwb/hellouwb/ui/home/HomeRoute.kt | 29 ++ .../google/uwb/hellouwb/ui/home/HomeScreen.kt | 233 ++++++++++++++++ .../uwb/hellouwb/ui/home/HomeViewModel.kt | 111 ++++++++ .../google/uwb/hellouwb/ui/nav/AppNavBar.kt | 84 ++++++ .../google/uwb/hellouwb/ui/nav/AppNavGraph.kt | 86 ++++++ .../uwb/hellouwb/ui/nav/AppNavigation.kt | 48 ++++ .../hellouwb/ui/ranging/RangingControlIcon.kt | 86 ++++++ .../hellouwb/ui/ranging/RangingViewModel.kt | 56 ++++ .../google/uwb/hellouwb/ui/send/SendRoute.kt | 34 +++ .../google/uwb/hellouwb/ui/send/SendScreen.kt | 145 ++++++++++ .../uwb/hellouwb/ui/send/SendViewModel.kt | 151 +++++++++++ .../uwb/hellouwb/ui/settings/SettingsRoute.kt | 34 +++ .../hellouwb/ui/settings/SettingsScreen.kt | 171 ++++++++++++ .../hellouwb/ui/settings/SettingsViewModel.kt | 70 +++++ .../com/google/uwb/hellouwb/ui/theme/Color.kt | 29 ++ .../com/google/uwb/hellouwb/ui/theme/Theme.kt | 77 ++++++ .../com/google/uwb/hellouwb/ui/theme/Type.kt | 54 ++++ .../google/uwb/uwbranging/EndpointEvents.kt | 48 ++++ .../uwb/uwbranging/UwbConnectionManager.kt | 38 +++ .../com/google/uwb/uwbranging/UwbEndpoint.kt | 37 +++ .../google/uwb/uwbranging/UwbSessionScope.kt | 28 ++ .../uwb/uwbranging/impl/NearbyConnections.kt | 168 ++++++++++++ .../uwb/uwbranging/impl/NearbyConnector.kt | 123 +++++++++ .../impl/NearbyControleeConnector.kt | 108 ++++++++ .../impl/NearbyControllerConnector.kt | 120 +++++++++ .../uwb/uwbranging/impl/OobConnector.kt | 27 ++ .../impl/UwbConnectionManagerImpl.kt | 51 ++++ .../google/uwb/uwbranging/impl/UwbOobEvent.kt | 96 +++++++ .../uwbranging/impl/UwbSessionScopeImpl.kt | 106 ++++++++ .../src/main/proto/appsetttings.proto | 39 +++ .../UwbRanging/src/main/proto/uwbinfo.proto | 69 +++++ .../drawable-v24/ic_launcher_foreground.xml | 42 +++ .../res/drawable/ic_launcher_background.xml | 182 +++++++++++++ .../src/main/res/drawable/lock_close24px.xml | 23 ++ .../src/main/res/drawable/lock_open24px.xml | 23 ++ .../UwbRanging/src/main/res/drawable/uwb.png | Bin 0 -> 7784 bytes .../res/mipmap-anydpi-v26/ic_launcher.xml | 17 ++ .../mipmap-anydpi-v26/ic_launcher_round.xml | 17 ++ .../src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 0 -> 1404 bytes .../res/mipmap-hdpi/ic_launcher_round.webp | Bin 0 -> 2898 bytes .../src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 0 -> 982 bytes .../res/mipmap-mdpi/ic_launcher_round.webp | Bin 0 -> 1772 bytes .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin 0 -> 1900 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 0 -> 3918 bytes .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 0 -> 2884 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 0 -> 5914 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 0 -> 3844 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 0 -> 7778 bytes .../UwbRanging/src/main/res/values/colors.xml | 22 ++ .../src/main/res/values/strings.xml | 15 ++ .../UwbRanging/src/main/res/values/themes.xml | 16 ++ .../src/main/res/xml/backup_rules.xml | 26 ++ .../main/res/xml/data_extraction_rules.xml | 32 +++ settings.gradle.kts | 1 + 76 files changed, 4317 insertions(+), 1 deletion(-) create mode 100644 samples/connectivity/UwbRanging/.idea/workspace.xml create mode 100644 samples/connectivity/UwbRanging/README.md create mode 100644 samples/connectivity/UwbRanging/build.gradle.kts create mode 100644 samples/connectivity/UwbRanging/src/main/AndroidManifest.xml create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/hellouwb/AppContainer.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/hellouwb/HelloUwbApplication.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/hellouwb/data/AppContainerImpl.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/hellouwb/data/SettingsStore.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/hellouwb/data/SettingsStoreImpl.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/hellouwb/data/UwbRangingControlSource.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/hellouwb/data/UwbRangingControlSourceImpl.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/hellouwb/ui/HelloUwbApp.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/hellouwb/ui/Screen.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/hellouwb/ui/UwbRangingActivity.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/hellouwb/ui/control/ControlRoute.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/hellouwb/ui/control/ControlScreen.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/hellouwb/ui/control/ControlViewModel.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/hellouwb/ui/home/HomeRoute.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/hellouwb/ui/home/HomeScreen.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/hellouwb/ui/home/HomeViewModel.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/hellouwb/ui/nav/AppNavBar.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/hellouwb/ui/nav/AppNavGraph.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/hellouwb/ui/nav/AppNavigation.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/hellouwb/ui/ranging/RangingControlIcon.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/hellouwb/ui/ranging/RangingViewModel.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/hellouwb/ui/send/SendRoute.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/hellouwb/ui/send/SendScreen.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/hellouwb/ui/send/SendViewModel.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/hellouwb/ui/settings/SettingsRoute.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/hellouwb/ui/settings/SettingsScreen.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/hellouwb/ui/settings/SettingsViewModel.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/hellouwb/ui/theme/Color.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/hellouwb/ui/theme/Theme.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/hellouwb/ui/theme/Type.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/uwbranging/EndpointEvents.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/uwbranging/UwbConnectionManager.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/uwbranging/UwbEndpoint.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/uwbranging/UwbSessionScope.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/uwbranging/impl/NearbyConnections.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/uwbranging/impl/NearbyConnector.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/uwbranging/impl/NearbyControleeConnector.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/uwbranging/impl/NearbyControllerConnector.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/uwbranging/impl/OobConnector.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/uwbranging/impl/UwbConnectionManagerImpl.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/uwbranging/impl/UwbOobEvent.kt create mode 100644 samples/connectivity/UwbRanging/src/main/java/com/google/uwb/uwbranging/impl/UwbSessionScopeImpl.kt create mode 100644 samples/connectivity/UwbRanging/src/main/proto/appsetttings.proto create mode 100644 samples/connectivity/UwbRanging/src/main/proto/uwbinfo.proto create mode 100644 samples/connectivity/UwbRanging/src/main/res/drawable-v24/ic_launcher_foreground.xml create mode 100644 samples/connectivity/UwbRanging/src/main/res/drawable/ic_launcher_background.xml create mode 100644 samples/connectivity/UwbRanging/src/main/res/drawable/lock_close24px.xml create mode 100644 samples/connectivity/UwbRanging/src/main/res/drawable/lock_open24px.xml create mode 100644 samples/connectivity/UwbRanging/src/main/res/drawable/uwb.png create mode 100644 samples/connectivity/UwbRanging/src/main/res/mipmap-anydpi-v26/ic_launcher.xml create mode 100644 samples/connectivity/UwbRanging/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml create mode 100644 samples/connectivity/UwbRanging/src/main/res/mipmap-hdpi/ic_launcher.webp create mode 100644 samples/connectivity/UwbRanging/src/main/res/mipmap-hdpi/ic_launcher_round.webp create mode 100644 samples/connectivity/UwbRanging/src/main/res/mipmap-mdpi/ic_launcher.webp create mode 100644 samples/connectivity/UwbRanging/src/main/res/mipmap-mdpi/ic_launcher_round.webp create mode 100644 samples/connectivity/UwbRanging/src/main/res/mipmap-xhdpi/ic_launcher.webp create mode 100644 samples/connectivity/UwbRanging/src/main/res/mipmap-xhdpi/ic_launcher_round.webp create mode 100644 samples/connectivity/UwbRanging/src/main/res/mipmap-xxhdpi/ic_launcher.webp create mode 100644 samples/connectivity/UwbRanging/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp create mode 100644 samples/connectivity/UwbRanging/src/main/res/mipmap-xxxhdpi/ic_launcher.webp create mode 100644 samples/connectivity/UwbRanging/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp create mode 100644 samples/connectivity/UwbRanging/src/main/res/values/colors.xml create mode 100644 samples/connectivity/UwbRanging/src/main/res/values/strings.xml create mode 100644 samples/connectivity/UwbRanging/src/main/res/values/themes.xml create mode 100644 samples/connectivity/UwbRanging/src/main/res/xml/backup_rules.xml create mode 100644 samples/connectivity/UwbRanging/src/main/res/xml/data_extraction_rules.xml diff --git a/app/build.gradle.kts b/app/build.gradle.kts index aaf59211..0446599f 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -27,7 +27,7 @@ android { defaultConfig { applicationId = "com.example.platform" - minSdk = 21 + minSdk = 23 targetSdk = 36 versionCode = 1 versionName = "1.0" @@ -80,6 +80,7 @@ dependencies { implementation(project(":samples:connectivity:bluetooth:companion")) implementation(project(":samples:connectivity:callnotification")) implementation(project(":samples:connectivity:telecom")) + implementation(project(":samples:connectivity:UwbRanging")) implementation(project(":samples:graphics:pdf")) implementation(project(":samples:graphics:ultrahdr")) implementation(project(":samples:location")) diff --git a/app/src/main/java/com/example/platform/app/ApiSurface.kt b/app/src/main/java/com/example/platform/app/ApiSurface.kt index 9ca31ca0..2189489e 100644 --- a/app/src/main/java/com/example/platform/app/ApiSurface.kt +++ b/app/src/main/java/com/example/platform/app/ApiSurface.kt @@ -195,6 +195,12 @@ val UserInterfaceWindowManagerApiSurface = ApiSurface( null, ) +val ConnectivityUwbRangingApiSurface = ApiSurface( + "connectivity-uwb-ranging", + "Connectivity UWB Ranging", + null, +) + val API_SURFACES = listOf( AccessiblityApiSurface, CameraCamera2ApiSurface, @@ -204,6 +210,7 @@ val API_SURFACES = listOf( ConnectivityBluetoothCompanionApiSurface, ConnectivityCallNotificationApiSurface, ConnectivityTelecomApiSurface, + ConnectivityUwbRangingApiSurface, GraphicsPdfApiSurface, GraphicsUltraHdrApiSurface, LocationApiSurface, diff --git a/app/src/main/java/com/example/platform/app/SampleDemo.kt b/app/src/main/java/com/example/platform/app/SampleDemo.kt index 0bee52b8..289c5456 100644 --- a/app/src/main/java/com/example/platform/app/SampleDemo.kt +++ b/app/src/main/java/com/example/platform/app/SampleDemo.kt @@ -124,6 +124,7 @@ import com.example.platform.ui.text.LineBreak import com.example.platform.ui.text.Linkify import com.example.platform.ui.text.TextSpanFragment import com.example.platform.ui.windowmanager.demos.WindowDemosActivity +import com.google.uwb.hellouwb.ui.UwbRangingActivity interface SampleDemo : CatalogItem { override val id: String @@ -336,6 +337,14 @@ val SAMPLE_DEMOS by lazy { } }, ), + ActivitySampleDemo( + id = "connectivity-uwb-ranging", + name = "UWB Ranging", + description = "Demonstrates how to use the UWB APIs to perform ranging.", + documentation = "https://developer.android.com/guide/topics/connectivity/uwb", + apiSurface = ConnectivityUwbRangingApiSurface, + content = UwbRangingActivity::class.java + ), ComposableSampleDemo( id = "pdf-renderer", name = "PDF Renderer", diff --git a/build.gradle.kts b/build.gradle.kts index 63ab9bb0..19c3c23c 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -18,4 +18,5 @@ plugins { alias(libs.plugins.kotlin.android) apply false alias(libs.plugins.kotlin.compose) apply false alias(libs.plugins.android.library) apply false + alias(libs.plugins.protobuf) apply false } \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index afd951f1..c9ee0c8f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -62,11 +62,16 @@ tensorflowLiteGpuDelegatePlugin = "0.4.4" tensorflowLiteSupport = "0.4.2" barcodeScanningCommon = "17.0.0" playServicesMlkitBarcodeScanning = "18.3.1" +protobuf = "0.9.4" +firebaseCrashlyticsBuildtools = "3.0.5" +uwb = "1.0.0-alpha10" + [libraries] androidx-core-ktx = { group = "androidx.core", name = "core-ktx", version.ref = "coreKtx" } androidx-fragment-compose = { module = "androidx.fragment:fragment-compose", version.ref = "fragmentCompose" } androidx-navigation-compose = { module = "androidx.navigation:navigation-compose", version.ref = "navigationCompose" } +androidx-uwb = { module = "androidx.core.uwb:uwb", version.ref = "uwb" } junit = { group = "junit", name = "junit", version.ref = "junit" } androidx-junit = { group = "androidx.test.ext", name = "junit", version.ref = "junitVersion" } androidx-espresso-core = { group = "androidx.test.espresso", name = "espresso-core", version.ref = "espressoCore" } @@ -196,6 +201,7 @@ tensorflow-lite-select-tf-ops = { module = "org.tensorflow:tensorflow-lite-selec tensorflow-lite-support = { module = "org.tensorflow:tensorflow-lite-support", version.ref = "tensorflowLiteSupport" } barcode-scanning-common = { group = "com.google.mlkit", name = "barcode-scanning-common", version.ref = "barcodeScanningCommon" } play-services-mlkit-barcode-scanning = { group = "com.google.android.gms", name = "play-services-mlkit-barcode-scanning", version.ref = "playServicesMlkitBarcodeScanning" } +firebase-crashlytics-buildtools = { group = "com.google.firebase", name = "firebase-crashlytics-buildtools", version.ref = "firebaseCrashlyticsBuildtools" } [plugins] android-application = { id = "com.android.application", version.ref = "agp" } @@ -212,3 +218,4 @@ hilt = { id = "com.google.dagger.hilt.android", version.ref = "hilt" } kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } ksp = { id = "com.google.devtools.ksp", version.ref = "ksp" } +protobuf = { id = "com.google.protobuf", version.ref = "protobuf" } diff --git a/samples/connectivity/UwbRanging/.idea/workspace.xml b/samples/connectivity/UwbRanging/.idea/workspace.xml new file mode 100644 index 00000000..6a5944c6 --- /dev/null +++ b/samples/connectivity/UwbRanging/.idea/workspace.xml @@ -0,0 +1,249 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +