Skip to content
Snippets Groups Projects
Commit e613f078 authored by Taras's avatar Taras
Browse files

Merge branch 'feature/signup_server_select' into develop

parents 348a964f 40362340
No related branches found
No related tags found
No related merge requests found
Showing
with 357 additions and 177 deletions
...@@ -72,6 +72,7 @@ native <methods>; ...@@ -72,6 +72,7 @@ native <methods>;
-keep class org.futo.circles.core.model.InviteTypeArg -keep class org.futo.circles.core.model.InviteTypeArg
-keep class org.futo.circles.core.model.ShareUrlTypeArg -keep class org.futo.circles.core.model.ShareUrlTypeArg
-keep class org.futo.circles.model.PeopleCategoryTypeArg -keep class org.futo.circles.model.PeopleCategoryTypeArg
-keep class org.futo.circles.auth.model.ServerDomainArg
-keepattributes SourceFile,LineNumberTable # Keep file names and line numbers. -keepattributes SourceFile,LineNumberTable # Keep file names and line numbers.
-keep public class * extends java.lang.Exception # Optional: Keep custom exceptions. -keep public class * extends java.lang.Exception # Optional: Keep custom exceptions.
......
...@@ -55,10 +55,8 @@ class App : Application() { ...@@ -55,10 +55,8 @@ class App : Application() {
) )
.appName(getString(R.string.app_name)) .appName(getString(R.string.app_name))
.serverDomains( .serverDomains(
applicationContext.resources.getStringArray( if (BuildConfig.DEBUG) getString(R.string.debug_us_domain) else getString(R.string.release_us_domain),
if (BuildConfig.DEBUG) R.array.debug_domains if (BuildConfig.DEBUG) getString(R.string.debug_matrix_domain) else getString(R.string.release_eu_domain)
else R.array.release_domains
).toList()
) )
.privacyPolicyUrl(getString(R.string.privacy_policy_url)) .privacyPolicyUrl(getString(R.string.privacy_policy_url))
.changeLog(getString(R.string.changelog)) .changeLog(getString(R.string.changelog))
......
...@@ -121,16 +121,12 @@ Or, think about all of your friends across all of the places you\'ve ever lived. ...@@ -121,16 +121,12 @@ Or, think about all of your friends across all of the places you\'ve ever lived.
- Bug fixes and performance improvements - Bug fixes and performance improvements
</string> </string>
<string name="debug_us_domain" translatable="false">us.circles-dev.net</string>
<string name="debug_matrix_domain" translatable="false">matrix.org</string>
<string-array name="debug_domains"> <string name="release_us_domain" translatable="false">circles.futo.org</string>
<item>us.circles-dev.net</item> <string name="release_eu_domain" translatable="false">eu.circles.futo.org</string>
<item>matrix.org</item>
</string-array>
<string-array name="release_domains">
<item>circles.futo.org</item>
<item>eu.circles.futo.org</item>
</string-array>
<string-array name="report_categories"> <string-array name="report_categories">
<item>@string/crude_language</item> <item>@string/crude_language</item>
......
...@@ -39,7 +39,7 @@ class LogInFragment : BaseBindingFragment<FragmentLogInBinding>(FragmentLogInBin ...@@ -39,7 +39,7 @@ class LogInFragment : BaseBindingFragment<FragmentLogInBinding>(FragmentLogInBin
ArrayAdapter( ArrayAdapter(
requireContext(), requireContext(),
android.R.layout.simple_dropdown_item_1line, android.R.layout.simple_dropdown_item_1line,
CirclesAppConfig.serverDomains CirclesAppConfig.serverDomains()
) )
} }
...@@ -70,11 +70,11 @@ class LogInFragment : BaseBindingFragment<FragmentLogInBinding>(FragmentLogInBin ...@@ -70,11 +70,11 @@ class LogInFragment : BaseBindingFragment<FragmentLogInBinding>(FragmentLogInBin
setAdapter(autocompleteAdapter) setAdapter(autocompleteAdapter)
onFocusChangeListener = OnFocusChangeListener { _, hasFocus -> onFocusChangeListener = OnFocusChangeListener { _, hasFocus ->
tilDomain.hint = tilDomain.hint =
if (!hasFocus && tvDomain.text.isEmpty()) CirclesAppConfig.serverDomains.first() if (!hasFocus && tvDomain.text.isEmpty()) CirclesAppConfig.serverDomains().first()
else getString(R.string.domain) else getString(R.string.domain)
} }
} }
tilDomain.hint = CirclesAppConfig.serverDomains.first() tilDomain.hint = CirclesAppConfig.serverDomains().first()
rvSwitchUsers.apply { rvSwitchUsers.apply {
adapter = switchUsersAdapter adapter = switchUsersAdapter
addItemDecoration(BaseRvDecoration.OffsetDecoration<SwitchUsersViewHolder>(16)) addItemDecoration(BaseRvDecoration.OffsetDecoration<SwitchUsersViewHolder>(16))
...@@ -113,7 +113,7 @@ class LogInFragment : BaseBindingFragment<FragmentLogInBinding>(FragmentLogInBin ...@@ -113,7 +113,7 @@ class LogInFragment : BaseBindingFragment<FragmentLogInBinding>(FragmentLogInBin
private fun setOnClickActions() { private fun setOnClickActions() {
with(binding) { with(binding) {
btnSignUp.setOnClickListener { btnSignUp.setOnClickListener {
findNavController().navigateSafe(LogInFragmentDirections.toSignUpFragment()) findNavController().navigateSafe(LogInFragmentDirections.toSelectServerBottomSheet())
} }
btnLogin.setOnClickListener { startLogin(false) } btnLogin.setOnClickListener { startLogin(false) }
btnForgotPassword.setOnClickListener { btnForgotPassword.setOnClickListener {
...@@ -133,5 +133,5 @@ class LogInFragment : BaseBindingFragment<FragmentLogInBinding>(FragmentLogInBin ...@@ -133,5 +133,5 @@ class LogInFragment : BaseBindingFragment<FragmentLogInBinding>(FragmentLogInBin
} }
private fun getDomain() = binding.tvDomain.text.toString().takeIf { it.isNotEmpty() } private fun getDomain() = binding.tvDomain.text.toString().takeIf { it.isNotEmpty() }
?: CirclesAppConfig.serverDomains.first() ?: CirclesAppConfig.serverDomains().first()
} }
\ No newline at end of file
package org.futo.circles.auth.feature.log_in.select_server
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.navigation.fragment.findNavController
import dagger.hilt.android.AndroidEntryPoint
import org.futo.circles.auth.databinding.BottomSheetSelectServerBinding
import org.futo.circles.auth.model.ServerDomainArg
import org.futo.circles.core.base.fragment.TransparentBackgroundBottomSheetDialogFragment
import org.futo.circles.core.extensions.navigateSafe
@AndroidEntryPoint
class SelectServerBottomSheet : TransparentBackgroundBottomSheetDialogFragment() {
private var binding: BottomSheetSelectServerBinding? = null
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
): View? {
binding = BottomSheetSelectServerBinding.inflate(inflater, container, false)
return binding?.root
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
setupViews()
}
private fun setupViews() {
binding?.lUsServer?.setOnClickListener {
findNavController().navigateSafe(
SelectServerBottomSheetDirections.toSignUpFragment(ServerDomainArg.US)
)
}
binding?.lEuServer?.setOnClickListener {
findNavController().navigateSafe(
SelectServerBottomSheetDirections.toSignUpFragment(ServerDomainArg.EU)
)
}
binding?.btnCancel?.setOnClickListener { dismiss() }
}
override fun onDestroyView() {
super.onDestroyView()
binding = null
}
}
\ No newline at end of file
...@@ -2,19 +2,16 @@ package org.futo.circles.auth.feature.sign_up ...@@ -2,19 +2,16 @@ package org.futo.circles.auth.feature.sign_up
import android.os.Bundle import android.os.Bundle
import android.view.View import android.view.View
import android.widget.RadioButton
import androidx.core.view.children
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.viewModels import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.findNavController
import com.google.android.material.radiobutton.MaterialRadioButton
import dagger.hilt.android.AndroidEntryPoint import dagger.hilt.android.AndroidEntryPoint
import org.futo.circles.auth.databinding.FragmentSignUpBinding import org.futo.circles.auth.databinding.FragmentSignUpBinding
import org.futo.circles.core.base.CirclesAppConfig
import org.futo.circles.core.base.fragment.BaseBindingFragment import org.futo.circles.core.base.fragment.BaseBindingFragment
import org.futo.circles.core.base.fragment.HasLoadingState import org.futo.circles.core.base.fragment.HasLoadingState
import org.futo.circles.core.extensions.gone import org.futo.circles.core.extensions.gone
import org.futo.circles.core.extensions.navigateSafe import org.futo.circles.core.extensions.navigateSafe
import org.futo.circles.core.extensions.observeData
import org.futo.circles.core.extensions.observeResponse import org.futo.circles.core.extensions.observeResponse
import org.futo.circles.core.extensions.onBackPressed import org.futo.circles.core.extensions.onBackPressed
import org.futo.circles.core.extensions.setIsVisible import org.futo.circles.core.extensions.setIsVisible
...@@ -36,19 +33,6 @@ class SignUpFragment : BaseBindingFragment<FragmentSignUpBinding>(FragmentSignUp ...@@ -36,19 +33,6 @@ class SignUpFragment : BaseBindingFragment<FragmentSignUpBinding>(FragmentSignUp
private fun setupViews() { private fun setupViews() {
with(binding) { with(binding) {
toolbar.setNavigationOnClickListener { onBackPressed() } toolbar.setNavigationOnClickListener { onBackPressed() }
serverDomainGroup.setOnCheckedChangeListener { _, _ ->
setFlowsLoading(true)
viewModel.loadSignupFlowsForDomain(getDomain())
}
CirclesAppConfig.serverDomains.forEach { domain ->
serverDomainGroup.addView(
MaterialRadioButton(requireContext()).apply {
text = domain
textSize = 20f
}
)
}
(serverDomainGroup.children.first() as? RadioButton)?.toggle()
btnSubscription.setOnClickListener { btnSubscription.setOnClickListener {
startLoading(btnSubscription) startLoading(btnSubscription)
viewModel.startSignUp(true) viewModel.startSignUp(true)
...@@ -65,34 +49,22 @@ class SignUpFragment : BaseBindingFragment<FragmentSignUpBinding>(FragmentSignUp ...@@ -65,34 +49,22 @@ class SignUpFragment : BaseBindingFragment<FragmentSignUpBinding>(FragmentSignUp
this, this,
success = { findNavController().navigateSafe(SignUpFragmentDirections.toUiaFragment()) } success = { findNavController().navigateSafe(SignUpFragmentDirections.toUiaFragment()) }
) )
viewModel.signupFlowsLiveData.observeResponse(this, viewModel.signupFlowsLiveData.observeResponse(this,
success = { success = { (hasFree, hasSubscription) ->
val hasSubscriptionFlow = viewModel.hasSubscriptionFlow(it) binding.btnSubscription.setIsVisible(hasSubscription)
val hasFreeFlow = viewModel.hasFreeFlow(it) binding.btnFree.setIsVisible(hasFree)
with(binding) {
btnSubscription.setIsVisible(hasSubscriptionFlow)
btnFree.setIsVisible(hasFreeFlow)
tvOr.setIsVisible(hasFreeFlow && hasSubscriptionFlow)
}
}, },
error = { message -> error = { message ->
showError(message) showError(message)
binding.lButtonsContainer.gone() }
},
onRequestInvoked = { setFlowsLoading(false) }
) )
} viewModel.flowsLoadingData.observeData(this) { isLoading ->
binding.flowProgress.setIsVisible(isLoading)
private fun setFlowsLoading(isLoading: Boolean) { if (isLoading) {
with(binding) { binding.btnSubscription.gone()
lButtonsContainer.setIsVisible(!isLoading) binding.btnFree.gone()
flowProgress.setIsVisible(isLoading) }
} }
} }
private fun getDomain() =
binding.serverDomainGroup
.findViewById<MaterialRadioButton>(binding.serverDomainGroup.checkedRadioButtonId).text.toString()
} }
\ No newline at end of file
package org.futo.circles.auth.feature.sign_up package org.futo.circles.auth.feature.sign_up
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModel
import dagger.hilt.android.lifecycle.HiltViewModel import dagger.hilt.android.lifecycle.HiltViewModel
import org.futo.circles.auth.model.ServerDomainArg
import org.futo.circles.core.base.CirclesAppConfig
import org.futo.circles.core.base.SingleEventLiveData import org.futo.circles.core.base.SingleEventLiveData
import org.futo.circles.core.extensions.Response import org.futo.circles.core.extensions.Response
import org.futo.circles.core.extensions.getOrThrow
import org.futo.circles.core.extensions.launchBg import org.futo.circles.core.extensions.launchBg
import org.matrix.android.sdk.api.auth.registration.Stage import org.matrix.android.sdk.api.auth.registration.Stage
import javax.inject.Inject import javax.inject.Inject
@HiltViewModel @HiltViewModel
class SignUpViewModel @Inject constructor( class SignUpViewModel @Inject constructor(
savedStateHandle: SavedStateHandle,
private val dataSource: SignUpDataSource private val dataSource: SignUpDataSource
) : ViewModel() { ) : ViewModel() {
private val domainArg: ServerDomainArg = savedStateHandle.getOrThrow("domainArg")
val startSignUpEventLiveData = SingleEventLiveData<Response<Unit?>>() val startSignUpEventLiveData = SingleEventLiveData<Response<Unit?>>()
val signupFlowsLiveData = SingleEventLiveData<Response<List<List<Stage>>>>() val signupFlowsLiveData = MutableLiveData<Response<Pair<Boolean, Boolean>>>()
val flowsLoadingData = SingleEventLiveData<Boolean>()
init {
loadSignupFlowsForDomain(getDomain())
}
fun startSignUp(isSubscription: Boolean) { fun startSignUp(isSubscription: Boolean) {
launchBg { launchBg {
...@@ -23,17 +35,29 @@ class SignUpViewModel @Inject constructor( ...@@ -23,17 +35,29 @@ class SignUpViewModel @Inject constructor(
} }
} }
fun loadSignupFlowsForDomain(domain: String) { private fun getDomain() = when (domainArg) {
ServerDomainArg.US -> CirclesAppConfig.usDomain
ServerDomainArg.EU -> CirclesAppConfig.euDomain
}
private fun loadSignupFlowsForDomain(domain: String) {
flowsLoadingData.value = true
launchBg { launchBg {
val result = dataSource.getAuthFlowsFor(domain) val mappedResult = when (val result = dataSource.getAuthFlowsFor(domain)) {
signupFlowsLiveData.postValue(result) is Response.Error -> result
is Response.Success -> Response.Success(
hasFreeFlow(result.data) to hasSubscriptionFlow(result.data)
)
}
flowsLoadingData.postValue(false)
signupFlowsLiveData.postValue(mappedResult)
} }
} }
fun hasSubscriptionFlow(flows: List<List<Stage>>): Boolean = private fun hasSubscriptionFlow(flows: List<List<Stage>>): Boolean =
dataSource.getSubscriptionSignupStages(flows) != null dataSource.getSubscriptionSignupStages(flows) != null
fun hasFreeFlow(flows: List<List<Stage>>): Boolean = private fun hasFreeFlow(flows: List<List<Stage>>): Boolean =
dataSource.getFreeSignupStages(flows) != null dataSource.getFreeSignupStages(flows) != null
} }
\ No newline at end of file
package org.futo.circles.auth.model
enum class ServerDomainArg { US, EU }
\ No newline at end of file
auth/src/main/res/drawable/ic_eu.png

1.69 KiB

auth/src/main/res/drawable/ic_us.png

1.4 KiB

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingHorizontal="8dp"
android:paddingBottom="8dp">
<androidx.cardview.widget.CardView
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardBackgroundColor="@color/post_card_background_color"
app:cardCornerRadius="16dp">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="4dp">
<View
android:layout_width="48dp"
android:layout_height="2dp"
android:layout_gravity="center_horizontal"
android:background="@color/divider_color" />
<TextView
style="@style/title2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_marginVertical="8dp"
android:text="@string/choose_a_server" />
<View
android:layout_width="match_parent"
android:layout_height="@dimen/divider_height"
android:background="@color/divider_color" />
<LinearLayout
android:id="@+id/lUsServer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?selectableItemBackground"
android:gravity="center"
android:orientation="horizontal"
android:paddingVertical="16dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="1dp"
android:layout_marginEnd="8dp"
android:clickable="false"
android:focusable="false"
android:src="@drawable/ic_us" />
<TextView
android:id="@+id/tvUsServer"
style="@style/body"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:clickable="false"
android:focusable="false"
android:text="@string/sign_up_for_us_server"
android:textSize="20sp" />
</LinearLayout>
<View
android:id="@+id/vDivider"
android:layout_width="match_parent"
android:layout_height="@dimen/divider_height"
android:layout_marginHorizontal="8dp"
android:background="@color/divider_color" />
<LinearLayout
android:id="@+id/lEuServer"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="?selectableItemBackground"
android:gravity="center"
android:orientation="horizontal"
android:paddingVertical="16dp">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="1dp"
android:layout_marginEnd="8dp"
android:clickable="false"
android:focusable="false"
android:src="@drawable/ic_eu" />
<TextView
android:id="@+id/tvEuServer"
style="@style/body"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:clickable="false"
android:focusable="false"
android:text="@string/sign_up_for_eu_server"
android:textSize="20sp" />
</LinearLayout>
<com.google.android.material.button.MaterialButton
android:id="@+id/btnCancel"
style="@style/NegativeButtonStyle"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
android:text="@string/cancel" />
</LinearLayout>
</androidx.cardview.widget.CardView>
</FrameLayout>
\ No newline at end of file
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent"> android:layout_height="match_parent"
android:orientation="vertical">
<com.google.android.material.appbar.MaterialToolbar <com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar" android:id="@+id/toolbar"
android:layout_width="0dp" android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize" android:layout_height="?attr/actionBarSize"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:navigationContentDescription="@string/back" app:navigationContentDescription="@string/back"
app:navigationIcon="?attr/homeAsUpIndicator" app:navigationIcon="?attr/homeAsUpIndicator"
app:title="@string/sign_up" app:title="@string/sign_up"
...@@ -19,102 +17,86 @@ ...@@ -19,102 +17,86 @@
<View <View
android:id="@+id/toolbarDivider" android:id="@+id/toolbarDivider"
android:layout_width="0dp" android:layout_width="match_parent"
android:layout_height="@dimen/divider_height" android:layout_height="@dimen/divider_height"
android:background="@color/divider_color" android:background="@color/divider_color" />
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/toolbar" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineLogo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.3" />
<ImageView
android:id="@+id/ivLogo"
style="@style/ImageLogoStyle"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="8dp"
app:layout_constraintBottom_toTopOf="@id/guidelineLogo"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/toolbarDivider" />
<TextView
android:id="@+id/tvServerTitle"
style="@style/headline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/server"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/guidelineLogo" />
<RadioGroup
android:id="@+id/serverDomainGroup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:orientation="vertical"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvServerTitle" />
<LinearLayout
android:id="@+id/lButtonsContainer"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:layout_marginTop="24dp"
android:orientation="vertical"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/serverDomainGroup"
tools:visibility="visible">
<org.futo.circles.core.view.LoadingButton
android:id="@+id/btnFree"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:text="@string/sign_up_for_free" />
<TextView
android:id="@+id/tvOr"
style="@style/headline"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"
android:gravity="center"
android:text="@string/or" />
<org.futo.circles.core.view.LoadingButton
android:id="@+id/btnSubscription"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/sign_up_with_subscription" />
</LinearLayout> <ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true"
android:orientation="vertical">
<ProgressBar
android:id="@+id/flowProgress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/serverDomainGroup"
tools:visibility="visible" />
<androidx.constraintlayout.widget.ConstraintLayout
</androidx.constraintlayout.widget.ConstraintLayout> android:layout_width="match_parent"
\ No newline at end of file android:layout_height="wrap_content">
<ImageView
android:id="@+id/ivLogo"
style="@style/ImageLogoStyle"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHeight_percent="0.35"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/tvTitle"
style="@style/title2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:text="@string/sign_up_for_circles"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/ivLogo" />
<org.futo.circles.core.view.LoadingButton
android:id="@+id/btnFree"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:text="@string/sign_up_for_free"
android:visibility="gone"
app:layout_constraintBottom_toTopOf="@id/btnSubscription"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvTitle"
app:layout_constraintVertical_bias="0.3"
app:layout_constraintVertical_chainStyle="packed" />
<org.futo.circles.core.view.LoadingButton
android:id="@+id/btnSubscription"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginHorizontal="24dp"
android:layout_marginTop="24dp"
android:text="@string/sign_up_with_subscription"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/btnFree" />
<ProgressBar
android:id="@+id/flowProgress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tvTitle"
tools:visibility="visible" />
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
</LinearLayout>
\ No newline at end of file
...@@ -19,8 +19,8 @@ ...@@ -19,8 +19,8 @@
app:popUpTo="@id/logInFragment" app:popUpTo="@id/logInFragment"
app:popUpToInclusive="true" /> app:popUpToInclusive="true" />
<action <action
android:id="@+id/to_signUpFragment" android:id="@+id/to_selectServerBottomSheet"
app:destination="@id/signUpFragment" /> app:destination="@id/selectServerBottomSheet" />
</fragment> </fragment>
<dialog <dialog
...@@ -66,8 +66,29 @@ ...@@ -66,8 +66,29 @@
android:id="@+id/signUpFragment" android:id="@+id/signUpFragment"
android:name="org.futo.circles.auth.feature.sign_up.SignUpFragment" android:name="org.futo.circles.auth.feature.sign_up.SignUpFragment"
tools:layout="@layout/fragment_sign_up"> tools:layout="@layout/fragment_sign_up">
<argument
android:name="domainArg"
app:argType="org.futo.circles.auth.model.ServerDomainArg"
app:nullable="false" />
<action <action
android:id="@+id/to_uiaFragment" android:id="@+id/to_uiaFragment"
app:destination="@id/uiaFragment" /> app:destination="@id/uiaFragment" />
</fragment> </fragment>
<dialog
android:id="@+id/selectServerBottomSheet"
android:name="org.futo.circles.auth.feature.log_in.select_server.SelectServerBottomSheet"
tools:layout="@layout/bottom_sheet_select_server">
<action
android:id="@+id/to_signUpFragment"
app:destination="@id/signUpFragment">
<argument
android:name="domainArg"
app:argType="org.futo.circles.auth.model.ServerDomainArg"
app:nullable="false" />
</action>
</dialog>
</navigation> </navigation>
...@@ -53,7 +53,6 @@ ...@@ -53,7 +53,6 @@
<string name="choose_a_passphrase">Choose a passphrase</string> <string name="choose_a_passphrase">Choose a passphrase</string>
<string name="enter_your_passphrase">Enter your passphrase</string> <string name="enter_your_passphrase">Enter your passphrase</string>
<string name="repeat_passphrase">Repeat passphrase</string> <string name="repeat_passphrase">Repeat passphrase</string>
<string name="server">Server</string>
<string name="sign_up_with_subscription">Sign up with subscription</string> <string name="sign_up_with_subscription">Sign up with subscription</string>
<string name="sign_up_for_free">Sign up for free</string> <string name="sign_up_for_free">Sign up for free</string>
<string name="or">Or</string> <string name="or">Or</string>
...@@ -122,7 +121,11 @@ ...@@ -122,7 +121,11 @@
<string name="please_use_one_of_your_verified_emails_format">Please use one of your verified emails:\n%s</string> <string name="please_use_one_of_your_verified_emails_format">Please use one of your verified emails:\n%s</string>
<string name="display_name">Display name</string> <string name="display_name">Display name</string>
<string name="the_password_you_entered_is_incorrect">The password you entered is incorrect</string> <string name="the_password_you_entered_is_incorrect">The password you entered is incorrect</string>
<string name="choose_a_server">Choose a server</string>
<string name="sign_up_for_us_server">Sign up for US server</string>
<string name="sign_up_for_eu_server">Sign up for EU server</string>
<string name="sign_up_for_circles">Sign up for Circles</string>
<plurals name="days"> <plurals name="days">
<item quantity="one">%1$d day</item> <item quantity="one">%1$d day</item>
<item quantity="many">%1$d days</item> <item quantity="many">%1$d days</item>
......
...@@ -81,7 +81,7 @@ dependencies { ...@@ -81,7 +81,7 @@ dependencies {
kapt("com.google.dagger:hilt-compiler:${rootProject.ext["hilt_version"]}") kapt("com.google.dagger:hilt-compiler:${rootProject.ext["hilt_version"]}")
// Matrix release // Matrix release
api("org.futo.gitlab.circles:matrix-android-sdk:v1.6.10.40@aar") { api("org.futo.gitlab.circles:matrix-android-sdk:v1.6.10.41@aar") {
isTransitive = true isTransitive = true
} }
......
...@@ -17,7 +17,10 @@ object CirclesAppConfig { ...@@ -17,7 +17,10 @@ object CirclesAppConfig {
var appName = "" var appName = ""
private set private set
var serverDomains = emptyList<String>() var usDomain = ""
private set
var euDomain = ""
private set private set
var isMediaBackupEnabled = false var isMediaBackupEnabled = false
...@@ -29,6 +32,8 @@ object CirclesAppConfig { ...@@ -29,6 +32,8 @@ object CirclesAppConfig {
var privacyPolicyUrl = "" var privacyPolicyUrl = ""
private set private set
fun serverDomains() = listOf(usDomain, euDomain)
fun isGplayFlavor(): Boolean = buildFlavourName.contains("gplay", true) fun isGplayFlavor(): Boolean = buildFlavourName.contains("gplay", true)
data class Initializer( data class Initializer(
...@@ -37,7 +42,8 @@ object CirclesAppConfig { ...@@ -37,7 +42,8 @@ object CirclesAppConfig {
private var versionCode: Int? = null, private var versionCode: Int? = null,
private var flavour: String? = null, private var flavour: String? = null,
private var appName: String? = null, private var appName: String? = null,
private var serverDomains: List<String> = emptyList(), private var usDomain: String? = null,
private var euDomain: String? = null,
private var mediaBackupEnabled: Boolean = false, private var mediaBackupEnabled: Boolean = false,
private var changelog: String? = null, private var changelog: String? = null,
private var privacyPolicyUrl: String? = null private var privacyPolicyUrl: String? = null
...@@ -57,7 +63,10 @@ object CirclesAppConfig { ...@@ -57,7 +63,10 @@ object CirclesAppConfig {
fun appName(appName: String) = apply { this.appName = appName } fun appName(appName: String) = apply { this.appName = appName }
fun serverDomains(domains: List<String>) = apply { this.serverDomains = domains } fun serverDomains(usDomain: String, euDomain: String) = apply {
this.usDomain = usDomain
this.euDomain = euDomain
}
fun isMediaBackupEnabled(isEnabled: Boolean) = apply { this.mediaBackupEnabled = isEnabled } fun isMediaBackupEnabled(isEnabled: Boolean) = apply { this.mediaBackupEnabled = isEnabled }
...@@ -82,11 +91,11 @@ object CirclesAppConfig { ...@@ -82,11 +91,11 @@ object CirclesAppConfig {
CirclesAppConfig.appName = appName?.takeIf { it.isNotEmpty() } CirclesAppConfig.appName = appName?.takeIf { it.isNotEmpty() }
?: throw IllegalArgumentException("appName is empty $appName") ?: throw IllegalArgumentException("appName is empty $appName")
CirclesAppConfig.serverDomains = serverDomains.takeIf { it.isNotEmpty() } CirclesAppConfig.usDomain = usDomain?.takeIf { it.isNotEmpty() }
?: throw IllegalArgumentException("Illegal empty server domains") ?: throw IllegalArgumentException("Illegal empty US server domains")
CirclesAppConfig.serverDomains = serverDomains.takeIf { it.isNotEmpty() } CirclesAppConfig.euDomain = euDomain?.takeIf { it.isNotEmpty() }
?: throw IllegalArgumentException("Illegal empty server domains") ?: throw IllegalArgumentException("Illegal empty EU server domains")
CirclesAppConfig.changelog = changelog?.takeIf { it.isNotEmpty() } CirclesAppConfig.changelog = changelog?.takeIf { it.isNotEmpty() }
?: throw IllegalArgumentException("changelog is empty $changelog") ?: throw IllegalArgumentException("changelog is empty $changelog")
......
...@@ -14,6 +14,6 @@ const val DEFAULT_PUSH_GATEWAY = "https://matrix.gateway.unifiedpush.org/_matrix ...@@ -14,6 +14,6 @@ const val DEFAULT_PUSH_GATEWAY = "https://matrix.gateway.unifiedpush.org/_matrix
fun getCirclesDomain(): String { fun getCirclesDomain(): String {
val homeServerUrl = MatrixSessionProvider.currentSession?.sessionParams?.homeServerUrl ?: "" val homeServerUrl = MatrixSessionProvider.currentSession?.sessionParams?.homeServerUrl ?: ""
return CirclesAppConfig.serverDomains.firstOrNull { homeServerUrl.contains(it) } return CirclesAppConfig.serverDomains().firstOrNull { homeServerUrl.contains(it) }
?: CirclesAppConfig.serverDomains.first() ?: CirclesAppConfig.serverDomains().first()
} }
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment