Merge changes I105c7a5e,Idcb46fa8 into androidx-main
* changes:
androidx_incremental deleting out/ at the start of the week
androidx_incremental removing code for hashing out dir
diff --git a/appsearch/appsearch/src/main/java/androidx/appsearch/app/GenericDocument.java b/appsearch/appsearch/src/main/java/androidx/appsearch/app/GenericDocument.java
index 6e00a5b..57134edba 100644
--- a/appsearch/appsearch/src/main/java/androidx/appsearch/app/GenericDocument.java
+++ b/appsearch/appsearch/src/main/java/androidx/appsearch/app/GenericDocument.java
@@ -87,6 +87,14 @@
public static final String PARENT_TYPES_SYNTHETIC_PROPERTY = "$$__AppSearch__parentTypes";
/**
+ * An immutable empty {@link GenericDocument}.
+ *
+ * <!--@exportToFramework:hide-->
+ */
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ public static final GenericDocument EMPTY = new GenericDocument.Builder<>("", "", "").build();
+
+ /**
* The maximum number of indexed properties a document can have.
*
* <p>Indexed properties are properties which are strings where the
diff --git a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/UseCaseCamera.kt b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/UseCaseCamera.kt
index f802d66..0a13bd0 100644
--- a/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/UseCaseCamera.kt
+++ b/camera/camera-camera2-pipe-integration/src/main/java/androidx/camera/camera2/pipe/integration/impl/UseCaseCamera.kt
@@ -100,7 +100,6 @@
) : UseCaseCamera {
private val debugId = useCaseCameraIds.incrementAndGet()
private val closed = atomic(false)
- private lateinit var stateCollectJob: Job
override var runningUseCases = setOf<UseCase>()
set(value) {
@@ -131,7 +130,7 @@
useCaseGraphConfig.apply {
cameraStateAdapter.onGraphUpdated(graph)
}
- stateCollectJob = threads.scope.launch {
+ threads.scope.launch {
useCaseGraphConfig.apply {
graph.graphState.collect {
cameraStateAdapter.onGraphStateUpdated(graph, it)
@@ -144,7 +143,7 @@
it is GraphStateStopped ||
it is GraphStateError
) {
- stateCollectJob.cancel()
+ this@launch.coroutineContext[Job]?.cancel()
}
// TODO: b/323614735: Technically our RequestProcessor implementation could be
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CaptureSequenceProcessor.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CaptureSequenceProcessor.kt
index cf2716c..dfb9b4f 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CaptureSequenceProcessor.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/compat/Camera2CaptureSequenceProcessor.kt
@@ -160,6 +160,7 @@
if (request.inputRequest != null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
checkNotNull(imageWriter) {
+ request.inputRequest.image.close()
"Failed to create ImageWriter for capture session: $session"
}
diff --git a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/media/AndroidImageWriter.kt b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/media/AndroidImageWriter.kt
index 36e09ab..cdaab22 100644
--- a/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/media/AndroidImageWriter.kt
+++ b/camera/camera-camera2-pipe/src/main/java/androidx/camera/camera2/pipe/media/AndroidImageWriter.kt
@@ -44,7 +44,12 @@
override val format: Int = imageWriter.format
override fun queueInputImage(image: ImageWrapper) {
- imageWriter.queueInputImage(image.unwrapAs(Image::class))
+ try {
+ imageWriter.queueInputImage(image.unwrapAs(Image::class))
+ } catch (e: Exception) {
+ image.close()
+ Log.warn { "Reprocessing failed due to error: ${e.message}. Closing image.}" }
+ }
}
override fun dequeueInputImage(): ImageWrapper {
diff --git a/car/app/app-samples/navigation/automotive/src/main/AndroidManifest.xml b/car/app/app-samples/navigation/automotive/src/main/AndroidManifest.xml
index 2414350..6678151 100644
--- a/car/app/app-samples/navigation/automotive/src/main/AndroidManifest.xml
+++ b/car/app/app-samples/navigation/automotive/src/main/AndroidManifest.xml
@@ -21,7 +21,7 @@
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
-
+ <uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION"/>
<uses-permission android:name="androidx.car.app.NAVIGATION_TEMPLATES"/>
<uses-permission android:name="androidx.car.app.ACCESS_SURFACE"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
@@ -70,6 +70,7 @@
<service
android:name="androidx.car.app.sample.navigation.common.nav.NavigationService"
android:enabled="true"
+ android:foregroundServiceType="location"
android:exported="true">
</service>
diff --git a/car/app/app-samples/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationCarAppService.java b/car/app/app-samples/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationCarAppService.java
index 84dcbfe..0b88d64 100644
--- a/car/app/app-samples/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationCarAppService.java
+++ b/car/app/app-samples/navigation/common/src/main/java/androidx/car/app/sample/navigation/common/car/NavigationCarAppService.java
@@ -20,6 +20,7 @@
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.content.pm.ApplicationInfo;
+import android.content.pm.ServiceInfo;
import android.net.Uri;
import android.os.Build;
@@ -70,7 +71,13 @@
// foreground service instead.
// See https://developer.android.com/reference/com/google/android/libraries/car/app
// /CarAppService#accessing-location for more details.
- startForeground(NOTIFICATION_ID, getNotification());
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
+ startForeground(NOTIFICATION_ID, getNotification(),
+ ServiceInfo.FOREGROUND_SERVICE_TYPE_LOCATION);
+ } else {
+ startForeground(NOTIFICATION_ID, getNotification());
+ }
+
NavigationSession session = new NavigationSession(sessionInfo);
session.getLifecycle()
.addObserver(
diff --git a/car/app/app-samples/navigation/mobile/src/main/AndroidManifest.xml b/car/app/app-samples/navigation/mobile/src/main/AndroidManifest.xml
index e98b4e9..9ccbefa 100644
--- a/car/app/app-samples/navigation/mobile/src/main/AndroidManifest.xml
+++ b/car/app/app-samples/navigation/mobile/src/main/AndroidManifest.xml
@@ -21,6 +21,7 @@
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
+ <uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION"/>
<uses-permission android:name="androidx.car.app.NAVIGATION_TEMPLATES"/>
<uses-permission android:name="androidx.car.app.ACCESS_SURFACE"/>
@@ -66,6 +67,7 @@
<service
android:name="androidx.car.app.sample.navigation.common.nav.NavigationService"
android:enabled="true"
+ android:foregroundServiceType="location"
android:exported="true">
</service>
diff --git a/car/app/app-samples/showcase/automotive/src/main/AndroidManifest.xml b/car/app/app-samples/showcase/automotive/src/main/AndroidManifest.xml
index 8b59a09..df76c6b 100644
--- a/car/app/app-samples/showcase/automotive/src/main/AndroidManifest.xml
+++ b/car/app/app-samples/showcase/automotive/src/main/AndroidManifest.xml
@@ -21,6 +21,7 @@
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
+ <uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION"/>
<!-- SDK 33 onwards, apps require this permission to send any notifications to the system -->
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
@@ -88,6 +89,7 @@
<service
android:name=".common.screens.navigationdemos.NavigationNotificationService"
+ android:foregroundServiceType="location"
android:exported="true">
</service>
diff --git a/car/app/app-samples/showcase/mobile/src/main/AndroidManifest.xml b/car/app/app-samples/showcase/mobile/src/main/AndroidManifest.xml
index e5cfd60..dc8aafd 100644
--- a/car/app/app-samples/showcase/mobile/src/main/AndroidManifest.xml
+++ b/car/app/app-samples/showcase/mobile/src/main/AndroidManifest.xml
@@ -21,6 +21,7 @@
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
+ <uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION"/>
<!-- For PlaceListMapTemplate -->
<uses-permission android:name="androidx.car.app.MAP_TEMPLATES"/>
@@ -74,6 +75,7 @@
<service
android:name=".common.screens.navigationdemos.NavigationNotificationService"
+ android:foregroundServiceType="location"
android:exported="true">
</service>
diff --git a/car/app/app/api/current.txt b/car/app/app/api/current.txt
index b663e2e..5db432b 100644
--- a/car/app/app/api/current.txt
+++ b/car/app/app/api/current.txt
@@ -1614,7 +1614,7 @@
method @androidx.car.app.annotations.RequiresCarApi(5) public boolean isEnabled();
method public androidx.car.app.model.Row row();
method public CharSequence yourBoat();
- field public static final int IMAGE_TYPE_EXTRA_SMALL = 8; // 0x8
+ field @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public static final int IMAGE_TYPE_EXTRA_SMALL = 8; // 0x8
field public static final int IMAGE_TYPE_ICON = 4; // 0x4
field public static final int IMAGE_TYPE_LARGE = 2; // 0x2
field public static final int IMAGE_TYPE_SMALL = 1; // 0x1
diff --git a/car/app/app/api/restricted_current.txt b/car/app/app/api/restricted_current.txt
index b663e2e..5db432b 100644
--- a/car/app/app/api/restricted_current.txt
+++ b/car/app/app/api/restricted_current.txt
@@ -1614,7 +1614,7 @@
method @androidx.car.app.annotations.RequiresCarApi(5) public boolean isEnabled();
method public androidx.car.app.model.Row row();
method public CharSequence yourBoat();
- field public static final int IMAGE_TYPE_EXTRA_SMALL = 8; // 0x8
+ field @SuppressCompatibility @androidx.car.app.annotations.ExperimentalCarApi public static final int IMAGE_TYPE_EXTRA_SMALL = 8; // 0x8
field public static final int IMAGE_TYPE_ICON = 4; // 0x4
field public static final int IMAGE_TYPE_LARGE = 2; // 0x2
field public static final int IMAGE_TYPE_SMALL = 1; // 0x1
diff --git a/car/app/app/src/main/java/androidx/car/app/model/Row.java b/car/app/app/src/main/java/androidx/car/app/model/Row.java
index 1991c78..e2bdf08 100644
--- a/car/app/app/src/main/java/androidx/car/app/model/Row.java
+++ b/car/app/app/src/main/java/androidx/car/app/model/Row.java
@@ -28,8 +28,10 @@
import androidx.annotation.IntRange;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.annotation.OptIn;
import androidx.annotation.RestrictTo;
import androidx.car.app.annotations.CarProtocol;
+import androidx.car.app.annotations.ExperimentalCarApi;
import androidx.car.app.annotations.KeepFields;
import androidx.car.app.annotations.RequiresCarApi;
import androidx.car.app.model.constraints.ActionsConstraints;
@@ -64,6 +66,7 @@
@RestrictTo(LIBRARY)
@IntDef(value = {IMAGE_TYPE_SMALL, IMAGE_TYPE_ICON, IMAGE_TYPE_LARGE, IMAGE_TYPE_EXTRA_SMALL})
@Retention(RetentionPolicy.SOURCE)
+ @OptIn(markerClass = ExperimentalCarApi.class)
public @interface RowImageType {
}
@@ -104,6 +107,7 @@
* images targeting a 48 x 48 dp bounding box. If necessary, the image will be scaled down while
* preserving its aspect ratio.
*/
+ @ExperimentalCarApi
public static final int IMAGE_TYPE_EXTRA_SMALL = (1 << 3);
private final boolean mIsEnabled;
diff --git a/compose/runtime/runtime/api/current.txt b/compose/runtime/runtime/api/current.txt
index 0163760..886c585 100644
--- a/compose/runtime/runtime/api/current.txt
+++ b/compose/runtime/runtime/api/current.txt
@@ -864,14 +864,12 @@
property public abstract boolean readOnly;
property public abstract androidx.compose.runtime.snapshots.Snapshot root;
field public static final androidx.compose.runtime.snapshots.Snapshot.Companion Companion;
- field public static final int PreexistingSnapshotId = 1; // 0x1
}
public static final class Snapshot.Companion {
method public androidx.compose.runtime.snapshots.Snapshot getCurrent();
method public inline <T> T global(kotlin.jvm.functions.Function0<? extends T> block);
method public boolean isApplyObserverNotificationPending();
- method public boolean isInSnapshot();
method public void notifyObjectsInitialized();
method public <T> T observe(optional kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver, optional kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver, kotlin.jvm.functions.Function0<? extends T> block);
method @SuppressCompatibility @androidx.compose.runtime.InternalComposeApi public int openSnapshotCount();
@@ -884,7 +882,6 @@
method public inline <T> T withoutReadObservation(kotlin.jvm.functions.Function0<? extends T> block);
property public final androidx.compose.runtime.snapshots.Snapshot current;
property public final boolean isApplyObserverNotificationPending;
- property public final boolean isInSnapshot;
}
public final class SnapshotApplyConflictException extends java.lang.Exception {
diff --git a/compose/runtime/runtime/api/restricted_current.txt b/compose/runtime/runtime/api/restricted_current.txt
index 5240627..d282011 100644
--- a/compose/runtime/runtime/api/restricted_current.txt
+++ b/compose/runtime/runtime/api/restricted_current.txt
@@ -901,7 +901,6 @@
property public abstract boolean readOnly;
property public abstract androidx.compose.runtime.snapshots.Snapshot root;
field public static final androidx.compose.runtime.snapshots.Snapshot.Companion Companion;
- field public static final int PreexistingSnapshotId = 1; // 0x1
}
public static final class Snapshot.Companion {
@@ -909,7 +908,6 @@
method public androidx.compose.runtime.snapshots.Snapshot getCurrent();
method public inline <T> T global(kotlin.jvm.functions.Function0<? extends T> block);
method public boolean isApplyObserverNotificationPending();
- method public boolean isInSnapshot();
method @kotlin.PublishedApi internal androidx.compose.runtime.snapshots.Snapshot makeCurrentNonObservable(androidx.compose.runtime.snapshots.Snapshot? previous);
method public void notifyObjectsInitialized();
method public <T> T observe(optional kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? readObserver, optional kotlin.jvm.functions.Function1<java.lang.Object,kotlin.Unit>? writeObserver, kotlin.jvm.functions.Function0<? extends T> block);
@@ -927,7 +925,6 @@
property public final androidx.compose.runtime.snapshots.Snapshot current;
property @kotlin.PublishedApi internal final androidx.compose.runtime.snapshots.Snapshot? currentThreadSnapshot;
property public final boolean isApplyObserverNotificationPending;
- property public final boolean isInSnapshot;
}
public final class SnapshotApplyConflictException extends java.lang.Exception {
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotDoubleState.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotDoubleState.kt
index 3354ba0..cdea706 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotDoubleState.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotDoubleState.kt
@@ -130,13 +130,7 @@
value: Double
) : StateObjectImpl(), MutableDoubleState, SnapshotMutableState<Double> {
- private var next = DoubleStateStateRecord(value).also {
- if (Snapshot.isInSnapshot) {
- it.next = DoubleStateStateRecord(value).also { next ->
- next.snapshotId = Snapshot.PreexistingSnapshotId
- }
- }
- }
+ private var next = DoubleStateStateRecord(value)
override val firstStateRecord: StateRecord
get() = next
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotFloatState.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotFloatState.kt
index ff9a419..e5212f1 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotFloatState.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotFloatState.kt
@@ -126,13 +126,7 @@
value: Float
) : StateObjectImpl(), MutableFloatState, SnapshotMutableState<Float> {
- private var next = FloatStateStateRecord(value).also {
- if (Snapshot.isInSnapshot) {
- it.next = FloatStateStateRecord(value).also { next ->
- next.snapshotId = Snapshot.PreexistingSnapshotId
- }
- }
- }
+ private var next = FloatStateStateRecord(value)
override val firstStateRecord: StateRecord
get() = next
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotIntState.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotIntState.kt
index b01dc0d..75a7db0 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotIntState.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotIntState.kt
@@ -129,13 +129,7 @@
value: Int
) : StateObjectImpl(), MutableIntState, SnapshotMutableState<Int> {
- private var next = IntStateStateRecord(value).also {
- if (Snapshot.isInSnapshot) {
- it.next = IntStateStateRecord(value).also { next ->
- next.snapshotId = Snapshot.PreexistingSnapshotId
- }
- }
- }
+ private var next = IntStateStateRecord(value)
override val firstStateRecord: StateRecord
get() = next
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotLongState.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotLongState.kt
index f1270a2..f3b3678 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotLongState.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotLongState.kt
@@ -126,13 +126,7 @@
value: Long
) : StateObjectImpl(), MutableLongState, SnapshotMutableState<Long> {
- private var next = LongStateStateRecord(value).also {
- if (Snapshot.isInSnapshot) {
- it.next = LongStateStateRecord(value).also { next ->
- next.snapshotId = Snapshot.PreexistingSnapshotId
- }
- }
- }
+ private var next = LongStateStateRecord(value)
override val firstStateRecord: StateRecord
get() = next
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotState.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotState.kt
index 9fab395..0bd7bd7 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotState.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/SnapshotState.kt
@@ -139,13 +139,7 @@
}
}
- private var next: StateStateRecord<T> = StateStateRecord(value).also {
- if (Snapshot.isInSnapshot) {
- it.next = StateStateRecord(value).also { next ->
- next.snapshotId = Snapshot.PreexistingSnapshotId
- }
- }
- }
+ private var next: StateStateRecord<T> = StateStateRecord(value)
override val firstStateRecord: StateRecord
get() = next
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/Snapshot.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/Snapshot.kt
index 5383c37..23e538b 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/Snapshot.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/Snapshot.kt
@@ -298,11 +298,6 @@
val current get() = currentSnapshot()
/**
- * Return `true` if the thread is currently in the context of a snapshot.
- */
- val isInSnapshot: Boolean get() = threadSnapshot.get() != null
-
- /**
* Returns whether any threads are currently in the process of notifying observers about
* changes to the global snapshot.
*/
@@ -310,14 +305,6 @@
get() = pendingApplyObserverCount.get() > 0
/**
- * All new state objects initial state records should be [PreexistingSnapshotId] which then
- * allows snapshots outside the creating snapshot to access the object with its initial
- * state.
- */
- @Suppress("ConstPropertyName")
- const val PreexistingSnapshotId = 1
-
- /**
* Take a snapshot of the current value of all state objects. The values are preserved until
* [Snapshot.dispose] is called on the result.
*
@@ -1021,15 +1008,6 @@
// in a nested snapshot that was committed then changed.
val current = readable(first, snapshotId, invalidSnapshots) ?: return@forEach
val previous = readable(first, id, start) ?: return@forEach
- if (previous.snapshotId == PreexistingSnapshotId) {
- // A previous record might not be found if the state object was created in a
- // nested snapshot that didn't have any other modifications. The `apply()` for
- // a nested snapshot considers such snapshots no-op snapshots and just closes them
- // which allows this object's previous record to be missing or be the record created
- // during initial construction. In these cases taking applied is the right choice
- // this indicates there was no conflicting writes.
- return@forEach
- }
if (current != previous) {
val applied = readable(first, id, this.invalid) ?: readError()
val merged = optimisticMerges?.get(current) ?: run {
@@ -1846,9 +1824,8 @@
*/
private var openSnapshots = SnapshotIdSet.EMPTY
-/** The first snapshot created must be at least on more than the
- * [Snapshot.PreexistingSnapshotId] */
-private var nextSnapshotId = Snapshot.PreexistingSnapshotId + 1
+/** The first snapshot created must be at least on more than the INVALID_SNAPSHOT */
+private var nextSnapshotId = INVALID_SNAPSHOT + 1
/**
* A tracking table for pinned snapshots. A pinned snapshot is the lowest snapshot id that the
@@ -2192,16 +2169,9 @@
// Otherwise, make a copy of the readable data and mark it as born in this snapshot, making it
// writable.
- @Suppress("UNCHECKED_CAST")
- val newData = sync {
- // Verify that some other thread didn't already create this.
- val newReadData = readable(state.firstStateRecord, id, snapshot.invalid) ?: readError()
- if (newReadData.snapshotId == id)
- newReadData
- else newReadData.newWritableRecordLocked(state, snapshot)
- } as T
+ val newData = readData.newWritableRecord(state, snapshot)
- if (readData.snapshotId != Snapshot.PreexistingSnapshotId) snapshot.recordModified(state)
+ snapshot.recordModified(state)
return newData
}
@@ -2222,7 +2192,7 @@
val newData = sync { newOverwritableRecordLocked(state) }
newData.snapshotId = id
- if (candidate.snapshotId != Snapshot.PreexistingSnapshotId) snapshot.recordModified(state)
+ snapshot.recordModified(state)
return newData
}
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateList.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateList.kt
index c661d37..22fda4b 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateList.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateList.kt
@@ -33,15 +33,7 @@
@Stable
class SnapshotStateList<T> : StateObject, MutableList<T>, RandomAccess {
override var firstStateRecord: StateRecord =
- persistentListOf<T>().let { list ->
- StateListStateRecord(list).also {
- if (Snapshot.isInSnapshot) {
- it.next = StateListStateRecord(list).also { next ->
- next.snapshotId = Snapshot.PreexistingSnapshotId
- }
- }
- }
- }
+ StateListStateRecord<T>(persistentListOf())
private set
override fun prependStateRecord(value: StateRecord) {
@@ -221,7 +213,7 @@
oldList = current.list
}
val newList = block(oldList!!)
- if (newList === oldList) {
+ if (newList == oldList) {
result = false
break
}
diff --git a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateMap.kt b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateMap.kt
index 42701db..0f015a4 100644
--- a/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateMap.kt
+++ b/compose/runtime/runtime/src/commonMain/kotlin/androidx/compose/runtime/snapshots/SnapshotStateMap.kt
@@ -33,15 +33,7 @@
@Stable
class SnapshotStateMap<K, V> : StateObject, MutableMap<K, V> {
override var firstStateRecord: StateRecord =
- persistentHashMapOf<K, V>().let { map ->
- StateMapStateRecord(map).also {
- if (Snapshot.isInSnapshot) {
- it.next = StateMapStateRecord(map).also { next ->
- next.snapshotId = Snapshot.PreexistingSnapshotId
- }
- }
- }
- }
+ StateMapStateRecord<K, V>(persistentHashMapOf())
private set
override fun prependStateRecord(value: StateRecord) {
diff --git a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateListTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateListTests.kt
index c662be9..9d6add5 100644
--- a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateListTests.kt
+++ b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotStateListTests.kt
@@ -587,7 +587,7 @@
repeat(100) { index ->
repeat(10) {
- assertTrue(list.contains(index * 100 + it), "Missing ${index * 100 + it}")
+ assertTrue(list.contains(index * 100 + it))
}
}
}
diff --git a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotTests.kt b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotTests.kt
index 687e8d3..340b2b7 100644
--- a/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotTests.kt
+++ b/compose/runtime/runtime/src/nonEmulatorCommonTest/kotlin/androidx/compose/runtime/snapshots/SnapshotTests.kt
@@ -22,12 +22,6 @@
import androidx.compose.runtime.State
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableDoubleStateOf
-import androidx.compose.runtime.mutableFloatStateOf
-import androidx.compose.runtime.mutableIntStateOf
-import androidx.compose.runtime.mutableLongStateOf
-import androidx.compose.runtime.mutableStateListOf
-import androidx.compose.runtime.mutableStateMapOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.neverEqualPolicy
import androidx.compose.runtime.referentialEqualityPolicy
@@ -43,7 +37,6 @@
import kotlin.test.assertEquals
import kotlin.test.assertFailsWith
import kotlin.test.assertFalse
-import kotlin.test.assertNotEquals
import kotlin.test.assertNotSame
import kotlin.test.assertSame
import kotlin.test.assertTrue
@@ -1272,47 +1265,6 @@
assertEquals(1, current.writeCount)
}
- @Test
- fun testSnapshotStateIsBornAccessible() {
- fun <T, V> test(create: () -> T, read: (T) -> V, update: (T) -> V) {
- val snapshot = takeMutableSnapshot()
- val created: Any? = null
- val modified = observeChanges(snapshot) {
- val (state, initial) = snapshot.enter {
- val state = create()
- state to read(state)
- }
-
- // Ensure the value is accessible and has its initial state
- assertEquals(initial, read(state))
- val newValue = snapshot.enter {
- update(state)
- }
-
- // Ensure the test actually modified it
- assertNotEquals(initial, newValue)
-
- // Ensure the value still has its initial state
- assertEquals(initial, read(state))
- snapshot.apply().check()
-
- // Ensure the value now has the modified state
- assertEquals(newValue, read(state))
- }
-
- // The object is not considered modified
- assertFalse(created in modified)
- }
-
- test({ mutableStateOf("A") }, { it.value }) { it.value = "B"; "B" }
- test({ mutableIntStateOf(1) }, { it.value }, { it.value = 2; 2 })
- test({ mutableLongStateOf(1L) }, { it.value }, { it.value = 2L; 2L })
- test({ mutableFloatStateOf(1f) }, { it.value }, { it.value = 2f; 2f })
- test({ mutableDoubleStateOf(1.0) }, { it.value }, { it.value = 2.0; 2.0 })
- test({ mutableStateListOf<Int>() }, { it.isEmpty() }, { it.add(1); it.isEmpty() })
- test({ mutableStateMapOf<Int, Int>() }, { it.isEmpty() }, { it[23] = 42; it.isEmpty() })
- }
-
private fun usedRecords(state: StateObject): Int {
var used = 0
var current: StateRecord? = state.firstStateRecord
@@ -1353,20 +1305,6 @@
return changes
}
-internal fun observeChanges(snapshot: Snapshot, block: () -> Unit): Set<Any> {
- var changes = setOf<Any>()
- val removeObserver = Snapshot.registerApplyObserver { states, changedSnapshot ->
- if (changedSnapshot == snapshot) changes = states
- }
- try {
- block()
- Snapshot.sendApplyNotifications()
- } finally {
- removeObserver.dispose()
- }
- return changes
-}
-
internal fun readsOf(block: () -> Unit): Int {
var reads = 0
val snapshot = takeSnapshot(readObserver = { reads++ })
diff --git a/compose/ui/ui-graphics/api/current.txt b/compose/ui/ui-graphics/api/current.txt
index f65a14b..74a68cd 100644
--- a/compose/ui/ui-graphics/api/current.txt
+++ b/compose/ui/ui-graphics/api/current.txt
@@ -865,6 +865,7 @@
method public static android.graphics.RectF toAndroidRectF(androidx.compose.ui.geometry.Rect);
method public static androidx.compose.ui.unit.IntRect toComposeIntRect(android.graphics.Rect);
method public static androidx.compose.ui.geometry.Rect toComposeRect(android.graphics.Rect);
+ method public static androidx.compose.ui.geometry.Rect toComposeRect(android.graphics.RectF);
}
public final class RectangleShapeKt {
diff --git a/compose/ui/ui-graphics/api/restricted_current.txt b/compose/ui/ui-graphics/api/restricted_current.txt
index 6d5ec8b..b418453 100644
--- a/compose/ui/ui-graphics/api/restricted_current.txt
+++ b/compose/ui/ui-graphics/api/restricted_current.txt
@@ -936,6 +936,7 @@
method public static android.graphics.RectF toAndroidRectF(androidx.compose.ui.geometry.Rect);
method public static androidx.compose.ui.unit.IntRect toComposeIntRect(android.graphics.Rect);
method public static androidx.compose.ui.geometry.Rect toComposeRect(android.graphics.Rect);
+ method public static androidx.compose.ui.geometry.Rect toComposeRect(android.graphics.RectF);
}
public final class RectangleShapeKt {
diff --git a/compose/ui/ui-graphics/src/androidInstrumentedTest/kotlin/androidx/compose/ui/graphics/RectHelperTest.kt b/compose/ui/ui-graphics/src/androidInstrumentedTest/kotlin/androidx/compose/ui/graphics/RectHelperTest.kt
index 51f9188..a2939bc 100644
--- a/compose/ui/ui-graphics/src/androidInstrumentedTest/kotlin/androidx/compose/ui/graphics/RectHelperTest.kt
+++ b/compose/ui/ui-graphics/src/androidInstrumentedTest/kotlin/androidx/compose/ui/graphics/RectHelperTest.kt
@@ -118,4 +118,22 @@
).toComposeIntRect(),
)
}
+
+ @Test
+ fun androidRectFToRectConverts() {
+ assertEquals(
+ Rect(
+ 2.1f,
+ 3.2f,
+ 4.3f,
+ 5.4f
+ ),
+ android.graphics.RectF(
+ 2.1f,
+ 3.2f,
+ 4.3f,
+ 5.4f
+ ).toComposeRect(),
+ )
+ }
}
diff --git a/compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/RectHelper.android.kt b/compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/RectHelper.android.kt
index cc1160f..faed539 100644
--- a/compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/RectHelper.android.kt
+++ b/compose/ui/ui-graphics/src/androidMain/kotlin/androidx/compose/ui/graphics/RectHelper.android.kt
@@ -65,6 +65,13 @@
)
/**
+ * Creates a new instance of [androidx.compose.ui.geometry.Rect] with the same bounds
+ * specified in the given [android.graphics.RectF].
+ */
+fun android.graphics.RectF.toComposeRect(): Rect =
+ Rect(this.left, this.top, this.right, this.bottom)
+
+/**
* Creates a new instance of [android.graphics.Rect] with the same bounds
* specified in the given [IntRect]
*/
diff --git a/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/AndroidParagraph.android.kt b/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/AndroidParagraph.android.kt
index 5b73220..59f709c 100644
--- a/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/AndroidParagraph.android.kt
+++ b/compose/ui/ui-text/src/androidMain/kotlin/androidx/compose/ui/text/AndroidParagraph.android.kt
@@ -37,6 +37,7 @@
import androidx.compose.ui.graphics.drawscope.DrawStyle
import androidx.compose.ui.graphics.nativeCanvas
import androidx.compose.ui.graphics.toAndroidRectF
+import androidx.compose.ui.graphics.toComposeRect
import androidx.compose.ui.text.android.InternalPlatformTextApi
import androidx.compose.ui.text.android.LayoutCompat.ALIGN_CENTER
import androidx.compose.ui.text.android.LayoutCompat.ALIGN_LEFT
@@ -66,7 +67,6 @@
import androidx.compose.ui.text.android.LayoutCompat.TEXT_GRANULARITY_CHARACTER
import androidx.compose.ui.text.android.LayoutCompat.TEXT_GRANULARITY_WORD
import androidx.compose.ui.text.android.TextLayout
-import androidx.compose.ui.text.android.selection.WordIterator
import androidx.compose.ui.text.android.selection.getWordEnd
import androidx.compose.ui.text.android.selection.getWordStart
import androidx.compose.ui.text.android.style.IndentationFixSpan
@@ -324,7 +324,7 @@
rect = rect.toAndroidRectF(),
granularity = granularity.toLayoutTextGranularity(),
inclusionStrategy = { segmentBounds: RectF, area: RectF ->
- inclusionStrategy.isInside(segmentBounds.toRect(), area.toRect())
+ inclusionStrategy.isInside(segmentBounds.toComposeRect(), area.toComposeRect())
}
) ?: return null
return TextRange(range[0], range[1])
@@ -402,9 +402,6 @@
)
}
- private val wordIterator: WordIterator
- get() = layout.wordIterator
-
override fun getWordBoundary(offset: Int): TextRange {
val wordIterator = layout.wordIterator
return TextRange(wordIterator.getWordStart(offset), wordIterator.getWordEnd(offset))
@@ -656,5 +653,3 @@
else -> TEXT_GRANULARITY_CHARACTER
}
}
-
-private fun RectF.toRect(): Rect = Rect(left, top, right, bottom)
diff --git a/libraryversions.toml b/libraryversions.toml
index cbd8414..d845e73 100644
--- a/libraryversions.toml
+++ b/libraryversions.toml
@@ -70,7 +70,7 @@
GLANCE_PREVIEW = "1.0.0-alpha06"
GLANCE_TEMPLATE = "1.0.0-alpha06"
GLANCE_WEAR_TILES = "1.0.0-alpha06"
-GRAPHICS_CORE = "1.0.0-beta01"
+GRAPHICS_CORE = "1.0.0-rc01"
GRAPHICS_FILTERS = "1.0.0-alpha01"
GRAPHICS_PATH = "1.0.0-rc01"
GRAPHICS_SHAPES = "1.0.0-beta01"
@@ -108,7 +108,7 @@
PREFERENCE = "1.3.0-alpha01"
PRINT = "1.1.0-beta01"
PRIVACYSANDBOX_ACTIVITY = "1.0.0-alpha01"
-PRIVACYSANDBOX_ADS = "1.1.0-beta04"
+PRIVACYSANDBOX_ADS = "1.1.0-beta05"
PRIVACYSANDBOX_PLUGINS = "1.0.0-alpha03"
PRIVACYSANDBOX_SDKRUNTIME = "1.0.0-alpha13"
PRIVACYSANDBOX_TOOLS = "1.0.0-alpha08"
diff --git a/navigation/navigation-common/api/current.txt b/navigation/navigation-common/api/current.txt
index fd4ea53..aaad50f 100644
--- a/navigation/navigation-common/api/current.txt
+++ b/navigation/navigation-common/api/current.txt
@@ -32,7 +32,7 @@
method public abstract java.util.List<java.lang.String> serializeAsValues(T value);
}
- @SuppressCompatibility @kotlin.RequiresOptIn(level=kotlin.RequiresOptIn.Level.WARNING) @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CONSTRUCTOR, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface ExperimentalSafeArgsApi {
+ @SuppressCompatibility @kotlin.RequiresOptIn(level=kotlin.RequiresOptIn.Level.WARNING) @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CONSTRUCTOR, kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER}) public @interface ExperimentalSafeArgsApi {
}
public interface FloatingWindow {
@@ -365,6 +365,8 @@
method @Deprecated @IdRes public int getPopUpTo();
method @IdRes public int getPopUpToId();
method public String? getPopUpToRoute();
+ method public kotlin.reflect.KClass<?>? getPopUpToRouteClass();
+ method public Object? getPopUpToRouteObject();
method public boolean isPopUpToInclusive();
method public boolean shouldLaunchSingleTop();
method public boolean shouldPopUpToSaveState();
@@ -375,6 +377,8 @@
property @AnimRes @AnimatorRes public final int popExitAnim;
property @IdRes public final int popUpToId;
property public final String? popUpToRoute;
+ property public final kotlin.reflect.KClass<?>? popUpToRouteClass;
+ property public final Object? popUpToRouteObject;
}
public static final class NavOptions.Builder {
@@ -385,10 +389,13 @@
method public androidx.navigation.NavOptions.Builder setLaunchSingleTop(boolean singleTop);
method public androidx.navigation.NavOptions.Builder setPopEnterAnim(@AnimRes @AnimatorRes int popEnterAnim);
method public androidx.navigation.NavOptions.Builder setPopExitAnim(@AnimRes @AnimatorRes int popExitAnim);
+ method @SuppressCompatibility @androidx.navigation.ExperimentalSafeArgsApi public inline <reified T> androidx.navigation.NavOptions.Builder setPopUpTo(boolean inclusive, optional boolean saveState);
method public androidx.navigation.NavOptions.Builder setPopUpTo(@IdRes int destinationId, boolean inclusive);
method public androidx.navigation.NavOptions.Builder setPopUpTo(@IdRes int destinationId, boolean inclusive, optional boolean saveState);
method public androidx.navigation.NavOptions.Builder setPopUpTo(String? route, boolean inclusive);
method public androidx.navigation.NavOptions.Builder setPopUpTo(String? route, boolean inclusive, optional boolean saveState);
+ method @SuppressCompatibility @androidx.navigation.ExperimentalSafeArgsApi public <T> androidx.navigation.NavOptions.Builder setPopUpTo(T route, boolean inclusive);
+ method @SuppressCompatibility @androidx.navigation.ExperimentalSafeArgsApi public <T> androidx.navigation.NavOptions.Builder setPopUpTo(T route, boolean inclusive, optional boolean saveState);
method public androidx.navigation.NavOptions.Builder setRestoreState(boolean restoreState);
}
@@ -399,9 +406,13 @@
method @Deprecated public int getPopUpTo();
method public int getPopUpToId();
method public String? getPopUpToRoute();
+ method @SuppressCompatibility @androidx.navigation.ExperimentalSafeArgsApi public kotlin.reflect.KClass<?>? getPopUpToRouteClass();
+ method @SuppressCompatibility @androidx.navigation.ExperimentalSafeArgsApi public Object? getPopUpToRouteObject();
method public boolean getRestoreState();
method public void popUpTo(@IdRes int id, optional kotlin.jvm.functions.Function1<? super androidx.navigation.PopUpToBuilder,kotlin.Unit> popUpToBuilder);
method public void popUpTo(String route, optional kotlin.jvm.functions.Function1<? super androidx.navigation.PopUpToBuilder,kotlin.Unit> popUpToBuilder);
+ method @SuppressCompatibility @androidx.navigation.ExperimentalSafeArgsApi public inline <reified T> void popUpTo(optional kotlin.jvm.functions.Function1<? super androidx.navigation.PopUpToBuilder,kotlin.Unit> popUpToBuilder);
+ method @SuppressCompatibility @androidx.navigation.ExperimentalSafeArgsApi public <T> void popUpTo(T route, optional kotlin.jvm.functions.Function1<? super androidx.navigation.PopUpToBuilder,kotlin.Unit> popUpToBuilder);
method public void setLaunchSingleTop(boolean);
method @Deprecated public void setPopUpTo(int);
method public void setRestoreState(boolean);
@@ -409,6 +420,8 @@
property @Deprecated public final int popUpTo;
property public final int popUpToId;
property public final String? popUpToRoute;
+ property @SuppressCompatibility @androidx.navigation.ExperimentalSafeArgsApi public final kotlin.reflect.KClass<?>? popUpToRouteClass;
+ property @SuppressCompatibility @androidx.navigation.ExperimentalSafeArgsApi public final Object? popUpToRouteObject;
property public final boolean restoreState;
}
diff --git a/navigation/navigation-common/api/restricted_current.txt b/navigation/navigation-common/api/restricted_current.txt
index fd4ea53..aaad50f 100644
--- a/navigation/navigation-common/api/restricted_current.txt
+++ b/navigation/navigation-common/api/restricted_current.txt
@@ -32,7 +32,7 @@
method public abstract java.util.List<java.lang.String> serializeAsValues(T value);
}
- @SuppressCompatibility @kotlin.RequiresOptIn(level=kotlin.RequiresOptIn.Level.WARNING) @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CONSTRUCTOR, kotlin.annotation.AnnotationTarget.FUNCTION}) public @interface ExperimentalSafeArgsApi {
+ @SuppressCompatibility @kotlin.RequiresOptIn(level=kotlin.RequiresOptIn.Level.WARNING) @kotlin.annotation.Retention(kotlin.annotation.AnnotationRetention.BINARY) @kotlin.annotation.Target(allowedTargets={kotlin.annotation.AnnotationTarget.CONSTRUCTOR, kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER}) public @interface ExperimentalSafeArgsApi {
}
public interface FloatingWindow {
@@ -365,6 +365,8 @@
method @Deprecated @IdRes public int getPopUpTo();
method @IdRes public int getPopUpToId();
method public String? getPopUpToRoute();
+ method public kotlin.reflect.KClass<?>? getPopUpToRouteClass();
+ method public Object? getPopUpToRouteObject();
method public boolean isPopUpToInclusive();
method public boolean shouldLaunchSingleTop();
method public boolean shouldPopUpToSaveState();
@@ -375,6 +377,8 @@
property @AnimRes @AnimatorRes public final int popExitAnim;
property @IdRes public final int popUpToId;
property public final String? popUpToRoute;
+ property public final kotlin.reflect.KClass<?>? popUpToRouteClass;
+ property public final Object? popUpToRouteObject;
}
public static final class NavOptions.Builder {
@@ -385,10 +389,13 @@
method public androidx.navigation.NavOptions.Builder setLaunchSingleTop(boolean singleTop);
method public androidx.navigation.NavOptions.Builder setPopEnterAnim(@AnimRes @AnimatorRes int popEnterAnim);
method public androidx.navigation.NavOptions.Builder setPopExitAnim(@AnimRes @AnimatorRes int popExitAnim);
+ method @SuppressCompatibility @androidx.navigation.ExperimentalSafeArgsApi public inline <reified T> androidx.navigation.NavOptions.Builder setPopUpTo(boolean inclusive, optional boolean saveState);
method public androidx.navigation.NavOptions.Builder setPopUpTo(@IdRes int destinationId, boolean inclusive);
method public androidx.navigation.NavOptions.Builder setPopUpTo(@IdRes int destinationId, boolean inclusive, optional boolean saveState);
method public androidx.navigation.NavOptions.Builder setPopUpTo(String? route, boolean inclusive);
method public androidx.navigation.NavOptions.Builder setPopUpTo(String? route, boolean inclusive, optional boolean saveState);
+ method @SuppressCompatibility @androidx.navigation.ExperimentalSafeArgsApi public <T> androidx.navigation.NavOptions.Builder setPopUpTo(T route, boolean inclusive);
+ method @SuppressCompatibility @androidx.navigation.ExperimentalSafeArgsApi public <T> androidx.navigation.NavOptions.Builder setPopUpTo(T route, boolean inclusive, optional boolean saveState);
method public androidx.navigation.NavOptions.Builder setRestoreState(boolean restoreState);
}
@@ -399,9 +406,13 @@
method @Deprecated public int getPopUpTo();
method public int getPopUpToId();
method public String? getPopUpToRoute();
+ method @SuppressCompatibility @androidx.navigation.ExperimentalSafeArgsApi public kotlin.reflect.KClass<?>? getPopUpToRouteClass();
+ method @SuppressCompatibility @androidx.navigation.ExperimentalSafeArgsApi public Object? getPopUpToRouteObject();
method public boolean getRestoreState();
method public void popUpTo(@IdRes int id, optional kotlin.jvm.functions.Function1<? super androidx.navigation.PopUpToBuilder,kotlin.Unit> popUpToBuilder);
method public void popUpTo(String route, optional kotlin.jvm.functions.Function1<? super androidx.navigation.PopUpToBuilder,kotlin.Unit> popUpToBuilder);
+ method @SuppressCompatibility @androidx.navigation.ExperimentalSafeArgsApi public inline <reified T> void popUpTo(optional kotlin.jvm.functions.Function1<? super androidx.navigation.PopUpToBuilder,kotlin.Unit> popUpToBuilder);
+ method @SuppressCompatibility @androidx.navigation.ExperimentalSafeArgsApi public <T> void popUpTo(T route, optional kotlin.jvm.functions.Function1<? super androidx.navigation.PopUpToBuilder,kotlin.Unit> popUpToBuilder);
method public void setLaunchSingleTop(boolean);
method @Deprecated public void setPopUpTo(int);
method public void setRestoreState(boolean);
@@ -409,6 +420,8 @@
property @Deprecated public final int popUpTo;
property public final int popUpToId;
property public final String? popUpToRoute;
+ property @SuppressCompatibility @androidx.navigation.ExperimentalSafeArgsApi public final kotlin.reflect.KClass<?>? popUpToRouteClass;
+ property @SuppressCompatibility @androidx.navigation.ExperimentalSafeArgsApi public final Object? popUpToRouteObject;
property public final boolean restoreState;
}
diff --git a/navigation/navigation-common/src/androidTest/java/androidx/navigation/NavOptionsBuilderTest.kt b/navigation/navigation-common/src/androidTest/java/androidx/navigation/NavOptionsBuilderTest.kt
index bf40bfd..1bf7a19 100644
--- a/navigation/navigation-common/src/androidTest/java/androidx/navigation/NavOptionsBuilderTest.kt
+++ b/navigation/navigation-common/src/androidTest/java/androidx/navigation/NavOptionsBuilderTest.kt
@@ -14,11 +14,15 @@
* limitations under the License.
*/
+@file:OptIn(ExperimentalSafeArgsApi::class)
+
package androidx.navigation
import androidx.test.ext.junit.runners.AndroidJUnit4
import androidx.test.filters.SmallTest
import com.google.common.truth.Truth.assertWithMessage
+import kotlinx.serialization.Serializable
+import kotlinx.serialization.serializer
import org.junit.Test
import org.junit.runner.RunWith
@@ -26,6 +30,11 @@
@RunWith(AndroidJUnit4::class)
class NavOptionsTest {
+ @Serializable
+ class TestClass
+
+ private val TEST_CLASS_ROUTE = "androidx.navigation.NavControllerRouteTest.TestClass"
+
@Test
fun launchSingleTop() {
val navOptions = navOptions {
@@ -76,6 +85,42 @@
}
@Test
+ fun popUpToKClass() {
+ val navOptions = navOptions {
+ popUpTo<TestClass>()
+ }
+ assertWithMessage("NavOptions should have popUpTo destination route set")
+ .that(navOptions.popUpToRouteClass)
+ .isEqualTo(TestClass::class)
+ assertWithMessage("NavOptions should have popUpTo destination id set")
+ .that(navOptions.popUpToId)
+ .isEqualTo(serializer<TestClass>().hashCode())
+ assertWithMessage("NavOptions should have not have popUpTo destination route set")
+ .that(navOptions.popUpToRoute)
+ .isEqualTo(null)
+ assertWithMessage("NavOptions should have isPopUpToInclusive false by default")
+ .that(navOptions.isPopUpToInclusive())
+ .isFalse()
+ }
+
+ @Test
+ fun popUpToObject() {
+ val popObj = TestClass()
+ val navOptions = navOptions {
+ popUpTo(popObj)
+ }
+ assertWithMessage("NavOptions should have popUpTo destination id set")
+ .that(navOptions.popUpToId)
+ .isEqualTo(serializer<TestClass>().hashCode())
+ assertWithMessage("NavOptions should have popUpTo destination route set")
+ .that(navOptions.popUpToRouteObject)
+ .isEqualTo(popObj)
+ assertWithMessage("NavOptions should have isPopUpToInclusive false by default")
+ .that(navOptions.isPopUpToInclusive())
+ .isFalse()
+ }
+
+ @Test
fun popUpToBuilder() {
val navOptions = navOptions {
popUpTo(DESTINATION_ID) {
@@ -95,6 +140,54 @@
}
@Test
+ fun popUpToKClassBuilder() {
+ val navOptions = navOptions {
+ popUpTo<TestClass> {
+ inclusive = true
+ saveState = true
+ }
+ }
+ assertWithMessage("NavOptions should have popUpTo destination class set")
+ .that(navOptions.popUpToRouteClass)
+ .isEqualTo(TestClass::class)
+ assertWithMessage("NavOptions should have popUpTo destination id set")
+ .that(navOptions.popUpToId)
+ .isEqualTo(serializer<TestClass>().hashCode())
+ assertWithMessage("NavOptions should have not have popUpTo destination route set")
+ .that(navOptions.popUpToRoute)
+ .isEqualTo(null)
+ assertWithMessage("NavOptions should have isPopUpToInclusive set")
+ .that(navOptions.isPopUpToInclusive())
+ .isTrue()
+ assertWithMessage("NavOptions should have shouldPopUpToSaveState set")
+ .that(navOptions.shouldPopUpToSaveState())
+ .isTrue()
+ }
+
+ @Test
+ fun popUpToObjectBuilder() {
+ val popObject = TestClass()
+ val navOptions = navOptions {
+ popUpTo(popObject) {
+ inclusive = true
+ saveState = true
+ }
+ }
+ assertWithMessage("NavOptions should have popUpTo destination id set")
+ .that(navOptions.popUpToId)
+ .isEqualTo(serializer<TestClass>().hashCode())
+ assertWithMessage("NavOptions should have popUpTo destination class set")
+ .that(navOptions.popUpToRouteObject)
+ .isEqualTo(popObject)
+ assertWithMessage("NavOptions should have isPopUpToInclusive set")
+ .that(navOptions.isPopUpToInclusive())
+ .isTrue()
+ assertWithMessage("NavOptions should have shouldPopUpToSaveState set")
+ .that(navOptions.shouldPopUpToSaveState())
+ .isTrue()
+ }
+
+ @Test
fun popUpToRouteInclusive() {
val navOptions = navOptions {
popUpTo(DESTINATION_ROUTE) {
diff --git a/navigation/navigation-common/src/main/java/androidx/navigation/ExperimentalSafeArgsApi.kt b/navigation/navigation-common/src/main/java/androidx/navigation/ExperimentalSafeArgsApi.kt
index be7244c2..bfb7874 100644
--- a/navigation/navigation-common/src/main/java/androidx/navigation/ExperimentalSafeArgsApi.kt
+++ b/navigation/navigation-common/src/main/java/androidx/navigation/ExperimentalSafeArgsApi.kt
@@ -26,6 +26,8 @@
* APIs annotated with `ExperimentalSafeArgsAPI` requires opt-in
*/
@Retention(AnnotationRetention.BINARY)
-@Target(AnnotationTarget.CONSTRUCTOR, AnnotationTarget.FUNCTION)
+@Target(AnnotationTarget.CONSTRUCTOR, AnnotationTarget.FUNCTION, AnnotationTarget.PROPERTY,
+ AnnotationTarget.PROPERTY_GETTER
+)
@RequiresOptIn(level = RequiresOptIn.Level.WARNING)
public annotation class ExperimentalSafeArgsApi
diff --git a/navigation/navigation-common/src/main/java/androidx/navigation/NavOptions.kt b/navigation/navigation-common/src/main/java/androidx/navigation/NavOptions.kt
index 9e810f4..61ebc4c 100644
--- a/navigation/navigation-common/src/main/java/androidx/navigation/NavOptions.kt
+++ b/navigation/navigation-common/src/main/java/androidx/navigation/NavOptions.kt
@@ -18,7 +18,11 @@
import androidx.annotation.AnimRes
import androidx.annotation.AnimatorRes
import androidx.annotation.IdRes
+import androidx.annotation.RestrictTo
import androidx.navigation.NavDestination.Companion.createRoute
+import kotlin.reflect.KClass
+import kotlinx.serialization.InternalSerializationApi
+import kotlinx.serialization.serializer
/**
* NavOptions stores special options for navigate actions
@@ -92,6 +96,30 @@
private set
/**
+ * Route from a [KClass] for the destination to pop up to before navigating. When set,
+ * all non-matching destinations should be popped from the back stack.
+ * @return the destination route to pop up to, clearing all intervening destinations
+ * @see Builder.setPopUpTo
+ *
+ * @see isPopUpToInclusive
+ * @see shouldPopUpToSaveState
+ */
+ public var popUpToRouteClass: KClass<*>? = null
+ private set
+
+ /**
+ * Route from an Object for the destination to pop up to before navigating. When set,
+ * all non-matching destinations should be popped from the back stack.
+ * @return the destination route to pop up to, clearing all intervening destinations
+ * @see Builder.setPopUpTo
+ *
+ * @see isPopUpToInclusive
+ * @see shouldPopUpToSaveState
+ */
+ public var popUpToRouteObject: Any? = null
+ private set
+
+ /**
* NavOptions stores special options for navigate actions
*/
internal constructor(
@@ -119,6 +147,62 @@
}
/**
+ * NavOptions stores special options for navigate actions
+ */
+ @OptIn(InternalSerializationApi::class)
+ internal constructor(
+ singleTop: Boolean,
+ restoreState: Boolean,
+ popUpToRouteClass: KClass<*>?,
+ popUpToInclusive: Boolean,
+ popUpToSaveState: Boolean,
+ enterAnim: Int,
+ exitAnim: Int,
+ popEnterAnim: Int,
+ popExitAnim: Int
+ ) : this(
+ singleTop,
+ restoreState,
+ popUpToRouteClass!!.serializer().hashCode(),
+ popUpToInclusive,
+ popUpToSaveState,
+ enterAnim,
+ exitAnim,
+ popEnterAnim,
+ popExitAnim
+ ) {
+ this.popUpToRouteClass = popUpToRouteClass
+ }
+
+ /**
+ * NavOptions stores special options for navigate actions
+ */
+ @OptIn(InternalSerializationApi::class)
+ internal constructor(
+ singleTop: Boolean,
+ restoreState: Boolean,
+ popUpToRouteObject: Any,
+ popUpToInclusive: Boolean,
+ popUpToSaveState: Boolean,
+ enterAnim: Int,
+ exitAnim: Int,
+ popEnterAnim: Int,
+ popExitAnim: Int
+ ) : this(
+ singleTop,
+ restoreState,
+ popUpToRouteObject::class.serializer().hashCode(),
+ popUpToInclusive,
+ popUpToSaveState,
+ enterAnim,
+ exitAnim,
+ popEnterAnim,
+ popExitAnim
+ ) {
+ this.popUpToRouteObject = popUpToRouteObject
+ }
+
+ /**
* Whether this navigation action should launch as single-top (i.e., there will be at most
* one copy of a given destination on the top of the back stack).
*
@@ -166,6 +250,7 @@
restoreState == other.restoreState &&
popUpToId == other.popUpToId &&
popUpToRoute == other.popUpToRoute &&
+ popUpToRouteClass == other.popUpToRouteClass &&
popUpToInclusive == other.popUpToInclusive &&
popUpToSaveState == other.popUpToSaveState &&
enterAnim == other.enterAnim &&
@@ -179,6 +264,7 @@
result = 31 * result + if (shouldRestoreState()) 1 else 0
result = 31 * result + popUpToId
result = 31 * result + popUpToRoute.hashCode()
+ result = 31 * result + popUpToRouteClass.hashCode()
result = 31 * result + if (isPopUpToInclusive()) 1 else 0
result = 31 * result + if (shouldPopUpToSaveState()) 1 else 0
result = 31 * result + enterAnim
@@ -203,6 +289,8 @@
sb.append("popUpTo(")
if (popUpToRoute != null) {
sb.append(popUpToRoute)
+ } else if (popUpToRouteClass != null) {
+ sb.append(popUpToRouteClass)
} else {
sb.append("0x")
sb.append(Integer.toHexString(popUpToId))
@@ -239,6 +327,8 @@
@IdRes
private var popUpToId = -1
private var popUpToRoute: String? = null
+ private var popUpToRouteClass: KClass<*>? = null
+ private var popUpToRouteObject: Any? = null
private var popUpToInclusive = false
private var popUpToSaveState = false
@@ -340,6 +430,80 @@
}
/**
+ * Pop up to a given destination before navigating. This pops all non-matching destinations
+ * from the back stack until this destination is found.
+ *
+ * @param T route from a [KClass] for destination to pop up to, clearing all
+ * intervening destinations.
+ * @param inclusive true to also pop the given destination from the back stack.
+ * @param saveState true if the back stack and the state of all destinations between the
+ * current destination and [T] should be saved for later restoration via
+ * [setRestoreState] or the `restoreState` attribute using the same route from [KClass]
+ * as [popUpToRouteClass] (note: this matching route is true whether [inclusive] is true or
+ * false).
+ * @return this Builder
+ *
+ * @see NavOptions.popUpToId
+ * @see NavOptions.isPopUpToInclusive
+ */
+ @JvmOverloads
+ @Suppress("MissingGetterMatchingBuilder") // no need for getter
+ @ExperimentalSafeArgsApi
+ public inline fun <reified T : Any> setPopUpTo(
+ inclusive: Boolean,
+ saveState: Boolean = false
+ ): Builder {
+ setPopUpTo(T::class, inclusive, saveState)
+ return this
+ }
+
+ // this restricted public is needed so that the public reified [popUpTo] can call
+ // private popUpToRouteClass setter
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ public fun setPopUpTo(
+ klass: KClass<*>,
+ inclusive: Boolean,
+ saveState: Boolean = false
+ ): Builder {
+ popUpToRouteClass = klass
+ popUpToId = -1
+ popUpToInclusive = inclusive
+ popUpToSaveState = saveState
+ return this
+ }
+
+ /**
+ * Pop up to a given destination before navigating. This pops all non-matching destinations
+ * from the back stack until this destination is found.
+ *
+ * @param route route from an Object for destination to pop up to, clearing all
+ * intervening destinations.
+ * @param inclusive true to also pop the given destination from the back stack.
+ * @param saveState true if the back stack and the state of all destinations between the
+ * current destination and [route] should be saved for later restoration via
+ * [setRestoreState] or the `restoreState` attribute using the same route from an Object
+ * as [popUpToRouteObject] (note: this matching route is true whether [inclusive] is
+ * true or false).
+ * @return this Builder
+ *
+ * @see NavOptions.popUpToId
+ * @see NavOptions.isPopUpToInclusive
+ */
+ @JvmOverloads
+ @Suppress("MissingGetterMatchingBuilder")
+ @ExperimentalSafeArgsApi
+ @OptIn(InternalSerializationApi::class)
+ public fun <T : Any> setPopUpTo(
+ route: T,
+ inclusive: Boolean,
+ saveState: Boolean = false
+ ): Builder {
+ popUpToRouteObject = route
+ setPopUpTo(route::class.serializer().hashCode(), inclusive, saveState)
+ return this
+ }
+
+ /**
* Sets a custom Animation or Animator resource for the enter animation.
*
* Note: Animator resources are not supported for navigating to a new Activity
@@ -401,18 +565,31 @@
* @return a constructed NavOptions
*/
public fun build(): NavOptions {
- return if (popUpToRoute != null)
+ return if (popUpToRoute != null) {
NavOptions(
singleTop, restoreState,
popUpToRoute, popUpToInclusive, popUpToSaveState,
enterAnim, exitAnim, popEnterAnim, popExitAnim
)
- else
+ } else if (popUpToRouteClass != null) {
+ NavOptions(
+ singleTop, restoreState,
+ popUpToRouteClass, popUpToInclusive, popUpToSaveState,
+ enterAnim, exitAnim, popEnterAnim, popExitAnim
+ )
+ } else if (popUpToRouteObject != null) {
+ NavOptions(
+ singleTop, restoreState,
+ popUpToRouteObject!!, popUpToInclusive, popUpToSaveState,
+ enterAnim, exitAnim, popEnterAnim, popExitAnim
+ )
+ } else {
NavOptions(
singleTop, restoreState,
popUpToId, popUpToInclusive, popUpToSaveState,
enterAnim, exitAnim, popEnterAnim, popExitAnim
)
+ }
}
}
}
diff --git a/navigation/navigation-common/src/main/java/androidx/navigation/NavOptionsBuilder.kt b/navigation/navigation-common/src/main/java/androidx/navigation/NavOptionsBuilder.kt
index 8865788..c12719e 100644
--- a/navigation/navigation-common/src/main/java/androidx/navigation/NavOptionsBuilder.kt
+++ b/navigation/navigation-common/src/main/java/androidx/navigation/NavOptionsBuilder.kt
@@ -14,11 +14,15 @@
* limitations under the License.
*/
+@file:OptIn(ExperimentalSafeArgsApi::class)
+
package androidx.navigation
import androidx.annotation.AnimRes
import androidx.annotation.AnimatorRes
import androidx.annotation.IdRes
+import androidx.annotation.RestrictTo
+import kotlin.reflect.KClass
@DslMarker
public annotation class NavOptionsDsl
@@ -95,6 +99,42 @@
* Pop up to a given destination before navigating. This pops all non-matching destinations
* from the back stack until this destination is found.
*/
+ // both ExperimentalSafeArgsApi annotations required for annotation to appear on API declaration
+ @property:ExperimentalSafeArgsApi
+ @get:ExperimentalSafeArgsApi
+ @get:Suppress("GetterOnBuilder")
+ // required due to getter with ExperimentalSafeArgsApi annotation
+ @Suppress("OPT_IN_MARKER_ON_WRONG_TARGET")
+ public var popUpToRouteClass: KClass<*>? = null
+ private set(value) {
+ if (value != null) {
+ field = value
+ inclusive = false
+ }
+ }
+
+ /**
+ * Pop up to a given destination before navigating. This pops all non-matching destinations
+ * from the back stack until this destination is found.
+ */
+ // both ExperimentalSafeArgsApi annotations required for annotation to appear on API declaration
+ @property:ExperimentalSafeArgsApi
+ @get:ExperimentalSafeArgsApi
+ @get:Suppress("GetterOnBuilder")
+ // required due to getter with ExperimentalSafeArgsApi annotation
+ @Suppress("OPT_IN_MARKER_ON_WRONG_TARGET")
+ public var popUpToRouteObject: Any? = null
+ private set(value) {
+ if (value != null) {
+ field = value
+ inclusive = false
+ }
+ }
+
+ /**
+ * Pop up to a given destination before navigating. This pops all non-matching destinations
+ * from the back stack until this destination is found.
+ */
public fun popUpTo(@IdRes id: Int, popUpToBuilder: PopUpToBuilder.() -> Unit = {}) {
popUpToId = id
popUpToRoute = null
@@ -119,6 +159,56 @@
}
/**
+ * Pop up to a given destination before navigating. This pops all non-matching destination routes
+ * from the back stack until the destination with a matching route is found.
+ *
+ * @param T route from a [KClass] for the destination
+ * @param popUpToBuilder builder used to construct a popUpTo operation
+ */
+ @ExperimentalSafeArgsApi
+ // align with other popUpTo overloads where this is suppressed in baseline lint ignore
+ @Suppress("BuilderSetStyle")
+ public inline fun <reified T : Any> popUpTo(
+ noinline popUpToBuilder: PopUpToBuilder.() -> Unit = {}
+ ) {
+ popUpTo(T::class, popUpToBuilder)
+ }
+
+ // this restricted public is needed so that the public reified [popUpTo] can call
+ // private popUpToRouteClass setter
+ @RestrictTo(RestrictTo.Scope.LIBRARY_GROUP)
+ public fun <T : Any> popUpTo(
+ klass: KClass<T>,
+ popUpToBuilder: PopUpToBuilder.() -> Unit
+ ) {
+ popUpToRouteClass = klass
+ popUpToId = -1
+ popUpToRoute = null
+ val builder = PopUpToBuilder().apply(popUpToBuilder)
+ inclusive = builder.inclusive
+ saveState = builder.saveState
+ }
+
+ /**
+ * Pop up to a given destination before navigating. This pops all non-matching destination routes
+ * from the back stack until the destination with a matching route is found.
+ *
+ * @param route route from a Object for the destination
+ * @param popUpToBuilder builder used to construct a popUpTo operation
+ */
+ @ExperimentalSafeArgsApi
+ // align with other popUpTo overloads where this is suppressed in baseline lint ignore
+ @Suppress("BuilderSetStyle", "MissingJvmstatic")
+ public fun <T : Any> popUpTo(route: T, popUpToBuilder: PopUpToBuilder.() -> Unit = {}) {
+ popUpToRouteObject = route
+ popUpToId = -1
+ popUpToRoute = null
+ val builder = PopUpToBuilder().apply(popUpToBuilder)
+ inclusive = builder.inclusive
+ saveState = builder.saveState
+ }
+
+ /**
* Sets any custom Animation or Animator resources that should be used.
*
* Note: Animator resources are not supported for navigating to a new Activity
@@ -137,6 +227,10 @@
setRestoreState(restoreState)
if (popUpToRoute != null) {
setPopUpTo(popUpToRoute, inclusive, saveState)
+ } else if (popUpToRouteClass != null) {
+ setPopUpTo(popUpToRouteClass!!, inclusive, saveState)
+ } else if (popUpToRouteObject != null) {
+ setPopUpTo(popUpToRouteObject!!, inclusive, saveState)
} else {
setPopUpTo(popUpToId, inclusive, saveState)
}
diff --git a/navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavControllerRouteTest.kt b/navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavControllerRouteTest.kt
index 2d2965c0..37f31e0 100644
--- a/navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavControllerRouteTest.kt
+++ b/navigation/navigation-runtime/src/androidTest/java/androidx/navigation/NavControllerRouteTest.kt
@@ -3020,6 +3020,160 @@
@UiThreadTest
@Test
+ fun testNavigateWithPopKClassInclusive() {
+ val navController = createNavController()
+ navController.graph = navController.createGraph(startDestination = TestClass::class) {
+ test(TestClass::class)
+ test("second")
+ }
+
+ assertThat(navController.currentDestination?.route).isEqualTo(TEST_CLASS_ROUTE)
+ assertThat(navController.currentBackStack.value.map { it.destination.route })
+ .containsExactly(null, TEST_CLASS_ROUTE).inOrder()
+
+ navController.navigate("second") {
+ popUpTo<TestClass> {
+ inclusive = true
+ }
+ }
+
+ assertThat(navController.currentDestination?.route).isEqualTo("second")
+ assertThat(navController.currentBackStack.value.map { it.destination.route })
+ .containsExactly(null, "second").inOrder()
+ }
+
+ @UiThreadTest
+ @Test
+ fun testNavigateWithPopKClassNotInclusive() {
+ val navController = createNavController()
+ navController.graph = navController.createGraph(startDestination = TestClass::class) {
+ test(TestClass::class)
+ test("second")
+ test("third")
+ }
+
+ assertThat(navController.currentDestination?.route).isEqualTo(TEST_CLASS_ROUTE)
+ assertThat(navController.currentBackStack.value.map { it.destination.route })
+ .containsExactly(null, TEST_CLASS_ROUTE).inOrder()
+
+ navController.navigate("second")
+ assertThat(navController.currentBackStack.value.map { it.destination.route })
+ .containsExactly(null, TEST_CLASS_ROUTE, "second").inOrder()
+
+ navController.navigate("third") {
+ popUpTo<TestClass> {
+ inclusive = false
+ }
+ }
+
+ assertThat(navController.currentDestination?.route).isEqualTo("third")
+ assertThat(navController.currentBackStack.value.map { it.destination.route })
+ .containsExactly(null, TEST_CLASS_ROUTE, "third").inOrder()
+ }
+
+ @UiThreadTest
+ @Test
+ fun testNavigateWithPopObjectInclusive() {
+ val navController = createNavController()
+ navController.graph = navController.createGraph(startDestination = TestClass::class) {
+ test(TestClass::class)
+ test("second")
+ }
+
+ assertThat(navController.currentDestination?.route).isEqualTo(TEST_CLASS_ROUTE)
+ assertThat(navController.currentBackStack.value.map { it.destination.route })
+ .containsExactly(null, TEST_CLASS_ROUTE).inOrder()
+
+ navController.navigate("second") {
+ popUpTo(TestClass()) {
+ inclusive = true
+ }
+ }
+
+ assertThat(navController.currentDestination?.route).isEqualTo("second")
+ assertThat(navController.currentBackStack.value.map { it.destination.route })
+ .containsExactly(null, "second").inOrder()
+ }
+
+ @UiThreadTest
+ @Test
+ fun testNavigateWithPopObjectNotInclusive() {
+ val navController = createNavController()
+ navController.graph = navController.createGraph(startDestination = TestClass::class) {
+ test(TestClass::class)
+ test("second")
+ test("third")
+ }
+
+ assertThat(navController.currentDestination?.route).isEqualTo(TEST_CLASS_ROUTE)
+ assertThat(navController.currentBackStack.value.map { it.destination.route })
+ .containsExactly(null, TEST_CLASS_ROUTE).inOrder()
+
+ navController.navigate("second")
+ assertThat(navController.currentBackStack.value.map { it.destination.route })
+ .containsExactly(null, TEST_CLASS_ROUTE, "second").inOrder()
+
+ navController.navigate("third") {
+ popUpTo(TestClass()) {
+ inclusive = false
+ }
+ }
+
+ assertThat(navController.currentDestination?.route).isEqualTo("third")
+ assertThat(navController.currentBackStack.value.map { it.destination.route })
+ .containsExactly(null, TEST_CLASS_ROUTE, "third").inOrder()
+ }
+
+ @UiThreadTest
+ @Test
+ fun testNavigateWithPopObjectArg() {
+ val navController = createNavController()
+ navController.graph = navController.createGraph(startDestination = TestClassPathArg(0)) {
+ test(TestClassPathArg::class)
+ test("second")
+ }
+
+ assertThat(navController.currentDestination?.route).isEqualTo(TEST_CLASS_PATH_ARG_ROUTE)
+ assertThat(navController.currentBackStack.value.map { it.destination.route })
+ .containsExactly(null, TEST_CLASS_PATH_ARG_ROUTE).inOrder()
+
+ navController.navigate("second") {
+ popUpTo(TestClassPathArg(0)) {
+ inclusive = true
+ }
+ }
+
+ assertThat(navController.currentDestination?.route).isEqualTo("second")
+ assertThat(navController.currentBackStack.value.map { it.destination.route })
+ .containsExactly(null, "second").inOrder()
+ }
+
+ @UiThreadTest
+ @Test
+ fun testNavigateWithPopObjectWrongArg() {
+ val navController = createNavController()
+ navController.graph = navController.createGraph(startDestination = TestClassPathArg(0)) {
+ test(TestClassPathArg::class)
+ test("second")
+ }
+
+ assertThat(navController.currentDestination?.route).isEqualTo(TEST_CLASS_PATH_ARG_ROUTE)
+ assertThat(navController.currentBackStack.value.map { it.destination.route })
+ .containsExactly(null, TEST_CLASS_PATH_ARG_ROUTE).inOrder()
+
+ navController.navigate("second") {
+ popUpTo(TestClassPathArg(1)) {
+ inclusive = true
+ }
+ }
+ assertThat(navController.currentDestination?.route).isEqualTo("second")
+ // should not be popped due to wrong arg
+ assertThat(navController.currentBackStack.value.map { it.destination.route })
+ .containsExactly(null, TEST_CLASS_PATH_ARG_ROUTE, "second").inOrder()
+ }
+
+ @UiThreadTest
+ @Test
fun testDeepLinkFromNavGraph() {
val navController = createNavController()
navController.graph = nav_simple_route_graph
diff --git a/navigation/navigation-runtime/src/main/java/androidx/navigation/NavController.kt b/navigation/navigation-runtime/src/main/java/androidx/navigation/NavController.kt
index 0bc6506..d7e863d 100644
--- a/navigation/navigation-runtime/src/main/java/androidx/navigation/NavController.kt
+++ b/navigation/navigation-runtime/src/main/java/androidx/navigation/NavController.kt
@@ -576,10 +576,10 @@
inclusive: Boolean,
saveState: Boolean = false
): Boolean {
- // route contains arguments so we need to generate and pop with the populated route
- // rather than popping based on route pattern
- val finalRoute = generateRouteFilled(route, fromBackStack = true) ?: return false
- return popBackStack(finalRoute, inclusive, saveState)
+ val popped = popBackStackInternal(route, inclusive, saveState)
+ // Only return true if the pop succeeded and we've dispatched
+ // the change to a new destination
+ return popped && dispatchOnDestinationChanged()
}
/**
@@ -638,6 +638,21 @@
return executePopOperations(popOperations, foundDestination, inclusive, saveState)
}
+ private fun <T : Any> popBackStackInternal(
+ route: T,
+ inclusive: Boolean,
+ saveState: Boolean = false
+ ): Boolean {
+ // route contains arguments so we need to generate and pop with the populated route
+ // rather than popping based on route pattern
+ val finalRoute = generateRouteFilled(route, fromBackStack = true)
+ requireNotNull(finalRoute) {
+ "PopBackStack failed: route $route cannot be found from" +
+ "the current backstack. The current destination is $currentDestination"
+ }
+ return popBackStackInternal(finalRoute, inclusive, saveState)
+ }
+
/**
* Attempts to pop the controller's back stack back to a specific destination. This does
* **not** handle calling [dispatchOnDestinationChanged]
@@ -1746,6 +1761,7 @@
* @throws IllegalArgumentException if the desired destination cannot be found from the
* current destination
*/
+ @OptIn(InternalSerializationApi::class)
@MainThread
public open fun navigate(
@IdRes resId: Int,
@@ -1785,14 +1801,20 @@
}
combinedArgs.putAll(args)
}
+ // just pop and return if destId is invalid
if (destId == 0 && finalNavOptions != null && (finalNavOptions.popUpToId != -1 ||
- finalNavOptions.popUpToRoute != null)
+ finalNavOptions.popUpToRoute != null || finalNavOptions.popUpToRouteClass != null)
) {
when {
finalNavOptions.popUpToRoute != null ->
popBackStack(
finalNavOptions.popUpToRoute!!, finalNavOptions.isPopUpToInclusive()
)
+ finalNavOptions.popUpToRouteClass != null ->
+ popBackStack(
+ finalNavOptions.popUpToRouteClass!!.serializer().hashCode(),
+ finalNavOptions.isPopUpToInclusive()
+ )
finalNavOptions.popUpToId != -1 ->
popBackStack(
finalNavOptions.popUpToId, finalNavOptions.isPopUpToInclusive()
@@ -1946,6 +1968,7 @@
}
}
+ @OptIn(InternalSerializationApi::class)
@MainThread
private fun navigate(
node: NavDestination,
@@ -1967,6 +1990,18 @@
navOptions.isPopUpToInclusive(),
navOptions.shouldPopUpToSaveState()
)
+ navOptions.popUpToRouteClass != null ->
+ popped = popBackStackInternal(
+ navOptions.popUpToRouteClass!!.serializer().hashCode(),
+ navOptions.isPopUpToInclusive(),
+ navOptions.shouldPopUpToSaveState()
+ )
+ navOptions.popUpToRouteObject != null ->
+ popped = popBackStackInternal(
+ navOptions.popUpToRouteObject!!,
+ navOptions.isPopUpToInclusive(),
+ navOptions.shouldPopUpToSaveState()
+ )
navOptions.popUpToId != -1 ->
popped = popBackStackInternal(
navOptions.popUpToId,
diff --git a/privacysandbox/ads/ads-adservices-java/api/1.1.0-beta05.txt b/privacysandbox/ads/ads-adservices-java/api/1.1.0-beta05.txt
new file mode 100644
index 0000000..232abf5
--- /dev/null
+++ b/privacysandbox/ads/ads-adservices-java/api/1.1.0-beta05.txt
@@ -0,0 +1,99 @@
+// Signature format: 4.0
+package androidx.privacysandbox.ads.adservices.java.adid {
+
+ public abstract class AdIdManagerFutures {
+ method public static final androidx.privacysandbox.ads.adservices.java.adid.AdIdManagerFutures? from(android.content.Context context);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_AD_ID) public abstract com.google.common.util.concurrent.ListenableFuture<androidx.privacysandbox.ads.adservices.adid.AdId> getAdIdAsync();
+ field public static final androidx.privacysandbox.ads.adservices.java.adid.AdIdManagerFutures.Companion Companion;
+ }
+
+ public static final class AdIdManagerFutures.Companion {
+ method public androidx.privacysandbox.ads.adservices.java.adid.AdIdManagerFutures? from(android.content.Context context);
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.java.adselection {
+
+ public abstract class AdSelectionManagerFutures {
+ method public static final androidx.privacysandbox.ads.adservices.java.adselection.AdSelectionManagerFutures? from(android.content.Context context);
+ method @SuppressCompatibility @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext10OptIn public abstract com.google.common.util.concurrent.ListenableFuture<androidx.privacysandbox.ads.adservices.adselection.GetAdSelectionDataOutcome> getAdSelectionDataAsync(androidx.privacysandbox.ads.adservices.adselection.GetAdSelectionDataRequest getAdSelectionDataRequest);
+ method @SuppressCompatibility @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext10OptIn public abstract com.google.common.util.concurrent.ListenableFuture<androidx.privacysandbox.ads.adservices.adselection.AdSelectionOutcome> persistAdSelectionResultAsync(androidx.privacysandbox.ads.adservices.adselection.PersistAdSelectionResultRequest persistAdSelectionResultRequest);
+ method @SuppressCompatibility @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext8OptIn public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> reportEventAsync(androidx.privacysandbox.ads.adservices.adselection.ReportEventRequest reportEventRequest);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> reportImpressionAsync(androidx.privacysandbox.ads.adservices.adselection.ReportImpressionRequest reportImpressionRequest);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract com.google.common.util.concurrent.ListenableFuture<androidx.privacysandbox.ads.adservices.adselection.AdSelectionOutcome> selectAdsAsync(androidx.privacysandbox.ads.adservices.adselection.AdSelectionConfig adSelectionConfig);
+ method @SuppressCompatibility @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext10OptIn public abstract com.google.common.util.concurrent.ListenableFuture<androidx.privacysandbox.ads.adservices.adselection.AdSelectionOutcome> selectAdsAsync(androidx.privacysandbox.ads.adservices.adselection.AdSelectionFromOutcomesConfig adSelectionFromOutcomesConfig);
+ method @SuppressCompatibility @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext8OptIn public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> updateAdCounterHistogramAsync(androidx.privacysandbox.ads.adservices.adselection.UpdateAdCounterHistogramRequest updateAdCounterHistogramRequest);
+ field public static final androidx.privacysandbox.ads.adservices.java.adselection.AdSelectionManagerFutures.Companion Companion;
+ }
+
+ public static final class AdSelectionManagerFutures.Companion {
+ method public androidx.privacysandbox.ads.adservices.java.adselection.AdSelectionManagerFutures? from(android.content.Context context);
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.java.appsetid {
+
+ public abstract class AppSetIdManagerFutures {
+ method public static final androidx.privacysandbox.ads.adservices.java.appsetid.AppSetIdManagerFutures? from(android.content.Context context);
+ method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.privacysandbox.ads.adservices.appsetid.AppSetId> getAppSetIdAsync();
+ field public static final androidx.privacysandbox.ads.adservices.java.appsetid.AppSetIdManagerFutures.Companion Companion;
+ }
+
+ public static final class AppSetIdManagerFutures.Companion {
+ method public androidx.privacysandbox.ads.adservices.java.appsetid.AppSetIdManagerFutures? from(android.content.Context context);
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.java.customaudience {
+
+ public abstract class CustomAudienceManagerFutures {
+ method @SuppressCompatibility @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext10OptIn public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> fetchAndJoinCustomAudienceAsync(androidx.privacysandbox.ads.adservices.customaudience.FetchAndJoinCustomAudienceRequest request);
+ method public static final androidx.privacysandbox.ads.adservices.java.customaudience.CustomAudienceManagerFutures? from(android.content.Context context);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> joinCustomAudienceAsync(androidx.privacysandbox.ads.adservices.customaudience.JoinCustomAudienceRequest request);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> leaveCustomAudienceAsync(androidx.privacysandbox.ads.adservices.customaudience.LeaveCustomAudienceRequest request);
+ field public static final androidx.privacysandbox.ads.adservices.java.customaudience.CustomAudienceManagerFutures.Companion Companion;
+ }
+
+ public static final class CustomAudienceManagerFutures.Companion {
+ method public androidx.privacysandbox.ads.adservices.java.customaudience.CustomAudienceManagerFutures? from(android.content.Context context);
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.java.measurement {
+
+ public abstract class MeasurementManagerFutures {
+ method public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> deleteRegistrationsAsync(androidx.privacysandbox.ads.adservices.measurement.DeletionRequest deletionRequest);
+ method public static final androidx.privacysandbox.ads.adservices.java.measurement.MeasurementManagerFutures? from(android.content.Context context);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract com.google.common.util.concurrent.ListenableFuture<java.lang.Integer> getMeasurementApiStatusAsync();
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> registerSourceAsync(android.net.Uri attributionSource, android.view.InputEvent? inputEvent);
+ method @SuppressCompatibility @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.RegisterSourceOptIn public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> registerSourceAsync(androidx.privacysandbox.ads.adservices.measurement.SourceRegistrationRequest request);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> registerTriggerAsync(android.net.Uri trigger);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> registerWebSourceAsync(androidx.privacysandbox.ads.adservices.measurement.WebSourceRegistrationRequest request);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> registerWebTriggerAsync(androidx.privacysandbox.ads.adservices.measurement.WebTriggerRegistrationRequest request);
+ field public static final androidx.privacysandbox.ads.adservices.java.measurement.MeasurementManagerFutures.Companion Companion;
+ }
+
+ public static final class MeasurementManagerFutures.Companion {
+ method public androidx.privacysandbox.ads.adservices.java.measurement.MeasurementManagerFutures? from(android.content.Context context);
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.java.topics {
+
+ public abstract class TopicsManagerFutures {
+ method public static final androidx.privacysandbox.ads.adservices.java.topics.TopicsManagerFutures? from(android.content.Context context);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_TOPICS) public abstract com.google.common.util.concurrent.ListenableFuture<androidx.privacysandbox.ads.adservices.topics.GetTopicsResponse> getTopicsAsync(androidx.privacysandbox.ads.adservices.topics.GetTopicsRequest request);
+ field public static final androidx.privacysandbox.ads.adservices.java.topics.TopicsManagerFutures.Companion Companion;
+ }
+
+ public static final class TopicsManagerFutures.Companion {
+ method public androidx.privacysandbox.ads.adservices.java.topics.TopicsManagerFutures? from(android.content.Context context);
+ }
+
+}
+
diff --git a/privacysandbox/ads/ads-adservices-java/api/res-1.1.0-beta05.txt b/privacysandbox/ads/ads-adservices-java/api/res-1.1.0-beta05.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/privacysandbox/ads/ads-adservices-java/api/res-1.1.0-beta05.txt
diff --git a/privacysandbox/ads/ads-adservices-java/api/restricted_1.1.0-beta05.txt b/privacysandbox/ads/ads-adservices-java/api/restricted_1.1.0-beta05.txt
new file mode 100644
index 0000000..232abf5
--- /dev/null
+++ b/privacysandbox/ads/ads-adservices-java/api/restricted_1.1.0-beta05.txt
@@ -0,0 +1,99 @@
+// Signature format: 4.0
+package androidx.privacysandbox.ads.adservices.java.adid {
+
+ public abstract class AdIdManagerFutures {
+ method public static final androidx.privacysandbox.ads.adservices.java.adid.AdIdManagerFutures? from(android.content.Context context);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_AD_ID) public abstract com.google.common.util.concurrent.ListenableFuture<androidx.privacysandbox.ads.adservices.adid.AdId> getAdIdAsync();
+ field public static final androidx.privacysandbox.ads.adservices.java.adid.AdIdManagerFutures.Companion Companion;
+ }
+
+ public static final class AdIdManagerFutures.Companion {
+ method public androidx.privacysandbox.ads.adservices.java.adid.AdIdManagerFutures? from(android.content.Context context);
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.java.adselection {
+
+ public abstract class AdSelectionManagerFutures {
+ method public static final androidx.privacysandbox.ads.adservices.java.adselection.AdSelectionManagerFutures? from(android.content.Context context);
+ method @SuppressCompatibility @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext10OptIn public abstract com.google.common.util.concurrent.ListenableFuture<androidx.privacysandbox.ads.adservices.adselection.GetAdSelectionDataOutcome> getAdSelectionDataAsync(androidx.privacysandbox.ads.adservices.adselection.GetAdSelectionDataRequest getAdSelectionDataRequest);
+ method @SuppressCompatibility @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext10OptIn public abstract com.google.common.util.concurrent.ListenableFuture<androidx.privacysandbox.ads.adservices.adselection.AdSelectionOutcome> persistAdSelectionResultAsync(androidx.privacysandbox.ads.adservices.adselection.PersistAdSelectionResultRequest persistAdSelectionResultRequest);
+ method @SuppressCompatibility @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext8OptIn public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> reportEventAsync(androidx.privacysandbox.ads.adservices.adselection.ReportEventRequest reportEventRequest);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> reportImpressionAsync(androidx.privacysandbox.ads.adservices.adselection.ReportImpressionRequest reportImpressionRequest);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract com.google.common.util.concurrent.ListenableFuture<androidx.privacysandbox.ads.adservices.adselection.AdSelectionOutcome> selectAdsAsync(androidx.privacysandbox.ads.adservices.adselection.AdSelectionConfig adSelectionConfig);
+ method @SuppressCompatibility @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext10OptIn public abstract com.google.common.util.concurrent.ListenableFuture<androidx.privacysandbox.ads.adservices.adselection.AdSelectionOutcome> selectAdsAsync(androidx.privacysandbox.ads.adservices.adselection.AdSelectionFromOutcomesConfig adSelectionFromOutcomesConfig);
+ method @SuppressCompatibility @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext8OptIn public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> updateAdCounterHistogramAsync(androidx.privacysandbox.ads.adservices.adselection.UpdateAdCounterHistogramRequest updateAdCounterHistogramRequest);
+ field public static final androidx.privacysandbox.ads.adservices.java.adselection.AdSelectionManagerFutures.Companion Companion;
+ }
+
+ public static final class AdSelectionManagerFutures.Companion {
+ method public androidx.privacysandbox.ads.adservices.java.adselection.AdSelectionManagerFutures? from(android.content.Context context);
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.java.appsetid {
+
+ public abstract class AppSetIdManagerFutures {
+ method public static final androidx.privacysandbox.ads.adservices.java.appsetid.AppSetIdManagerFutures? from(android.content.Context context);
+ method public abstract com.google.common.util.concurrent.ListenableFuture<androidx.privacysandbox.ads.adservices.appsetid.AppSetId> getAppSetIdAsync();
+ field public static final androidx.privacysandbox.ads.adservices.java.appsetid.AppSetIdManagerFutures.Companion Companion;
+ }
+
+ public static final class AppSetIdManagerFutures.Companion {
+ method public androidx.privacysandbox.ads.adservices.java.appsetid.AppSetIdManagerFutures? from(android.content.Context context);
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.java.customaudience {
+
+ public abstract class CustomAudienceManagerFutures {
+ method @SuppressCompatibility @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext10OptIn public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> fetchAndJoinCustomAudienceAsync(androidx.privacysandbox.ads.adservices.customaudience.FetchAndJoinCustomAudienceRequest request);
+ method public static final androidx.privacysandbox.ads.adservices.java.customaudience.CustomAudienceManagerFutures? from(android.content.Context context);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> joinCustomAudienceAsync(androidx.privacysandbox.ads.adservices.customaudience.JoinCustomAudienceRequest request);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> leaveCustomAudienceAsync(androidx.privacysandbox.ads.adservices.customaudience.LeaveCustomAudienceRequest request);
+ field public static final androidx.privacysandbox.ads.adservices.java.customaudience.CustomAudienceManagerFutures.Companion Companion;
+ }
+
+ public static final class CustomAudienceManagerFutures.Companion {
+ method public androidx.privacysandbox.ads.adservices.java.customaudience.CustomAudienceManagerFutures? from(android.content.Context context);
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.java.measurement {
+
+ public abstract class MeasurementManagerFutures {
+ method public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> deleteRegistrationsAsync(androidx.privacysandbox.ads.adservices.measurement.DeletionRequest deletionRequest);
+ method public static final androidx.privacysandbox.ads.adservices.java.measurement.MeasurementManagerFutures? from(android.content.Context context);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract com.google.common.util.concurrent.ListenableFuture<java.lang.Integer> getMeasurementApiStatusAsync();
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> registerSourceAsync(android.net.Uri attributionSource, android.view.InputEvent? inputEvent);
+ method @SuppressCompatibility @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.RegisterSourceOptIn public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> registerSourceAsync(androidx.privacysandbox.ads.adservices.measurement.SourceRegistrationRequest request);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> registerTriggerAsync(android.net.Uri trigger);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> registerWebSourceAsync(androidx.privacysandbox.ads.adservices.measurement.WebSourceRegistrationRequest request);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract com.google.common.util.concurrent.ListenableFuture<kotlin.Unit> registerWebTriggerAsync(androidx.privacysandbox.ads.adservices.measurement.WebTriggerRegistrationRequest request);
+ field public static final androidx.privacysandbox.ads.adservices.java.measurement.MeasurementManagerFutures.Companion Companion;
+ }
+
+ public static final class MeasurementManagerFutures.Companion {
+ method public androidx.privacysandbox.ads.adservices.java.measurement.MeasurementManagerFutures? from(android.content.Context context);
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.java.topics {
+
+ public abstract class TopicsManagerFutures {
+ method public static final androidx.privacysandbox.ads.adservices.java.topics.TopicsManagerFutures? from(android.content.Context context);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_TOPICS) public abstract com.google.common.util.concurrent.ListenableFuture<androidx.privacysandbox.ads.adservices.topics.GetTopicsResponse> getTopicsAsync(androidx.privacysandbox.ads.adservices.topics.GetTopicsRequest request);
+ field public static final androidx.privacysandbox.ads.adservices.java.topics.TopicsManagerFutures.Companion Companion;
+ }
+
+ public static final class TopicsManagerFutures.Companion {
+ method public androidx.privacysandbox.ads.adservices.java.topics.TopicsManagerFutures? from(android.content.Context context);
+ }
+
+}
+
diff --git a/privacysandbox/ads/ads-adservices/api/1.1.0-beta05.txt b/privacysandbox/ads/ads-adservices/api/1.1.0-beta05.txt
new file mode 100644
index 0000000..32149c9
--- /dev/null
+++ b/privacysandbox/ads/ads-adservices/api/1.1.0-beta05.txt
@@ -0,0 +1,514 @@
+// Signature format: 4.0
+package androidx.privacysandbox.ads.adservices.adid {
+
+ public final class AdId {
+ method public String getAdId();
+ method public boolean isLimitAdTrackingEnabled();
+ property public final String adId;
+ property public final boolean isLimitAdTrackingEnabled;
+ }
+
+ public abstract class AdIdManager {
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_AD_ID) public abstract suspend Object? getAdId(kotlin.coroutines.Continuation<? super androidx.privacysandbox.ads.adservices.adid.AdId>);
+ method public static final androidx.privacysandbox.ads.adservices.adid.AdIdManager? obtain(android.content.Context context);
+ field public static final androidx.privacysandbox.ads.adservices.adid.AdIdManager.Companion Companion;
+ }
+
+ public static final class AdIdManager.Companion {
+ method public androidx.privacysandbox.ads.adservices.adid.AdIdManager? obtain(android.content.Context context);
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.adselection {
+
+ public final class AdSelectionConfig {
+ ctor public AdSelectionConfig(androidx.privacysandbox.ads.adservices.common.AdTechIdentifier seller, android.net.Uri decisionLogicUri, java.util.List<androidx.privacysandbox.ads.adservices.common.AdTechIdentifier> customAudienceBuyers, androidx.privacysandbox.ads.adservices.common.AdSelectionSignals adSelectionSignals, androidx.privacysandbox.ads.adservices.common.AdSelectionSignals sellerSignals, java.util.Map<androidx.privacysandbox.ads.adservices.common.AdTechIdentifier,androidx.privacysandbox.ads.adservices.common.AdSelectionSignals> perBuyerSignals, android.net.Uri trustedScoringSignalsUri);
+ method public androidx.privacysandbox.ads.adservices.common.AdSelectionSignals getAdSelectionSignals();
+ method public java.util.List<androidx.privacysandbox.ads.adservices.common.AdTechIdentifier> getCustomAudienceBuyers();
+ method public android.net.Uri getDecisionLogicUri();
+ method public java.util.Map<androidx.privacysandbox.ads.adservices.common.AdTechIdentifier,androidx.privacysandbox.ads.adservices.common.AdSelectionSignals> getPerBuyerSignals();
+ method public androidx.privacysandbox.ads.adservices.common.AdTechIdentifier getSeller();
+ method public androidx.privacysandbox.ads.adservices.common.AdSelectionSignals getSellerSignals();
+ method public android.net.Uri getTrustedScoringSignalsUri();
+ property public final androidx.privacysandbox.ads.adservices.common.AdSelectionSignals adSelectionSignals;
+ property public final java.util.List<androidx.privacysandbox.ads.adservices.common.AdTechIdentifier> customAudienceBuyers;
+ property public final android.net.Uri decisionLogicUri;
+ property public final java.util.Map<androidx.privacysandbox.ads.adservices.common.AdTechIdentifier,androidx.privacysandbox.ads.adservices.common.AdSelectionSignals> perBuyerSignals;
+ property public final androidx.privacysandbox.ads.adservices.common.AdTechIdentifier seller;
+ property public final androidx.privacysandbox.ads.adservices.common.AdSelectionSignals sellerSignals;
+ property public final android.net.Uri trustedScoringSignalsUri;
+ }
+
+ @SuppressCompatibility @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext10OptIn public final class AdSelectionFromOutcomesConfig {
+ ctor public AdSelectionFromOutcomesConfig(androidx.privacysandbox.ads.adservices.common.AdTechIdentifier seller, java.util.List<java.lang.Long> adSelectionIds, androidx.privacysandbox.ads.adservices.common.AdSelectionSignals adSelectionSignals, android.net.Uri selectionLogicUri);
+ method public java.util.List<java.lang.Long> getAdSelectionIds();
+ method public androidx.privacysandbox.ads.adservices.common.AdSelectionSignals getAdSelectionSignals();
+ method public android.net.Uri getSelectionLogicUri();
+ method public androidx.privacysandbox.ads.adservices.common.AdTechIdentifier getSeller();
+ method public void setSelectionLogicUri(android.net.Uri);
+ property public final java.util.List<java.lang.Long> adSelectionIds;
+ property public final androidx.privacysandbox.ads.adservices.common.AdSelectionSignals adSelectionSignals;
+ property public final android.net.Uri selectionLogicUri;
+ property public final androidx.privacysandbox.ads.adservices.common.AdTechIdentifier seller;
+ }
+
+ public abstract class AdSelectionManager {
+ method @SuppressCompatibility @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext10OptIn public abstract suspend Object? getAdSelectionData(androidx.privacysandbox.ads.adservices.adselection.GetAdSelectionDataRequest getAdSelectionDataRequest, kotlin.coroutines.Continuation<? super androidx.privacysandbox.ads.adservices.adselection.GetAdSelectionDataOutcome>);
+ method public static final androidx.privacysandbox.ads.adservices.adselection.AdSelectionManager? obtain(android.content.Context context);
+ method @SuppressCompatibility @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext10OptIn public abstract suspend Object? persistAdSelectionResult(androidx.privacysandbox.ads.adservices.adselection.PersistAdSelectionResultRequest persistAdSelectionResultRequest, kotlin.coroutines.Continuation<? super androidx.privacysandbox.ads.adservices.adselection.AdSelectionOutcome>);
+ method @SuppressCompatibility @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext8OptIn public abstract suspend Object? reportEvent(androidx.privacysandbox.ads.adservices.adselection.ReportEventRequest reportEventRequest, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract suspend Object? reportImpression(androidx.privacysandbox.ads.adservices.adselection.ReportImpressionRequest reportImpressionRequest, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract suspend Object? selectAds(androidx.privacysandbox.ads.adservices.adselection.AdSelectionConfig adSelectionConfig, kotlin.coroutines.Continuation<? super androidx.privacysandbox.ads.adservices.adselection.AdSelectionOutcome>);
+ method @SuppressCompatibility @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext10OptIn public abstract suspend Object? selectAds(androidx.privacysandbox.ads.adservices.adselection.AdSelectionFromOutcomesConfig adSelectionFromOutcomesConfig, kotlin.coroutines.Continuation<? super androidx.privacysandbox.ads.adservices.adselection.AdSelectionOutcome>);
+ method @SuppressCompatibility @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext8OptIn public abstract suspend Object? updateAdCounterHistogram(androidx.privacysandbox.ads.adservices.adselection.UpdateAdCounterHistogramRequest updateAdCounterHistogramRequest, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ field public static final androidx.privacysandbox.ads.adservices.adselection.AdSelectionManager.Companion Companion;
+ }
+
+ public static final class AdSelectionManager.Companion {
+ method public androidx.privacysandbox.ads.adservices.adselection.AdSelectionManager? obtain(android.content.Context context);
+ }
+
+ public final class AdSelectionOutcome {
+ ctor public AdSelectionOutcome(long adSelectionId, android.net.Uri renderUri);
+ method public long getAdSelectionId();
+ method public android.net.Uri getRenderUri();
+ method @SuppressCompatibility @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext10OptIn public boolean hasOutcome();
+ property public final long adSelectionId;
+ property public final android.net.Uri renderUri;
+ field public static final androidx.privacysandbox.ads.adservices.adselection.AdSelectionOutcome.Companion Companion;
+ field @SuppressCompatibility @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext10OptIn public static final androidx.privacysandbox.ads.adservices.adselection.AdSelectionOutcome NO_OUTCOME;
+ }
+
+ @SuppressCompatibility @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext10OptIn public static final class AdSelectionOutcome.Companion {
+ }
+
+ @SuppressCompatibility @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext10OptIn public final class GetAdSelectionDataOutcome {
+ ctor public GetAdSelectionDataOutcome(long adSelectionId, optional byte[]? adSelectionData);
+ method public byte[]? getAdSelectionData();
+ method public long getAdSelectionId();
+ property public final byte[]? adSelectionData;
+ property public final long adSelectionId;
+ }
+
+ @SuppressCompatibility @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext10OptIn public final class GetAdSelectionDataRequest {
+ ctor public GetAdSelectionDataRequest(optional androidx.privacysandbox.ads.adservices.common.AdTechIdentifier? seller);
+ method public androidx.privacysandbox.ads.adservices.common.AdTechIdentifier? getSeller();
+ property public final androidx.privacysandbox.ads.adservices.common.AdTechIdentifier? seller;
+ }
+
+ @SuppressCompatibility @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext10OptIn public final class PersistAdSelectionResultRequest {
+ ctor public PersistAdSelectionResultRequest(long adSelectionId, optional androidx.privacysandbox.ads.adservices.common.AdTechIdentifier? seller, optional byte[]? adSelectionResult);
+ method public long getAdSelectionId();
+ method public byte[]? getAdSelectionResult();
+ method public androidx.privacysandbox.ads.adservices.common.AdTechIdentifier? getSeller();
+ property public final long adSelectionId;
+ property public final byte[]? adSelectionResult;
+ property public final androidx.privacysandbox.ads.adservices.common.AdTechIdentifier? seller;
+ }
+
+ @SuppressCompatibility @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext8OptIn public final class ReportEventRequest {
+ ctor public ReportEventRequest(long adSelectionId, String eventKey, String eventData, int reportingDestinations, optional android.view.InputEvent? inputEvent);
+ method public long getAdSelectionId();
+ method public String getEventData();
+ method public String getEventKey();
+ method public android.view.InputEvent? getInputEvent();
+ method public int getReportingDestinations();
+ property public final long adSelectionId;
+ property public final String eventData;
+ property public final String eventKey;
+ property public final android.view.InputEvent? inputEvent;
+ property public final int reportingDestinations;
+ field public static final androidx.privacysandbox.ads.adservices.adselection.ReportEventRequest.Companion Companion;
+ field public static final int FLAG_REPORTING_DESTINATION_BUYER = 2; // 0x2
+ field public static final int FLAG_REPORTING_DESTINATION_SELLER = 1; // 0x1
+ }
+
+ public static final class ReportEventRequest.Companion {
+ }
+
+ public final class ReportImpressionRequest {
+ ctor @SuppressCompatibility @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext8OptIn public ReportImpressionRequest(long adSelectionId);
+ ctor public ReportImpressionRequest(long adSelectionId, androidx.privacysandbox.ads.adservices.adselection.AdSelectionConfig adSelectionConfig);
+ method public androidx.privacysandbox.ads.adservices.adselection.AdSelectionConfig getAdSelectionConfig();
+ method public long getAdSelectionId();
+ property public final androidx.privacysandbox.ads.adservices.adselection.AdSelectionConfig adSelectionConfig;
+ property public final long adSelectionId;
+ }
+
+ @SuppressCompatibility @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext8OptIn public final class UpdateAdCounterHistogramRequest {
+ ctor public UpdateAdCounterHistogramRequest(long adSelectionId, int adEventType, androidx.privacysandbox.ads.adservices.common.AdTechIdentifier callerAdTech);
+ method public int getAdEventType();
+ method public long getAdSelectionId();
+ method public androidx.privacysandbox.ads.adservices.common.AdTechIdentifier getCallerAdTech();
+ property public final int adEventType;
+ property public final long adSelectionId;
+ property public final androidx.privacysandbox.ads.adservices.common.AdTechIdentifier callerAdTech;
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.appsetid {
+
+ public final class AppSetId {
+ ctor public AppSetId(String id, int scope);
+ method public String getId();
+ method public int getScope();
+ property public final String id;
+ property public final int scope;
+ field public static final androidx.privacysandbox.ads.adservices.appsetid.AppSetId.Companion Companion;
+ field public static final int SCOPE_APP = 1; // 0x1
+ field public static final int SCOPE_DEVELOPER = 2; // 0x2
+ }
+
+ public static final class AppSetId.Companion {
+ }
+
+ public abstract class AppSetIdManager {
+ method public abstract suspend Object? getAppSetId(kotlin.coroutines.Continuation<? super androidx.privacysandbox.ads.adservices.appsetid.AppSetId>);
+ method public static final androidx.privacysandbox.ads.adservices.appsetid.AppSetIdManager? obtain(android.content.Context context);
+ field public static final androidx.privacysandbox.ads.adservices.appsetid.AppSetIdManager.Companion Companion;
+ }
+
+ public static final class AppSetIdManager.Companion {
+ method public androidx.privacysandbox.ads.adservices.appsetid.AppSetIdManager? obtain(android.content.Context context);
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.common {
+
+ public final class AdData {
+ ctor public AdData(android.net.Uri renderUri, String metadata);
+ ctor @SuppressCompatibility @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext8OptIn public AdData(android.net.Uri renderUri, String metadata, optional java.util.Set<java.lang.Integer> adCounterKeys, optional androidx.privacysandbox.ads.adservices.common.AdFilters? adFilters);
+ ctor @SuppressCompatibility @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext10OptIn public AdData(android.net.Uri renderUri, String metadata, optional java.util.Set<java.lang.Integer> adCounterKeys, optional androidx.privacysandbox.ads.adservices.common.AdFilters? adFilters, optional String? adRenderId);
+ method public java.util.Set<java.lang.Integer> getAdCounterKeys();
+ method public androidx.privacysandbox.ads.adservices.common.AdFilters? getAdFilters();
+ method public String? getAdRenderId();
+ method public String getMetadata();
+ method public android.net.Uri getRenderUri();
+ property public final java.util.Set<java.lang.Integer> adCounterKeys;
+ property public final androidx.privacysandbox.ads.adservices.common.AdFilters? adFilters;
+ property public final String? adRenderId;
+ property public final String metadata;
+ property public final android.net.Uri renderUri;
+ }
+
+ @SuppressCompatibility @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext8OptIn public final class AdFilters {
+ ctor public AdFilters(androidx.privacysandbox.ads.adservices.common.FrequencyCapFilters? frequencyCapFilters);
+ method public androidx.privacysandbox.ads.adservices.common.FrequencyCapFilters? getFrequencyCapFilters();
+ property public final androidx.privacysandbox.ads.adservices.common.FrequencyCapFilters? frequencyCapFilters;
+ }
+
+ public final class AdSelectionSignals {
+ ctor public AdSelectionSignals(String signals);
+ method public String getSignals();
+ property public final String signals;
+ }
+
+ public final class AdTechIdentifier {
+ ctor public AdTechIdentifier(String identifier);
+ method public String getIdentifier();
+ property public final String identifier;
+ }
+
+ public sealed interface ExperimentalFeatures {
+ }
+
+ @SuppressCompatibility @kotlin.RequiresOptIn(message="The Ext10 API is experimental.", level=kotlin.RequiresOptIn.Level.WARNING) public static @interface ExperimentalFeatures.Ext10OptIn {
+ }
+
+ @SuppressCompatibility @kotlin.RequiresOptIn(message="The Ext8 API is experimental.", level=kotlin.RequiresOptIn.Level.WARNING) public static @interface ExperimentalFeatures.Ext8OptIn {
+ }
+
+ @SuppressCompatibility @kotlin.RequiresOptIn(message="This API is experimental.", level=kotlin.RequiresOptIn.Level.WARNING) public static @interface ExperimentalFeatures.RegisterSourceOptIn {
+ }
+
+ @SuppressCompatibility @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext8OptIn public final class FrequencyCapFilters {
+ ctor public FrequencyCapFilters();
+ ctor public FrequencyCapFilters(optional java.util.List<androidx.privacysandbox.ads.adservices.common.KeyedFrequencyCap> keyedFrequencyCapsForWinEvents);
+ ctor public FrequencyCapFilters(optional java.util.List<androidx.privacysandbox.ads.adservices.common.KeyedFrequencyCap> keyedFrequencyCapsForWinEvents, optional java.util.List<androidx.privacysandbox.ads.adservices.common.KeyedFrequencyCap> keyedFrequencyCapsForImpressionEvents);
+ ctor public FrequencyCapFilters(optional java.util.List<androidx.privacysandbox.ads.adservices.common.KeyedFrequencyCap> keyedFrequencyCapsForWinEvents, optional java.util.List<androidx.privacysandbox.ads.adservices.common.KeyedFrequencyCap> keyedFrequencyCapsForImpressionEvents, optional java.util.List<androidx.privacysandbox.ads.adservices.common.KeyedFrequencyCap> keyedFrequencyCapsForViewEvents);
+ ctor public FrequencyCapFilters(optional java.util.List<androidx.privacysandbox.ads.adservices.common.KeyedFrequencyCap> keyedFrequencyCapsForWinEvents, optional java.util.List<androidx.privacysandbox.ads.adservices.common.KeyedFrequencyCap> keyedFrequencyCapsForImpressionEvents, optional java.util.List<androidx.privacysandbox.ads.adservices.common.KeyedFrequencyCap> keyedFrequencyCapsForViewEvents, optional java.util.List<androidx.privacysandbox.ads.adservices.common.KeyedFrequencyCap> keyedFrequencyCapsForClickEvents);
+ method public java.util.List<androidx.privacysandbox.ads.adservices.common.KeyedFrequencyCap> getKeyedFrequencyCapsForClickEvents();
+ method public java.util.List<androidx.privacysandbox.ads.adservices.common.KeyedFrequencyCap> getKeyedFrequencyCapsForImpressionEvents();
+ method public java.util.List<androidx.privacysandbox.ads.adservices.common.KeyedFrequencyCap> getKeyedFrequencyCapsForViewEvents();
+ method public java.util.List<androidx.privacysandbox.ads.adservices.common.KeyedFrequencyCap> getKeyedFrequencyCapsForWinEvents();
+ property public final java.util.List<androidx.privacysandbox.ads.adservices.common.KeyedFrequencyCap> keyedFrequencyCapsForClickEvents;
+ property public final java.util.List<androidx.privacysandbox.ads.adservices.common.KeyedFrequencyCap> keyedFrequencyCapsForImpressionEvents;
+ property public final java.util.List<androidx.privacysandbox.ads.adservices.common.KeyedFrequencyCap> keyedFrequencyCapsForViewEvents;
+ property public final java.util.List<androidx.privacysandbox.ads.adservices.common.KeyedFrequencyCap> keyedFrequencyCapsForWinEvents;
+ field public static final int AD_EVENT_TYPE_CLICK = 3; // 0x3
+ field public static final int AD_EVENT_TYPE_IMPRESSION = 1; // 0x1
+ field public static final int AD_EVENT_TYPE_VIEW = 2; // 0x2
+ field public static final int AD_EVENT_TYPE_WIN = 0; // 0x0
+ field public static final androidx.privacysandbox.ads.adservices.common.FrequencyCapFilters.Companion Companion;
+ }
+
+ public static final class FrequencyCapFilters.Companion {
+ }
+
+ @SuppressCompatibility @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext8OptIn public final class KeyedFrequencyCap {
+ ctor public KeyedFrequencyCap(int adCounterKey, int maxCount, java.time.Duration interval);
+ method public int getAdCounterKey();
+ method public java.time.Duration getInterval();
+ method public int getMaxCount();
+ property public final int adCounterKey;
+ property public final java.time.Duration interval;
+ property public final int maxCount;
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.customaudience {
+
+ public final class CustomAudience {
+ ctor public CustomAudience(androidx.privacysandbox.ads.adservices.common.AdTechIdentifier buyer, String name, android.net.Uri dailyUpdateUri, android.net.Uri biddingLogicUri, java.util.List<androidx.privacysandbox.ads.adservices.common.AdData> ads, optional java.time.Instant? activationTime, optional java.time.Instant? expirationTime, optional androidx.privacysandbox.ads.adservices.common.AdSelectionSignals? userBiddingSignals, optional androidx.privacysandbox.ads.adservices.customaudience.TrustedBiddingData? trustedBiddingSignals);
+ method public java.time.Instant? getActivationTime();
+ method public java.util.List<androidx.privacysandbox.ads.adservices.common.AdData> getAds();
+ method public android.net.Uri getBiddingLogicUri();
+ method public androidx.privacysandbox.ads.adservices.common.AdTechIdentifier getBuyer();
+ method public android.net.Uri getDailyUpdateUri();
+ method public java.time.Instant? getExpirationTime();
+ method public String getName();
+ method public androidx.privacysandbox.ads.adservices.customaudience.TrustedBiddingData? getTrustedBiddingSignals();
+ method public androidx.privacysandbox.ads.adservices.common.AdSelectionSignals? getUserBiddingSignals();
+ property public final java.time.Instant? activationTime;
+ property public final java.util.List<androidx.privacysandbox.ads.adservices.common.AdData> ads;
+ property public final android.net.Uri biddingLogicUri;
+ property public final androidx.privacysandbox.ads.adservices.common.AdTechIdentifier buyer;
+ property public final android.net.Uri dailyUpdateUri;
+ property public final java.time.Instant? expirationTime;
+ property public final String name;
+ property public final androidx.privacysandbox.ads.adservices.customaudience.TrustedBiddingData? trustedBiddingSignals;
+ property public final androidx.privacysandbox.ads.adservices.common.AdSelectionSignals? userBiddingSignals;
+ }
+
+ public static final class CustomAudience.Builder {
+ ctor public CustomAudience.Builder(androidx.privacysandbox.ads.adservices.common.AdTechIdentifier buyer, String name, android.net.Uri dailyUpdateUri, android.net.Uri biddingLogicUri, java.util.List<androidx.privacysandbox.ads.adservices.common.AdData> ads);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience build();
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setActivationTime(java.time.Instant activationTime);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setAds(java.util.List<androidx.privacysandbox.ads.adservices.common.AdData> ads);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setBiddingLogicUri(android.net.Uri biddingLogicUri);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setBuyer(androidx.privacysandbox.ads.adservices.common.AdTechIdentifier buyer);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setDailyUpdateUri(android.net.Uri dailyUpdateUri);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setExpirationTime(java.time.Instant expirationTime);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setName(String name);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setTrustedBiddingData(androidx.privacysandbox.ads.adservices.customaudience.TrustedBiddingData trustedBiddingSignals);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setUserBiddingSignals(androidx.privacysandbox.ads.adservices.common.AdSelectionSignals userBiddingSignals);
+ }
+
+ public abstract class CustomAudienceManager {
+ method @SuppressCompatibility @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext10OptIn public abstract suspend Object? fetchAndJoinCustomAudience(androidx.privacysandbox.ads.adservices.customaudience.FetchAndJoinCustomAudienceRequest request, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract suspend Object? joinCustomAudience(androidx.privacysandbox.ads.adservices.customaudience.JoinCustomAudienceRequest request, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract suspend Object? leaveCustomAudience(androidx.privacysandbox.ads.adservices.customaudience.LeaveCustomAudienceRequest request, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static final androidx.privacysandbox.ads.adservices.customaudience.CustomAudienceManager? obtain(android.content.Context context);
+ field public static final androidx.privacysandbox.ads.adservices.customaudience.CustomAudienceManager.Companion Companion;
+ }
+
+ public static final class CustomAudienceManager.Companion {
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudienceManager? obtain(android.content.Context context);
+ }
+
+ @SuppressCompatibility @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext10OptIn public final class FetchAndJoinCustomAudienceRequest {
+ ctor public FetchAndJoinCustomAudienceRequest(android.net.Uri fetchUri, optional String? name, optional java.time.Instant? activationTime, optional java.time.Instant? expirationTime, optional androidx.privacysandbox.ads.adservices.common.AdSelectionSignals? userBiddingSignals);
+ method public java.time.Instant? getActivationTime();
+ method public java.time.Instant? getExpirationTime();
+ method public android.net.Uri getFetchUri();
+ method public String? getName();
+ method public androidx.privacysandbox.ads.adservices.common.AdSelectionSignals? getUserBiddingSignals();
+ property public final java.time.Instant? activationTime;
+ property public final java.time.Instant? expirationTime;
+ property public final android.net.Uri fetchUri;
+ property public final String? name;
+ property public final androidx.privacysandbox.ads.adservices.common.AdSelectionSignals? userBiddingSignals;
+ }
+
+ public final class JoinCustomAudienceRequest {
+ ctor public JoinCustomAudienceRequest(androidx.privacysandbox.ads.adservices.customaudience.CustomAudience customAudience);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience getCustomAudience();
+ property public final androidx.privacysandbox.ads.adservices.customaudience.CustomAudience customAudience;
+ }
+
+ public final class LeaveCustomAudienceRequest {
+ ctor public LeaveCustomAudienceRequest(androidx.privacysandbox.ads.adservices.common.AdTechIdentifier buyer, String name);
+ method public androidx.privacysandbox.ads.adservices.common.AdTechIdentifier getBuyer();
+ method public String getName();
+ property public final androidx.privacysandbox.ads.adservices.common.AdTechIdentifier buyer;
+ property public final String name;
+ }
+
+ public final class TrustedBiddingData {
+ ctor public TrustedBiddingData(android.net.Uri trustedBiddingUri, java.util.List<java.lang.String> trustedBiddingKeys);
+ method public java.util.List<java.lang.String> getTrustedBiddingKeys();
+ method public android.net.Uri getTrustedBiddingUri();
+ property public final java.util.List<java.lang.String> trustedBiddingKeys;
+ property public final android.net.Uri trustedBiddingUri;
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.measurement {
+
+ @RequiresApi(android.os.Build.VERSION_CODES.O) public final class DeletionRequest {
+ ctor public DeletionRequest(int deletionMode, int matchBehavior, optional java.time.Instant start, optional java.time.Instant end, optional java.util.List<? extends android.net.Uri> domainUris, optional java.util.List<? extends android.net.Uri> originUris);
+ method public int getDeletionMode();
+ method public java.util.List<android.net.Uri> getDomainUris();
+ method public java.time.Instant getEnd();
+ method public int getMatchBehavior();
+ method public java.util.List<android.net.Uri> getOriginUris();
+ method public java.time.Instant getStart();
+ property public final int deletionMode;
+ property public final java.util.List<android.net.Uri> domainUris;
+ property public final java.time.Instant end;
+ property public final int matchBehavior;
+ property public final java.util.List<android.net.Uri> originUris;
+ property public final java.time.Instant start;
+ field public static final androidx.privacysandbox.ads.adservices.measurement.DeletionRequest.Companion Companion;
+ field public static final int DELETION_MODE_ALL = 0; // 0x0
+ field public static final int DELETION_MODE_EXCLUDE_INTERNAL_DATA = 1; // 0x1
+ field public static final int MATCH_BEHAVIOR_DELETE = 0; // 0x0
+ field public static final int MATCH_BEHAVIOR_PRESERVE = 1; // 0x1
+ }
+
+ @RequiresApi(android.os.Build.VERSION_CODES.O) public static final class DeletionRequest.Builder {
+ ctor public DeletionRequest.Builder(int deletionMode, int matchBehavior);
+ method public androidx.privacysandbox.ads.adservices.measurement.DeletionRequest build();
+ method public androidx.privacysandbox.ads.adservices.measurement.DeletionRequest.Builder setDomainUris(java.util.List<? extends android.net.Uri> domainUris);
+ method public androidx.privacysandbox.ads.adservices.measurement.DeletionRequest.Builder setEnd(java.time.Instant end);
+ method public androidx.privacysandbox.ads.adservices.measurement.DeletionRequest.Builder setOriginUris(java.util.List<? extends android.net.Uri> originUris);
+ method public androidx.privacysandbox.ads.adservices.measurement.DeletionRequest.Builder setStart(java.time.Instant start);
+ }
+
+ public static final class DeletionRequest.Companion {
+ }
+
+ public abstract class MeasurementManager {
+ ctor public MeasurementManager();
+ method public abstract suspend Object? deleteRegistrations(androidx.privacysandbox.ads.adservices.measurement.DeletionRequest deletionRequest, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract suspend Object? getMeasurementApiStatus(kotlin.coroutines.Continuation<? super java.lang.Integer>);
+ method public static final androidx.privacysandbox.ads.adservices.measurement.MeasurementManager? obtain(android.content.Context context);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract suspend Object? registerSource(android.net.Uri attributionSource, android.view.InputEvent? inputEvent, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @SuppressCompatibility @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.RegisterSourceOptIn public abstract suspend Object? registerSource(androidx.privacysandbox.ads.adservices.measurement.SourceRegistrationRequest request, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract suspend Object? registerTrigger(android.net.Uri trigger, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract suspend Object? registerWebSource(androidx.privacysandbox.ads.adservices.measurement.WebSourceRegistrationRequest request, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract suspend Object? registerWebTrigger(androidx.privacysandbox.ads.adservices.measurement.WebTriggerRegistrationRequest request, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ field public static final androidx.privacysandbox.ads.adservices.measurement.MeasurementManager.Companion Companion;
+ field public static final int MEASUREMENT_API_STATE_DISABLED = 0; // 0x0
+ field public static final int MEASUREMENT_API_STATE_ENABLED = 1; // 0x1
+ }
+
+ public static final class MeasurementManager.Companion {
+ method public androidx.privacysandbox.ads.adservices.measurement.MeasurementManager? obtain(android.content.Context context);
+ }
+
+ @SuppressCompatibility @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.RegisterSourceOptIn public final class SourceRegistrationRequest {
+ ctor public SourceRegistrationRequest(java.util.List<? extends android.net.Uri> registrationUris, optional android.view.InputEvent? inputEvent);
+ method public android.view.InputEvent? getInputEvent();
+ method public java.util.List<android.net.Uri> getRegistrationUris();
+ property public final android.view.InputEvent? inputEvent;
+ property public final java.util.List<android.net.Uri> registrationUris;
+ }
+
+ public static final class SourceRegistrationRequest.Builder {
+ ctor public SourceRegistrationRequest.Builder(java.util.List<? extends android.net.Uri> registrationUris);
+ method public androidx.privacysandbox.ads.adservices.measurement.SourceRegistrationRequest build();
+ method public androidx.privacysandbox.ads.adservices.measurement.SourceRegistrationRequest.Builder setInputEvent(android.view.InputEvent inputEvent);
+ }
+
+ public final class WebSourceParams {
+ ctor public WebSourceParams(android.net.Uri registrationUri, boolean debugKeyAllowed);
+ method public boolean getDebugKeyAllowed();
+ method public android.net.Uri getRegistrationUri();
+ property public final boolean debugKeyAllowed;
+ property public final android.net.Uri registrationUri;
+ }
+
+ public final class WebSourceRegistrationRequest {
+ ctor public WebSourceRegistrationRequest(java.util.List<androidx.privacysandbox.ads.adservices.measurement.WebSourceParams> webSourceParams, android.net.Uri topOriginUri, optional android.view.InputEvent? inputEvent, optional android.net.Uri? appDestination, optional android.net.Uri? webDestination, optional android.net.Uri? verifiedDestination);
+ method public android.net.Uri? getAppDestination();
+ method public android.view.InputEvent? getInputEvent();
+ method public android.net.Uri getTopOriginUri();
+ method public android.net.Uri? getVerifiedDestination();
+ method public android.net.Uri? getWebDestination();
+ method public java.util.List<androidx.privacysandbox.ads.adservices.measurement.WebSourceParams> getWebSourceParams();
+ property public final android.net.Uri? appDestination;
+ property public final android.view.InputEvent? inputEvent;
+ property public final android.net.Uri topOriginUri;
+ property public final android.net.Uri? verifiedDestination;
+ property public final android.net.Uri? webDestination;
+ property public final java.util.List<androidx.privacysandbox.ads.adservices.measurement.WebSourceParams> webSourceParams;
+ }
+
+ public static final class WebSourceRegistrationRequest.Builder {
+ ctor public WebSourceRegistrationRequest.Builder(java.util.List<androidx.privacysandbox.ads.adservices.measurement.WebSourceParams> webSourceParams, android.net.Uri topOriginUri);
+ method public androidx.privacysandbox.ads.adservices.measurement.WebSourceRegistrationRequest build();
+ method public androidx.privacysandbox.ads.adservices.measurement.WebSourceRegistrationRequest.Builder setAppDestination(android.net.Uri? appDestination);
+ method public androidx.privacysandbox.ads.adservices.measurement.WebSourceRegistrationRequest.Builder setInputEvent(android.view.InputEvent inputEvent);
+ method public androidx.privacysandbox.ads.adservices.measurement.WebSourceRegistrationRequest.Builder setVerifiedDestination(android.net.Uri? verifiedDestination);
+ method public androidx.privacysandbox.ads.adservices.measurement.WebSourceRegistrationRequest.Builder setWebDestination(android.net.Uri? webDestination);
+ }
+
+ public final class WebTriggerParams {
+ ctor public WebTriggerParams(android.net.Uri registrationUri, boolean debugKeyAllowed);
+ method public boolean getDebugKeyAllowed();
+ method public android.net.Uri getRegistrationUri();
+ property public final boolean debugKeyAllowed;
+ property public final android.net.Uri registrationUri;
+ }
+
+ public final class WebTriggerRegistrationRequest {
+ ctor public WebTriggerRegistrationRequest(java.util.List<androidx.privacysandbox.ads.adservices.measurement.WebTriggerParams> webTriggerParams, android.net.Uri destination);
+ method public android.net.Uri getDestination();
+ method public java.util.List<androidx.privacysandbox.ads.adservices.measurement.WebTriggerParams> getWebTriggerParams();
+ property public final android.net.Uri destination;
+ property public final java.util.List<androidx.privacysandbox.ads.adservices.measurement.WebTriggerParams> webTriggerParams;
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.topics {
+
+ public final class GetTopicsRequest {
+ ctor public GetTopicsRequest(optional String adsSdkName, optional boolean shouldRecordObservation);
+ method public String getAdsSdkName();
+ method public boolean shouldRecordObservation();
+ property public final String adsSdkName;
+ property public final boolean shouldRecordObservation;
+ }
+
+ public static final class GetTopicsRequest.Builder {
+ ctor public GetTopicsRequest.Builder();
+ method public androidx.privacysandbox.ads.adservices.topics.GetTopicsRequest build();
+ method public androidx.privacysandbox.ads.adservices.topics.GetTopicsRequest.Builder setAdsSdkName(String adsSdkName);
+ method public androidx.privacysandbox.ads.adservices.topics.GetTopicsRequest.Builder setShouldRecordObservation(boolean shouldRecordObservation);
+ }
+
+ public final class GetTopicsResponse {
+ ctor public GetTopicsResponse(java.util.List<androidx.privacysandbox.ads.adservices.topics.Topic> topics);
+ method public java.util.List<androidx.privacysandbox.ads.adservices.topics.Topic> getTopics();
+ property public final java.util.List<androidx.privacysandbox.ads.adservices.topics.Topic> topics;
+ }
+
+ public final class Topic {
+ ctor public Topic(long taxonomyVersion, long modelVersion, int topicId);
+ method public long getModelVersion();
+ method public long getTaxonomyVersion();
+ method public int getTopicId();
+ property public final long modelVersion;
+ property public final long taxonomyVersion;
+ property public final int topicId;
+ }
+
+ public abstract class TopicsManager {
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_TOPICS) public abstract suspend Object? getTopics(androidx.privacysandbox.ads.adservices.topics.GetTopicsRequest request, kotlin.coroutines.Continuation<? super androidx.privacysandbox.ads.adservices.topics.GetTopicsResponse>);
+ method public static final androidx.privacysandbox.ads.adservices.topics.TopicsManager? obtain(android.content.Context context);
+ field public static final androidx.privacysandbox.ads.adservices.topics.TopicsManager.Companion Companion;
+ }
+
+ public static final class TopicsManager.Companion {
+ method public androidx.privacysandbox.ads.adservices.topics.TopicsManager? obtain(android.content.Context context);
+ }
+
+}
+
diff --git a/privacysandbox/ads/ads-adservices/api/res-1.1.0-beta05.txt b/privacysandbox/ads/ads-adservices/api/res-1.1.0-beta05.txt
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/privacysandbox/ads/ads-adservices/api/res-1.1.0-beta05.txt
diff --git a/privacysandbox/ads/ads-adservices/api/restricted_1.1.0-beta05.txt b/privacysandbox/ads/ads-adservices/api/restricted_1.1.0-beta05.txt
new file mode 100644
index 0000000..32149c9
--- /dev/null
+++ b/privacysandbox/ads/ads-adservices/api/restricted_1.1.0-beta05.txt
@@ -0,0 +1,514 @@
+// Signature format: 4.0
+package androidx.privacysandbox.ads.adservices.adid {
+
+ public final class AdId {
+ method public String getAdId();
+ method public boolean isLimitAdTrackingEnabled();
+ property public final String adId;
+ property public final boolean isLimitAdTrackingEnabled;
+ }
+
+ public abstract class AdIdManager {
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_AD_ID) public abstract suspend Object? getAdId(kotlin.coroutines.Continuation<? super androidx.privacysandbox.ads.adservices.adid.AdId>);
+ method public static final androidx.privacysandbox.ads.adservices.adid.AdIdManager? obtain(android.content.Context context);
+ field public static final androidx.privacysandbox.ads.adservices.adid.AdIdManager.Companion Companion;
+ }
+
+ public static final class AdIdManager.Companion {
+ method public androidx.privacysandbox.ads.adservices.adid.AdIdManager? obtain(android.content.Context context);
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.adselection {
+
+ public final class AdSelectionConfig {
+ ctor public AdSelectionConfig(androidx.privacysandbox.ads.adservices.common.AdTechIdentifier seller, android.net.Uri decisionLogicUri, java.util.List<androidx.privacysandbox.ads.adservices.common.AdTechIdentifier> customAudienceBuyers, androidx.privacysandbox.ads.adservices.common.AdSelectionSignals adSelectionSignals, androidx.privacysandbox.ads.adservices.common.AdSelectionSignals sellerSignals, java.util.Map<androidx.privacysandbox.ads.adservices.common.AdTechIdentifier,androidx.privacysandbox.ads.adservices.common.AdSelectionSignals> perBuyerSignals, android.net.Uri trustedScoringSignalsUri);
+ method public androidx.privacysandbox.ads.adservices.common.AdSelectionSignals getAdSelectionSignals();
+ method public java.util.List<androidx.privacysandbox.ads.adservices.common.AdTechIdentifier> getCustomAudienceBuyers();
+ method public android.net.Uri getDecisionLogicUri();
+ method public java.util.Map<androidx.privacysandbox.ads.adservices.common.AdTechIdentifier,androidx.privacysandbox.ads.adservices.common.AdSelectionSignals> getPerBuyerSignals();
+ method public androidx.privacysandbox.ads.adservices.common.AdTechIdentifier getSeller();
+ method public androidx.privacysandbox.ads.adservices.common.AdSelectionSignals getSellerSignals();
+ method public android.net.Uri getTrustedScoringSignalsUri();
+ property public final androidx.privacysandbox.ads.adservices.common.AdSelectionSignals adSelectionSignals;
+ property public final java.util.List<androidx.privacysandbox.ads.adservices.common.AdTechIdentifier> customAudienceBuyers;
+ property public final android.net.Uri decisionLogicUri;
+ property public final java.util.Map<androidx.privacysandbox.ads.adservices.common.AdTechIdentifier,androidx.privacysandbox.ads.adservices.common.AdSelectionSignals> perBuyerSignals;
+ property public final androidx.privacysandbox.ads.adservices.common.AdTechIdentifier seller;
+ property public final androidx.privacysandbox.ads.adservices.common.AdSelectionSignals sellerSignals;
+ property public final android.net.Uri trustedScoringSignalsUri;
+ }
+
+ @SuppressCompatibility @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext10OptIn public final class AdSelectionFromOutcomesConfig {
+ ctor public AdSelectionFromOutcomesConfig(androidx.privacysandbox.ads.adservices.common.AdTechIdentifier seller, java.util.List<java.lang.Long> adSelectionIds, androidx.privacysandbox.ads.adservices.common.AdSelectionSignals adSelectionSignals, android.net.Uri selectionLogicUri);
+ method public java.util.List<java.lang.Long> getAdSelectionIds();
+ method public androidx.privacysandbox.ads.adservices.common.AdSelectionSignals getAdSelectionSignals();
+ method public android.net.Uri getSelectionLogicUri();
+ method public androidx.privacysandbox.ads.adservices.common.AdTechIdentifier getSeller();
+ method public void setSelectionLogicUri(android.net.Uri);
+ property public final java.util.List<java.lang.Long> adSelectionIds;
+ property public final androidx.privacysandbox.ads.adservices.common.AdSelectionSignals adSelectionSignals;
+ property public final android.net.Uri selectionLogicUri;
+ property public final androidx.privacysandbox.ads.adservices.common.AdTechIdentifier seller;
+ }
+
+ public abstract class AdSelectionManager {
+ method @SuppressCompatibility @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext10OptIn public abstract suspend Object? getAdSelectionData(androidx.privacysandbox.ads.adservices.adselection.GetAdSelectionDataRequest getAdSelectionDataRequest, kotlin.coroutines.Continuation<? super androidx.privacysandbox.ads.adservices.adselection.GetAdSelectionDataOutcome>);
+ method public static final androidx.privacysandbox.ads.adservices.adselection.AdSelectionManager? obtain(android.content.Context context);
+ method @SuppressCompatibility @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext10OptIn public abstract suspend Object? persistAdSelectionResult(androidx.privacysandbox.ads.adservices.adselection.PersistAdSelectionResultRequest persistAdSelectionResultRequest, kotlin.coroutines.Continuation<? super androidx.privacysandbox.ads.adservices.adselection.AdSelectionOutcome>);
+ method @SuppressCompatibility @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext8OptIn public abstract suspend Object? reportEvent(androidx.privacysandbox.ads.adservices.adselection.ReportEventRequest reportEventRequest, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract suspend Object? reportImpression(androidx.privacysandbox.ads.adservices.adselection.ReportImpressionRequest reportImpressionRequest, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract suspend Object? selectAds(androidx.privacysandbox.ads.adservices.adselection.AdSelectionConfig adSelectionConfig, kotlin.coroutines.Continuation<? super androidx.privacysandbox.ads.adservices.adselection.AdSelectionOutcome>);
+ method @SuppressCompatibility @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext10OptIn public abstract suspend Object? selectAds(androidx.privacysandbox.ads.adservices.adselection.AdSelectionFromOutcomesConfig adSelectionFromOutcomesConfig, kotlin.coroutines.Continuation<? super androidx.privacysandbox.ads.adservices.adselection.AdSelectionOutcome>);
+ method @SuppressCompatibility @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext8OptIn public abstract suspend Object? updateAdCounterHistogram(androidx.privacysandbox.ads.adservices.adselection.UpdateAdCounterHistogramRequest updateAdCounterHistogramRequest, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ field public static final androidx.privacysandbox.ads.adservices.adselection.AdSelectionManager.Companion Companion;
+ }
+
+ public static final class AdSelectionManager.Companion {
+ method public androidx.privacysandbox.ads.adservices.adselection.AdSelectionManager? obtain(android.content.Context context);
+ }
+
+ public final class AdSelectionOutcome {
+ ctor public AdSelectionOutcome(long adSelectionId, android.net.Uri renderUri);
+ method public long getAdSelectionId();
+ method public android.net.Uri getRenderUri();
+ method @SuppressCompatibility @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext10OptIn public boolean hasOutcome();
+ property public final long adSelectionId;
+ property public final android.net.Uri renderUri;
+ field public static final androidx.privacysandbox.ads.adservices.adselection.AdSelectionOutcome.Companion Companion;
+ field @SuppressCompatibility @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext10OptIn public static final androidx.privacysandbox.ads.adservices.adselection.AdSelectionOutcome NO_OUTCOME;
+ }
+
+ @SuppressCompatibility @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext10OptIn public static final class AdSelectionOutcome.Companion {
+ }
+
+ @SuppressCompatibility @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext10OptIn public final class GetAdSelectionDataOutcome {
+ ctor public GetAdSelectionDataOutcome(long adSelectionId, optional byte[]? adSelectionData);
+ method public byte[]? getAdSelectionData();
+ method public long getAdSelectionId();
+ property public final byte[]? adSelectionData;
+ property public final long adSelectionId;
+ }
+
+ @SuppressCompatibility @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext10OptIn public final class GetAdSelectionDataRequest {
+ ctor public GetAdSelectionDataRequest(optional androidx.privacysandbox.ads.adservices.common.AdTechIdentifier? seller);
+ method public androidx.privacysandbox.ads.adservices.common.AdTechIdentifier? getSeller();
+ property public final androidx.privacysandbox.ads.adservices.common.AdTechIdentifier? seller;
+ }
+
+ @SuppressCompatibility @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext10OptIn public final class PersistAdSelectionResultRequest {
+ ctor public PersistAdSelectionResultRequest(long adSelectionId, optional androidx.privacysandbox.ads.adservices.common.AdTechIdentifier? seller, optional byte[]? adSelectionResult);
+ method public long getAdSelectionId();
+ method public byte[]? getAdSelectionResult();
+ method public androidx.privacysandbox.ads.adservices.common.AdTechIdentifier? getSeller();
+ property public final long adSelectionId;
+ property public final byte[]? adSelectionResult;
+ property public final androidx.privacysandbox.ads.adservices.common.AdTechIdentifier? seller;
+ }
+
+ @SuppressCompatibility @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext8OptIn public final class ReportEventRequest {
+ ctor public ReportEventRequest(long adSelectionId, String eventKey, String eventData, int reportingDestinations, optional android.view.InputEvent? inputEvent);
+ method public long getAdSelectionId();
+ method public String getEventData();
+ method public String getEventKey();
+ method public android.view.InputEvent? getInputEvent();
+ method public int getReportingDestinations();
+ property public final long adSelectionId;
+ property public final String eventData;
+ property public final String eventKey;
+ property public final android.view.InputEvent? inputEvent;
+ property public final int reportingDestinations;
+ field public static final androidx.privacysandbox.ads.adservices.adselection.ReportEventRequest.Companion Companion;
+ field public static final int FLAG_REPORTING_DESTINATION_BUYER = 2; // 0x2
+ field public static final int FLAG_REPORTING_DESTINATION_SELLER = 1; // 0x1
+ }
+
+ public static final class ReportEventRequest.Companion {
+ }
+
+ public final class ReportImpressionRequest {
+ ctor @SuppressCompatibility @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext8OptIn public ReportImpressionRequest(long adSelectionId);
+ ctor public ReportImpressionRequest(long adSelectionId, androidx.privacysandbox.ads.adservices.adselection.AdSelectionConfig adSelectionConfig);
+ method public androidx.privacysandbox.ads.adservices.adselection.AdSelectionConfig getAdSelectionConfig();
+ method public long getAdSelectionId();
+ property public final androidx.privacysandbox.ads.adservices.adselection.AdSelectionConfig adSelectionConfig;
+ property public final long adSelectionId;
+ }
+
+ @SuppressCompatibility @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext8OptIn public final class UpdateAdCounterHistogramRequest {
+ ctor public UpdateAdCounterHistogramRequest(long adSelectionId, int adEventType, androidx.privacysandbox.ads.adservices.common.AdTechIdentifier callerAdTech);
+ method public int getAdEventType();
+ method public long getAdSelectionId();
+ method public androidx.privacysandbox.ads.adservices.common.AdTechIdentifier getCallerAdTech();
+ property public final int adEventType;
+ property public final long adSelectionId;
+ property public final androidx.privacysandbox.ads.adservices.common.AdTechIdentifier callerAdTech;
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.appsetid {
+
+ public final class AppSetId {
+ ctor public AppSetId(String id, int scope);
+ method public String getId();
+ method public int getScope();
+ property public final String id;
+ property public final int scope;
+ field public static final androidx.privacysandbox.ads.adservices.appsetid.AppSetId.Companion Companion;
+ field public static final int SCOPE_APP = 1; // 0x1
+ field public static final int SCOPE_DEVELOPER = 2; // 0x2
+ }
+
+ public static final class AppSetId.Companion {
+ }
+
+ public abstract class AppSetIdManager {
+ method public abstract suspend Object? getAppSetId(kotlin.coroutines.Continuation<? super androidx.privacysandbox.ads.adservices.appsetid.AppSetId>);
+ method public static final androidx.privacysandbox.ads.adservices.appsetid.AppSetIdManager? obtain(android.content.Context context);
+ field public static final androidx.privacysandbox.ads.adservices.appsetid.AppSetIdManager.Companion Companion;
+ }
+
+ public static final class AppSetIdManager.Companion {
+ method public androidx.privacysandbox.ads.adservices.appsetid.AppSetIdManager? obtain(android.content.Context context);
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.common {
+
+ public final class AdData {
+ ctor public AdData(android.net.Uri renderUri, String metadata);
+ ctor @SuppressCompatibility @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext8OptIn public AdData(android.net.Uri renderUri, String metadata, optional java.util.Set<java.lang.Integer> adCounterKeys, optional androidx.privacysandbox.ads.adservices.common.AdFilters? adFilters);
+ ctor @SuppressCompatibility @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext10OptIn public AdData(android.net.Uri renderUri, String metadata, optional java.util.Set<java.lang.Integer> adCounterKeys, optional androidx.privacysandbox.ads.adservices.common.AdFilters? adFilters, optional String? adRenderId);
+ method public java.util.Set<java.lang.Integer> getAdCounterKeys();
+ method public androidx.privacysandbox.ads.adservices.common.AdFilters? getAdFilters();
+ method public String? getAdRenderId();
+ method public String getMetadata();
+ method public android.net.Uri getRenderUri();
+ property public final java.util.Set<java.lang.Integer> adCounterKeys;
+ property public final androidx.privacysandbox.ads.adservices.common.AdFilters? adFilters;
+ property public final String? adRenderId;
+ property public final String metadata;
+ property public final android.net.Uri renderUri;
+ }
+
+ @SuppressCompatibility @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext8OptIn public final class AdFilters {
+ ctor public AdFilters(androidx.privacysandbox.ads.adservices.common.FrequencyCapFilters? frequencyCapFilters);
+ method public androidx.privacysandbox.ads.adservices.common.FrequencyCapFilters? getFrequencyCapFilters();
+ property public final androidx.privacysandbox.ads.adservices.common.FrequencyCapFilters? frequencyCapFilters;
+ }
+
+ public final class AdSelectionSignals {
+ ctor public AdSelectionSignals(String signals);
+ method public String getSignals();
+ property public final String signals;
+ }
+
+ public final class AdTechIdentifier {
+ ctor public AdTechIdentifier(String identifier);
+ method public String getIdentifier();
+ property public final String identifier;
+ }
+
+ public sealed interface ExperimentalFeatures {
+ }
+
+ @SuppressCompatibility @kotlin.RequiresOptIn(message="The Ext10 API is experimental.", level=kotlin.RequiresOptIn.Level.WARNING) public static @interface ExperimentalFeatures.Ext10OptIn {
+ }
+
+ @SuppressCompatibility @kotlin.RequiresOptIn(message="The Ext8 API is experimental.", level=kotlin.RequiresOptIn.Level.WARNING) public static @interface ExperimentalFeatures.Ext8OptIn {
+ }
+
+ @SuppressCompatibility @kotlin.RequiresOptIn(message="This API is experimental.", level=kotlin.RequiresOptIn.Level.WARNING) public static @interface ExperimentalFeatures.RegisterSourceOptIn {
+ }
+
+ @SuppressCompatibility @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext8OptIn public final class FrequencyCapFilters {
+ ctor public FrequencyCapFilters();
+ ctor public FrequencyCapFilters(optional java.util.List<androidx.privacysandbox.ads.adservices.common.KeyedFrequencyCap> keyedFrequencyCapsForWinEvents);
+ ctor public FrequencyCapFilters(optional java.util.List<androidx.privacysandbox.ads.adservices.common.KeyedFrequencyCap> keyedFrequencyCapsForWinEvents, optional java.util.List<androidx.privacysandbox.ads.adservices.common.KeyedFrequencyCap> keyedFrequencyCapsForImpressionEvents);
+ ctor public FrequencyCapFilters(optional java.util.List<androidx.privacysandbox.ads.adservices.common.KeyedFrequencyCap> keyedFrequencyCapsForWinEvents, optional java.util.List<androidx.privacysandbox.ads.adservices.common.KeyedFrequencyCap> keyedFrequencyCapsForImpressionEvents, optional java.util.List<androidx.privacysandbox.ads.adservices.common.KeyedFrequencyCap> keyedFrequencyCapsForViewEvents);
+ ctor public FrequencyCapFilters(optional java.util.List<androidx.privacysandbox.ads.adservices.common.KeyedFrequencyCap> keyedFrequencyCapsForWinEvents, optional java.util.List<androidx.privacysandbox.ads.adservices.common.KeyedFrequencyCap> keyedFrequencyCapsForImpressionEvents, optional java.util.List<androidx.privacysandbox.ads.adservices.common.KeyedFrequencyCap> keyedFrequencyCapsForViewEvents, optional java.util.List<androidx.privacysandbox.ads.adservices.common.KeyedFrequencyCap> keyedFrequencyCapsForClickEvents);
+ method public java.util.List<androidx.privacysandbox.ads.adservices.common.KeyedFrequencyCap> getKeyedFrequencyCapsForClickEvents();
+ method public java.util.List<androidx.privacysandbox.ads.adservices.common.KeyedFrequencyCap> getKeyedFrequencyCapsForImpressionEvents();
+ method public java.util.List<androidx.privacysandbox.ads.adservices.common.KeyedFrequencyCap> getKeyedFrequencyCapsForViewEvents();
+ method public java.util.List<androidx.privacysandbox.ads.adservices.common.KeyedFrequencyCap> getKeyedFrequencyCapsForWinEvents();
+ property public final java.util.List<androidx.privacysandbox.ads.adservices.common.KeyedFrequencyCap> keyedFrequencyCapsForClickEvents;
+ property public final java.util.List<androidx.privacysandbox.ads.adservices.common.KeyedFrequencyCap> keyedFrequencyCapsForImpressionEvents;
+ property public final java.util.List<androidx.privacysandbox.ads.adservices.common.KeyedFrequencyCap> keyedFrequencyCapsForViewEvents;
+ property public final java.util.List<androidx.privacysandbox.ads.adservices.common.KeyedFrequencyCap> keyedFrequencyCapsForWinEvents;
+ field public static final int AD_EVENT_TYPE_CLICK = 3; // 0x3
+ field public static final int AD_EVENT_TYPE_IMPRESSION = 1; // 0x1
+ field public static final int AD_EVENT_TYPE_VIEW = 2; // 0x2
+ field public static final int AD_EVENT_TYPE_WIN = 0; // 0x0
+ field public static final androidx.privacysandbox.ads.adservices.common.FrequencyCapFilters.Companion Companion;
+ }
+
+ public static final class FrequencyCapFilters.Companion {
+ }
+
+ @SuppressCompatibility @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext8OptIn public final class KeyedFrequencyCap {
+ ctor public KeyedFrequencyCap(int adCounterKey, int maxCount, java.time.Duration interval);
+ method public int getAdCounterKey();
+ method public java.time.Duration getInterval();
+ method public int getMaxCount();
+ property public final int adCounterKey;
+ property public final java.time.Duration interval;
+ property public final int maxCount;
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.customaudience {
+
+ public final class CustomAudience {
+ ctor public CustomAudience(androidx.privacysandbox.ads.adservices.common.AdTechIdentifier buyer, String name, android.net.Uri dailyUpdateUri, android.net.Uri biddingLogicUri, java.util.List<androidx.privacysandbox.ads.adservices.common.AdData> ads, optional java.time.Instant? activationTime, optional java.time.Instant? expirationTime, optional androidx.privacysandbox.ads.adservices.common.AdSelectionSignals? userBiddingSignals, optional androidx.privacysandbox.ads.adservices.customaudience.TrustedBiddingData? trustedBiddingSignals);
+ method public java.time.Instant? getActivationTime();
+ method public java.util.List<androidx.privacysandbox.ads.adservices.common.AdData> getAds();
+ method public android.net.Uri getBiddingLogicUri();
+ method public androidx.privacysandbox.ads.adservices.common.AdTechIdentifier getBuyer();
+ method public android.net.Uri getDailyUpdateUri();
+ method public java.time.Instant? getExpirationTime();
+ method public String getName();
+ method public androidx.privacysandbox.ads.adservices.customaudience.TrustedBiddingData? getTrustedBiddingSignals();
+ method public androidx.privacysandbox.ads.adservices.common.AdSelectionSignals? getUserBiddingSignals();
+ property public final java.time.Instant? activationTime;
+ property public final java.util.List<androidx.privacysandbox.ads.adservices.common.AdData> ads;
+ property public final android.net.Uri biddingLogicUri;
+ property public final androidx.privacysandbox.ads.adservices.common.AdTechIdentifier buyer;
+ property public final android.net.Uri dailyUpdateUri;
+ property public final java.time.Instant? expirationTime;
+ property public final String name;
+ property public final androidx.privacysandbox.ads.adservices.customaudience.TrustedBiddingData? trustedBiddingSignals;
+ property public final androidx.privacysandbox.ads.adservices.common.AdSelectionSignals? userBiddingSignals;
+ }
+
+ public static final class CustomAudience.Builder {
+ ctor public CustomAudience.Builder(androidx.privacysandbox.ads.adservices.common.AdTechIdentifier buyer, String name, android.net.Uri dailyUpdateUri, android.net.Uri biddingLogicUri, java.util.List<androidx.privacysandbox.ads.adservices.common.AdData> ads);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience build();
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setActivationTime(java.time.Instant activationTime);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setAds(java.util.List<androidx.privacysandbox.ads.adservices.common.AdData> ads);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setBiddingLogicUri(android.net.Uri biddingLogicUri);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setBuyer(androidx.privacysandbox.ads.adservices.common.AdTechIdentifier buyer);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setDailyUpdateUri(android.net.Uri dailyUpdateUri);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setExpirationTime(java.time.Instant expirationTime);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setName(String name);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setTrustedBiddingData(androidx.privacysandbox.ads.adservices.customaudience.TrustedBiddingData trustedBiddingSignals);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience.Builder setUserBiddingSignals(androidx.privacysandbox.ads.adservices.common.AdSelectionSignals userBiddingSignals);
+ }
+
+ public abstract class CustomAudienceManager {
+ method @SuppressCompatibility @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext10OptIn public abstract suspend Object? fetchAndJoinCustomAudience(androidx.privacysandbox.ads.adservices.customaudience.FetchAndJoinCustomAudienceRequest request, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract suspend Object? joinCustomAudience(androidx.privacysandbox.ads.adservices.customaudience.JoinCustomAudienceRequest request, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_CUSTOM_AUDIENCE) public abstract suspend Object? leaveCustomAudience(androidx.privacysandbox.ads.adservices.customaudience.LeaveCustomAudienceRequest request, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method public static final androidx.privacysandbox.ads.adservices.customaudience.CustomAudienceManager? obtain(android.content.Context context);
+ field public static final androidx.privacysandbox.ads.adservices.customaudience.CustomAudienceManager.Companion Companion;
+ }
+
+ public static final class CustomAudienceManager.Companion {
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudienceManager? obtain(android.content.Context context);
+ }
+
+ @SuppressCompatibility @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.Ext10OptIn public final class FetchAndJoinCustomAudienceRequest {
+ ctor public FetchAndJoinCustomAudienceRequest(android.net.Uri fetchUri, optional String? name, optional java.time.Instant? activationTime, optional java.time.Instant? expirationTime, optional androidx.privacysandbox.ads.adservices.common.AdSelectionSignals? userBiddingSignals);
+ method public java.time.Instant? getActivationTime();
+ method public java.time.Instant? getExpirationTime();
+ method public android.net.Uri getFetchUri();
+ method public String? getName();
+ method public androidx.privacysandbox.ads.adservices.common.AdSelectionSignals? getUserBiddingSignals();
+ property public final java.time.Instant? activationTime;
+ property public final java.time.Instant? expirationTime;
+ property public final android.net.Uri fetchUri;
+ property public final String? name;
+ property public final androidx.privacysandbox.ads.adservices.common.AdSelectionSignals? userBiddingSignals;
+ }
+
+ public final class JoinCustomAudienceRequest {
+ ctor public JoinCustomAudienceRequest(androidx.privacysandbox.ads.adservices.customaudience.CustomAudience customAudience);
+ method public androidx.privacysandbox.ads.adservices.customaudience.CustomAudience getCustomAudience();
+ property public final androidx.privacysandbox.ads.adservices.customaudience.CustomAudience customAudience;
+ }
+
+ public final class LeaveCustomAudienceRequest {
+ ctor public LeaveCustomAudienceRequest(androidx.privacysandbox.ads.adservices.common.AdTechIdentifier buyer, String name);
+ method public androidx.privacysandbox.ads.adservices.common.AdTechIdentifier getBuyer();
+ method public String getName();
+ property public final androidx.privacysandbox.ads.adservices.common.AdTechIdentifier buyer;
+ property public final String name;
+ }
+
+ public final class TrustedBiddingData {
+ ctor public TrustedBiddingData(android.net.Uri trustedBiddingUri, java.util.List<java.lang.String> trustedBiddingKeys);
+ method public java.util.List<java.lang.String> getTrustedBiddingKeys();
+ method public android.net.Uri getTrustedBiddingUri();
+ property public final java.util.List<java.lang.String> trustedBiddingKeys;
+ property public final android.net.Uri trustedBiddingUri;
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.measurement {
+
+ @RequiresApi(android.os.Build.VERSION_CODES.O) public final class DeletionRequest {
+ ctor public DeletionRequest(int deletionMode, int matchBehavior, optional java.time.Instant start, optional java.time.Instant end, optional java.util.List<? extends android.net.Uri> domainUris, optional java.util.List<? extends android.net.Uri> originUris);
+ method public int getDeletionMode();
+ method public java.util.List<android.net.Uri> getDomainUris();
+ method public java.time.Instant getEnd();
+ method public int getMatchBehavior();
+ method public java.util.List<android.net.Uri> getOriginUris();
+ method public java.time.Instant getStart();
+ property public final int deletionMode;
+ property public final java.util.List<android.net.Uri> domainUris;
+ property public final java.time.Instant end;
+ property public final int matchBehavior;
+ property public final java.util.List<android.net.Uri> originUris;
+ property public final java.time.Instant start;
+ field public static final androidx.privacysandbox.ads.adservices.measurement.DeletionRequest.Companion Companion;
+ field public static final int DELETION_MODE_ALL = 0; // 0x0
+ field public static final int DELETION_MODE_EXCLUDE_INTERNAL_DATA = 1; // 0x1
+ field public static final int MATCH_BEHAVIOR_DELETE = 0; // 0x0
+ field public static final int MATCH_BEHAVIOR_PRESERVE = 1; // 0x1
+ }
+
+ @RequiresApi(android.os.Build.VERSION_CODES.O) public static final class DeletionRequest.Builder {
+ ctor public DeletionRequest.Builder(int deletionMode, int matchBehavior);
+ method public androidx.privacysandbox.ads.adservices.measurement.DeletionRequest build();
+ method public androidx.privacysandbox.ads.adservices.measurement.DeletionRequest.Builder setDomainUris(java.util.List<? extends android.net.Uri> domainUris);
+ method public androidx.privacysandbox.ads.adservices.measurement.DeletionRequest.Builder setEnd(java.time.Instant end);
+ method public androidx.privacysandbox.ads.adservices.measurement.DeletionRequest.Builder setOriginUris(java.util.List<? extends android.net.Uri> originUris);
+ method public androidx.privacysandbox.ads.adservices.measurement.DeletionRequest.Builder setStart(java.time.Instant start);
+ }
+
+ public static final class DeletionRequest.Companion {
+ }
+
+ public abstract class MeasurementManager {
+ ctor public MeasurementManager();
+ method public abstract suspend Object? deleteRegistrations(androidx.privacysandbox.ads.adservices.measurement.DeletionRequest deletionRequest, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract suspend Object? getMeasurementApiStatus(kotlin.coroutines.Continuation<? super java.lang.Integer>);
+ method public static final androidx.privacysandbox.ads.adservices.measurement.MeasurementManager? obtain(android.content.Context context);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract suspend Object? registerSource(android.net.Uri attributionSource, android.view.InputEvent? inputEvent, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @SuppressCompatibility @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.RegisterSourceOptIn public abstract suspend Object? registerSource(androidx.privacysandbox.ads.adservices.measurement.SourceRegistrationRequest request, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract suspend Object? registerTrigger(android.net.Uri trigger, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract suspend Object? registerWebSource(androidx.privacysandbox.ads.adservices.measurement.WebSourceRegistrationRequest request, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_ATTRIBUTION) public abstract suspend Object? registerWebTrigger(androidx.privacysandbox.ads.adservices.measurement.WebTriggerRegistrationRequest request, kotlin.coroutines.Continuation<? super kotlin.Unit>);
+ field public static final androidx.privacysandbox.ads.adservices.measurement.MeasurementManager.Companion Companion;
+ field public static final int MEASUREMENT_API_STATE_DISABLED = 0; // 0x0
+ field public static final int MEASUREMENT_API_STATE_ENABLED = 1; // 0x1
+ }
+
+ public static final class MeasurementManager.Companion {
+ method public androidx.privacysandbox.ads.adservices.measurement.MeasurementManager? obtain(android.content.Context context);
+ }
+
+ @SuppressCompatibility @androidx.privacysandbox.ads.adservices.common.ExperimentalFeatures.RegisterSourceOptIn public final class SourceRegistrationRequest {
+ ctor public SourceRegistrationRequest(java.util.List<? extends android.net.Uri> registrationUris, optional android.view.InputEvent? inputEvent);
+ method public android.view.InputEvent? getInputEvent();
+ method public java.util.List<android.net.Uri> getRegistrationUris();
+ property public final android.view.InputEvent? inputEvent;
+ property public final java.util.List<android.net.Uri> registrationUris;
+ }
+
+ public static final class SourceRegistrationRequest.Builder {
+ ctor public SourceRegistrationRequest.Builder(java.util.List<? extends android.net.Uri> registrationUris);
+ method public androidx.privacysandbox.ads.adservices.measurement.SourceRegistrationRequest build();
+ method public androidx.privacysandbox.ads.adservices.measurement.SourceRegistrationRequest.Builder setInputEvent(android.view.InputEvent inputEvent);
+ }
+
+ public final class WebSourceParams {
+ ctor public WebSourceParams(android.net.Uri registrationUri, boolean debugKeyAllowed);
+ method public boolean getDebugKeyAllowed();
+ method public android.net.Uri getRegistrationUri();
+ property public final boolean debugKeyAllowed;
+ property public final android.net.Uri registrationUri;
+ }
+
+ public final class WebSourceRegistrationRequest {
+ ctor public WebSourceRegistrationRequest(java.util.List<androidx.privacysandbox.ads.adservices.measurement.WebSourceParams> webSourceParams, android.net.Uri topOriginUri, optional android.view.InputEvent? inputEvent, optional android.net.Uri? appDestination, optional android.net.Uri? webDestination, optional android.net.Uri? verifiedDestination);
+ method public android.net.Uri? getAppDestination();
+ method public android.view.InputEvent? getInputEvent();
+ method public android.net.Uri getTopOriginUri();
+ method public android.net.Uri? getVerifiedDestination();
+ method public android.net.Uri? getWebDestination();
+ method public java.util.List<androidx.privacysandbox.ads.adservices.measurement.WebSourceParams> getWebSourceParams();
+ property public final android.net.Uri? appDestination;
+ property public final android.view.InputEvent? inputEvent;
+ property public final android.net.Uri topOriginUri;
+ property public final android.net.Uri? verifiedDestination;
+ property public final android.net.Uri? webDestination;
+ property public final java.util.List<androidx.privacysandbox.ads.adservices.measurement.WebSourceParams> webSourceParams;
+ }
+
+ public static final class WebSourceRegistrationRequest.Builder {
+ ctor public WebSourceRegistrationRequest.Builder(java.util.List<androidx.privacysandbox.ads.adservices.measurement.WebSourceParams> webSourceParams, android.net.Uri topOriginUri);
+ method public androidx.privacysandbox.ads.adservices.measurement.WebSourceRegistrationRequest build();
+ method public androidx.privacysandbox.ads.adservices.measurement.WebSourceRegistrationRequest.Builder setAppDestination(android.net.Uri? appDestination);
+ method public androidx.privacysandbox.ads.adservices.measurement.WebSourceRegistrationRequest.Builder setInputEvent(android.view.InputEvent inputEvent);
+ method public androidx.privacysandbox.ads.adservices.measurement.WebSourceRegistrationRequest.Builder setVerifiedDestination(android.net.Uri? verifiedDestination);
+ method public androidx.privacysandbox.ads.adservices.measurement.WebSourceRegistrationRequest.Builder setWebDestination(android.net.Uri? webDestination);
+ }
+
+ public final class WebTriggerParams {
+ ctor public WebTriggerParams(android.net.Uri registrationUri, boolean debugKeyAllowed);
+ method public boolean getDebugKeyAllowed();
+ method public android.net.Uri getRegistrationUri();
+ property public final boolean debugKeyAllowed;
+ property public final android.net.Uri registrationUri;
+ }
+
+ public final class WebTriggerRegistrationRequest {
+ ctor public WebTriggerRegistrationRequest(java.util.List<androidx.privacysandbox.ads.adservices.measurement.WebTriggerParams> webTriggerParams, android.net.Uri destination);
+ method public android.net.Uri getDestination();
+ method public java.util.List<androidx.privacysandbox.ads.adservices.measurement.WebTriggerParams> getWebTriggerParams();
+ property public final android.net.Uri destination;
+ property public final java.util.List<androidx.privacysandbox.ads.adservices.measurement.WebTriggerParams> webTriggerParams;
+ }
+
+}
+
+package androidx.privacysandbox.ads.adservices.topics {
+
+ public final class GetTopicsRequest {
+ ctor public GetTopicsRequest(optional String adsSdkName, optional boolean shouldRecordObservation);
+ method public String getAdsSdkName();
+ method public boolean shouldRecordObservation();
+ property public final String adsSdkName;
+ property public final boolean shouldRecordObservation;
+ }
+
+ public static final class GetTopicsRequest.Builder {
+ ctor public GetTopicsRequest.Builder();
+ method public androidx.privacysandbox.ads.adservices.topics.GetTopicsRequest build();
+ method public androidx.privacysandbox.ads.adservices.topics.GetTopicsRequest.Builder setAdsSdkName(String adsSdkName);
+ method public androidx.privacysandbox.ads.adservices.topics.GetTopicsRequest.Builder setShouldRecordObservation(boolean shouldRecordObservation);
+ }
+
+ public final class GetTopicsResponse {
+ ctor public GetTopicsResponse(java.util.List<androidx.privacysandbox.ads.adservices.topics.Topic> topics);
+ method public java.util.List<androidx.privacysandbox.ads.adservices.topics.Topic> getTopics();
+ property public final java.util.List<androidx.privacysandbox.ads.adservices.topics.Topic> topics;
+ }
+
+ public final class Topic {
+ ctor public Topic(long taxonomyVersion, long modelVersion, int topicId);
+ method public long getModelVersion();
+ method public long getTaxonomyVersion();
+ method public int getTopicId();
+ property public final long modelVersion;
+ property public final long taxonomyVersion;
+ property public final int topicId;
+ }
+
+ public abstract class TopicsManager {
+ method @RequiresPermission(android.adservices.common.AdServicesPermissions.ACCESS_ADSERVICES_TOPICS) public abstract suspend Object? getTopics(androidx.privacysandbox.ads.adservices.topics.GetTopicsRequest request, kotlin.coroutines.Continuation<? super androidx.privacysandbox.ads.adservices.topics.GetTopicsResponse>);
+ method public static final androidx.privacysandbox.ads.adservices.topics.TopicsManager? obtain(android.content.Context context);
+ field public static final androidx.privacysandbox.ads.adservices.topics.TopicsManager.Companion Companion;
+ }
+
+ public static final class TopicsManager.Companion {
+ method public androidx.privacysandbox.ads.adservices.topics.TopicsManager? obtain(android.content.Context context);
+ }
+
+}
+