From e0a50583135dd06ed69cbca93d830b257b59a0d6 Mon Sep 17 00:00:00 2001 From: Reema Bajwa Date: Wed, 16 Sep 2026 18:01:47 +0000 Subject: [PATCH 01/16] Use StandardCharsets.UTF_8 for UriUtils reading and writing Using OutputStreamWriter and InputStreamReader without an explicit charset falls back to the platform default charset, which can cause data corruption for multi-byte Unicode strings (e.g. non-ASCII usernames and credential data). Also handle possible null streams from openOutputStream/openInputStream. Test: ./gradlew :credentials:providerevents:providerevents:testReleaseUnitTest --dependency-verification=off --no-configuration-cache Change-Id: I3085311b74c338c80f8067c567ad0c8ee174f72b --- .../credentials/providerevents/internal/UriUtils.kt | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/credentials/providerevents/providerevents/src/main/java/androidx/credentials/providerevents/internal/UriUtils.kt b/credentials/providerevents/providerevents/src/main/java/androidx/credentials/providerevents/internal/UriUtils.kt index c905b941b31c5..168e043dea949 100644 --- a/credentials/providerevents/providerevents/src/main/java/androidx/credentials/providerevents/internal/UriUtils.kt +++ b/credentials/providerevents/providerevents/src/main/java/androidx/credentials/providerevents/internal/UriUtils.kt @@ -25,6 +25,7 @@ import java.io.BufferedWriter import java.io.File import java.io.InputStreamReader import java.io.OutputStreamWriter +import java.nio.charset.StandardCharsets /** A util class for reading or writing credentials to URI */ @RestrictTo(RestrictTo.Scope.LIBRARY) @@ -36,8 +37,8 @@ public class UriUtils { /** Write the credentials json into the provided uri. */ public fun writeToUri(uri: Uri, responseJson: String, context: Context) { - context.contentResolver.openOutputStream(uri).use { - val writer = BufferedWriter(OutputStreamWriter(it)) + context.contentResolver.openOutputStream(uri)?.use { + val writer = BufferedWriter(OutputStreamWriter(it, StandardCharsets.UTF_8)) writer.write(responseJson) writer.flush() writer.close() @@ -47,8 +48,8 @@ public class UriUtils { /** Read the credentials json from the provided uri. */ public fun readFromUri(uri: Uri, context: Context): String { var credentialsJson = "" - context.contentResolver.openInputStream(uri).use { - val reader = BufferedReader(InputStreamReader(it)) + context.contentResolver.openInputStream(uri)?.use { + val reader = BufferedReader(InputStreamReader(it, StandardCharsets.UTF_8)) credentialsJson = reader.readText() reader.close() } From 44c3a944639cf797e3f23b3456d74510db648cb1 Mon Sep 17 00:00:00 2001 From: Jens Ole Lauridsen Date: Mon, 14 Sep 2026 16:44:10 -0700 Subject: [PATCH 02/16] Update kotlin-metadata-jvm for Kotlin 2.4.0 The ui-inspection library currently crashes when analyzing metadata generated by Kotlin 2.4.0 because it uses readStrict(). This switches to readLenient() wrapped in a try-catch to prevent future compiler upgrades from crashing the inspection agent. Note: We are not bumping the kotlin-metadata-jvm dependency here because doing so requires a newer version of D8 (part of R8) to dex the inspection jar, which is not yet available. Fixes: 561656317 Test: N/A Change-Id: Icae6d4021020bf418e46c70e7ab020b1e8863e36 --- .../compose/ui/inspection/inspector/ReflectionSupport.kt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/compose/ui/ui-inspection/src/main/java/androidx/compose/ui/inspection/inspector/ReflectionSupport.kt b/compose/ui/ui-inspection/src/main/java/androidx/compose/ui/inspection/inspector/ReflectionSupport.kt index ff08769c99122..9dd0a12893736 100644 --- a/compose/ui/ui-inspection/src/main/java/androidx/compose/ui/inspection/inspector/ReflectionSupport.kt +++ b/compose/ui/ui-inspection/src/main/java/androidx/compose/ui/inspection/inspector/ReflectionSupport.kt @@ -149,7 +149,13 @@ internal class ReflectionSupport(private val inlineClassConverter: InlineClassCo return it } val metadataAnnotation = javaClass.getAnnotation(Metadata::class.java) ?: return null - val metadata = KotlinClassMetadata.readStrict(metadataAnnotation) + val metadata = + try { + KotlinClassMetadata.readLenient(metadataAnnotation) + } catch (e: Throwable) { + // TODO(b/562965619) Implement a way to send exception to the agent client + null + } val mappedClass = when (metadata) { is KotlinClassMetadata.Class -> MappedClass(metadata.kmClass, null) From 2293811a07ab555248c5a30a1736ff4a6a23bd07 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Sat, 19 Sep 2026 04:46:39 +0000 Subject: [PATCH 03/16] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import OFF_PEAK_PRESUBMIT: true Low-Coverage-Reason: CODE_NOT_TESTABLE Change-Id: Iffd3036fcf09b0ee70d8d27e21d4acbb15924346 --- biometric/biometric/src/main/res/values-te/strings.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/biometric/biometric/src/main/res/values-te/strings.xml b/biometric/biometric/src/main/res/values-te/strings.xml index 0f795ad6bce08..d9b0d90a65a5e 100644 --- a/biometric/biometric/src/main/res/values-te/strings.xml +++ b/biometric/biometric/src/main/res/values-te/strings.xml @@ -28,8 +28,8 @@ "తెలియని ఎర్రర్" "వినియోగదారు ద్వారా ప్రామాణీకరణ రద్దు చేయబడింది" "పాస్‌వర్డ్‌ను ఉపయోగించండి" - "పిన్‌ను గానీ, ఆకృతిని గానీ, పాస్‌వర్డ్‌ను గానీ‌ సెట్ చేయలేదు." - "ఈ పరికరం పిన్, ఆకృతి లేదా పాస్‌వర్డ్‌‌ను సపోర్ట్ చేయదు." + "పిన్‌ను గానీ, ప్యాటర్న్‌ను గానీ, పాస్‌వర్డ్‌ను గానీ‌ సెట్ చేయలేదు." + "ఈ డివైజ్ పిన్, ప్యాటర్న్ లేదా పాస్‌వర్డ్‌‌ను సపోర్ట్ చేయదు." "వేలిముద్ర చిహ్నం" "కంటెంట్ వీక్షణలో ఉన్న మరిన్ని ఆప్షన్‌ల బటన్‌ను క్లిక్ చేశారు." "వేలిముద్రను ఉపయోగించండి" From 1c32227c211e3d32187061cffc8ad318dc6ed884 Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Sat, 19 Sep 2026 04:28:10 +0000 Subject: [PATCH 04/16] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import OFF_PEAK_PRESUBMIT: true Low-Coverage-Reason: CODE_NOT_TESTABLE Change-Id: Icfb23f3510c5f82e58e7d13fa8c6f93de46c8ee8 --- .../material3/src/androidMain/res/values-ca/strings.xml | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/compose/material3/material3/src/androidMain/res/values-ca/strings.xml b/compose/material3/material3/src/androidMain/res/values-ca/strings.xml index 9ffdefdd70063..65fd4659abb88 100644 --- a/compose/material3/material3/src/androidMain/res/values-ca/strings.xml +++ b/compose/material3/material3/src/androidMain/res/values-ca/strings.xml @@ -28,10 +28,8 @@ "Suggeriments a continuació" "Selecciona la data" "Data seleccionada" - - - - + "Activa per canviar l\'any" + "Activa per canviar el mes i la data" "Canvia al mes següent" "Canvia al mes anterior" "Navega fins a l\'any %1$s" From e9c6230f7fd3d1dd6df207c50208e4d9343be1cf Mon Sep 17 00:00:00 2001 From: Bill Yi Date: Sat, 19 Sep 2026 04:25:09 +0000 Subject: [PATCH 05/16] Import translations. DO NOT MERGE ANYWHERE Auto-generated-cl: translation import OFF_PEAK_PRESUBMIT: true Low-Coverage-Reason: CODE_NOT_TESTABLE Change-Id: Ifedd884a7caa1b1f7227d636a9c1688ff044835c --- .../src/main/res/values-am/strings.xml | 18 ++++++------------ .../src/main/res/values-as/strings.xml | 18 ++++++------------ .../src/main/res/values-az/strings.xml | 18 ++++++------------ .../src/main/res/values-bg/strings.xml | 18 ++++++------------ .../src/main/res/values-bn/strings.xml | 18 ++++++------------ .../src/main/res/values-bs/strings.xml | 18 ++++++------------ .../src/main/res/values-ca/strings.xml | 18 ++++++------------ .../src/main/res/values-da/strings.xml | 18 ++++++------------ .../src/main/res/values-de/strings.xml | 18 ++++++------------ .../src/main/res/values-el/strings.xml | 18 ++++++------------ .../src/main/res/values-es-rUS/strings.xml | 18 ++++++------------ .../src/main/res/values-es/strings.xml | 18 ++++++------------ .../src/main/res/values-eu/strings.xml | 18 ++++++------------ .../src/main/res/values-fi/strings.xml | 18 ++++++------------ .../src/main/res/values-fr-rCA/strings.xml | 18 ++++++------------ .../src/main/res/values-fr/strings.xml | 18 ++++++------------ .../src/main/res/values-gl/strings.xml | 18 ++++++------------ .../src/main/res/values-gu/strings.xml | 18 ++++++------------ .../src/main/res/values-hr/strings.xml | 18 ++++++------------ .../src/main/res/values-hu/strings.xml | 18 ++++++------------ .../src/main/res/values-in/strings.xml | 18 ++++++------------ .../src/main/res/values-it/strings.xml | 18 ++++++------------ .../src/main/res/values-kn/strings.xml | 18 ++++++------------ .../src/main/res/values-ko/strings.xml | 18 ++++++------------ .../src/main/res/values-ky/strings.xml | 18 ++++++------------ .../src/main/res/values-lo/strings.xml | 18 ++++++------------ .../src/main/res/values-lt/strings.xml | 18 ++++++------------ .../src/main/res/values-mk/strings.xml | 18 ++++++------------ .../src/main/res/values-ml/strings.xml | 18 ++++++------------ .../src/main/res/values-mn/strings.xml | 18 ++++++------------ .../src/main/res/values-my/strings.xml | 18 ++++++------------ .../src/main/res/values-nb/strings.xml | 18 ++++++------------ .../src/main/res/values-ne/strings.xml | 18 ++++++------------ .../src/main/res/values-or/strings.xml | 18 ++++++------------ .../src/main/res/values-pa/strings.xml | 18 ++++++------------ .../src/main/res/values-pl/strings.xml | 18 ++++++------------ .../src/main/res/values-pt-rBR/strings.xml | 18 ++++++------------ .../src/main/res/values-pt-rPT/strings.xml | 18 ++++++------------ .../src/main/res/values-pt/strings.xml | 18 ++++++------------ .../src/main/res/values-ro/strings.xml | 18 ++++++------------ .../src/main/res/values-si/strings.xml | 18 ++++++------------ .../src/main/res/values-sk/strings.xml | 18 ++++++------------ .../src/main/res/values-sl/strings.xml | 18 ++++++------------ .../src/main/res/values-sv/strings.xml | 18 ++++++------------ .../src/main/res/values-sw/strings.xml | 18 ++++++------------ .../src/main/res/values-ta/strings.xml | 18 ++++++------------ .../src/main/res/values-te/strings.xml | 18 ++++++------------ .../src/main/res/values-tl/strings.xml | 18 ++++++------------ .../src/main/res/values-tr/strings.xml | 18 ++++++------------ .../src/main/res/values-uk/strings.xml | 18 ++++++------------ .../src/main/res/values-ur/strings.xml | 18 ++++++------------ .../src/main/res/values-vi/strings.xml | 18 ++++++------------ .../src/main/res/values-zh-rCN/strings.xml | 18 ++++++------------ .../src/main/res/values-zh-rHK/strings.xml | 18 ++++++------------ .../src/main/res/values-zh-rTW/strings.xml | 18 ++++++------------ .../src/main/res/values-zu/strings.xml | 18 ++++++------------ 56 files changed, 336 insertions(+), 672 deletions(-) diff --git a/compose/material3/material3-a2ui/src/main/res/values-am/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-am/strings.xml index 88f2ea97a6da1..e0a423b00d6ab 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-am/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-am/strings.xml @@ -22,16 +22,10 @@ "ስሕተት" "ቀን ምረጥ" "ጊዜ ምረጥ" - - - - - - - - - - - - + "አማራጮችን ይምረጡ" + "አማራጮችን አሳይ" + "ለማጣራት መተየብ ይጀምሩ…" + "ምንም ተዛማጅ አማራጮች የሉም" + "%1$s አስወግድ" + "የፍለጋ ማጣሪያን አጽዳ" diff --git a/compose/material3/material3-a2ui/src/main/res/values-as/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-as/strings.xml index e4ca623c0a414..c8bc5e713bf5a 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-as/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-as/strings.xml @@ -22,16 +22,10 @@ "আসোঁৱাহ" "তাৰিখ বাছনি কৰক" "সময় বাছনি কৰক" - - - - - - - - - - - - + "বিকল্প বাছনি কৰক" + "বিকল্প দেখুৱাওক" + "ফিল্টাৰ কৰিবলৈ টাইপ কৰা আৰম্ভ কৰক…" + "কোনো মিলৰ বিকল্প নাই" + "%1$s আঁতৰাওক" + "সন্ধানৰ ফিল্টাৰ মচক" diff --git a/compose/material3/material3-a2ui/src/main/res/values-az/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-az/strings.xml index 64cb4faada1b2..ea19d9410b9b0 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-az/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-az/strings.xml @@ -22,16 +22,10 @@ "Xəta" "Tarix seçin" "Vaxt seçin" - - - - - - - - - - - - + "Seçimlər edin" + "Seçimlər göstərilsin" + "Filtrləmək üçün yazmağa başlayın…" + "Uyğun seçim yoxdur" + "%1$s adlı istifadəçini silin" + "Axtarış filtrini silin" diff --git a/compose/material3/material3-a2ui/src/main/res/values-bg/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-bg/strings.xml index 8af3b9003ff70..9a76067300de7 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-bg/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-bg/strings.xml @@ -22,16 +22,10 @@ "Грешка" "Изберете дата" "Изберете час" - - - - - - - - - - - - + "Избиране на опции" + "Показване на опциите" + "Започнете да въвеждате, за да филтрирате…" + "Няма съответстващи опции" + "Премахване на %1$s" + "Изчистване на филтъра за търсене" diff --git a/compose/material3/material3-a2ui/src/main/res/values-bn/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-bn/strings.xml index 88304252a13f2..db291965ec6b2 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-bn/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-bn/strings.xml @@ -22,16 +22,10 @@ "সমস্যা" "তারিখ বেছে নিন" "সময় বেছে নিন" - - - - - - - - - - - - + "বিকল্পগুলি বেছে নিন" + "বিকল্প দেখুন" + "ফিল্টার করার জন্য টাইপ করতে শুরু করুন…" + "মিলে যাওয়া সংক্রান্ত বিকল্প নেই" + "%1$s-কে সরান" + "সার্চ ফিল্টার মুছুন" diff --git a/compose/material3/material3-a2ui/src/main/res/values-bs/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-bs/strings.xml index c05c1f56b0199..45c5f8c7c572e 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-bs/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-bs/strings.xml @@ -22,16 +22,10 @@ "Greška" "Odaberite datum" "Odaberite vrijeme" - - - - - - - - - - - - + "Odaberite opcije" + "Prikaži opcije" + "Početak pisanja radi filtriranja…" + "Nema opcija podudaranja" + "Ukloni opciju %1$s" + "Obriši filter pretraživanja" diff --git a/compose/material3/material3-a2ui/src/main/res/values-ca/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-ca/strings.xml index 9af11f9afbb12..066551438c3a5 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-ca/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-ca/strings.xml @@ -22,16 +22,10 @@ "Error" "Selecciona la data" "Selecciona l\'hora" - - - - - - - - - - - - + "Selecciona opcions" + "Mostra les opcions" + "Comença a escriure per filtrar…" + "No hi ha cap opció coincident" + "Suprimeix %1$s" + "Esborra el filtre de cerca" diff --git a/compose/material3/material3-a2ui/src/main/res/values-da/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-da/strings.xml index 23772b9398c72..da5dcb4cb4e36 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-da/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-da/strings.xml @@ -22,16 +22,10 @@ "Fejl" "Vælg dato" "Vælg tidspunkt" - - - - - - - - - - - - + "Vælg muligheder" + "Vis valgmuligheder" + "Begynd at skrive for at filtrere…" + "Ingen matchende valgmuligheder" + "Fjern %1$s" + "Ryd søgefilter" diff --git a/compose/material3/material3-a2ui/src/main/res/values-de/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-de/strings.xml index 654ac008f6139..3a304e5f1fec8 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-de/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-de/strings.xml @@ -22,16 +22,10 @@ "Fehler" "Datum auswählen" "Uhrzeit auswählen" - - - - - - - - - - - - + "Optionen auswählen" + "Optionen einblenden" + "Zum Filtern Text eingeben…" + "Keine passenden Optionen" + "%1$s entfernen" + "Suchfilter löschen" diff --git a/compose/material3/material3-a2ui/src/main/res/values-el/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-el/strings.xml index c66536aa1d78d..e953064ae7344 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-el/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-el/strings.xml @@ -22,16 +22,10 @@ "Σφάλμα" "Επιλογή ημερομηνίας" "Επιλογή ώρας" - - - - - - - - - - - - + "Ορίστε επιλογές" + "Εμφάνιση επιλογών" + "Ξεκινήστε να πληκτρολογείτε για φιλτράρισμα…" + "Δεν υπάρχουν αντίστοιχες επιλογές" + "Κατάργηση χρήστη %1$s" + "Διαγραφή φίλτρου αναζήτησης" diff --git a/compose/material3/material3-a2ui/src/main/res/values-es-rUS/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-es-rUS/strings.xml index d50978687c407..4d1801b340857 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-es-rUS/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-es-rUS/strings.xml @@ -22,16 +22,10 @@ "Error" "Seleccionar fecha" "Seleccionar hora" - - - - - - - - - - - - + "Seleccionar opciones" + "Mostrar opciones" + "Comienza a escribir para filtrar…" + "No hay opciones que coincidan" + "Quitar %1$s" + "Borrar filtro de búsqueda" diff --git a/compose/material3/material3-a2ui/src/main/res/values-es/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-es/strings.xml index d50978687c407..53f779baaadfe 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-es/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-es/strings.xml @@ -22,16 +22,10 @@ "Error" "Seleccionar fecha" "Seleccionar hora" - - - - - - - - - - - - + "Seleccionar opciones" + "Mostrar opciones" + "Empieza a escribir para filtrar…" + "No hay opciones que coincidan" + "Quitar %1$s" + "Borrar filtro de búsqueda" diff --git a/compose/material3/material3-a2ui/src/main/res/values-eu/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-eu/strings.xml index 4f5a881d56eab..faffbce97e887 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-eu/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-eu/strings.xml @@ -22,16 +22,10 @@ "Errorea" "Hautatu data" "Hautatu ordua" - - - - - - - - - - - - + "Hautatu aukerak" + "Erakutsi aukerak" + "Hasi idazten iragazteko…" + "Ez dago bat datorren aukerarik" + "Kendu %1$s" + "Garbitu bilaketa-iragazkia" diff --git a/compose/material3/material3-a2ui/src/main/res/values-fi/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-fi/strings.xml index 52ea8b37296fc..738454172943d 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-fi/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-fi/strings.xml @@ -22,16 +22,10 @@ "Virhe" "Valitse päivämäärä" "Valitse aika" - - - - - - - - - - - - + "Valitse asetukset" + "Näytä vaihtoehdot" + "Suodata kirjoittamalla…" + "Ei vastaavia vaihtoehtoja" + "Poista %1$s" + "Tyhjennä hakusuodatin" diff --git a/compose/material3/material3-a2ui/src/main/res/values-fr-rCA/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-fr-rCA/strings.xml index 20c90cb6b7b00..a4f4dd5a16bc7 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-fr-rCA/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-fr-rCA/strings.xml @@ -22,16 +22,10 @@ "Erreur" "Sélectionner une date" "Sélectionner l\'heure" - - - - - - - - - - - - + "Sélectionner des options" + "Afficher les options" + "Commencez à taper du texte pour filtrer…" + "Aucune option correspondante" + "Retirer %1$s" + "Effacer le filtre de recherche" diff --git a/compose/material3/material3-a2ui/src/main/res/values-fr/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-fr/strings.xml index ac20b1faec0a1..5fb89f8c25df4 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-fr/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-fr/strings.xml @@ -22,16 +22,10 @@ "Erreur" "Sélectionner une date" "Sélectionner une heure" - - - - - - - - - - - - + "Sélectionnez des options" + "Afficher les options" + "Commencez à saisir du texte pour filtrer…" + "Aucune option correspondante" + "Supprimer %1$s" + "Effacer le filtre de recherche" diff --git a/compose/material3/material3-a2ui/src/main/res/values-gl/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-gl/strings.xml index 71f217b3c21f9..0e98d40ebfb38 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-gl/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-gl/strings.xml @@ -22,16 +22,10 @@ "Erro" "Seleccionar data" "Seleccionar hora" - - - - - - - - - - - - + "Selecciona as opcións" + "Mostra as opcións" + "Comeza a escribir para filtrar as opcións…" + "Non hai ningunha opción que coincida" + "Quitar %1$s" + "Borrar filtro de busca" diff --git a/compose/material3/material3-a2ui/src/main/res/values-gu/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-gu/strings.xml index 51dda324abddd..74866c3caa147 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-gu/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-gu/strings.xml @@ -22,16 +22,10 @@ "ભૂલ" "તારીખ પસંદ કરો" "સમય પસંદ કરો" - - - - - - - - - - - - + "વિકલ્પો પસંદ કરો" + "વિકલ્પો બતાવો" + "ફિલ્ટર કરવા માટે ટાઇપ કરવાનું શરૂ કરો…" + "મેળ ખાતો કોઈ વિકલ્પ નથી" + "%1$sને કાઢી નાખો" + "શોધ ફિલ્ટર સાફ કરો" diff --git a/compose/material3/material3-a2ui/src/main/res/values-hr/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-hr/strings.xml index 09fb930dbea76..3746ee0748310 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-hr/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-hr/strings.xml @@ -22,16 +22,10 @@ "Pogreška" "Odaberite datum" "Odaberite vrijeme" - - - - - - - - - - - - + "Odaberite opcije" + "Prikaži opcije" + "Počnite unositi tekst da biste filtrirali…" + "Nema podudarnih opcija" + "Ukloni stavku %1$s" + "Izbriši filtar za pretraživanje" diff --git a/compose/material3/material3-a2ui/src/main/res/values-hu/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-hu/strings.xml index ea9afd413b3cc..869868fc4b2a1 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-hu/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-hu/strings.xml @@ -22,16 +22,10 @@ "Hiba" "Dátum kiválasztása" "Időpont kiválasztása" - - - - - - - - - - - - + "Válasszon a lehetőségek közül" + "Beállítások megjelenítése" + "Kezdjen el gépelni a szűréshez…" + "Nincsenek egyező lehetőségek" + "%1$s eltávolítása" + "Keresési szűrő törlése" diff --git a/compose/material3/material3-a2ui/src/main/res/values-in/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-in/strings.xml index eb665b7fb3d71..ca60e67689f66 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-in/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-in/strings.xml @@ -22,16 +22,10 @@ "Error" "Pilih tanggal" "Pilih waktu" - - - - - - - - - - - - + "Pilih opsi" + "Tampilkan opsi" + "Mulai mengetik untuk memfilter…" + "Tidak ada opsi yang cocok" + "Hapus %1$s" + "Hapus filter penelusuran" diff --git a/compose/material3/material3-a2ui/src/main/res/values-it/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-it/strings.xml index d4c2ec11a0577..82b96de87b087 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-it/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-it/strings.xml @@ -22,16 +22,10 @@ "Errore" "Seleziona data" "Seleziona l\'ora" - - - - - - - - - - - - + "Seleziona opzioni" + "Mostra opzioni" + "Inizia a digitare per filtrare…" + "Nessuna opzione corrispondente" + "Rimuovi %1$s" + "Cancella filtro di ricerca" diff --git a/compose/material3/material3-a2ui/src/main/res/values-kn/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-kn/strings.xml index 6dc7b432edfb2..949037258df64 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-kn/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-kn/strings.xml @@ -22,16 +22,10 @@ "ದೋಷ" "ದಿನಾಂಕವನ್ನು ಆಯ್ಕೆಮಾಡಿ" "ಸಮಯವನ್ನು ಆಯ್ಕೆಮಾಡಿ" - - - - - - - - - - - - + "ಆಯ್ಕೆಗಳನ್ನು ಆರಿಸಿ" + "ಆಯ್ಕೆಗಳನ್ನು ತೋರಿಸಿ" + "ಫಿಲ್ಟರ್ ಮಾಡಲು ಟೈಪ್ ಮಾಡಲು ಪ್ರಾರಂಭಿಸಿ…" + "ಯಾವುದೇ ಹೊಂದಾಣಿಕೆಯ ಆಯ್ಕೆಗಳಿಲ್ಲ" + "%1$s ಅವರನ್ನು ತೆಗೆದುಹಾಕಿ" + "ಹುಡುಕಾಟ ಫಿಲ್ಟರ್ ಅನ್ನು ತೆರವುಗೊಳಿಸಿ" diff --git a/compose/material3/material3-a2ui/src/main/res/values-ko/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-ko/strings.xml index c30d4ac65a432..9e992cd3e544a 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-ko/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-ko/strings.xml @@ -22,16 +22,10 @@ "오류" "날짜 선택" "시간 선택" - - - - - - - - - - - - + "옵션 선택" + "옵션 표시" + "필터링하려면 입력 시작…" + "일치하는 옵션 없음" + "%1$s 삭제" + "검색 필터 지우기" diff --git a/compose/material3/material3-a2ui/src/main/res/values-ky/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-ky/strings.xml index 5d4d51dd50e09..a113d0e7820d9 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-ky/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-ky/strings.xml @@ -22,16 +22,10 @@ "Ката" "Күндү тандоо" "Убакыт тандоо" - - - - - - - - - - - - + "Параметрлерди тандоо" + "Параметрлерди көрсөтүү" + "Чыпкалоо үчүн терип баштаңыз…" + "Дал келген параметрлер жок" + "Балаңызды %1$s алып салуу" + "Издөө чыпкасын тазалоо" diff --git a/compose/material3/material3-a2ui/src/main/res/values-lo/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-lo/strings.xml index 5eeb81a44a1e3..22bf83c37a2ea 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-lo/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-lo/strings.xml @@ -22,16 +22,10 @@ "ຜິດພາດ" "ເລືອກວັນທີ" "ເລືອກເວລາ" - - - - - - - - - - - - + "ເລືອກຕົວເລືອກ" + "ສະແດງຕົວເລືອກ" + "ເລີ່ມພິມເພື່ອກັ່ນຕອງ…" + "ບໍ່ມີຕົວເລືອກທີ່ກົງກັນ" + "ລຶບ %1$s ອອກ" + "ລຶບລ້າງຕົວກັ່ນຕອງການຊອກຫາ" diff --git a/compose/material3/material3-a2ui/src/main/res/values-lt/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-lt/strings.xml index 2dd64e5c112e0..2cec72f97f3c3 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-lt/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-lt/strings.xml @@ -22,16 +22,10 @@ "Klaida" "Pasirinkite datą" "Pasirinkite laiką" - - - - - - - - - - - - + "Pasirinkite parinktis" + "Rodyti parinktis" + "Pradėkite vesti tekstą, kad filtruotumėte…" + "Nėra atitinkančių parinkčių" + "Pašalinti %1$s" + "Išvalyti paieškos filtrą" diff --git a/compose/material3/material3-a2ui/src/main/res/values-mk/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-mk/strings.xml index cab30ce5bada8..6d937e21132b8 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-mk/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-mk/strings.xml @@ -22,16 +22,10 @@ "Грешка" "Изберете датум" "Изберете време" - - - - - - - - - - - - + "Изберете опции" + "Прикажи опции" + "Започнете со пишување за да филтрирате…" + "Нема опции за совпаѓање" + "Отстрани %1$s" + "Избриши го филтерот за пребарување" diff --git a/compose/material3/material3-a2ui/src/main/res/values-ml/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-ml/strings.xml index 9554611b6e883..a0e2622d929ee 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-ml/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-ml/strings.xml @@ -22,16 +22,10 @@ "പിശക്" "തീയതി തിരഞ്ഞെടുക്കുക" "സമയം തിരഞ്ഞെടുക്കുക" - - - - - - - - - - - - + "ഓപ്ഷനുകൾ തിരഞ്ഞെടുക്കുക" + "ഓപ്ഷനുകൾ കാണിക്കുക" + "ഫിൽട്ടർ ചെയ്യാൻ ടൈപ്പ് ചെയ്ത് തുടങ്ങുക…" + "പൊരുത്തപ്പെടുന്ന ഓപ്ഷനുകളൊന്നുമില്ല" + "ഈ കുട്ടിയെ നീക്കം ചെയ്യൂ: %1$s" + "തിരയൽ ഫിൽട്ടർ മായ്ക്കുക" diff --git a/compose/material3/material3-a2ui/src/main/res/values-mn/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-mn/strings.xml index dc466778b1d51..ecb01507703eb 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-mn/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-mn/strings.xml @@ -22,16 +22,10 @@ "Алдаа" "Огноо сонгох" "Цаг сонгох" - - - - - - - - - - - - + "Сонголтууд сонгох" + "Сонголтуудыг харуулах" + "Шүүхийн тулд бичиж эхэлнэ үү…" + "Таарах ямар ч сонголт байхгүй" + "%1$s-г хасах" + "Хайлтын шүүлтүүрийг арилгах" diff --git a/compose/material3/material3-a2ui/src/main/res/values-my/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-my/strings.xml index 6c7984a346383..d71ddc59482fe 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-my/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-my/strings.xml @@ -22,16 +22,10 @@ "အမှား" "ရက်စွဲရွေးရန်" "အချိန်ရွေးရန်" - - - - - - - - - - - - + "ရွေးစရာများ ရွေးရန်" + "ရွေးစရာများ ပြပါ" + "စစ်ထုတ်ရန် စာစရိုက်ပါ…" + "ကိုက်ညီသော ရွေးစရာ မရှိပါ" + "%1$s ကို ဖယ်ရှားရန်" + "ရှာဖွေမှုဖီလ်တာကို ရှင်းရန်" diff --git a/compose/material3/material3-a2ui/src/main/res/values-nb/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-nb/strings.xml index af70aed94286f..0a73d7f77e9fc 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-nb/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-nb/strings.xml @@ -22,16 +22,10 @@ "Feil" "Velg dato" "Velg klokkeslett" - - - - - - - - - - - - + "Velg alternativer" + "Vis alternativer" + "Begynn å skrive for å filtrere …" + "Ingen samsvarende alternativer" + "Fjern %1$s" + "Fjern søkefilteret" diff --git a/compose/material3/material3-a2ui/src/main/res/values-ne/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-ne/strings.xml index 7665355539b46..41843522bab8b 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-ne/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-ne/strings.xml @@ -22,16 +22,10 @@ "त्रुटि" "मिति चयन गर्नुहोस्" "समय चयन गर्नुहोस्" - - - - - - - - - - - - + "विकल्पहरू चयन गर्नुहोस्" + "विकल्पहरू देखाउनुहोस्" + "फिल्टर गर्न टाइप गर्न थाल्नुहोस्…" + "ठ्याक्कै मिल्ने विकल्पहरू छैनन्" + "%1$s हटाउनुहोस्" + "खोज फिल्टर हटाउनुहोस्" diff --git a/compose/material3/material3-a2ui/src/main/res/values-or/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-or/strings.xml index 2e196fc4b1e9b..e457b08393567 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-or/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-or/strings.xml @@ -22,16 +22,10 @@ "ତ୍ରୁଟି" "ତାରିଖ ଚୟନ କରନ୍ତୁ" "ସମୟ ଚୟନ କରନ୍ତୁ" - - - - - - - - - - - - + "ବିକଳ୍ପଗୁଡ଼ିକ ଚୟନ କରନ୍ତୁ" + "ବିକଳ୍ପଗୁଡ଼ିକ ଦେଖାନ୍ତୁ" + "ଫିଲ୍ଟର କରିବା ପାଇଁ ଟାଇପ କରିବା ଆରମ୍ଭ କରନ୍ତୁ…" + "କୌଣସି ମେଳ ହେଉଥିବା ବିକଳ୍ପ ନାହିଁ" + "%1$sକୁ କାଢ଼ି ଦିଅନ୍ତୁ" + "ସର୍ଚ୍ଚ ଫିଲ୍ଟର ଖାଲି କରନ୍ତୁ" diff --git a/compose/material3/material3-a2ui/src/main/res/values-pa/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-pa/strings.xml index 49442a8cba208..6679c980ade16 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-pa/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-pa/strings.xml @@ -22,16 +22,10 @@ "ਗੜਬੜ" "ਤਾਰੀਖ ਚੁਣੋ" "ਸਮਾਂ ਚੁਣੋ" - - - - - - - - - - - - + "ਵਿਕਲਪ ਚੁਣੋ" + "ਵਿਕਲਪ ਦਿਖਾਓ" + "ਫਿਲਟਰ ਕਰਨ ਲਈ ਟਾਈਪ ਕਰਨਾ ਸ਼ੁਰੂ ਕਰੋ…" + "ਕੋਈ ਮੇਲ ਖਾਂਦਾ ਵਿਕਲਪ ਨਹੀਂ" + "%1$s ਨੂੰ ਹਟਾਓ" + "ਖੋਜ ਫਿਲਟਰ ਕਲੀਅਰ ਕਰੋ" diff --git a/compose/material3/material3-a2ui/src/main/res/values-pl/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-pl/strings.xml index 20dc71e0c11f6..3441f16b6d031 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-pl/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-pl/strings.xml @@ -22,16 +22,10 @@ "Błąd" "Wybierz datę" "Wybierz godzinę" - - - - - - - - - - - - + "Wybierz opcje" + "Pokaż opcje" + "Zacznij pisać, aby filtrować…" + "Brak pasujących opcji" + "Usuń: %1$s" + "Wyczyść filtr wyszukiwania" diff --git a/compose/material3/material3-a2ui/src/main/res/values-pt-rBR/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-pt-rBR/strings.xml index dffb0c4931cfd..60d2ed73e263b 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-pt-rBR/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-pt-rBR/strings.xml @@ -22,16 +22,10 @@ "Erro" "Selecionar data" "Selecionar horário" - - - - - - - - - - - - + "Selecionar opções" + "Mostrar opções" + "Comece a digitar para filtrar…" + "Nenhuma opção correspondente" + "Remover %1$s" + "Limpar filtro de pesquisa" diff --git a/compose/material3/material3-a2ui/src/main/res/values-pt-rPT/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-pt-rPT/strings.xml index e3acd5d459c21..9478b1b6b4848 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-pt-rPT/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-pt-rPT/strings.xml @@ -22,16 +22,10 @@ "Erro" "Selecione uma data" "Selecione uma hora" - - - - - - - - - - - - + "Selecionar opções" + "Mostrar opções" + "Comece a escrever para filtrar…" + "Sem opções correspondentes" + "Remover %1$s" + "Limpar filtro de pesquisa" diff --git a/compose/material3/material3-a2ui/src/main/res/values-pt/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-pt/strings.xml index dffb0c4931cfd..60d2ed73e263b 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-pt/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-pt/strings.xml @@ -22,16 +22,10 @@ "Erro" "Selecionar data" "Selecionar horário" - - - - - - - - - - - - + "Selecionar opções" + "Mostrar opções" + "Comece a digitar para filtrar…" + "Nenhuma opção correspondente" + "Remover %1$s" + "Limpar filtro de pesquisa" diff --git a/compose/material3/material3-a2ui/src/main/res/values-ro/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-ro/strings.xml index ec521d97d9b32..44ec78b2a5671 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-ro/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-ro/strings.xml @@ -22,16 +22,10 @@ "Eroare" "Selectează data" "Selectează ora" - - - - - - - - - - - - + "Selectează dintre opțiuni" + "Arată opțiunile" + "Începe să introduci text pentru a filtra…" + "Fără opțiuni care să se potrivească" + "Exclude %1$s" + "Golește filtrul de căutare" diff --git a/compose/material3/material3-a2ui/src/main/res/values-si/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-si/strings.xml index e698e4c829df6..a8e9fd6c57ef8 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-si/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-si/strings.xml @@ -22,16 +22,10 @@ "දෝෂය" "දිනය තෝරන්න" "වේලාව තෝරන්න" - - - - - - - - - - - - + "විකල්ප තෝරන්න" + "විකල්ප පෙන්වන්න" + "පෙරීමට ටයිප් කිරීම අරඹන්න…" + "ගැළපෙන විකල්ප නැත" + "%1$s ඉවත් කරන්න" + "සෙවීම් පෙරහන හිස් කරන්න" diff --git a/compose/material3/material3-a2ui/src/main/res/values-sk/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-sk/strings.xml index 3b2179cccec96..0ad5482aa381b 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-sk/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-sk/strings.xml @@ -22,16 +22,10 @@ "Chyba" "Vyberte dátum" "Vyberte čas" - - - - - - - - - - - - + "Výber možností" + "Zobraziť možnosti" + "Začnite písať a zoznam sa odfiltruje…" + "Žiadne zodpovedajúce možnosti" + "Odstrániť %1$s" + "Vymazať filter vyhľadávania" diff --git a/compose/material3/material3-a2ui/src/main/res/values-sl/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-sl/strings.xml index 28fb48ed0ca1e..b6a8794533608 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-sl/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-sl/strings.xml @@ -22,16 +22,10 @@ "Napaka" "Izberite datum" "Izberite čas" - - - - - - - - - - - - + "Izbira možnosti" + "Pokaži možnosti" + "Začnite vnašati, če želite filtrirati …" + "Ni ujemajočih se možnosti" + "Odstrani možnost %1$s" + "Počisti filter za iskanje" diff --git a/compose/material3/material3-a2ui/src/main/res/values-sv/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-sv/strings.xml index bc14c05c39e3f..62987d4be3d09 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-sv/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-sv/strings.xml @@ -22,16 +22,10 @@ "Fel" "Välj datum" "Välj tid" - - - - - - - - - - - - + "Välj alternativ" + "Visa alternativ" + "Börja skriva för att filtrera …" + "Inga matchande alternativ" + "Ta bort %1$s" + "Rensa sökfilter" diff --git a/compose/material3/material3-a2ui/src/main/res/values-sw/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-sw/strings.xml index 4b96aac4bf282..15442eb73be8e 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-sw/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-sw/strings.xml @@ -22,16 +22,10 @@ "Hitilafu" "Chagua tarehe" "Chagua wakati" - - - - - - - - - - - - + "Teua chaguo" + "Onyesha chaguo" + "Anza kuandika ili uchuje…" + "Hakuna chaguo za ulinganishaji" + "Mwondoe %1$s" + "Futa kichujio cha utafutaji" diff --git a/compose/material3/material3-a2ui/src/main/res/values-ta/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-ta/strings.xml index 9dcfb1650a2da..4c827750e5463 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-ta/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-ta/strings.xml @@ -22,16 +22,10 @@ "பிழை" "தேதியைத் தேர்ந்தெடுங்கள்" "நேரத்தைத் தேர்ந்தெடுங்கள்" - - - - - - - - - - - - + "விருப்பங்களைத் தேர்ந்தெடுங்கள்" + "விருப்பங்களைக் காட்டு" + "ஃபில்டர் செய்ய டைப் செய்யத் தொடங்குங்கள்…" + "பொருத்த விருப்பங்கள் இல்லை" + "%1$s ஐ அகற்று" + "தேடல் ஃபில்டரை அழிக்கும்" diff --git a/compose/material3/material3-a2ui/src/main/res/values-te/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-te/strings.xml index 4f827ad9a87cb..41a84ba8b7b22 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-te/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-te/strings.xml @@ -22,16 +22,10 @@ "ఎర్రర్" "తేదీని ఎంచుకోండి" "సమయాన్ని ఎంచుకోండి" - - - - - - - - - - - - + "ఆప్షన్‌లను ఎంచుకోండి" + "ఆప్షన్‌లను చూపండి" + "ఫిల్టర్ చేయడానికి టైప్ చేయడం ప్రారంభించండి…" + "మ్యాచ్ అయ్యే ఆప్షన్‌లు ఏవీ లేవు" + "%1$s‌ను తీసివేయండి" + "సెర్చ్ ఫిల్టర్‌ను క్లియర్ చేయండి" diff --git a/compose/material3/material3-a2ui/src/main/res/values-tl/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-tl/strings.xml index d9523a0630e3c..ad40bb9ed7389 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-tl/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-tl/strings.xml @@ -22,16 +22,10 @@ "Error" "Pumili ng petsa" "Pumili ng oras" - - - - - - - - - - - - + "Pumili ng mga pagpipilian" + "Ipakita ang mga pagpipilian" + "Magsimulang mag-type para mag-filter…" + "Walang pagpipilian sa pagtutugma" + "Alisin ang %1$s" + "I-clear ang filter sa paghahanap" diff --git a/compose/material3/material3-a2ui/src/main/res/values-tr/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-tr/strings.xml index cea629cfaa58f..ceb3524073d1d 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-tr/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-tr/strings.xml @@ -22,16 +22,10 @@ "Hata" "Tarih seçin" "Saat seçin" - - - - - - - - - - - - + "Seçenek belirtin" + "Seçenekleri göster" + "Filtrelemek için yazmaya başlayın…" + "Eşleşen seçenek yok" + "%1$s öğesini kaldır" + "Arama filtresini temizleyin" diff --git a/compose/material3/material3-a2ui/src/main/res/values-uk/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-uk/strings.xml index aad199fc0f62f..55fc473ab0f5d 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-uk/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-uk/strings.xml @@ -22,16 +22,10 @@ "Помилка" "Вибрати дату" "Вибрати час" - - - - - - - - - - - - + "Виберіть опції" + "Показати опції" + "Почніть вводити текст, щоб відфільтрувати…" + "Немає відповідних опцій" + "Вилучити (%1$s)" + "Очистити фільтр пошуку" diff --git a/compose/material3/material3-a2ui/src/main/res/values-ur/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-ur/strings.xml index 47b969ab0f86b..203956e05d298 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-ur/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-ur/strings.xml @@ -22,16 +22,10 @@ "خرابی" "تاریخ منتخب کریں" "وقت منتخب کریں" - - - - - - - - - - - - + "اختیارات منتخب کریں" + "اختیارات دکھائیں" + "فلٹر کرنے کے لیے ٹائپ کرنا شروع کریں…" + "کوئی مماثل اختیار نہیں ہے" + "‏‫%1$s کو ہٹائیں" + "تلاش کا فلٹر صاف کریں" diff --git a/compose/material3/material3-a2ui/src/main/res/values-vi/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-vi/strings.xml index 7be8b77f05821..ec9ac145e97d3 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-vi/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-vi/strings.xml @@ -22,16 +22,10 @@ "Lỗi" "Chọn ngày" "Chọn thời gian" - - - - - - - - - - - - + "Chọn các lựa chọn" + "Hiện các lựa chọn" + "Bắt đầu nhập để lọc…" + "Không có lựa chọn phù hợp" + "Xoá %1$s" + "Xoá bộ lọc tìm kiếm" diff --git a/compose/material3/material3-a2ui/src/main/res/values-zh-rCN/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-zh-rCN/strings.xml index 6ed4397e34f00..8d4a8d6e2c9f1 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-zh-rCN/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-zh-rCN/strings.xml @@ -22,16 +22,10 @@ "错误" "选择日期" "选择时间" - - - - - - - - - - - - + "选择选项" + "显示选项" + "开始输入即可过滤…" + "没有匹配的选项" + "移除%1$s" + "清除搜索过滤条件" diff --git a/compose/material3/material3-a2ui/src/main/res/values-zh-rHK/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-zh-rHK/strings.xml index 9d4788adb31c1..355a3d3e78bf4 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-zh-rHK/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-zh-rHK/strings.xml @@ -22,16 +22,10 @@ "錯誤" "選取日期" "選取時間" - - - - - - - - - - - - + "選取選項" + "顯示選項" + "開始輸入即可篩選…" + "沒有相符的選項" + "移除%1$s" + "清除搜尋篩選器" diff --git a/compose/material3/material3-a2ui/src/main/res/values-zh-rTW/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-zh-rTW/strings.xml index 9d4788adb31c1..355a3d3e78bf4 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-zh-rTW/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-zh-rTW/strings.xml @@ -22,16 +22,10 @@ "錯誤" "選取日期" "選取時間" - - - - - - - - - - - - + "選取選項" + "顯示選項" + "開始輸入即可篩選…" + "沒有相符的選項" + "移除%1$s" + "清除搜尋篩選器" diff --git a/compose/material3/material3-a2ui/src/main/res/values-zu/strings.xml b/compose/material3/material3-a2ui/src/main/res/values-zu/strings.xml index e142891311908..5a4604e50e7e8 100644 --- a/compose/material3/material3-a2ui/src/main/res/values-zu/strings.xml +++ b/compose/material3/material3-a2ui/src/main/res/values-zu/strings.xml @@ -22,16 +22,10 @@ "Iphutha" "Khetha usuku" "Khetha isikhathi" - - - - - - - - - - - - + "Khetha okukhethwa kukho" + "Bonisa okungakhethwa kukho" + "Qala ukuthayipha ukuze uhlunge…" + "Akukho okungakhethwa kukho okufanayo" + "Susa u-%1$s" + "Sula isihlungi sosesho" From ff421c0e843ffe56863ad3458222a1471642c074 Mon Sep 17 00:00:00 2001 From: Aurimas Liutikas Date: Mon, 21 Sep 2026 02:14:47 -0700 Subject: [PATCH 06/16] Pin to a more stable version or xr deps in xr compose Test: ./gradlew -p xr/compose assembleRelease Change-Id: I615496be170d3dbaaf506d5683d1bfc3ff000da7 --- xr/compose/compose-testing/build.gradle | 6 +++--- xr/compose/compose/build.gradle | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/xr/compose/compose-testing/build.gradle b/xr/compose/compose-testing/build.gradle index 08af3601bde3a..dd5b6f892e53b 100644 --- a/xr/compose/compose-testing/build.gradle +++ b/xr/compose/compose-testing/build.gradle @@ -32,10 +32,10 @@ plugins { dependencies { api(project(":xr:compose:compose")) - api("androidx.xr.runtime:runtime:1.0.0-beta01") - api("androidx.xr.scenecore:scenecore:1.0.0-beta01") + api("androidx.xr.runtime:runtime:1.0.0-rc01") + api("androidx.xr.scenecore:scenecore:1.0.0-rc01") - implementation("androidx.xr.scenecore:scenecore-spatial-core:1.0.0-beta01") + implementation("androidx.xr.scenecore:scenecore-spatial-core:1.0.0-rc01") implementation("androidx.annotation:annotation:1.8.1") implementation("androidx.compose.runtime:runtime:1.7.5") implementation("androidx.compose.ui:ui:1.7.5") diff --git a/xr/compose/compose/build.gradle b/xr/compose/compose/build.gradle index 7b096fcaacfc3..c02b90101fad1 100644 --- a/xr/compose/compose/build.gradle +++ b/xr/compose/compose/build.gradle @@ -31,8 +31,8 @@ plugins { } dependencies { - api("androidx.xr.runtime:runtime:1.0.0-beta01") - api("androidx.xr.scenecore:scenecore:1.0.0-beta01") + api("androidx.xr.runtime:runtime:1.0.0-rc01") + api("androidx.xr.scenecore:scenecore:1.0.0-rc01") api("androidx.core:core-viewtree:1.0.0") implementation("androidx.annotation:annotation:1.8.1") From 42534ee676cb5c958bad1dcc17c4e6fe5c6856ce Mon Sep 17 00:00:00 2001 From: Yuri Schimke Date: Mon, 21 Sep 2026 11:06:04 +0000 Subject: [PATCH 07/16] Propagate TypefaceResolver to GraphContext and RcPlayerText Ensures GraphContext always receives the resolved TypefaceResolver when RcPlayerState pre-initializes GraphContext, delegates custom TypefaceResolvers in RcPlayerTextLayout, and keys non-LayoutComponent children in RcPlayerChildren. TAG=agy CONV=2048df11-2941-4d99-a31b-6b0d6ebe2a21 Test: ./gradlew :compose:remote:remote-player-compose:testReleaseUnitTest Relnote: N/A Change-Id: I5a577b63d9f0e599cf9cb346c809b5cf98bfbf9d --- .../player/compose/embedded/RcPlayer.kt | 7 ++- .../compose/embedded/RcPlayerTextLayout.kt | 40 ++++++++++++- .../compose/embedded/RcPlayerTestRule.kt | 8 ++- .../embedded/RcPlayerTextPropertiesTest.kt | 60 +++++++++++++++++-- 4 files changed, 105 insertions(+), 10 deletions(-) diff --git a/compose/remote/remote-player-compose/src/main/java/androidx/compose/remote/player/compose/embedded/RcPlayer.kt b/compose/remote/remote-player-compose/src/main/java/androidx/compose/remote/player/compose/embedded/RcPlayer.kt index fe1356adc5ca6..02017f6a4ccbd 100644 --- a/compose/remote/remote-player-compose/src/main/java/androidx/compose/remote/player/compose/embedded/RcPlayer.kt +++ b/compose/remote/remote-player-compose/src/main/java/androidx/compose/remote/player/compose/embedded/RcPlayer.kt @@ -222,7 +222,8 @@ public fun RcPlayer( // store / other computed States and captures its write as the result. No imperative recompute // pass, no dirty flags — changing an input invalidates exactly the dependent States, and chains // compose naturally. - val graphContext = state.graphContext + val graphContext = + state.graphContext.also { gc -> gc.setTypefaceResolver(remoteContext.typefaceResolver) } val startClockMillis = remember(document, clock) { clock.millis() } val limiter = remember(document) { Limiter() } @@ -268,7 +269,6 @@ public fun RcPlayer( themeColor.apply(remoteContext) } } - // The document's root content description (Header DOC_CONTENT_DESCRIPTION / // RootContentDescription // op, resolved onto the document during initializeContext) labels the whole player for @@ -585,7 +585,8 @@ internal fun RcPlayerChildren( RcPlayerComponent(child, scopeModifier) } } else { - val children = remember { ArrayList().apply { layout.getComponents(this) } } + val children = + remember(layout) { ArrayList().apply { layout.getComponents(this) } } children.fastForEach { op -> RcPlayerComponent(op) } } } diff --git a/compose/remote/remote-player-compose/src/main/java/androidx/compose/remote/player/compose/embedded/RcPlayerTextLayout.kt b/compose/remote/remote-player-compose/src/main/java/androidx/compose/remote/player/compose/embedded/RcPlayerTextLayout.kt index 193f8df1a0a24..02aee47c87171 100644 --- a/compose/remote/remote-player-compose/src/main/java/androidx/compose/remote/player/compose/embedded/RcPlayerTextLayout.kt +++ b/compose/remote/remote-player-compose/src/main/java/androidx/compose/remote/player/compose/embedded/RcPlayerTextLayout.kt @@ -24,9 +24,11 @@ import androidx.compose.foundation.text.TextAutoSize import androidx.compose.remote.core.RemoteContext import androidx.compose.remote.core.operations.layout.managers.CoreText import androidx.compose.remote.core.operations.layout.managers.TextLayout +import androidx.compose.remote.core.operations.paint.PaintBundle import androidx.compose.remote.player.compose.ExperimentalRemotePlayerApi import androidx.compose.remote.player.compose.embedded.state.rememberRemoteColorAsState import androidx.compose.remote.player.compose.embedded.state.rememberRemoteStringAsState +import androidx.compose.remote.player.core.platform.TypefaceResolver import androidx.compose.runtime.Composable import androidx.compose.runtime.State import androidx.compose.runtime.derivedStateOf @@ -86,7 +88,8 @@ internal fun RcPlayerText(layout: CoreText, modifier: Modifier) { val fontFamilyType = if (paintState.isTypefaceSet) paintState.fontFamily else data.type val customFontNameState = rememberCustomFontName(fontFamilyType, remoteContext) - val fontCertsResId = (LocalTypefaceResolver.current as? HasFontCerts)?.fontCertsResId ?: 0 + val typefaceResolver = LocalTypefaceResolver.current + val fontCertsResId = (typefaceResolver as? HasFontCerts)?.fontCertsResId ?: 0 val fontFamily = resolveFontFamily( fontFamilyType, @@ -97,6 +100,7 @@ internal fun RcPlayerText(layout: CoreText, modifier: Modifier) { data.fontAxisValues, LocalRemoteContext.current, fontCertsResId, + typefaceResolver, ) val textDecoration = @@ -205,7 +209,8 @@ internal fun RcPlayerText(layout: TextLayout, modifier: Modifier) { val fontFamilyType = if (paintState.isTypefaceSet) paintState.fontFamily else data.type val customFontNameState = rememberCustomFontName(fontFamilyType, LocalRemoteContext.current) - val fontCertsResId = (LocalTypefaceResolver.current as? HasFontCerts)?.fontCertsResId ?: 0 + val typefaceResolver = LocalTypefaceResolver.current + val fontCertsResId = (typefaceResolver as? HasFontCerts)?.fontCertsResId ?: 0 val fontFamily = resolveFontFamily( fontFamilyType, @@ -216,6 +221,7 @@ internal fun RcPlayerText(layout: TextLayout, modifier: Modifier) { null, LocalRemoteContext.current, fontCertsResId, + typefaceResolver, ) val overflow = @@ -302,7 +308,37 @@ private fun resolveFontFamily( fontAxisValues: FloatArray?, context: RemoteContext, fontCertsResId: Int = 0, + typefaceResolver: TypefaceResolver? = null, ): FontFamily { + // Built-in EmbeddedPlayerTypefaceResolver and GmsFontTypefaceResolver rely on Compose's native + // FontFamily / GoogleFont.Provider resolution path below (using fontCertsResId and variation + // settings). When a caller supplies a custom TypefaceResolver (e.g. host app or test harness + // providing concrete android.graphics.Typeface instances), delegate to it directly. + if ( + typefaceResolver != null && + typefaceResolver !is EmbeddedPlayerTypefaceResolver && + typefaceResolver !is GmsFontTypefaceResolver + ) { + val italic = fontStyle == FontStyle.Italic + val fi = + if ( + fontName != null && + fontFamilyType !in + PaintBundle.FONT_TYPE_DEFAULT..PaintBundle.FONT_TYPE_MONOSPACE + ) { + typefaceResolver.resolve(fontName, fontWeight.weight, italic, null, 400, false) + } else { + typefaceResolver.resolve( + fontFamilyType, + fontWeight.weight, + italic, + null, + 400, + false, + ) + } + return FontFamily(fi.getTypeface()) + } if (fontName != null) { when { fontName.startsWith("device:") -> { diff --git a/compose/remote/remote-player-compose/src/sharedTest/java/androidx/compose/remote/player/compose/embedded/RcPlayerTestRule.kt b/compose/remote/remote-player-compose/src/sharedTest/java/androidx/compose/remote/player/compose/embedded/RcPlayerTestRule.kt index f81911425a351..f7f03ea402864 100644 --- a/compose/remote/remote-player-compose/src/sharedTest/java/androidx/compose/remote/player/compose/embedded/RcPlayerTestRule.kt +++ b/compose/remote/remote-player-compose/src/sharedTest/java/androidx/compose/remote/player/compose/embedded/RcPlayerTestRule.kt @@ -28,6 +28,7 @@ import androidx.compose.remote.creation.compose.capture.widthDp import androidx.compose.remote.creation.compose.layout.RemoteComposable import androidx.compose.remote.player.compose.ExperimentalRemotePlayerApi import androidx.compose.remote.player.compose.RemoteComposePlayerFlags +import androidx.compose.remote.player.core.platform.TypefaceResolver import androidx.compose.remote.testing.RemoteBaseContentTestRule import androidx.compose.runtime.Composable import androidx.compose.runtime.MutableState @@ -74,6 +75,7 @@ class RcPlayerTestRule(val baseRule: RemoteBaseContentTestRule = RemoteBaseConte */ fun setRemoteContent( customPlugins: CustomPluginRegistry? = null, + typefaceResolver: TypefaceResolver? = null, remoteCreationDisplayInfo: RemoteCreationDisplayInfo = createCreationDisplayInfo( context = ApplicationProvider.getApplicationContext(), @@ -117,7 +119,11 @@ class RcPlayerTestRule(val baseRule: RemoteBaseContentTestRule = RemoteBaseConte object : RemoteBaseContentTestRule.Player { @Composable override fun Play(coreDocument: CoreDocument, size: Size) { - RcPlayer(document = coreDocument, customPlugins = customPlugins) + RcPlayer( + document = coreDocument, + customPlugins = customPlugins, + typefaceResolver = typefaceResolver, + ) } }, size = diff --git a/compose/remote/remote-player-compose/src/test/java/androidx/compose/remote/player/compose/embedded/RcPlayerTextPropertiesTest.kt b/compose/remote/remote-player-compose/src/test/java/androidx/compose/remote/player/compose/embedded/RcPlayerTextPropertiesTest.kt index eb5262270af8a..ec03dba806b53 100644 --- a/compose/remote/remote-player-compose/src/test/java/androidx/compose/remote/player/compose/embedded/RcPlayerTextPropertiesTest.kt +++ b/compose/remote/remote-player-compose/src/test/java/androidx/compose/remote/player/compose/embedded/RcPlayerTextPropertiesTest.kt @@ -17,6 +17,7 @@ package androidx.compose.remote.player.compose.embedded import android.content.Context +import android.graphics.Typeface import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.size import androidx.compose.remote.core.CoreDocument @@ -29,9 +30,10 @@ import androidx.compose.remote.creation.compose.layout.RemoteText import androidx.compose.remote.creation.compose.state.rs import androidx.compose.remote.creation.compose.state.rsp import androidx.compose.remote.creation.compose.text.RemoteTextStyle +import androidx.compose.remote.player.core.platform.FontInstance +import androidx.compose.remote.player.core.platform.TypefaceResolver import androidx.compose.ui.Modifier import androidx.compose.ui.test.assertIsDisplayed -import androidx.compose.ui.test.junit4.v2.createComposeRule import androidx.compose.ui.test.onNodeWithText import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp @@ -49,9 +51,7 @@ import org.robolectric.annotation.Config @Config(sdk = [35]) class RcPlayerTextPropertiesTest { - @get:Rule val enableEmbeddedPlayer = EnableEmbeddedPlayerRule() - - @get:Rule val rule = createComposeRule() + @get:Rule val rule = RcPlayerTestRule() @Test fun testCoreTextDataReflectiveReading() { @@ -221,4 +221,56 @@ class RcPlayerTextPropertiesTest { resolveTextAlign(CoreText.TEXT_ALIGN_JUSTIFY, CoreText.JUSTIFICATION_MODE_INTER_WORD) assertThat(textAlignWithJustification).isEqualTo(TextAlign.Justify) } + + @Test + fun testCustomTypefaceResolverPropagatesToGraphContextAndTextLayout() { + var resolveCount = 0 + val fontInstance = + object : FontInstance { + override fun getTypeface(): Typeface = Typeface.MONOSPACE + + override fun applyVariationSettings( + names: Array?, + values: FloatArray, + ): Typeface = Typeface.MONOSPACE + + override fun setOnLoadedListener(listener: Runnable) {} + } + val customResolver = + object : TypefaceResolver { + override fun resolve( + fontFamily: Int, + weight: Int, + italic: Boolean, + fallback: Typeface?, + fallbackWeight: Int, + fallbackItalic: Boolean, + ): FontInstance { + resolveCount++ + return fontInstance + } + + override fun resolve( + fontFamily: String, + weight: Int, + italic: Boolean, + fallback: Typeface?, + fallbackWeight: Int, + fallbackItalic: Boolean, + ): FontInstance { + resolveCount++ + return fontInstance + } + } + + rule.setRemoteContent(typefaceResolver = customResolver) { + RemoteText( + text = "Custom Typeface Test".rs, + style = RemoteTextStyle(fontSize = 18.rsp), + ) + } + + rule.onNodeWithText("Custom Typeface Test").assertIsDisplayed() + assertThat(resolveCount).isGreaterThan(0) + } } From 07d39ac8361d28a4504479aa7eb897ba825aeec3 Mon Sep 17 00:00:00 2001 From: Aurimas Liutikas Date: Mon, 21 Sep 2026 04:06:56 -0700 Subject: [PATCH 08/16] Remove usage of legacyDisableKotlinStrictApiMode in datastore Test: ./gradlew -p datastore allHostTests Change-Id: Ic455d6c919d4138502aa14d58444d20dc23e8787 --- datastore/datastore-core/build.gradle | 1 - .../datastore/core/DataStore.android.kt | 21 ++++++++++-------- .../core/DirectBootExceptionUtil.android.kt | 5 ++++- .../core/MultiProcessCoordinator.android.kt | 6 +++-- .../androidx/datastore/core/Closeable.kt | 6 ++--- .../androidx/datastore/core/DataStore.kt | 8 +++---- .../datastore/core/DirectBootExceptionUtil.kt | 5 ++++- .../kotlin/androidx/datastore/core/Expect.kt | 4 ++-- .../datastore/core/InterProcessCoordinator.kt | 14 ++++++------ .../kotlin/androidx/datastore/core/Storage.kt | 4 ++-- .../datastore/core/StorageConnection.kt | 22 ++++++++++--------- .../datastore/core/Actual.jvmAndAndroid.kt | 2 +- .../androidx/datastore/core/FileStorage.kt | 2 +- .../InterProcessCoordinator.jvmAndAndroid.kt | 2 +- .../androidx/datastore/core/DataStore.jvm.kt | 19 +++++++++------- .../core/DirectBootExceptionUtil.jvm.kt | 6 +++-- .../androidx/datastore/core/Actual.native.kt | 2 +- .../datastore/core/DataStore.native.kt | 19 +++++++++------- .../core/DirectBootExceptionUtil.native.kt | 6 +++-- .../androidx/datastore/core/Actual.wasmJs.kt | 4 ++-- .../datastore/core/DataStore.wasmJs.kt | 19 +++++++++------- .../datastore/core/DataStoreFactory.wasmJs.kt | 4 ++-- .../core/DirectBootExceptionUtil.wasmJs.kt | 6 +++-- .../datastore-preferences-core/build.gradle | 1 - .../core/PreferenceDataStoreFactory.kt | 2 +- .../datastore/preferences/core/Preferences.kt | 2 +- .../preferences/core/PreferencesSerializer.kt | 2 +- ...PreferencesFileSerializer.jvmAndAndroid.kt | 2 +- .../PreferencesSerializer.jvmAndAndroid.kt | 2 +- .../core/PreferenceDataStoreFactory.native.kt | 2 +- .../core/PreferencesSerializer.native.kt | 2 +- .../core/PreferenceDataStoreFactory.web.kt | 6 ++--- .../core/PreferencesSerializer.web.kt | 2 +- .../build.gradle | 1 - .../build.gradle | 1 - datastore/datastore-preferences/build.gradle | 1 - datastore/datastore-rxjava2/build.gradle | 1 - .../androidx/datastore/rxjava2/RxDataStore.kt | 4 ++-- datastore/datastore-rxjava3/build.gradle | 1 - .../androidx/datastore/rxjava3/RxDataStore.kt | 4 ++-- datastore/datastore/build.gradle | 1 - 41 files changed, 122 insertions(+), 102 deletions(-) diff --git a/datastore/datastore-core/build.gradle b/datastore/datastore-core/build.gradle index 8803250b0987e..7e7d83516b62f 100644 --- a/datastore/datastore-core/build.gradle +++ b/datastore/datastore-core/build.gradle @@ -176,6 +176,5 @@ androidx { type = SoftwareType.PUBLISHED_LIBRARY inceptionYear = "2020" description = "Android DataStore Core - contains the underlying store used by each serialization method" - legacyDisableKotlinStrictApiMode = true enableRobolectric() } diff --git a/datastore/datastore-core/src/androidMain/kotlin/androidx/datastore/core/DataStore.android.kt b/datastore/datastore-core/src/androidMain/kotlin/androidx/datastore/core/DataStore.android.kt index e41da804bfe62..b9c36b309cf53 100644 --- a/datastore/datastore-core/src/androidMain/kotlin/androidx/datastore/core/DataStore.android.kt +++ b/datastore/datastore-core/src/androidMain/kotlin/androidx/datastore/core/DataStore.android.kt @@ -21,13 +21,16 @@ import androidx.tracing.Tracer import kotlin.coroutines.CoroutineContext import kotlinx.coroutines.flow.Flow -actual interface DataStore { - actual val data: Flow +public actual interface DataStore { + public actual val data: Flow - actual suspend fun updateData(transform: suspend (t: T) -> T): T + public actual suspend fun updateData(transform: suspend (t: T) -> T): T - actual class Builder - actual constructor(private val storage: Storage, private val context: CoroutineContext) { + public actual class Builder + public actual constructor( + private val storage: Storage, + private val context: CoroutineContext, + ) { private var corruptionHandler: CorruptionHandler = ReThrowCorruptionHandler() private var migrations: List> = emptyList() private var tracer: DataStoreTracer? = null @@ -42,7 +45,7 @@ actual interface DataStore { * @return this [Builder] instance. */ @Suppress("MissingGetterMatchingBuilder") - actual fun setCorruptionHandler(handler: CorruptionHandler): Builder = apply { + public actual fun setCorruptionHandler(handler: CorruptionHandler): Builder = apply { this.corruptionHandler = handler } @@ -55,7 +58,7 @@ actual interface DataStore { * @return this [Builder] instance. */ @Suppress("MissingGetterMatchingBuilder") - actual fun addMigrations(migrations: List>): Builder = apply { + public actual fun addMigrations(migrations: List>): Builder = apply { this.migrations += migrations } @@ -68,14 +71,14 @@ actual interface DataStore { // TODO(b/486189894): When androidx.tracing becomes available in all target platforms // supported by DataStore, move `setTracer()` to common. @Suppress("MissingGetterMatchingBuilder") - fun setTracer(tracer: DataStoreTracer): Builder = apply { this.tracer = tracer } + public fun setTracer(tracer: DataStoreTracer): Builder = apply { this.tracer = tracer } /** * Validates the configuration and builds the [Builder] instance. * * @return a new DataStore instance. */ - actual fun build(): DataStore { + public actual fun build(): DataStore { return DataStoreImpl( storage = storage, corruptionHandler = corruptionHandler, diff --git a/datastore/datastore-core/src/androidMain/kotlin/androidx/datastore/core/DirectBootExceptionUtil.android.kt b/datastore/datastore-core/src/androidMain/kotlin/androidx/datastore/core/DirectBootExceptionUtil.android.kt index 14f028ec1923c..05b6fe4e8014a 100644 --- a/datastore/datastore-core/src/androidMain/kotlin/androidx/datastore/core/DirectBootExceptionUtil.android.kt +++ b/datastore/datastore-core/src/androidMain/kotlin/androidx/datastore/core/DirectBootExceptionUtil.android.kt @@ -35,7 +35,10 @@ import java.lang.reflect.Method * @return An instance of a [DirectBootUsageException] or the provided [exception]. */ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) -actual fun wrapExceptionIfDueToDirectBoot(parentDirPath: String?, exception: Exception): Exception { +public actual fun wrapExceptionIfDueToDirectBoot( + parentDirPath: String?, + exception: Exception, +): Exception { if (exception.isDeviceUnlocked()) { return exception } else { diff --git a/datastore/datastore-core/src/androidMain/kotlin/androidx/datastore/core/MultiProcessCoordinator.android.kt b/datastore/datastore-core/src/androidMain/kotlin/androidx/datastore/core/MultiProcessCoordinator.android.kt index ae9a0adac4995..e3fd0020cc68d 100644 --- a/datastore/datastore-core/src/androidMain/kotlin/androidx/datastore/core/MultiProcessCoordinator.android.kt +++ b/datastore/datastore-core/src/androidMain/kotlin/androidx/datastore/core/MultiProcessCoordinator.android.kt @@ -202,5 +202,7 @@ internal class MultiProcessCoordinator( * @param file the File in which [DataStore] stores the data. */ @Suppress("StreamFiles") -fun createMultiProcessCoordinator(context: CoroutineContext, file: File): InterProcessCoordinator = - MultiProcessCoordinator(context, file) +public fun createMultiProcessCoordinator( + context: CoroutineContext, + file: File, +): InterProcessCoordinator = MultiProcessCoordinator(context, file) diff --git a/datastore/datastore-core/src/commonMain/kotlin/androidx/datastore/core/Closeable.kt b/datastore/datastore-core/src/commonMain/kotlin/androidx/datastore/core/Closeable.kt index 9cbf92294ca24..723e7bf95ad3d 100644 --- a/datastore/datastore-core/src/commonMain/kotlin/androidx/datastore/core/Closeable.kt +++ b/datastore/datastore-core/src/commonMain/kotlin/androidx/datastore/core/Closeable.kt @@ -20,10 +20,10 @@ package androidx.datastore.core /** Datastore common version of java.io.Closeable */ @Suppress("NotCloseable") // No closable in KMP common. -interface Closeable { +public interface Closeable { /** Closes the specified resource. */ - fun close() + public fun close() } /** @@ -32,7 +32,7 @@ interface Closeable { * @throws Throwable any exceptions thrown in the block will propagate through this method. */ @Suppress("NotCloseable", "DocumentExceptions") // No closable in KMP common. -inline fun T.use(block: (T) -> R): R { +public inline fun T.use(block: (T) -> R): R { var thrown: Throwable? = null try { diff --git a/datastore/datastore-core/src/commonMain/kotlin/androidx/datastore/core/DataStore.kt b/datastore/datastore-core/src/commonMain/kotlin/androidx/datastore/core/DataStore.kt index c162bcfcda747..b6159960756b7 100644 --- a/datastore/datastore-core/src/commonMain/kotlin/androidx/datastore/core/DataStore.kt +++ b/datastore/datastore-core/src/commonMain/kotlin/androidx/datastore/core/DataStore.kt @@ -90,7 +90,7 @@ public expect interface DataStore { * and must be managed manually. */ /** Builder for [DataStore]. */ - class Builder(storage: Storage, context: CoroutineContext) { + public class Builder(storage: Storage, context: CoroutineContext) { /** * Sets the [CorruptionHandler] for the DataStore. * @@ -100,7 +100,7 @@ public expect interface DataStore { * @param handler the corruption handler. * @return this [Builder] instance. */ - fun setCorruptionHandler(handler: CorruptionHandler): Builder + public fun setCorruptionHandler(handler: CorruptionHandler): Builder /** * Adds [DataMigration]s to the DataStore. @@ -110,13 +110,13 @@ public expect interface DataStore { * @param migrations the list of migrations. * @return this [Builder] instance. */ - fun addMigrations(migrations: List>): Builder + public fun addMigrations(migrations: List>): Builder /** * Validates the configuration and builds the [Builder] instance. * * @return a new DataStore instance. */ - fun build(): DataStore + public fun build(): DataStore } } diff --git a/datastore/datastore-core/src/commonMain/kotlin/androidx/datastore/core/DirectBootExceptionUtil.kt b/datastore/datastore-core/src/commonMain/kotlin/androidx/datastore/core/DirectBootExceptionUtil.kt index 316aa73404e88..4bffca88ad991 100644 --- a/datastore/datastore-core/src/commonMain/kotlin/androidx/datastore/core/DirectBootExceptionUtil.kt +++ b/datastore/datastore-core/src/commonMain/kotlin/androidx/datastore/core/DirectBootExceptionUtil.kt @@ -32,4 +32,7 @@ import kotlin.jvm.JvmName * @return An instance of a `DirectBootUsageException` or the provided [exception]. */ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) -expect fun wrapExceptionIfDueToDirectBoot(parentDirPath: String?, exception: Exception): Exception +public expect fun wrapExceptionIfDueToDirectBoot( + parentDirPath: String?, + exception: Exception, +): Exception diff --git a/datastore/datastore-core/src/commonMain/kotlin/androidx/datastore/core/Expect.kt b/datastore/datastore-core/src/commonMain/kotlin/androidx/datastore/core/Expect.kt index ec580150f4cc5..3019135948fc7 100644 --- a/datastore/datastore-core/src/commonMain/kotlin/androidx/datastore/core/Expect.kt +++ b/datastore/datastore-core/src/commonMain/kotlin/androidx/datastore/core/Expect.kt @@ -18,8 +18,8 @@ package androidx.datastore.core import kotlinx.coroutines.CoroutineDispatcher /** Common IOException to be defined in jvm and native code. */ -expect open class IOException(message: String?, cause: Throwable?) : Exception { - constructor(message: String?) +public expect open class IOException(message: String?, cause: Throwable?) : Exception { + public constructor(message: String?) } internal expect class AtomicInt { diff --git a/datastore/datastore-core/src/commonMain/kotlin/androidx/datastore/core/InterProcessCoordinator.kt b/datastore/datastore-core/src/commonMain/kotlin/androidx/datastore/core/InterProcessCoordinator.kt index 8d6b283f27cc8..5aa73ba4a93d5 100644 --- a/datastore/datastore-core/src/commonMain/kotlin/androidx/datastore/core/InterProcessCoordinator.kt +++ b/datastore/datastore-core/src/commonMain/kotlin/androidx/datastore/core/InterProcessCoordinator.kt @@ -27,13 +27,13 @@ import kotlinx.coroutines.flow.Flow * and [createMultiProcessCoordinator] for a DataStore that needs to be accessed in multiple * processes. */ -interface InterProcessCoordinator { +public interface InterProcessCoordinator { /** * A flow that emits a Unit when the data for the DataStore changes. [DataStore] collects this * flow to signal the action to invalidate cache and re-read data from disk. */ - val updateNotifications: Flow + public val updateNotifications: Flow /** * Get the exclusive lock shared by the coordinators from DataStore instances (even from @@ -43,7 +43,7 @@ interface InterProcessCoordinator { * * @param block The block of code that is performed with the lock resource. */ - suspend fun lock(block: suspend () -> T): T + public suspend fun lock(block: suspend () -> T): T /** * Attempt to get the exclusive lock shared by the coordinators from DataStore instances (even @@ -54,14 +54,14 @@ interface InterProcessCoordinator { * @param block The block of code that is performed after attempting to get the lock resource. * Block will receive a Boolean parameter which is true if the try lock succeeded. */ - suspend fun tryLock(block: suspend (Boolean) -> T): T + public suspend fun tryLock(block: suspend (Boolean) -> T): T /** * Atomically get the current version. [DataStore] instances for the same data use this method * to access the shared version for its cached data and internal state. Notice concurrent access * to the version should guarantee data consistency. */ - suspend fun getVersion(): Int + public suspend fun getVersion(): Int /** * Atomically increment version and return the new version. [DataStore] instances for the same @@ -72,7 +72,7 @@ interface InterProcessCoordinator { * detail for DataStore and implementers of this API should not make any assumption based on the * number of version increments. */ - suspend fun incrementAndGetVersion(): Int + public suspend fun incrementAndGetVersion(): Int } /** @@ -81,5 +81,5 @@ interface InterProcessCoordinator { * @param filePath The canonical file path of the file managed by [SingleProcessCoordinator] */ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) -fun createSingleProcessCoordinator(filePath: String): InterProcessCoordinator = +public fun createSingleProcessCoordinator(filePath: String): InterProcessCoordinator = SingleProcessCoordinator(filePath) diff --git a/datastore/datastore-core/src/commonMain/kotlin/androidx/datastore/core/Storage.kt b/datastore/datastore-core/src/commonMain/kotlin/androidx/datastore/core/Storage.kt index bec241c4d6666..b565035710658 100644 --- a/datastore/datastore-core/src/commonMain/kotlin/androidx/datastore/core/Storage.kt +++ b/datastore/datastore-core/src/commonMain/kotlin/androidx/datastore/core/Storage.kt @@ -23,7 +23,7 @@ package androidx.datastore.core * * Implementers provide the specifics of how and where the data is stored. */ -interface Storage { +public interface Storage { /** * Creates a storage connection which allows reading and writing to the underlying storage. * @@ -31,5 +31,5 @@ interface Storage { * * @throws IOException Unrecoverable IO exception when trying to access the underlying storage. */ - fun createConnection(): StorageConnection + public fun createConnection(): StorageConnection } diff --git a/datastore/datastore-core/src/commonMain/kotlin/androidx/datastore/core/StorageConnection.kt b/datastore/datastore-core/src/commonMain/kotlin/androidx/datastore/core/StorageConnection.kt index ec1a11f3149ba..811cfee00bf25 100644 --- a/datastore/datastore-core/src/commonMain/kotlin/androidx/datastore/core/StorageConnection.kt +++ b/datastore/datastore-core/src/commonMain/kotlin/androidx/datastore/core/StorageConnection.kt @@ -20,7 +20,7 @@ package androidx.datastore.core * StorageConnection provides a way to read and write a particular type of data. * StorageConnections are created from [Storage] objects. */ -interface StorageConnection : Closeable { +public interface StorageConnection : Closeable { /** * Creates a scope for reading to allow storage reads, and will try to obtain a read lock. @@ -29,7 +29,7 @@ interface StorageConnection : Closeable { * `locked` parameter which is true if the try lock succeeded. * @throws IOException when there is an unrecoverable exception in reading. */ - suspend fun readScope(block: suspend ReadScope.(locked: Boolean) -> R): R + public suspend fun readScope(block: suspend ReadScope.(locked: Boolean) -> R): R /** * Creates a write scope that guaranteed to only have one single writer, ensuring also that any @@ -37,30 +37,32 @@ interface StorageConnection : Closeable { * * @throws IOException when there is an unrecoverable exception in writing. */ - suspend fun writeScope(block: suspend WriteScope.() -> Unit) + public suspend fun writeScope(block: suspend WriteScope.() -> Unit) /** * Provides a coordinator to guarantee data consistency across multiple threads and processes. */ - val coordinator: InterProcessCoordinator + public val coordinator: InterProcessCoordinator } /** The scope used for a read transaction. */ -interface ReadScope : Closeable { +public interface ReadScope : Closeable { /** Read the data from the underlying storage. */ - suspend fun readData(): T + public suspend fun readData(): T } /** The scope used for a write transaction. */ -interface WriteScope : ReadScope { +public interface WriteScope : ReadScope { /** Writes the data to the underlying storage. */ - suspend fun writeData(value: T) + public suspend fun writeData(value: T) } /* Convenience method for opening a read scope, doing a single read, and closing the scope. */ -suspend fun StorageConnection.readData(): T = readScope { readData() } +public suspend fun StorageConnection.readData(): T = readScope { readData() } /* Convenience method for opening a write scope, doing a single write, and closing the scope. */ -suspend fun StorageConnection.writeData(value: T) = writeScope { writeData(value) } +public suspend fun StorageConnection.writeData(value: T): Unit = writeScope { + writeData(value) +} diff --git a/datastore/datastore-core/src/jvmAndAndroidMain/kotlin/androidx/datastore/core/Actual.jvmAndAndroid.kt b/datastore/datastore-core/src/jvmAndAndroidMain/kotlin/androidx/datastore/core/Actual.jvmAndAndroid.kt index 84c09686dbc93..095073df97e12 100644 --- a/datastore/datastore-core/src/jvmAndAndroidMain/kotlin/androidx/datastore/core/Actual.jvmAndAndroid.kt +++ b/datastore/datastore-core/src/jvmAndAndroidMain/kotlin/androidx/datastore/core/Actual.jvmAndAndroid.kt @@ -27,7 +27,7 @@ import kotlinx.coroutines.Dispatchers /** Common IOException mapped to java.io.Exception in jvm code. */ @Suppress("AcronymName", "TypealiasDefinition") -actual typealias IOException = java.io.IOException +public actual typealias IOException = java.io.IOException internal actual class AtomicInt { private val delegate: AtomicInteger diff --git a/datastore/datastore-core/src/jvmAndAndroidMain/kotlin/androidx/datastore/core/FileStorage.kt b/datastore/datastore-core/src/jvmAndAndroidMain/kotlin/androidx/datastore/core/FileStorage.kt index 2e44e15bd4de4..59a3d2d26ee9f 100644 --- a/datastore/datastore-core/src/jvmAndAndroidMain/kotlin/androidx/datastore/core/FileStorage.kt +++ b/datastore/datastore-core/src/jvmAndAndroidMain/kotlin/androidx/datastore/core/FileStorage.kt @@ -36,7 +36,7 @@ import kotlinx.coroutines.sync.withLock * doesn't support cross process use cases. * @param produceFile The file producer that returns the file that will be read and written. */ -class FileStorage( +public class FileStorage( private val serializer: Serializer, private val coordinatorProducer: (File) -> InterProcessCoordinator = { createSingleProcessCoordinator(it) diff --git a/datastore/datastore-core/src/jvmAndAndroidMain/kotlin/androidx/datastore/core/InterProcessCoordinator.jvmAndAndroid.kt b/datastore/datastore-core/src/jvmAndAndroidMain/kotlin/androidx/datastore/core/InterProcessCoordinator.jvmAndAndroid.kt index 4f161823ee12f..f99ceaa6187a8 100644 --- a/datastore/datastore-core/src/jvmAndAndroidMain/kotlin/androidx/datastore/core/InterProcessCoordinator.jvmAndAndroid.kt +++ b/datastore/datastore-core/src/jvmAndAndroidMain/kotlin/androidx/datastore/core/InterProcessCoordinator.jvmAndAndroid.kt @@ -27,5 +27,5 @@ import java.io.File * @param file The canonical file managed by [SingleProcessCoordinator] */ @Suppress("StreamFiles") -fun createSingleProcessCoordinator(file: File): InterProcessCoordinator = +public fun createSingleProcessCoordinator(file: File): InterProcessCoordinator = createSingleProcessCoordinator(file.canonicalFile.absolutePath) diff --git a/datastore/datastore-core/src/jvmMain/kotlin/androidx/datastore/core/DataStore.jvm.kt b/datastore/datastore-core/src/jvmMain/kotlin/androidx/datastore/core/DataStore.jvm.kt index 6e4923257d743..5f0ec14d546f3 100644 --- a/datastore/datastore-core/src/jvmMain/kotlin/androidx/datastore/core/DataStore.jvm.kt +++ b/datastore/datastore-core/src/jvmMain/kotlin/androidx/datastore/core/DataStore.jvm.kt @@ -20,13 +20,16 @@ import androidx.datastore.core.handlers.ReThrowCorruptionHandler import kotlin.coroutines.CoroutineContext import kotlinx.coroutines.flow.Flow -actual interface DataStore { - actual val data: Flow +public actual interface DataStore { + public actual val data: Flow - actual suspend fun updateData(transform: suspend (t: T) -> T): T + public actual suspend fun updateData(transform: suspend (t: T) -> T): T - actual class Builder - actual constructor(private val storage: Storage, private val context: CoroutineContext) { + public actual class Builder + public actual constructor( + private val storage: Storage, + private val context: CoroutineContext, + ) { private var corruptionHandler: CorruptionHandler = ReThrowCorruptionHandler() private var migrations: List> = emptyList() @@ -39,7 +42,7 @@ actual interface DataStore { * @param handler the corruption handler. * @return this [Builder] instance. */ - actual fun setCorruptionHandler(handler: CorruptionHandler): Builder = apply { + public actual fun setCorruptionHandler(handler: CorruptionHandler): Builder = apply { this.corruptionHandler = handler } @@ -51,7 +54,7 @@ actual interface DataStore { * @param migrations the list of migrations. * @return this [Builder] instance. */ - actual fun addMigrations(migrations: List>): Builder = apply { + public actual fun addMigrations(migrations: List>): Builder = apply { this.migrations += migrations } @@ -60,7 +63,7 @@ actual interface DataStore { * * @return a new DataStore instance. */ - actual fun build(): DataStore { + public actual fun build(): DataStore { return DataStoreImpl( storage = storage, corruptionHandler = corruptionHandler, diff --git a/datastore/datastore-core/src/jvmMain/kotlin/androidx/datastore/core/DirectBootExceptionUtil.jvm.kt b/datastore/datastore-core/src/jvmMain/kotlin/androidx/datastore/core/DirectBootExceptionUtil.jvm.kt index 9eb18cf81aab4..c81ee7810af1a 100644 --- a/datastore/datastore-core/src/jvmMain/kotlin/androidx/datastore/core/DirectBootExceptionUtil.jvm.kt +++ b/datastore/datastore-core/src/jvmMain/kotlin/androidx/datastore/core/DirectBootExceptionUtil.jvm.kt @@ -27,5 +27,7 @@ import androidx.annotation.RestrictTo * @return The provided [exception]. */ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) -actual fun wrapExceptionIfDueToDirectBoot(parentDirPath: String?, exception: Exception): Exception = - exception +public actual fun wrapExceptionIfDueToDirectBoot( + parentDirPath: String?, + exception: Exception, +): Exception = exception diff --git a/datastore/datastore-core/src/nativeMain/kotlin/androidx/datastore/core/Actual.native.kt b/datastore/datastore-core/src/nativeMain/kotlin/androidx/datastore/core/Actual.native.kt index e8403d5cffe48..269da96e1a39f 100644 --- a/datastore/datastore-core/src/nativeMain/kotlin/androidx/datastore/core/Actual.native.kt +++ b/datastore/datastore-core/src/nativeMain/kotlin/androidx/datastore/core/Actual.native.kt @@ -25,7 +25,7 @@ import kotlinx.coroutines.IO @Suppress("AcronymName") public actual open class IOException actual constructor(message: String?, cause: Throwable?) : Exception(message, cause) { - actual constructor(message: String?) : this(message, null) + public actual constructor(message: String?) : this(message, null) } internal actual class AtomicInt actual constructor(initialValue: Int) { diff --git a/datastore/datastore-core/src/nativeMain/kotlin/androidx/datastore/core/DataStore.native.kt b/datastore/datastore-core/src/nativeMain/kotlin/androidx/datastore/core/DataStore.native.kt index 6e4923257d743..5f0ec14d546f3 100644 --- a/datastore/datastore-core/src/nativeMain/kotlin/androidx/datastore/core/DataStore.native.kt +++ b/datastore/datastore-core/src/nativeMain/kotlin/androidx/datastore/core/DataStore.native.kt @@ -20,13 +20,16 @@ import androidx.datastore.core.handlers.ReThrowCorruptionHandler import kotlin.coroutines.CoroutineContext import kotlinx.coroutines.flow.Flow -actual interface DataStore { - actual val data: Flow +public actual interface DataStore { + public actual val data: Flow - actual suspend fun updateData(transform: suspend (t: T) -> T): T + public actual suspend fun updateData(transform: suspend (t: T) -> T): T - actual class Builder - actual constructor(private val storage: Storage, private val context: CoroutineContext) { + public actual class Builder + public actual constructor( + private val storage: Storage, + private val context: CoroutineContext, + ) { private var corruptionHandler: CorruptionHandler = ReThrowCorruptionHandler() private var migrations: List> = emptyList() @@ -39,7 +42,7 @@ actual interface DataStore { * @param handler the corruption handler. * @return this [Builder] instance. */ - actual fun setCorruptionHandler(handler: CorruptionHandler): Builder = apply { + public actual fun setCorruptionHandler(handler: CorruptionHandler): Builder = apply { this.corruptionHandler = handler } @@ -51,7 +54,7 @@ actual interface DataStore { * @param migrations the list of migrations. * @return this [Builder] instance. */ - actual fun addMigrations(migrations: List>): Builder = apply { + public actual fun addMigrations(migrations: List>): Builder = apply { this.migrations += migrations } @@ -60,7 +63,7 @@ actual interface DataStore { * * @return a new DataStore instance. */ - actual fun build(): DataStore { + public actual fun build(): DataStore { return DataStoreImpl( storage = storage, corruptionHandler = corruptionHandler, diff --git a/datastore/datastore-core/src/nativeMain/kotlin/androidx/datastore/core/DirectBootExceptionUtil.native.kt b/datastore/datastore-core/src/nativeMain/kotlin/androidx/datastore/core/DirectBootExceptionUtil.native.kt index 06529f897a724..9673c45d4e086 100644 --- a/datastore/datastore-core/src/nativeMain/kotlin/androidx/datastore/core/DirectBootExceptionUtil.native.kt +++ b/datastore/datastore-core/src/nativeMain/kotlin/androidx/datastore/core/DirectBootExceptionUtil.native.kt @@ -26,5 +26,7 @@ import androidx.annotation.RestrictTo * @return The provided [exception]. */ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) -actual fun wrapExceptionIfDueToDirectBoot(parentDirPath: String?, exception: Exception): Exception = - exception +public actual fun wrapExceptionIfDueToDirectBoot( + parentDirPath: String?, + exception: Exception, +): Exception = exception diff --git a/datastore/datastore-core/src/webMain/kotlin/androidx/datastore/core/Actual.wasmJs.kt b/datastore/datastore-core/src/webMain/kotlin/androidx/datastore/core/Actual.wasmJs.kt index 9316155276bd6..c66e5b06f8421 100644 --- a/datastore/datastore-core/src/webMain/kotlin/androidx/datastore/core/Actual.wasmJs.kt +++ b/datastore/datastore-core/src/webMain/kotlin/androidx/datastore/core/Actual.wasmJs.kt @@ -24,9 +24,9 @@ import kotlinx.coroutines.Dispatchers // TODO(b/442842414): Replace with `kotlinx.io.IOException` when it is stable. @Suppress("AcronymName") -actual open class IOException actual constructor(message: String?, cause: Throwable?) : +public actual open class IOException actual constructor(message: String?, cause: Throwable?) : Exception() { - actual constructor(message: String?) : this(message, null) + public actual constructor(message: String?) : this(message, null) } // TODO(b/441511612): Support locking for LocalStorage and OPFS. diff --git a/datastore/datastore-core/src/webMain/kotlin/androidx/datastore/core/DataStore.wasmJs.kt b/datastore/datastore-core/src/webMain/kotlin/androidx/datastore/core/DataStore.wasmJs.kt index 6e4923257d743..5f0ec14d546f3 100644 --- a/datastore/datastore-core/src/webMain/kotlin/androidx/datastore/core/DataStore.wasmJs.kt +++ b/datastore/datastore-core/src/webMain/kotlin/androidx/datastore/core/DataStore.wasmJs.kt @@ -20,13 +20,16 @@ import androidx.datastore.core.handlers.ReThrowCorruptionHandler import kotlin.coroutines.CoroutineContext import kotlinx.coroutines.flow.Flow -actual interface DataStore { - actual val data: Flow +public actual interface DataStore { + public actual val data: Flow - actual suspend fun updateData(transform: suspend (t: T) -> T): T + public actual suspend fun updateData(transform: suspend (t: T) -> T): T - actual class Builder - actual constructor(private val storage: Storage, private val context: CoroutineContext) { + public actual class Builder + public actual constructor( + private val storage: Storage, + private val context: CoroutineContext, + ) { private var corruptionHandler: CorruptionHandler = ReThrowCorruptionHandler() private var migrations: List> = emptyList() @@ -39,7 +42,7 @@ actual interface DataStore { * @param handler the corruption handler. * @return this [Builder] instance. */ - actual fun setCorruptionHandler(handler: CorruptionHandler): Builder = apply { + public actual fun setCorruptionHandler(handler: CorruptionHandler): Builder = apply { this.corruptionHandler = handler } @@ -51,7 +54,7 @@ actual interface DataStore { * @param migrations the list of migrations. * @return this [Builder] instance. */ - actual fun addMigrations(migrations: List>): Builder = apply { + public actual fun addMigrations(migrations: List>): Builder = apply { this.migrations += migrations } @@ -60,7 +63,7 @@ actual interface DataStore { * * @return a new DataStore instance. */ - actual fun build(): DataStore { + public actual fun build(): DataStore { return DataStoreImpl( storage = storage, corruptionHandler = corruptionHandler, diff --git a/datastore/datastore-core/src/webMain/kotlin/androidx/datastore/core/DataStoreFactory.wasmJs.kt b/datastore/datastore-core/src/webMain/kotlin/androidx/datastore/core/DataStoreFactory.wasmJs.kt index ebf4599b73c6a..2c66e40336c4d 100644 --- a/datastore/datastore-core/src/webMain/kotlin/androidx/datastore/core/DataStoreFactory.wasmJs.kt +++ b/datastore/datastore-core/src/webMain/kotlin/androidx/datastore/core/DataStoreFactory.wasmJs.kt @@ -19,8 +19,8 @@ package androidx.datastore.core import androidx.datastore.core.util.getContextFromScope /** Public factory for creating DataStore instances. */ -actual object DataStoreFactory { - actual fun create( +public actual object DataStoreFactory { + public actual fun create( storage: Storage, corruptionHandler: androidx.datastore.core.handlers.ReplaceFileCorruptionHandler?, migrations: List>, diff --git a/datastore/datastore-core/src/webMain/kotlin/androidx/datastore/core/DirectBootExceptionUtil.wasmJs.kt b/datastore/datastore-core/src/webMain/kotlin/androidx/datastore/core/DirectBootExceptionUtil.wasmJs.kt index fc8f2adc30c04..62a6e3565a864 100644 --- a/datastore/datastore-core/src/webMain/kotlin/androidx/datastore/core/DirectBootExceptionUtil.wasmJs.kt +++ b/datastore/datastore-core/src/webMain/kotlin/androidx/datastore/core/DirectBootExceptionUtil.wasmJs.kt @@ -26,5 +26,7 @@ import androidx.annotation.RestrictTo * @return The provided [exception]. */ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) -actual fun wrapExceptionIfDueToDirectBoot(parentDirPath: String?, exception: Exception): Exception = - exception +public actual fun wrapExceptionIfDueToDirectBoot( + parentDirPath: String?, + exception: Exception, +): Exception = exception diff --git a/datastore/datastore-preferences-core/build.gradle b/datastore/datastore-preferences-core/build.gradle index 7bac5d3cb1eb2..7307cbe74f117 100644 --- a/datastore/datastore-preferences-core/build.gradle +++ b/datastore/datastore-preferences-core/build.gradle @@ -105,5 +105,4 @@ androidx { type = SoftwareType.PUBLISHED_LIBRARY inceptionYear = "2020" description = "Android Preferences DataStore without the Android Dependencies" - legacyDisableKotlinStrictApiMode = true } diff --git a/datastore/datastore-preferences-core/src/commonMain/kotlin/androidx/datastore/preferences/core/PreferenceDataStoreFactory.kt b/datastore/datastore-preferences-core/src/commonMain/kotlin/androidx/datastore/preferences/core/PreferenceDataStoreFactory.kt index ebc119ee8869c..d15eed4023efd 100644 --- a/datastore/datastore-preferences-core/src/commonMain/kotlin/androidx/datastore/preferences/core/PreferenceDataStoreFactory.kt +++ b/datastore/datastore-preferences-core/src/commonMain/kotlin/androidx/datastore/preferences/core/PreferenceDataStoreFactory.kt @@ -25,7 +25,7 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.SupervisorJob import okio.Path -expect object PreferenceDataStoreFactory { +public expect object PreferenceDataStoreFactory { /** * Create an instance of [DataStore]. Never create more than one instance of DataStore for a diff --git a/datastore/datastore-preferences-core/src/commonMain/kotlin/androidx/datastore/preferences/core/Preferences.kt b/datastore/datastore-preferences-core/src/commonMain/kotlin/androidx/datastore/preferences/core/Preferences.kt index bf20a08de09c2..765f1f8ff049d 100644 --- a/datastore/datastore-preferences-core/src/commonMain/kotlin/androidx/datastore/preferences/core/Preferences.kt +++ b/datastore/datastore-preferences-core/src/commonMain/kotlin/androidx/datastore/preferences/core/Preferences.kt @@ -124,7 +124,7 @@ public abstract class Preferences internal constructor() { * @param block The lambda to apply to a mutable copy of these preferences. * @return A new read-only `Preferences` object with the applied changes. */ - fun copy(block: (MutablePreferences) -> Unit): Preferences { + public fun copy(block: (MutablePreferences) -> Unit): Preferences { return MutablePreferences(asMap().toMutableMap(), startFrozen = false).also { block(it) it.freeze() diff --git a/datastore/datastore-preferences-core/src/commonMain/kotlin/androidx/datastore/preferences/core/PreferencesSerializer.kt b/datastore/datastore-preferences-core/src/commonMain/kotlin/androidx/datastore/preferences/core/PreferencesSerializer.kt index 412e86cfcd38b..21f5c660dc8f0 100644 --- a/datastore/datastore-preferences-core/src/commonMain/kotlin/androidx/datastore/preferences/core/PreferencesSerializer.kt +++ b/datastore/datastore-preferences-core/src/commonMain/kotlin/androidx/datastore/preferences/core/PreferencesSerializer.kt @@ -25,7 +25,7 @@ import okio.BufferedSource * [DataStore][androidx.datastore.core.DataStore] using the * [DataStoreFactory#create][androidx.datastore.core.DataStoreFactory.create] function. */ -expect object PreferencesSerializer : OkioSerializer { +public expect object PreferencesSerializer : OkioSerializer { override val defaultValue: Preferences override suspend fun readFrom(source: BufferedSource): Preferences diff --git a/datastore/datastore-preferences-core/src/jvmAndAndroidMain/kotlin/androidx/datastore/preferences/core/PreferencesFileSerializer.jvmAndAndroid.kt b/datastore/datastore-preferences-core/src/jvmAndAndroidMain/kotlin/androidx/datastore/preferences/core/PreferencesFileSerializer.jvmAndAndroid.kt index 6b37328a02d54..a32d69b299e42 100644 --- a/datastore/datastore-preferences-core/src/jvmAndAndroidMain/kotlin/androidx/datastore/preferences/core/PreferencesFileSerializer.jvmAndAndroid.kt +++ b/datastore/datastore-preferences-core/src/jvmAndAndroidMain/kotlin/androidx/datastore/preferences/core/PreferencesFileSerializer.jvmAndAndroid.kt @@ -32,7 +32,7 @@ import java.io.OutputStream * [DataStore][androidx.datastore.core.DataStore] using the * [DataStoreFactory#create][androidx.datastore.core.DataStoreFactory.create] function. */ -object PreferencesFileSerializer : Serializer { +public object PreferencesFileSerializer : Serializer { internal const val fileExtension = "preferences_pb" override val defaultValue: Preferences diff --git a/datastore/datastore-preferences-core/src/jvmAndAndroidMain/kotlin/androidx/datastore/preferences/core/PreferencesSerializer.jvmAndAndroid.kt b/datastore/datastore-preferences-core/src/jvmAndAndroidMain/kotlin/androidx/datastore/preferences/core/PreferencesSerializer.jvmAndAndroid.kt index 81a93f13f997d..3acf0a508d0d2 100644 --- a/datastore/datastore-preferences-core/src/jvmAndAndroidMain/kotlin/androidx/datastore/preferences/core/PreferencesSerializer.jvmAndAndroid.kt +++ b/datastore/datastore-preferences-core/src/jvmAndAndroidMain/kotlin/androidx/datastore/preferences/core/PreferencesSerializer.jvmAndAndroid.kt @@ -32,7 +32,7 @@ import okio.IOException * [DataStore][androidx.datastore.core.DataStore] using the * [DataStoreFactory#create][androidx.datastore.core.DataStoreFactory.create] function. */ -actual object PreferencesSerializer : OkioSerializer { +public actual object PreferencesSerializer : OkioSerializer { internal const val fileExtension = "preferences_pb" actual override val defaultValue: Preferences diff --git a/datastore/datastore-preferences-core/src/nativeMain/kotlin/androidx/datastore/preferences/core/PreferenceDataStoreFactory.native.kt b/datastore/datastore-preferences-core/src/nativeMain/kotlin/androidx/datastore/preferences/core/PreferenceDataStoreFactory.native.kt index 732c20666f8df..a8dd1320c061d 100644 --- a/datastore/datastore-preferences-core/src/nativeMain/kotlin/androidx/datastore/preferences/core/PreferenceDataStoreFactory.native.kt +++ b/datastore/datastore-preferences-core/src/nativeMain/kotlin/androidx/datastore/preferences/core/PreferenceDataStoreFactory.native.kt @@ -26,7 +26,7 @@ import kotlinx.coroutines.Job import okio.FileSystem import okio.Path -actual object PreferenceDataStoreFactory { +public actual object PreferenceDataStoreFactory { /** * Create an instance of [DataStore]. Never create more than one instance of DataStore for a * given file; doing so can break all DataStore functionality. You should consider managing your diff --git a/datastore/datastore-preferences-core/src/nativeMain/kotlin/androidx/datastore/preferences/core/PreferencesSerializer.native.kt b/datastore/datastore-preferences-core/src/nativeMain/kotlin/androidx/datastore/preferences/core/PreferencesSerializer.native.kt index da5312b5d0cb9..f44f039734621 100644 --- a/datastore/datastore-preferences-core/src/nativeMain/kotlin/androidx/datastore/preferences/core/PreferencesSerializer.native.kt +++ b/datastore/datastore-preferences-core/src/nativeMain/kotlin/androidx/datastore/preferences/core/PreferencesSerializer.native.kt @@ -33,7 +33,7 @@ import okio.BufferedSource * [DataStoreFactory#create][androidx.datastore.core.DataStoreFactory.create] function. */ @OptIn(ExperimentalSerializationApi::class) -actual object PreferencesSerializer : OkioSerializer { +public actual object PreferencesSerializer : OkioSerializer { internal const val fileExtension = "preferences_pb" actual override val defaultValue: Preferences diff --git a/datastore/datastore-preferences-core/src/webMain/kotlin/androidx/datastore/preferences/core/PreferenceDataStoreFactory.web.kt b/datastore/datastore-preferences-core/src/webMain/kotlin/androidx/datastore/preferences/core/PreferenceDataStoreFactory.web.kt index a18facea3adb7..02f83f1d8d0b7 100644 --- a/datastore/datastore-preferences-core/src/webMain/kotlin/androidx/datastore/preferences/core/PreferenceDataStoreFactory.web.kt +++ b/datastore/datastore-preferences-core/src/webMain/kotlin/androidx/datastore/preferences/core/PreferenceDataStoreFactory.web.kt @@ -26,7 +26,7 @@ import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Job import okio.Path -actual object PreferenceDataStoreFactory { +public actual object PreferenceDataStoreFactory { /** * Create an instance of [DataStore]. Never create more than one instance of DataStore for a @@ -46,7 +46,7 @@ actual object PreferenceDataStoreFactory { * preferences_pb. * @return a new DataStore instance with the provided configuration */ - actual fun create( + public actual fun create( storage: Storage, corruptionHandler: ReplaceFileCorruptionHandler?, migrations: List>, @@ -87,7 +87,7 @@ actual object PreferenceDataStoreFactory { * preferences_pb. File will be created if it doesn't exist. * @return a new DataStore instance with the provided configuration */ - actual fun createWithPath( + public actual fun createWithPath( corruptionHandler: ReplaceFileCorruptionHandler?, migrations: List>, scope: CoroutineScope, diff --git a/datastore/datastore-preferences-core/src/webMain/kotlin/androidx/datastore/preferences/core/PreferencesSerializer.web.kt b/datastore/datastore-preferences-core/src/webMain/kotlin/androidx/datastore/preferences/core/PreferencesSerializer.web.kt index a24a4739bb1a4..3fa7bf20f879f 100644 --- a/datastore/datastore-preferences-core/src/webMain/kotlin/androidx/datastore/preferences/core/PreferencesSerializer.web.kt +++ b/datastore/datastore-preferences-core/src/webMain/kotlin/androidx/datastore/preferences/core/PreferencesSerializer.web.kt @@ -43,7 +43,7 @@ import okio.ByteString.Companion.toByteString * [DataStore][androidx.datastore.core.DataStore] using the * [DataStoreFactory#create][androidx.datastore.core.DataStoreFactory.create] function. */ -actual object PreferencesSerializer : OkioSerializer { +public actual object PreferencesSerializer : OkioSerializer { private val delegateJsonSerializer = WebSerializer(JsonObject.serializer(), JsonObject(emptyMap())) diff --git a/datastore/datastore-preferences-rxjava2/build.gradle b/datastore/datastore-preferences-rxjava2/build.gradle index 214f9ada26611..deac27c67481d 100644 --- a/datastore/datastore-preferences-rxjava2/build.gradle +++ b/datastore/datastore-preferences-rxjava2/build.gradle @@ -74,5 +74,4 @@ androidx { type = SoftwareType.PUBLISHED_LIBRARY inceptionYear = "2020" description = "Android DataStore Core - contains wrappers for using DataStore using RxJava2" - legacyDisableKotlinStrictApiMode = true } diff --git a/datastore/datastore-preferences-rxjava3/build.gradle b/datastore/datastore-preferences-rxjava3/build.gradle index c476b43c94ece..58537c97a4663 100644 --- a/datastore/datastore-preferences-rxjava3/build.gradle +++ b/datastore/datastore-preferences-rxjava3/build.gradle @@ -74,5 +74,4 @@ androidx { type = SoftwareType.PUBLISHED_LIBRARY inceptionYear = "2020" description = "Android DataStore Core - contains wrappers for using DataStore using RxJava2" - legacyDisableKotlinStrictApiMode = true } diff --git a/datastore/datastore-preferences/build.gradle b/datastore/datastore-preferences/build.gradle index 9a8dcfa47f2cf..7246316878913 100644 --- a/datastore/datastore-preferences/build.gradle +++ b/datastore/datastore-preferences/build.gradle @@ -65,5 +65,4 @@ androidx { type = SoftwareType.PUBLISHED_LIBRARY inceptionYear = "2020" description = "Android Preferences DataStore" - legacyDisableKotlinStrictApiMode = true } diff --git a/datastore/datastore-rxjava2/build.gradle b/datastore/datastore-rxjava2/build.gradle index c5ed453451771..fa69e3e79fbc5 100644 --- a/datastore/datastore-rxjava2/build.gradle +++ b/datastore/datastore-rxjava2/build.gradle @@ -67,5 +67,4 @@ androidx { type = SoftwareType.PUBLISHED_LIBRARY inceptionYear = "2020" description = "Android DataStore Core - contains wrappers for using DataStore using RxJava2" - legacyDisableKotlinStrictApiMode = true } diff --git a/datastore/datastore-rxjava2/src/main/java/androidx/datastore/rxjava2/RxDataStore.kt b/datastore/datastore-rxjava2/src/main/java/androidx/datastore/rxjava2/RxDataStore.kt index 03e9a2f60502f..12657ddbc843c 100644 --- a/datastore/datastore-rxjava2/src/main/java/androidx/datastore/rxjava2/RxDataStore.kt +++ b/datastore/datastore-rxjava2/src/main/java/androidx/datastore/rxjava2/RxDataStore.kt @@ -45,7 +45,7 @@ private constructor( private val scope: CoroutineScope, ) : Disposable { - companion object { + public companion object { /** Visible for datastore-preferences-rxjava2 artifact only */ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) public fun create( @@ -60,7 +60,7 @@ private constructor( * Dispose of the DataStore. Wait for the Completable returned by [shutdownComplete] to confirm * that the DataStore has been shut down. */ - override fun dispose() = scope.coroutineContext.job.cancel() + override fun dispose(): Unit = scope.coroutineContext.job.cancel() /** Returns whether this DataStore is closed */ override fun isDisposed(): Boolean = !scope.coroutineContext.job.isActive diff --git a/datastore/datastore-rxjava3/build.gradle b/datastore/datastore-rxjava3/build.gradle index 980139cc79249..b77d00637ca52 100644 --- a/datastore/datastore-rxjava3/build.gradle +++ b/datastore/datastore-rxjava3/build.gradle @@ -68,5 +68,4 @@ androidx { type = SoftwareType.PUBLISHED_LIBRARY inceptionYear = "2020" description = "Android DataStore Core - contains wrappers for using DataStore using RxJava2" - legacyDisableKotlinStrictApiMode = true } diff --git a/datastore/datastore-rxjava3/src/main/java/androidx/datastore/rxjava3/RxDataStore.kt b/datastore/datastore-rxjava3/src/main/java/androidx/datastore/rxjava3/RxDataStore.kt index 9e5e3fed447de..ed2affd760edc 100644 --- a/datastore/datastore-rxjava3/src/main/java/androidx/datastore/rxjava3/RxDataStore.kt +++ b/datastore/datastore-rxjava3/src/main/java/androidx/datastore/rxjava3/RxDataStore.kt @@ -47,7 +47,7 @@ private constructor( private val scope: CoroutineScope, ) : Disposable { - companion object { + public companion object { /** Visible for datastore-preferences-rxjava2 artifact only */ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) public fun create( @@ -62,7 +62,7 @@ private constructor( * Dispose of the DataStore. Wait for the Completable returned by [shutdownComplete] to confirm * that the DataStore has been shut down. */ - override fun dispose() = scope.coroutineContext.job.cancel() + override fun dispose(): Unit = scope.coroutineContext.job.cancel() /** Returns whether this DataStore is closed */ override fun isDisposed(): Boolean = !scope.coroutineContext.job.isActive diff --git a/datastore/datastore/build.gradle b/datastore/datastore/build.gradle index 2b3bd962a68b4..c47115e4990e5 100644 --- a/datastore/datastore/build.gradle +++ b/datastore/datastore/build.gradle @@ -86,5 +86,4 @@ androidx { inceptionYear = "2020" description = "Android DataStore - contains the underlying store used by each serialization " + "method along with components that require an Android dependency" - legacyDisableKotlinStrictApiMode = true } From 9d9b277640c1e9292f42b1cf9b2676d6247f39b7 Mon Sep 17 00:00:00 2001 From: Yuri Schimke Date: Thu, 17 Sep 2026 09:56:01 -0700 Subject: [PATCH 09/16] Migrate callers to RemoteState non-composable constructors Migrates callers across demos, samples, previews, and tests to use remember { ... } with the newly exposed non-composable state constructors and factory functions. Test: ./gradlew :compose:remote:remote-creation-compose:test Bug: 484137042 Change-Id: Ia1b2c3d4e5f60718293a4b5c6d7e8f9a0b1c2d3e TAG=agy CONV=deef833f-bcbd-4202-9c4e-eca461ab9c6d --- .../samples/RemoteBasicImageSample.kt | 11 ++- .../tests/benchmark/RemoteComposeBenchmark.kt | 5 +- .../demos/integration/DragPropagationDemo.kt | 10 +-- .../integration/GesturePropagationViewDemo.kt | 12 +-- .../HorizontalDragPropagationDemo.kt | 4 +- .../demos/layout/RemoteStateLayoutDemos.kt | 19 +++-- .../RemotePlayerImageLoadingActivity.kt | 12 +-- .../target/RemotePlayerStateLayoutActivity.kt | 4 +- .../target/RemotePlayerStateUpdateActivity.kt | 6 +- .../previews/RcPlayerLayoutPreview.kt | 5 +- .../view/demos/RemoteNotificationList.kt | 14 ++-- .../view/demos/UberDocumentCompositor.kt | 7 +- .../examples/RcStateLayoutRowToColumnDemo.kt | 5 +- .../demos/examples/RcStateLayoutToggleDemo.kt | 5 +- .../view/demos/examples/ScrollView.kt | 5 +- .../view/demos/examples/SwitchWidget.kt | 8 +- .../demos/examples/TestDrawContentDemo.kt | 5 +- .../compose/previews/RemoteFitBoxPreview.kt | 5 +- .../compose/samples/RemoteImageSample.kt | 11 ++- .../samples/RemoteStateLayoutSample.kt | 13 ++-- .../creation/compose/samples/ScrollSample.kt | 7 +- .../compose/remote/a11y/BasicA11yTest.kt | 8 +- .../compose/remote/a11y/ListA11yTest.kt | 5 +- .../creation/compose/action/HostActionTest.kt | 9 ++- .../compose/layout/RemoteBrushTest.kt | 13 ++-- .../RemoteCustomComponentScreenshotTest.kt | 25 ++++--- .../layout/RemoteCustomComponentTest.kt | 59 +++++++++------ .../compose/layout/RemoteImageTest.kt | 34 +++++---- .../compose/layout/StateLayoutTest.kt | 9 ++- .../modifier/BackgroundModifierTest.kt | 5 +- .../compose/modifier/ClipModifierTest.kt | 5 +- .../modifier/ScrollModifierScreenshotTest.kt | 11 +-- .../RemoteColorCompositeOverScreenshotTest.kt | 22 ++++-- .../creation/compose/state/RemoteStateTest.kt | 71 +++++++++++------- .../compose/remote/BasicLayoutTest.kt | 23 +++--- .../creation/compose/RemoteComposeTest.kt | 5 +- .../creation/compose/action/HostActionTest.kt | 7 +- .../state/NamedVariableDiscardedTest.kt | 74 +++++++++++++------ .../creation/compose/state/RemoteColorTest.kt | 3 +- .../creation/compose/state/RemoteFloatTest.kt | 19 +++-- .../compose/state/RemoteStateCreationTest.kt | 71 +++++++++++------- .../compose/state/RemoteStateOverrideTest.kt | 13 +++- .../creation/compose/state/RemoteStateTest.kt | 19 +++-- .../compose/embedded/RcPlayerAnimationTest.kt | 17 +++-- .../embedded/RcPlayerGraphicsLayerTest.kt | 7 +- .../embedded/RcPlayerInteractivityTest.kt | 36 ++++----- .../embedded/RcPlayerPrimitivesTest.kt | 50 +++++++------ .../compose/embedded/RcPlayerStateTest.kt | 54 ++++++++------ .../RemoteContentTestRuleScreenshotTest.kt | 5 +- .../RemoteSharedTestRuleScreenshotTest.kt | 5 +- .../RemoteContentTestRuleScreenshotTest.kt | 5 +- .../components/RemotePageIndicatorDemos.kt | 16 ++-- .../material3/previews/RemoteButtonPreview.kt | 13 ++-- .../material3/previews/RemoteCardPreview.kt | 13 ++-- .../material3/previews/RemoteIconPreview.kt | 5 +- .../previews/RemotePageIndicatorPreview.kt | 7 +- .../material3/previews/RemoteSliderPreview.kt | 9 ++- .../previews/RemoteStepperPreview.kt | 7 +- .../previews/RemoteTitleCardPreview.kt | 8 +- .../material3/samples/RemoteButtonSample.kt | 5 +- .../material3/samples/RemoteCardSample.kt | 8 +- .../samples/RemoteCheckboxButtonSample.kt | 5 +- .../RemoteCircularProgressIndicatorSample.kt | 5 +- .../samples/RemoteCompactButtonSample.kt | 5 +- .../RemoteCurvedProgressIndicatorSample.kt | 5 +- .../samples/RemoteEdgeButtonSample.kt | 11 +-- .../RemoteLinearProgressIndicatorSample.kt | 5 +- .../samples/RemoteRadioButtonSample.kt | 5 +- .../material3/samples/RemoteSliderSample.kt | 9 ++- .../RemoteSplitCheckboxButtonSample.kt | 5 +- .../samples/RemoteSplitRadioButtonSample.kt | 5 +- .../samples/RemoteSplitSwitchButtonSample.kt | 5 +- .../material3/samples/RemoteStepperSample.kt | 9 ++- .../samples/RemoteSwitchButtonSample.kt | 5 +- .../samples/RemoteTextButtonSample.kt | 5 +- .../samples/RemoteTitleCardSample.kt | 8 +- .../remote/material3/RemoteButtonTest.kt | 15 ++-- .../remote/material3/RemoteTextTest.kt | 23 ++++-- 78 files changed, 652 insertions(+), 431 deletions(-) diff --git a/compose/remote/foundation/foundation/samples/src/main/java/androidx/compose/remote/foundation/samples/RemoteBasicImageSample.kt b/compose/remote/foundation/foundation/samples/src/main/java/androidx/compose/remote/foundation/samples/RemoteBasicImageSample.kt index 96da2e6b15352..c131af5dffd49 100644 --- a/compose/remote/foundation/foundation/samples/src/main/java/androidx/compose/remote/foundation/samples/RemoteBasicImageSample.kt +++ b/compose/remote/foundation/foundation/samples/src/main/java/androidx/compose/remote/foundation/samples/RemoteBasicImageSample.kt @@ -19,12 +19,13 @@ package androidx.compose.remote.foundation.samples import androidx.annotation.Sampled import androidx.compose.remote.creation.compose.modifier.RemoteModifier import androidx.compose.remote.creation.compose.modifier.size +import androidx.compose.remote.creation.compose.state.RemoteImageBitmap import androidx.compose.remote.creation.compose.state.rdp -import androidx.compose.remote.creation.compose.state.rememberRemoteImageBitmap import androidx.compose.remote.creation.compose.state.rs import androidx.compose.remote.foundation.image.RemoteBasicImage import androidx.compose.remote.tooling.preview.RemotePreviewWrapper import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.tooling.preview.PreviewWrapper @@ -32,7 +33,9 @@ import androidx.compose.ui.tooling.preview.PreviewWrapper @PreviewWrapper(RemotePreviewWrapper::class) @Composable fun RemoteBasicImageSample() { - val remoteBitmap = rememberRemoteImageBitmap(url = "https://example.com/placeholder.png") + val remoteBitmap = remember { + RemoteImageBitmap(url = "https://example.com/placeholder.png") + } RemoteBasicImage( remoteBitmap = remoteBitmap, contentDescription = "Sample Image".rs, @@ -44,7 +47,9 @@ fun RemoteBasicImageSample() { @PreviewWrapper(RemotePreviewWrapper::class) @Composable fun RemoteBasicImageFitSample() { - val remoteBitmap = rememberRemoteImageBitmap(url = "https://example.com/placeholder.png") + val remoteBitmap = remember { + RemoteImageBitmap(url = "https://example.com/placeholder.png") + } RemoteBasicImage( remoteBitmap = remoteBitmap, contentDescription = "Sample Image Fit".rs, diff --git a/compose/remote/integration-tests/benchmark/src/androidTest/java/androidx/compose/remote/integration/tests/benchmark/RemoteComposeBenchmark.kt b/compose/remote/integration-tests/benchmark/src/androidTest/java/androidx/compose/remote/integration/tests/benchmark/RemoteComposeBenchmark.kt index 0ee0f2f11a5a4..a498781805f0f 100644 --- a/compose/remote/integration-tests/benchmark/src/androidTest/java/androidx/compose/remote/integration/tests/benchmark/RemoteComposeBenchmark.kt +++ b/compose/remote/integration-tests/benchmark/src/androidTest/java/androidx/compose/remote/integration/tests/benchmark/RemoteComposeBenchmark.kt @@ -22,14 +22,15 @@ import androidx.compose.remote.creation.compose.capture.captureSingleRemoteDocum import androidx.compose.remote.creation.compose.layout.RemoteColumn import androidx.compose.remote.creation.compose.layout.RemoteText import androidx.compose.remote.creation.compose.modifier.RemoteModifier +import androidx.compose.remote.creation.compose.modifier.RemoteScrollState import androidx.compose.remote.creation.compose.modifier.fillMaxSize import androidx.compose.remote.creation.compose.modifier.fillMaxWidth import androidx.compose.remote.creation.compose.modifier.padding -import androidx.compose.remote.creation.compose.modifier.rememberRemoteScrollState import androidx.compose.remote.creation.compose.modifier.verticalScroll import androidx.compose.remote.creation.compose.state.rdp import androidx.compose.remote.creation.compose.state.rs import androidx.compose.remote.creation.profile.RcPlatformProfiles +import androidx.compose.runtime.remember import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.platform.app.InstrumentationRegistry import kotlinx.coroutines.runBlocking @@ -50,7 +51,7 @@ class RemoteComposeBenchmark { profile = RcPlatformProfiles.ANDROIDX, context = InstrumentationRegistry.getInstrumentation().context, ) { - val scrollState = rememberRemoteScrollState() + val scrollState = remember { RemoteScrollState() } RemoteColumn( modifier = RemoteModifier.fillMaxSize().verticalScroll(scrollState) ) { diff --git a/compose/remote/integration-tests/demos/src/main/java/androidx/compose/remote/integration/demos/integration/DragPropagationDemo.kt b/compose/remote/integration-tests/demos/src/main/java/androidx/compose/remote/integration/demos/integration/DragPropagationDemo.kt index 476f9a0877ceb..617c2a63ef1e2 100644 --- a/compose/remote/integration-tests/demos/src/main/java/androidx/compose/remote/integration/demos/integration/DragPropagationDemo.kt +++ b/compose/remote/integration-tests/demos/src/main/java/androidx/compose/remote/integration/demos/integration/DragPropagationDemo.kt @@ -41,6 +41,7 @@ import androidx.compose.remote.creation.compose.layout.RemoteColumn import androidx.compose.remote.creation.compose.layout.RemoteRow import androidx.compose.remote.creation.compose.layout.RemoteText import androidx.compose.remote.creation.compose.modifier.RemoteModifier +import androidx.compose.remote.creation.compose.modifier.RemoteScrollState import androidx.compose.remote.creation.compose.modifier.background import androidx.compose.remote.creation.compose.modifier.clickable import androidx.compose.remote.creation.compose.modifier.fillMaxSize @@ -49,11 +50,10 @@ import androidx.compose.remote.creation.compose.modifier.height import androidx.compose.remote.creation.compose.modifier.onTouchDown import androidx.compose.remote.creation.compose.modifier.onTouchUp import androidx.compose.remote.creation.compose.modifier.padding -import androidx.compose.remote.creation.compose.modifier.rememberRemoteScrollState import androidx.compose.remote.creation.compose.modifier.verticalScroll +import androidx.compose.remote.creation.compose.state.MutableRemoteInt import androidx.compose.remote.creation.compose.state.rc import androidx.compose.remote.creation.compose.state.rdp -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteInt import androidx.compose.remote.creation.compose.state.rs import androidx.compose.remote.integration.demos.common.RemoteDemo import androidx.compose.runtime.Composable @@ -139,8 +139,8 @@ fun DragPropagationDemo() { } }, ) { - val valueChangeClicks = rememberMutableRemoteInt(0) - val touchValueClicks = rememberMutableRemoteInt(0) + val valueChangeClicks = remember { MutableRemoteInt(0) } + val touchValueClicks = remember { MutableRemoteInt(0) } RemoteColumn( modifier = RemoteModifier.fillMaxSize().padding(8.rdp), horizontalAlignment = RemoteAlignment.CenterHorizontally, @@ -246,7 +246,7 @@ fun DragPropagationDemo() { .padding(8.dp) ) { RemoteDemo(modifier = Modifier.fillMaxSize()) { - val scrollState = rememberRemoteScrollState() + val scrollState = remember { RemoteScrollState() } RemoteColumn( modifier = RemoteModifier.fillMaxSize().verticalScroll(scrollState).padding(8.rdp) diff --git a/compose/remote/integration-tests/demos/src/main/java/androidx/compose/remote/integration/demos/integration/GesturePropagationViewDemo.kt b/compose/remote/integration-tests/demos/src/main/java/androidx/compose/remote/integration/demos/integration/GesturePropagationViewDemo.kt index 97ac9b94d014d..3ad9741c67830 100644 --- a/compose/remote/integration-tests/demos/src/main/java/androidx/compose/remote/integration/demos/integration/GesturePropagationViewDemo.kt +++ b/compose/remote/integration-tests/demos/src/main/java/androidx/compose/remote/integration/demos/integration/GesturePropagationViewDemo.kt @@ -40,20 +40,20 @@ import androidx.compose.remote.creation.compose.layout.RemoteComposable import androidx.compose.remote.creation.compose.layout.RemoteRow import androidx.compose.remote.creation.compose.layout.RemoteText import androidx.compose.remote.creation.compose.modifier.RemoteModifier +import androidx.compose.remote.creation.compose.modifier.RemoteScrollState import androidx.compose.remote.creation.compose.modifier.background import androidx.compose.remote.creation.compose.modifier.clickable import androidx.compose.remote.creation.compose.modifier.combinedClickable import androidx.compose.remote.creation.compose.modifier.fillMaxSize import androidx.compose.remote.creation.compose.modifier.height import androidx.compose.remote.creation.compose.modifier.padding -import androidx.compose.remote.creation.compose.modifier.rememberRemoteScrollState import androidx.compose.remote.creation.compose.modifier.size import androidx.compose.remote.creation.compose.modifier.verticalScroll import androidx.compose.remote.creation.compose.modifier.width +import androidx.compose.remote.creation.compose.state.MutableRemoteInt import androidx.compose.remote.creation.compose.state.RemoteColor import androidx.compose.remote.creation.compose.state.rc import androidx.compose.remote.creation.compose.state.rdp -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteInt import androidx.compose.remote.creation.compose.state.rs import androidx.compose.remote.creation.profile.Profile import androidx.compose.remote.creation.profile.RcPlatformProfiles @@ -114,10 +114,10 @@ fun GesturePropagationViewDemo() { @Composable @RemoteComposable private fun GesturePropagationViewDemoContent(applyVerticalScroll: Boolean) { - val scrollState = rememberRemoteScrollState() - val clickCount = rememberMutableRemoteInt(0) - val doubleClickCount = rememberMutableRemoteInt(0) - val longClickCount = rememberMutableRemoteInt(0) + val scrollState = remember { RemoteScrollState() } + val clickCount = remember { MutableRemoteInt(0) } + val doubleClickCount = remember { MutableRemoteInt(0) } + val longClickCount = remember { MutableRemoteInt(0) } RemoteColumn( modifier = RemoteModifier.fillMaxSize() diff --git a/compose/remote/integration-tests/demos/src/main/java/androidx/compose/remote/integration/demos/integration/HorizontalDragPropagationDemo.kt b/compose/remote/integration-tests/demos/src/main/java/androidx/compose/remote/integration/demos/integration/HorizontalDragPropagationDemo.kt index 12cd008915f4f..b4159259dfcee 100644 --- a/compose/remote/integration-tests/demos/src/main/java/androidx/compose/remote/integration/demos/integration/HorizontalDragPropagationDemo.kt +++ b/compose/remote/integration-tests/demos/src/main/java/androidx/compose/remote/integration/demos/integration/HorizontalDragPropagationDemo.kt @@ -59,12 +59,12 @@ import androidx.compose.remote.creation.compose.layout.RemoteColumn import androidx.compose.remote.creation.compose.layout.RemoteComposable import androidx.compose.remote.creation.compose.layout.RemoteText import androidx.compose.remote.creation.compose.modifier.RemoteModifier +import androidx.compose.remote.creation.compose.modifier.RemoteScrollState import androidx.compose.remote.creation.compose.modifier.background import androidx.compose.remote.creation.compose.modifier.fillMaxSize import androidx.compose.remote.creation.compose.modifier.fillMaxWidth import androidx.compose.remote.creation.compose.modifier.height import androidx.compose.remote.creation.compose.modifier.padding -import androidx.compose.remote.creation.compose.modifier.rememberRemoteScrollState import androidx.compose.remote.creation.compose.modifier.verticalScroll import androidx.compose.remote.creation.compose.state.rc import androidx.compose.remote.creation.compose.state.rdp @@ -647,7 +647,7 @@ private fun HostPageCard( @Composable @RemoteComposable private fun VerticalScrollDemoContent() { - val scrollState = rememberRemoteScrollState() + val scrollState = remember { RemoteScrollState() } RemoteColumn( modifier = RemoteModifier.fillMaxSize().verticalScroll(scrollState).padding(8.rdp) ) { diff --git a/compose/remote/integration-tests/demos/src/main/java/androidx/compose/remote/integration/demos/layout/RemoteStateLayoutDemos.kt b/compose/remote/integration-tests/demos/src/main/java/androidx/compose/remote/integration/demos/layout/RemoteStateLayoutDemos.kt index 0e55a9cdbd2f0..9f34a348eb022 100644 --- a/compose/remote/integration-tests/demos/src/main/java/androidx/compose/remote/integration/demos/layout/RemoteStateLayoutDemos.kt +++ b/compose/remote/integration-tests/demos/src/main/java/androidx/compose/remote/integration/demos/layout/RemoteStateLayoutDemos.kt @@ -62,13 +62,12 @@ import androidx.compose.remote.creation.compose.modifier.rotate import androidx.compose.remote.creation.compose.modifier.size import androidx.compose.remote.creation.compose.modifier.width import androidx.compose.remote.creation.compose.shapes.RemoteRoundedCornerShape +import androidx.compose.remote.creation.compose.state.MutableRemoteBoolean import androidx.compose.remote.creation.compose.state.MutableRemoteInt import androidx.compose.remote.creation.compose.state.RemoteDp import androidx.compose.remote.creation.compose.state.RemoteInt.Companion.createNamedRemoteInt import androidx.compose.remote.creation.compose.state.rc import androidx.compose.remote.creation.compose.state.rdp -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteBoolean -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteInt import androidx.compose.remote.creation.compose.state.rf import androidx.compose.remote.creation.compose.state.ri import androidx.compose.remote.creation.compose.state.rs @@ -155,7 +154,7 @@ fun RemoteStateLayoutSimpleDemo() { @Composable @RemoteComposable private fun RemoteStateLayoutCardExpansion() { - val isExpanded = rememberMutableRemoteBoolean(false) + val isExpanded = remember { MutableRemoteBoolean(false) } RemoteBox( modifier = @@ -347,7 +346,7 @@ private fun RemoteStateLayoutCardExpansion() { @Composable @RemoteComposable private fun RemoteStateLayoutMediaPlayer() { - val isFullScreen = rememberMutableRemoteBoolean(false) + val isFullScreen = remember { MutableRemoteBoolean(false) } RemoteBox( modifier = @@ -546,7 +545,7 @@ private fun RemoteStateLayoutMediaPlayer() { @Composable @RemoteComposable private fun RemoteStateLayoutMorphGrid() { - val morphState = rememberMutableRemoteInt(0) + val morphState = remember { MutableRemoteInt(0) } RemoteColumn( horizontalAlignment = RemoteAlignment.CenterHorizontally, @@ -766,7 +765,7 @@ private fun TilePreview() { @Composable @RemoteComposable private fun RemoteStateLayoutModifierTransitions() { - val styleState = rememberMutableRemoteInt(0) + val styleState = remember { MutableRemoteInt(0) } RemoteColumn( horizontalAlignment = RemoteAlignment.CenterHorizontally, @@ -1083,7 +1082,7 @@ private fun RemoteStateLayoutModifierTransitions() { @Composable @RemoteComposable private fun RemoteStateLayoutTabContent() { - val activeTab = rememberMutableRemoteInt(0) + val activeTab = remember { MutableRemoteInt(0) } RemoteColumn( modifier = @@ -1331,7 +1330,7 @@ private fun MetricBar(label: String, percent: Int, barWidth: Int) { @Composable @RemoteComposable private fun RemoteStateLayoutStepperInterruption() { - val step = rememberMutableRemoteInt(0) + val step = remember { MutableRemoteInt(0) } RemoteColumn( modifier = @@ -1483,8 +1482,8 @@ private fun RemoteStateLayoutStepperInterruption() { @Composable @RemoteComposable private fun RemoteStateLayoutNestedDashboard() { - val outerExpanded = rememberMutableRemoteBoolean(false) - val innerStatus = rememberMutableRemoteInt(0) + val outerExpanded = remember { MutableRemoteBoolean(false) } + val innerStatus = remember { MutableRemoteInt(0) } RemoteColumn( modifier = diff --git a/compose/remote/integration-tests/macrobenchmark-target/src/main/java/androidx/compose/remote/integration/macrobenchmark/target/RemotePlayerImageLoadingActivity.kt b/compose/remote/integration-tests/macrobenchmark-target/src/main/java/androidx/compose/remote/integration/macrobenchmark/target/RemotePlayerImageLoadingActivity.kt index 55d9caa2b523c..688ae456049e9 100644 --- a/compose/remote/integration-tests/macrobenchmark-target/src/main/java/androidx/compose/remote/integration/macrobenchmark/target/RemotePlayerImageLoadingActivity.kt +++ b/compose/remote/integration-tests/macrobenchmark-target/src/main/java/androidx/compose/remote/integration/macrobenchmark/target/RemotePlayerImageLoadingActivity.kt @@ -41,8 +41,8 @@ import androidx.compose.remote.creation.compose.modifier.fillMaxSize import androidx.compose.remote.creation.compose.modifier.padding import androidx.compose.remote.creation.compose.modifier.semantics import androidx.compose.remote.creation.compose.modifier.size +import androidx.compose.remote.creation.compose.state.RemoteImageBitmap.Companion.createNamedRemoteImageBitmap import androidx.compose.remote.creation.compose.state.rdp -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteImageBitmap import androidx.compose.remote.creation.compose.state.rs import androidx.compose.remote.creation.compose.state.rsp import androidx.compose.remote.creation.profile.RcPlatformProfiles @@ -147,11 +147,12 @@ class RemotePlayerImageLoadingActivity : ComponentActivity() { ) { for (i in 0 until 3) { val hex = colors[i] - val bitmap = - rememberNamedRemoteImageBitmap( + val bitmap = remember { + createNamedRemoteImageBitmap( name = "img_$i", url = "color://$hex", ) + } RemoteImage( remoteBitmap = bitmap, contentDescription = "Image $i".rs, @@ -165,11 +166,12 @@ class RemotePlayerImageLoadingActivity : ComponentActivity() { RemoteRow(horizontalArrangement = RemoteArrangement.Center) { for (i in 3 until 6) { val hex = colors[i] - val bitmap = - rememberNamedRemoteImageBitmap( + val bitmap = remember { + createNamedRemoteImageBitmap( name = "img_$i", url = "color://$hex", ) + } RemoteImage( remoteBitmap = bitmap, contentDescription = "Image $i".rs, diff --git a/compose/remote/integration-tests/macrobenchmark-target/src/main/java/androidx/compose/remote/integration/macrobenchmark/target/RemotePlayerStateLayoutActivity.kt b/compose/remote/integration-tests/macrobenchmark-target/src/main/java/androidx/compose/remote/integration/macrobenchmark/target/RemotePlayerStateLayoutActivity.kt index 5966f15844159..920b4c7ab4df6 100644 --- a/compose/remote/integration-tests/macrobenchmark-target/src/main/java/androidx/compose/remote/integration/macrobenchmark/target/RemotePlayerStateLayoutActivity.kt +++ b/compose/remote/integration-tests/macrobenchmark-target/src/main/java/androidx/compose/remote/integration/macrobenchmark/target/RemotePlayerStateLayoutActivity.kt @@ -40,9 +40,9 @@ import androidx.compose.remote.creation.compose.modifier.fillMaxWidth import androidx.compose.remote.creation.compose.modifier.height import androidx.compose.remote.creation.compose.modifier.padding import androidx.compose.remote.creation.compose.modifier.semantics +import androidx.compose.remote.creation.compose.state.RemoteInt.Companion.createNamedRemoteInt import androidx.compose.remote.creation.compose.state.rc import androidx.compose.remote.creation.compose.state.rdp -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteInt import androidx.compose.remote.creation.compose.state.rs import androidx.compose.remote.creation.compose.state.rsp import androidx.compose.remote.creation.profile.RcPlatformProfiles @@ -146,7 +146,7 @@ class RemotePlayerStateLayoutActivity : ComponentActivity() { profile = RcPlatformProfiles.ANDROIDX, context = context, ) { - val stateIndex = rememberNamedRemoteInt("stateIndex", 0) + val stateIndex = remember { createNamedRemoteInt("stateIndex", 0) } RemoteColumn( horizontalAlignment = RemoteAlignment.CenterHorizontally, verticalArrangement = RemoteArrangement.Center, diff --git a/compose/remote/integration-tests/macrobenchmark-target/src/main/java/androidx/compose/remote/integration/macrobenchmark/target/RemotePlayerStateUpdateActivity.kt b/compose/remote/integration-tests/macrobenchmark-target/src/main/java/androidx/compose/remote/integration/macrobenchmark/target/RemotePlayerStateUpdateActivity.kt index fcc6c7bec3aba..a08c05862842f 100644 --- a/compose/remote/integration-tests/macrobenchmark-target/src/main/java/androidx/compose/remote/integration/macrobenchmark/target/RemotePlayerStateUpdateActivity.kt +++ b/compose/remote/integration-tests/macrobenchmark-target/src/main/java/androidx/compose/remote/integration/macrobenchmark/target/RemotePlayerStateUpdateActivity.kt @@ -35,8 +35,8 @@ import androidx.compose.remote.creation.compose.modifier.contentDescription import androidx.compose.remote.creation.compose.modifier.fillMaxSize import androidx.compose.remote.creation.compose.modifier.padding import androidx.compose.remote.creation.compose.modifier.semantics +import androidx.compose.remote.creation.compose.state.RemoteString.Companion.createNamedRemoteString import androidx.compose.remote.creation.compose.state.rdp -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteString import androidx.compose.remote.creation.compose.state.rs import androidx.compose.remote.creation.compose.state.rsp import androidx.compose.remote.creation.profile.RcPlatformProfiles @@ -138,7 +138,9 @@ class RemotePlayerStateUpdateActivity : ComponentActivity() { profile = RcPlatformProfiles.ANDROIDX, context = context, ) { - val counterText = rememberNamedRemoteString("counterText", "Count: 0") + val counterText = remember { + createNamedRemoteString("counterText", "Count: 0") + } RemoteColumn( horizontalAlignment = RemoteAlignment.CenterHorizontally, verticalArrangement = RemoteArrangement.Center, diff --git a/compose/remote/integration-tests/player-compose-embedded/src/main/java/androidx/wear/compose/remote/material3/previews/RcPlayerLayoutPreview.kt b/compose/remote/integration-tests/player-compose-embedded/src/main/java/androidx/wear/compose/remote/material3/previews/RcPlayerLayoutPreview.kt index 1bded6ba93762..e4e8e56f8e695 100644 --- a/compose/remote/integration-tests/player-compose-embedded/src/main/java/androidx/wear/compose/remote/material3/previews/RcPlayerLayoutPreview.kt +++ b/compose/remote/integration-tests/player-compose-embedded/src/main/java/androidx/wear/compose/remote/material3/previews/RcPlayerLayoutPreview.kt @@ -44,9 +44,9 @@ import androidx.compose.remote.creation.compose.modifier.padding import androidx.compose.remote.creation.compose.modifier.size import androidx.compose.remote.creation.compose.modifier.width import androidx.compose.remote.creation.compose.shapes.RemoteRoundedCornerShape +import androidx.compose.remote.creation.compose.state.MutableRemoteBoolean import androidx.compose.remote.creation.compose.state.rc import androidx.compose.remote.creation.compose.state.rdp -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteBoolean import androidx.compose.remote.creation.compose.state.rf import androidx.compose.remote.creation.compose.state.rs import androidx.compose.remote.creation.compose.state.rsp @@ -54,6 +54,7 @@ import androidx.compose.remote.player.compose.embedded.integration.previews.Expe import androidx.compose.remote.player.compose.embedded.integration.previews.utils.PlayerImpl import androidx.compose.remote.player.compose.embedded.integration.previews.utils.PlayerImplPreviewParameterProvider import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.font.FontWeight @@ -256,7 +257,7 @@ private fun RcStateLayoutSharedElementPreview( @PreviewParameter(PlayerImplPreviewParameterProvider::class) playerImpl: PlayerImpl ) = ExperimentalRemoteContentPreview(playerImpl = playerImpl) { - val isExpanded = rememberMutableRemoteBoolean(false) + val isExpanded = remember { MutableRemoteBoolean(false) } Frame { RemoteBox( modifier = diff --git a/compose/remote/integration-tests/player-view-demos/src/main/java/androidx/compose/remote/integration/view/demos/RemoteNotificationList.kt b/compose/remote/integration-tests/player-view-demos/src/main/java/androidx/compose/remote/integration/view/demos/RemoteNotificationList.kt index 2a40a7c0cdad7..166dce5607fd7 100644 --- a/compose/remote/integration-tests/player-view-demos/src/main/java/androidx/compose/remote/integration/view/demos/RemoteNotificationList.kt +++ b/compose/remote/integration-tests/player-view-demos/src/main/java/androidx/compose/remote/integration/view/demos/RemoteNotificationList.kt @@ -18,9 +18,9 @@ package androidx.compose.remote.integration.view.demos.examples import androidx.compose.remote.creation.compose.state.RemoteInt +import androidx.compose.remote.creation.compose.state.RemoteInt.Companion.createNamedRemoteInt import androidx.compose.remote.creation.compose.state.RemoteString -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteInt -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteString +import androidx.compose.remote.creation.compose.state.RemoteString.Companion.createNamedRemoteString import androidx.compose.runtime.Composable import androidx.compose.runtime.remember @@ -34,11 +34,15 @@ fun rememberRemoteNotificationList( maxSize: Int, initialSize: Int = 3, ): RemoteNotificationList { - val size = rememberNamedRemoteInt("${name}.size", initialSize) + val size = remember { createNamedRemoteInt("${name}.size", initialSize) } val items = List(maxSize) { index -> - val title = rememberNamedRemoteString("${name}.${index}.title", "Default Title $index") - val text = rememberNamedRemoteString("${name}.${index}.text", "Default Text $index") + val title = remember { + createNamedRemoteString("${name}.${index}.title", "Default Title $index") + } + val text = remember { + createNamedRemoteString("${name}.${index}.text", "Default Text $index") + } NotificationItem(title, text) } return remember(size, items) { RemoteNotificationList(size, items) } diff --git a/compose/remote/integration-tests/player-view-demos/src/main/java/androidx/compose/remote/integration/view/demos/UberDocumentCompositor.kt b/compose/remote/integration-tests/player-view-demos/src/main/java/androidx/compose/remote/integration/view/demos/UberDocumentCompositor.kt index 9ccac1b0fcc38..cf2a6094d0371 100644 --- a/compose/remote/integration-tests/player-view-demos/src/main/java/androidx/compose/remote/integration/view/demos/UberDocumentCompositor.kt +++ b/compose/remote/integration-tests/player-view-demos/src/main/java/androidx/compose/remote/integration/view/demos/UberDocumentCompositor.kt @@ -20,8 +20,9 @@ package androidx.compose.remote.integration.view.demos.examples import androidx.compose.remote.creation.compose.layout.RemoteBox import androidx.compose.remote.creation.compose.modifier.RemoteModifier import androidx.compose.remote.creation.compose.modifier.visibility -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteInt +import androidx.compose.remote.creation.compose.state.RemoteInt.Companion.createNamedRemoteInt import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember class RemoteLayer(val name: String, val visibility: Int = 1, val content: @Composable () -> Unit) @@ -31,7 +32,9 @@ fun UberDocumentCompositor(vararg layers: RemoteLayer) { // The first layer in the list is the bottom layer. RemoteBox(modifier = RemoteModifier) { for (layer in layers) { - val visibilityFlag = rememberNamedRemoteInt("layer.${layer.name}", layer.visibility) + val visibilityFlag = remember { + createNamedRemoteInt("layer.${layer.name}", layer.visibility) + } RemoteBox(modifier = RemoteModifier.visibility(visibilityFlag)) { layer.content() } } } diff --git a/compose/remote/integration-tests/player-view-demos/src/main/java/androidx/compose/remote/integration/view/demos/examples/RcStateLayoutRowToColumnDemo.kt b/compose/remote/integration-tests/player-view-demos/src/main/java/androidx/compose/remote/integration/view/demos/examples/RcStateLayoutRowToColumnDemo.kt index 9a344480dcda8..f6438133d0ead 100644 --- a/compose/remote/integration-tests/player-view-demos/src/main/java/androidx/compose/remote/integration/view/demos/examples/RcStateLayoutRowToColumnDemo.kt +++ b/compose/remote/integration-tests/player-view-demos/src/main/java/androidx/compose/remote/integration/view/demos/examples/RcStateLayoutRowToColumnDemo.kt @@ -50,14 +50,15 @@ import androidx.compose.remote.creation.compose.modifier.padding import androidx.compose.remote.creation.compose.modifier.size import androidx.compose.remote.creation.compose.modifier.width import androidx.compose.remote.creation.compose.shapes.RemoteRoundedCornerShape +import androidx.compose.remote.creation.compose.state.MutableRemoteBoolean import androidx.compose.remote.creation.compose.state.rc import androidx.compose.remote.creation.compose.state.rdp -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteBoolean import androidx.compose.remote.creation.compose.state.rs import androidx.compose.remote.creation.compose.state.rsp import androidx.compose.remote.creation.modifiers.RoundedRectShape import androidx.compose.remote.creation.platform.AndroidxRcPlatformServices import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember /** * Demo showing a StateLayout transition with 3 colored boxes. State 0 arranges the 3 boxes @@ -144,7 +145,7 @@ fun RcStateLayoutRowToColumnDemo(): RemoteComposeContext { @Composable @RemoteComposable fun StateLayoutRowToColumnDemo() { - val isEndState = rememberMutableRemoteBoolean(false) + val isEndState = remember { MutableRemoteBoolean(false) } RemoteColumn( modifier = RemoteModifier.fillMaxSize().padding(16.rdp), diff --git a/compose/remote/integration-tests/player-view-demos/src/main/java/androidx/compose/remote/integration/view/demos/examples/RcStateLayoutToggleDemo.kt b/compose/remote/integration-tests/player-view-demos/src/main/java/androidx/compose/remote/integration/view/demos/examples/RcStateLayoutToggleDemo.kt index ff15e9c477c7b..78f53af827b70 100644 --- a/compose/remote/integration-tests/player-view-demos/src/main/java/androidx/compose/remote/integration/view/demos/examples/RcStateLayoutToggleDemo.kt +++ b/compose/remote/integration-tests/player-view-demos/src/main/java/androidx/compose/remote/integration/view/demos/examples/RcStateLayoutToggleDemo.kt @@ -39,13 +39,14 @@ import androidx.compose.remote.creation.compose.modifier.padding import androidx.compose.remote.creation.compose.modifier.size import androidx.compose.remote.creation.compose.modifier.width import androidx.compose.remote.creation.compose.shapes.RemoteRoundedCornerShape +import androidx.compose.remote.creation.compose.state.MutableRemoteBoolean import androidx.compose.remote.creation.compose.state.rc import androidx.compose.remote.creation.compose.state.rdp -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteBoolean import androidx.compose.remote.creation.compose.state.rs import androidx.compose.remote.creation.compose.state.rsp import androidx.compose.remote.tooling.preview.RemoteContentPreview import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.graphics.Color import androidx.compose.ui.tooling.preview.Preview @@ -53,7 +54,7 @@ import androidx.compose.ui.tooling.preview.Preview @Composable @RemoteComposable fun StateLayoutToggleDemo() { - val isEndState = rememberMutableRemoteBoolean(false) + val isEndState = remember { MutableRemoteBoolean(false) } RemoteColumn( modifier = RemoteModifier.fillMaxSize().padding(16.rdp), diff --git a/compose/remote/integration-tests/player-view-demos/src/main/java/androidx/compose/remote/integration/view/demos/examples/ScrollView.kt b/compose/remote/integration-tests/player-view-demos/src/main/java/androidx/compose/remote/integration/view/demos/examples/ScrollView.kt index 7bd64ee60b409..3bf90e2f4488a 100644 --- a/compose/remote/integration-tests/player-view-demos/src/main/java/androidx/compose/remote/integration/view/demos/examples/ScrollView.kt +++ b/compose/remote/integration-tests/player-view-demos/src/main/java/androidx/compose/remote/integration/view/demos/examples/ScrollView.kt @@ -27,6 +27,7 @@ import androidx.compose.remote.creation.compose.layout.RemoteComposable import androidx.compose.remote.creation.compose.layout.RemoteRow import androidx.compose.remote.creation.compose.layout.RemoteText import androidx.compose.remote.creation.compose.modifier.RemoteModifier +import androidx.compose.remote.creation.compose.modifier.RemoteScrollState import androidx.compose.remote.creation.compose.modifier.background import androidx.compose.remote.creation.compose.modifier.clip import androidx.compose.remote.creation.compose.modifier.fillMaxHeight @@ -34,7 +35,6 @@ import androidx.compose.remote.creation.compose.modifier.fillMaxWidth import androidx.compose.remote.creation.compose.modifier.graphicsLayer import androidx.compose.remote.creation.compose.modifier.height import androidx.compose.remote.creation.compose.modifier.padding -import androidx.compose.remote.creation.compose.modifier.rememberRemoteScrollState import androidx.compose.remote.creation.compose.modifier.size import androidx.compose.remote.creation.compose.modifier.verticalScroll import androidx.compose.remote.creation.compose.modifier.width @@ -52,6 +52,7 @@ import androidx.compose.remote.creation.compose.text.RemoteTypeface import androidx.compose.remote.creation.compose.text.RemoteTypeface.Companion.create import androidx.compose.remote.tooling.preview.RemoteContentPreview import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.tooling.preview.Preview @@ -191,7 +192,7 @@ fun CanvasCalendarMonth(modifier: RemoteModifier = RemoteModifier, month: Int = @RemoteComposable fun ScrollViewDemo() { val numElements = 12 - val scrollState = rememberRemoteScrollState(notches = numElements) + val scrollState = remember { RemoteScrollState(notches = numElements) } val dimensionCard = 280.rdp RemoteBox(modifier = RemoteModifier, contentAlignment = RemoteAlignment.BottomEnd) { val height = dimensionCard.toPx() diff --git a/compose/remote/integration-tests/player-view-demos/src/main/java/androidx/compose/remote/integration/view/demos/examples/SwitchWidget.kt b/compose/remote/integration-tests/player-view-demos/src/main/java/androidx/compose/remote/integration/view/demos/examples/SwitchWidget.kt index 29aa2bcf48c4a..64e196a38e873 100644 --- a/compose/remote/integration-tests/player-view-demos/src/main/java/androidx/compose/remote/integration/view/demos/examples/SwitchWidget.kt +++ b/compose/remote/integration-tests/player-view-demos/src/main/java/androidx/compose/remote/integration/view/demos/examples/SwitchWidget.kt @@ -45,13 +45,13 @@ import androidx.compose.remote.creation.compose.state.RemoteInt import androidx.compose.remote.creation.compose.state.RemotePaint import androidx.compose.remote.creation.compose.state.rc import androidx.compose.remote.creation.compose.state.rdp -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteEnum import androidx.compose.remote.creation.compose.state.rf import androidx.compose.remote.creation.compose.state.ri import androidx.compose.remote.creation.compose.state.rs import androidx.compose.remote.integration.view.demos.examples.SwitchState.* import androidx.compose.remote.tooling.preview.RemoteContentPreview import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.graphics.Color import androidx.compose.ui.tooling.preview.Preview @@ -189,9 +189,9 @@ fun Divider(modifier: RemoteModifier = RemoteModifier) { @RemoteComposable fun SwitchWidgetDemo() { RemoteColumn(modifier = Modifier.padding(8.rdp).background(Color.LightGray.rc)) { - val checkedA = rememberMutableRemoteEnum(Off) - val checkedB = rememberMutableRemoteEnum(Off) - val checkedC = rememberMutableRemoteEnum(On) + val checkedA = remember { MutableRemoteEnum(Off) } + val checkedB = remember { MutableRemoteEnum(Off) } + val checkedC = remember { MutableRemoteEnum(On) } val visibilityModifierC = RemoteModifier.visibility(checkedC.visibility) RowSwitch(checkedA, "State A") diff --git a/compose/remote/integration-tests/player-view-demos/src/main/java/androidx/compose/remote/integration/view/demos/examples/TestDrawContentDemo.kt b/compose/remote/integration-tests/player-view-demos/src/main/java/androidx/compose/remote/integration/view/demos/examples/TestDrawContentDemo.kt index 2d0a8e2a2f68e..657e2005a2384 100644 --- a/compose/remote/integration-tests/player-view-demos/src/main/java/androidx/compose/remote/integration/view/demos/examples/TestDrawContentDemo.kt +++ b/compose/remote/integration-tests/player-view-demos/src/main/java/androidx/compose/remote/integration/view/demos/examples/TestDrawContentDemo.kt @@ -31,21 +31,22 @@ import androidx.compose.remote.creation.compose.modifier.drawWithContent import androidx.compose.remote.creation.compose.modifier.height import androidx.compose.remote.creation.compose.modifier.visibility import androidx.compose.remote.creation.compose.modifier.width +import androidx.compose.remote.creation.compose.state.MutableRemoteInt import androidx.compose.remote.creation.compose.state.RemoteColor import androidx.compose.remote.creation.compose.state.RemotePaint import androidx.compose.remote.creation.compose.state.rc import androidx.compose.remote.creation.compose.state.rdp -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteInt import androidx.compose.remote.creation.compose.state.rf import androidx.compose.remote.creation.compose.state.rs import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.graphics.Color @Composable @RemoteComposable fun TestDrawContentDemo() { val rcFloat = 200f.rf - val visibility = rememberMutableRemoteInt(Component.Visibility.VISIBLE) + val visibility = remember { MutableRemoteInt(Component.Visibility.VISIBLE) } RemoteRow { RemoteBox( diff --git a/compose/remote/remote-creation-compose/samples/src/main/java/androidx/compose/remote/creation/compose/previews/RemoteFitBoxPreview.kt b/compose/remote/remote-creation-compose/samples/src/main/java/androidx/compose/remote/creation/compose/previews/RemoteFitBoxPreview.kt index c94c98f9fc0f7..9cbaa1330a525 100644 --- a/compose/remote/remote-creation-compose/samples/src/main/java/androidx/compose/remote/creation/compose/previews/RemoteFitBoxPreview.kt +++ b/compose/remote/remote-creation-compose/samples/src/main/java/androidx/compose/remote/creation/compose/previews/RemoteFitBoxPreview.kt @@ -29,11 +29,12 @@ import androidx.compose.remote.creation.compose.modifier.clickable import androidx.compose.remote.creation.compose.modifier.padding import androidx.compose.remote.creation.compose.modifier.size import androidx.compose.remote.creation.compose.previews.utils.RemoteComponentPreviewWrapper +import androidx.compose.remote.creation.compose.state.MutableRemoteBoolean import androidx.compose.remote.creation.compose.state.rc import androidx.compose.remote.creation.compose.state.rdp -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteBoolean import androidx.compose.remote.creation.compose.state.rs import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.graphics.Color import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewWrapper @@ -42,7 +43,7 @@ import androidx.compose.ui.tooling.preview.PreviewWrapper @PreviewWrapper(RemoteComponentPreviewWrapper::class) @Composable private fun RemoteFitBoxPreview() { - val useLargeSize = rememberMutableRemoteBoolean(true) + val useLargeSize = remember { MutableRemoteBoolean(true) } val containerSize = useLargeSize.select(200.rdp, 100.rdp) RemoteColumn(horizontalAlignment = RemoteAlignment.CenterHorizontally) { diff --git a/compose/remote/remote-creation-compose/samples/src/main/java/androidx/compose/remote/creation/compose/samples/RemoteImageSample.kt b/compose/remote/remote-creation-compose/samples/src/main/java/androidx/compose/remote/creation/compose/samples/RemoteImageSample.kt index a17da07d8e365..529013a693dcc 100644 --- a/compose/remote/remote-creation-compose/samples/src/main/java/androidx/compose/remote/creation/compose/samples/RemoteImageSample.kt +++ b/compose/remote/remote-creation-compose/samples/src/main/java/androidx/compose/remote/creation/compose/samples/RemoteImageSample.kt @@ -21,10 +21,11 @@ import androidx.compose.remote.creation.compose.layout.RemoteImage import androidx.compose.remote.creation.compose.modifier.RemoteModifier import androidx.compose.remote.creation.compose.modifier.size import androidx.compose.remote.creation.compose.previews.utils.RemoteComponentPreviewWrapper +import androidx.compose.remote.creation.compose.state.RemoteImageBitmap import androidx.compose.remote.creation.compose.state.rdp -import androidx.compose.remote.creation.compose.state.rememberRemoteImageBitmap import androidx.compose.remote.creation.compose.state.rs import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.tooling.preview.PreviewWrapper @@ -32,7 +33,9 @@ import androidx.compose.ui.tooling.preview.PreviewWrapper @PreviewWrapper(RemoteComponentPreviewWrapper::class) @Composable fun RemoteImageSample() { - val remoteBitmap = rememberRemoteImageBitmap(url = "https://example.com/placeholder.png") + val remoteBitmap = remember { + RemoteImageBitmap(url = "https://example.com/placeholder.png") + } RemoteImage( remoteBitmap = remoteBitmap, contentDescription = "Sample Remote Image".rs, @@ -45,7 +48,9 @@ fun RemoteImageSample() { @PreviewWrapper(RemoteComponentPreviewWrapper::class) @Composable fun RemoteImageFitSample() { - val remoteBitmap = rememberRemoteImageBitmap(url = "https://example.com/placeholder.png") + val remoteBitmap = remember { + RemoteImageBitmap(url = "https://example.com/placeholder.png") + } RemoteImage( remoteBitmap = remoteBitmap, contentDescription = "Fit Sample".rs, diff --git a/compose/remote/remote-creation-compose/samples/src/main/java/androidx/compose/remote/creation/compose/samples/RemoteStateLayoutSample.kt b/compose/remote/remote-creation-compose/samples/src/main/java/androidx/compose/remote/creation/compose/samples/RemoteStateLayoutSample.kt index 1a5aa9b5d4dec..086ef79612f43 100644 --- a/compose/remote/remote-creation-compose/samples/src/main/java/androidx/compose/remote/creation/compose/samples/RemoteStateLayoutSample.kt +++ b/compose/remote/remote-creation-compose/samples/src/main/java/androidx/compose/remote/creation/compose/samples/RemoteStateLayoutSample.kt @@ -20,12 +20,13 @@ import androidx.annotation.Sampled import androidx.compose.remote.creation.compose.layout.RemoteStateLayout import androidx.compose.remote.creation.compose.layout.RemoteText import androidx.compose.remote.creation.compose.previews.utils.RemoteComponentPreviewWrapper +import androidx.compose.remote.creation.compose.state.MutableRemoteBoolean +import androidx.compose.remote.creation.compose.state.MutableRemoteEnum +import androidx.compose.remote.creation.compose.state.MutableRemoteInt import androidx.compose.remote.creation.compose.state.rc -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteBoolean -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteEnum -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteInt import androidx.compose.remote.creation.compose.state.rs import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.graphics.Color import androidx.compose.ui.tooling.preview.PreviewWrapper @@ -33,7 +34,7 @@ import androidx.compose.ui.tooling.preview.PreviewWrapper @PreviewWrapper(RemoteComponentPreviewWrapper::class) @Composable fun RemoteStateLayoutBooleanSample() { - val state = rememberMutableRemoteBoolean(true) + val state = remember { MutableRemoteBoolean(true) } RemoteStateLayout(currentState = state) { isTrue -> if (isTrue) { RemoteText("True State".rs, color = Color.Green.rc) @@ -47,7 +48,7 @@ fun RemoteStateLayoutBooleanSample() { @PreviewWrapper(RemoteComponentPreviewWrapper::class) @Composable fun RemoteStateLayoutIntSample() { - val state = rememberMutableRemoteInt(0) + val state = remember { MutableRemoteInt(0) } RemoteStateLayout(currentState = state, 0, 1, 2) { index -> when (index) { 0 -> RemoteText("State 0".rs, color = Color.Red.rc) @@ -67,7 +68,7 @@ enum class SampleState { @PreviewWrapper(RemoteComponentPreviewWrapper::class) @Composable fun RemoteStateLayoutEnumSample() { - val state = rememberMutableRemoteEnum(SampleState.Loading) + val state = remember { MutableRemoteEnum(SampleState.Loading) } RemoteStateLayout(currentState = state) { screen -> when (screen) { SampleState.Loading -> RemoteText("Loading...".rs, color = Color.Gray.rc) diff --git a/compose/remote/remote-creation-compose/samples/src/main/java/androidx/compose/remote/creation/compose/samples/ScrollSample.kt b/compose/remote/remote-creation-compose/samples/src/main/java/androidx/compose/remote/creation/compose/samples/ScrollSample.kt index 34dd2421c65e3..ab62e301e051d 100644 --- a/compose/remote/remote-creation-compose/samples/src/main/java/androidx/compose/remote/creation/compose/samples/ScrollSample.kt +++ b/compose/remote/remote-creation-compose/samples/src/main/java/androidx/compose/remote/creation/compose/samples/ScrollSample.kt @@ -23,10 +23,10 @@ import androidx.compose.remote.creation.compose.layout.RemoteColumn import androidx.compose.remote.creation.compose.layout.RemoteRow import androidx.compose.remote.creation.compose.layout.RemoteText import androidx.compose.remote.creation.compose.modifier.RemoteModifier +import androidx.compose.remote.creation.compose.modifier.RemoteScrollState import androidx.compose.remote.creation.compose.modifier.background import androidx.compose.remote.creation.compose.modifier.horizontalScroll import androidx.compose.remote.creation.compose.modifier.padding -import androidx.compose.remote.creation.compose.modifier.rememberRemoteScrollState import androidx.compose.remote.creation.compose.modifier.size import androidx.compose.remote.creation.compose.modifier.verticalScroll import androidx.compose.remote.creation.compose.previews.utils.RemoteComponentPreviewWrapper @@ -34,6 +34,7 @@ import androidx.compose.remote.creation.compose.state.rc import androidx.compose.remote.creation.compose.state.rdp import androidx.compose.remote.creation.compose.state.rs import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.graphics.Color import androidx.compose.ui.tooling.preview.PreviewWrapper @@ -41,7 +42,7 @@ import androidx.compose.ui.tooling.preview.PreviewWrapper @PreviewWrapper(RemoteComponentPreviewWrapper::class) @Composable fun VerticalScrollSample() { - val scrollState = rememberRemoteScrollState() + val scrollState = remember { RemoteScrollState() } RemoteColumn( modifier = RemoteModifier.size(200.rdp).background(Color.LightGray.rc).verticalScroll(scrollState) @@ -62,7 +63,7 @@ fun VerticalScrollSample() { @PreviewWrapper(RemoteComponentPreviewWrapper::class) @Composable fun HorizontalScrollSample() { - val scrollState = rememberRemoteScrollState() + val scrollState = remember { RemoteScrollState() } RemoteRow( modifier = RemoteModifier.size(200.rdp, 100.rdp) diff --git a/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/a11y/BasicA11yTest.kt b/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/a11y/BasicA11yTest.kt index f33e79b33255d..010dddbebdcdf 100644 --- a/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/a11y/BasicA11yTest.kt +++ b/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/a11y/BasicA11yTest.kt @@ -31,9 +31,9 @@ import androidx.compose.remote.creation.compose.modifier.fillMaxWidth import androidx.compose.remote.creation.compose.modifier.padding import androidx.compose.remote.creation.compose.modifier.semantics import androidx.compose.remote.creation.compose.modifier.text +import androidx.compose.remote.creation.compose.state.MutableRemoteInt +import androidx.compose.remote.creation.compose.state.MutableRemoteString import androidx.compose.remote.creation.compose.state.rc -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteInt -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteString import androidx.compose.remote.creation.compose.state.rf import androidx.compose.remote.creation.compose.state.rs import androidx.compose.remote.player.compose.test.utils.RemoteInteractionTestRule @@ -121,7 +121,7 @@ class BasicA11yTest { @Test fun textValueChange() { remoteComposeTestRule.setContent { - val text = rememberMutableRemoteString("Initial") + val text = remember { MutableRemoteString("Initial") } RemoteBox( modifier = RemoteModifier.fillMaxSize() @@ -146,7 +146,7 @@ class BasicA11yTest { fun intValueChange() { remoteComposeTestRule.setContent { val decimalFormat = remember { DecimalFormat("##0") } - val remoteInt = rememberMutableRemoteInt(0) + val remoteInt = remember { MutableRemoteInt(0) } RemoteBox( modifier = RemoteModifier.fillMaxSize() diff --git a/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/a11y/ListA11yTest.kt b/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/a11y/ListA11yTest.kt index 62a21c1b13c9a..057b6e814b398 100644 --- a/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/a11y/ListA11yTest.kt +++ b/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/a11y/ListA11yTest.kt @@ -25,13 +25,13 @@ import androidx.compose.remote.creation.compose.layout.RemoteColumn import androidx.compose.remote.creation.compose.layout.RemoteComposable import androidx.compose.remote.creation.compose.layout.RemoteText import androidx.compose.remote.creation.compose.modifier.RemoteModifier +import androidx.compose.remote.creation.compose.modifier.RemoteScrollState import androidx.compose.remote.creation.compose.modifier.background import androidx.compose.remote.creation.compose.modifier.border import androidx.compose.remote.creation.compose.modifier.clickable import androidx.compose.remote.creation.compose.modifier.fillMaxSize import androidx.compose.remote.creation.compose.modifier.fillMaxWidth import androidx.compose.remote.creation.compose.modifier.height -import androidx.compose.remote.creation.compose.modifier.rememberRemoteScrollState import androidx.compose.remote.creation.compose.modifier.semantics import androidx.compose.remote.creation.compose.modifier.verticalScroll import androidx.compose.remote.creation.compose.state.RemoteColor @@ -42,6 +42,7 @@ import androidx.compose.remote.creation.compose.state.rs import androidx.compose.remote.creation.compose.state.rsp import androidx.compose.remote.player.compose.test.utils.RemoteInteractionTestRule import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.graphics.Color import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 @@ -153,7 +154,7 @@ class ListA11yTest { items: Int = 50, notches: Int = items, ) { - val scrollState = rememberRemoteScrollState(notches) + val scrollState = remember { RemoteScrollState(notches) } RemoteColumn( modifier = modifier.verticalScroll(scrollState).background(Color.White.rc), horizontalAlignment = RemoteAlignment.CenterHorizontally, diff --git a/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/action/HostActionTest.kt b/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/action/HostActionTest.kt index b28f6047cbb0e..36d8dc131a368 100644 --- a/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/action/HostActionTest.kt +++ b/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/action/HostActionTest.kt @@ -24,17 +24,18 @@ import androidx.compose.remote.creation.compose.modifier.RemoteModifier import androidx.compose.remote.creation.compose.modifier.clickable import androidx.compose.remote.creation.compose.modifier.fillMaxSize import androidx.compose.remote.creation.compose.modifier.semantics +import androidx.compose.remote.creation.compose.state.MutableRemoteInt +import androidx.compose.remote.creation.compose.state.MutableRemoteString import androidx.compose.remote.creation.compose.state.RemoteFloat import androidx.compose.remote.creation.compose.state.RemoteFloat.Companion.createNamedRemoteFloat import androidx.compose.remote.creation.compose.state.RemoteInt import androidx.compose.remote.creation.compose.state.RemoteState import androidx.compose.remote.creation.compose.state.RemoteString -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteInt -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteString import androidx.compose.remote.creation.compose.state.rf import androidx.compose.remote.creation.compose.state.ri import androidx.compose.remote.creation.compose.state.rs import androidx.compose.remote.player.compose.test.utils.RemoteInteractionTestRule +import androidx.compose.runtime.remember import androidx.test.core.app.ApplicationProvider import androidx.test.uiautomator.uiAutomator import com.google.common.truth.Truth.assertThat @@ -101,9 +102,9 @@ class HostActionTest { val mutableValue = when (value) { - is RemoteInt -> rememberMutableRemoteInt(value.constantValue) + is RemoteInt -> remember { MutableRemoteInt(value.constantValue) } is RemoteFloat -> value - is RemoteString -> rememberMutableRemoteString(value.constantValue) + is RemoteString -> remember { MutableRemoteString(value.constantValue) } else -> "null".rs } diff --git a/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/layout/RemoteBrushTest.kt b/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/layout/RemoteBrushTest.kt index be821a646b06a..4eb0122f54e2e 100644 --- a/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/layout/RemoteBrushTest.kt +++ b/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/layout/RemoteBrushTest.kt @@ -40,15 +40,16 @@ import androidx.compose.remote.creation.compose.shaders.sweepGradient import androidx.compose.remote.creation.compose.shaders.verticalGradient import androidx.compose.remote.creation.compose.state.RemoteColor import androidx.compose.remote.creation.compose.state.RemoteFloat +import androidx.compose.remote.creation.compose.state.RemoteImageBitmap.Companion.createNamedRemoteImageBitmap import androidx.compose.remote.creation.compose.state.RemoteMatrix3x3.Companion.createTranslateXy import androidx.compose.remote.creation.compose.state.RemotePaint import androidx.compose.remote.creation.compose.state.RemoteState import androidx.compose.remote.creation.compose.state.rc import androidx.compose.remote.creation.compose.state.rdp -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteImageBitmap import androidx.compose.remote.creation.compose.state.rf import androidx.compose.remote.player.compose.test.utils.RemoteScreenshotTestRule import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.TileMode @@ -211,13 +212,14 @@ class RemoteBrushTest { @Test fun bitmapBrushTest() { remoteComposeTestRule.runScreenshotTest { - val image = - rememberNamedRemoteImageBitmap( + val image = remember { + createNamedRemoteImageBitmap( name = "background", domain = RemoteState.Domain.User, ) { createImage(400, 400).asImageBitmap() } + } val imageSize = RemoteSize(image.width, image.height) val topLeftX = 50f val topLeftY = 50f @@ -289,10 +291,11 @@ class RemoteBrushTest { @Composable @RemoteComposable private fun BitmapBrushBox(contentScale: ContentScale) { - val backgroundImage = - rememberNamedRemoteImageBitmap(name = "background") { + val backgroundImage = remember { + createNamedRemoteImageBitmap(name = "background") { createImage(300, 400).asImageBitmap() } + } val backgroundBrush = RemoteBrush.image( image = backgroundImage, diff --git a/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/layout/RemoteCustomComponentScreenshotTest.kt b/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/layout/RemoteCustomComponentScreenshotTest.kt index 2e024fa1e0c5c..a0a6e21bf1986 100644 --- a/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/layout/RemoteCustomComponentScreenshotTest.kt +++ b/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/layout/RemoteCustomComponentScreenshotTest.kt @@ -31,12 +31,12 @@ import androidx.compose.remote.creation.compose.capture.heightDp import androidx.compose.remote.creation.compose.capture.widthDp import androidx.compose.remote.creation.compose.modifier.RemoteModifier import androidx.compose.remote.creation.compose.modifier.size +import androidx.compose.remote.creation.compose.state.RemoteBoolean.Companion.createNamedRemoteBoolean +import androidx.compose.remote.creation.compose.state.RemoteColor.Companion.createNamedRemoteColor +import androidx.compose.remote.creation.compose.state.RemoteFloat.Companion.createNamedRemoteFloatExpression +import androidx.compose.remote.creation.compose.state.RemoteInt.Companion.createNamedRemoteInt +import androidx.compose.remote.creation.compose.state.RemoteString.Companion.createNamedRemoteString import androidx.compose.remote.creation.compose.state.rdp -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteBoolean -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteColor -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteFloat -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteInt -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteString import androidx.compose.remote.creation.compose.state.rf import androidx.compose.remote.creation.compose.test.base.GridScreenshotUI import androidx.compose.remote.creation.compose.util.TestProfiles @@ -44,6 +44,7 @@ import androidx.compose.remote.player.compose.RemoteDocumentPlayer import androidx.compose.remote.player.compose.test.utils.RemoteScreenshotTestRule import androidx.compose.remote.player.core.platform.AndroidComponentSupport import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.testTag @@ -219,7 +220,7 @@ class RemoteCustomComponentScreenshotTest { @Composable @RemoteComposable private fun RemoteIntProp() { - val remoteInt = rememberNamedRemoteInt("remote_int_prop", 123) + val remoteInt = remember { createNamedRemoteInt("remote_int_prop", 123) } RemoteCustomComponent( name = "SupportAllProperties", modifier = RemoteModifier.size(80.rdp, 30.rdp), @@ -231,7 +232,9 @@ class RemoteCustomComponentScreenshotTest { @Composable @RemoteComposable private fun RemoteColorProp() { - val remoteColor = rememberNamedRemoteColor("remote_color_prop", Color(0xFF00FF00)) + val remoteColor = remember { + createNamedRemoteColor("remote_color_prop", Color(0xFF00FF00)) + } RemoteCustomComponent( name = "SupportAllProperties", modifier = RemoteModifier.size(80.rdp, 30.rdp), @@ -243,7 +246,9 @@ class RemoteCustomComponentScreenshotTest { @Composable @RemoteComposable private fun RemoteFloatProp() { - val remoteFloat = rememberNamedRemoteFloat("remote_float_prop") { 2.71f.rf } + val remoteFloat = remember { + createNamedRemoteFloatExpression("remote_float_prop") { 2.71f.rf } + } RemoteCustomComponent( name = "SupportAllProperties", modifier = RemoteModifier.size(80.rdp, 30.rdp), @@ -255,7 +260,7 @@ class RemoteCustomComponentScreenshotTest { @Composable @RemoteComposable private fun RemoteStringProp() { - val remoteString = rememberNamedRemoteString("remote_string_prop", "Remote") + val remoteString = remember { createNamedRemoteString("remote_string_prop", "Remote") } RemoteCustomComponent( name = "SupportAllProperties", modifier = RemoteModifier.size(80.rdp, 30.rdp), @@ -267,7 +272,7 @@ class RemoteCustomComponentScreenshotTest { @Composable @RemoteComposable private fun RemoteBooleanProp() { - val remoteBoolean = rememberNamedRemoteBoolean("remote_boolean_prop", true) + val remoteBoolean = remember { createNamedRemoteBoolean("remote_boolean_prop", true) } RemoteCustomComponent( name = "SupportAllProperties", modifier = RemoteModifier.size(80.rdp, 30.rdp), diff --git a/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/layout/RemoteCustomComponentTest.kt b/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/layout/RemoteCustomComponentTest.kt index f4aa92fb1f2b6..8b68e645cda85 100644 --- a/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/layout/RemoteCustomComponentTest.kt +++ b/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/layout/RemoteCustomComponentTest.kt @@ -26,18 +26,18 @@ import androidx.compose.remote.core.operations.layout.Container import androidx.compose.remote.core.operations.layout.managers.Custom import androidx.compose.remote.core.operations.layout.managers.Custom.CustomProperty import androidx.compose.remote.creation.compose.capture.RemoteCreationDisplayInfo +import androidx.compose.remote.creation.compose.state.MutableRemoteBoolean +import androidx.compose.remote.creation.compose.state.MutableRemoteFloat +import androidx.compose.remote.creation.compose.state.MutableRemoteInt +import androidx.compose.remote.creation.compose.state.MutableRemoteString +import androidx.compose.remote.creation.compose.state.RemoteBoolean.Companion.createNamedRemoteBoolean +import androidx.compose.remote.creation.compose.state.RemoteColor.Companion.createNamedRemoteColor +import androidx.compose.remote.creation.compose.state.RemoteFloat.Companion.createNamedRemoteFloatExpression +import androidx.compose.remote.creation.compose.state.RemoteInt.Companion.createNamedRemoteInt +import androidx.compose.remote.creation.compose.state.RemoteString.Companion.createNamedRemoteString import androidx.compose.remote.creation.compose.state.rb import androidx.compose.remote.creation.compose.state.rc import androidx.compose.remote.creation.compose.state.rdp -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteBoolean -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteFloat -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteInt -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteString -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteBoolean -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteColor -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteFloat -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteInt -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteString import androidx.compose.remote.creation.compose.state.rf import androidx.compose.remote.creation.compose.state.ri import androidx.compose.remote.creation.compose.state.rs @@ -48,6 +48,7 @@ import androidx.compose.remote.player.core.platform.AndroidRemoteContext import androidx.compose.remote.testing.RemoteBaseContentTestRule import androidx.compose.remote.testing.RemoteContentTestRule import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.geometry.Size import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.toArgb @@ -79,7 +80,7 @@ class RemoteCustomComponentTest { } }, ) { - val textState = rememberNamedRemoteString("named_text_return", "Initial") + val textState = remember { createNamedRemoteString("named_text_return", "Initial") } RemoteCustomComponent(name = "TextReturnCustom") { bindReturn(1, textState) } } @@ -107,7 +108,7 @@ class RemoteCustomComponentTest { } }, ) { - val textState = rememberMutableRemoteString("Initial") + val textState = remember { MutableRemoteString("Initial") } RemoteCustomComponent(name = "MutableTextReturnCustom") { bindReturn(1, textState) } } @@ -133,7 +134,9 @@ class RemoteCustomComponentTest { } }, ) { - val floatState = rememberNamedRemoteFloat("named_float_return") { 0f.rf } + val floatState = remember { + createNamedRemoteFloatExpression("named_float_return") { 0f.rf } + } RemoteCustomComponent(name = "FloatReturnCustom") { bindReturn(2, floatState) } } @@ -161,7 +164,7 @@ class RemoteCustomComponentTest { } }, ) { - val floatState = rememberMutableRemoteFloat(0f) + val floatState = remember { MutableRemoteFloat(0f) } RemoteCustomComponent(name = "MutableFloatReturnCustom") { bindReturn(2, floatState) } @@ -189,7 +192,7 @@ class RemoteCustomComponentTest { } }, ) { - val boolState = rememberNamedRemoteBoolean("named_bool_return", false) + val boolState = remember { createNamedRemoteBoolean("named_bool_return", false) } RemoteCustomComponent(name = "BooleanReturnCustom") { bindReturn(3, boolState) } } @@ -217,7 +220,7 @@ class RemoteCustomComponentTest { } }, ) { - val boolState = rememberMutableRemoteBoolean(false) + val boolState = remember { MutableRemoteBoolean(false) } RemoteCustomComponent(name = "MutableBooleanReturnCustom") { bindReturn(3, boolState) } @@ -245,7 +248,7 @@ class RemoteCustomComponentTest { } }, ) { - val intState = rememberNamedRemoteInt("named_int_return", 0) + val intState = remember { createNamedRemoteInt("named_int_return", 0) } RemoteCustomComponent(name = "IntReturnCustom") { bindReturn(5, intState) } } @@ -273,7 +276,7 @@ class RemoteCustomComponentTest { } }, ) { - val intState = rememberMutableRemoteInt(0) + val intState = remember { MutableRemoteInt(0) } RemoteCustomComponent(name = "MutableIntReturnCustom") { bindReturn(5, intState) } } @@ -296,7 +299,7 @@ class RemoteCustomComponentTest { name = "IntPropertiesCustom", configureInt = { _, type, value -> configuredInts[type] = value }, ) { - val namedInt = rememberNamedRemoteInt("named_int_prop", 200) + val namedInt = remember { createNamedRemoteInt("named_int_prop", 200) } RemoteCustomComponent(name = "IntPropertiesCustom") { property(1, 42) property(2, 100.ri) @@ -333,7 +336,7 @@ class RemoteCustomComponentTest { name = "ColorPropertiesCustom", configureInt = { _, type, value -> configuredInts[type] = value }, ) { - val namedColor = rememberNamedRemoteColor("named_color_prop", Color.Blue) + val namedColor = remember { createNamedRemoteColor("named_color_prop", Color.Blue) } RemoteCustomComponent(name = "ColorPropertiesCustom") { property(1, Color.Red) property(2, Color.Green.rc) @@ -371,7 +374,9 @@ class RemoteCustomComponentTest { name = "FloatPropertiesCustom", configureFloat = { _, type, value -> configuredFloats[type] = value }, ) { - val namedFloat = rememberNamedRemoteFloat("named_float_prop") { 1.41f.rf } + val namedFloat = remember { + createNamedRemoteFloatExpression("named_float_prop") { 1.41f.rf } + } RemoteCustomComponent(name = "FloatPropertiesCustom") { property(1, 3.14f) property(2, 2.71f.rf) @@ -414,7 +419,9 @@ class RemoteCustomComponentTest { name = "StringPropertiesCustom", configureString = { _, type, value -> configuredStrings[type] = value }, ) { - val namedString = rememberNamedRemoteString("named_string_prop", "NamedRemote") + val namedString = remember { + createNamedRemoteString("named_string_prop", "NamedRemote") + } RemoteCustomComponent(name = "StringPropertiesCustom") { property(1, "Hello") property(2, "ConstantRemote".rs) @@ -452,8 +459,10 @@ class RemoteCustomComponentTest { name = "BooleanPropertiesCustom", configureInt = { _, type, value -> configuredInts[type] = value }, ) { - val namedBoolTrue = rememberNamedRemoteBoolean("named_bool_true", true) - val namedBoolFalse = rememberNamedRemoteBoolean("named_bool_false", false) + val namedBoolTrue = remember { createNamedRemoteBoolean("named_bool_true", true) } + val namedBoolFalse = remember { + createNamedRemoteBoolean("named_bool_false", false) + } RemoteCustomComponent(name = "BooleanPropertiesCustom") { property(1, true) property(2, false) @@ -513,7 +522,9 @@ class RemoteCustomComponentTest { } }, ) { - val colorState = rememberNamedRemoteColor("named_color_return", Color.Red) + val colorState = remember { + createNamedRemoteColor("named_color_return", Color.Red) + } RemoteCustomComponent(name = "ColorReturnCustom") { bindReturn(4, colorState) } } diff --git a/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/layout/RemoteImageTest.kt b/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/layout/RemoteImageTest.kt index 40138e3d5da65..26358b4adccb4 100644 --- a/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/layout/RemoteImageTest.kt +++ b/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/layout/RemoteImageTest.kt @@ -24,11 +24,11 @@ import androidx.compose.remote.creation.compose.SCREENSHOT_GOLDEN_DIRECTORY import androidx.compose.remote.creation.compose.capture.createCreationDisplayInfo import androidx.compose.remote.creation.compose.modifier.RemoteModifier import androidx.compose.remote.creation.compose.modifier.size +import androidx.compose.remote.creation.compose.state.MutableRemoteImageBitmap +import androidx.compose.remote.creation.compose.state.RemoteImageBitmap +import androidx.compose.remote.creation.compose.state.RemoteImageBitmap.Companion.createNamedRemoteImageBitmap import androidx.compose.remote.creation.compose.state.rb import androidx.compose.remote.creation.compose.state.rdp -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteImageBitmap -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteImageBitmap -import androidx.compose.remote.creation.compose.state.rememberRemoteImageBitmap import androidx.compose.remote.creation.compose.state.rf import androidx.compose.remote.creation.compose.state.rs import androidx.compose.remote.creation.compose.test.R @@ -36,6 +36,7 @@ import androidx.compose.remote.player.compose.test.utils.ComposableWrappers import androidx.compose.remote.player.compose.test.utils.RemoteScreenshotTestRule import androidx.compose.remote.player.core.platform.BitmapLoader import androidx.compose.remote.testing.LimitsRule +import androidx.compose.runtime.remember import androidx.compose.ui.geometry.Size import androidx.compose.ui.graphics.DefaultAlpha import androidx.compose.ui.graphics.asImageBitmap @@ -82,10 +83,11 @@ class RemoteImageTest { bitmapLoader = bitmapLoader, playComposableWrapper = ComposableWrappers.blackBackground, ) { - val avatarImage = - rememberNamedRemoteImageBitmap(name = "avatarImage") { + val avatarImage = remember { + createNamedRemoteImageBitmap(name = "avatarImage") { createImage(size, size).asImageBitmap() } + } RemoteImage( avatarImage, contentDescription = "background".rs, @@ -105,10 +107,11 @@ class RemoteImageTest { bitmapLoader = bitmapLoader, playComposableWrapper = ComposableWrappers.blackBackground, ) { - val backgroundImage = - rememberNamedRemoteImageBitmap(name = "backgroundImage") { + val backgroundImage = remember { + createNamedRemoteImageBitmap(name = "backgroundImage") { createImage(size, size).asImageBitmap() } + } RemoteImage( remoteBitmap = backgroundImage, contentDescription = "background".rs, @@ -128,11 +131,12 @@ class RemoteImageTest { createCreationDisplayInfo(context, Size(size.toFloat(), size.toFloat())), bitmapLoader = bitmapLoader, ) { - val dummyImage = - rememberNamedRemoteImageBitmap( + val dummyImage = remember { + createNamedRemoteImageBitmap( name = "dummy", url = "android.resource://androidx.compose.remote.foundation/drawable/dummy", ) + } RemoteImage( dummyImage, contentDescription = "background".rs, @@ -174,12 +178,13 @@ class RemoteImageTest { createCreationDisplayInfo(context, Size(size.toFloat(), size.toFloat())), bitmapLoader = bitmapLoader, ) { - val dummyImage = - rememberNamedRemoteImageBitmap( + val dummyImage = remember { + createNamedRemoteImageBitmap( name = "dummy", url = "android.resource://androidx.compose.remote.foundation/drawable/dummy", ) + } RemoteImage( dummyImage, contentDescription = "background".rs, @@ -200,10 +205,11 @@ class RemoteImageTest { createCreationDisplayInfo(context, Size(size.toFloat(), size.toFloat())), bitmapLoader = bitmapLoader, ) { - val dummyImage = - rememberRemoteImageBitmap( + val dummyImage = remember { + RemoteImageBitmap( url = "android.resource://androidx.compose.remote.foundation/drawable/dummy" ) + } RemoteImage( dummyImage, contentDescription = "background".rs, @@ -223,7 +229,7 @@ class RemoteImageTest { bitmapLoader = bitmapLoader, ) { val backgroundImage = createImage(size, size).asImageBitmap() - val bitmap = rememberMutableRemoteImageBitmap(backgroundImage) + val bitmap = remember { MutableRemoteImageBitmap(backgroundImage) } RemoteImage( remoteBitmap = bitmap, contentDescription = "background".rs, diff --git a/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/layout/StateLayoutTest.kt b/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/layout/StateLayoutTest.kt index 5cb9c0759904e..f8f039fb630cd 100644 --- a/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/layout/StateLayoutTest.kt +++ b/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/layout/StateLayoutTest.kt @@ -24,14 +24,15 @@ import androidx.compose.remote.creation.compose.modifier.border import androidx.compose.remote.creation.compose.modifier.clickable import androidx.compose.remote.creation.compose.modifier.fillMaxSize import androidx.compose.remote.creation.compose.modifier.padding +import androidx.compose.remote.creation.compose.state.MutableRemoteEnum import androidx.compose.remote.creation.compose.state.RemoteEnum import androidx.compose.remote.creation.compose.state.RemoteString import androidx.compose.remote.creation.compose.state.rc import androidx.compose.remote.creation.compose.state.rdp -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteEnum import androidx.compose.remote.creation.compose.state.rs import androidx.compose.remote.player.compose.test.utils.RemoteScreenshotTestRule import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.graphics.Color import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 @@ -66,7 +67,7 @@ class StateLayoutTest { @Test fun update() { testRule.setContent { - val currentState = rememberMutableRemoteEnum(LayoutState.First) + val currentState = remember { MutableRemoteEnum(LayoutState.First) } NestedStateLayout("one".rs, currentState = currentState) { state -> RemoteColumn(modifier = RemoteModifier.fillMaxSize()) { RemoteText("State $state".rs, color = Color.Black.rc) @@ -106,7 +107,7 @@ class StateLayoutTest { NestedStateLayout("one".rs) { one -> NestedStateLayout( "two".rs, - currentState = rememberMutableRemoteEnum(LayoutState.Second), + currentState = remember { MutableRemoteEnum(LayoutState.Second) }, ) { two -> NestedStateLayout("three".rs) { three -> RemoteText("Innermost $one / $two / $three".rs, color = Color.Black.rc) @@ -119,7 +120,7 @@ class StateLayoutTest { @RemoteComposable private fun NestedStateLayout( label: RemoteString, - currentState: RemoteEnum = rememberMutableRemoteEnum(LayoutState.First), + currentState: RemoteEnum = remember { MutableRemoteEnum(LayoutState.First) }, content: @Composable @RemoteComposable (LayoutState) -> Unit, ) { RemoteStateLayout( diff --git a/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/modifier/BackgroundModifierTest.kt b/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/modifier/BackgroundModifierTest.kt index 48808628ecd5c..c6581bcbe5593 100644 --- a/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/modifier/BackgroundModifierTest.kt +++ b/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/modifier/BackgroundModifierTest.kt @@ -30,17 +30,18 @@ import androidx.compose.remote.creation.compose.shaders.radialGradient import androidx.compose.remote.creation.compose.shaders.sweepGradient import androidx.compose.remote.creation.compose.shaders.verticalGradient import androidx.compose.remote.creation.compose.state.RemoteColor +import androidx.compose.remote.creation.compose.state.RemoteColor.Companion.createNamedRemoteColor import androidx.compose.remote.creation.compose.state.RemoteFloat import androidx.compose.remote.creation.compose.state.RemoteInt import androidx.compose.remote.creation.compose.state.RemoteString import androidx.compose.remote.creation.compose.state.rc -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteColor import androidx.compose.remote.creation.compose.state.ri import androidx.compose.remote.creation.compose.state.rs import androidx.compose.remote.creation.compose.state.rsp import androidx.compose.remote.player.compose.test.utils.ComposableWrappers import androidx.compose.remote.player.compose.test.utils.RemoteScreenshotTestRule import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.geometry.Size import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.toArgb @@ -134,7 +135,7 @@ class BackgroundModifierTest { remoteCreationDisplayInfo = creationDisplayInfo, playComposableWrapper = ComposableWrappers.blackBackground, ) { - val blue = rememberNamedRemoteColor("ABC", Color.Blue) + val blue = remember { createNamedRemoteColor("ABC", Color.Blue) } DemoBox("background(".rs + blue.toHexString() + ".rc named)") { RemoteBox(modifier = RemoteModifier.fillMaxSize().background(blue)) } diff --git a/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/modifier/ClipModifierTest.kt b/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/modifier/ClipModifierTest.kt index 849faab47628c..6deec6188d6ce 100644 --- a/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/modifier/ClipModifierTest.kt +++ b/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/modifier/ClipModifierTest.kt @@ -23,15 +23,16 @@ import androidx.compose.remote.creation.compose.shapes.RemoteCircleShape import androidx.compose.remote.creation.compose.shapes.RemoteRectangleShape import androidx.compose.remote.creation.compose.shapes.RemoteRoundedCornerShape import androidx.compose.remote.creation.compose.state.RemoteColor +import androidx.compose.remote.creation.compose.state.RemoteColor.Companion.createNamedRemoteColor import androidx.compose.remote.creation.compose.state.RemotePaint import androidx.compose.remote.creation.compose.state.rc import androidx.compose.remote.creation.compose.state.rdp -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteColor import androidx.compose.remote.creation.compose.test.base.GridScreenshotUI import androidx.compose.remote.creation.compose.test.base.GridScreenshotUI.Companion.DefaultContainerSize import androidx.compose.remote.player.compose.test.utils.ComposableWrappers import androidx.compose.remote.player.compose.test.utils.RemoteScreenshotTestRule import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.graphics.Color import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 @@ -142,7 +143,7 @@ class ClipModifierTest { @Test fun clipWithBackground() = composeTestRule.runScreenshotTest { - val color = rememberNamedRemoteColor("test", Color.Blue) + val color = remember { createNamedRemoteColor("test", Color.Blue) } RemoteBox( modifier = RemoteModifier.size(50.rdp) diff --git a/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/modifier/ScrollModifierScreenshotTest.kt b/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/modifier/ScrollModifierScreenshotTest.kt index 12defc8228ef6..056c57ee56a36 100644 --- a/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/modifier/ScrollModifierScreenshotTest.kt +++ b/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/modifier/ScrollModifierScreenshotTest.kt @@ -29,6 +29,7 @@ import androidx.compose.remote.creation.compose.state.rdp import androidx.compose.remote.creation.compose.state.rf import androidx.compose.remote.creation.compose.state.rs import androidx.compose.remote.player.compose.test.utils.RemoteScreenshotTestRule +import androidx.compose.runtime.remember import androidx.compose.ui.graphics.Color import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 @@ -58,7 +59,7 @@ class ScrollModifierScreenshotTest { @Test fun verticalScroll() { composeTestRule.setContent { - val scrollState = rememberRemoteScrollState() + val scrollState = remember { RemoteScrollState() } RemoteColumn(modifier = RemoteModifier.verticalScroll(scrollState).fillMaxSize()) { repeat(4) { index -> val color = colors[index % colors.size].rc @@ -90,7 +91,7 @@ class ScrollModifierScreenshotTest { @Test fun horizontalScroll() { composeTestRule.setContent { - val scrollState = rememberRemoteScrollState() + val scrollState = remember { RemoteScrollState() } RemoteRow(modifier = RemoteModifier.horizontalScroll(scrollState).fillMaxSize()) { repeat(4) { index -> val color = colors[index % colors.size].rc @@ -121,7 +122,7 @@ class ScrollModifierScreenshotTest { @Test fun horizontalScrollWithPosition() { composeTestRule.setContent { - val scrollState = rememberRemoteScrollState() + val scrollState = remember { RemoteScrollState() } RemoteColumn(modifier = RemoteModifier.fillMaxSize()) { RemoteRow( modifier = @@ -163,7 +164,7 @@ class ScrollModifierScreenshotTest { @Test fun horizontalScrollTo() { composeTestRule.setContent { - val scrollState = rememberRemoteScrollState() + val scrollState = remember { RemoteScrollState() } RemoteColumn(modifier = RemoteModifier.fillMaxSize()) { RemoteRow( modifier = @@ -205,7 +206,7 @@ class ScrollModifierScreenshotTest { @Test fun horizontalScrollBy() { composeTestRule.setContent { - val scrollState = rememberRemoteScrollState() + val scrollState = remember { RemoteScrollState() } RemoteColumn(modifier = RemoteModifier.fillMaxSize()) { RemoteRow( modifier = diff --git a/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/state/RemoteColorCompositeOverScreenshotTest.kt b/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/state/RemoteColorCompositeOverScreenshotTest.kt index ab204f047452e..02fec9e23eba1 100644 --- a/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/state/RemoteColorCompositeOverScreenshotTest.kt +++ b/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/state/RemoteColorCompositeOverScreenshotTest.kt @@ -31,8 +31,10 @@ import androidx.compose.remote.creation.compose.modifier.fillMaxSize import androidx.compose.remote.creation.compose.modifier.height import androidx.compose.remote.creation.compose.modifier.padding import androidx.compose.remote.creation.compose.modifier.size +import androidx.compose.remote.creation.compose.state.RemoteFloat.Companion.createNamedRemoteFloatExpression import androidx.compose.remote.player.compose.test.utils.RemoteScreenshotTestRule import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.compositeOver import androidx.test.core.app.ApplicationProvider @@ -76,7 +78,9 @@ class RemoteColorCompositeOverScreenshotTest { RemoteBox(modifier = RemoteModifier.height(6.rdp)) // Case 2: Opaque Background: Blue + Dynamic 40% Magenta - val dynamicAlpha40 = rememberNamedRemoteFloat("alpha_40") { 0.4f.rf } + val dynamicAlpha40 = remember { + createNamedRemoteFloatExpression("alpha_40") { 0.4f.rf } + } ComparisonRow( title = "2. Opaque BG: Blue + Dynamic 40% Magenta", bg = Color.Blue.rc, @@ -89,7 +93,9 @@ class RemoteColorCompositeOverScreenshotTest { RemoteBox(modifier = RemoteModifier.height(6.rdp)) // Case 3: Both Alphas Constant: Dynamic 50% Red + Dynamic 60% Blue - val dynamicRedComponent = rememberNamedRemoteFloat("red_comp") { 0.8f.rf } + val dynamicRedComponent = remember { + createNamedRemoteFloatExpression("red_comp") { 0.8f.rf } + } val bgConstAlpha = RemoteColor.rgb( red = dynamicRedComponent, @@ -97,7 +103,9 @@ class RemoteColorCompositeOverScreenshotTest { blue = 0.rf, alpha = 0.5f.rf, ) - val dynamicBlueComponent = rememberNamedRemoteFloat("blue_comp") { 0.9f.rf } + val dynamicBlueComponent = remember { + createNamedRemoteFloatExpression("blue_comp") { 0.9f.rf } + } val fgConstAlpha = RemoteColor.rgb( red = 0.rf, @@ -119,9 +127,13 @@ class RemoteColorCompositeOverScreenshotTest { RemoteBox(modifier = RemoteModifier.height(6.rdp)) // Case 4: Fully Dynamic: 80% Cyan + 30% Yellow - val dynamicAlpha80 = rememberNamedRemoteFloat("alpha_80") { 0.8f.rf } + val dynamicAlpha80 = remember { + createNamedRemoteFloatExpression("alpha_80") { 0.8f.rf } + } val dynamicBgCyan = Color.Cyan.rc.copy(alpha = dynamicAlpha80) - val dynamicAlpha30 = rememberNamedRemoteFloat("alpha_30") { 0.3f.rf } + val dynamicAlpha30 = remember { + createNamedRemoteFloatExpression("alpha_30") { 0.3f.rf } + } val dynamicFgYellow = Color.Yellow.rc.copy(alpha = dynamicAlpha30) ComparisonRow( title = "4. Fully Dynamic: 80% Cyan + 30% Yellow", diff --git a/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/state/RemoteStateTest.kt b/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/state/RemoteStateTest.kt index 7686af10bd401..ede1bd86ea835 100644 --- a/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/state/RemoteStateTest.kt +++ b/compose/remote/remote-creation-compose/src/androidTest/java/androidx/compose/remote/creation/compose/state/RemoteStateTest.kt @@ -31,7 +31,13 @@ import androidx.compose.remote.creation.compose.capture.captureSingleRemoteDocum import androidx.compose.remote.creation.compose.layout.RemoteBox import androidx.compose.remote.creation.compose.layout.RemoteComposable import androidx.compose.remote.creation.compose.layout.RemoteText +import androidx.compose.remote.creation.compose.state.RemoteColor.Companion.createNamedRemoteColor +import androidx.compose.remote.creation.compose.state.RemoteImageBitmap.Companion.createNamedRemoteImageBitmap +import androidx.compose.remote.creation.compose.state.RemoteInt.Companion.createNamedRemoteInt +import androidx.compose.remote.creation.compose.state.RemoteLong.Companion.createNamedRemoteLong +import androidx.compose.remote.creation.compose.state.RemoteString.Companion.createNamedRemoteString import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.asImageBitmap import androidx.compose.ui.graphics.toArgb @@ -74,9 +80,9 @@ class RemoteStateTest { fun cachesRemoteColor() = runTest { withContext(Dispatchers.Main) { captureSingleRemoteDocument(context) { - val blue = rememberNamedRemoteColor("blue", Color.Blue) - val red = rememberNamedRemoteColor("red", Color.Red) - val blue2 = rememberNamedRemoteColor("blue", Color.Blue) + val blue = remember { createNamedRemoteColor("blue", Color.Blue) } + val red = remember { createNamedRemoteColor("red", Color.Red) } + val blue2 = remember { createNamedRemoteColor("blue", Color.Blue) } AssertSameSameDifferent(blue, blue2, red) } @@ -87,20 +93,23 @@ class RemoteStateTest { fun cachesRemoteImageBitmap() = runTest { withContext(Dispatchers.Main) { captureSingleRemoteDocument(context) { - val blue = - rememberNamedRemoteImageBitmap("blue") { + val blue = remember { + createNamedRemoteImageBitmap("blue") { Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888) .apply { setPixel(0, 0, Color.Blue.toArgb()) } .asImageBitmap() } - val red = - rememberNamedRemoteImageBitmap("red") { + } + val red = remember { + createNamedRemoteImageBitmap("red") { Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888) .apply { setPixel(0, 0, Color.Red.toArgb()) } .asImageBitmap() } - val blue2 = - rememberNamedRemoteImageBitmap("blue", url = "https://example.org/favicon.ico") + } + val blue2 = remember { + createNamedRemoteImageBitmap("blue", url = "https://example.org/favicon.ico") + } AssertSameSameDifferent(blue, blue2, red) } @@ -111,9 +120,9 @@ class RemoteStateTest { fun cachesRemoteInt() = runTest { withContext(Dispatchers.Main) { captureSingleRemoteDocument(context) { - val one = rememberNamedRemoteInt(name = "one", defaultValue = 1) - val two = rememberNamedRemoteInt(name = "two", defaultValue = 2) - val one2 = rememberNamedRemoteInt(name = "one", defaultValue = 3) + val one = remember { createNamedRemoteInt(name = "one", defaultValue = 1) } + val two = remember { createNamedRemoteInt(name = "two", defaultValue = 2) } + val one2 = remember { createNamedRemoteInt(name = "one", defaultValue = 3) } AssertSameSameDifferent(one, one2, two) } @@ -124,9 +133,9 @@ class RemoteStateTest { fun cachesRemoteLong() = runTest { withContext(Dispatchers.Main) { captureSingleRemoteDocument(context) { - val one = rememberNamedRemoteLong(name = "one", defaultValue = 1L) - val two = rememberNamedRemoteLong(name = "two", defaultValue = 2L) - val one2 = rememberNamedRemoteLong(name = "one", defaultValue = 3L) + val one = remember { createNamedRemoteLong(name = "one", defaultValue = 1L) } + val two = remember { createNamedRemoteLong(name = "two", defaultValue = 2L) } + val one2 = remember { createNamedRemoteLong(name = "one", defaultValue = 3L) } AssertSameSameDifferent(one, one2, two) } @@ -137,9 +146,13 @@ class RemoteStateTest { fun cachesRemoteString() = runTest { withContext(Dispatchers.Main) { captureSingleRemoteDocument(context) { - val blue = rememberNamedRemoteString(name = "blue", defaultValue = "blue") - val red = rememberNamedRemoteString(name = "red", defaultValue = "red") - val blue2 = rememberNamedRemoteString(name = "blue", defaultValue = "blue2") + val blue = remember { + createNamedRemoteString(name = "blue", defaultValue = "blue") + } + val red = remember { createNamedRemoteString(name = "red", defaultValue = "red") } + val blue2 = remember { + createNamedRemoteString(name = "blue", defaultValue = "blue2") + } AssertSameSameDifferent(blue, blue2, red) } @@ -151,20 +164,22 @@ class RemoteStateTest { withContext(Dispatchers.Main) { val capturedDoc = captureSingleRemoteDocument(context) { - val s1 = - rememberNamedRemoteString( + val s1 = remember { + createNamedRemoteString( name = "s1", defaultValue = "1", domain = RemoteState.Domain.User, ) + } // Will be committed immediately in a global scope - val s2 = - rememberNamedRemoteString( - name = "s2", - defaultValue = "2", - domain = RemoteState.Domain.User, - ) - .withGlobalScope() + val s2 = remember { + createNamedRemoteString( + name = "s2", + defaultValue = "2", + domain = RemoteState.Domain.User, + ) + } + .withGlobalScope() RemoteBox { RemoteText(s1 + s2) } } @@ -196,7 +211,7 @@ class RemoteStateTest { captureSingleRemoteDocument( InstrumentationRegistry.getInstrumentation().targetContext ) { - val mutableFloat = rememberMutableRemoteFloat(0f) + val mutableFloat = remember { MutableRemoteFloat(0f) } val creationState = LocalRemoteComposeCreationState.current // 1. Get the ID allocated for actions (e.g., valueChange) diff --git a/compose/remote/remote-creation-compose/src/test/java/androidx/compose/remote/BasicLayoutTest.kt b/compose/remote/remote-creation-compose/src/test/java/androidx/compose/remote/BasicLayoutTest.kt index 93b2c0535ddd4..d4db4d3d7338a 100644 --- a/compose/remote/remote-creation-compose/src/test/java/androidx/compose/remote/BasicLayoutTest.kt +++ b/compose/remote/remote-creation-compose/src/test/java/androidx/compose/remote/BasicLayoutTest.kt @@ -43,6 +43,7 @@ import androidx.compose.remote.creation.compose.layout.RemoteRow import androidx.compose.remote.creation.compose.layout.RemoteStateLayout import androidx.compose.remote.creation.compose.layout.RemoteText import androidx.compose.remote.creation.compose.modifier.RemoteModifier +import androidx.compose.remote.creation.compose.modifier.RemoteScrollState import androidx.compose.remote.creation.compose.modifier.background import androidx.compose.remote.creation.compose.modifier.clickable import androidx.compose.remote.creation.compose.modifier.clip @@ -55,22 +56,21 @@ import androidx.compose.remote.creation.compose.modifier.onTouchCancel import androidx.compose.remote.creation.compose.modifier.onTouchDown import androidx.compose.remote.creation.compose.modifier.onTouchUp import androidx.compose.remote.creation.compose.modifier.padding -import androidx.compose.remote.creation.compose.modifier.rememberRemoteScrollState import androidx.compose.remote.creation.compose.modifier.size import androidx.compose.remote.creation.compose.modifier.verticalScroll import androidx.compose.remote.creation.compose.modifier.width import androidx.compose.remote.creation.compose.shaders.RemoteBrush import androidx.compose.remote.creation.compose.shaders.radialGradient import androidx.compose.remote.creation.compose.shapes.RemoteRoundedCornerShape +import androidx.compose.remote.creation.compose.state.MutableRemoteEnum +import androidx.compose.remote.creation.compose.state.MutableRemoteInt import androidx.compose.remote.creation.compose.state.RemoteColor import androidx.compose.remote.creation.compose.state.RemoteDp import androidx.compose.remote.creation.compose.state.RemoteEnum import androidx.compose.remote.creation.compose.state.RemotePaint +import androidx.compose.remote.creation.compose.state.RemoteString.Companion.createNamedRemoteString import androidx.compose.remote.creation.compose.state.rc import androidx.compose.remote.creation.compose.state.rdp -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteEnum -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteInt -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteString import androidx.compose.remote.creation.compose.state.rf import androidx.compose.remote.creation.compose.state.rs import androidx.compose.remote.creation.compose.state.rsp @@ -83,6 +83,7 @@ import androidx.compose.remote.serialization.yaml.YAMLSerializer import androidx.compose.remote.testing.RemoteCaptureTestRule import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.remember import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.compositeOver import androidx.compose.ui.graphics.vector.ImageVector @@ -338,7 +339,7 @@ ROOT [-2:-1] = [0.0, 0.0, 715.0, 825.0] VISIBLE verticalArrangement = RemoteArrangement.Center, horizontalAlignment = RemoteAlignment.CenterHorizontally, ) { - val state = rememberRemoteScrollState() + val state = remember { RemoteScrollState() } RemoteBox(modifier = RemoteModifier.size(100.rdp).verticalScroll(state)) } } @@ -388,7 +389,7 @@ ROOT [-2:-1] = [0.0, 0.0, 715.0, 825.0] VISIBLE verticalArrangement = RemoteArrangement.Center, horizontalAlignment = RemoteAlignment.CenterHorizontally, ) { - val text = rememberNamedRemoteString("test", "Bonjour le monde!") + val text = remember { createNamedRemoteString("test", "Bonjour le monde!") } val white = RemoteColor(Color.White) RemoteRow( @@ -484,7 +485,7 @@ ROOT [-2:-1] = [0.0, 0.0, 715.0, 825.0] VISIBLE verticalArrangement = RemoteArrangement.Center, horizontalAlignment = RemoteAlignment.CenterHorizontally, ) { - val text = rememberNamedRemoteString("plop", "Bonjour Le Monde!") + val text = remember { createNamedRemoteString("plop", "Bonjour Le Monde!") } val white = RemoteColor(Color.White) RemoteText( @@ -602,7 +603,7 @@ ROOT [-2:-1] = [0.0, 0.0, 715.0, 825.0] VISIBLE verticalArrangement = RemoteArrangement.Center, horizontalAlignment = RemoteAlignment.CenterHorizontally, ) { - val param = rememberMutableRemoteInt(128) + val param = remember { MutableRemoteInt(128) } RemoteBox( modifier = RemoteModifier.size(100.rdp) @@ -645,7 +646,7 @@ ROOT [-2:-1] = [0.0, 0.0, 715.0, 825.0] VISIBLE verticalArrangement = RemoteArrangement.Center, horizontalAlignment = RemoteAlignment.CenterHorizontally, ) { - val checked = rememberMutableRemoteEnum(Checked.Off) + val checked = remember { MutableRemoteEnum(Checked.Off) } RemoteStateLayout( currentState = checked, @@ -699,7 +700,7 @@ ROOT [-2:-1] = [0.0, 0.0, 715.0, 825.0] VISIBLE verticalArrangement = RemoteArrangement.Center, horizontalAlignment = RemoteAlignment.CenterHorizontally, ) { - val checked = rememberMutableRemoteEnum(Checked.On) + val checked = remember { MutableRemoteEnum(Checked.On) } RemoteStateLayout( currentState = checked, @@ -754,7 +755,7 @@ ROOT [-2:-1] = [0.0, 0.0, 715.0, 825.0] VISIBLE verticalArrangement = RemoteArrangement.Center, horizontalAlignment = RemoteAlignment.CenterHorizontally, ) { - val checked = rememberMutableRemoteEnum(Checked.On).withGlobalScope() + val checked = remember { MutableRemoteEnum(Checked.On) }.withGlobalScope() RemoteStateLayout( currentState = checked, diff --git a/compose/remote/remote-creation-compose/src/test/java/androidx/compose/remote/creation/compose/RemoteComposeTest.kt b/compose/remote/remote-creation-compose/src/test/java/androidx/compose/remote/creation/compose/RemoteComposeTest.kt index 5ddd3db2bbc91..340e1ca3e63ae 100644 --- a/compose/remote/remote-creation-compose/src/test/java/androidx/compose/remote/creation/compose/RemoteComposeTest.kt +++ b/compose/remote/remote-creation-compose/src/test/java/androidx/compose/remote/creation/compose/RemoteComposeTest.kt @@ -35,10 +35,11 @@ import androidx.compose.remote.creation.compose.layout.RemoteStateLayout import androidx.compose.remote.creation.compose.layout.RemoteText import androidx.compose.remote.creation.compose.modifier.RemoteModifier import androidx.compose.remote.creation.compose.modifier.fillMaxSize +import androidx.compose.remote.creation.compose.state.MutableRemoteEnum import androidx.compose.remote.creation.compose.state.RemotePaint import androidx.compose.remote.creation.compose.state.rc -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteEnum import androidx.compose.remote.creation.compose.state.rs +import androidx.compose.runtime.remember import androidx.compose.ui.graphics.Color import androidx.test.core.app.ApplicationProvider import kotlinx.coroutines.flow.first @@ -161,7 +162,7 @@ class RemoteComposeTest { val displayInfo = RemoteCreationDisplayInfo(500, 500, 1, 1.0f) val document = captureSingleRemoteDocument(creationDisplayInfo = displayInfo, context = context) { - val checked = rememberMutableRemoteEnum(ToggleState.On) + val checked = remember { MutableRemoteEnum(ToggleState.On) } RemoteStateLayout(currentState = checked) { state -> RemoteText(text = "State $state".rs) } diff --git a/compose/remote/remote-creation-compose/src/test/java/androidx/compose/remote/creation/compose/action/HostActionTest.kt b/compose/remote/remote-creation-compose/src/test/java/androidx/compose/remote/creation/compose/action/HostActionTest.kt index 75f76f309d02a..898b32a1aad37 100644 --- a/compose/remote/remote-creation-compose/src/test/java/androidx/compose/remote/creation/compose/action/HostActionTest.kt +++ b/compose/remote/remote-creation-compose/src/test/java/androidx/compose/remote/creation/compose/action/HostActionTest.kt @@ -27,12 +27,13 @@ import androidx.compose.remote.core.operations.layout.modifiers.HostNamedActionO import androidx.compose.remote.creation.compose.layout.RemoteBox import androidx.compose.remote.creation.compose.modifier.RemoteModifier import androidx.compose.remote.creation.compose.modifier.clickable -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteString +import androidx.compose.remote.creation.compose.state.RemoteString.Companion.createNamedRemoteString import androidx.compose.remote.creation.compose.state.rf import androidx.compose.remote.creation.compose.state.ri import androidx.compose.remote.creation.compose.state.rs import androidx.compose.remote.serialization.yaml.YAMLSerializer import androidx.compose.remote.testing.RemoteCaptureTestRule +import androidx.compose.runtime.remember import androidx.test.core.app.ApplicationProvider import com.google.common.truth.Truth.assertThat import kotlinx.coroutines.test.runTest @@ -99,7 +100,7 @@ class HostActionTest { fun hostActionWithVariableRemoteString_createsHostActionOperation() = runTest { val doc = captureRule.captureDocument(context) { - val variableName = rememberNamedRemoteString("action_name", "my_action") + val variableName = remember { createNamedRemoteString("action_name", "my_action") } RemoteBox(modifier = RemoteModifier.clickable(hostAction(variableName))) } val namedOps = doc.findOperations() @@ -114,7 +115,7 @@ class HostActionTest { fun hostActionWithVariableRemoteStringAndValue_createsHostActionMetadataOperation() = runTest { val doc = captureRule.captureDocument(context) { - val variableName = rememberNamedRemoteString("action_name", "my_action") + val variableName = remember { createNamedRemoteString("action_name", "my_action") } RemoteBox(modifier = RemoteModifier.clickable(hostAction(variableName, "value".rs))) } val namedOps = doc.findOperations() diff --git a/compose/remote/remote-creation-compose/src/test/java/androidx/compose/remote/creation/compose/state/NamedVariableDiscardedTest.kt b/compose/remote/remote-creation-compose/src/test/java/androidx/compose/remote/creation/compose/state/NamedVariableDiscardedTest.kt index bd0c6502ea7da..3f5bd40673af3 100644 --- a/compose/remote/remote-creation-compose/src/test/java/androidx/compose/remote/creation/compose/state/NamedVariableDiscardedTest.kt +++ b/compose/remote/remote-creation-compose/src/test/java/androidx/compose/remote/creation/compose/state/NamedVariableDiscardedTest.kt @@ -27,9 +27,18 @@ import androidx.compose.remote.creation.compose.modifier.RemoteModifier import androidx.compose.remote.creation.compose.modifier.background import androidx.compose.remote.creation.compose.modifier.size import androidx.compose.remote.creation.compose.painter.painterRemoteImageBitmap +import androidx.compose.remote.creation.compose.state.RemoteBoolean.Companion.createNamedRemoteBoolean +import androidx.compose.remote.creation.compose.state.RemoteColor.Companion.createNamedRemoteColor +import androidx.compose.remote.creation.compose.state.RemoteDp.Companion.createNamedRemoteDp +import androidx.compose.remote.creation.compose.state.RemoteFloat.Companion.createNamedRemoteFloatExpression +import androidx.compose.remote.creation.compose.state.RemoteImageBitmap.Companion.createNamedRemoteImageBitmap +import androidx.compose.remote.creation.compose.state.RemoteInt.Companion.createNamedRemoteInt +import androidx.compose.remote.creation.compose.state.RemoteLong.Companion.createNamedRemoteLong +import androidx.compose.remote.creation.compose.state.RemoteString.Companion.createNamedRemoteString import androidx.compose.remote.player.core.state.RemoteDomains import androidx.compose.remote.testing.LimitsRule import androidx.compose.remote.testing.RemoteCaptureTestRule +import androidx.compose.runtime.remember import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.asImageBitmap import androidx.core.graphics.createBitmap @@ -75,7 +84,7 @@ class NamedVariableDiscardedTest { val coreDoc = remoteCaptureRule.captureDocument(context) { RemoteBox { - val namedColor = rememberNamedRemoteColor("testColor", Color.Red) + val namedColor = remember { createNamedRemoteColor("testColor", Color.Red) } RemoteBox(modifier = RemoteModifier.size(10.rdp).background(namedColor)) } } @@ -89,8 +98,10 @@ class NamedVariableDiscardedTest { val coreDoc = remoteCaptureRule.captureDocument(context) { RemoteBox { - val namedColor = - rememberNamedRemoteColor("testColor", Color.Red).withGlobalScope() + val namedColor = remember { + createNamedRemoteColor("testColor", Color.Red) + } + .withGlobalScope() RemoteBox(modifier = RemoteModifier.size(10.rdp).background(namedColor)) } } @@ -107,7 +118,9 @@ class NamedVariableDiscardedTest { val coreDoc = remoteCaptureRule.captureDocument(context) { RemoteBox { - val namedFloat = rememberNamedRemoteFloat("testFloat") { 10f.rf } + val namedFloat = remember { + createNamedRemoteFloatExpression("testFloat") { 10f.rf } + } RemoteBox(modifier = RemoteModifier.size(RemoteDp(namedFloat))) } } @@ -121,8 +134,10 @@ class NamedVariableDiscardedTest { val coreDoc = remoteCaptureRule.captureDocument(context) { RemoteBox { - val namedFloat = - rememberNamedRemoteFloat("testFloat") { 10f.rf }.withGlobalScope() + val namedFloat = remember { + createNamedRemoteFloatExpression("testFloat") { 10f.rf } + } + .withGlobalScope() RemoteBox(modifier = RemoteModifier.size(RemoteDp(namedFloat))) } } @@ -139,7 +154,7 @@ class NamedVariableDiscardedTest { val coreDoc = remoteCaptureRule.captureDocument(context) { RemoteBox { - val namedDp = rememberNamedRemoteDp("testDp") { 10.rdp } + val namedDp = remember { createNamedRemoteDp("testDp") { 10.rdp } } RemoteBox(modifier = RemoteModifier.size(namedDp)) } } @@ -153,7 +168,10 @@ class NamedVariableDiscardedTest { val coreDoc = remoteCaptureRule.captureDocument(context) { RemoteBox { - val namedDp = rememberNamedRemoteDp("testDp") { 10.rdp }.withGlobalScope() + val namedDp = remember { + createNamedRemoteDp("testDp") { 10.rdp } + } + .withGlobalScope() RemoteBox(modifier = RemoteModifier.size(namedDp)) } } @@ -170,7 +188,7 @@ class NamedVariableDiscardedTest { val coreDoc = remoteCaptureRule.captureDocument(context) { RemoteBox { - val namedInt = rememberNamedRemoteInt("testInt", 42) + val namedInt = remember { createNamedRemoteInt("testInt", 42) } RemoteBox(modifier = RemoteModifier.size(RemoteDp(namedInt.toRemoteFloat()))) } } @@ -184,7 +202,10 @@ class NamedVariableDiscardedTest { val coreDoc = remoteCaptureRule.captureDocument(context) { RemoteBox { - val namedInt = rememberNamedRemoteInt("testInt", 42).withGlobalScope() + val namedInt = remember { + createNamedRemoteInt("testInt", 42) + } + .withGlobalScope() RemoteBox(modifier = RemoteModifier.size(RemoteDp(namedInt.toRemoteFloat()))) } } @@ -201,7 +222,7 @@ class NamedVariableDiscardedTest { val coreDoc = remoteCaptureRule.captureDocument(context) { RemoteBox { - val namedBoolean = rememberNamedRemoteBoolean("testBoolean", true) + val namedBoolean = remember { createNamedRemoteBoolean("testBoolean", true) } RemoteBox( modifier = RemoteModifier.size(10.rdp) @@ -219,8 +240,10 @@ class NamedVariableDiscardedTest { val coreDoc = remoteCaptureRule.captureDocument(context) { RemoteBox { - val namedBoolean = - rememberNamedRemoteBoolean("testBoolean", true).withGlobalScope() + val namedBoolean = remember { + createNamedRemoteBoolean("testBoolean", true) + } + .withGlobalScope() RemoteBox( modifier = RemoteModifier.size(10.rdp) @@ -241,7 +264,7 @@ class NamedVariableDiscardedTest { val coreDoc = remoteCaptureRule.captureDocument(context) { RemoteBox { - val namedLong = rememberNamedRemoteLong("testLong", 42L) + val namedLong = remember { createNamedRemoteLong("testLong", 42L) } with(LocalRemoteComposeCreationState.current) { namedLong.id } } } @@ -255,7 +278,10 @@ class NamedVariableDiscardedTest { val coreDoc = remoteCaptureRule.captureDocument(context) { RemoteBox { - val namedLong = rememberNamedRemoteLong("testLong", 42L).withGlobalScope() + val namedLong = remember { + createNamedRemoteLong("testLong", 42L) + } + .withGlobalScope() with(LocalRemoteComposeCreationState.current) { namedLong.id } } } @@ -272,7 +298,7 @@ class NamedVariableDiscardedTest { val coreDoc = remoteCaptureRule.captureDocument(context) { RemoteBox { - val namedString = rememberNamedRemoteString("testString", "hello") + val namedString = remember { createNamedRemoteString("testString", "hello") } RemoteText(namedString) } } @@ -286,8 +312,10 @@ class NamedVariableDiscardedTest { val coreDoc = remoteCaptureRule.captureDocument(context) { RemoteBox { - val namedString = - rememberNamedRemoteString("testString", "hello").withGlobalScope() + val namedString = remember { + createNamedRemoteString("testString", "hello") + } + .withGlobalScope() RemoteText(namedString) } } @@ -305,7 +333,9 @@ class NamedVariableDiscardedTest { val coreDoc = remoteCaptureRule.captureDocument(context) { RemoteBox { - val namedBitmap = rememberNamedRemoteImageBitmap("testBitmap") { bitmap } + val namedBitmap = remember { + createNamedRemoteImageBitmap("testBitmap") { bitmap } + } RemoteBox( modifier = RemoteModifier.size(10.rdp) @@ -324,8 +354,10 @@ class NamedVariableDiscardedTest { val coreDoc = remoteCaptureRule.captureDocument(context) { RemoteBox { - val namedBitmap = - rememberNamedRemoteImageBitmap("testBitmap") { bitmap }.withGlobalScope() + val namedBitmap = remember { + createNamedRemoteImageBitmap("testBitmap") { bitmap } + } + .withGlobalScope() RemoteBox( modifier = RemoteModifier.size(10.rdp) diff --git a/compose/remote/remote-creation-compose/src/test/java/androidx/compose/remote/creation/compose/state/RemoteColorTest.kt b/compose/remote/remote-creation-compose/src/test/java/androidx/compose/remote/creation/compose/state/RemoteColorTest.kt index bd140a2112b3f..722e94d7793e5 100644 --- a/compose/remote/remote-creation-compose/src/test/java/androidx/compose/remote/creation/compose/state/RemoteColorTest.kt +++ b/compose/remote/remote-creation-compose/src/test/java/androidx/compose/remote/creation/compose/state/RemoteColorTest.kt @@ -39,6 +39,7 @@ import androidx.compose.remote.creation.platform.AndroidxRcPlatformServices import androidx.compose.remote.player.core.platform.AndroidRemoteContext import androidx.compose.remote.player.core.state.RemoteDomains import androidx.compose.remote.testing.RemoteCaptureTestRule +import androidx.compose.runtime.remember import androidx.compose.ui.geometry.Size import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.toArgb @@ -533,7 +534,7 @@ class RemoteColorTest { val colorName = "TEST" val coreDoc = remoteCaptureRule.captureDocument(context = androidContext) { - val namedColor = rememberNamedRemoteColor(colorName, Color.Red) + val namedColor = remember { createNamedRemoteColor(colorName, Color.Red) } val copy = namedColor.copy(alpha = 0f.rf) diff --git a/compose/remote/remote-creation-compose/src/test/java/androidx/compose/remote/creation/compose/state/RemoteFloatTest.kt b/compose/remote/remote-creation-compose/src/test/java/androidx/compose/remote/creation/compose/state/RemoteFloatTest.kt index b990fc57c125a..531a5a44b3c46 100644 --- a/compose/remote/remote-creation-compose/src/test/java/androidx/compose/remote/creation/compose/state/RemoteFloatTest.kt +++ b/compose/remote/remote-creation-compose/src/test/java/androidx/compose/remote/creation/compose/state/RemoteFloatTest.kt @@ -1852,7 +1852,9 @@ class RemoteFloatTest { creationDisplayInfo = displayInfo, context = applicationContext, ) { - val myFloatFromConstant = rememberNamedRemoteFloat("C") { 5.rf } + val myFloatFromConstant = remember { + createNamedRemoteFloatExpression("C") { 5.rf } + } RemoteBox(modifier = RemoteModifier.size(myFloatFromConstant.asRemoteDp())) } @@ -1874,10 +1876,11 @@ class RemoteFloatTest { creationDisplayInfo = displayInfo, context = applicationContext, ) { - val myFloatFromConstant = - rememberNamedRemoteFloat("E") { + val myFloatFromConstant = remember { + createNamedRemoteFloatExpression("E") { RemoteFloat(RemoteContext.FLOAT_CONTINUOUS_SEC) } + } RemoteBox(modifier = RemoteModifier.size(myFloatFromConstant.asRemoteDp())) } @@ -1900,7 +1903,7 @@ class RemoteFloatTest { creationDisplayInfo = displayInfo, context = applicationContext, ) { - val myFloatFromConstant = rememberMutableRemoteFloat { 5.rf } + val myFloatFromConstant = remember { MutableRemoteFloat { 5.rf } } RemoteBox(modifier = RemoteModifier.size(myFloatFromConstant.asRemoteDp())) } @@ -1927,8 +1930,10 @@ class RemoteFloatTest { creationDisplayInfo = displayInfo, context = applicationContext, ) { - val myFloatFromConstant = rememberMutableRemoteFloat { - RemoteFloat(RemoteContext.FLOAT_CONTINUOUS_SEC) + val myFloatFromConstant = remember { + MutableRemoteFloat { + RemoteFloat(RemoteContext.FLOAT_CONTINUOUS_SEC) + } } RemoteBox(modifier = RemoteModifier.size(myFloatFromConstant.asRemoteDp())) } @@ -2170,7 +2175,7 @@ class RemoteFloatTest { creationDisplayInfo = displayInfo, context = applicationContext, ) { - val myFloat = rememberMutableRemoteFloat { 5.rf } + val myFloat = remember { MutableRemoteFloat { 5.rf } } RemoteBox(modifier = RemoteModifier.size(myFloat.asRemoteDp())) } diff --git a/compose/remote/remote-creation-compose/src/test/java/androidx/compose/remote/creation/compose/state/RemoteStateCreationTest.kt b/compose/remote/remote-creation-compose/src/test/java/androidx/compose/remote/creation/compose/state/RemoteStateCreationTest.kt index 8caaa7dfc8693..109972e11677b 100644 --- a/compose/remote/remote-creation-compose/src/test/java/androidx/compose/remote/creation/compose/state/RemoteStateCreationTest.kt +++ b/compose/remote/remote-creation-compose/src/test/java/androidx/compose/remote/creation/compose/state/RemoteStateCreationTest.kt @@ -33,6 +33,7 @@ import androidx.compose.remote.creation.compose.state.RemoteBoolean.Companion.cr import androidx.compose.remote.creation.compose.state.RemoteColor.Companion.createNamedRemoteColor import androidx.compose.remote.creation.compose.state.RemoteDp.Companion.createNamedRemoteDp import androidx.compose.remote.creation.compose.state.RemoteFloat.Companion.createNamedRemoteFloat +import androidx.compose.remote.creation.compose.state.RemoteFloat.Companion.createNamedRemoteFloatExpression import androidx.compose.remote.creation.compose.state.RemoteFloatArray.Companion.createNamedRemoteFloatArray import androidx.compose.remote.creation.compose.state.RemoteImageBitmap.Companion.createNamedRemoteImageBitmap import androidx.compose.remote.creation.compose.state.RemoteInt.Companion.createNamedRemoteInt @@ -83,7 +84,7 @@ class RemoteStateCreationTest { fun rememberNamedRemoteInt_isTracked() = runTest { val coreDoc = remoteCaptureRule.captureDocument(context) { - val namedInt = rememberNamedRemoteInt("testInt", 42).withGlobalScope() + val namedInt = remember { createNamedRemoteInt("testInt", 42) }.withGlobalScope() RemoteBox(modifier = RemoteModifier.size(RemoteDp(namedInt.toRemoteFloat()))) } assertThat(coreDoc.getNamedVariables(NamedVariable.INT_TYPE)) @@ -95,7 +96,9 @@ class RemoteStateCreationTest { fun rememberNamedRemoteFloat_isTracked() = runTest { val coreDoc = remoteCaptureRule.captureDocument(context) { - val namedFloat = rememberNamedRemoteFloat("testFloat") { 42.42f.rf } + val namedFloat = remember { + createNamedRemoteFloatExpression("testFloat") { 42.42f.rf } + } RemoteBox(modifier = RemoteModifier.size(RemoteDp(namedFloat))) } assertThat(coreDoc.getNamedVariables(NamedVariable.FLOAT_TYPE)) @@ -107,7 +110,7 @@ class RemoteStateCreationTest { fun rememberNamedRemoteLong_isTracked() = runTest { val coreDoc = remoteCaptureRule.captureDocument(context) { - val namedLong = rememberNamedRemoteLong("testLong", 42L) + val namedLong = remember { createNamedRemoteLong("testLong", 42L) } namedLong.writeToDocument(LocalRemoteComposeCreationState.current) } @@ -118,7 +121,10 @@ class RemoteStateCreationTest { fun rememberNamedRemoteBoolean_isPresent() = runTest { val coreDoc = remoteCaptureRule.captureDocument(context) { - val namedBoolean = rememberNamedRemoteBoolean("isRed", true).withGlobalScope() + val namedBoolean = remember { + createNamedRemoteBoolean("isRed", true) + } + .withGlobalScope() // RemoteText(text = namedBoolean.select("a".rs, "b".rs)) RemoteBox( @@ -137,9 +143,11 @@ class RemoteStateCreationTest { runTest { val coreDoc = remoteCaptureRule.captureDocument(context) { - val namedFloat = rememberNamedRemoteFloat("shared") { 10f.rf } - val namedInt = rememberNamedRemoteInt("shared", 5) - val namedBoolean = rememberNamedRemoteBoolean("shared", true) + val namedFloat = remember { + createNamedRemoteFloatExpression("shared") { 10f.rf } + } + val namedInt = remember { createNamedRemoteInt("shared", 5) } + val namedBoolean = remember { createNamedRemoteBoolean("shared", true) } val selectedFloat = namedBoolean.select(namedFloat, 0f.rf) val selectedInt = namedBoolean.select(namedInt, 0.ri) @@ -158,7 +166,7 @@ class RemoteStateCreationTest { fun rememberNamedRemoteString_isTracked() = runTest { val coreDoc = remoteCaptureRule.captureDocument(context) { - val namedString = rememberNamedRemoteString("testString", "Hello") + val namedString = remember { createNamedRemoteString("testString", "Hello") } RemoteText(text = namedString) } assertThat(coreDoc.getNamedVariables(NamedVariable.STRING_TYPE)) @@ -170,7 +178,7 @@ class RemoteStateCreationTest { fun rememberNamedRemoteDp_isTracked() = runTest { val coreDoc = remoteCaptureRule.captureDocument(context) { - val namedDp = rememberNamedRemoteDp("testDp") { 10.rdp } + val namedDp = remember { createNamedRemoteDp("testDp") { 10.rdp } } RemoteBox(modifier = RemoteModifier.padding(namedDp.value)) } assertThat(coreDoc.getNamedVariables(NamedVariable.FLOAT_TYPE)) @@ -182,8 +190,10 @@ class RemoteStateCreationTest { fun rememberNamedRemoteColor_isTracked() = runTest { val coreDoc = remoteCaptureRule.captureDocument(context) { - val namedColor = - rememberNamedRemoteColor("testColor", Color.Magenta).withGlobalScope() + val namedColor = remember { + createNamedRemoteColor("testColor", Color.Magenta) + } + .withGlobalScope() RemoteBox(modifier = RemoteModifier.size(10.rdp).background(namedColor)) } assertThat(coreDoc.getNamedVariables(NamedVariable.COLOR_TYPE)) @@ -197,12 +207,13 @@ class RemoteStateCreationTest { limitsRule.setEnableImageFiles(true) val coreDoc = remoteCaptureRule.captureDocument(context) { - val namedBitmap = - rememberNamedRemoteImageBitmap( + val namedBitmap = remember { + createNamedRemoteImageBitmap( name = "testBitmapUrl", url = "android.resource://androidx.compose.remote.foundation/drawable/dummy", ) + } RemoteBox( modifier = RemoteModifier.size(100.rdp) @@ -217,12 +228,13 @@ class RemoteStateCreationTest { limitsRule.setEnableImageFiles(true) val coreDoc = remoteCaptureRule.captureDocument(context) { - val namedBitmap = - rememberNamedRemoteImageBitmap("testBitmapImage") { + val namedBitmap = remember { + createNamedRemoteImageBitmap("testBitmapImage") { Bitmap.createBitmap(10, 10, Bitmap.Config.ARGB_8888) .apply { eraseColor(android.graphics.Color.GREEN) } .asImageBitmap() } + } RemoteBox( modifier = RemoteModifier.size(100.rdp) @@ -238,7 +250,9 @@ class RemoteStateCreationTest { val url = "android.resource://androidx.compose.remote.foundation/drawable/dummy" val prevDoc = remoteCaptureRule.captureDocument(context) { - val namedBitmap = rememberNamedRemoteImageBitmap(name = "testBitmapUrl", url = url) + val namedBitmap = remember { + createNamedRemoteImageBitmap(name = "testBitmapUrl", url = url) + } RemoteBox( modifier = RemoteModifier.size(100.rdp) @@ -272,8 +286,9 @@ class RemoteStateCreationTest { val prevDoc = remoteCaptureRule.captureDocument(context) { - val namedBitmap = - rememberNamedRemoteImageBitmap("testBitmapImage") { createBitmap() } + val namedBitmap = remember { + createNamedRemoteImageBitmap("testBitmapImage") { createBitmap() } + } RemoteBox( modifier = RemoteModifier.size(100.rdp) @@ -336,10 +351,11 @@ class RemoteStateCreationTest { limitsRule.setEnableImageFiles(true) val coreDoc = remoteCaptureRule.captureDocument(context) { - val bitmap = - rememberRemoteImageBitmap( + val bitmap = remember { + RemoteImageBitmap( url = "android.resource://androidx.compose.remote.foundation/drawable/dummy" ) + } RemoteBox( modifier = RemoteModifier.size(100.rdp).background(painterRemoteImageBitmap(bitmap)) @@ -357,19 +373,18 @@ class RemoteStateCreationTest { val coreDoc = remoteCaptureRule.captureDocument(context) { val creationState = LocalRemoteComposeCreationState.current - val bitmap1 = rememberRemoteImageBitmap(url = "url1") - val bitmap2 = rememberRemoteImageBitmap(url = "url1") - val bitmap3 = rememberRemoteImageBitmap(url = "url2") + val bitmap1 = remember { RemoteImageBitmap(url = "url1") } + val bitmap2 = remember { RemoteImageBitmap(url = "url1") } + val bitmap3 = remember { RemoteImageBitmap(url = "url2") } id1 = bitmap1.getIdForCreationState(creationState) id2 = bitmap2.getIdForCreationState(creationState) id3 = bitmap3.getIdForCreationState(creationState) } - com.google.common.truth.Truth.assertThat(id1).isNotEqualTo(-1) - com.google.common.truth.Truth.assertThat(id1).isEqualTo(id2) // Same URL should have same ID - com.google.common.truth.Truth.assertThat(id1) - .isNotEqualTo(id3) // Different URL should have different ID + assertThat(id1).isNotEqualTo(-1) + assertThat(id1).isEqualTo(id2) // Same URL should have same ID + assertThat(id1).isNotEqualTo(id3) // Different URL should have different ID } @Test @@ -380,7 +395,7 @@ class RemoteStateCreationTest { .asImageBitmap() val coreDoc = remoteCaptureRule.captureDocument(context) { - val bitmap = rememberMutableRemoteImageBitmap(imageBitmap) + val bitmap = remember { MutableRemoteImageBitmap(imageBitmap) } RemoteBox( modifier = RemoteModifier.size(100.rdp).background(painterRemoteImageBitmap(bitmap)) diff --git a/compose/remote/remote-creation-compose/src/test/java/androidx/compose/remote/creation/compose/state/RemoteStateOverrideTest.kt b/compose/remote/remote-creation-compose/src/test/java/androidx/compose/remote/creation/compose/state/RemoteStateOverrideTest.kt index 1358fc45848b1..0534a7753a712 100644 --- a/compose/remote/remote-creation-compose/src/test/java/androidx/compose/remote/creation/compose/state/RemoteStateOverrideTest.kt +++ b/compose/remote/remote-creation-compose/src/test/java/androidx/compose/remote/creation/compose/state/RemoteStateOverrideTest.kt @@ -29,7 +29,12 @@ import androidx.compose.remote.creation.compose.layout.RemoteText import androidx.compose.remote.creation.compose.modifier.RemoteModifier import androidx.compose.remote.creation.compose.modifier.background import androidx.compose.remote.creation.compose.modifier.size +import androidx.compose.remote.creation.compose.state.RemoteColor.Companion.createNamedRemoteColor +import androidx.compose.remote.creation.compose.state.RemoteFloat.Companion.createNamedRemoteFloatExpression +import androidx.compose.remote.creation.compose.state.RemoteInt.Companion.createNamedRemoteInt +import androidx.compose.remote.creation.compose.state.RemoteString.Companion.createNamedRemoteString import androidx.compose.remote.player.core.platform.AndroidRemoteContext +import androidx.compose.runtime.remember import androidx.compose.ui.graphics.Color import androidx.test.core.app.ApplicationProvider import androidx.test.filters.SdkSuppress @@ -82,7 +87,7 @@ class RemoteStateOverrideTest { creationDisplayInfo = displayInfo, context = applicationContext, ) { - val myFloat = rememberNamedRemoteFloat("myFloat") { 5f.rf } + val myFloat = remember { createNamedRemoteFloatExpression("myFloat") { 5f.rf } } RemoteBox(modifier = RemoteModifier.size(RemoteDp(myFloat))) } @@ -103,7 +108,7 @@ class RemoteStateOverrideTest { creationDisplayInfo = displayInfo, context = applicationContext, ) { - val myColor = rememberNamedRemoteColor("myColor", Color.Red) + val myColor = remember { createNamedRemoteColor("myColor", Color.Red) } RemoteBox(modifier = RemoteModifier.size(10.rdp).background(myColor)) } @@ -124,7 +129,7 @@ class RemoteStateOverrideTest { creationDisplayInfo = displayInfo, context = applicationContext, ) { - val myInt = rememberNamedRemoteInt("myInt", 42) + val myInt = remember { createNamedRemoteInt("myInt", 42) } RemoteBox(modifier = RemoteModifier.size(RemoteDp(myInt.toRemoteFloat()))) } @@ -144,7 +149,7 @@ class RemoteStateOverrideTest { creationDisplayInfo = displayInfo, context = applicationContext, ) { - val myString = rememberNamedRemoteString("myString", "hello") + val myString = remember { createNamedRemoteString("myString", "hello") } RemoteText(myString) } diff --git a/compose/remote/remote-player-compose/src/androidTest/java/androidx/compose/remote/player/compose/creation/compose/state/RemoteStateTest.kt b/compose/remote/remote-player-compose/src/androidTest/java/androidx/compose/remote/player/compose/creation/compose/state/RemoteStateTest.kt index 82ccf8e468c16..21a55ff53f48d 100644 --- a/compose/remote/remote-player-compose/src/androidTest/java/androidx/compose/remote/player/compose/creation/compose/state/RemoteStateTest.kt +++ b/compose/remote/remote-player-compose/src/androidTest/java/androidx/compose/remote/player/compose/creation/compose/state/RemoteStateTest.kt @@ -24,13 +24,14 @@ import androidx.compose.remote.creation.compose.layout.RemoteColumn import androidx.compose.remote.creation.compose.layout.RemoteText import androidx.compose.remote.creation.compose.modifier.RemoteModifier import androidx.compose.remote.creation.compose.modifier.size +import androidx.compose.remote.creation.compose.state.RemoteFloat.Companion.createNamedRemoteFloatExpression import androidx.compose.remote.creation.compose.state.RemoteString +import androidx.compose.remote.creation.compose.state.RemoteString.Companion.createNamedRemoteString import androidx.compose.remote.creation.compose.state.rdp -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteFloat -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteString import androidx.compose.remote.creation.compose.state.rememberRemoteFloatExpression import androidx.compose.remote.creation.compose.state.rs import androidx.compose.remote.testing.RemoteContentTestRule +import androidx.compose.runtime.remember import androidx.test.core.app.ApplicationProvider import androidx.test.filters.MediumTest import androidx.test.filters.SdkSuppress @@ -75,11 +76,13 @@ class RemoteStateTest { val width = rememberRemoteFloatExpression { componentWidth() } - val configurableWidth = - rememberNamedRemoteFloat(name = "configurableWidth") { width } + val configurableWidth = remember { + createNamedRemoteFloatExpression(name = "configurableWidth") { width } + } - val configurableWidth2 = - rememberNamedRemoteFloat(name = "configurableWidth2") { width } + val configurableWidth2 = remember { + createNamedRemoteFloatExpression(name = "configurableWidth2") { width } + } RemoteText(RemoteString("Width: ") + width.toRemoteString(DecimalFormat("###0"))) RemoteText( @@ -116,9 +119,9 @@ class RemoteStateTest { RemoteColumn(modifier = RemoteModifier.size(100.rdp)) { val valString = "Hello".rs - val namedString1 = rememberNamedRemoteString(name = "named1", "Hello") + val namedString1 = remember { createNamedRemoteString(name = "named1", "Hello") } - val namedString2 = rememberNamedRemoteString(name = "named2", "Hello") + val namedString2 = remember { createNamedRemoteString(name = "named2", "Hello") } RemoteText(RemoteString("val: ") + valString) RemoteText(RemoteString("named1: ") + namedString1) diff --git a/compose/remote/remote-player-compose/src/test/java/androidx/compose/remote/player/compose/embedded/RcPlayerAnimationTest.kt b/compose/remote/remote-player-compose/src/test/java/androidx/compose/remote/player/compose/embedded/RcPlayerAnimationTest.kt index e5e215cc8b4b2..37487578fcda7 100644 --- a/compose/remote/remote-player-compose/src/test/java/androidx/compose/remote/player/compose/embedded/RcPlayerAnimationTest.kt +++ b/compose/remote/remote-player-compose/src/test/java/androidx/compose/remote/player/compose/embedded/RcPlayerAnimationTest.kt @@ -42,20 +42,21 @@ import androidx.compose.remote.creation.compose.modifier.height import androidx.compose.remote.creation.compose.modifier.semantics import androidx.compose.remote.creation.compose.modifier.size import androidx.compose.remote.creation.compose.modifier.width +import androidx.compose.remote.creation.compose.state.MutableRemoteBoolean +import androidx.compose.remote.creation.compose.state.MutableRemoteFloat +import androidx.compose.remote.creation.compose.state.MutableRemoteInt import androidx.compose.remote.creation.compose.state.RemoteEasing import androidx.compose.remote.creation.compose.state.RemoteInt import androidx.compose.remote.creation.compose.state.animateRemoteDpAsState import androidx.compose.remote.creation.compose.state.animateRemoteFloatAsState import androidx.compose.remote.creation.compose.state.rc import androidx.compose.remote.creation.compose.state.rdp -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteBoolean -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteFloat -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteInt import androidx.compose.remote.creation.compose.state.remoteTween import androidx.compose.remote.creation.compose.state.rf import androidx.compose.remote.creation.compose.state.rs import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color @@ -228,7 +229,7 @@ class RcPlayerAnimationTest { captureSingleRemoteDocument( context = context, content = { - val targetWidth = rememberMutableRemoteFloat(50f) + val targetWidth = remember { MutableRemoteFloat(50f) } val animatedWidth = animateRemoteFloatAsState( targetValue = targetWidth, @@ -538,7 +539,7 @@ class RcPlayerAnimationTest { captureSingleRemoteDocument( context = context, content = { - val checked = rememberMutableRemoteBoolean(false) + val checked = remember { MutableRemoteBoolean(false) } RemoteColumn { RemoteBox( modifier = @@ -641,7 +642,7 @@ class RcPlayerAnimationTest { captureSingleRemoteDocument( context = context, content = { - val stateIndex = rememberMutableRemoteInt(0) + val stateIndex = remember { MutableRemoteInt(0) } RemoteColumn { RemoteBox( modifier = @@ -760,7 +761,7 @@ class RcPlayerAnimationTest { captureSingleRemoteDocument( context = context, content = { - val state = rememberMutableRemoteBoolean(false) + val state = remember { MutableRemoteBoolean(false) } RemoteColumn { RemoteBox( modifier = @@ -907,7 +908,7 @@ class RcPlayerAnimationTest { captureSingleRemoteDocument( context = context, content = { - val state = rememberMutableRemoteBoolean(false) + val state = remember { MutableRemoteBoolean(false) } RemoteColumn { RemoteBox( modifier = diff --git a/compose/remote/remote-player-compose/src/test/java/androidx/compose/remote/player/compose/embedded/RcPlayerGraphicsLayerTest.kt b/compose/remote/remote-player-compose/src/test/java/androidx/compose/remote/player/compose/embedded/RcPlayerGraphicsLayerTest.kt index adba11d0227c7..e740281fb7725 100644 --- a/compose/remote/remote-player-compose/src/test/java/androidx/compose/remote/player/compose/embedded/RcPlayerGraphicsLayerTest.kt +++ b/compose/remote/remote-player-compose/src/test/java/androidx/compose/remote/player/compose/embedded/RcPlayerGraphicsLayerTest.kt @@ -43,11 +43,12 @@ import androidx.compose.remote.creation.compose.modifier.height import androidx.compose.remote.creation.compose.modifier.semantics import androidx.compose.remote.creation.compose.modifier.size import androidx.compose.remote.creation.compose.modifier.width +import androidx.compose.remote.creation.compose.state.MutableRemoteFloat import androidx.compose.remote.creation.compose.state.rc import androidx.compose.remote.creation.compose.state.rdp -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteFloat import androidx.compose.remote.creation.compose.state.rf import androidx.compose.remote.creation.compose.state.rs +import androidx.compose.runtime.remember import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.asAndroidBitmap @@ -225,7 +226,7 @@ class RcPlayerGraphicsLayerTest { captureSingleRemoteDocument( context = context, content = { - val origin = rememberMutableRemoteFloat(0.5f) + val origin = remember { MutableRemoteFloat(0.5f) } RemoteColumn { // 60x30 non-square red box rotated 180 degrees. // At origin (0.5, 0.5), pivot is (30, 15) -> occupies (0..60, @@ -296,7 +297,7 @@ class RcPlayerGraphicsLayerTest { captureSingleRemoteDocument( context = context, content = { - val scaleVar = rememberMutableRemoteFloat(1f) + val scaleVar = remember { MutableRemoteFloat(1f) } RemoteColumn { // 40x40 red box with origin (0f, 0f). // At scaleX = 1f -> width is 40dp (spans x = 0..40dp). diff --git a/compose/remote/remote-player-compose/src/test/java/androidx/compose/remote/player/compose/embedded/RcPlayerInteractivityTest.kt b/compose/remote/remote-player-compose/src/test/java/androidx/compose/remote/player/compose/embedded/RcPlayerInteractivityTest.kt index 248411ec74db3..240d6b1a25ee7 100644 --- a/compose/remote/remote-player-compose/src/test/java/androidx/compose/remote/player/compose/embedded/RcPlayerInteractivityTest.kt +++ b/compose/remote/remote-player-compose/src/test/java/androidx/compose/remote/player/compose/embedded/RcPlayerInteractivityTest.kt @@ -36,12 +36,12 @@ import androidx.compose.remote.creation.compose.layout.RemoteBox import androidx.compose.remote.creation.compose.layout.RemoteComposable import androidx.compose.remote.creation.compose.layout.RemoteStateLayout import androidx.compose.remote.creation.compose.modifier.RemoteModifier +import androidx.compose.remote.creation.compose.modifier.RemoteScrollState import androidx.compose.remote.creation.compose.modifier.background import androidx.compose.remote.creation.compose.modifier.clickable import androidx.compose.remote.creation.compose.modifier.contentDescription import androidx.compose.remote.creation.compose.modifier.height import androidx.compose.remote.creation.compose.modifier.padding -import androidx.compose.remote.creation.compose.modifier.rememberRemoteScrollState import androidx.compose.remote.creation.compose.modifier.semantics import androidx.compose.remote.creation.compose.modifier.size import androidx.compose.remote.creation.compose.modifier.verticalScroll @@ -49,6 +49,8 @@ import androidx.compose.remote.creation.compose.modifier.visibility import androidx.compose.remote.creation.compose.modifier.width import androidx.compose.remote.creation.compose.modifier.widthIn import androidx.compose.remote.creation.compose.state.Hoist +import androidx.compose.remote.creation.compose.state.MutableRemoteFloat +import androidx.compose.remote.creation.compose.state.MutableRemoteInt import androidx.compose.remote.creation.compose.state.RemoteEasing import androidx.compose.remote.creation.compose.state.RemoteFloat import androidx.compose.remote.creation.compose.state.abs @@ -73,8 +75,6 @@ import androidx.compose.remote.creation.compose.state.min import androidx.compose.remote.creation.compose.state.pow import androidx.compose.remote.creation.compose.state.rc import androidx.compose.remote.creation.compose.state.rdp -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteFloat -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteInt import androidx.compose.remote.creation.compose.state.remoteTween import androidx.compose.remote.creation.compose.state.ri import androidx.compose.remote.creation.compose.state.round @@ -148,8 +148,9 @@ class RcPlayerInteractivityTest { content = { // RemoteCompose visibility constants are GONE=0, VISIBLE=1 (not the // Android View 0/4/8 values). - val visibilityState = - rememberMutableRemoteInt(Component.Visibility.VISIBLE) + val visibilityState = remember { + MutableRemoteInt(Component.Visibility.VISIBLE) + } androidx.compose.remote.creation.compose.layout.RemoteColumn( modifier = RemoteModifier.size(100.rdp) @@ -227,8 +228,9 @@ class RcPlayerInteractivityTest { captureSingleRemoteDocument( context = context, content = { - val visibilityState = - rememberMutableRemoteInt(Component.Visibility.VISIBLE) + val visibilityState = remember { + MutableRemoteInt(Component.Visibility.VISIBLE) + } // One operand is a (non-constant) variable, so this authors an // IntegerExpression rather than folding to a constant. val visibilityExpr = visibilityState * 1.ri @@ -304,7 +306,7 @@ class RcPlayerInteractivityTest { captureSingleRemoteDocument( context = context, content = { - val n = rememberMutableRemoteInt(0) + val n = remember { MutableRemoteInt(0) } val label = n.toRemoteString() androidx.compose.remote.creation.compose.layout.RemoteColumn( modifier = RemoteModifier.size(100.rdp) @@ -359,7 +361,7 @@ class RcPlayerInteractivityTest { captureSingleRemoteDocument( context = context, content = { - val n = rememberMutableRemoteInt(0) + val n = remember { MutableRemoteInt(0) } val doubled = n * 2.ri // intermediate IntegerExpression, not displayed val label = doubled.toRemoteString() androidx.compose.remote.creation.compose.layout.RemoteColumn( @@ -420,7 +422,7 @@ class RcPlayerInteractivityTest { captureSingleRemoteDocument( context = context, content = { - val target = rememberMutableRemoteFloat(123.45f) + val target = remember { MutableRemoteFloat(123.45f) } // Animate from 0 to `target` over 1s, linearly. val animatedSize = animateRemoteFloatAsState( @@ -731,10 +733,10 @@ class RcPlayerInteractivityTest { content = { // Variable inputs (defeat constant folding); all resolve so each // expression equals 60. - val v = rememberMutableRemoteFloat(60f) - val half = rememberMutableRemoteFloat(0.5f) - val one = rememberMutableRemoteFloat(1f) - val thousand = rememberMutableRemoteFloat(1000f) + val v = remember { MutableRemoteFloat(60f) } + val half = remember { MutableRemoteFloat(0.5f) } + val one = remember { MutableRemoteFloat(1f) } + val thousand = remember { MutableRemoteFloat(1000f) } val a = v * 0.6f // 36 val b = v * 0.8f // 48 @@ -1142,7 +1144,7 @@ class RcPlayerInteractivityTest { captureSingleRemoteDocument( context = context, content = { - val scrollState = rememberRemoteScrollState() + val scrollState = remember { RemoteScrollState() } androidx.compose.remote.creation.compose.layout.RemoteColumn( modifier = RemoteModifier.size(200.rdp) ) { @@ -1269,8 +1271,8 @@ class RcPlayerInteractivityTest { var uploadedScore = -1 val content: @Composable @RemoteComposable () -> Unit = { - val currentPage = rememberMutableRemoteInt(0) - val choices = (0..2).map { rememberMutableRemoteInt(-1) } + val currentPage = remember { MutableRemoteInt(0) } + val choices = (0..2).map { remember { MutableRemoteInt(-1) } } val answers = listOf(1, 2, 0) val scores = (0..2).map { i -> choices[i].isEqualTo(answers[i].ri).toRemoteInt() } val totalScore = remember { scores.reduce { acc, s -> acc + s } } diff --git a/compose/remote/remote-player-compose/src/test/java/androidx/compose/remote/player/compose/embedded/RcPlayerPrimitivesTest.kt b/compose/remote/remote-player-compose/src/test/java/androidx/compose/remote/player/compose/embedded/RcPlayerPrimitivesTest.kt index 22b46a28749e4..d89669e4c1e11 100644 --- a/compose/remote/remote-player-compose/src/test/java/androidx/compose/remote/player/compose/embedded/RcPlayerPrimitivesTest.kt +++ b/compose/remote/remote-player-compose/src/test/java/androidx/compose/remote/player/compose/embedded/RcPlayerPrimitivesTest.kt @@ -33,6 +33,7 @@ import androidx.compose.remote.creation.RemotePath import androidx.compose.remote.creation.compose.ExperimentalRemoteCreationComposeApi import androidx.compose.remote.creation.compose.RemoteComposeCreationComposeFlags import androidx.compose.remote.creation.compose.capture.LocalRemoteComposeCreationState +import androidx.compose.remote.creation.compose.capture.RemoteImageVector import androidx.compose.remote.creation.compose.capture.captureSingleRemoteDocument import androidx.compose.remote.creation.compose.layout.RemoteBox import androidx.compose.remote.creation.compose.layout.RemoteCanvas @@ -40,6 +41,7 @@ import androidx.compose.remote.creation.compose.layout.RemoteOffset import androidx.compose.remote.creation.compose.layout.RemoteSize import androidx.compose.remote.creation.compose.layout.RemoteText import androidx.compose.remote.creation.compose.modifier.RemoteModifier +import androidx.compose.remote.creation.compose.modifier.RemoteScrollState import androidx.compose.remote.creation.compose.modifier.alignByBaseline import androidx.compose.remote.creation.compose.modifier.background import androidx.compose.remote.creation.compose.modifier.basicMarquee @@ -56,7 +58,6 @@ import androidx.compose.remote.creation.compose.modifier.onTouchCancel import androidx.compose.remote.creation.compose.modifier.onTouchDown import androidx.compose.remote.creation.compose.modifier.onTouchUp import androidx.compose.remote.creation.compose.modifier.padding -import androidx.compose.remote.creation.compose.modifier.rememberRemoteScrollState import androidx.compose.remote.creation.compose.modifier.rippleEffect import androidx.compose.remote.creation.compose.modifier.size import androidx.compose.remote.creation.compose.modifier.verticalScroll @@ -67,9 +68,12 @@ import androidx.compose.remote.creation.compose.modifier.zIndex import androidx.compose.remote.creation.compose.shaders.RemoteBrush import androidx.compose.remote.creation.compose.shaders.RemoteLinearShader import androidx.compose.remote.creation.compose.shaders.image +import androidx.compose.remote.creation.compose.state.MutableRemoteInt import androidx.compose.remote.creation.compose.state.RemoteBlendModeColorFilter import androidx.compose.remote.creation.compose.state.RemoteColor +import androidx.compose.remote.creation.compose.state.RemoteColor.Companion.createNamedRemoteColor import androidx.compose.remote.creation.compose.state.RemoteFloatArray.Companion.createNamedRemoteFloatArray +import androidx.compose.remote.creation.compose.state.RemoteLong.Companion.createNamedRemoteLong import androidx.compose.remote.creation.compose.state.RemoteMatrix3x3.Companion.createRotate import androidx.compose.remote.creation.compose.state.RemotePaint import androidx.compose.remote.creation.compose.state.animateRemoteFloatAsState @@ -77,9 +81,6 @@ import androidx.compose.remote.creation.compose.state.deltaFromReferenceInSecond import androidx.compose.remote.creation.compose.state.rb import androidx.compose.remote.creation.compose.state.rc import androidx.compose.remote.creation.compose.state.rdp -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteInt -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteColor -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteLong import androidx.compose.remote.creation.compose.state.remoteTween import androidx.compose.remote.creation.compose.state.rf import androidx.compose.remote.creation.compose.state.ri @@ -107,6 +108,7 @@ import androidx.compose.ui.text.style.TextDecoration import androidx.compose.ui.unit.dp import androidx.test.core.app.ApplicationProvider import androidx.wear.compose.remote.material3.RemoteButton +import androidx.wear.compose.remote.material3.RemoteIcon import java.io.ByteArrayInputStream import kotlin.OptIn import kotlin.test.assertFailsWith @@ -2655,7 +2657,7 @@ class RcPlayerPrimitivesTest { .captureSingleRemoteDocument( context = context, content = { - val scrollState = rememberRemoteScrollState() + val scrollState = remember { RemoteScrollState() } androidx.compose.remote.creation.compose.layout.RemoteBox( modifier = RemoteModifier.size(100.rdp).verticalScroll(scrollState) ) { @@ -2966,7 +2968,7 @@ class RcPlayerPrimitivesTest { .captureSingleRemoteDocument( context = context, content = { - val mutableInt = rememberMutableRemoteInt(1) + val mutableInt = remember { MutableRemoteInt(1) } // shl returns RemoteIntExpression if one of the operands is not // constant val expression = mutableInt shl 2.ri @@ -3014,7 +3016,7 @@ class RcPlayerPrimitivesTest { .captureSingleRemoteDocument( context = context, content = { - val longState = rememberNamedRemoteLong("myLong", 0L) + val longState = remember { createNamedRemoteLong("myLong", 0L) } val floatExpr = deltaFromReferenceInSeconds(longState) androidx.compose.remote.creation.compose.layout.RemoteBox( modifier = @@ -3279,19 +3281,17 @@ class RcPlayerPrimitivesTest { val context = ApplicationProvider.getApplicationContext() val documentBytes = - androidx.compose.remote.creation.compose.capture - .captureSingleRemoteDocument( + captureSingleRemoteDocument( context = context, content = { - val tintVar = - androidx.compose.remote.creation.compose.state - .rememberNamedRemoteColor( - "tint", - androidx.compose.ui.graphics.Color(0xFFFF0000), - ) + val tintVar = remember { + createNamedRemoteColor( + "tint", + Color(0xFFFF0000), + ) + } val imageVector = - androidx.compose.remote.creation.compose.capture.RemoteImageVector - .Builder( + RemoteImageVector.Builder( viewportWidth = 24f.rf, viewportHeight = 24f.rf, tintColor = tintVar, @@ -3299,7 +3299,7 @@ class RcPlayerPrimitivesTest { ) .build() - androidx.wear.compose.remote.material3.RemoteIcon( + RemoteIcon( imageVector = imageVector, contentDescription = null, tint = tintVar, @@ -3961,11 +3961,12 @@ class RcPlayerPrimitivesTest { .captureSingleRemoteDocument( context = context, content = { - val namedColor = - rememberNamedRemoteColor( + val namedColor = remember { + createNamedRemoteColor( "myColor", androidx.compose.ui.graphics.Color.Red, ) + } androidx.compose.remote.creation.compose.layout.RemoteCanvas( modifier = RemoteModifier.size(100.rdp) ) { @@ -4021,7 +4022,9 @@ class RcPlayerPrimitivesTest { captureSingleRemoteDocument( context = context, content = { - val namedColor = rememberNamedRemoteColor("myColor", Color.Red) + val namedColor = remember { + createNamedRemoteColor("myColor", Color.Red) + } RemoteCanvas(modifier = RemoteModifier.size(100.rdp)) { val paint = RemotePaint().apply { color = namedColor } drawRect( @@ -4089,11 +4092,12 @@ class RcPlayerPrimitivesTest { .captureSingleRemoteDocument( context = context, content = { - val namedColor = - rememberNamedRemoteColor( + val namedColor = remember { + createNamedRemoteColor( "myColor", androidx.compose.ui.graphics.Color.Red, ) + } val colorFilter = RemoteBlendModeColorFilter(namedColor, BlendMode.SrcOver) androidx.compose.remote.creation.compose.layout.RemoteCanvas( diff --git a/compose/remote/remote-player-compose/src/test/java/androidx/compose/remote/player/compose/embedded/RcPlayerStateTest.kt b/compose/remote/remote-player-compose/src/test/java/androidx/compose/remote/player/compose/embedded/RcPlayerStateTest.kt index 41d05132b1012..74641b91269db 100644 --- a/compose/remote/remote-player-compose/src/test/java/androidx/compose/remote/player/compose/embedded/RcPlayerStateTest.kt +++ b/compose/remote/remote-player-compose/src/test/java/androidx/compose/remote/player/compose/embedded/RcPlayerStateTest.kt @@ -34,21 +34,22 @@ import androidx.compose.remote.creation.compose.modifier.contentDescription import androidx.compose.remote.creation.compose.modifier.semantics import androidx.compose.remote.creation.compose.modifier.size import androidx.compose.remote.creation.compose.modifier.visibility +import androidx.compose.remote.creation.compose.state.RemoteBoolean.Companion.createNamedRemoteBoolean +import androidx.compose.remote.creation.compose.state.RemoteColor.Companion.createNamedRemoteColor +import androidx.compose.remote.creation.compose.state.RemoteFloat.Companion.createNamedRemoteFloatExpression import androidx.compose.remote.creation.compose.state.RemoteFloatArray.Companion.createNamedRemoteFloatArray +import androidx.compose.remote.creation.compose.state.RemoteImageBitmap.Companion.createNamedRemoteImageBitmap +import androidx.compose.remote.creation.compose.state.RemoteInt.Companion.createNamedRemoteInt import androidx.compose.remote.creation.compose.state.RemoteState +import androidx.compose.remote.creation.compose.state.RemoteString.Companion.createNamedRemoteString import androidx.compose.remote.creation.compose.state.asRemoteDp import androidx.compose.remote.creation.compose.state.rdp -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteBoolean -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteColor -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteFloat -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteImageBitmap -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteInt -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteString import androidx.compose.remote.creation.compose.state.rf import androidx.compose.remote.creation.compose.state.ri import androidx.compose.remote.creation.compose.state.rs import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color @@ -90,11 +91,11 @@ class RcPlayerStateTest { @Test fun testPreCompositionSetAndGet() { val document = createDocument { - val progress = rememberNamedRemoteFloat("progress") { 0.25f.rf } - val count = rememberNamedRemoteInt("count", 10) - val flag = rememberNamedRemoteBoolean("flag", false) - val title = rememberNamedRemoteString("title", "Initial Title") - val color = rememberNamedRemoteColor("accent", Color.Red) + val progress = remember { createNamedRemoteFloatExpression("progress") { 0.25f.rf } } + val count = remember { createNamedRemoteInt("count", 10) } + val flag = remember { createNamedRemoteBoolean("flag", false) } + val title = remember { createNamedRemoteString("title", "Initial Title") } + val color = remember { createNamedRemoteColor("accent", Color.Red) } val widthDp = progress.asRemoteDp() val heightDp = count.toRemoteFloat().asRemoteDp() @@ -157,7 +158,7 @@ class RcPlayerStateTest { @Test fun testReactiveRecompositionOnSet() { val document = createDocument { - val text = rememberNamedRemoteString("message", "Hello") + val text = remember { createNamedRemoteString("message", "Hello") } RemoteText(text = text) } @@ -184,7 +185,7 @@ class RcPlayerStateTest { @Test fun testTwoWayStateDelegation() { val document = createDocument { - val progress = rememberNamedRemoteFloat("progress") { 10f.rf } + val progress = remember { createNamedRemoteFloatExpression("progress") { 10f.rf } } RemoteBox( modifier = RemoteModifier.size(progress.asRemoteDp(), 50.rdp).semantics { @@ -217,9 +218,9 @@ class RcPlayerStateTest { @Test fun testClearOverrideRestoresInitialValue() { val document = createDocument { - val progress = rememberNamedRemoteFloat("progress") { 20f.rf } - val count = rememberNamedRemoteInt("count", 5) - val title = rememberNamedRemoteString("title", "Initial") + val progress = remember { createNamedRemoteFloatExpression("progress") { 20f.rf } } + val count = remember { createNamedRemoteInt("count", 5) } + val title = remember { createNamedRemoteString("title", "Initial") } RemoteBox( modifier = RemoteModifier.size(progress.asRemoteDp(), count.toRemoteFloat().asRemoteDp()) @@ -254,10 +255,13 @@ class RcPlayerStateTest { fun testNameResolutionWithDefaultPrefix() { val document = createDocument { // By default, rememberNamedRemoteFloat uses Domain.User -> "USER:user_var" - val userVar = rememberNamedRemoteFloat("user_var") { 15f.rf } + val userVar = remember { createNamedRemoteFloatExpression("user_var") { 15f.rf } } // An unprefixed variable - val rawVar = - rememberNamedRemoteFloat("raw_var", domain = RemoteState.Domain.None) { 25f.rf } + val rawVar = remember { + createNamedRemoteFloatExpression("raw_var", domain = RemoteState.Domain.None) { + 25f.rf + } + } RemoteBox( modifier = RemoteModifier.size(userVar.asRemoteDp(), rawVar.asRemoteDp()).semantics { @@ -289,10 +293,14 @@ class RcPlayerStateTest { @Test fun testNameResolutionWithNullDefaultPrefix() { val document = createDocument { - val rawVar = - rememberNamedRemoteFloat("unprefixed_var", domain = RemoteState.Domain.None) { + val rawVar = remember { + createNamedRemoteFloatExpression( + "unprefixed_var", + domain = RemoteState.Domain.None, + ) { 100f.rf } + } RemoteBox(modifier = RemoteModifier.size(rawVar.asRemoteDp(), 10.rdp)) } @@ -310,7 +318,9 @@ class RcPlayerStateTest { val initialAndroidBitmap = Bitmap.createBitmap(8, 8, Bitmap.Config.ARGB_8888) val initialBitmap = initialAndroidBitmap.asImageBitmap() val document = createDocument { - val remoteImage = rememberNamedRemoteImageBitmap("custom_image") { initialBitmap } + val remoteImage = remember { + createNamedRemoteImageBitmap("custom_image") { initialBitmap } + } RemoteImage(remoteBitmap = remoteImage, contentDescription = "image".rs) } diff --git a/compose/remote/remote-testing/src/androidTest/java/androidx/compose/remote/testing/RemoteContentTestRuleScreenshotTest.kt b/compose/remote/remote-testing/src/androidTest/java/androidx/compose/remote/testing/RemoteContentTestRuleScreenshotTest.kt index c95a46104b63c..c7a1217143d88 100644 --- a/compose/remote/remote-testing/src/androidTest/java/androidx/compose/remote/testing/RemoteContentTestRuleScreenshotTest.kt +++ b/compose/remote/remote-testing/src/androidTest/java/androidx/compose/remote/testing/RemoteContentTestRuleScreenshotTest.kt @@ -25,10 +25,11 @@ import androidx.compose.remote.creation.compose.modifier.RemoteModifier import androidx.compose.remote.creation.compose.modifier.background import androidx.compose.remote.creation.compose.modifier.clickable import androidx.compose.remote.creation.compose.modifier.fillMaxSize +import androidx.compose.remote.creation.compose.state.MutableRemoteString import androidx.compose.remote.creation.compose.state.rc -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteString import androidx.compose.remote.creation.compose.state.rs import androidx.compose.remote.testing.util.GoldenScreenshotNameTestRule +import androidx.compose.runtime.remember import androidx.compose.testutils.assertAgainstGolden import androidx.compose.ui.graphics.Color import androidx.test.filters.SdkSuppress @@ -50,7 +51,7 @@ class RemoteContentTestRuleScreenshotTest { fun textValueChange() { val context = InstrumentationRegistry.getInstrumentation().targetContext remoteContentTestRule.setContent(createCreationDisplayInfo(context)) { - val text = rememberMutableRemoteString("Initial") + val text = remember { MutableRemoteString("Initial") } RemoteBox( modifier = RemoteModifier.fillMaxSize() diff --git a/compose/remote/remote-testing/src/androidTest/java/androidx/compose/remote/testing/RemoteSharedTestRuleScreenshotTest.kt b/compose/remote/remote-testing/src/androidTest/java/androidx/compose/remote/testing/RemoteSharedTestRuleScreenshotTest.kt index 95073f8a36d24..40ad2d652914d 100644 --- a/compose/remote/remote-testing/src/androidTest/java/androidx/compose/remote/testing/RemoteSharedTestRuleScreenshotTest.kt +++ b/compose/remote/remote-testing/src/androidTest/java/androidx/compose/remote/testing/RemoteSharedTestRuleScreenshotTest.kt @@ -25,9 +25,10 @@ import androidx.compose.remote.creation.compose.layout.RemoteText import androidx.compose.remote.creation.compose.modifier.RemoteModifier import androidx.compose.remote.creation.compose.modifier.background import androidx.compose.remote.creation.compose.modifier.fillMaxSize +import androidx.compose.remote.creation.compose.state.MutableRemoteString import androidx.compose.remote.creation.compose.state.rc -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteString import androidx.compose.remote.testing.util.GoldenScreenshotNameTestRule +import androidx.compose.runtime.remember import androidx.compose.testutils.assertAgainstGolden import androidx.compose.ui.geometry.Size import androidx.compose.ui.graphics.Color @@ -69,7 +70,7 @@ class RemoteSharedTestRuleScreenshotTest { @Test fun content() { remoteContentTestRule.setContent(createCreationDisplayInfo(context)) { - val text = rememberMutableRemoteString("Initial") + val text = remember { MutableRemoteString("Initial") } RemoteBox( modifier = RemoteModifier.fillMaxSize().background(Color.White.rc), contentAlignment = RemoteAlignment.Center, diff --git a/compose/remote/remote-testing/src/test/java/androidx/compose/remote/testing/RemoteContentTestRuleScreenshotTest.kt b/compose/remote/remote-testing/src/test/java/androidx/compose/remote/testing/RemoteContentTestRuleScreenshotTest.kt index aab0abac1a66f..23d958c29cbc1 100644 --- a/compose/remote/remote-testing/src/test/java/androidx/compose/remote/testing/RemoteContentTestRuleScreenshotTest.kt +++ b/compose/remote/remote-testing/src/test/java/androidx/compose/remote/testing/RemoteContentTestRuleScreenshotTest.kt @@ -25,12 +25,13 @@ import androidx.compose.remote.creation.compose.modifier.RemoteModifier import androidx.compose.remote.creation.compose.modifier.background import androidx.compose.remote.creation.compose.modifier.clickable import androidx.compose.remote.creation.compose.modifier.fillMaxSize +import androidx.compose.remote.creation.compose.state.MutableRemoteString import androidx.compose.remote.creation.compose.state.rc -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteString import androidx.compose.remote.creation.compose.state.rs import androidx.compose.remote.testing.util.assertAgainstGolden import androidx.compose.remote.testing.util.captureToImage import androidx.compose.remote.testing.util.saveToFile +import androidx.compose.runtime.remember import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.asAndroidBitmap import org.junit.Rule @@ -53,7 +54,7 @@ class RemoteContentTestRuleScreenshotTest { remoteContentTestRule.setContent( RemoteCreationDisplayInfo(width = 500, height = 500, densityDpi = 160) ) { - val text = rememberMutableRemoteString("Initial") + val text = remember { MutableRemoteString("Initial") } RemoteBox( modifier = RemoteModifier.fillMaxSize() diff --git a/wear/compose/remote/integration-tests/demos/src/main/java/androidx/wear/compose/remote/integration/demos/components/RemotePageIndicatorDemos.kt b/wear/compose/remote/integration-tests/demos/src/main/java/androidx/wear/compose/remote/integration/demos/components/RemotePageIndicatorDemos.kt index b39314bec4783..c2eea7da3c709 100644 --- a/wear/compose/remote/integration-tests/demos/src/main/java/androidx/wear/compose/remote/integration/demos/components/RemotePageIndicatorDemos.kt +++ b/wear/compose/remote/integration-tests/demos/src/main/java/androidx/wear/compose/remote/integration/demos/components/RemotePageIndicatorDemos.kt @@ -23,8 +23,8 @@ import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.remote.creation.compose.capture.captureSingleRemoteDocument -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteFloat -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteInt +import androidx.compose.remote.creation.compose.state.RemoteFloat.Companion.createNamedRemoteFloatExpression +import androidx.compose.remote.creation.compose.state.RemoteInt.Companion.createNamedRemoteInt import androidx.compose.remote.creation.compose.state.rf import androidx.compose.remote.player.core.RemoteDocument import androidx.compose.remote.player.view.RemoteComposePlayer @@ -77,8 +77,10 @@ private fun RemoteHorizontalPageIndicatorDemoHelper(pageCount: Int, modifier: Mo LaunchedEffect(context, pageCount) { val captured = captureSingleRemoteDocument(context) { - val selectedPage = rememberNamedRemoteInt("selectedPage", 0) - val pageOffset = rememberNamedRemoteFloat("pageOffset") { 0f.rf } + val selectedPage = remember { createNamedRemoteInt("selectedPage", 0) } + val pageOffset = remember { + createNamedRemoteFloatExpression("pageOffset") { 0f.rf } + } val state = rememberRemotePageIndicatorState( selectedPage = selectedPage, @@ -138,8 +140,10 @@ private fun RemoteVerticalPageIndicatorDemoHelper(pageCount: Int, modifier: Modi LaunchedEffect(context, pageCount) { val captured = captureSingleRemoteDocument(context) { - val selectedPage = rememberNamedRemoteInt("selectedPage", 0) - val pageOffset = rememberNamedRemoteFloat("pageOffset") { 0f.rf } + val selectedPage = remember { createNamedRemoteInt("selectedPage", 0) } + val pageOffset = remember { + createNamedRemoteFloatExpression("pageOffset") { 0f.rf } + } val state = rememberRemotePageIndicatorState( selectedPage = selectedPage, diff --git a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/previews/RemoteButtonPreview.kt b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/previews/RemoteButtonPreview.kt index 1624ec662a7b7..aec8460a7c901 100644 --- a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/previews/RemoteButtonPreview.kt +++ b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/previews/RemoteButtonPreview.kt @@ -28,16 +28,17 @@ import androidx.compose.remote.creation.compose.modifier.fillMaxSize import androidx.compose.remote.creation.compose.modifier.height import androidx.compose.remote.creation.compose.shapes.RemoteRoundedCornerShape import androidx.compose.remote.creation.compose.state.RemoteColor +import androidx.compose.remote.creation.compose.state.RemoteImageBitmap.Companion.createNamedRemoteImageBitmap import androidx.compose.remote.creation.compose.state.RemoteString import androidx.compose.remote.creation.compose.state.rb import androidx.compose.remote.creation.compose.state.rc import androidx.compose.remote.creation.compose.state.rdp -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteImageBitmap import androidx.compose.remote.creation.compose.state.rf import androidx.compose.remote.creation.compose.state.rs import androidx.compose.remote.creation.profile.Profile import androidx.compose.remote.tooling.preview.RemoteContentPreview import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.asImageBitmap import androidx.compose.ui.tooling.preview.PreviewParameter @@ -242,10 +243,11 @@ private fun RemoteButtonWithIconAndLongLabelPreview( @Composable @RemoteComposable fun RemoteButtonWithBackground() { - val backgroundImage = - rememberNamedRemoteImageBitmap(name = "backgroundImage") { + val backgroundImage = remember { + createNamedRemoteImageBitmap(name = "backgroundImage") { createImage(200, 200).asImageBitmap() } + } val containerPainter = RemoteButtonDefaults.containerPainter(backgroundImage) RemoteButton( onClick = testAction, @@ -390,10 +392,11 @@ private fun RemoteButtonChildColorsDisabledPreview( @Composable @RemoteComposable fun RemoteButtonWithSmallImageBackground() { - val smallImage = - rememberNamedRemoteImageBitmap(name = "smallBackgroundImage") { + val smallImage = remember { + createNamedRemoteImageBitmap(name = "smallBackgroundImage") { createImage(8, 8).asImageBitmap() } + } val containerPainter = RemoteButtonDefaults.containerPainter(smallImage) RemoteButton( onClick = testAction, diff --git a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/previews/RemoteCardPreview.kt b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/previews/RemoteCardPreview.kt index e17471956d9f0..383f74a50bdac 100644 --- a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/previews/RemoteCardPreview.kt +++ b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/previews/RemoteCardPreview.kt @@ -25,12 +25,13 @@ import androidx.compose.remote.creation.compose.layout.RemoteComposable import androidx.compose.remote.creation.compose.modifier.RemoteModifier import androidx.compose.remote.creation.compose.modifier.fillMaxSize import androidx.compose.remote.creation.compose.modifier.padding +import androidx.compose.remote.creation.compose.state.RemoteImageBitmap.Companion.createNamedRemoteImageBitmap import androidx.compose.remote.creation.compose.state.rdp -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteImageBitmap import androidx.compose.remote.creation.compose.state.rs import androidx.compose.remote.creation.profile.Profile import androidx.compose.remote.tooling.preview.RemoteContentPreview import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.graphics.asImageBitmap import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.wear.compose.remote.material3.RemoteCard @@ -79,10 +80,11 @@ fun RemoteCardOutline() { @Composable @RemoteComposable fun RemoteCardWithImage() { - val backgroundImage = - rememberNamedRemoteImageBitmap(name = "backgroundImage") { + val backgroundImage = remember { + createNamedRemoteImageBitmap(name = "backgroundImage") { createImage(200, 200).asImageBitmap() } + } val containerPainter = RemoteCardDefaults.containerPainter(backgroundImage) RemoteCard(onClick = Action.Empty, containerPainter = containerPainter) { RemoteText("Card with image".rs) @@ -92,10 +94,11 @@ fun RemoteCardWithImage() { @Composable @RemoteComposable fun RemoteCardWithImageAndBorder() { - val backgroundImage = - rememberNamedRemoteImageBitmap(name = "backgroundImage") { + val backgroundImage = remember { + createNamedRemoteImageBitmap(name = "backgroundImage") { createImage(200, 200).asImageBitmap() } + } val containerPainter = RemoteCardDefaults.containerPainter(backgroundImage) RemoteCard( onClick = Action.Empty, diff --git a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/previews/RemoteIconPreview.kt b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/previews/RemoteIconPreview.kt index 20358651ac249..8e05f56fe8adf 100644 --- a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/previews/RemoteIconPreview.kt +++ b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/previews/RemoteIconPreview.kt @@ -27,11 +27,12 @@ import androidx.compose.remote.creation.compose.layout.RemoteComposable import androidx.compose.remote.creation.compose.modifier.RemoteModifier import androidx.compose.remote.creation.compose.modifier.fillMaxSize import androidx.compose.remote.creation.compose.state.RemoteColor -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteColor +import androidx.compose.remote.creation.compose.state.RemoteColor.Companion.createNamedRemoteColor import androidx.compose.remote.creation.compose.state.rf import androidx.compose.remote.creation.profile.Profile import androidx.compose.remote.tooling.preview.RemoteContentPreview import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.SolidColor import androidx.compose.ui.tooling.preview.PreviewParameter @@ -72,7 +73,7 @@ private fun RemoteIconFromResourcePreview( @Composable @RemoteComposable fun RemoteIconColor() { - val color = rememberNamedRemoteColor("testColor", Color.Red) + val color = remember { createNamedRemoteColor("testColor", Color.Red) } RemoteIcon(imageVector = VolumeUp, contentDescription = null, tint = color) } diff --git a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/previews/RemotePageIndicatorPreview.kt b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/previews/RemotePageIndicatorPreview.kt index 7e908d01f4ced..e25e6ef47c984 100644 --- a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/previews/RemotePageIndicatorPreview.kt +++ b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/previews/RemotePageIndicatorPreview.kt @@ -20,14 +20,15 @@ package androidx.wear.compose.remote.material3.previews import androidx.compose.remote.creation.compose.modifier.RemoteModifier import androidx.compose.remote.creation.compose.modifier.fillMaxSize +import androidx.compose.remote.creation.compose.state.RemoteLong.Companion.createNamedRemoteLong import androidx.compose.remote.creation.compose.state.deltaFromReferenceInSeconds import androidx.compose.remote.creation.compose.state.floor -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteLong import androidx.compose.remote.creation.compose.state.rf import androidx.compose.remote.creation.compose.state.ri import androidx.compose.remote.creation.profile.Profile import androidx.compose.remote.tooling.preview.RemoteContentPreview import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.wear.compose.remote.material3.RemoteHorizontalPageIndicator import androidx.wear.compose.remote.material3.RemoteVerticalPageIndicator @@ -81,7 +82,9 @@ fun RemoteVerticalPageIndicatorAnimatedPreview( @Composable private fun RemotePageIndicatorAnimatedPreviewHelper(isHorizontal: Boolean, rememberKey: String) { - val startTime = rememberNamedRemoteLong(rememberKey, System.currentTimeMillis()) + val startTime = remember { + createNamedRemoteLong(rememberKey, System.currentTimeMillis()) + } val animTime = -deltaFromReferenceInSeconds(startTime) * 2f.rf // Continuous scroll simulator (page + offset fraction) cycle over 8 scaled seconds diff --git a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/previews/RemoteSliderPreview.kt b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/previews/RemoteSliderPreview.kt index 3d3bb125bbec9..17df7425d7854 100644 --- a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/previews/RemoteSliderPreview.kt +++ b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/previews/RemoteSliderPreview.kt @@ -23,16 +23,17 @@ import androidx.compose.remote.creation.compose.layout.RemoteComposable import androidx.compose.remote.creation.compose.modifier.RemoteModifier import androidx.compose.remote.creation.compose.modifier.fillMaxSize import androidx.compose.remote.creation.compose.modifier.padding +import androidx.compose.remote.creation.compose.state.MutableRemoteFloat import androidx.compose.remote.creation.compose.state.RemoteColor import androidx.compose.remote.creation.compose.state.max import androidx.compose.remote.creation.compose.state.min import androidx.compose.remote.creation.compose.state.rb import androidx.compose.remote.creation.compose.state.rdp -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteFloat import androidx.compose.remote.creation.compose.state.rf import androidx.compose.remote.creation.profile.Profile import androidx.compose.remote.tooling.preview.RemoteContentPreview import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.graphics.Color import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.wear.compose.remote.material3.RemoteSlider @@ -43,7 +44,7 @@ import androidx.wear.compose.ui.tooling.preview.WearPreviewDevices @Composable @RemoteComposable public fun RemoteSliderDefault() { - val value = rememberMutableRemoteFloat(2f) + val value = remember { MutableRemoteFloat(2f) } RemoteSlider( value = value, steps = 4, @@ -73,7 +74,7 @@ private fun RemoteSliderDisabledPreview( @Composable @RemoteComposable public fun RemoteSliderNotSegmented() { - val value = rememberMutableRemoteFloat(2f) + val value = remember { MutableRemoteFloat(2f) } RemoteSlider( value = value, steps = 4, @@ -92,7 +93,7 @@ private fun RemoteSliderNotSegmentedPreview( @Composable @RemoteComposable public fun RemoteSliderCustomColors() { - val value = rememberMutableRemoteFloat(3f) + val value = remember { MutableRemoteFloat(3f) } RemoteSlider( value = value, steps = 4, diff --git a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/previews/RemoteStepperPreview.kt b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/previews/RemoteStepperPreview.kt index 5070e8622ee6d..2b4d8b629fba4 100644 --- a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/previews/RemoteStepperPreview.kt +++ b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/previews/RemoteStepperPreview.kt @@ -22,16 +22,17 @@ import androidx.compose.remote.creation.compose.layout.RemoteBox import androidx.compose.remote.creation.compose.layout.RemoteComposable import androidx.compose.remote.creation.compose.modifier.RemoteModifier import androidx.compose.remote.creation.compose.modifier.fillMaxSize +import androidx.compose.remote.creation.compose.state.MutableRemoteFloat import androidx.compose.remote.creation.compose.state.RemoteColor import androidx.compose.remote.creation.compose.state.max import androidx.compose.remote.creation.compose.state.min import androidx.compose.remote.creation.compose.state.rb -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteFloat import androidx.compose.remote.creation.compose.state.rf import androidx.compose.remote.creation.compose.state.rs import androidx.compose.remote.creation.profile.Profile import androidx.compose.remote.tooling.preview.RemoteContentPreview import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.graphics.Color import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.wear.compose.remote.material3.RemoteStepper @@ -43,7 +44,7 @@ import androidx.wear.compose.ui.tooling.preview.WearPreviewDevices @Composable @RemoteComposable public fun RemoteStepperDefault() { - val value = rememberMutableRemoteFloat(2f) + val value = remember { MutableRemoteFloat(2f) } RemoteStepper( value = value, steps = 4, @@ -81,7 +82,7 @@ private fun RemoteStepperDisabledPreview( @Composable @RemoteComposable public fun RemoteStepperCustomColors() { - val value = rememberMutableRemoteFloat(3f) + val value = remember { MutableRemoteFloat(3f) } RemoteStepper( value = value, steps = 4, diff --git a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/previews/RemoteTitleCardPreview.kt b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/previews/RemoteTitleCardPreview.kt index 3f0becad12104..7d149a67f0c8b 100644 --- a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/previews/RemoteTitleCardPreview.kt +++ b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/previews/RemoteTitleCardPreview.kt @@ -25,12 +25,13 @@ import androidx.compose.remote.creation.compose.layout.RemoteComposable import androidx.compose.remote.creation.compose.modifier.RemoteModifier import androidx.compose.remote.creation.compose.modifier.fillMaxSize import androidx.compose.remote.creation.compose.modifier.padding +import androidx.compose.remote.creation.compose.state.RemoteImageBitmap.Companion.createNamedRemoteImageBitmap import androidx.compose.remote.creation.compose.state.rdp -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteImageBitmap import androidx.compose.remote.creation.compose.state.rs import androidx.compose.remote.creation.profile.Profile import androidx.compose.remote.tooling.preview.RemoteContentPreview import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.graphics.asImageBitmap import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.wear.compose.remote.material3.RemoteCardDefaults @@ -119,10 +120,11 @@ fun RemoteTitleCardWithTwoLineTitle() { @Composable @RemoteComposable fun RemoteTitleCardWithImage() { - val backgroundImage = - rememberNamedRemoteImageBitmap(name = "backgroundImage") { + val backgroundImage = remember { + createNamedRemoteImageBitmap(name = "backgroundImage") { createImage(200, 200).asImageBitmap() } + } val containerPainter = RemoteCardDefaults.containerPainter(backgroundImage) RemoteTitleCard( onClick = Action.Empty, diff --git a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteButtonSample.kt b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteButtonSample.kt index 6c9b6543a41df..a4c1620b9a6a6 100644 --- a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteButtonSample.kt +++ b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteButtonSample.kt @@ -21,9 +21,10 @@ package androidx.wear.compose.remote.material3.samples import androidx.annotation.Sampled import androidx.compose.remote.creation.compose.action.valueChange import androidx.compose.remote.creation.compose.modifier.RemoteModifier -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteInt +import androidx.compose.remote.creation.compose.state.MutableRemoteInt import androidx.compose.remote.creation.compose.state.rs import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.tooling.preview.PreviewWrapper import androidx.wear.compose.remote.material3.RemoteButton import androidx.wear.compose.remote.material3.RemoteText @@ -35,7 +36,7 @@ import androidx.wear.compose.ui.tooling.preview.WearPreviewDevices @WearPreviewDevices @PreviewWrapper(RemoteComponentPreviewWrapper::class) fun RemoteButtonSimpleSample(modifier: RemoteModifier = RemoteModifier) { - val tapCount = rememberMutableRemoteInt(0) + val tapCount = remember { MutableRemoteInt(0) } val countSuffix = " (".rs + tapCount.toRemoteString() + " taps)" RemoteButton(valueChange(tapCount, tapCount + 1), modifier = modifier) { diff --git a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteCardSample.kt b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteCardSample.kt index 1f2144b72b914..c49618fdc4e2d 100644 --- a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteCardSample.kt +++ b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteCardSample.kt @@ -22,10 +22,11 @@ import androidx.annotation.Sampled import androidx.compose.remote.creation.compose.action.Action import androidx.compose.remote.creation.compose.modifier.RemoteModifier import androidx.compose.remote.creation.compose.modifier.padding +import androidx.compose.remote.creation.compose.state.RemoteImageBitmap.Companion.createNamedRemoteImageBitmap import androidx.compose.remote.creation.compose.state.rdp -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteImageBitmap import androidx.compose.remote.creation.compose.state.rs import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.graphics.asImageBitmap import androidx.compose.ui.tooling.preview.PreviewWrapper import androidx.wear.compose.remote.material3.RemoteCard @@ -51,10 +52,11 @@ fun RemoteCardSample() { @WearPreviewDevices @PreviewWrapper(RemoteComponentPreviewWrapper::class) fun RemoteCardWithImageSample() { - val backgroundImage = - rememberNamedRemoteImageBitmap(name = "backgroundImage") { + val backgroundImage = remember { + createNamedRemoteImageBitmap(name = "backgroundImage") { createImage(200, 200).asImageBitmap() } + } val containerPainter = RemoteCardDefaults.containerPainter(backgroundImage) RemoteCard( onClick = Action.Empty, diff --git a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteCheckboxButtonSample.kt b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteCheckboxButtonSample.kt index 1261903557100..1d438a6995fbd 100644 --- a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteCheckboxButtonSample.kt +++ b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteCheckboxButtonSample.kt @@ -20,9 +20,10 @@ import androidx.annotation.Sampled import androidx.compose.remote.creation.compose.action.valueChange import androidx.compose.remote.creation.compose.layout.RemoteComposable import androidx.compose.remote.creation.compose.modifier.RemoteModifier -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteBoolean +import androidx.compose.remote.creation.compose.state.MutableRemoteBoolean import androidx.compose.remote.creation.compose.state.rs import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.tooling.preview.PreviewWrapper import androidx.wear.compose.remote.material3.RemoteCheckboxButton import androidx.wear.compose.remote.material3.RemoteText @@ -35,7 +36,7 @@ import androidx.wear.compose.ui.tooling.preview.WearPreviewDevices @WearPreviewDevices @PreviewWrapper(RemoteComponentPreviewWrapper::class) public fun RemoteCheckboxButtonSample(modifier: RemoteModifier = RemoteModifier) { - val checked = rememberMutableRemoteBoolean(true) + val checked = remember { MutableRemoteBoolean(true) } RemoteCheckboxButton( checked = checked, diff --git a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteCircularProgressIndicatorSample.kt b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteCircularProgressIndicatorSample.kt index 73a51f3fb3cf2..799ecc817d166 100644 --- a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteCircularProgressIndicatorSample.kt +++ b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteCircularProgressIndicatorSample.kt @@ -24,12 +24,13 @@ import androidx.compose.remote.creation.compose.layout.RemoteComposable import androidx.compose.remote.creation.compose.modifier.RemoteModifier import androidx.compose.remote.creation.compose.modifier.clickable import androidx.compose.remote.creation.compose.modifier.size +import androidx.compose.remote.creation.compose.state.MutableRemoteFloat import androidx.compose.remote.creation.compose.state.animateRemoteFloatAsState import androidx.compose.remote.creation.compose.state.rdp -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteFloat import androidx.compose.remote.creation.compose.state.remoteTween import androidx.compose.remote.creation.compose.state.rf import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.tooling.preview.PreviewWrapper import androidx.wear.compose.remote.material3.RemoteCircularProgressIndicator import androidx.wear.compose.remote.material3.previews.utils.RemoteComponentPreviewWrapper @@ -63,7 +64,7 @@ public fun RemoteIndeterminateCircularProgressIndicatorSample( public fun RemoteCircularProgressIndicatorAnimatedSample( modifier: RemoteModifier = RemoteModifier.size(150.rdp) ) { - val progress = rememberMutableRemoteFloat { 0.25f.rf } + val progress = remember { MutableRemoteFloat { 0.25f.rf } } val animatedProgress = animateRemoteFloatAsState( targetValue = progress, diff --git a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteCompactButtonSample.kt b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteCompactButtonSample.kt index 5fd4c6402b40a..c51ff28bacf79 100644 --- a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteCompactButtonSample.kt +++ b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteCompactButtonSample.kt @@ -21,9 +21,10 @@ package androidx.wear.compose.remote.material3.samples import androidx.annotation.Sampled import androidx.compose.remote.creation.compose.action.valueChange import androidx.compose.remote.creation.compose.modifier.RemoteModifier -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteInt +import androidx.compose.remote.creation.compose.state.MutableRemoteInt import androidx.compose.remote.creation.compose.state.rs import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.tooling.preview.PreviewWrapper import androidx.wear.compose.remote.material3.RemoteCompactButton import androidx.wear.compose.remote.material3.RemoteText @@ -35,7 +36,7 @@ import androidx.wear.compose.ui.tooling.preview.WearPreviewDevices @WearPreviewDevices @PreviewWrapper(RemoteComponentPreviewWrapper::class) fun RemoteCompactButtonSimpleSample(modifier: RemoteModifier = RemoteModifier) { - val tapCount = rememberMutableRemoteInt(0) + val tapCount = remember { MutableRemoteInt(0) } val countSuffix = " (".rs + tapCount.toRemoteString() + " taps)" RemoteCompactButton( diff --git a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteCurvedProgressIndicatorSample.kt b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteCurvedProgressIndicatorSample.kt index a01985093c20e..4c7fa40957ecd 100644 --- a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteCurvedProgressIndicatorSample.kt +++ b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteCurvedProgressIndicatorSample.kt @@ -24,12 +24,13 @@ import androidx.compose.remote.creation.compose.layout.RemoteComposable import androidx.compose.remote.creation.compose.modifier.RemoteModifier import androidx.compose.remote.creation.compose.modifier.clickable import androidx.compose.remote.creation.compose.modifier.size +import androidx.compose.remote.creation.compose.state.MutableRemoteFloat import androidx.compose.remote.creation.compose.state.animateRemoteFloatAsState import androidx.compose.remote.creation.compose.state.rdp -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteFloat import androidx.compose.remote.creation.compose.state.remoteTween import androidx.compose.remote.creation.compose.state.rf import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.tooling.preview.PreviewWrapper import androidx.wear.compose.remote.material3.RemoteCurvedProgressIndicator import androidx.wear.compose.remote.material3.previews.utils.RemoteComponentPreviewWrapper @@ -59,7 +60,7 @@ public fun RemoteCurvedProgressIndicatorSample( public fun RemoteCurvedProgressIndicatorAnimatedSample( modifier: RemoteModifier = RemoteModifier.size(150.rdp) ) { - val progress = rememberMutableRemoteFloat { 0.25f.rf } + val progress = remember { MutableRemoteFloat { 0.25f.rf } } val animatedProgress = animateRemoteFloatAsState( targetValue = progress, diff --git a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteEdgeButtonSample.kt b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteEdgeButtonSample.kt index 1fc4c52afcd09..996c9aadae6a7 100644 --- a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteEdgeButtonSample.kt +++ b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteEdgeButtonSample.kt @@ -22,9 +22,10 @@ import androidx.annotation.Sampled import androidx.compose.remote.creation.compose.action.valueChange import androidx.compose.remote.creation.compose.modifier.RemoteModifier import androidx.compose.remote.creation.compose.modifier.size -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteInt +import androidx.compose.remote.creation.compose.state.MutableRemoteInt import androidx.compose.remote.creation.compose.state.rs import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.tooling.preview.PreviewWrapper import androidx.wear.compose.remote.material3.RemoteEdgeButton import androidx.wear.compose.remote.material3.RemoteEdgeButtonDefaults @@ -40,7 +41,7 @@ import androidx.wear.compose.ui.tooling.preview.WearPreviewDevices @WearPreviewDevices @PreviewWrapper(RemoteComponentPreviewWrapper::class) fun RemoteEdgeButtonSample(modifier: RemoteModifier = RemoteModifier) { - val tapCount = rememberMutableRemoteInt(0) + val tapCount = remember { MutableRemoteInt(0) } val countSuffix = " (".rs + tapCount.toRemoteString() + " taps)" RemoteEdgeButton( @@ -57,7 +58,7 @@ fun RemoteEdgeButtonSample(modifier: RemoteModifier = RemoteModifier) { @WearPreviewDevices @PreviewWrapper(RemoteComponentPreviewWrapper::class) fun RemoteEdgeButtonIconSample(modifier: RemoteModifier = RemoteModifier) { - val tapCount = rememberMutableRemoteInt(0) + val tapCount = remember { MutableRemoteInt(0) } RemoteEdgeButton( onClick = valueChange(tapCount, tapCount + 1), @@ -80,7 +81,7 @@ fun RemoteEdgeButtonIconSample(modifier: RemoteModifier = RemoteModifier) { @WearPreviewDevices @PreviewWrapper(RemoteComponentPreviewWrapper::class) fun RemoteEdgeButtonFilledTonalSample(modifier: RemoteModifier = RemoteModifier) { - val tapCount = rememberMutableRemoteInt(0) + val tapCount = remember { MutableRemoteInt(0) } RemoteEdgeButton( onClick = valueChange(tapCount, tapCount + 1), @@ -97,7 +98,7 @@ fun RemoteEdgeButtonFilledTonalSample(modifier: RemoteModifier = RemoteModifier) @WearPreviewDevices @PreviewWrapper(RemoteComponentPreviewWrapper::class) fun RemoteEdgeButtonMultiLineSample(modifier: RemoteModifier = RemoteModifier) { - val tapCount = rememberMutableRemoteInt(0) + val tapCount = remember { MutableRemoteInt(0) } RemoteEdgeButton( onClick = valueChange(tapCount, tapCount + 1), diff --git a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteLinearProgressIndicatorSample.kt b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteLinearProgressIndicatorSample.kt index 873e8ccda0887..b42e717750eac 100644 --- a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteLinearProgressIndicatorSample.kt +++ b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteLinearProgressIndicatorSample.kt @@ -24,12 +24,13 @@ import androidx.compose.remote.creation.compose.layout.RemoteComposable import androidx.compose.remote.creation.compose.modifier.RemoteModifier import androidx.compose.remote.creation.compose.modifier.clickable import androidx.compose.remote.creation.compose.modifier.width +import androidx.compose.remote.creation.compose.state.MutableRemoteFloat import androidx.compose.remote.creation.compose.state.animateRemoteFloatAsState import androidx.compose.remote.creation.compose.state.rdp -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteFloat import androidx.compose.remote.creation.compose.state.remoteTween import androidx.compose.remote.creation.compose.state.rf import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.tooling.preview.PreviewWrapper import androidx.wear.compose.remote.material3.RemoteLinearProgressIndicator import androidx.wear.compose.remote.material3.previews.utils.RemoteComponentPreviewWrapper @@ -52,7 +53,7 @@ public fun RemoteLinearProgressIndicatorSample(modifier: RemoteModifier = Remote public fun RemoteLinearProgressIndicatorAnimatedSample( modifier: RemoteModifier = RemoteModifier.width(140.rdp) ) { - val progress = rememberMutableRemoteFloat { 0.25f.rf } + val progress = remember { MutableRemoteFloat { 0.25f.rf } } val animatedProgress = animateRemoteFloatAsState( targetValue = progress, diff --git a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteRadioButtonSample.kt b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteRadioButtonSample.kt index a1092f4c658f8..dacc414aeaf99 100644 --- a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteRadioButtonSample.kt +++ b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteRadioButtonSample.kt @@ -20,10 +20,11 @@ import androidx.annotation.Sampled import androidx.compose.remote.creation.compose.action.valueChange import androidx.compose.remote.creation.compose.layout.RemoteComposable import androidx.compose.remote.creation.compose.modifier.RemoteModifier +import androidx.compose.remote.creation.compose.state.MutableRemoteBoolean import androidx.compose.remote.creation.compose.state.rb -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteBoolean import androidx.compose.remote.creation.compose.state.rs import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.tooling.preview.PreviewWrapper import androidx.wear.compose.remote.material3.RemoteRadioButton import androidx.wear.compose.remote.material3.RemoteText @@ -36,7 +37,7 @@ import androidx.wear.compose.ui.tooling.preview.WearPreviewDevices @WearPreviewDevices @PreviewWrapper(RemoteComponentPreviewWrapper::class) public fun RemoteRadioButtonSample(modifier: RemoteModifier = RemoteModifier) { - val selected = rememberMutableRemoteBoolean(true) + val selected = remember { MutableRemoteBoolean(true) } RemoteRadioButton( selected = selected, diff --git a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteSliderSample.kt b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteSliderSample.kt index 9254b5e9de542..c7d52c51b2193 100644 --- a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteSliderSample.kt +++ b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteSliderSample.kt @@ -19,13 +19,14 @@ package androidx.wear.compose.remote.material3.samples import androidx.annotation.Sampled import androidx.compose.remote.creation.compose.action.valueChange import androidx.compose.remote.creation.compose.modifier.RemoteModifier +import androidx.compose.remote.creation.compose.state.MutableRemoteFloat +import androidx.compose.remote.creation.compose.state.MutableRemoteInt import androidx.compose.remote.creation.compose.state.max import androidx.compose.remote.creation.compose.state.min -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteFloat -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteInt import androidx.compose.remote.creation.compose.state.rf import androidx.compose.remote.creation.compose.state.ri import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.tooling.preview.PreviewWrapper import androidx.wear.compose.remote.material3.RemoteSlider import androidx.wear.compose.remote.material3.previews.utils.RemoteComponentPreviewWrapper @@ -36,7 +37,7 @@ import androidx.wear.compose.ui.tooling.preview.WearPreviewDevices @WearPreviewDevices @PreviewWrapper(RemoteComponentPreviewWrapper::class) fun RemoteSliderSample(modifier: RemoteModifier = RemoteModifier) { - val value = rememberMutableRemoteFloat(2f) + val value = remember { MutableRemoteFloat(2f) } RemoteSlider( value = value, steps = 4, @@ -51,7 +52,7 @@ fun RemoteSliderSample(modifier: RemoteModifier = RemoteModifier) { @WearPreviewDevices @PreviewWrapper(RemoteComponentPreviewWrapper::class) fun RemoteSliderIntegerSample(modifier: RemoteModifier = RemoteModifier) { - val value = rememberMutableRemoteInt(2) + val value = remember { MutableRemoteInt(2) } RemoteSlider( value = value, steps = 4, diff --git a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteSplitCheckboxButtonSample.kt b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteSplitCheckboxButtonSample.kt index a50b3c7dd0b8a..10c3ece6dda0b 100644 --- a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteSplitCheckboxButtonSample.kt +++ b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteSplitCheckboxButtonSample.kt @@ -19,9 +19,10 @@ package androidx.wear.compose.remote.material3.samples import androidx.annotation.Sampled import androidx.compose.remote.creation.compose.action.valueChange import androidx.compose.remote.creation.compose.modifier.RemoteModifier -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteBoolean +import androidx.compose.remote.creation.compose.state.MutableRemoteBoolean import androidx.compose.remote.creation.compose.state.rs import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.tooling.preview.PreviewWrapper import androidx.wear.compose.remote.material3.RemoteSplitCheckboxButton import androidx.wear.compose.remote.material3.RemoteText @@ -33,7 +34,7 @@ import androidx.wear.compose.ui.tooling.preview.WearPreviewDevices @WearPreviewDevices @PreviewWrapper(RemoteComponentPreviewWrapper::class) fun RemoteSplitCheckboxButtonSample(modifier: RemoteModifier = RemoteModifier) { - val checked = rememberMutableRemoteBoolean(true) + val checked = remember { MutableRemoteBoolean(true) } RemoteSplitCheckboxButton( checked = checked, diff --git a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteSplitRadioButtonSample.kt b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteSplitRadioButtonSample.kt index 48b571b8bdccf..c5bc34580f00b 100644 --- a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteSplitRadioButtonSample.kt +++ b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteSplitRadioButtonSample.kt @@ -19,9 +19,10 @@ package androidx.wear.compose.remote.material3.samples import androidx.annotation.Sampled import androidx.compose.remote.creation.compose.action.valueChange import androidx.compose.remote.creation.compose.modifier.RemoteModifier -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteBoolean +import androidx.compose.remote.creation.compose.state.MutableRemoteBoolean import androidx.compose.remote.creation.compose.state.rs import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.tooling.preview.PreviewWrapper import androidx.wear.compose.remote.material3.RemoteSplitRadioButton import androidx.wear.compose.remote.material3.RemoteText @@ -33,7 +34,7 @@ import androidx.wear.compose.ui.tooling.preview.WearPreviewDevices @WearPreviewDevices @PreviewWrapper(RemoteComponentPreviewWrapper::class) fun RemoteSplitRadioButtonSample(modifier: RemoteModifier = RemoteModifier) { - val selected = rememberMutableRemoteBoolean(true) + val selected = remember { MutableRemoteBoolean(true) } RemoteSplitRadioButton( selected = selected, diff --git a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteSplitSwitchButtonSample.kt b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteSplitSwitchButtonSample.kt index 9c9aa9859ef2f..513d97a1599aa 100644 --- a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteSplitSwitchButtonSample.kt +++ b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteSplitSwitchButtonSample.kt @@ -19,9 +19,10 @@ package androidx.wear.compose.remote.material3.samples import androidx.annotation.Sampled import androidx.compose.remote.creation.compose.action.valueChange import androidx.compose.remote.creation.compose.modifier.RemoteModifier -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteBoolean +import androidx.compose.remote.creation.compose.state.MutableRemoteBoolean import androidx.compose.remote.creation.compose.state.rs import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.tooling.preview.PreviewWrapper import androidx.wear.compose.remote.material3.RemoteSplitSwitchButton import androidx.wear.compose.remote.material3.RemoteText @@ -33,7 +34,7 @@ import androidx.wear.compose.ui.tooling.preview.WearPreviewDevices @WearPreviewDevices @PreviewWrapper(RemoteComponentPreviewWrapper::class) fun RemoteSplitSwitchButtonSample(modifier: RemoteModifier = RemoteModifier) { - val checked = rememberMutableRemoteBoolean(true) + val checked = remember { MutableRemoteBoolean(true) } RemoteSplitSwitchButton( checked = checked, diff --git a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteStepperSample.kt b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteStepperSample.kt index dfb62af667604..5471959ccfca6 100644 --- a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteStepperSample.kt +++ b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteStepperSample.kt @@ -19,13 +19,14 @@ package androidx.wear.compose.remote.material3.samples import androidx.annotation.Sampled import androidx.compose.remote.creation.compose.action.valueChange import androidx.compose.remote.creation.compose.modifier.RemoteModifier +import androidx.compose.remote.creation.compose.state.MutableRemoteFloat +import androidx.compose.remote.creation.compose.state.MutableRemoteInt import androidx.compose.remote.creation.compose.state.max import androidx.compose.remote.creation.compose.state.min -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteFloat -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteInt import androidx.compose.remote.creation.compose.state.rf import androidx.compose.remote.creation.compose.state.ri import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.tooling.preview.PreviewWrapper import androidx.wear.compose.remote.material3.RemoteStepper import androidx.wear.compose.remote.material3.RemoteText @@ -37,7 +38,7 @@ import androidx.wear.compose.ui.tooling.preview.WearPreviewDevices @WearPreviewDevices @PreviewWrapper(RemoteComponentPreviewWrapper::class) fun RemoteStepperSample(modifier: RemoteModifier = RemoteModifier) { - val value = rememberMutableRemoteFloat(2f) + val value = remember { MutableRemoteFloat(2f) } RemoteStepper( value = value, steps = 4, @@ -54,7 +55,7 @@ fun RemoteStepperSample(modifier: RemoteModifier = RemoteModifier) { @WearPreviewDevices @PreviewWrapper(RemoteComponentPreviewWrapper::class) fun RemoteStepperIntegerSample(modifier: RemoteModifier = RemoteModifier) { - val value = rememberMutableRemoteInt(2) + val value = remember { MutableRemoteInt(2) } RemoteStepper( value = value, steps = 4, diff --git a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteSwitchButtonSample.kt b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteSwitchButtonSample.kt index 129bdb9004202..ecdca1ced776c 100644 --- a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteSwitchButtonSample.kt +++ b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteSwitchButtonSample.kt @@ -20,9 +20,10 @@ import androidx.annotation.Sampled import androidx.compose.remote.creation.compose.action.valueChange import androidx.compose.remote.creation.compose.layout.RemoteComposable import androidx.compose.remote.creation.compose.modifier.RemoteModifier -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteBoolean +import androidx.compose.remote.creation.compose.state.MutableRemoteBoolean import androidx.compose.remote.creation.compose.state.rs import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.tooling.preview.PreviewWrapper import androidx.wear.compose.remote.material3.RemoteSwitchButton import androidx.wear.compose.remote.material3.RemoteText @@ -35,7 +36,7 @@ import androidx.wear.compose.ui.tooling.preview.WearPreviewDevices @WearPreviewDevices @PreviewWrapper(RemoteComponentPreviewWrapper::class) public fun RemoteSwitchButtonSample(modifier: RemoteModifier = RemoteModifier) { - val checked = rememberMutableRemoteBoolean(true) + val checked = remember { MutableRemoteBoolean(true) } RemoteSwitchButton( checked = checked, diff --git a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteTextButtonSample.kt b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteTextButtonSample.kt index 9ad8cc679c269..ec05891d73534 100644 --- a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteTextButtonSample.kt +++ b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteTextButtonSample.kt @@ -21,10 +21,11 @@ package androidx.wear.compose.remote.material3.samples import androidx.annotation.Sampled import androidx.compose.remote.creation.compose.action.valueChange import androidx.compose.remote.creation.compose.modifier.RemoteModifier -import androidx.compose.remote.creation.compose.state.rememberMutableRemoteInt +import androidx.compose.remote.creation.compose.state.MutableRemoteInt import androidx.compose.remote.creation.compose.state.rf import androidx.compose.remote.creation.compose.state.rs import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.tooling.preview.PreviewWrapper import androidx.wear.compose.remote.material3.RemoteMaterialTheme import androidx.wear.compose.remote.material3.RemoteText @@ -38,7 +39,7 @@ import androidx.wear.compose.ui.tooling.preview.WearPreviewDevices @WearPreviewDevices @PreviewWrapper(RemoteComponentPreviewWrapper::class) fun RemoteTextButtonSimpleSample(modifier: RemoteModifier = RemoteModifier) { - val tapCount = rememberMutableRemoteInt(0) + val tapCount = remember { MutableRemoteInt(0) } val text = "+".rs + tapCount.toRemoteString() RemoteTextButton( diff --git a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteTitleCardSample.kt b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteTitleCardSample.kt index 280f4cd478b84..cda51a1b84801 100644 --- a/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteTitleCardSample.kt +++ b/wear/compose/remote/remote-material3/samples/src/main/java/androidx/wear/compose/remote/material3/samples/RemoteTitleCardSample.kt @@ -22,10 +22,11 @@ import androidx.annotation.Sampled import androidx.compose.remote.creation.compose.action.Action import androidx.compose.remote.creation.compose.modifier.RemoteModifier import androidx.compose.remote.creation.compose.modifier.padding +import androidx.compose.remote.creation.compose.state.RemoteImageBitmap.Companion.createNamedRemoteImageBitmap import androidx.compose.remote.creation.compose.state.rdp -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteImageBitmap import androidx.compose.remote.creation.compose.state.rs import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.graphics.asImageBitmap import androidx.compose.ui.tooling.preview.PreviewWrapper import androidx.wear.compose.remote.material3.RemoteCardDefaults @@ -56,10 +57,11 @@ fun RemoteTitleCardSample() { @WearPreviewDevices @PreviewWrapper(RemoteComponentPreviewWrapper::class) fun RemoteTitleCardWithImageSample() { - val backgroundImage = - rememberNamedRemoteImageBitmap(name = "backgroundImage") { + val backgroundImage = remember { + createNamedRemoteImageBitmap(name = "backgroundImage") { createImage(200, 200).asImageBitmap() } + } val containerPainter = RemoteCardDefaults.containerPainter(backgroundImage) RemoteTitleCard( onClick = Action.Empty, diff --git a/wear/compose/remote/remote-material3/src/androidTest/java/androidx/wear/compose/remote/material3/RemoteButtonTest.kt b/wear/compose/remote/remote-material3/src/androidTest/java/androidx/wear/compose/remote/material3/RemoteButtonTest.kt index 9a578fe194507..4fe653117c770 100644 --- a/wear/compose/remote/remote-material3/src/androidTest/java/androidx/wear/compose/remote/material3/RemoteButtonTest.kt +++ b/wear/compose/remote/remote-material3/src/androidTest/java/androidx/wear/compose/remote/material3/RemoteButtonTest.kt @@ -27,15 +27,16 @@ import androidx.compose.remote.creation.compose.modifier.size import androidx.compose.remote.creation.compose.shapes.RemoteCircleShape import androidx.compose.remote.creation.compose.shapes.RemoteRoundedCornerShape import androidx.compose.remote.creation.compose.state.RemoteColor +import androidx.compose.remote.creation.compose.state.RemoteImageBitmap.Companion.createNamedRemoteImageBitmap import androidx.compose.remote.creation.compose.state.rb import androidx.compose.remote.creation.compose.state.rc import androidx.compose.remote.creation.compose.state.rdp -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteImageBitmap import androidx.compose.remote.creation.compose.state.rf import androidx.compose.remote.creation.compose.state.rs import androidx.compose.remote.creation.profile.RcPlatformProfiles import androidx.compose.remote.player.compose.test.utils.ComposableWrappers import androidx.compose.remote.player.compose.test.utils.RemoteScreenshotTestRule +import androidx.compose.runtime.remember import androidx.compose.ui.geometry.Size import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.asImageBitmap @@ -317,10 +318,11 @@ class RemoteButtonTest { profile = TestProfiles.wearWidgetsWithCoreText, remoteCreationDisplayInfo = creationDisplayInfo, ) { - val backgroundImage = - rememberNamedRemoteImageBitmap(name = "backgroundImage") { + val backgroundImage = remember { + createNamedRemoteImageBitmap(name = "backgroundImage") { createImage(200, 200).asImageBitmap() } + } ComponentContainer { val containerPainter = RemoteButtonDefaults.containerPainter(backgroundImage) RemoteButton( @@ -340,12 +342,11 @@ class RemoteButtonTest { profile = TestProfiles.wearWidgetsWithCoreText, remoteCreationDisplayInfo = creationDisplayInfo, ) { - val backgroundImage = - rememberNamedRemoteImageBitmap( - name = "button_disabled_container_background_image" - ) { + val backgroundImage = remember { + createNamedRemoteImageBitmap(name = "button_disabled_container_background_image") { createImage(200, 200).asImageBitmap() } + } ComponentContainer { val enabled = false.rb val containerPainter = RemoteButtonDefaults.containerPainter(backgroundImage) diff --git a/wear/compose/remote/remote-material3/src/androidTest/java/androidx/wear/compose/remote/material3/RemoteTextTest.kt b/wear/compose/remote/remote-material3/src/androidTest/java/androidx/wear/compose/remote/material3/RemoteTextTest.kt index 8ca3ff059c32d..2cbda9d1181e8 100644 --- a/wear/compose/remote/remote-material3/src/androidTest/java/androidx/wear/compose/remote/material3/RemoteTextTest.kt +++ b/wear/compose/remote/remote-material3/src/androidTest/java/androidx/wear/compose/remote/material3/RemoteTextTest.kt @@ -34,11 +34,11 @@ import androidx.compose.remote.creation.compose.modifier.padding import androidx.compose.remote.creation.compose.modifier.size import androidx.compose.remote.creation.compose.modifier.width import androidx.compose.remote.creation.compose.state.RemoteColor +import androidx.compose.remote.creation.compose.state.RemoteColor.Companion.createNamedRemoteColor import androidx.compose.remote.creation.compose.state.RemoteString import androidx.compose.remote.creation.compose.state.RemoteTextUnit import androidx.compose.remote.creation.compose.state.rc import androidx.compose.remote.creation.compose.state.rdp -import androidx.compose.remote.creation.compose.state.rememberNamedRemoteColor import androidx.compose.remote.creation.compose.state.rf import androidx.compose.remote.creation.compose.state.rs import androidx.compose.remote.creation.compose.state.rsp @@ -55,6 +55,7 @@ import androidx.compose.remote.player.compose.test.utils.createMockContextWithFo import androidx.compose.remote.player.core.platform.FontInstance import androidx.compose.remote.player.core.platform.TypefaceResolver import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.font.FontVariation @@ -155,7 +156,9 @@ class RemoteTextTest { val right = "RIGHT".rs val start = "START".rs val end = "END".rs - val color = rememberNamedRemoteColor("TestColor5_rtl", Color.Green) + val color = remember { + createNamedRemoteColor("TestColor5_rtl", Color.Green) + } RemoteColumn(RemoteModifier.fillMaxSize()) { RemoteText( @@ -223,7 +226,9 @@ class RemoteTextTest { fun text_withColor() { remoteComposeTestRule.runScreenshotTestCustomProfile { val text = "text_withColor".rs - val color = rememberNamedRemoteColor("TestColor2", Color.Green) + val color = remember { + createNamedRemoteColor("TestColor2", Color.Green) + } RemoteText(text, color = color, fontSize = 32.rsp) } } @@ -232,7 +237,9 @@ class RemoteTextTest { fun text_withOverridingColor() { remoteComposeTestRule.runScreenshotTestCustomProfile { val text = "text_withOverridingColor".rs - val color = rememberNamedRemoteColor("TestColor3", Color.Green) + val color = remember { + createNamedRemoteColor("TestColor3", Color.Green) + } RemoteText( text, @@ -250,7 +257,9 @@ class RemoteTextTest { fun text_withParamAndStyle_paramIsPreserved() { remoteComposeTestRule.runScreenshotTestCustomProfile { val text = "text_withParamAndStyle".rs - val color = rememberNamedRemoteColor("TestColor4", Color.Green) + val color = remember { + createNamedRemoteColor("TestColor4", Color.Green) + } RemoteText( text, @@ -267,7 +276,9 @@ class RemoteTextTest { val left = "LEFT".rs val center = "CENTER".rs val right = "RIGHT".rs - val color = rememberNamedRemoteColor("TestColor5", Color.Green) + val color = remember { + createNamedRemoteColor("TestColor5", Color.Green) + } RemoteColumn(RemoteModifier.fillMaxSize()) { RemoteText( From 2d3658c2c1badda6774385dde149a5368ff6e4b9 Mon Sep 17 00:00:00 2001 From: Tudor Frecus Date: Thu, 17 Sep 2026 19:05:58 +0200 Subject: [PATCH 10/16] Add Showcase demo for TabTemplate endAction. Introduces an endAction to TabTemplateStyleDemoScreen to Showcase the new type of action. Bug: 561971378 Test: manual verification via installed Showcase APK on physical host Change-Id: Ibeeba527c4f9b6c5e7bcadd03161a4eb631f7603 --- .../TabTemplateStyleDemoScreen.kt | 33 +++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/car/app/app-samples/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/screens/templatelayouts/tabtemplates/TabTemplateStyleDemoScreen.kt b/car/app/app-samples/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/screens/templatelayouts/tabtemplates/TabTemplateStyleDemoScreen.kt index 748183f62603f..75e72d2b76e9b 100644 --- a/car/app/app-samples/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/screens/templatelayouts/tabtemplates/TabTemplateStyleDemoScreen.kt +++ b/car/app/app-samples/showcase/common/src/main/java/androidx/car/app/sample/showcase/common/screens/templatelayouts/tabtemplates/TabTemplateStyleDemoScreen.kt @@ -200,9 +200,20 @@ class TabTemplateStyleDemoScreen(carContext: CarContext) : Screen(carContext) { ) buildTabs().forEach(builder::addTab) + val endAction = + Action.Builder() + .setIcon( + CarIcon.createOriginalIcon( + IconCompat.createWithResource(carContext, R.drawable.test_image_square) + ) + ) + .setOnClickListener { screenManager.push(ProfileScreen(carContext)) } + .build() + return builder .setActiveTabContentId(mActiveContentId) .setHeaderAction(Action.APP_ICON) + .setEndAction(endAction) .setTabContents( TabContents.Builder(createShortMessageTemplate(activeProperty.messageRes)).build() ) @@ -232,4 +243,26 @@ class TabTemplateStyleDemoScreen(carContext: CarContext) : Screen(carContext) { .addAction(action) .build() } + + private class ProfileScreen(carContext: CarContext) : Screen(carContext) { + override fun onGetTemplate(): Template { + val backAction = + Action.Builder() + .setTitle(carContext.getString(R.string.back_caps_action_title)) + .setIcon(CarIcon.BACK) + .setOnClickListener { screenManager.pop() } + .build() + val header = + Header.Builder().setTitle("Profile page").setStartHeaderAction(Action.BACK).build() + return MessageTemplate.Builder("Profile page") + .setHeader(header) + .setIcon( + CarIcon.createOriginalIcon( + IconCompat.createWithResource(carContext, R.drawable.test_android_media) + ) + ) + .addAction(backAction) + .build() + } + } } From 271a679a78e99aab2b6f10b83bb7910b7a23f111 Mon Sep 17 00:00:00 2001 From: Katrina Paikena Date: Fri, 18 Sep 2026 16:09:23 +0000 Subject: [PATCH 11/16] Fix IllegalStateException in OHG GestureNode.updateCompositionLocals. Added check for isAttached in updateCompositionLocals to fix IllegalStateException crash when updateCompositionLocals() is called before the node is attached. Also added null safety checks for currentView and hapticFeedback. Bug: 563302703 Test: Added moving_gesture_modifier_with_movable_content_does_not_crash test in OneHandedGestureTest. Change-Id: I662271d7143a6dd05f6990993b1ecf53940c681f --- .../compose/material3/OneHandedGestureTest.kt | 56 ++++++++++ .../OneHandedGestureModifier.kt | 104 ++++++++++-------- 2 files changed, 112 insertions(+), 48 deletions(-) diff --git a/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/OneHandedGestureTest.kt b/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/OneHandedGestureTest.kt index 4ec32667bd711..f8205cf166cd3 100644 --- a/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/OneHandedGestureTest.kt +++ b/wear/compose/compose-material3/src/androidTest/kotlin/androidx/wear/compose/material3/OneHandedGestureTest.kt @@ -16,6 +16,7 @@ package androidx.wear.compose.material3 +import android.annotation.SuppressLint import android.content.Context import android.os.Build import android.view.View @@ -27,6 +28,7 @@ import androidx.compose.foundation.interaction.PressInteraction import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.BoxScope +import androidx.compose.foundation.layout.BoxWithConstraints import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth @@ -38,6 +40,8 @@ import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.getValue +import androidx.compose.runtime.key +import androidx.compose.runtime.movableContentOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope @@ -693,6 +697,58 @@ class OneHandedGestureTest { } } + @SuppressLint("UnusedBoxWithConstraintsScope") + @Test + fun moving_gesture_modifier_with_movable_content_does_not_crash() { + var gestured = false + var moveContent by mutableStateOf(false) + val sdkGestureInputManager = SdkGestureInputManagerMock() + + rule.setContentWithTheme { + MockSdkGestureInputManager(sdkGestureInputManager) { + val gesturableContent = remember { + movableContentOf { + // Subcomposition inside the moved content, so that the gesture node is + // updated before it is attached again in its new location. + BoxWithConstraints { + val gestureConfig = + rememberOneHandedGestureConfiguration( + action = OneHandedGestureAction.Primary + ) + Text( + "Gesturable", + modifier = + Modifier.oneHandedGesture( + gestureConfiguration = gestureConfig, + onGestureLabel = moveContent.toString(), + ) { + gestured = true + }, + ) + } + } + } + + // Changing the key moves the content to a new location in the composition. + key(moveContent) { gesturableContent() } + } + } + + sdkGestureInputManager.performGesture(sdkActionPrimary) + rule.runOnIdle { + assertEquals(true, gestured) + gestured = false + } + + // Move the content - the gesture node is detached, updated and attached again. + rule.runOnIdle { moveContent = true } + rule.waitForIdle() + + // Verify that the gesture is still registered after the move. + sdkGestureInputManager.performGesture(sdkActionPrimary) + rule.runOnIdle { assertEquals(true, gestured) } + } + @Test fun alert_dialog_confirm_and_dismiss() { val sdkGestureInputManager = SdkGestureInputManagerMock(false) diff --git a/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/onehandedgesture/OneHandedGestureModifier.kt b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/onehandedgesture/OneHandedGestureModifier.kt index 8f9d8843b8547..5523b92dcb6db 100644 --- a/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/onehandedgesture/OneHandedGestureModifier.kt +++ b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/onehandedgesture/OneHandedGestureModifier.kt @@ -234,7 +234,7 @@ private class GestureNode( override fun onObservedReadsChanged() = updateCompositionLocals(true) override fun onDetach() { - unregisterGesture(gestureManager, currentView!!, gestureConfiguration) + unregisterGesture(gestureManager, currentView, gestureConfiguration) gestureManager = null localScreenIsActive = false currentView = null @@ -262,15 +262,15 @@ private class GestureNode( val managerChanged = oldGestureManager != gestureManager if (!isEnabled || managerChanged) { - unregisterGesture(oldGestureManager, currentView!!, oldConfig) + unregisterGesture(oldGestureManager, currentView, oldConfig) } if (isEnabled && isAttached) { if (managerChanged || !wasEnabled) { registerGesture( gestureManager, - currentView!!, - hapticFeedback!!, + currentView, + hapticFeedback, gestureConfiguration, newEnabledInAmbient, onGestureLabel, @@ -278,15 +278,17 @@ private class GestureNode( onGesture, ) } else { - gestureManager?.updateGesture( - currentView!!, - oldConfig, - newConfig, - newEnabledInAmbient, - newOnGestureLabel, - newOnGestureAvailable, - newOnGesture, - ) + currentView?.let { view -> + gestureManager?.updateGesture( + view, + oldConfig, + newConfig, + newEnabledInAmbient, + newOnGestureLabel, + newOnGestureAvailable, + newOnGesture, + ) + } } } @@ -295,58 +297,64 @@ private class GestureNode( onGesture = newOnGesture } - private fun updateCompositionLocals(reregister: Boolean) = observeReads { - localScreenIsActive = currentValueOf(LocalScreenIsActive) - currentView = currentValueOf(LocalView) - hapticFeedback = currentValueOf(LocalHapticFeedback) - isEnabled = currentValueOf(LocalOneHandedGestureEnabled) - val newGestureManager = currentValueOf(LocalOneHandedGestureManager) - if (reregister) { - unregisterGesture(gestureManager, currentView!!, gestureConfiguration) - registerGesture( - newGestureManager, - currentView!!, - hapticFeedback!!, - gestureConfiguration, - enabledInAmbient, - onGestureLabel, - onGestureAvailable, - onGesture, - ) + private fun updateCompositionLocals(reregister: Boolean) { + if (!isAttached) return + + observeReads { + localScreenIsActive = currentValueOf(LocalScreenIsActive) + currentView = currentValueOf(LocalView) + hapticFeedback = currentValueOf(LocalHapticFeedback) + isEnabled = currentValueOf(LocalOneHandedGestureEnabled) + val newGestureManager = currentValueOf(LocalOneHandedGestureManager) + if (reregister) { + unregisterGesture(gestureManager, currentView, gestureConfiguration) + registerGesture( + newGestureManager, + currentView, + hapticFeedback, + gestureConfiguration, + enabledInAmbient, + onGestureLabel, + onGestureAvailable, + onGesture, + ) + } + gestureManager = newGestureManager } - gestureManager = newGestureManager } private fun registerGesture( manager: OneHandedGestureManager?, - view: View, - haptic: HapticFeedback, + view: View?, + haptic: HapticFeedback?, gestureConfiguration: OneHandedGestureConfiguration, enabledInAmbient: Boolean, onGestureLabel: String?, onGestureAvailable: () -> Unit, onGesture: suspend (centerOffset: Offset) -> Unit, ) { - if (isEnabled) { - manager?.registerGesture( - view = view, - haptic = haptic, - gestureConfiguration = gestureConfiguration, - enabledInAmbient = enabledInAmbient, - onGestureLabel = onGestureLabel, - onGestureAvailable = onGestureAvailable, - onGesture = onGesture, - isActive = { localScreenIsActive }, - size = { size }, - ) - } + if (!isEnabled || view == null || haptic == null) return + + manager?.registerGesture( + view = view, + haptic = haptic, + gestureConfiguration = gestureConfiguration, + enabledInAmbient = enabledInAmbient, + onGestureLabel = onGestureLabel, + onGestureAvailable = onGestureAvailable, + onGesture = onGesture, + isActive = { localScreenIsActive }, + size = { size }, + ) } private fun unregisterGesture( manager: OneHandedGestureManager?, - view: View, + view: View?, gestureConfiguration: OneHandedGestureConfiguration, ) { + if (view == null) return + manager?.unregisterGesture(view, gestureConfiguration) } } From 6b1c14de94dbbf9181afd1b3cc2b1b799778c928 Mon Sep 17 00:00:00 2001 From: Aidan Melvin Date: Fri, 18 Sep 2026 11:28:22 -0400 Subject: [PATCH 12/16] Upgrade deps to fix vulns in androidx.test.backup:backup-host Due to AutoVM-detected vulns Bug: 562679762 Test: :test:backup:backup-host:dependencies Change-Id: I915940679a2bc041694fb4ba1bcdb882d54cfea6 --- test/backup/backup-host/build.gradle | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/test/backup/backup-host/build.gradle b/test/backup/backup-host/build.gradle index 8463554f104be..c28848f9ec29b 100644 --- a/test/backup/backup-host/build.gradle +++ b/test/backup/backup-host/build.gradle @@ -41,6 +41,20 @@ dependencies { testImplementation(libs.mockitoCore) } +dependencies { + constraints { + implementation("org.bouncycastle:bcpkix-jdk18on:1.86") { + because("b/562679762 - upgrading to fix vulns") + } + implementation("org.apache.commons:commons-lang3:3.20.0") { + because("b/562679762 - upgrading to fix vulns") + } + implementation("org.apache.httpcomponents:httpclient:4.5.14") { + because("b/562679762 - upgrading to fix vulns") + } + } +} + androidx { kotlinTarget = androidx.build.KotlinTarget.KOTLIN_2_2 name = "Backup Host" From 5bb6eb12c21208d33909575cef9c895b244cdf9d Mon Sep 17 00:00:00 2001 From: Aidan Melvin Date: Mon, 21 Sep 2026 10:22:41 -0400 Subject: [PATCH 13/16] Upgrade bouncycastle in :car:app:app-testing To remediate AutoVM-raised issues Bug: 556458603 Test: :car:app:app-testing:dependencies Change-Id: Ie02d5f36493fd8f16350e3d2443f2e2924b94f44 --- car/app/app-testing/build.gradle | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/car/app/app-testing/build.gradle b/car/app/app-testing/build.gradle index a8449216bcccd..6a388ec071dce 100644 --- a/car/app/app-testing/build.gradle +++ b/car/app/app-testing/build.gradle @@ -37,9 +37,6 @@ dependencies { implementation(libs.robolectric) implementation("androidx.annotation:annotation-experimental:1.4.1") - // Forcing this upgrade due to CVE-2026-0636. For more information, see b/505222436 - implementation("org.bouncycastle:bcprov-jdk18on:1.84") - testImplementation(project(":car:app:app-projected")) testImplementation(libs.junit) testImplementation(libs.testCore) @@ -51,6 +48,14 @@ dependencies { annotationProcessor(libs.nullaway) } +dependencies { + constraints { + implementation("org.bouncycastle:bcprov-jdk18on:1.86") { + because("b/505222436 - upgrading to fix vulns") + } + } +} + android { namespace = "androidx.car.app.testing" } From f8f5e9c42b562e58bfca57d793d57e9471bc0d50 Mon Sep 17 00:00:00 2001 From: Aurimas Liutikas Date: Fri, 18 Sep 2026 13:24:57 -0700 Subject: [PATCH 14/16] Remove use of legacyDisableKotlinStrictApiMode in benchmark-macro libs Test: ./gradlew -p benchmark checkApi Change-Id: I8e291a57a20db496824afefaf7e433c3c860756b --- benchmark/benchmark-macro-junit4/build.gradle | 1 - .../macro/junit4/BaselineProfileRule.kt | 4 +- .../InstrumentationResultsRunListener.kt | 2 +- .../macro/junit4/MacrobenchmarkRule.kt | 18 ++-- .../macro/junit4/SideEffectRunListener.kt | 2 +- benchmark/benchmark-macro/build.gradle | 1 - .../benchmark/macro/BaselineProfileConfig.kt | 34 +++---- .../benchmark/macro/BaselineProfileMode.kt | 2 +- .../benchmark/macro/BaselineProfiles.kt | 6 +- .../androidx/benchmark/macro/BatteryCharge.kt | 4 +- .../benchmark/macro/CompilationMode.kt | 34 +++---- .../macro/ExperimentalMacrobenchmarkApi.kt | 2 +- .../benchmark/macro/ExperimentalMetricApi.kt | 2 +- .../benchmark/macro/Macrobenchmark.kt | 6 +- .../benchmark/macro/MacrobenchmarkScope.kt | 12 +-- .../java/androidx/benchmark/macro/Metric.kt | 99 ++++++++++--------- .../benchmark/macro/MetricResultExtensions.kt | 2 +- .../androidx/benchmark/macro/PowerCategory.kt | 2 +- .../macro/PowerCategoryDisplayLevel.kt | 2 +- .../androidx/benchmark/macro/PowerRail.kt | 4 +- .../macro/ProfileInstallBroadcast.kt | 20 ++-- .../androidx/benchmark/macro/ProfileRule.kt | 14 +-- 22 files changed, 141 insertions(+), 132 deletions(-) diff --git a/benchmark/benchmark-macro-junit4/build.gradle b/benchmark/benchmark-macro-junit4/build.gradle index d0d06b0dbe3d8..f2aa7256ff59d 100644 --- a/benchmark/benchmark-macro-junit4/build.gradle +++ b/benchmark/benchmark-macro-junit4/build.gradle @@ -80,7 +80,6 @@ androidx { type = SoftwareType.PUBLISHED_LIBRARY inceptionYear = "2020" description = "Android Benchmark - Macrobenchmark JUnit4" - legacyDisableKotlinStrictApiMode = true deviceTests { targetAppProject = project(":benchmark:integration-tests:macrobenchmark-target") targetAppVariant = "release" diff --git a/benchmark/benchmark-macro-junit4/src/main/java/androidx/benchmark/macro/junit4/BaselineProfileRule.kt b/benchmark/benchmark-macro-junit4/src/main/java/androidx/benchmark/macro/junit4/BaselineProfileRule.kt index 83238e228f202..a59b1848ab728 100644 --- a/benchmark/benchmark-macro-junit4/src/main/java/androidx/benchmark/macro/junit4/BaselineProfileRule.kt +++ b/benchmark/benchmark-macro-junit4/src/main/java/androidx/benchmark/macro/junit4/BaselineProfileRule.kt @@ -45,7 +45,7 @@ import org.junit.runners.model.Statement * @sample androidx.benchmark.samples.baselineProfileRuleLibrarySample */ @RequiresApi(28) -class BaselineProfileRule : TestRule { +public class BaselineProfileRule : TestRule { private lateinit var currentDescription: Description override fun apply(base: Statement, description: Description): Statement = @@ -81,7 +81,7 @@ class BaselineProfileRule : TestRule { * @param [profileBlock] defines the critical user journey. */ @JvmOverloads - fun collect( + public fun collect( packageName: String, maxIterations: Int = 15, stableIterations: Int = 3, diff --git a/benchmark/benchmark-macro-junit4/src/main/java/androidx/benchmark/macro/junit4/InstrumentationResultsRunListener.kt b/benchmark/benchmark-macro-junit4/src/main/java/androidx/benchmark/macro/junit4/InstrumentationResultsRunListener.kt index 6f04747add8c0..3ce2174a9f02b 100644 --- a/benchmark/benchmark-macro-junit4/src/main/java/androidx/benchmark/macro/junit4/InstrumentationResultsRunListener.kt +++ b/benchmark/benchmark-macro-junit4/src/main/java/androidx/benchmark/macro/junit4/InstrumentationResultsRunListener.kt @@ -31,7 +31,7 @@ import org.junit.runner.Result */ @Suppress("unused", "RestrictedApiAndroidX") // referenced by inst arg at runtime @RestrictTo(RestrictTo.Scope.LIBRARY) -class InstrumentationResultsRunListener : InstrumentationRunListener() { +public class InstrumentationResultsRunListener : InstrumentationRunListener() { override fun instrumentationRunFinished( streamResult: PrintStream?, resultBundle: Bundle, diff --git a/benchmark/benchmark-macro-junit4/src/main/java/androidx/benchmark/macro/junit4/MacrobenchmarkRule.kt b/benchmark/benchmark-macro-junit4/src/main/java/androidx/benchmark/macro/junit4/MacrobenchmarkRule.kt index 7b139d3c831bf..4acd6c14d1a2d 100644 --- a/benchmark/benchmark-macro-junit4/src/main/java/androidx/benchmark/macro/junit4/MacrobenchmarkRule.kt +++ b/benchmark/benchmark-macro-junit4/src/main/java/androidx/benchmark/macro/junit4/MacrobenchmarkRule.kt @@ -39,7 +39,7 @@ import org.junit.runners.model.Statement * * @sample androidx.benchmark.samples.macrobenchmarkRuleSample */ -class MacrobenchmarkRule : TestRule { +public class MacrobenchmarkRule : TestRule { private lateinit var currentDescription: Description /** @@ -75,7 +75,7 @@ class MacrobenchmarkRule : TestRule { * @param measureBlock The block performing app actions to benchmark each iteration. */ @JvmOverloads - fun measureRepeated( + public fun measureRepeated( packageName: String, metrics: List, compilationMode: CompilationMode = CompilationMode.DEFAULT, @@ -143,7 +143,7 @@ class MacrobenchmarkRule : TestRule { */ @ExperimentalBenchmarkConfigApi @JvmOverloads - fun measureRepeated( + public fun measureRepeated( packageName: String, metrics: List, @IntRange(from = 1) iterations: Int, @@ -168,6 +168,10 @@ class MacrobenchmarkRule : TestRule { ) } + /** + * @param perfettoConfig Configuration for Perfetto trace capture during each iteration. Note + * that insufficient or invalid configs may result in built-in [Metric]s not working. + */ @ExperimentalBenchmarkConfigApi @JvmOverloads @Deprecated( @@ -179,11 +183,7 @@ class MacrobenchmarkRule : TestRule { ), level = DeprecationLevel.WARNING, ) - /** - * @param perfettoConfig Configuration for Perfetto trace capture during each iteration. Note - * that insufficient or invalid configs may result in built-in [Metric]s not working. - */ - fun measureRepeated( + public fun measureRepeated( packageName: String, metrics: List, @IntRange(from = 1) iterations: Int, @@ -192,7 +192,7 @@ class MacrobenchmarkRule : TestRule { startupMode: StartupMode? = null, setupBlock: MacrobenchmarkScope.() -> Unit = {}, measureBlock: MacrobenchmarkScope.() -> Unit, - ) = + ): Unit = measureRepeated( packageName, metrics, diff --git a/benchmark/benchmark-macro-junit4/src/main/java/androidx/benchmark/macro/junit4/SideEffectRunListener.kt b/benchmark/benchmark-macro-junit4/src/main/java/androidx/benchmark/macro/junit4/SideEffectRunListener.kt index a764d0ca3b8f9..26ce99379019d 100644 --- a/benchmark/benchmark-macro-junit4/src/main/java/androidx/benchmark/macro/junit4/SideEffectRunListener.kt +++ b/benchmark/benchmark-macro-junit4/src/main/java/androidx/benchmark/macro/junit4/SideEffectRunListener.kt @@ -28,7 +28,7 @@ import org.junit.runner.notification.RunListener /** Enables the use of side-effects that reduce the noise during a macro benchmark run. */ @Suppress("unused") // referenced by inst arg at runtime @RestrictTo(RestrictTo.Scope.LIBRARY) -class SideEffectRunListener : RunListener() { +public class SideEffectRunListener : RunListener() { private val delegate: RunListenerDelegate = RunListenerDelegate(sideEffects = listOf(DisablePackages(), DisableDexOpt())) diff --git a/benchmark/benchmark-macro/build.gradle b/benchmark/benchmark-macro/build.gradle index b48a74a92924b..4737b689b7e7e 100644 --- a/benchmark/benchmark-macro/build.gradle +++ b/benchmark/benchmark-macro/build.gradle @@ -99,7 +99,6 @@ androidx { type = SoftwareType.PUBLISHED_LIBRARY inceptionYear = "2020" description = "Android Benchmark - Macrobenchmark" - legacyDisableKotlinStrictApiMode = true deviceTests { enableAlsoRunningOnPhysicalDevices = true } diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/BaselineProfileConfig.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/BaselineProfileConfig.kt index 4e355a473f59d..16945d106723e 100644 --- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/BaselineProfileConfig.kt +++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/BaselineProfileConfig.kt @@ -16,7 +16,7 @@ package androidx.benchmark.macro -class BaselineProfileConfig +public class BaselineProfileConfig internal constructor( private val outputFilePrefix: String?, private val packageName: String, @@ -32,22 +32,22 @@ internal constructor( * @return An optional file name prefix used when creating the output file with the contents of * the human readable baseline profile. For example: `outputFilePrefix-baseline-prof.txt` */ - fun getOutputFilePrefix(): String? = outputFilePrefix + public fun getOutputFilePrefix(): String? = outputFilePrefix /** @return The Package name of the app for which profiles are to be generated. */ - fun getPackageName(): String = packageName + public fun getPackageName(): String = packageName /** @return the he critical user journey. */ - fun getProfileBlock(): MacrobenchmarkScope.() -> Unit = profileBlock + public fun getProfileBlock(): MacrobenchmarkScope.() -> Unit = profileBlock /** @return the maximum number of iterations to run when collecting profiles. */ - fun getMaxIterations(): Int = maxIterations + public fun getMaxIterations(): Int = maxIterations /** * @return the minimum number of iterations to observe as stable before assuming stability, and * completing profile generation. */ - fun getStableIterations(): Int = stableIterations + public fun getStableIterations(): Int = stableIterations /** * Determines whether the generated profile should be also used as a startup profile. A startup @@ -56,16 +56,16 @@ internal constructor( * flows, such as main application startup pre and post login or other entry points of the app. * Note that methods collected in a startup profiles are also utilized for baseline profiles. */ - fun isIncludeInStartupProfile(): Boolean = includeInStartupProfile + public fun isIncludeInStartupProfile(): Boolean = includeInStartupProfile /** @return `true` iff we enforce that the generated profile was stable */ - fun isStrictStability(): Boolean = strictStability + public fun isStrictStability(): Boolean = strictStability /** @return the function used to filter individual rules / lines of the baseline profile. */ - fun getFilterPredicate(): (String) -> Boolean = filterPredicate + public fun getFilterPredicate(): (String) -> Boolean = filterPredicate /** Can be used to build a [androidx.benchmark.macro.BaselineProfileConfig] instance. */ - class Builder + public class Builder public constructor( private val packageName: String, private val profileBlock: MacrobenchmarkScope.() -> Unit, @@ -84,7 +84,7 @@ internal constructor( * @return The [androidx.benchmark.macro.BaselineProfileConfig.Builder] instance for * chaining. */ - fun setOutputFilePrefix(outputFilePrefix: String): Builder { + public fun setOutputFilePrefix(outputFilePrefix: String): Builder { this.outputFilePrefix = outputFilePrefix return this } @@ -95,7 +95,7 @@ internal constructor( * @return The [androidx.benchmark.macro.BaselineProfileConfig.Builder] instance for * chaining. */ - fun setMaxIterations(maxIterations: Int): Builder { + public fun setMaxIterations(maxIterations: Int): Builder { this.maxIterations = maxIterations return this } @@ -107,7 +107,7 @@ internal constructor( * @return The [androidx.benchmark.macro.BaselineProfileConfig.Builder] instance for * chaining. */ - fun setStableIterations(stableIterations: Int): Builder { + public fun setStableIterations(stableIterations: Int): Builder { this.stableIterations = stableIterations return this } @@ -123,7 +123,7 @@ internal constructor( * @return The [androidx.benchmark.macro.BaselineProfileConfig.Builder] instance for * chaining. */ - fun setIncludeInStartupProfile(includeInStartupProfile: Boolean): Builder { + public fun setIncludeInStartupProfile(includeInStartupProfile: Boolean): Builder { this.includeInStartupProfile = includeInStartupProfile return this } @@ -134,7 +134,7 @@ internal constructor( * @return The [androidx.benchmark.macro.BaselineProfileConfig.Builder] instance for * chaining. */ - fun setStrictStability(strictStability: Boolean): Builder { + public fun setStrictStability(strictStability: Boolean): Builder { this.strictStability = strictStability return this } @@ -147,13 +147,13 @@ internal constructor( * @return The [androidx.benchmark.macro.BaselineProfileConfig.Builder] instance for * chaining. */ - fun setFilterPredicate(filterPredicate: (String) -> Boolean): Builder { + public fun setFilterPredicate(filterPredicate: (String) -> Boolean): Builder { this.filterPredicate = filterPredicate return this } /** @return the [androidx.benchmark.macro.BaselineProfileConfig] instance. */ - fun build(): BaselineProfileConfig { + public fun build(): BaselineProfileConfig { return BaselineProfileConfig( outputFilePrefix = outputFilePrefix, packageName = packageName, diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/BaselineProfileMode.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/BaselineProfileMode.kt index b783e51f7e211..da1cb9ce52b17 100644 --- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/BaselineProfileMode.kt +++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/BaselineProfileMode.kt @@ -20,7 +20,7 @@ package androidx.benchmark.macro * Choice of how the Baseline Profile in a target application should be included or ignored during * pre-compilation. */ -enum class BaselineProfileMode { +public enum class BaselineProfileMode { /** * Require the BaselineProfile methods/classes from the target app to be pre-compiled. * diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/BaselineProfiles.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/BaselineProfiles.kt index 976c7ef754eb3..8467b1d6c9df1 100644 --- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/BaselineProfiles.kt +++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/BaselineProfiles.kt @@ -39,7 +39,7 @@ import java.io.File */ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) @RequiresApi(28) -fun collect( +public fun collect( uniqueName: String, packageName: String, stableIterations: Int, @@ -389,7 +389,7 @@ private data class Summary( /** A container for the results of collecting Baseline Profiles using the [collect] API. */ public class BaselineProfileResult( /** A list of absolute file paths to the generated baseline profiles. */ - val baselineProfiles: List = emptyList(), + public val baselineProfiles: List = emptyList(), /** A list of absolute file paths to the generated startup profiles. */ - val startupProfiles: List = emptyList(), + public val startupProfiles: List = emptyList(), ) diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/BatteryCharge.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/BatteryCharge.kt index 9320a9204c94c..63400723cbcd5 100644 --- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/BatteryCharge.kt +++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/BatteryCharge.kt @@ -20,11 +20,11 @@ import androidx.annotation.RestrictTo import androidx.benchmark.DeviceInfo @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX) -object BatteryCharge { +public object BatteryCharge { private const val MIN_BATTERY_PERCENT = 50 - fun hasMinimumCharge(throwOnMissingMetrics: Boolean = false): Boolean { + public fun hasMinimumCharge(throwOnMissingMetrics: Boolean = false): Boolean { if (DeviceInfo.initialBatteryPercent >= MIN_BATTERY_PERCENT) { return true } diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/CompilationMode.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/CompilationMode.kt index a409812b3c320..977cc0e6234a4 100644 --- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/CompilationMode.kt +++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/CompilationMode.kt @@ -64,7 +64,7 @@ import org.junit.AssumptionViolatedException * [`cmd compile`](https://source.android.com/devices/tech/dalvik/jit-compiler#force-compilation-of-a-specific-package) * to compile the target app). */ -sealed class CompilationMode { +public sealed class CompilationMode { internal fun resetAndCompile( scope: MacrobenchmarkScope, allowCompilationSkipping: Boolean = true, @@ -134,7 +134,7 @@ sealed class CompilationMode { * work on older APIs without root. */ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) - fun reinstallPackage(packageName: String) { + public fun reinstallPackage(packageName: String) { inMemoryTrace("reinstallPackage") { val copiedApkPaths = copiedApkPaths(packageName) try { @@ -159,7 +159,7 @@ sealed class CompilationMode { * after uninstall. */ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) - fun copiedApkPaths(packageName: String): String { + public fun copiedApkPaths(packageName: String): String { // Copy APKs to /data/local/temp val apkPaths = Shell.pmPath(packageName) @@ -175,7 +175,7 @@ sealed class CompilationMode { /** Uninstalls an app package by using `pm uninstall` under the hood. */ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) - fun uninstallPackage(packageName: String) { + public fun uninstallPackage(packageName: String) { Log.d(TAG, "Uninstalling $packageName") val output = Shell.executeScriptCaptureStdout("pm uninstall $packageName") check(output.trim() == "Success") { "Unable to uninstall $packageName ($output)" } @@ -186,7 +186,7 @@ sealed class CompilationMode { * `/data/local/tmp` from a pre-existing install session. */ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) - fun installPackageFromPaths(packageName: String, copiedApkPaths: String) { + public fun installPackageFromPaths(packageName: String, copiedApkPaths: String) { Log.d(TAG, "Installing $packageName") val builder = StringBuilder("pm install") // Provide a `-t` argument to `pm install` to ensure test packages are @@ -241,7 +241,7 @@ sealed class CompilationMode { * (such as will `StartupMode.COLD`), as app code is jitted. */ @Suppress("CanSealedSubClassBeObject") - class None : CompilationMode() { + public class None : CompilationMode() { override fun toString(): String = "None" @@ -267,7 +267,7 @@ sealed class CompilationMode { // Leaving possibility for future configuration @ExperimentalMacrobenchmarkApi @Suppress("CanSealedSubClassBeObject") - class Ignore : CompilationMode() { + public class Ignore : CompilationMode() { override fun toString(): String = "Ignore" override fun compileImpl(scope: MacrobenchmarkScope, warmupBlock: () -> Unit) { @@ -290,9 +290,9 @@ sealed class CompilationMode { * have the ProfileInstaller library included, and have been built by AGP 7.0+ to package the * baseline profile in the APK. */ - class Partial + public class Partial @JvmOverloads - constructor( + public constructor( /** * Controls whether a Baseline Profile should be used to partially pre compile the app. * @@ -300,13 +300,13 @@ sealed class CompilationMode { * * @see BaselineProfileMode */ - val baselineProfileMode: BaselineProfileMode = BaselineProfileMode.Require, + public val baselineProfileMode: BaselineProfileMode = BaselineProfileMode.Require, /** * If greater than 0, your macrobenchmark will run an extra [warmupIterations] times before * compilation, to prepare */ - @IntRange(from = 0) val warmupIterations: Int = 0, + @IntRange(from = 0) public val warmupIterations: Int = 0, ) : CompilationMode() { init { require(warmupIterations >= 0) { @@ -379,7 +379,7 @@ sealed class CompilationMode { * compiled ahead-of-time. */ @Suppress("CanSealedSubClassBeObject") // Leaving possibility for future configuration - class Full : CompilationMode() { + public class Full : CompilationMode() { override fun toString(): String = "Full" override fun compileImpl(scope: MacrobenchmarkScope, warmupBlock: () -> Unit) { @@ -398,7 +398,7 @@ sealed class CompilationMode { * TODO: migrate this to an internal-only flag on [None] instead */ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX) - object Interpreted : CompilationMode() { + public object Interpreted : CompilationMode() { override fun toString(): String = "Interpreted" override fun compileImpl(scope: MacrobenchmarkScope, warmupBlock: () -> Unit) { @@ -408,7 +408,7 @@ sealed class CompilationMode { override fun shouldReset(): Boolean = true } - companion object { + public companion object { /** * Represents the default compilation mode for the platform, on an end user's device. @@ -425,7 +425,7 @@ sealed class CompilationMode { * an app's BaselineProfile can be correctly used. */ @JvmField - val DEFAULT: CompilationMode = + public val DEFAULT: CompilationMode = Partial(baselineProfileMode = BaselineProfileMode.UseIfAvailable, warmupIterations = 0) internal fun cmdPackageCompile(packageName: String, compileArgument: String) { @@ -452,7 +452,7 @@ sealed class CompilationMode { } @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) // enable testing - fun compileResetErrorString( + public fun compileResetErrorString( packageName: String, output: String, isEmulator: Boolean, @@ -487,7 +487,7 @@ sealed class CompilationMode { * Used by jetpack-internal benchmarks to skip CompilationModes that would self-suppress. */ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX) -fun CompilationMode.isSupportedWithVmSettings(): Boolean { +public fun CompilationMode.isSupportedWithVmSettings(): Boolean { // Only check for supportedVmSettings when CompilationMode.Interpreted is being requested. // More context: b/248085179 val interpreted = this == CompilationMode.Interpreted diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/ExperimentalMacrobenchmarkApi.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/ExperimentalMacrobenchmarkApi.kt index 41158defe4e91..3ba8364dd8ac1 100644 --- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/ExperimentalMacrobenchmarkApi.kt +++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/ExperimentalMacrobenchmarkApi.kt @@ -19,4 +19,4 @@ package androidx.benchmark.macro @RequiresOptIn(message = "This Macrobenchmark API is experimental.") @Retention(AnnotationRetention.BINARY) @Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION) -annotation class ExperimentalMacrobenchmarkApi +public annotation class ExperimentalMacrobenchmarkApi diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/ExperimentalMetricApi.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/ExperimentalMetricApi.kt index b0684d24cd705..77f2cbc6978fc 100644 --- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/ExperimentalMetricApi.kt +++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/ExperimentalMetricApi.kt @@ -19,4 +19,4 @@ package androidx.benchmark.macro @RequiresOptIn(message = "This Metric API is experimental.") @Retention(AnnotationRetention.BINARY) @Target(AnnotationTarget.CLASS, AnnotationTarget.FUNCTION, AnnotationTarget.CONSTRUCTOR) -annotation class ExperimentalMetricApi +public annotation class ExperimentalMetricApi diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Macrobenchmark.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Macrobenchmark.kt index e545e410b60ec..b50ea16302566 100644 --- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Macrobenchmark.kt +++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Macrobenchmark.kt @@ -51,7 +51,7 @@ import org.junit.Assume.assumeFalse /** Get package ApplicationInfo, throw if not found. */ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) @Suppress("DEPRECATION") -fun getInstalledPackageInfo(packageName: String): ApplicationInfo { +public fun getInstalledPackageInfo(packageName: String): ApplicationInfo { val pm = InstrumentationRegistry.getInstrumentation().context.packageManager try { return pm.getApplicationInfo(packageName, 0) @@ -65,7 +65,7 @@ fun getInstalledPackageInfo(packageName: String): ApplicationInfo { /** @return `true` if the [ApplicationInfo] instance is referring to a system app. */ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) -fun ApplicationInfo.isSystemApp(): Boolean { +public fun ApplicationInfo.isSystemApp(): Boolean { return flags and (FLAG_SYSTEM or FLAG_UPDATED_SYSTEM_APP) > 0 } @@ -434,7 +434,7 @@ private fun macrobenchmark( /** Run a macrobenchmark with the specified StartupMode */ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) @ExperimentalBenchmarkConfigApi -fun macrobenchmarkWithStartupMode( +public fun macrobenchmarkWithStartupMode( uniqueName: String, className: String, testName: String, diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/MacrobenchmarkScope.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/MacrobenchmarkScope.kt index 7760ce1d32ce6..54cd7be62d045 100644 --- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/MacrobenchmarkScope.kt +++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/MacrobenchmarkScope.kt @@ -40,7 +40,7 @@ import java.io.File */ public class MacrobenchmarkScope( /** ApplicationId / Package name of the app being tested. */ - val packageName: String, + public val packageName: String, /** * Controls whether launches will automatically set [Intent.FLAG_ACTIVITY_CLEAR_TASK]. * @@ -152,7 +152,7 @@ public class MacrobenchmarkScope( * ahead of time. */ @get:Suppress("AutoBoxing") // low frequency, non-perf-relevant part of test - var iteration: Int? = null + public var iteration: Int? = null internal set /** @@ -175,7 +175,7 @@ public class MacrobenchmarkScope( * @throws IllegalStateException if unable to acquire intent for package. */ @JvmOverloads - public fun startActivityAndWait(block: (Intent) -> Unit = {}) = + public fun startActivityAndWait(block: (Intent) -> Unit = {}): Unit = trace("startActivityAndWait") { val intent = context.packageManager.getLaunchIntentForPackage(packageName) @@ -351,12 +351,12 @@ public class MacrobenchmarkScope( replaceWith = ReplaceWith("killProcess()"), ) @Suppress("UNUSED_PARAMETER") - fun killProcess(useKillAll: Boolean = false) { + public fun killProcess(useKillAll: Boolean = false) { killProcess() } /** Force-stop the process being measured. */ - fun killProcess() { + public fun killProcess() { // Method traces are only flushed is a method tracing session is active. flushMethodTraces() @@ -395,7 +395,7 @@ public class MacrobenchmarkScope( * @throws IllegalStateException if the device is not rooted, and the target app cannot be * signalled to drop its shader cache. */ - fun dropShaderCache() { + public fun dropShaderCache() { if (Arguments.dropShadersEnable) { Log.d(TAG, "Dropping shader cache for $packageName") val dropError = ProfileInstallBroadcast.dropShaderCache(packageName) diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Metric.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Metric.kt index d4187323deacb..afb33fbfbef5d 100644 --- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Metric.kt +++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/Metric.kt @@ -37,7 +37,7 @@ import androidx.benchmark.traceprocessor.TraceProcessor import androidx.test.platform.app.InstrumentationRegistry /** Metric interface. */ -sealed class Metric { +public sealed class Metric { internal open fun configure(captureInfo: CaptureInfo) {} internal open fun start() {} @@ -63,16 +63,16 @@ sealed class Metric { * mainline (<30). `null` if captured from a fixed trace, where mainline version is unknown. */ @ExperimentalMetricApi - class CaptureInfo( - val apiLevel: Int, - val targetPackageName: String, - val testPackageName: String, - val startupMode: StartupMode?, + public class CaptureInfo( + public val apiLevel: Int, + public val targetPackageName: String, + public val testPackageName: String, + public val startupMode: StartupMode?, // allocations for tests not relevant, not in critical path @Suppress("AutoBoxing") @get:Suppress("AutoBoxing") - val artMainlineVersion: Long? = expectedArtMainlineVersion(apiLevel), + public val artMainlineVersion: Long? = expectedArtMainlineVersion(apiLevel), ) { init { val expectedArtMainlineVersion = expectedArtMainlineVersion(apiLevel) @@ -84,7 +84,7 @@ sealed class Metric { } } - companion object { + public companion object { internal fun expectedArtMainlineVersion(apiLevel: Int) = when { apiLevel == 30 -> 1L @@ -103,7 +103,10 @@ sealed class Metric { * launch in a specific state, `null` otherwise. */ @JvmStatic - fun forLocalCapture(targetPackageName: String, startupMode: StartupMode?) = + public fun forLocalCapture( + targetPackageName: String, + startupMode: StartupMode?, + ): CaptureInfo = CaptureInfo( apiLevel = Build.VERSION.SDK_INT, artMainlineVersion = DeviceInfo.artMainlineVersion, @@ -123,7 +126,7 @@ sealed class Metric { @ConsistentCopyVisibility // Mirror copy()'s visibility with that of the constructor @ExperimentalMetricApi @Suppress("DataClassDefinition") - data class Measurement + public data class Measurement internal constructor( /** * Unique name of the metric, should be camel case with abbreviated suffix, e.g. @@ -148,7 +151,7 @@ sealed class Metric { * For example, in a startup Macrobenchmark, [StartupTimingMetric] returns a single * measurement for `timeToInitialDisplayMs`. */ - constructor( + public constructor( name: String, data: Double, ) : this(name, listOf(data), requireSingleValue = true) @@ -162,7 +165,7 @@ sealed class Metric { * When measurements are merged across multiple iterations, percentiles are extracted from * the total pool of samples: P50, P90, P95, and P99. */ - constructor( + public constructor( name: String, dataSamples: List, ) : this(name, dataSamples, requireSingleValue = false) @@ -199,7 +202,7 @@ private fun Long.nsToDoubleMs(): Double = this / 1_000_000.0 * framerate rendering) more naturally. */ @Suppress("CanSealedSubClassBeObject") -class FrameTimingMetric() : Metric() { +public class FrameTimingMetric() : Metric() { private var processSuffix: String = "" private var metricSuffix: String = "" @@ -212,7 +215,7 @@ class FrameTimingMetric() : Metric() { */ @ExperimentalMetricApi @JvmOverloads - constructor( + public constructor( processNameSuffix: String, metricNameSuffix: String = processNameSuffix.replace(oldValue = ":", newValue = "_"), ) : this() { @@ -260,7 +263,7 @@ class FrameTimingMetric() : Metric() { * are not available, only high level, millisecond-precision statistics. */ @ExperimentalMetricApi -class FrameTimingGfxInfoMetric : Metric() { +public class FrameTimingGfxInfoMetric : Metric() { private lateinit var packageName: String private val helper = JankCollectionHelper() private var metrics = mutableMapOf() @@ -369,7 +372,7 @@ class FrameTimingGfxInfoMetric : Metric() { * This measurement may not be available prior to API 29. */ @Suppress("CanSealedSubClassBeObject") -class StartupTimingMetric : Metric() { +public class StartupTimingMetric : Metric() { override fun getMeasurements( captureInfo: CaptureInfo, traceSession: TraceProcessor.Session, @@ -399,7 +402,7 @@ class StartupTimingMetric : Metric() { @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX) @Suppress("CanSealedSubClassBeObject") @RequiresApi(29) -class StartupTimingLegacyMetric : Metric() { +public class StartupTimingLegacyMetric : Metric() { override fun getMeasurements( captureInfo: CaptureInfo, traceSession: TraceProcessor.Session, @@ -480,7 +483,7 @@ class StartupTimingLegacyMetric : Metric() { * @see TraceProcessor.Session.query */ @ExperimentalMetricApi -abstract class TraceMetric : Metric() { +public abstract class TraceMetric : Metric() { /** * Get the metric result for a given iteration given information about the target process and a * TraceProcessor session @@ -517,7 +520,7 @@ abstract class TraceMetric : Metric() { * @see androidx.tracing.trace */ @ExperimentalMetricApi -class TraceSectionMetric( +public class TraceSectionMetric( /** * List of section names or patterns to match. * @@ -540,7 +543,7 @@ class TraceSectionMetric( ) : Metric() { @JvmOverloads - constructor( + public constructor( /** * Section name or pattern to match. * @@ -560,14 +563,14 @@ class TraceSectionMetric( targetPackageOnly: Boolean = true, ) : this(listOf(sectionName), label, mode, targetPackageOnly) - sealed class Mode(internal val name: String) { + public sealed class Mode(internal val name: String) { /** * Captures the duration of the first instance of `sectionName` in the trace. * * When this mode is used, no measurement will be reported if the named section does not * appear in the trace. */ - object First : Mode("First") + public object First : Mode("First") /** * Captures the sum of all instances of `sectionName` in the trace. @@ -575,7 +578,7 @@ class TraceSectionMetric( * When this mode is used, a measurement of `0` will be reported if the named section does * not appear in the trace. */ - object Sum : Mode("Sum") + public object Sum : Mode("Sum") /** * Reports the maximum observed duration for a trace section matching `sectionName` in the @@ -584,7 +587,7 @@ class TraceSectionMetric( * When this mode is used, no measurement will be reported if the named section does not * appear in the trace. */ - object Min : Mode("Min") + public object Min : Mode("Min") /** * Reports the maximum observed duration for a trace section matching `sectionName` in the @@ -593,7 +596,7 @@ class TraceSectionMetric( * When this mode is used, no measurement will be reported if the named section does not * appear in the trace. */ - object Max : Mode("Max") + public object Max : Mode("Max") /** * Counts the number of observed instances of a trace section matching `sectionName` in the @@ -602,7 +605,7 @@ class TraceSectionMetric( * When this mode is used, a measurement of `0` will be reported if the named section does * not appear in the trace. */ - object Count : Mode("Count") + public object Count : Mode("Count") /** * Average duration of trace sections matching `sectionName` in the trace. @@ -610,7 +613,7 @@ class TraceSectionMetric( * When this mode is used, a measurement of `0` will be reported if the named section does * not appear in the trace. */ - object Average : Mode("Average") + public object Average : Mode("Average") /** * Internal class to prevent external exhaustive when statements, which would break as we @@ -759,7 +762,7 @@ class TraceSectionMetric( * Some classes will be verified at runtime rather than install time due to limitations in the * compiler and runtime or due to being malformed. */ -class ArtMetric : Metric() { +public class ArtMetric : Metric() { override fun getMeasurements( captureInfo: CaptureInfo, traceSession: TraceProcessor.Session, @@ -849,19 +852,19 @@ class ArtMetric : Metric() { */ @RequiresApi(29) @ExperimentalMetricApi -class PowerMetric(private val type: Type) : Metric() { +public class PowerMetric(private val type: Type) : Metric() { - companion object { + public companion object { internal const val MEASURE_BLOCK_SECTION_NAME = "measureBlock" @JvmStatic - fun Battery(): Type.Battery { + public fun Battery(): Type.Battery { return Type.Battery() } @JvmOverloads @JvmStatic - fun Energy( + public fun Energy( categories: Map = emptyMap() ): Type.Energy { return Type.Energy(categories) @@ -869,7 +872,7 @@ class PowerMetric(private val type: Type) : Metric() { @JvmOverloads @JvmStatic - fun Power( + public fun Power( categories: Map = emptyMap() ): Type.Power { return Type.Power(categories) @@ -903,7 +906,7 @@ class PowerMetric(private val type: Type) : Metric() { * ``` */ @JvmStatic - fun deviceSupportsHighPrecisionTracking(): Boolean = + public fun deviceSupportsHighPrecisionTracking(): Boolean = hasMetrics(throwOnMissingMetrics = false) /** @@ -914,7 +917,7 @@ class PowerMetric(private val type: Type) : Metric() { * or to skip the test, e.g. with `assumeTrue(PowerMetric.deviceBatteryHasMinimumCharge())` */ @JvmStatic - fun deviceBatteryHasMinimumCharge(): Boolean = + public fun deviceBatteryHasMinimumCharge(): Boolean = hasMinimumCharge(throwOnMissingMetrics = false) } @@ -927,14 +930,18 @@ class PowerMetric(private val type: Type) : Metric() { * category will have metrics displayed independently or summed for a total metric of the * category. */ - sealed class Type(var categories: Map = emptyMap()) { - class Power(powerCategories: Map = emptyMap()) : - Type(powerCategories) + public sealed class Type( + public var categories: Map = emptyMap() + ) { + public class Power( + powerCategories: Map = emptyMap() + ) : Type(powerCategories) - class Energy(energyCategories: Map = emptyMap()) : - Type(energyCategories) + public class Energy( + energyCategories: Map = emptyMap() + ) : Type(energyCategories) - class Battery : Type() + public class Battery : Type() } override fun configure(captureInfo: CaptureInfo) { @@ -1076,9 +1083,9 @@ class PowerMetric(private val type: Type) : Metric() { * replaced by "_". */ @ExperimentalMetricApi -class MemoryUsageMetric +public class MemoryUsageMetric @JvmOverloads -constructor( +public constructor( private val mode: Mode, private val subMetrics: List = listOf( @@ -1091,7 +1098,7 @@ constructor( private val metricNameSuffix: String = processNameSuffix.replace(oldValue = ":", newValue = "_"), ) : TraceMetric() { - enum class Mode { + public enum class Mode { /** * Select the last available sample for each value. Useful for inspecting the final state of * e.g. Heap Size. @@ -1107,7 +1114,7 @@ constructor( Max, } - enum class SubMetric( + public enum class SubMetric( /** Name of counter in trace. */ internal val counterName: String, /** @@ -1199,7 +1206,7 @@ constructor( * replaced by "_". */ @ExperimentalMetricApi -class MemoryCountersMetric +public class MemoryCountersMetric @JvmOverloads constructor( private val processNameSuffix: String = "", diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/MetricResultExtensions.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/MetricResultExtensions.kt index 7c1dbecf97490..d1dc322550a83 100644 --- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/MetricResultExtensions.kt +++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/MetricResultExtensions.kt @@ -30,7 +30,7 @@ import kotlin.math.abs * @throws AssertionError */ @ExperimentalMetricApi -fun assertEqualMeasurements( +public fun assertEqualMeasurements( expected: List, observed: List, threshold: Double, diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/PowerCategory.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/PowerCategory.kt index 723a48c5b639b..a7b5d64882c73 100644 --- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/PowerCategory.kt +++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/PowerCategory.kt @@ -17,7 +17,7 @@ package androidx.benchmark.macro @ExperimentalMetricApi -enum class PowerCategory { +public enum class PowerCategory { CPU, DISPLAY, GPU, diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/PowerCategoryDisplayLevel.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/PowerCategoryDisplayLevel.kt index 193684c6d458b..46521344d41a1 100644 --- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/PowerCategoryDisplayLevel.kt +++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/PowerCategoryDisplayLevel.kt @@ -17,7 +17,7 @@ package androidx.benchmark.macro @ExperimentalMetricApi -enum class PowerCategoryDisplayLevel { +public enum class PowerCategoryDisplayLevel { BREAKDOWN, TOTAL, } diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/PowerRail.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/PowerRail.kt index a1d6549583a52..9df773ee4c339 100644 --- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/PowerRail.kt +++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/PowerRail.kt @@ -20,7 +20,7 @@ import androidx.annotation.RestrictTo import androidx.benchmark.Shell @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP_PREFIX) -object PowerRail { +public object PowerRail { private const val DUMPSYS_POWERSTATS = "dumpsys powerstats" @@ -42,7 +42,7 @@ object PowerRail { * @Throws UnsupportedOperationException if `hasException == true` and no rail metrics are * found. */ - fun hasMetrics(throwOnMissingMetrics: Boolean = false): Boolean { + public fun hasMetrics(throwOnMissingMetrics: Boolean = false): Boolean { // Note - we don't capture stderr, since if dumpsys fails due to missing // service, we'll correctly fail to find channels in stdout val output = Shell.executeCommandCaptureStdoutOnly(DUMPSYS_POWERSTATS) diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/ProfileInstallBroadcast.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/ProfileInstallBroadcast.kt index cad333ece819e..66c7ae621318b 100644 --- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/ProfileInstallBroadcast.kt +++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/ProfileInstallBroadcast.kt @@ -26,7 +26,7 @@ import androidx.profileinstaller.ProfileInstallReceiver import androidx.profileinstaller.ProfileInstaller @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) // temporary, revert -object ProfileInstallBroadcast { +public object ProfileInstallBroadcast { private val receiverName = ProfileInstallReceiver::class.java.name /** @@ -35,7 +35,7 @@ object ProfileInstallBroadcast { * * Returned error strings aren't thrown, to let the calling function decide strictness. */ - fun installProfile(packageName: String): String? { + public fun installProfile(packageName: String): String? { Log.d(TAG, "Profile Installer - Install profile") // For baseline profiles, we trigger this broadcast to force the baseline profile to be // installed synchronously @@ -113,7 +113,7 @@ object ProfileInstallBroadcast { * * Returned error strings aren't thrown, to let the calling function decide strictness. */ - fun skipFileOperation( + public fun skipFileOperation( packageName: String, @Suppress("SameParameterValue") operation: String, ): String? { @@ -151,7 +151,7 @@ object ProfileInstallBroadcast { * * Returned error strings aren't thrown, to let the calling function decide strictness. */ - fun saveProfile(packageName: String): String? { + public fun saveProfile(packageName: String): String? { Log.d(TAG, "Profile Installer - Save Profile") val action = "androidx.profileinstaller.action.SAVE_PROFILE" val (result, _) = Shell.amBroadcast("-a $action $packageName/$receiverName") @@ -178,7 +178,11 @@ object ProfileInstallBroadcast { } } - enum class Operation(val extraValue: String, val minimumVersion: String, val successCode: Int) { + public enum class Operation( + public val extraValue: String, + public val minimumVersion: String, + public val successCode: Int, + ) { DropShaderCache( extraValue = "DROP_SHADER_CACHE", minimumVersion = "1.3.0-alpha02", @@ -250,10 +254,10 @@ object ProfileInstallBroadcast { } } - fun dropShaderCache(packageName: String): String? = + public fun dropShaderCache(packageName: String): String? = benchmarkOperation(packageName, Operation.DropShaderCache) - data class SaveProfileResult(val processCount: Int, val error: String?) { + public data class SaveProfileResult(val processCount: Int, val error: String?) { init { require(error == null || processCount > 0) { "Error only valid if processes are found running," + @@ -263,7 +267,7 @@ object ProfileInstallBroadcast { } @SuppressLint("BanThreadSleep") - fun saveProfilesForAllProcesses(packageName: String): SaveProfileResult { + public fun saveProfilesForAllProcesses(packageName: String): SaveProfileResult { val processes = Shell.getRunningPidsAndProcessesForPackage(packageName) processes .sortedBy { it.processName } diff --git a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/ProfileRule.kt b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/ProfileRule.kt index 38a5c159bcabb..e11495eea3389 100644 --- a/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/ProfileRule.kt +++ b/benchmark/benchmark-macro/src/main/java/androidx/benchmark/macro/ProfileRule.kt @@ -24,16 +24,16 @@ private val PROFILE_RULE_REGEX = "(H?S?P?)L([^;]*);(->)?(.*)".toRegex() /** */ @RestrictTo(RestrictTo.Scope.LIBRARY) -data class ProfileRule( - val underlying: String, - val flags: String, - val classDescriptor: String, - val methodDescriptor: String?, +public data class ProfileRule( + public val underlying: String, + public val flags: String, + public val classDescriptor: String, + public val methodDescriptor: String?, ) { - companion object { + public companion object { /** Parses a profile rule to its constituent elements. */ @JvmStatic - fun parse(rule: String): ProfileRule? { + public fun parse(rule: String): ProfileRule? { return when (val result = PROFILE_RULE_REGEX.find(rule)) { null -> null else -> { From 58cc613c4040caf5e3b088c95b6e64a56a6ad415 Mon Sep 17 00:00:00 2001 From: stevebower Date: Mon, 21 Sep 2026 12:22:03 +0100 Subject: [PATCH 15/16] Update OneHandedGestures to draw indicator pointer background with paths instead of using vector drawable. The gesture indicator pointer background has been highlighted as contributing to an increase in APK size, due to the source XML file. Bug: 564375303 Test: N/A Relnote: "Optimize gesture indicators by replacing indicator pointer background in the resources with canvas functions using paths." Change-Id: Iee2b743f7bfa619343fddfd78bec8fd5a56a9d15 --- .../OneHandedGestureIndicatorCommon.kt | 39 +++++++++++++++++++ .../OneHandedGesturePageIndicator.kt | 26 ++----------- .../OneHandedGestureScrollIndicator.kt | 26 ++----------- ...d_gesture_indicator_pointer_background.xml | 25 ------------ 4 files changed, 47 insertions(+), 69 deletions(-) delete mode 100644 wear/compose/compose-material3/src/main/res/drawable/wear_one_handed_gesture_indicator_pointer_background.xml diff --git a/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/onehandedgesture/OneHandedGestureIndicatorCommon.kt b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/onehandedgesture/OneHandedGestureIndicatorCommon.kt index 5defdf00bafd6..c45fde8672e65 100644 --- a/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/onehandedgesture/OneHandedGestureIndicatorCommon.kt +++ b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/onehandedgesture/OneHandedGestureIndicatorCommon.kt @@ -40,12 +40,51 @@ import androidx.compose.ui.graphics.drawscope.withTransform import androidx.compose.ui.graphics.graphicsLayer import androidx.compose.ui.layout.layoutId import androidx.compose.ui.unit.DpSize +import androidx.compose.ui.unit.dp import androidx.compose.ui.util.lerp import androidx.wear.compose.material3.internal.LocalWristOrientation import androidx.wear.compose.material3.internal.isLeftWrist import kotlin.time.Duration import kotlin.time.Duration.Companion.milliseconds +internal val POINTER_BACKGROUND_WIDTH = 54.dp +internal val POINTER_BACKGROUND_HEIGHT = 48.dp +internal val POINTER_BACKGROUND_SIZE = DpSize(POINTER_BACKGROUND_WIDTH, POINTER_BACKGROUND_HEIGHT) + +/** + * Draws the one-handed gesture pointer background natively in Compose using paths, rather than + * using a vector drawable. + */ +@Composable +internal fun GestureIndicatorPointerBackground( + color: Color, + modifier: Modifier = Modifier, +) { + Canvas(modifier = modifier.size(POINTER_BACKGROUND_SIZE)) { + val scaleX = size.width / 54f + val scaleY = size.height / 48f + withTransform( + transformBlock = { + scale(scaleX, scaleY, pivot = Offset.Zero) + } + ) { + val path = + Path().apply { + moveTo(24f, 0f) + cubicTo(35.572f, 0f, 45.23f, 8.19f, 47.496f, 19.09f) + lineTo(53f, 22.268f) + cubicTo(54.333f, 23.037f, 54.333f, 24.963f, 53f, 25.732f) + lineTo(47.496f, 28.909f) + cubicTo(45.23f, 39.809f, 35.572f, 48f, 24f, 48f) + cubicTo(10.745f, 48f, 0f, 37.255f, 0f, 24f) + cubicTo(0f, 10.745f, 10.745f, 0f, 24f, 0f) + close() + } + drawPath(path, color = color) + } + } +} + /** * Procedurally draws the one-handed gesture primary (double-pinch) indicator animation natively in * Compose using paths. diff --git a/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/onehandedgesture/OneHandedGesturePageIndicator.kt b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/onehandedgesture/OneHandedGesturePageIndicator.kt index 4832a718f84dd..3379123d5265c 100644 --- a/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/onehandedgesture/OneHandedGesturePageIndicator.kt +++ b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/onehandedgesture/OneHandedGesturePageIndicator.kt @@ -36,18 +36,14 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.TransformOrigin import androidx.compose.ui.graphics.graphicsLayer -import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalLayoutDirection -import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.DpSize import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.max import androidx.wear.compose.foundation.pager.PagerState import androidx.wear.compose.material3.HorizontalPageIndicator -import androidx.wear.compose.material3.Icon import androidx.wear.compose.material3.PageIndicatorDefaults -import androidx.wear.compose.material3.R import androidx.wear.compose.material3.VerticalPageIndicator import kotlin.time.Duration.Companion.milliseconds import kotlinx.coroutines.CoroutineScope @@ -302,19 +298,7 @@ private fun GesturePageIndicator( state.gestureConfiguration = gestureConfiguration state.gestureManager = gestureManager - val density = LocalDensity.current - val backgroundPainter = - painterResource(R.drawable.wear_one_handed_gesture_indicator_pointer_background) - val backgroundSize = - remember(backgroundPainter, density) { - with(density) { - DpSize( - backgroundPainter.intrinsicSize.width.toDp(), - backgroundPainter.intrinsicSize.height.toDp(), - ) - } - } - val largestBackgroundSide = max(backgroundSize.width, backgroundSize.height) + val largestBackgroundSide = max(POINTER_BACKGROUND_WIDTH, POINTER_BACKGROUND_HEIGHT) Box( modifier = @@ -326,10 +310,8 @@ private fun GesturePageIndicator( .size(largestBackgroundSide), contentAlignment = Alignment.Center, ) { - Icon( - painter = backgroundPainter, - contentDescription = null, - tint = gestureIndicatorBackgroundColor, + GestureIndicatorPointerBackground( + color = gestureIndicatorBackgroundColor, modifier = Modifier.graphicsLayer { scaleX = backgroundScale @@ -337,7 +319,7 @@ private fun GesturePageIndicator( }, ) Box( - modifier = Modifier.size(backgroundSize.height).align(avdAlignment), + modifier = Modifier.size(POINTER_BACKGROUND_HEIGHT).align(avdAlignment), contentAlignment = Alignment.Center, ) { if (gestureConfiguration.action == OneHandedGestureAction.Dismiss) { diff --git a/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/onehandedgesture/OneHandedGestureScrollIndicator.kt b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/onehandedgesture/OneHandedGestureScrollIndicator.kt index 7225a947da435..20258f3f702e7 100644 --- a/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/onehandedgesture/OneHandedGestureScrollIndicator.kt +++ b/wear/compose/compose-material3/src/main/java/androidx/wear/compose/material3/onehandedgesture/OneHandedGestureScrollIndicator.kt @@ -39,21 +39,17 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.TransformOrigin import androidx.compose.ui.graphics.graphicsLayer -import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalLayoutDirection -import androidx.compose.ui.res.painterResource import androidx.compose.ui.unit.DpSize import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp import androidx.wear.compose.foundation.LocalReduceMotion import androidx.wear.compose.foundation.lazy.ScalingLazyListState import androidx.wear.compose.foundation.lazy.TransformingLazyColumnState -import androidx.wear.compose.material3.Icon import androidx.wear.compose.material3.IndicatorImpl import androidx.wear.compose.material3.IndicatorState import androidx.wear.compose.material3.LocalScaffoldState import androidx.wear.compose.material3.OffsetOverscrollEffect -import androidx.wear.compose.material3.R import androidx.wear.compose.material3.ScalingLazyColumnStateAdapter import androidx.wear.compose.material3.ScrollIndicatorColors import androidx.wear.compose.material3.ScrollIndicatorDefaults @@ -376,18 +372,6 @@ private fun GestureScrollIndicator( } val isRtl = (LocalLayoutDirection.current == LayoutDirection.Rtl) - val density = LocalDensity.current - val backgroundPainter = - painterResource(R.drawable.wear_one_handed_gesture_indicator_pointer_background) - val backgroundSize = - remember(density) { - with(density) { - DpSize( - backgroundPainter.intrinsicSize.width.toDp(), - backgroundPainter.intrinsicSize.height.toDp(), - ) - } - } Row(verticalAlignment = Alignment.CenterVertically) { Box( @@ -401,18 +385,16 @@ private fun GestureScrollIndicator( pivotFractionY = 0.5f, ) } - .size(backgroundSize), + .size(POINTER_BACKGROUND_SIZE), contentAlignment = Alignment.CenterStart, ) { - Icon( - painter = backgroundPainter, - contentDescription = null, - tint = gestureIndicatorBackgroundColor, + GestureIndicatorPointerBackground( + color = gestureIndicatorBackgroundColor, modifier = Modifier.graphicsLayer { scaleX = if (isRtl) -1f else 1f }, ) Box( - modifier = Modifier.size(backgroundSize.height), + modifier = Modifier.size(POINTER_BACKGROUND_HEIGHT), contentAlignment = Alignment.Center, ) { if (gestureConfiguration.action == OneHandedGestureAction.Dismiss) { diff --git a/wear/compose/compose-material3/src/main/res/drawable/wear_one_handed_gesture_indicator_pointer_background.xml b/wear/compose/compose-material3/src/main/res/drawable/wear_one_handed_gesture_indicator_pointer_background.xml deleted file mode 100644 index 0f2eb621c6eba..0000000000000 --- a/wear/compose/compose-material3/src/main/res/drawable/wear_one_handed_gesture_indicator_pointer_background.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - \ No newline at end of file From e6baf04307656079979cc2193646c1ba4b7417b3 Mon Sep 17 00:00:00 2001 From: MingWei Date: Mon, 21 Sep 2026 15:18:17 +0000 Subject: [PATCH 16/16] Remove AppFunctionCallerVerificationReceiver from default manifest This is temporary to create a build for internal drop. Test: Presubmit Change-Id: I0dc2fadaf6b66baea037434abdbae632035392b5 --- appfunctions/appfunctions/src/main/AndroidManifest.xml | 3 --- .../integration-tests/agentapp/src/main/AndroidManifest.xml | 6 +++++- .../multi-modules-testapp/app/src/main/AndroidManifest.xml | 3 +++ 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/appfunctions/appfunctions/src/main/AndroidManifest.xml b/appfunctions/appfunctions/src/main/AndroidManifest.xml index 6d8eeb0f42b1a..20ef4524d53f0 100644 --- a/appfunctions/appfunctions/src/main/AndroidManifest.xml +++ b/appfunctions/appfunctions/src/main/AndroidManifest.xml @@ -22,8 +22,5 @@ - \ No newline at end of file diff --git a/appfunctions/integration-tests/agentapp/src/main/AndroidManifest.xml b/appfunctions/integration-tests/agentapp/src/main/AndroidManifest.xml index 5e5f7d530f909..53de8977b367e 100644 --- a/appfunctions/integration-tests/agentapp/src/main/AndroidManifest.xml +++ b/appfunctions/integration-tests/agentapp/src/main/AndroidManifest.xml @@ -24,6 +24,10 @@ + android:supportsRtl="true" > + + \ No newline at end of file diff --git a/appfunctions/integration-tests/multi-modules-testapp/app/src/main/AndroidManifest.xml b/appfunctions/integration-tests/multi-modules-testapp/app/src/main/AndroidManifest.xml index 0501bd1d5e522..6072da7acd8e5 100644 --- a/appfunctions/integration-tests/multi-modules-testapp/app/src/main/AndroidManifest.xml +++ b/appfunctions/integration-tests/multi-modules-testapp/app/src/main/AndroidManifest.xml @@ -105,5 +105,8 @@ + \ No newline at end of file