From 488642a89df36441ce8f2d5391f081b6a2ae9681 Mon Sep 17 00:00:00 2001 From: Sunik Kupfer Date: Fri, 17 May 2024 12:32:39 +0200 Subject: [PATCH] Minor changes - Use boolean to decide on skipping startPage - Move login type selection logic to login types provider --- .../at/bitfire/davdroid/ui/setup/LoginActivity.kt | 13 ++++--------- .../at/bitfire/davdroid/ui/setup/LoginScreen.kt | 4 ++-- .../bitfire/davdroid/ui/setup/LoginScreenModel.kt | 9 +++++++-- .../bitfire/davdroid/ui/setup/LoginTypesProvider.kt | 6 +++++- .../kotlin/at/bitfire/davdroid/OseFlavorModule.kt | 6 +++--- .../davdroid/ui/setup/StandardLoginTypesProvider.kt | 4 ++-- 6 files changed, 23 insertions(+), 19 deletions(-) diff --git a/app/src/main/kotlin/at/bitfire/davdroid/ui/setup/LoginActivity.kt b/app/src/main/kotlin/at/bitfire/davdroid/ui/setup/LoginActivity.kt index 8d6983822..3822bfcb1 100644 --- a/app/src/main/kotlin/at/bitfire/davdroid/ui/setup/LoginActivity.kt +++ b/app/src/main/kotlin/at/bitfire/davdroid/ui/setup/LoginActivity.kt @@ -108,22 +108,17 @@ class LoginActivity @Inject constructor(): AppCompatActivity() { } + @Inject lateinit var loginTypesProvider: LoginTypesProvider + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - var initialLoginType: LoginType = UrlLogin - var startPage: LoginScreenModel.Page = LoginScreenModel.Page.LoginType - - // Login flow from nextcloud app, via intent - if (intent.hasExtra(EXTRA_LOGIN_FLOW)) { - initialLoginType = NextcloudLogin - startPage = LoginScreenModel.Page.LoginDetails - } + val (initialLoginType, skipLoginTypePage) = loginTypesProvider.intentToInitialLoginType(intent) setContent { LoginScreen( - startPage = startPage, initialLoginType = initialLoginType, + skipLoginTypePage = skipLoginTypePage, initialLoginInfo = loginInfoFromIntent(intent), onNavUp = { onSupportNavigateUp() }, onFinish = { newAccount -> diff --git a/app/src/main/kotlin/at/bitfire/davdroid/ui/setup/LoginScreen.kt b/app/src/main/kotlin/at/bitfire/davdroid/ui/setup/LoginScreen.kt index 4ac07a9b5..932122b91 100644 --- a/app/src/main/kotlin/at/bitfire/davdroid/ui/setup/LoginScreen.kt +++ b/app/src/main/kotlin/at/bitfire/davdroid/ui/setup/LoginScreen.kt @@ -33,14 +33,14 @@ import at.bitfire.davdroid.ui.AppTheme @Composable fun LoginScreen( - startPage: LoginScreenModel.Page = LoginScreenModel.Page.LoginType, initialLoginInfo: LoginInfo = LoginInfo(), + skipLoginTypePage: Boolean = false, initialLoginType: LoginType = UrlLogin, onNavUp: () -> Unit, onFinish: (Account?) -> Unit ) { val model: LoginScreenModel = hiltViewModel { factory: LoginScreenModel.Factory -> - factory.create(startPage, initialLoginInfo, initialLoginType) + factory.create(skipLoginTypePage, initialLoginInfo, initialLoginType) } // handle back/up navigation diff --git a/app/src/main/kotlin/at/bitfire/davdroid/ui/setup/LoginScreenModel.kt b/app/src/main/kotlin/at/bitfire/davdroid/ui/setup/LoginScreenModel.kt index 691a78f56..7b5928917 100644 --- a/app/src/main/kotlin/at/bitfire/davdroid/ui/setup/LoginScreenModel.kt +++ b/app/src/main/kotlin/at/bitfire/davdroid/ui/setup/LoginScreenModel.kt @@ -33,7 +33,7 @@ import kotlinx.coroutines.withContext @HiltViewModel(assistedFactory = LoginScreenModel.Factory::class) class LoginScreenModel @AssistedInject constructor( - @Assisted val startPage: Page, + @Assisted val skipLoginTypePage: Boolean, @Assisted val initialLoginInfo: LoginInfo, @Assisted val initialLoginType: LoginType, val context: Application, @@ -45,7 +45,7 @@ class LoginScreenModel @AssistedInject constructor( @AssistedFactory interface Factory { fun create( - startPage: Page, + skipLoginTypePage: Boolean, initialLoginInfo: LoginInfo, initialLoginType: LoginType ): LoginScreenModel @@ -58,6 +58,11 @@ class LoginScreenModel @AssistedInject constructor( AccountDetails } + private val startPage = if (skipLoginTypePage) + Page.LoginDetails + else + Page.LoginType + var page by mutableStateOf(startPage) private set diff --git a/app/src/main/kotlin/at/bitfire/davdroid/ui/setup/LoginTypesProvider.kt b/app/src/main/kotlin/at/bitfire/davdroid/ui/setup/LoginTypesProvider.kt index 1cf9e3a89..e8ee643a1 100644 --- a/app/src/main/kotlin/at/bitfire/davdroid/ui/setup/LoginTypesProvider.kt +++ b/app/src/main/kotlin/at/bitfire/davdroid/ui/setup/LoginTypesProvider.kt @@ -12,7 +12,11 @@ interface LoginTypesProvider { val defaultLoginType: LoginType - fun intentToInitialLoginType(intent: Intent): LoginType + /** + * Which login type to use and whether to skip the login type selection page. Used for Nextcloud + * login flow. May be used by other login flows. + */ + fun intentToInitialLoginType(intent: Intent): Pair = Pair(defaultLoginType, false) /** Whether the [LoginTypePage] may be non-interactive. This causes it to be skipped in back navigation. */ val maybeNonInteractive: Boolean diff --git a/app/src/ose/kotlin/at/bitfire/davdroid/OseFlavorModule.kt b/app/src/ose/kotlin/at/bitfire/davdroid/OseFlavorModule.kt index 8412948ec..3efcf73f0 100644 --- a/app/src/ose/kotlin/at/bitfire/davdroid/OseFlavorModule.kt +++ b/app/src/ose/kotlin/at/bitfire/davdroid/OseFlavorModule.kt @@ -8,8 +8,6 @@ import at.bitfire.davdroid.ui.AboutActivity import at.bitfire.davdroid.ui.AccountsDrawerHandler import at.bitfire.davdroid.ui.OpenSourceLicenseInfoProvider import at.bitfire.davdroid.ui.OseAccountsDrawerHandler -import at.bitfire.davdroid.ui.intro.BatteryOptimizationsPage -import at.bitfire.davdroid.ui.intro.IntroPage import at.bitfire.davdroid.ui.intro.IntroPageFactory import at.bitfire.davdroid.ui.setup.LoginTypesProvider import at.bitfire.davdroid.ui.setup.StandardLoginTypesProvider @@ -19,7 +17,6 @@ import dagger.hilt.InstallIn import dagger.hilt.android.components.ActivityComponent import dagger.hilt.android.components.ViewModelComponent import dagger.hilt.components.SingletonComponent -import dagger.multibindings.IntoSet interface OseFlavorModules { @@ -28,6 +25,9 @@ interface OseFlavorModules { interface ForActivities { @Binds fun accountsDrawerHandler(impl: OseAccountsDrawerHandler): AccountsDrawerHandler + + @Binds + fun loginTypesProvider(impl: StandardLoginTypesProvider): LoginTypesProvider } @Module diff --git a/app/src/ose/kotlin/at/bitfire/davdroid/ui/setup/StandardLoginTypesProvider.kt b/app/src/ose/kotlin/at/bitfire/davdroid/ui/setup/StandardLoginTypesProvider.kt index ee86ce5f3..abe609821 100644 --- a/app/src/ose/kotlin/at/bitfire/davdroid/ui/setup/StandardLoginTypesProvider.kt +++ b/app/src/ose/kotlin/at/bitfire/davdroid/ui/setup/StandardLoginTypesProvider.kt @@ -28,9 +28,9 @@ class StandardLoginTypesProvider @Inject constructor() : LoginTypesProvider { override fun intentToInitialLoginType(intent: Intent) = if (intent.hasExtra(LoginActivity.EXTRA_LOGIN_FLOW)) - NextcloudLogin + Pair(NextcloudLogin, true) else - UrlLogin + Pair(defaultLoginType, false) @Composable override fun LoginTypePage(