Merge branch 'release/v2.27.0'

This commit is contained in:
Arnfried Griesert
2025-12-10 06:26:46 +01:00
14 changed files with 115 additions and 25 deletions

View File

@@ -1,3 +1,10 @@
Changes in BWI project 2.27.0 (2025-12-09)
===================================================
Improvements 🙌:
- MESSENGER-7554 prepare for upcoming migration announcement
- MESSENGER-7861 add reset recovery key to MAS screen
Changes in BWI project 2.26.1 (2025-10-13)
===================================================

View File

@@ -750,8 +750,11 @@
// MARK: migration to new client
// Banner
"bwi_mobile_dialog_m_banner_title" = "Wechsel zum BundesMessengerX";
"bwi_mobileMdialog_m1_banner_text" = "Das ist eine neue, technisch optimierte App vom BuM. Du kannst sie jetzt schon ausprobieren, bevor bald alle wechseln müssen.";
"bwi_mobileMdialog_m1_banner_text_bold" = " Alle deine Kontakte und Nachrichten bleiben dabei erhalten.";
"bwi_mobile_dialog_m1_banner_text" = "Das ist eine neue, technisch optimierte App vom BuM. Du kannst sie jetzt schon ausprobieren, bevor bald alle wechseln müssen.";
"bwi_mobile_dialog_m1_banner_text_bold" = " Alle deine Kontakte und Nachrichten bleiben dabei erhalten.";
"bwi_mobile_dialog_m2_banner_text_prefix" = "Das ist eine neue, technisch optimierte App vom BuM. Du hast nur noch";
"bwi_mobile_dialog_m2_banner_text_bold" = " wenige Tage";
"bwi_mobile_dialog_m2_banner_text_suffix" = " Zeit zu wechseln. Alle deine Kontakte und Nachrichten bleiben dabei erhalten.";
"bwi_mobile_dialog_m_banner_button2" = "Erfahre mehr";
"bwi_mobile_dialog_m_banner_button1" = "Später erinnern";
@@ -776,6 +779,9 @@
"bwi_a11y_close_button" = "Ansicht schließen";
// MARK owner handling
// MARK: owner handling
"room_member_power_level_owner_in" = "Inhaber von %@";
"room_member_power_level_short_owner" = "Inhaber";
// MARK: call event
"bwi_call_event_not_supported" = "Videomeetings werden in dieser App noch nicht unterstützt. Verwende den Webclient.";

View File

@@ -663,8 +663,11 @@
// MARK: migration to new client
// Banner
"bwi_mobile_dialog_m_banner_title" = "Change to BundesMessengerX";
"bwi_mobileMdialog_m1_banner_text" = "This is a new technically optimized app from BuM. You can try it out now before everyone has to switch soon.";
"bwi_mobileMdialog_m1_banner_text_bold" = " All your contacts and messages will be retained.";
"bwi_mobile_dialog_m1_banner_text" = "This is a new technically optimized app from BuM. You can try it out now before everyone has to switch soon.";
"bwi_mobile_dialog_m1_banner_text_bold" = " All your contacts and messages will be retained.";
"bwi_mobile_dialog_m2_banner_text_prefix" = "This is a new technically optimized app from BuM. You only have";
"bwi_mobile_dialog_m2_banner_text_bold" = " a few days";
"bwi_mobile_dialog_m2_banner_text_suffix" = " to switch. All your contacts and messages will be retained.";
"bwi_mobile_dialog_m_banner_button2" = "Learn more";
"bwi_mobile_dialog_m_banner_button1" = "Remember later";
@@ -688,6 +691,10 @@
"bwi_a11y_close_button" = "Close window";
// MARK owner handling
// MARK: owner handling
"room_member_power_level_owner_in" = "Owner in %@";
"room_member_power_level_short_owner" = "Owner";
// MARK: call event
"bwi_call_event_not_supported" = "Video meetings are not yet supported in this app. Please use the web app.";

View File

@@ -26,6 +26,18 @@
</style>
</head>
<body>
<div>
<p>
<b>Version 2.27.0</b>
</p>
<b>Verbesserungen</b>
<ul>
<li/>Wir erleichtern den Übergang zum neuen BundesMessengerX.
<li/>Das Zurücksetzen des Wiederherstellungsschlüssels funktioniert nun auch bei Nutzung des MAS.
</ul>
</div>
<div>
<p>
<b>Version 2.26.0</b>

View File

@@ -187,6 +187,10 @@ public class BWIL10n: NSObject {
public static var bwiAuthRegisterButtonTitle: String {
return BWIL10n.tr("Bwi", "bwi_auth_register_button_title")
}
/// Videomeetings werden in dieser App noch nicht unterstützt. Verwende den Webclient.
public static var bwiCallEventNotSupported: String {
return BWIL10n.tr("Bwi", "bwi_call_event_not_supported")
}
/// Zum App Store
public static var bwiDeprecatedVersionAppstoreButton: String {
return BWIL10n.tr("Bwi", "bwi_deprecated_version_appstore_button")

View File

@@ -14,5 +14,8 @@ Please see LICENSE in the repository root for full details.
@interface WebViewViewController : MXKWebViewViewController
// bwi #7861 we need to enable javascript only for reauthentication
- (void) enableJavascript:(BOOL)enable;
@end

View File

@@ -86,4 +86,12 @@ Please see LICENSE in the repository root for full details.
[super setLocalHTMLFile:localHTMLFile];
}
// bwi #7861 we need to enable javascript only for reauthentication
- (void)enableJavascript:(BOOL)enable {
if (webView) {
webView.configuration.preferences.javaScriptEnabled = enable;
}
}
@end

View File

@@ -53,6 +53,9 @@ NSString *FallBackViewControllerJavascriptOnLogin = @"window.matrixLogin.onLogin
// the user agent to bypass the limitation of Google, as a quick fix (a proper solution will be to use the SSO SDK)
webView.customUserAgent = @"Mozilla/5.0";
// bwi #7861 this webview needs javascript to function on MAS setups
[self enableJavascript:YES];
[self clearCookies];
}

View File

@@ -235,14 +235,17 @@ NSString *const kMXKWebViewViewControllerJavaScriptEnableLog =
canGoBack = (![webView.URL.absoluteString isEqualToString:@"about:blank"]);
}
if (canGoBack)
{
self.navigationItem.rightBarButtonItem = backButton;
}
else
{
// Reset the original state
self.navigationItem.rightBarButtonItems = originalRightBarButtonItems;
// bwi #7861 don't overwrite other barbutton items here
if (self.navigationItem.rightBarButtonItem == nil) {
if (canGoBack)
{
self.navigationItem.rightBarButtonItem = backButton;
}
else
{
// Reset the original state
self.navigationItem.rightBarButtonItems = originalRightBarButtonItems;
}
}
}

View File

@@ -53,10 +53,16 @@ final class ReauthFallBackViewController: AuthFallBackViewController, Themable {
}
private func setupNavigationBar() {
// bwi #7861 change logic to both have a cancel and a close button. We don't need a back button here
let doneBarButtonItem = MXKBarButtonItem(title: VectorL10n.close, style: .plain) { [weak self] in
self?.didValidate?()
}
self.navigationItem.leftBarButtonItem = doneBarButtonItem
self.navigationItem.rightBarButtonItem = doneBarButtonItem
let cancelBarButtonItem = MXKBarButtonItem(title: VectorL10n.cancel, style: .plain) { [weak self] in
self?.didCancel?()
}
self.navigationItem.leftBarButtonItem = cancelBarButtonItem
}
}

View File

@@ -141,19 +141,24 @@ final class ReauthenticationCoordinator: ReauthenticationCoordinatorType {
// NOTE: Prefer use a callback and the same mechanism as SSOAuthentificationSession instead of using custom WKWebView
let reauthFallbackViewController: ReauthFallBackViewController = ReauthFallBackViewController(url: authenticationURL.absoluteString)
reauthFallbackViewController.title = self.parameters.title
reauthFallbackViewController.enableJavascript(true)
reauthFallbackViewController.didCancel = { [weak self] in
guard let self = self else {
return
}
self.delegate?.reauthenticationCoordinatorDidCancel(self)
// bwi #7861 cancel buttons should close the view
self.presentingViewController.dismiss(animated: true)
}
reauthFallbackViewController.didValidate = { [weak self] in
guard let self = self else {
return
}
guard let sessionId = authenticationSession.session else {
self.delegate?.reauthenticationCoordinator(self, didFailWithError: ReauthenticationCoordinatorError.failToBuildPasswordParameters)
return
@@ -161,10 +166,13 @@ final class ReauthenticationCoordinator: ReauthenticationCoordinatorType {
let authenticationParameters = self.authenticationParametersBuilder.buildOAuthParameters(with: sessionId)
self.delegate?.reauthenticationCoordinatorDidComplete(self, withAuthenticationParameters: authenticationParameters)
self.presentingViewController.dismiss(animated: true)
}
let navigationController = RiotNavigationController(rootViewController: reauthFallbackViewController)
// bwi #7861 close buttons should close the view
self.presentingViewController.present(navigationController, animated: true)
}
}

View File

@@ -1,9 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="22505" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="23727" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<device id="retina6_1" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22504"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="23721"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
@@ -95,6 +95,9 @@
</label>
</subviews>
<constraints>
<constraint firstItem="A3h-4o-nXF" firstAttribute="leading" secondItem="iQL-Bn-D9b" secondAttribute="trailing" constant="6" id="EJ7-V4-tar"/>
<constraint firstItem="iQL-Bn-D9b" firstAttribute="leading" relation="greaterThanOrEqual" secondItem="kdm-vj-rsY" secondAttribute="leading" constant="10" id="b6a-y2-NPP"/>
<constraint firstAttribute="trailing" relation="greaterThanOrEqual" secondItem="A3h-4o-nXF" secondAttribute="trailing" constant="10" id="fGT-eM-hrd"/>
<constraint firstAttribute="height" constant="20" id="xI1-oH-QU6"/>
</constraints>
</stackView>

View File

@@ -23,7 +23,9 @@ class RoomMatrixRTCCallCell: RoomCallBaseCell {
room.summary.setRoomAvatarImageIn(innerContentView.avatarImageView)
innerContentView.avatarImageView.defaultBackgroundColor = .clear
innerContentView.callerNameLabel.text = room.summary.displayName
statusText = VectorL10n.callUnsupportedMatrixRtcCall
// BWI #7954 use bwi text for call event
statusText = BWIL10n.bwiCallEventNotSupported
// BWI #7954 END
bottomContentView = nil // Expands the size of the status stack.
}
}

View File

@@ -112,7 +112,16 @@ protocol FeatureBannerDelegate {
struct FeatureBannerView: View {
var delegate: FeatureBannerDelegate?
let darkmodeBackground = UIColor(rgb:0x2394A7)
let warningColor = UIColor(rgb:0xD51928)
var backgroundColor: Color {
if BWIBuildSettings.shared.BuMXMigrationInfoLevel >= 2 {
ThemeService.shared().isCurrentThemeDark() ? Color(uiColor: warningColor) : Color(ThemeService.shared().theme.warningColor)
} else {
ThemeService.shared().isCurrentThemeDark() ? Color(uiColor: darkmodeBackground) : Color(ThemeService.shared().theme.tintColor)
}
}
var body: some View {
VStack(alignment: .center) {
header
@@ -124,7 +133,7 @@ struct FeatureBannerView: View {
}
}
.padding(.horizontal, 12)
.background(ThemeService.shared().isCurrentThemeDark() ? Color(uiColor: darkmodeBackground) : Color(ThemeService.shared().theme.tintColor))
.background(backgroundColor)
.cornerRadius(12)
.padding(16)
}
@@ -145,9 +154,18 @@ struct FeatureBannerView: View {
var advertisementText: some View {
VStack {
Text(BWIL10n.bwiMobileMdialogM1BannerText) +
Text(BWIL10n.bwiMobileMdialogM1BannerTextBold)
.bold()
VStack {
if BWIBuildSettings.shared.BuMXMigrationInfoLevel == 1 {
Text(BWIL10n.bwiMobileDialogM1BannerText) +
Text(BWIL10n.bwiMobileDialogM1BannerTextBold)
.bold()
} else {
Text(BWIL10n.bwiMobileDialogM2BannerTextPrefix) +
Text(BWIL10n.bwiMobileDialogM2BannerTextBold)
.bold() +
Text(BWIL10n.bwiMobileDialogM2BannerTextSuffix)
}
}
}
.font(.system(size: 15))
.multilineTextAlignment(.leading)