@@ -12,13 +12,17 @@ import android.os.Bundle
12
12
import android.view.LayoutInflater
13
13
import android.view.View
14
14
import android.view.ViewGroup
15
+ import android.widget.TextView
15
16
import androidx.autofill.HintConstants
16
17
import androidx.core.text.isDigitsOnly
17
18
import androidx.core.view.isVisible
18
19
import androidx.lifecycle.lifecycleScope
19
20
import com.airbnb.mvrx.withState
20
21
import com.google.android.material.dialog.MaterialAlertDialogBuilder
21
22
import dagger.hilt.android.AndroidEntryPoint
23
+ import im.vector.app.R
24
+ import im.vector.app.config.Config
25
+ import im.vector.app.config.SunsetConfig
22
26
import im.vector.app.core.extensions.clearErrorOnChange
23
27
import im.vector.app.core.extensions.content
24
28
import im.vector.app.core.extensions.editText
@@ -31,6 +35,9 @@ import im.vector.app.core.extensions.realignPercentagesToParent
31
35
import im.vector.app.core.extensions.setOnFocusLostListener
32
36
import im.vector.app.core.extensions.setOnImeDoneListener
33
37
import im.vector.app.core.extensions.toReducedUrl
38
+ import im.vector.app.core.resources.BuildMeta
39
+ import im.vector.app.core.utils.openApplicationStore
40
+ import im.vector.app.core.utils.openUrlInChromeCustomTab
34
41
import im.vector.app.databinding.FragmentFtueCombinedRegisterBinding
35
42
import im.vector.app.features.login.LoginMode
36
43
import im.vector.app.features.login.SSORedirectRouterActivity
@@ -52,12 +59,14 @@ import org.matrix.android.sdk.api.failure.isRegistrationDisabled
52
59
import org.matrix.android.sdk.api.failure.isUsernameInUse
53
60
import org.matrix.android.sdk.api.failure.isWeakPassword
54
61
import reactivecircus.flowbinding.android.widget.textChanges
62
+ import javax.inject.Inject
55
63
56
64
private const val MINIMUM_PASSWORD_LENGTH = 8
57
65
58
66
@AndroidEntryPoint
59
67
class FtueAuthCombinedRegisterFragment :
60
68
AbstractSSOFtueAuthFragment <FragmentFtueCombinedRegisterBinding >() {
69
+ @Inject lateinit var buildMeta: BuildMeta
61
70
62
71
override fun getBinding (inflater : LayoutInflater , container : ViewGroup ? ): FragmentFtueCombinedRegisterBinding {
63
72
return FragmentFtueCombinedRegisterBinding .inflate(inflater, container, false )
@@ -181,7 +190,8 @@ class FtueAuthCombinedRegisterFragment :
181
190
}
182
191
183
192
private fun setupUi (state : OnboardingViewState ) {
184
- views.selectedServerName.text = state.selectedHomeserver.userFacingUrl.toReducedUrl()
193
+ val serverName = state.selectedHomeserver.userFacingUrl.toReducedUrl()
194
+ views.selectedServerName.text = serverName
185
195
186
196
if (state.isLoading) {
187
197
// Ensure password is hidden
@@ -201,6 +211,47 @@ class FtueAuthCombinedRegisterFragment :
201
211
is LoginMode .SsoAndPassword -> renderSsoProviders(state.deviceId, state.selectedHomeserver.preferredLoginMode)
202
212
else -> hideSsoProviders()
203
213
}
214
+
215
+ (Config .sunsetConfig as ? SunsetConfig .Enabled )?.let { config ->
216
+ val isMasSupportRequired = state.selectedHomeserver.hasOidcCompatibilityFlow
217
+ views.serverSelectionSpacing.isVisible = ! isMasSupportRequired
218
+ views.serverSelectionDivider.isVisible = ! isMasSupportRequired
219
+ views.chooseServerCardErrorMas.isVisible = isMasSupportRequired
220
+ views.chooseServerCardDownloadReplacementApp.isVisible = isMasSupportRequired
221
+
222
+ if (isMasSupportRequired) {
223
+ views.chooseServerCardErrorMas.findViewById<TextView >(R .id.view_card_error_title).text =
224
+ getString(CommonStrings .error_mas_not_supported_title, serverName)
225
+ views.chooseServerCardErrorMas.findViewById<TextView >(R .id.view_card_error_subtitle).text =
226
+ getString(
227
+ CommonStrings .error_mas_not_supported_subtitle,
228
+ config.replacementApplicationName,
229
+ serverName,
230
+ )
231
+ views.chooseServerCardDownloadReplacementApp.findViewById<TextView >(R .id.view_download_replacement_app_title).text =
232
+ getString(CommonStrings .view_download_replacement_app_title, config.replacementApplicationName)
233
+
234
+ views.chooseServerCardDownloadReplacementApp.debouncedClicks {
235
+ openApplicationStore(
236
+ activity = requireActivity(),
237
+ buildMeta = buildMeta,
238
+ appId = config.replacementApplicationId,
239
+ )
240
+ }
241
+ views.chooseServerCardDownloadReplacementApp.findViewById<View >(R .id.view_download_replacement_app_learn_more)?.debouncedClicks {
242
+ openUrlInChromeCustomTab(
243
+ context = requireContext(),
244
+ session = null ,
245
+ url = config.learnMoreLink,
246
+ )
247
+ }
248
+
249
+ // Disable form
250
+ views.createAccountInput.isEnabled = false
251
+ views.createAccountPasswordInput.isEnabled = false
252
+ views.createAccountSubmit.isEnabled = false
253
+ }
254
+ }
204
255
}
205
256
206
257
private fun renderSsoProviders (deviceId : String? , loginMode : LoginMode ) {
0 commit comments