Make register/unregister APIs symmetric

Simplify the API surface for registering and
unregistering ActivityResultCallbacks by removing
suffixes on the register side and renaming
dispose() to unregister() to ensure that developers
link those APIs together.

Test: ./gradlew bOS
Change-Id: I5ea18767a04dc3093a01f31f0c2575fa21c3cd73
diff --git a/activity/activity/api/1.2.0-alpha03.txt b/activity/activity/api/1.2.0-alpha03.txt
index bc415ac..4894f7b 100644
--- a/activity/activity/api/1.2.0-alpha03.txt
+++ b/activity/activity/api/1.2.0-alpha03.txt
@@ -62,8 +62,8 @@
   }
 
   public interface ActivityResultLauncher<I> {
-    method public void dispose();
     method public void launch(I!);
+    method @MainThread public void unregister();
   }
 
   public abstract class ActivityResultRegistry {
@@ -73,9 +73,8 @@
     method @MainThread public abstract <I, O> void invoke(int, androidx.activity.result.contract.ActivityResultContract<I!,O!>, I!);
     method public void onRestoreInstanceState(android.os.Bundle?);
     method public void onSaveInstanceState(android.os.Bundle);
-    method public <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerActivityResultCallback(String, androidx.lifecycle.LifecycleOwner, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
-    method public <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerActivityResultCallback(String, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
-    method @MainThread public void unregisterActivityResultCallback(String);
+    method public <I, O> androidx.activity.result.ActivityResultLauncher<I!> register(String, androidx.lifecycle.LifecycleOwner, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+    method public <I, O> androidx.activity.result.ActivityResultLauncher<I!> register(String, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
   }
 
 }
diff --git a/activity/activity/api/current.txt b/activity/activity/api/current.txt
index bc415ac..4894f7b 100644
--- a/activity/activity/api/current.txt
+++ b/activity/activity/api/current.txt
@@ -62,8 +62,8 @@
   }
 
   public interface ActivityResultLauncher<I> {
-    method public void dispose();
     method public void launch(I!);
+    method @MainThread public void unregister();
   }
 
   public abstract class ActivityResultRegistry {
@@ -73,9 +73,8 @@
     method @MainThread public abstract <I, O> void invoke(int, androidx.activity.result.contract.ActivityResultContract<I!,O!>, I!);
     method public void onRestoreInstanceState(android.os.Bundle?);
     method public void onSaveInstanceState(android.os.Bundle);
-    method public <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerActivityResultCallback(String, androidx.lifecycle.LifecycleOwner, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
-    method public <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerActivityResultCallback(String, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
-    method @MainThread public void unregisterActivityResultCallback(String);
+    method public <I, O> androidx.activity.result.ActivityResultLauncher<I!> register(String, androidx.lifecycle.LifecycleOwner, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+    method public <I, O> androidx.activity.result.ActivityResultLauncher<I!> register(String, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
   }
 
 }
diff --git a/activity/activity/api/public_plus_experimental_1.2.0-alpha03.txt b/activity/activity/api/public_plus_experimental_1.2.0-alpha03.txt
index 499fed0..46af58b 100644
--- a/activity/activity/api/public_plus_experimental_1.2.0-alpha03.txt
+++ b/activity/activity/api/public_plus_experimental_1.2.0-alpha03.txt
@@ -61,8 +61,8 @@
   }
 
   public interface ActivityResultLauncher<I> {
-    method public void dispose();
     method public void launch(I!);
+    method @MainThread public void unregister();
   }
 
   public abstract class ActivityResultRegistry {
@@ -72,9 +72,8 @@
     method @MainThread public abstract <I, O> void invoke(int, androidx.activity.result.contract.ActivityResultContract<I!,O!>, I!);
     method public void onRestoreInstanceState(android.os.Bundle?);
     method public void onSaveInstanceState(android.os.Bundle);
-    method public <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerActivityResultCallback(String, androidx.lifecycle.LifecycleOwner, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
-    method public <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerActivityResultCallback(String, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
-    method @MainThread public void unregisterActivityResultCallback(String);
+    method public <I, O> androidx.activity.result.ActivityResultLauncher<I!> register(String, androidx.lifecycle.LifecycleOwner, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+    method public <I, O> androidx.activity.result.ActivityResultLauncher<I!> register(String, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
   }
 
 }
diff --git a/activity/activity/api/public_plus_experimental_current.txt b/activity/activity/api/public_plus_experimental_current.txt
index 499fed0..46af58b 100644
--- a/activity/activity/api/public_plus_experimental_current.txt
+++ b/activity/activity/api/public_plus_experimental_current.txt
@@ -61,8 +61,8 @@
   }
 
   public interface ActivityResultLauncher<I> {
-    method public void dispose();
     method public void launch(I!);
+    method @MainThread public void unregister();
   }
 
   public abstract class ActivityResultRegistry {
@@ -72,9 +72,8 @@
     method @MainThread public abstract <I, O> void invoke(int, androidx.activity.result.contract.ActivityResultContract<I!,O!>, I!);
     method public void onRestoreInstanceState(android.os.Bundle?);
     method public void onSaveInstanceState(android.os.Bundle);
-    method public <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerActivityResultCallback(String, androidx.lifecycle.LifecycleOwner, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
-    method public <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerActivityResultCallback(String, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
-    method @MainThread public void unregisterActivityResultCallback(String);
+    method public <I, O> androidx.activity.result.ActivityResultLauncher<I!> register(String, androidx.lifecycle.LifecycleOwner, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+    method public <I, O> androidx.activity.result.ActivityResultLauncher<I!> register(String, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
   }
 
 }
diff --git a/activity/activity/api/restricted_1.2.0-alpha03.txt b/activity/activity/api/restricted_1.2.0-alpha03.txt
index 499fed0..46af58b 100644
--- a/activity/activity/api/restricted_1.2.0-alpha03.txt
+++ b/activity/activity/api/restricted_1.2.0-alpha03.txt
@@ -61,8 +61,8 @@
   }
 
   public interface ActivityResultLauncher<I> {
-    method public void dispose();
     method public void launch(I!);
+    method @MainThread public void unregister();
   }
 
   public abstract class ActivityResultRegistry {
@@ -72,9 +72,8 @@
     method @MainThread public abstract <I, O> void invoke(int, androidx.activity.result.contract.ActivityResultContract<I!,O!>, I!);
     method public void onRestoreInstanceState(android.os.Bundle?);
     method public void onSaveInstanceState(android.os.Bundle);
-    method public <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerActivityResultCallback(String, androidx.lifecycle.LifecycleOwner, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
-    method public <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerActivityResultCallback(String, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
-    method @MainThread public void unregisterActivityResultCallback(String);
+    method public <I, O> androidx.activity.result.ActivityResultLauncher<I!> register(String, androidx.lifecycle.LifecycleOwner, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+    method public <I, O> androidx.activity.result.ActivityResultLauncher<I!> register(String, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
   }
 
 }
diff --git a/activity/activity/api/restricted_current.txt b/activity/activity/api/restricted_current.txt
index 499fed0..46af58b 100644
--- a/activity/activity/api/restricted_current.txt
+++ b/activity/activity/api/restricted_current.txt
@@ -61,8 +61,8 @@
   }
 
   public interface ActivityResultLauncher<I> {
-    method public void dispose();
     method public void launch(I!);
+    method @MainThread public void unregister();
   }
 
   public abstract class ActivityResultRegistry {
@@ -72,9 +72,8 @@
     method @MainThread public abstract <I, O> void invoke(int, androidx.activity.result.contract.ActivityResultContract<I!,O!>, I!);
     method public void onRestoreInstanceState(android.os.Bundle?);
     method public void onSaveInstanceState(android.os.Bundle);
-    method public <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerActivityResultCallback(String, androidx.lifecycle.LifecycleOwner, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
-    method public <I, O> androidx.activity.result.ActivityResultLauncher<I!> registerActivityResultCallback(String, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
-    method @MainThread public void unregisterActivityResultCallback(String);
+    method public <I, O> androidx.activity.result.ActivityResultLauncher<I!> register(String, androidx.lifecycle.LifecycleOwner, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
+    method public <I, O> androidx.activity.result.ActivityResultLauncher<I!> register(String, androidx.activity.result.contract.ActivityResultContract<I!,O!>, androidx.activity.result.ActivityResultCallback<O!>);
   }
 
 }
diff --git a/activity/activity/src/androidTest/java/androidx/activity/result/ActivityResultRegistryTest.kt b/activity/activity/src/androidTest/java/androidx/activity/result/ActivityResultRegistryTest.kt
index 6ac249a..fe33641 100644
--- a/activity/activity/src/androidTest/java/androidx/activity/result/ActivityResultRegistryTest.kt
+++ b/activity/activity/src/androidTest/java/androidx/activity/result/ActivityResultRegistryTest.kt
@@ -37,7 +37,7 @@
 
     @Test
     fun testOnRestoreInstanceState() {
-        registry.registerActivityResultCallback("key", StartActivityForResult()) {}
+        registry.register("key", StartActivityForResult()) {}
 
         val savedState = Bundle()
         registry.onSaveInstanceState(savedState)
diff --git a/activity/activity/src/main/java/androidx/activity/ComponentActivity.java b/activity/activity/src/main/java/androidx/activity/ComponentActivity.java
index 8cfdc7e..2d3bcec 100644
--- a/activity/activity/src/main/java/androidx/activity/ComponentActivity.java
+++ b/activity/activity/src/main/java/androidx/activity/ComponentActivity.java
@@ -488,7 +488,7 @@
             @NonNull final ActivityResultContract<I, O> contract,
             @NonNull final ActivityResultRegistry registry,
             @NonNull final ActivityResultCallback<O> callback) {
-        return registry.registerActivityResultCallback(
+        return registry.register(
                 "activity_rq#" + mNextLocalRequestCode.getAndIncrement(), this, contract, callback);
     }
 
diff --git a/activity/activity/src/main/java/androidx/activity/result/ActivityResultLauncher.java b/activity/activity/src/main/java/androidx/activity/result/ActivityResultLauncher.java
index f056c1aa..60d302b 100644
--- a/activity/activity/src/main/java/androidx/activity/result/ActivityResultLauncher.java
+++ b/activity/activity/src/main/java/androidx/activity/result/ActivityResultLauncher.java
@@ -20,6 +20,7 @@
 import android.annotation.SuppressLint;
 
 import androidx.activity.result.contract.ActivityResultContract;
+import androidx.annotation.MainThread;
 
 /**
  * A launcher for a prevoiusly-{@link ActivityResultCaller#prepareCall prepared call} to start
@@ -37,11 +38,12 @@
     void launch(@SuppressLint("UnknownNullness") I input);
 
     /**
-     * Disposes of this launcher, releasing the underlying result callback, and any references
+     * Unregisters this launcher, releasing the underlying result callback, and any references
      * captured within it.
      *
      * You should call this if the registry may live longer than the callback registered for this
      * launcher.
      */
-    void dispose();
+    @MainThread
+    void unregister();
 }
diff --git a/activity/activity/src/main/java/androidx/activity/result/ActivityResultRegistry.java b/activity/activity/src/main/java/androidx/activity/result/ActivityResultRegistry.java
index 2ba6f09..3180ed6 100644
--- a/activity/activity/src/main/java/androidx/activity/result/ActivityResultRegistry.java
+++ b/activity/activity/src/main/java/androidx/activity/result/ActivityResultRegistry.java
@@ -94,7 +94,7 @@
      * @return a launcher that can be used to execute an ActivityResultContract.
      */
     @NonNull
-    public <I, O> ActivityResultLauncher<I> registerActivityResultCallback(
+    public <I, O> ActivityResultLauncher<I> register(
             @NonNull final String key,
             @NonNull final LifecycleOwner lifecycleOwner,
             @NonNull final ActivityResultContract<I, O> contract,
@@ -133,7 +133,7 @@
             public void onStateChanged(@NonNull LifecycleOwner lifecycleOwner,
                     @NonNull Lifecycle.Event event) {
                 if (Lifecycle.Event.ON_DESTROY.equals(event)) {
-                    unregisterActivityResultCallback(key);
+                    unregister(key);
                 }
             }
         });
@@ -145,8 +145,8 @@
             }
 
             @Override
-            public void dispose() {
-                unregisterActivityResultCallback(key);
+            public void unregister() {
+                ActivityResultRegistry.this.unregister(key);
             }
         };
     }
@@ -157,9 +157,9 @@
      * This is normally called by a higher level convenience methods like
      * {@link ActivityResultCaller#prepareCall}.
      *
-     * When calling this, make sure to call {@link #unregisterActivityResultCallback} when the
-     * launcher is no longer needed to release any values that might be captured in the
-     * registered callback.
+     * When calling this, you must call {@link ActivityResultLauncher#unregister()} on the
+     * returned {@link ActivityResultLauncher} when the launcher is no longer needed to
+     * release any values that might be captured in the registered callback.
      *
      * @param key a unique string key identifying this call
      * @param contract the contract specifying input/output types of the call
@@ -168,7 +168,7 @@
      * @return a launcher that can be used to execute an ActivityResultContract.
      */
     @NonNull
-    public <I, O> ActivityResultLauncher<I> registerActivityResultCallback(
+    public <I, O> ActivityResultLauncher<I> register(
             @NonNull final String key,
             @NonNull final ActivityResultContract<I, O> contract,
             @NonNull final ActivityResultCallback<O> callback) {
@@ -190,19 +190,20 @@
             }
 
             @Override
-            public void dispose() {
-                unregisterActivityResultCallback(key);
+            public void unregister() {
+                ActivityResultRegistry.this.unregister(key);
             }
         };
     }
 
     /**
-     * Unregister a callback previously registered with {@link #registerActivityResultCallback}
+     * Unregister a callback previously registered with {@link #register}. This shouldn't be
+     * called directly, but instead through {@link ActivityResultLauncher#unregister()}.
      *
      * @param key the unique key used when registering a callback.
      */
     @MainThread
-    public void unregisterActivityResultCallback(@NonNull String key) {
+    void unregister(@NonNull String key) {
         Integer rc = mKeyToRc.remove(key);
         if (rc != null) {
             mRcToKey.remove(rc);
diff --git a/fragment/fragment/src/main/java/androidx/fragment/app/Fragment.java b/fragment/fragment/src/main/java/androidx/fragment/app/Fragment.java
index 678a6b2..ef20c55 100644
--- a/fragment/fragment/src/main/java/androidx/fragment/app/Fragment.java
+++ b/fragment/fragment/src/main/java/androidx/fragment/app/Fragment.java
@@ -3134,7 +3134,7 @@
                 if (Lifecycle.Event.ON_CREATE.equals(event)) {
                     ref.set(getActivity()
                             .getActivityResultRegistry()
-                            .registerActivityResultCallback(
+                            .register(
                                     key, Fragment.this, contract, callback));
                 }
             }
@@ -3152,10 +3152,10 @@
             }
 
             @Override
-            public void dispose() {
+            public void unregister() {
                 ActivityResultLauncher<I> delegate = ref.getAndSet(null);
                 if (delegate != null) {
-                    delegate.dispose();
+                    delegate.unregister();
                 }
             }
         };
@@ -3172,7 +3172,7 @@
             @NonNull final ActivityResultContract<I, O> contract,
             @NonNull ActivityResultRegistry registry,
             @NonNull final ActivityResultCallback<O> callback) {
-        return registry.registerActivityResultCallback(
+        return registry.register(
                 generateActivityResultKey(), this, contract, callback);
     }