@@ -24,7 +24,6 @@ import com.petersamokhin.vksdk.android.auth.error.VkAuthException
2424import com.petersamokhin.vksdk.android.auth.model.VkAuthResult
2525import com.petersamokhin.vksdk.android.auth.utils.toMap
2626import kotlinx.parcelize.Parcelize
27- import java.util.WeakHashMap
2827
2928/* *
3029 * VK authorization handler.
@@ -52,8 +51,6 @@ public object VkAuth {
5251 private const val SERVICE_ACTION = " android.support.customtabs.action.CustomTabsService"
5352 private const val CHROME_PACKAGE = " com.android.chrome"
5453
55- private var resultLaunchers: MutableMap <ComponentActivity , ActivityResultLauncher <Intent >> = WeakHashMap ()
56-
5754 /* *
5855 * Register the given activity for auth result.
5956 * See [ComponentActivity.registerForActivityResult]
@@ -65,13 +62,8 @@ public object VkAuth {
6562 @JvmStatic
6663 public fun register (
6764 activity : ComponentActivity ,
68- overrideLaunchersMap : MutableMap <ComponentActivity , ActivityResultLauncher <Intent >>? = null,
6965 listener : (Result <VkAuthResult >) -> Unit ,
70- ) {
71- if (overrideLaunchersMap != null ) {
72- resultLaunchers = overrideLaunchersMap.also { map -> map.putAll(resultLaunchers) }
73- }
74-
66+ ): ActivityResultLauncher <Intent > {
7567 activity.addOnNewIntentListener { intent ->
7668 try {
7769 listener(
@@ -86,7 +78,7 @@ public object VkAuth {
8678 }
8779 }
8880
89- val resultLauncher = activity.registerForActivityResult(
81+ return activity.registerForActivityResult(
9082 /* contract = */ ActivityResultContracts .StartActivityForResult (),
9183 ) { result ->
9284 val vkResult = try {
@@ -105,22 +97,6 @@ public object VkAuth {
10597 listener(Result .failure(VkAuthException (" Failed to parse the VK auth result: $result " )))
10698 }
10799 }
108- resultLaunchers[activity] = resultLauncher
109- }
110-
111- /* *
112- * Unregister the activity result listeners.
113- *
114- * @param activity An activity for which to unregister the listeners.
115- * If null, all listeners will be unregistered.
116- */
117- @JvmStatic
118- public fun unregister (activity : ComponentActivity ? = null) {
119- if (activity != null ) {
120- resultLaunchers.remove(activity)
121- } else {
122- resultLaunchers.clear()
123- }
124100 }
125101
126102 /* *
@@ -173,6 +149,7 @@ public object VkAuth {
173149 @JvmStatic
174150 public fun login (
175151 activity : ComponentActivity ,
152+ launcher : ActivityResultLauncher <Intent >,
176153 authParams : AuthParams ,
177154 mode : AuthMode = AuthMode .Auto ,
178155 ) {
@@ -223,26 +200,20 @@ public object VkAuth {
223200 }
224201
225202 if (intent != null ) {
226- launchLogin(
227- activity = activity,
228- intent = intent,
229- )
203+ launcher.launch(intent)
230204 }
231205 }
232206
233207 ResponseType .Code -> {
234208 Log .w(LOG_TAG , INFO_RESPONSE_TYPE_NOT_SUPPORTED )
235209
236210 when {
237- activity.customTabsSupported() -> {
211+ mode != AuthMode . RequireWebView && activity.customTabsSupported() -> {
238212 activity.startActivity(loadCustomTabsAuthUrlIntent(authParams.asQuery()))
239213 }
240214
241215 else -> {
242- launchLogin(
243- activity = activity,
244- intent = VkAuthActivity .intent(activity, authParams),
245- )
216+ launcher.launch(VkAuthActivity .intent(activity, authParams))
246217 }
247218 }
248219 }
@@ -365,10 +336,6 @@ public object VkAuth {
365336 }
366337 }
367338
368- private fun launchLogin (activity : ComponentActivity , intent : Intent ) {
369- resultLaunchers[activity]?.launch(intent)
370- }
371-
372339 /* *
373340 * Response type: access_token or code
374341 *
0 commit comments