From d2c77a36ec691dd7d2e909f6a73b53123bc9acb5 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Thu, 2 Jan 2025 17:33:09 +0100 Subject: [PATCH 1/5] MAS require Element X --- .../src/main/res/values/strings.xml | 6 ++ .../ui-styles/src/main/res/values/colors.xml | 21 +++++++ .../src/main/res/values/theme_dark.xml | 7 +++ .../src/main/res/values/theme_light.xml | 7 +++ .../main/java/im/vector/app/config/Config.kt | 12 ++++ .../java/im/vector/app/config/SunsetConfig.kt | 46 +++++++++++++++ .../core/utils/ExternalApplicationsUtil.kt | 15 ++++- .../onboarding/MasSupportRequiredException.kt | 19 ++++++ .../onboarding/OnboardingViewModel.kt | 24 ++++++-- ...FtueAuthCombinedServerSelectionFragment.kt | 47 +++++++++++++++ .../drawable-mdpi/replacement_app_icon.png | Bin 0 -> 4423 bytes .../drawable-xhdpi/replacement_app_icon.png | Bin 0 -> 12945 bytes .../drawable-xxhdpi/replacement_app_icon.png | Bin 0 -> 25235 bytes .../src/main/res/drawable/card_background.xml | 17 ++++++ .../res/drawable/card_background_error.xml | 17 ++++++ vector/src/main/res/drawable/ic_error.xml | 9 +++ .../layout/fragment_ftue_combined_login.xml | 3 +- ...ragment_ftue_server_selection_combined.xml | 42 ++++++++++++- .../layout/view_download_replacement_app.xml | 55 ++++++++++++++++++ .../view_error_registration_with_mas.xml | 42 +++++++++++++ 20 files changed, 379 insertions(+), 10 deletions(-) create mode 100644 vector-config/src/main/java/im/vector/app/config/SunsetConfig.kt create mode 100644 vector/src/main/java/im/vector/app/features/onboarding/MasSupportRequiredException.kt create mode 100644 vector/src/main/res/drawable-mdpi/replacement_app_icon.png create mode 100644 vector/src/main/res/drawable-xhdpi/replacement_app_icon.png create mode 100644 vector/src/main/res/drawable-xxhdpi/replacement_app_icon.png create mode 100644 vector/src/main/res/drawable/card_background.xml create mode 100644 vector/src/main/res/drawable/card_background_error.xml create mode 100644 vector/src/main/res/drawable/ic_error.xml create mode 100644 vector/src/main/res/layout/view_download_replacement_app.xml create mode 100644 vector/src/main/res/layout/view_error_registration_with_mas.xml diff --git a/library/ui-strings/src/main/res/values/strings.xml b/library/ui-strings/src/main/res/values/strings.xml index a5daeddc7ac..54d783fc85d 100644 --- a/library/ui-strings/src/main/res/values/strings.xml +++ b/library/ui-strings/src/main/res/values/strings.xml @@ -3641,4 +3641,10 @@ Message in %s Message in room Room/Space + + You can no longer create an account with %1$s using this app + Download %1$s to use %2$s for your account or choose a different homeserver. + Download %1$s + Faster, more secure, and packed with powerful collaboration tools. + diff --git a/library/ui-styles/src/main/res/values/colors.xml b/library/ui-styles/src/main/res/values/colors.xml index 9d8645a7076..5e9bf9062cb 100644 --- a/library/ui-styles/src/main/res/values/colors.xml +++ b/library/ui-styles/src/main/res/values/colors.xml @@ -158,4 +158,25 @@ #EEF8F4 #1D292A + + + #FFF7F6 + #3E0000 + + + #FFC5BC + #710000 + + + #D51928 + #FD3E3C + + + #D51928 + #FD3E3C + + + #1B1D22 + #EBEEF2 + diff --git a/library/ui-styles/src/main/res/values/theme_dark.xml b/library/ui-styles/src/main/res/values/theme_dark.xml index 9afa14caed0..39ec830abda 100644 --- a/library/ui-styles/src/main/res/values/theme_dark.xml +++ b/library/ui-styles/src/main/res/values/theme_dark.xml @@ -55,6 +55,13 @@ ?vctr_system ?vctr_notice_secondary + + @color/vctr_bg_critical_subtle_dark + @color/vctr_border_critical_subtle_dark + @color/vctr_icon_critical_primary_dark + @color/vctr_text_critical_primary_dark + @color/vctr_text_primary_dark + @color/element_accent_dark @color/element_accent_dark diff --git a/library/ui-styles/src/main/res/values/theme_light.xml b/library/ui-styles/src/main/res/values/theme_light.xml index 23782ee34b2..bd397d1bc68 100644 --- a/library/ui-styles/src/main/res/values/theme_light.xml +++ b/library/ui-styles/src/main/res/values/theme_light.xml @@ -55,6 +55,13 @@ ?vctr_system ?vctr_notice_secondary + + @color/vctr_bg_critical_subtle_light + @color/vctr_border_critical_subtle_light + @color/vctr_icon_critical_primary_light + @color/vctr_text_critical_primary_light + @color/vctr_text_primary_light + @color/element_accent_light @color/element_accent_light diff --git a/vector-config/src/main/java/im/vector/app/config/Config.kt b/vector-config/src/main/java/im/vector/app/config/Config.kt index 1bd21dd08e8..d70dd109f4e 100644 --- a/vector-config/src/main/java/im/vector/app/config/Config.kt +++ b/vector-config/src/main/java/im/vector/app/config/Config.kt @@ -97,4 +97,16 @@ object Config { val ER_DEBUG_ANALYTICS_CONFIG = DEBUG_ANALYTICS_CONFIG.copy(sentryEnvironment = "element-r") val SHOW_UNVERIFIED_SESSIONS_ALERT_AFTER_MILLIS = 7.days.inWholeMilliseconds // 1 Week + + /** + * Sunsetting the application. + * Fork maintainers can use this to inform users about their new application if any. Note that you probably also want + * to replace the resource `replacement_app_icon` too. + */ + val sunsetConfig: SunsetConfig = SunsetConfig.Enabled( + // TODO: update this URL. + learnMoreLink = "https://element.io/", + replacementApplicationName = "Element X", + replacementApplicationId = "io.element.android.x", + ) } diff --git a/vector-config/src/main/java/im/vector/app/config/SunsetConfig.kt b/vector-config/src/main/java/im/vector/app/config/SunsetConfig.kt new file mode 100644 index 00000000000..f012ac32a9f --- /dev/null +++ b/vector-config/src/main/java/im/vector/app/config/SunsetConfig.kt @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2025 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.app.config + +sealed interface SunsetConfig { + /** + * Sunsetting the application is disabled. + */ + data object Disabled : SunsetConfig + + /** + * Sunsetting the application is enabled and can be configured by implementing this class. + */ + data class Enabled( + /** + * The URL target to learn more. + */ + val learnMoreLink: String, + + /** + * The replacement application ID. + * Example: for Element application, the replacement application ID is the id of Element X: "Element X". + */ + val replacementApplicationName: String, + + /** + * The replacement application ID. + * Example: for Element App, the replacement application ID is the id of Element X: "io.element.android.x". + */ + val replacementApplicationId: String, + ) : SunsetConfig +} diff --git a/vector/src/main/java/im/vector/app/core/utils/ExternalApplicationsUtil.kt b/vector/src/main/java/im/vector/app/core/utils/ExternalApplicationsUtil.kt index 82271ca23c1..4db340a7230 100644 --- a/vector/src/main/java/im/vector/app/core/utils/ExternalApplicationsUtil.kt +++ b/vector/src/main/java/im/vector/app/core/utils/ExternalApplicationsUtil.kt @@ -32,6 +32,7 @@ import androidx.core.app.ShareCompat import androidx.core.content.FileProvider import androidx.core.content.getSystemService import im.vector.app.R +import im.vector.app.core.resources.BuildMeta import im.vector.app.features.notifications.NotificationUtils import im.vector.app.features.themes.ThemeUtils import im.vector.lib.strings.CommonStrings @@ -367,13 +368,21 @@ private fun addToGallery(savedFile: File, mediaMimeType: String?, context: Conte } /** - * Open the play store to the provided application Id, default to this app. + * Open the play store or the F-Droid to the provided application Id, default to this app. */ -fun openPlayStore(activity: Activity, appId: String) { +fun openApplicationStore( + activity: Activity, + buildMeta: BuildMeta, + appId: String = buildMeta.applicationId, +) { try { activity.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=$appId"))) } catch (activityNotFoundException: ActivityNotFoundException) { - activity.safeStartActivity(Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=$appId"))) + if (buildMeta.flavorDescription == "FDroid") { + activity.safeStartActivity(Intent(Intent.ACTION_VIEW, Uri.parse("https://f-droid.org/packages/$appId"))) + } else { + activity.safeStartActivity(Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=$appId"))) + } } } diff --git a/vector/src/main/java/im/vector/app/features/onboarding/MasSupportRequiredException.kt b/vector/src/main/java/im/vector/app/features/onboarding/MasSupportRequiredException.kt new file mode 100644 index 00000000000..ca6090bd055 --- /dev/null +++ b/vector/src/main/java/im/vector/app/features/onboarding/MasSupportRequiredException.kt @@ -0,0 +1,19 @@ +/* + * Copyright (c) 2025 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.app.features.onboarding + +class MasSupportRequiredException : Exception("Please use replacement app") diff --git a/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewModel.kt b/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewModel.kt index 27f1727641c..54b2c83376e 100644 --- a/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewModel.kt +++ b/vector/src/main/java/im/vector/app/features/onboarding/OnboardingViewModel.kt @@ -12,6 +12,8 @@ import com.airbnb.mvrx.MavericksViewModelFactory import dagger.assisted.Assisted import dagger.assisted.AssistedFactory import dagger.assisted.AssistedInject +import im.vector.app.config.Config +import im.vector.app.config.SunsetConfig import im.vector.app.core.di.ActiveSessionHolder import im.vector.app.core.di.MavericksAssistedViewModelFactory import im.vector.app.core.di.hiltMavericksViewModelFactory @@ -761,7 +763,13 @@ class OnboardingViewModel @AssistedInject constructor( } OnboardingFlow.SignUp -> { updateSignMode(SignMode.SignUp) - internalRegisterAction(RegisterAction.StartRegistration) + if (authResult.selectedHomeserver.hasOidcCompatibilityFlow && Config.sunsetConfig is SunsetConfig.Enabled) { + // An error is displayed now + setState { copy(isLoading = false) } + _viewEvents.post(OnboardingViewEvents.Failure(MasSupportRequiredException())) + } else { + internalRegisterAction(RegisterAction.StartRegistration) + } } OnboardingFlow.SignInSignUp, null -> { @@ -775,9 +783,17 @@ class OnboardingViewModel @AssistedInject constructor( private suspend fun onHomeServerEdited(config: HomeServerConnectionConfig, serverTypeOverride: ServerType?, authResult: StartAuthenticationResult) { when (awaitState().onboardingFlow) { - OnboardingFlow.SignUp -> internalRegisterAction(RegisterAction.StartRegistration) { - updateServerSelection(config, serverTypeOverride, authResult) - _viewEvents.post(OnboardingViewEvents.OnHomeserverEdited) + OnboardingFlow.SignUp -> { + if (authResult.selectedHomeserver.hasOidcCompatibilityFlow && Config.sunsetConfig is SunsetConfig.Enabled) { + // An error is displayed now + setState { copy(isLoading = false) } + _viewEvents.post(OnboardingViewEvents.Failure(MasSupportRequiredException())) + } else { + internalRegisterAction(RegisterAction.StartRegistration) { + updateServerSelection(config, serverTypeOverride, authResult) + _viewEvents.post(OnboardingViewEvents.OnHomeserverEdited) + } + } } OnboardingFlow.SignIn -> { updateServerSelection(config, serverTypeOverride, authResult) diff --git a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthCombinedServerSelectionFragment.kt b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthCombinedServerSelectionFragment.kt index 3f34c6ea686..e43de86c13c 100644 --- a/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthCombinedServerSelectionFragment.kt +++ b/vector/src/main/java/im/vector/app/features/onboarding/ftueauth/FtueAuthCombinedServerSelectionFragment.kt @@ -11,7 +11,12 @@ import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.TextView +import androidx.core.view.isVisible import dagger.hilt.android.AndroidEntryPoint +import im.vector.app.R +import im.vector.app.config.Config +import im.vector.app.config.SunsetConfig import im.vector.app.core.extensions.associateContentStateWith import im.vector.app.core.extensions.clearErrorOnChange import im.vector.app.core.extensions.content @@ -20,20 +25,26 @@ import im.vector.app.core.extensions.realignPercentagesToParent import im.vector.app.core.extensions.setOnImeDoneListener import im.vector.app.core.extensions.showKeyboard import im.vector.app.core.extensions.toReducedUrl +import im.vector.app.core.resources.BuildMeta import im.vector.app.core.utils.ensureProtocol import im.vector.app.core.utils.ensureTrailingSlash +import im.vector.app.core.utils.openApplicationStore +import im.vector.app.core.utils.openUrlInChromeCustomTab import im.vector.app.core.utils.openUrlInExternalBrowser import im.vector.app.databinding.FragmentFtueServerSelectionCombinedBinding +import im.vector.app.features.onboarding.MasSupportRequiredException import im.vector.app.features.onboarding.OnboardingAction import im.vector.app.features.onboarding.OnboardingFlow import im.vector.app.features.onboarding.OnboardingViewEvents import im.vector.app.features.onboarding.OnboardingViewState import im.vector.lib.strings.CommonStrings import org.matrix.android.sdk.api.failure.isHomeserverUnavailable +import javax.inject.Inject @AndroidEntryPoint class FtueAuthCombinedServerSelectionFragment : AbstractFtueAuthFragment() { + @Inject lateinit var buildMeta: BuildMeta override fun getBinding(inflater: LayoutInflater, container: ViewGroup?): FragmentFtueServerSelectionCombinedBinding { return FragmentFtueServerSelectionCombinedBinding.inflate(inflater, container, false) @@ -57,6 +68,22 @@ class FtueAuthCombinedServerSelectionFragment : } views.chooseServerGetInTouch.debouncedClicks { openUrlInExternalBrowser(requireContext(), getString(im.vector.app.config.R.string.ftue_ems_url)) } views.chooseServerSubmit.debouncedClicks { updateServerUrl() } + (Config.sunsetConfig as? SunsetConfig.Enabled)?.let { config -> + views.chooseServerCardDownloadReplacementApp.debouncedClicks { + openApplicationStore( + activity = requireActivity(), + buildMeta = buildMeta, + appId = config.replacementApplicationId, + ) + } + views.chooseServerCardDownloadReplacementApp.findViewById(R.id.view_download_replacement_app_learn_more)?.debouncedClicks { + openUrlInChromeCustomTab( + context = requireContext(), + session = null, + url = config.learnMoreLink, + ) + } + } views.chooseServerInput.clearErrorOnChange(viewLifecycleOwner) } @@ -89,10 +116,30 @@ class FtueAuthCombinedServerSelectionFragment : } override fun onError(throwable: Throwable) { + val isMasSupportRequiredException = throwable is MasSupportRequiredException views.chooseServerInput.error = when { throwable.isHomeserverUnavailable() -> getString(CommonStrings.login_error_homeserver_not_found) + isMasSupportRequiredException -> " " else -> errorFormatter.toHumanReadable(throwable) } + views.chooseServerCardErrorMas.isVisible = isMasSupportRequiredException + views.chooseServerCardDownloadReplacementApp.isVisible = isMasSupportRequiredException + if (isMasSupportRequiredException) { + views.chooseServerSubmit.isEnabled = false + } + val config = Config.sunsetConfig + if (throwable is MasSupportRequiredException && config is SunsetConfig.Enabled) { + views.chooseServerCardErrorMas.findViewById(R.id.view_card_error_title).text = + getString(CommonStrings.error_mas_not_supported_title, views.chooseServerInput.content()) + views.chooseServerCardErrorMas.findViewById(R.id.view_card_error_subtitle).text = + getString( + CommonStrings.error_mas_not_supported_subtitle, + config.replacementApplicationName, + views.chooseServerInput.content(), + ) + views.chooseServerCardDownloadReplacementApp.findViewById(R.id.view_download_replacement_app_title).text = + getString(CommonStrings.view_download_replacement_app_title, config.replacementApplicationName) + } } private fun String.toReducedUrlKeepingSchemaIfInsecure() = toReducedUrl(keepSchema = this.startsWith("http://")) diff --git a/vector/src/main/res/drawable-mdpi/replacement_app_icon.png b/vector/src/main/res/drawable-mdpi/replacement_app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..db4e68bbc22ac098d5373026ff2a76928e73a1a5 GIT binary patch literal 4423 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 N002ovPDHLkV1mB@Oy~dr literal 0 HcmV?d00001 diff --git a/vector/src/main/res/drawable-xhdpi/replacement_app_icon.png b/vector/src/main/res/drawable-xhdpi/replacement_app_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..d8e0864606e5e950997ff0281f1084b4d8a67699 GIT binary patch literal 12945 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 e-)q2hxBnk|)>9wwnAVX10000 + + + + + + + + + + + diff --git a/vector/src/main/res/drawable/card_background_error.xml b/vector/src/main/res/drawable/card_background_error.xml new file mode 100644 index 00000000000..ee43a083397 --- /dev/null +++ b/vector/src/main/res/drawable/card_background_error.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + diff --git a/vector/src/main/res/drawable/ic_error.xml b/vector/src/main/res/drawable/ic_error.xml new file mode 100644 index 00000000000..7ff2b529080 --- /dev/null +++ b/vector/src/main/res/drawable/ic_error.xml @@ -0,0 +1,9 @@ + + + diff --git a/vector/src/main/res/layout/fragment_ftue_combined_login.xml b/vector/src/main/res/layout/fragment_ftue_combined_login.xml index a589ec6f5a2..b7a5fb459d6 100644 --- a/vector/src/main/res/layout/fragment_ftue_combined_login.xml +++ b/vector/src/main/res/layout/fragment_ftue_combined_login.xml @@ -83,7 +83,8 @@ app:layout_constraintBottom_toTopOf="@id/selectedServerDescription" app:layout_constraintEnd_toStartOf="@id/editServerButton" app:layout_constraintStart_toStartOf="@id/loginGutterStart" - app:layout_constraintTop_toBottomOf="@id/chooseYourServerHeader" /> + app:layout_constraintTop_toBottomOf="@id/chooseYourServerHeader" + tools:text="server.org" /> @@ -112,13 +112,51 @@ + + + + + + + + + + + + + app:layout_constraintTop_toBottomOf="@+id/chooseServerCardDownloadReplacementApp" />