From bea1d1f3974088378f84f2b3e2cfc40520d120c9 Mon Sep 17 00:00:00 2001 From: Hugh Daschbach Date: Fri, 26 Aug 2022 14:19:53 -0700 Subject: [PATCH] LoginActivity: startActivityForResult deprecated. Migrate startActivityForResult/onActivityResult to StartActivityForResult/registerForActivityResult in LoginActivity/OAuth. This moves responsibility for scheduling the starting Intent from OAuth to LoginActivity. OAuth still generates the Intent. But instead of starting the intent directly in OAuth, the intent is returned to LoginActivity. This better associates processing the activity result with its invocation. OAuthTest module updated to accommodate internal API change. --- .../funkwhale/ffa/activities/LoginActivity.kt | 32 ++++++++----------- .../java/audio/funkwhale/ffa/utils/OAuth.kt | 7 ++-- .../audio/funkwhale/ffa/utils/OAuthTest.kt | 7 ++-- 3 files changed, 20 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/audio/funkwhale/ffa/activities/LoginActivity.kt b/app/src/main/java/audio/funkwhale/ffa/activities/LoginActivity.kt index 333123f..de6e936 100644 --- a/app/src/main/java/audio/funkwhale/ffa/activities/LoginActivity.kt +++ b/app/src/main/java/audio/funkwhale/ffa/activities/LoginActivity.kt @@ -5,6 +5,7 @@ import android.content.res.Configuration import android.net.Uri import android.os.Bundle import android.view.ViewGroup +import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult import androidx.appcompat.app.AppCompatActivity import androidx.core.view.doOnLayout import androidx.lifecycle.lifecycleScope @@ -40,26 +41,21 @@ class LoginActivity : AppCompatActivity() { limitContainerWidth() } - override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { - super.onActivityResult(requestCode, resultCode, data) + private var resultLauncher = + registerForActivityResult(StartActivityForResult()) { result -> + result.data?.let { + oAuth.exchange(this, it) { + PowerPreference + .getFileByName(AppContext.PREFS_CREDENTIALS) + .setBoolean("anonymous", false) - data?.let { - when (requestCode) { - 0 -> { - oAuth.exchange(this, data) { - PowerPreference - .getFileByName(AppContext.PREFS_CREDENTIALS) - .setBoolean("anonymous", false) + lifecycleScope.launch(Main) { + Userinfo.get(this@LoginActivity, oAuth)?.let { + startActivity(Intent(this@LoginActivity, MainActivity::class.java)) - lifecycleScope.launch(Main) { - Userinfo.get(this@LoginActivity, oAuth)?.let { - startActivity(Intent(this@LoginActivity, MainActivity::class.java)) - - return@launch finish() - } - throw Exception(getString(R.string.login_error_userinfo)) - } + return@launch finish() } + throw Exception(getString(R.string.login_error_userinfo)) } } } @@ -134,7 +130,7 @@ class LoginActivity : AppCompatActivity() { oAuth.init(hostname) return oAuth.register { PowerPreference.getFileByName(AppContext.PREFS_CREDENTIALS).setString("hostname", hostname) - oAuth.authorize(this) + resultLauncher.launch(oAuth.authorizeIntent(this)) } } diff --git a/app/src/main/java/audio/funkwhale/ffa/utils/OAuth.kt b/app/src/main/java/audio/funkwhale/ffa/utils/OAuth.kt index 9e21669..19560ed 100644 --- a/app/src/main/java/audio/funkwhale/ffa/utils/OAuth.kt +++ b/app/src/main/java/audio/funkwhale/ffa/utils/OAuth.kt @@ -184,11 +184,10 @@ class OAuth(private val authorizationServiceFactory: AuthorizationServiceFactory ) } - fun authorize(activity: Activity) { + fun authorizeIntent(activity: Activity): Intent? { val authService = service(activity) - authorizationRequest()?.let { it -> - val intent = authService.getAuthorizationRequestIntent(it) - activity.startActivityForResult(intent, 0) + return authorizationRequest()?.let { it -> + authService.getAuthorizationRequestIntent(it) } } diff --git a/app/src/test/java/audio/funkwhale/ffa/utils/OAuthTest.kt b/app/src/test/java/audio/funkwhale/ffa/utils/OAuthTest.kt index b5fb3ef..ca0d498 100644 --- a/app/src/test/java/audio/funkwhale/ffa/utils/OAuthTest.kt +++ b/app/src/test/java/audio/funkwhale/ffa/utils/OAuthTest.kt @@ -27,6 +27,7 @@ import org.junit.Before import org.junit.Test import strikt.api.expectThat import strikt.api.expectThrows +import strikt.assertions.isA import strikt.assertions.isEqualTo import strikt.assertions.isFalse import strikt.assertions.isNotNull @@ -282,7 +283,7 @@ class OAuthTest { } @Test - fun `authorize() should start activity for result`() { + fun `authorizeIntent() should return an Intent`() { mockkStatic(PowerPreference::class) every { PowerPreference.getFileByName(any()) } returns mockPreference @@ -302,9 +303,7 @@ class OAuthTest { val activity = mockk(relaxed = true) - oAuth.authorize(activity) - - verify { activity.startActivityForResult(mockkIntent, 0) } + expectThat(oAuth.authorizeIntent(activity)).isNotNull().isA() } private fun deserializeJson(