Add a builder for PhotoPicker contract

Adding the PickViewMediaRequest and builder for adding different inputs
to the PickVisualMedia ActivityResultContracts.

RelNote: N/A
Test: modified integration app
Bug: 220187418
Change-Id: I940352b2ebe0c8fe14da759082f15ac9e488cbe5
diff --git a/activity/activity/api/current.txt b/activity/activity/api/current.txt
index cd387b5..176077e 100644
--- a/activity/activity/api/current.txt
+++ b/activity/activity/api/current.txt
@@ -164,6 +164,21 @@
     method public androidx.activity.result.IntentSenderRequest.Builder setFlags(int, int);
   }
 
+  public final class PickVisualMediaRequest {
+    method public androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType getMediaType();
+    property public final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType mediaType;
+  }
+
+  public static final class PickVisualMediaRequest.Builder {
+    ctor public PickVisualMediaRequest.Builder();
+    method public androidx.activity.result.PickVisualMediaRequest build();
+    method public androidx.activity.result.PickVisualMediaRequest.Builder setMediaType(androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType mediaType);
+  }
+
+  public final class PickVisualMediaRequestKt {
+    method public static androidx.activity.result.PickVisualMediaRequest PickVisualMediaRequest(optional androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType mediaType);
+  }
+
 }
 
 package androidx.activity.result.contract {
@@ -240,17 +255,17 @@
     method public android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
   }
 
-  @RequiresApi(19) public static class ActivityResultContracts.PickMultipleVisualMedia extends androidx.activity.result.contract.ActivityResultContract<androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType,java.util.List<android.net.Uri>> {
+  @RequiresApi(19) public static class ActivityResultContracts.PickMultipleVisualMedia extends androidx.activity.result.contract.ActivityResultContract<androidx.activity.result.PickVisualMediaRequest,java.util.List<android.net.Uri>> {
     ctor public ActivityResultContracts.PickMultipleVisualMedia(optional int maxItems);
-    method @CallSuper public android.content.Intent createIntent(android.content.Context context, androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType input);
-    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.util.List<android.net.Uri>>? getSynchronousResult(android.content.Context context, androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType input);
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.util.List<android.net.Uri>>? getSynchronousResult(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
     method public final java.util.List<android.net.Uri> parseResult(int resultCode, android.content.Intent? intent);
   }
 
-  public static class ActivityResultContracts.PickVisualMedia extends androidx.activity.result.contract.ActivityResultContract<androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType,android.net.Uri> {
+  public static class ActivityResultContracts.PickVisualMedia extends androidx.activity.result.contract.ActivityResultContract<androidx.activity.result.PickVisualMediaRequest,android.net.Uri> {
     ctor public ActivityResultContracts.PickVisualMedia();
-    method @CallSuper public android.content.Intent createIntent(android.content.Context context, androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType input);
-    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType input);
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
     method public static final String? getVisualMimeType(androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType input);
     method public static final boolean isPhotoPickerAvailable();
     method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
diff --git a/activity/activity/api/public_plus_experimental_current.txt b/activity/activity/api/public_plus_experimental_current.txt
index cd387b5..176077e 100644
--- a/activity/activity/api/public_plus_experimental_current.txt
+++ b/activity/activity/api/public_plus_experimental_current.txt
@@ -164,6 +164,21 @@
     method public androidx.activity.result.IntentSenderRequest.Builder setFlags(int, int);
   }
 
+  public final class PickVisualMediaRequest {
+    method public androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType getMediaType();
+    property public final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType mediaType;
+  }
+
+  public static final class PickVisualMediaRequest.Builder {
+    ctor public PickVisualMediaRequest.Builder();
+    method public androidx.activity.result.PickVisualMediaRequest build();
+    method public androidx.activity.result.PickVisualMediaRequest.Builder setMediaType(androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType mediaType);
+  }
+
+  public final class PickVisualMediaRequestKt {
+    method public static androidx.activity.result.PickVisualMediaRequest PickVisualMediaRequest(optional androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType mediaType);
+  }
+
 }
 
 package androidx.activity.result.contract {
@@ -240,17 +255,17 @@
     method public android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
   }
 
-  @RequiresApi(19) public static class ActivityResultContracts.PickMultipleVisualMedia extends androidx.activity.result.contract.ActivityResultContract<androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType,java.util.List<android.net.Uri>> {
+  @RequiresApi(19) public static class ActivityResultContracts.PickMultipleVisualMedia extends androidx.activity.result.contract.ActivityResultContract<androidx.activity.result.PickVisualMediaRequest,java.util.List<android.net.Uri>> {
     ctor public ActivityResultContracts.PickMultipleVisualMedia(optional int maxItems);
-    method @CallSuper public android.content.Intent createIntent(android.content.Context context, androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType input);
-    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.util.List<android.net.Uri>>? getSynchronousResult(android.content.Context context, androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType input);
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.util.List<android.net.Uri>>? getSynchronousResult(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
     method public final java.util.List<android.net.Uri> parseResult(int resultCode, android.content.Intent? intent);
   }
 
-  public static class ActivityResultContracts.PickVisualMedia extends androidx.activity.result.contract.ActivityResultContract<androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType,android.net.Uri> {
+  public static class ActivityResultContracts.PickVisualMedia extends androidx.activity.result.contract.ActivityResultContract<androidx.activity.result.PickVisualMediaRequest,android.net.Uri> {
     ctor public ActivityResultContracts.PickVisualMedia();
-    method @CallSuper public android.content.Intent createIntent(android.content.Context context, androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType input);
-    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType input);
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
     method public static final String? getVisualMimeType(androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType input);
     method public static final boolean isPhotoPickerAvailable();
     method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
diff --git a/activity/activity/api/restricted_current.txt b/activity/activity/api/restricted_current.txt
index f4af520..0a8d8b9 100644
--- a/activity/activity/api/restricted_current.txt
+++ b/activity/activity/api/restricted_current.txt
@@ -163,6 +163,21 @@
     method public androidx.activity.result.IntentSenderRequest.Builder setFlags(int, int);
   }
 
+  public final class PickVisualMediaRequest {
+    method public androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType getMediaType();
+    property public final androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType mediaType;
+  }
+
+  public static final class PickVisualMediaRequest.Builder {
+    ctor public PickVisualMediaRequest.Builder();
+    method public androidx.activity.result.PickVisualMediaRequest build();
+    method public androidx.activity.result.PickVisualMediaRequest.Builder setMediaType(androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType mediaType);
+  }
+
+  public final class PickVisualMediaRequestKt {
+    method public static androidx.activity.result.PickVisualMediaRequest PickVisualMediaRequest(optional androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType mediaType);
+  }
+
 }
 
 package androidx.activity.result.contract {
@@ -239,17 +254,17 @@
     method public android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
   }
 
-  @RequiresApi(19) public static class ActivityResultContracts.PickMultipleVisualMedia extends androidx.activity.result.contract.ActivityResultContract<androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType,java.util.List<android.net.Uri>> {
+  @RequiresApi(19) public static class ActivityResultContracts.PickMultipleVisualMedia extends androidx.activity.result.contract.ActivityResultContract<androidx.activity.result.PickVisualMediaRequest,java.util.List<android.net.Uri>> {
     ctor public ActivityResultContracts.PickMultipleVisualMedia(optional int maxItems);
-    method @CallSuper public android.content.Intent createIntent(android.content.Context context, androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType input);
-    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.util.List<android.net.Uri>>? getSynchronousResult(android.content.Context context, androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType input);
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<java.util.List<android.net.Uri>>? getSynchronousResult(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
     method public final java.util.List<android.net.Uri> parseResult(int resultCode, android.content.Intent? intent);
   }
 
-  public static class ActivityResultContracts.PickVisualMedia extends androidx.activity.result.contract.ActivityResultContract<androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType,android.net.Uri> {
+  public static class ActivityResultContracts.PickVisualMedia extends androidx.activity.result.contract.ActivityResultContract<androidx.activity.result.PickVisualMediaRequest,android.net.Uri> {
     ctor public ActivityResultContracts.PickVisualMedia();
-    method @CallSuper public android.content.Intent createIntent(android.content.Context context, androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType input);
-    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType input);
+    method @CallSuper public android.content.Intent createIntent(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
+    method public final androidx.activity.result.contract.ActivityResultContract.SynchronousResult<android.net.Uri>? getSynchronousResult(android.content.Context context, androidx.activity.result.PickVisualMediaRequest input);
     method public static final String? getVisualMimeType(androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType input);
     method public static final boolean isPhotoPickerAvailable();
     method public final android.net.Uri? parseResult(int resultCode, android.content.Intent? intent);
diff --git a/activity/activity/src/main/java/androidx/activity/result/PickVisualMediaRequest.kt b/activity/activity/src/main/java/androidx/activity/result/PickVisualMediaRequest.kt
new file mode 100644
index 0000000..f9b3bee
--- /dev/null
+++ b/activity/activity/src/main/java/androidx/activity/result/PickVisualMediaRequest.kt
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.activity.result
+
+import androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType
+import androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.ImageAndVideo
+
+/**
+ * Creates a request for a
+ * [androidx.activity.result.contract.ActivityResultContracts.PickMultipleVisualMedia] or
+ * [androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia] Activity Contract.
+ *
+ * @param mediaType type to go into the PickVisualMediaRequest
+ *
+ * @return a PickVisualMediaRequest that contains the given input
+ */
+fun PickVisualMediaRequest(
+    mediaType: VisualMediaType = ImageAndVideo
+) = PickVisualMediaRequest.Builder().setMediaType(mediaType).build()
+
+/**
+ * A request for a
+ * [androidx.activity.result.contract.ActivityResultContracts.PickMultipleVisualMedia] or
+ * [androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia] Activity Contract.
+ */
+class PickVisualMediaRequest internal constructor() {
+
+    var mediaType: VisualMediaType = ImageAndVideo
+        private set
+
+    /**
+     * A builder for constructing [PickVisualMediaRequest] instances.
+     */
+    class Builder {
+
+        private var mediaType: VisualMediaType = ImageAndVideo
+
+        /**
+         * Set the media type for the [PickVisualMediaRequest].
+         *
+         * The type is the mime type to filter by, e.g. `PickVisualMedia.ImageOnly`,
+         * `PickVisualMedia.ImageAndVideo`, `PickVisualMedia.SingleMimeType("image/gif")`
+         *
+         * @param mediaType type to go into the PickVisualMediaRequest
+         * @return This builder.
+         */
+        fun setMediaType(mediaType: VisualMediaType): Builder {
+            this.mediaType = mediaType
+            return this
+        }
+
+        /**
+         * Build the PickVisualMediaRequest specified by this builder.
+         *
+         * @return the newly constructed PickVisualMediaRequest.
+         */
+        fun build(): PickVisualMediaRequest = PickVisualMediaRequest(mediaType).apply {
+            this.mediaType = mediaType
+        }
+    }
+}
diff --git a/activity/activity/src/main/java/androidx/activity/result/contract/ActivityResultContracts.kt b/activity/activity/src/main/java/androidx/activity/result/contract/ActivityResultContracts.kt
index 52d69d3..134136d 100644
--- a/activity/activity/src/main/java/androidx/activity/result/contract/ActivityResultContracts.kt
+++ b/activity/activity/src/main/java/androidx/activity/result/contract/ActivityResultContracts.kt
@@ -28,6 +28,7 @@
 import android.provider.MediaStore
 import androidx.activity.result.ActivityResult
 import androidx.activity.result.IntentSenderRequest
+import androidx.activity.result.PickVisualMediaRequest
 import androidx.activity.result.contract.ActivityResultContracts.GetMultipleContents.Companion.getClipDataUris
 import androidx.activity.result.contract.ActivityResultContracts.StartIntentSenderForResult.Companion.ACTION_INTENT_SENDER_REQUEST
 import androidx.activity.result.contract.ActivityResultContracts.StartIntentSenderForResult.Companion.EXTRA_SEND_INTENT_EXCEPTION
@@ -603,8 +604,7 @@
      * An [ActivityResultContract] to use the photo picker through [MediaStore.ACTION_PICK_IMAGES]
      * when available, and else rely on ACTION_OPEN_DOCUMENT.
      *
-     * The input is the mime type to filter by, e.g. `PickVisualMedia.ImageOnly`,
-     * `PickVisualMedia.ImageAndVideo`, `PickVisualMedia.SingleMimeType("image/gif")`.
+     * The input is a [PickVisualMediaRequest].
      *
      * The output is a `Uri` when the user has selected a media or `null` when the user hasn't
      * selected any item. Keep in mind that `Uri` returned by the photo picker isn't writable.
@@ -612,7 +612,7 @@
      * This can be extended to override [createIntent] if you wish to pass additional
      * extras to the Intent created by `super.createIntent()`.
      */
-    open class PickVisualMedia : ActivityResultContract<PickVisualMedia.VisualMediaType, Uri?>() {
+    open class PickVisualMedia : ActivityResultContract<PickVisualMediaRequest, Uri?>() {
         companion object {
             @JvmStatic
             fun isPhotoPickerAvailable(): Boolean {
@@ -638,18 +638,18 @@
         class SingleMimeType(val mimeType: String) : VisualMediaType
 
         @CallSuper
-        override fun createIntent(context: Context, input: VisualMediaType): Intent {
+        override fun createIntent(context: Context, input: PickVisualMediaRequest): Intent {
             // Check if Photo Picker is available on the device
             return if (isPhotoPickerAvailable()) {
                 Intent(MediaStore.ACTION_PICK_IMAGES).apply {
-                    type = getVisualMimeType(input)
+                    type = getVisualMimeType(input.mediaType)
                 }
             } else {
                 // For older devices running KitKat and higher and devices running Android 12
                 // and 13 without the SDK extension that includes the Photo Picker, rely on the
                 // ACTION_OPEN_DOCUMENT intent
                 Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
-                    type = getVisualMimeType(input)
+                    type = getVisualMimeType(input.mediaType)
 
                     if (type == null) {
                         // ACTION_OPEN_DOCUMENT requires to set this parameter when launching the
@@ -663,7 +663,7 @@
 
         final override fun getSynchronousResult(
             context: Context,
-            input: VisualMediaType
+            input: PickVisualMediaRequest
         ): SynchronousResult<Uri?>? = null
 
         final override fun parseResult(resultCode: Int, intent: Intent?): Uri? {
@@ -679,8 +679,7 @@
      * using the photo picker to return. Keep in mind that this parameter isn't supported on devices
      * when the photo picker isn't available.
      *
-     * The input is the mime type to filter by, e.g. `PickVisualMedia.ImageOnly`,
-     * `PickVisualMedia.ImageAndVideo`, `PickVisualMedia.SingleMimeType("image/gif")`.
+     * The input is a [PickVisualMediaRequest].
      *
      * The output is a list `Uri` of the selected media. It can be empty if the user hasn't selected
      * any items. Keep in mind that `Uri` returned by the photo picker aren't writable.
@@ -691,7 +690,7 @@
     @RequiresApi(19)
     open class PickMultipleVisualMedia(
         private val maxItems: Int = getMaxItems()
-    ) : ActivityResultContract<PickVisualMedia.VisualMediaType, List<@JvmSuppressWildcards Uri>>() {
+    ) : ActivityResultContract<PickVisualMediaRequest, List<@JvmSuppressWildcards Uri>>() {
 
         init {
             require(maxItems > 1) {
@@ -700,14 +699,11 @@
         }
 
         @CallSuper
-        override fun createIntent(
-            context: Context,
-            input: PickVisualMedia.VisualMediaType
-        ): Intent {
+        override fun createIntent(context: Context, input: PickVisualMediaRequest): Intent {
             // Check to see if the photo picker is available
             return if (PickVisualMedia.isPhotoPickerAvailable()) {
                 Intent(MediaStore.ACTION_PICK_IMAGES).apply {
-                    type = PickVisualMedia.getVisualMimeType(input)
+                    type = PickVisualMedia.getVisualMimeType(input.mediaType)
 
                     require(maxItems <= MediaStore.getPickImagesMaxLimit()) {
                         "Max items must be less or equals MediaStore.getPickImagesMaxLimit()"
@@ -720,7 +716,7 @@
                 // and 13 without the SDK extension that includes the Photo Picker, rely on the
                 // ACTION_OPEN_DOCUMENT intent
                 Intent(Intent.ACTION_OPEN_DOCUMENT).apply {
-                    type = PickVisualMedia.getVisualMimeType(input)
+                    type = PickVisualMedia.getVisualMimeType(input.mediaType)
                     putExtra(Intent.EXTRA_ALLOW_MULTIPLE, true)
 
                     if (type == null) {
@@ -735,7 +731,7 @@
 
         final override fun getSynchronousResult(
             context: Context,
-            input: PickVisualMedia.VisualMediaType
+            input: PickVisualMediaRequest
         ): SynchronousResult<List<@JvmSuppressWildcards Uri>>? = null
 
         final override fun parseResult(resultCode: Int, intent: Intent?): List<Uri> {
diff --git a/activity/integration-tests/testapp/src/main/java/androidx/activity/integration/testapp/MainActivity.kt b/activity/integration-tests/testapp/src/main/java/androidx/activity/integration/testapp/MainActivity.kt
index a68119b..947be53 100644
--- a/activity/integration-tests/testapp/src/main/java/androidx/activity/integration/testapp/MainActivity.kt
+++ b/activity/integration-tests/testapp/src/main/java/androidx/activity/integration/testapp/MainActivity.kt
@@ -36,6 +36,7 @@
 import androidx.activity.ComponentActivity
 import androidx.activity.result.ActivityResultLauncher
 import androidx.activity.result.IntentSenderRequest
+import androidx.activity.result.PickVisualMediaRequest
 import androidx.activity.result.contract.ActivityResultContracts
 import androidx.activity.result.contract.ActivityResultContracts.CaptureVideo
 import androidx.activity.result.contract.ActivityResultContracts.CreateDocument
@@ -46,7 +47,6 @@
 import androidx.activity.result.contract.ActivityResultContracts.RequestPermission
 import androidx.activity.result.contract.ActivityResultContracts.TakePicture
 import androidx.activity.result.contract.ActivityResultContracts.TakePicturePreview
-import androidx.activity.result.contract.ActivityResultContracts.PickVisualMedia.VisualMediaType
 import androidx.activity.result.launch
 import androidx.activity.result.registerForActivityResult
 import androidx.core.content.FileProvider
@@ -80,9 +80,9 @@
         toast("Got image: $uri")
     }
 
-    lateinit var pickVisualMedia: ActivityResultLauncher<VisualMediaType>
+    lateinit var pickVisualMedia: ActivityResultLauncher<PickVisualMediaRequest>
 
-    lateinit var pickMultipleVisualMedia: ActivityResultLauncher<VisualMediaType>
+    lateinit var pickMultipleVisualMedia: ActivityResultLauncher<PickVisualMediaRequest>
 
     lateinit var createDocument: ActivityResultLauncher<String>
 
@@ -147,13 +147,19 @@
                 }
                 if (android.os.Build.VERSION.SDK_INT >= 19) {
                     button("Pick an image (w/ photo picker)") {
-                        pickVisualMedia.launch(PickVisualMedia.ImageOnly)
+                        pickVisualMedia.launch(
+                            PickVisualMediaRequest(PickVisualMedia.ImageOnly)
+                        )
                     }
                     button("Pick a GIF (w/ photo picker)") {
-                        pickVisualMedia.launch(PickVisualMedia.SingleMimeType("image/gif"))
+                        pickVisualMedia.launch(
+                            PickVisualMediaRequest(PickVisualMedia.SingleMimeType("image/gif"))
+                        )
                     }
                     button("Pick 5 visual media max (w/ photo picker)") {
-                        pickMultipleVisualMedia.launch(PickVisualMedia.ImageAndVideo)
+                        pickMultipleVisualMedia.launch(
+                            PickVisualMediaRequest(PickVisualMedia.ImageAndVideo)
+                        )
                     }
                     button("Create document") {
                         createDocument.launch("Temp")