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