diff --git a/.idea/dictionaries/bmarty.xml b/.idea/dictionaries/bmarty.xml index 7c9f6489ee..00c6f6c865 100644 --- a/.idea/dictionaries/bmarty.xml +++ b/.idea/dictionaries/bmarty.xml @@ -17,6 +17,8 @@ msisdn pbkdf pkcs + signin + signup \ No newline at end of file diff --git a/vector/src/main/java/im/vector/riotx/features/login/LoginAction.kt b/vector/src/main/java/im/vector/riotx/features/login/LoginAction.kt index 8192d26a30..d1690f46af 100644 --- a/vector/src/main/java/im/vector/riotx/features/login/LoginAction.kt +++ b/vector/src/main/java/im/vector/riotx/features/login/LoginAction.kt @@ -25,4 +25,5 @@ sealed class LoginAction : VectorViewModelAction { data class SsoLoginSuccess(val credentials: Credentials) : LoginAction() data class InitWith(val loginConfig: LoginConfig) : LoginAction() data class UpdateServerType(val serverType: ServerType) : LoginAction() + data class UpdateSignMode(val signMode: SignMode) : LoginAction() } diff --git a/vector/src/main/java/im/vector/riotx/features/login/LoginActivity.kt b/vector/src/main/java/im/vector/riotx/features/login/LoginActivity.kt index ecf3fa45e2..65db61a1d5 100644 --- a/vector/src/main/java/im/vector/riotx/features/login/LoginActivity.kt +++ b/vector/src/main/java/im/vector/riotx/features/login/LoginActivity.kt @@ -61,6 +61,7 @@ class LoginActivity : VectorBaseActivity() { when (it) { is LoginNavigation.OpenServerSelection -> addFragmentToBackstack(R.id.simpleFragmentContainer, LoginServerSelectionFragment::class.java) is LoginNavigation.OnServerSelectionDone -> onServerSelectionDone() + is LoginNavigation.OnSignModeSelected -> onSignModeSelected() is LoginNavigation.OpenSsoLoginFallback -> addFragmentToBackstack(R.id.simpleFragmentContainer, LoginSsoFallbackFragment::class.java) is LoginNavigation.GoBack -> supportFragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE) } @@ -76,11 +77,15 @@ class LoginActivity : VectorBaseActivity() { } } + private fun onSignModeSelected() { + // TODO + } + private fun onServerSelectionDone() = withState(loginViewModel) { when (it.serverType) { ServerType.MatrixOrg -> addFragmentToBackstack(R.id.simpleFragmentContainer, LoginSignUpSignInSelectionFragment::class.java) ServerType.Modular, - ServerType.Other -> addFragmentToBackstack(R.id.simpleFragmentContainer, LoginEnterHomeServerFragment::class.java) + ServerType.Other -> Unit // TODO addFragmentToBackstack(R.id.simpleFragmentContainer, LoginEnterHomeServerFragment::class.java) } } diff --git a/vector/src/main/java/im/vector/riotx/features/login/LoginNavigation.kt b/vector/src/main/java/im/vector/riotx/features/login/LoginNavigation.kt index 46a6c213d5..6f7fc174d4 100644 --- a/vector/src/main/java/im/vector/riotx/features/login/LoginNavigation.kt +++ b/vector/src/main/java/im/vector/riotx/features/login/LoginNavigation.kt @@ -22,6 +22,7 @@ import im.vector.riotx.core.platform.VectorSharedAction sealed class LoginNavigation : VectorSharedAction { object OpenServerSelection : LoginNavigation() object OnServerSelectionDone : LoginNavigation() + object OnSignModeSelected : LoginNavigation() object OpenSsoLoginFallback : LoginNavigation() object GoBack : LoginNavigation() } diff --git a/vector/src/main/java/im/vector/riotx/features/login/LoginSignUpSignInSelectionFragment.kt b/vector/src/main/java/im/vector/riotx/features/login/LoginSignUpSignInSelectionFragment.kt new file mode 100644 index 0000000000..ad99037f53 --- /dev/null +++ b/vector/src/main/java/im/vector/riotx/features/login/LoginSignUpSignInSelectionFragment.kt @@ -0,0 +1,70 @@ +/* + * Copyright 2019 New Vector Ltd + * + * 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 im.vector.riotx.features.login + +import androidx.core.view.isVisible +import butterknife.OnClick +import com.airbnb.mvrx.withState +import im.vector.riotx.R +import kotlinx.android.synthetic.main.fragment_login_signup_signin_selection.* +import javax.inject.Inject + +/** + * + */ +class LoginSignUpSignInSelectionFragment @Inject constructor() : AbstractLoginFragment() { + + override fun getLayoutResId() = R.layout.fragment_login_signup_signin_selection + + private fun updateViews(serverType: ServerType) { + when (serverType) { + ServerType.MatrixOrg -> { + loginSignupSigninServerIcon.setImageResource(R.drawable.ic_logo_matrix_org) + loginSignupSigninServerIcon.isVisible = true + loginSignupSigninTitle.text = getString(R.string.login_connect_to, "matrix.org") + loginSignupSigninText.text = getString(R.string.login_server_matrix_org_text) + } + ServerType.Modular -> { + loginSignupSigninServerIcon.setImageResource(R.drawable.ic_logo_modular) + loginSignupSigninServerIcon.isVisible = true + loginSignupSigninTitle.text = getString(R.string.login_connect_to, "TODO MODULAR NAME") + loginSignupSigninText.text = "TODO MODULAR URL" + } + ServerType.Other -> { + loginSignupSigninServerIcon.isVisible = false + loginSignupSigninTitle.text = getString(R.string.login_server_other_title) + loginSignupSigninText.text = "TODO SERVER URL" + } + } + } + + @OnClick(R.id.loginSignupSigninSignUp) + fun signUp() { + viewModel.handle(LoginAction.UpdateSignMode(SignMode.SignUp)) + loginSharedActionViewModel.post(LoginNavigation.OnSignModeSelected) + } + + @OnClick(R.id.loginSignupSigninSignIn) + fun signIn() { + viewModel.handle(LoginAction.UpdateSignMode(SignMode.SignIn)) + loginSharedActionViewModel.post(LoginNavigation.OnSignModeSelected) + } + + override fun invalidate() = withState(viewModel) { + updateViews(it.serverType) + } +} diff --git a/vector/src/main/java/im/vector/riotx/features/login/LoginViewModel.kt b/vector/src/main/java/im/vector/riotx/features/login/LoginViewModel.kt index a596603bc6..0dad62a816 100644 --- a/vector/src/main/java/im/vector/riotx/features/login/LoginViewModel.kt +++ b/vector/src/main/java/im/vector/riotx/features/login/LoginViewModel.kt @@ -63,6 +63,7 @@ class LoginViewModel @AssistedInject constructor(@Assisted initialState: LoginVi override fun handle(action: LoginAction) { when (action) { is LoginAction.UpdateServerType -> handleUpdateServerType(action) + is LoginAction.UpdateSignMode -> handleUpdateSignMode(action) is LoginAction.InitWith -> handleInitWith(action) is LoginAction.UpdateHomeServer -> handleUpdateHomeserver(action) is LoginAction.Login -> handleLogin(action) @@ -70,6 +71,14 @@ class LoginViewModel @AssistedInject constructor(@Assisted initialState: LoginVi } } + private fun handleUpdateSignMode(action: LoginAction.UpdateSignMode) { + setState { + copy( + signMode = action.signMode + ) + } + } + private fun handleUpdateServerType(action: LoginAction.UpdateServerType) { setState { copy( diff --git a/vector/src/main/java/im/vector/riotx/features/login/LoginViewState.kt b/vector/src/main/java/im/vector/riotx/features/login/LoginViewState.kt index 5c00614b09..bfa81a55ef 100644 --- a/vector/src/main/java/im/vector/riotx/features/login/LoginViewState.kt +++ b/vector/src/main/java/im/vector/riotx/features/login/LoginViewState.kt @@ -22,6 +22,7 @@ import com.airbnb.mvrx.Uninitialized data class LoginViewState( val serverType: ServerType = ServerType.MatrixOrg, + val signMode: SignMode = SignMode.SignUp, val asyncLoginAction: Async = Uninitialized, val asyncHomeServerLoginFlowRequest: Async = Uninitialized ) : MvRxState diff --git a/vector/src/main/java/im/vector/riotx/features/login/SignMode.kt b/vector/src/main/java/im/vector/riotx/features/login/SignMode.kt new file mode 100644 index 0000000000..e8c9b9a734 --- /dev/null +++ b/vector/src/main/java/im/vector/riotx/features/login/SignMode.kt @@ -0,0 +1,24 @@ +/* + * Copyright 2019 New Vector Ltd + * + * 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 im.vector.riotx.features.login + +enum class SignMode { + // Account creation + SignUp, + // Login + SignIn +} diff --git a/vector/src/main/res/drawable/ic_logo_matrix_org.xml b/vector/src/main/res/drawable/ic_logo_matrix_org.xml new file mode 100644 index 0000000000..13a05fba4f --- /dev/null +++ b/vector/src/main/res/drawable/ic_logo_matrix_org.xml @@ -0,0 +1,30 @@ + + + + + + + + diff --git a/vector/src/main/res/layout/fragment_login_server_selection.xml b/vector/src/main/res/layout/fragment_login_server_selection.xml index 58bc682d2a..3cd7bd3fb9 100644 --- a/vector/src/main/res/layout/fragment_login_server_selection.xml +++ b/vector/src/main/res/layout/fragment_login_server_selection.xml @@ -57,12 +57,11 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/loginServerText"> - + + + + + + + + + + + + + + + + + + + + + + + diff --git a/vector/src/main/res/values/strings_riotX.xml b/vector/src/main/res/values/strings_riotX.xml index 1b92dca1ed..36318ec52d 100644 --- a/vector/src/main/res/values/strings_riotX.xml +++ b/vector/src/main/res/values/strings_riotX.xml @@ -38,5 +38,8 @@ Custom & advanced settings Continue + Connect to %1$s + Sign Up + Sign In diff --git a/vector/src/main/res/values/styles_login.xml b/vector/src/main/res/values/styles_login.xml index ffcd5bc29e..cac4351c3f 100644 --- a/vector/src/main/res/values/styles_login.xml +++ b/vector/src/main/res/values/styles_login.xml @@ -11,4 +11,8 @@ false + + \ No newline at end of file