MESSENGER Release 1.24.0

This commit is contained in:
Frank Rotermund
2022-09-19 12:43:14 +02:00
parent a194ac2fe7
commit 1550ee2a9a
17 changed files with 143 additions and 13 deletions

View File

@@ -1,4 +1,31 @@
Changes in BWI project 1.24.0 (2022-09-08)
===================================================
Upstream merge ✨:
- v1.8.24
Features ✨:
- Chat bubbles
- Closed polls
Improvements 🙌:
- Onboarding for BuM
Bugfix 🐛:
- Crashfix for unusual uploaded files (#3495)
- Fix for clear text notifications (#3493)
- Fix for voice messages continuing in background
Translations 🗣 :
SDK API changes ⚠️:
+Build 🧱:
- Testflight build for MDM (#3382)
- Better separation of string tables (#3304)
Changes in BWI project 1.23.0 (2022-08-02)
===================================================

View File

@@ -495,7 +495,7 @@ final class BuildSettings: NSObject {
static let forgotPasswordInformationAlert : Bool = true
// MARK: Promote new feature within a banner below the navigation view
static let showTopBanner : Bool = false
static let showTopBanner : Bool = true
static let showCustomServerDisplayName : Bool = true
static let customServerDisplayName : String = ""

View File

@@ -258,4 +258,4 @@ SPEC CHECKSUMS:
PODFILE CHECKSUM: 6f433a3973cc99b689d4e62b616b4ea5994dbd79
COCOAPODS: 1.10.1
COCOAPODS: 1.11.3

View File

@@ -4,8 +4,7 @@
version = "1.3">
<BuildAction
parallelizeBuildables = "YES"
buildImplicitDependencies = "YES"
runPostActionsOnFailure = "NO">
buildImplicitDependencies = "YES">
<BuildActionEntries>
<BuildActionEntry
buildForTesting = "YES"

View File

@@ -289,7 +289,7 @@
// MARK: - Secrets Recovery
"secrets_recovery_reset_action_part_1" = "Keine anderen Geräte zur Verfikation verfügbar oder Kennwort vergessen?";
"secrets_recovery_reset_action_part_1" = "Wiederherstellungsschlüssel vergessen?";
"secrets_recovery_reset_action_part_2" = "Verschlüsselungskennwort zurücksetzen";
"secrets_recovery_with_passphrase_recover_action" = "Weiter";
"secrets_recovery_with_passphrase_title" = "Wiederherstellungsschlüssel";

View File

@@ -26,6 +26,34 @@
</style>
</head>
<body>
<div>
<p>
<b>Version 1.24.0</b>
</p>
<p>
<b>Neue Funktionen</b>
<ul>
<li/>Deine Unterhaltungen werden, wie bei anderen bekannten Messengern, in Form von "Chat-Bubbles" angezeigt.
<li/>Beim Erstellen von Umfragen kannst du nun zwischen offenen und geschlossenen Umfragen auswählen. Bei einer geschlossenen Umfrage sind die Ergebnisse erst sichtbar, nachdem die Umfrage vom Ersteller beendet wurde.
</ul>
</p>
<p>
<b>Verbesserungen</b>
<ul>
<li/>Die Rolle Standard wurde umbenannt zu Mitglied.
</ul>
</p>
<p>
<b>Behobene Bugs</b>
<ul>
<li/>Beim Versenden spezieller Dateitypen kann es nicht mehr zu Abstürzen kommen.
</ul>
</p>
</div>
<br>
<div>
<p>
<b>Version 1.23.0</b>

View File

@@ -0,0 +1,29 @@
//
// Copyright 2022 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.
//
import UIKit
extension UITextView {
/// Invalidates display for all text attachment inside the text view.
@objc func vc_invalidateTextAttachmentsDisplay() {
self.attributedText.enumerateAttribute(
.attachment,
in: NSRange(location: 0, length: self.attributedText.length),
options: []) { _, range, _ in
self.layoutManager.invalidateDisplay(forCharacterRange: range)
}
}
}

View File

@@ -975,7 +975,7 @@ public class BWIL10n: NSObject {
public static func searchableDirectoryXNetwork(_ p1: String) -> String {
return BWIL10n.tr("Bwi", "searchable_directory_x_network", p1)
}
/// Keine anderen Geräte zur Verfikation verfügbar oder Kennwort vergessen?
/// Wiederherstellungsschlüssel vergessen?
public static var secretsRecoveryResetActionPart1: String {
return BWIL10n.tr("Bwi", "secrets_recovery_reset_action_part_1")
}

View File

@@ -327,7 +327,7 @@ static const CGFloat kAuthInputContainerViewMinHeightConstraintConstant = 150.0;
self.authenticationActivityIndicatorContainerView.backgroundColor = ThemeService.shared.theme.baseColor;
self.noFlowLabel.textColor = ThemeService.shared.theme.warningColor;
NSMutableAttributedString *forgotPasswordTitle = [[NSMutableAttributedString alloc] initWithString:[VectorL10n authForgotPassword]];
NSMutableAttributedString *forgotPasswordTitle = [[NSMutableAttributedString alloc] initWithString:[BWIL10n authForgotPassword]];
[forgotPasswordTitle addAttribute:NSUnderlineStyleAttributeName value:@(NSUnderlineStyleSingle) range:NSMakeRange(0, forgotPasswordTitle.length)];
[forgotPasswordTitle addAttribute:NSForegroundColorAttributeName value:ThemeService.shared.theme.tintColor range:NSMakeRange(0, forgotPasswordTitle.length)];
[self.forgotPasswordButton setAttributedTitle:forgotPasswordTitle forState:UIControlStateNormal];

View File

@@ -137,9 +137,14 @@ final class KeyVerificationCoordinator: KeyVerificationCoordinatorType {
case .incomingSASTransaction(let incomingSASTransaction):
rootCoordinator = self.createDataLoadingScreenCoordinator(otherUserId: incomingSASTransaction.otherUserId, otherDeviceId: incomingSASTransaction.otherDeviceId)
case .completeSecurity(let isNewSignIn):
let coordinator = self.createCompleteSecurityCoordinator(isNewSignIn: isNewSignIn)
self.completeSecurityCoordinator = coordinator
rootCoordinator = coordinator
if BuildSettings.disableSelfUserVerification {
let coordinator = self.createSecretsRecoveryCoordinator(with: .passphraseOrKey)
rootCoordinator = coordinator
} else {
let coordinator = self.createCompleteSecurityCoordinator(isNewSignIn: isNewSignIn)
self.completeSecurityCoordinator = coordinator
rootCoordinator = coordinator
}
}
rootCoordinator.start()
@@ -189,6 +194,13 @@ final class KeyVerificationCoordinator: KeyVerificationCoordinatorType {
return coordinator
}
private func createSecretsRecoveryCoordinator(with recoveryMode: SecretsRecoveryMode) -> SecretsRecoveryCoordinator {
let coordinator = SecretsRecoveryCoordinator(session: self.session, recoveryMode: recoveryMode, recoveryGoal: .verifyDevice, navigationRouter: self.navigationRouter, cancellable: self.cancellable)
coordinator.delegate = self
return coordinator
}
private func showSecretsRecovery(with recoveryMode: SecretsRecoveryMode) {
let coordinator = SecretsRecoveryCoordinator(session: self.session, recoveryMode: recoveryMode, recoveryGoal: .verifyDevice, navigationRouter: self.navigationRouter, cancellable: self.cancellable)
coordinator.delegate = self

View File

@@ -71,6 +71,12 @@
[self flushPills];
}
[super setAttributedText:attributedText];
if (@available(iOS 15.0, *)) {
// Fixes an iOS 16 issue where attachment are not drawn properly by
// forcing the layoutManager to redraw the glyphs at all NSAttachment positions.
[self vc_invalidateTextAttachmentsDisplay];
}
}
- (void)registerPillView:(UIView *)pillView

View File

@@ -174,6 +174,13 @@ static const NSTimeInterval kActionMenuComposerHeightAnimationDuration = .3;
}
self.textView.attributedText = attributedTextMessage;
if (@available(iOS 15.0, *)) {
// Fixes an iOS 16 issue where attachment are not drawn properly by
// forcing the layoutManager to redraw the glyphs at all NSAttachment positions.
[self.textView vc_invalidateTextAttachmentsDisplay];
}
[self updateUIWithAttributedTextMessage:attributedTextMessage animated:YES];
[self textViewDidChange:self.textView];
}

View File

@@ -70,6 +70,11 @@ class VoiceMessagePlaybackController: VoiceMessageAudioPlayerDelegate, VoiceMess
NotificationCenter.default.addObserver(self, selector: #selector(updateTheme), name: .themeServiceDidChangeTheme, object: nil)
updateTheme()
updateUI()
if BwiBuildSettings.bwiResignPlayingVoiceMessageInBackground {
NotificationCenter.default.addObserver(self, selector: #selector(appMovedToBackground), name: UIApplication.willResignActiveNotification, object: nil)
}
}
var attachment: MXKAttachment? {
@@ -219,4 +224,17 @@ class VoiceMessagePlaybackController: VoiceMessageAudioPlayerDelegate, VoiceMess
@objc private func updateTheme() {
playbackView.update(theme: ThemeService.shared().theme)
}
// bwi: resign voice playing in background
@objc func appMovedToBackground() {
guard let audioPlayer = audioPlayer else {
return
}
if audioPlayer.url != nil {
if audioPlayer.isPlaying {
audioPlayer.stop()
}
}
}
}

View File

@@ -156,7 +156,7 @@ final class SecretsRecoveryWithKeyViewController: UIViewController {
// Reset secrets button
let resetSecretsAttributedString = NSMutableAttributedString(string: VectorL10n.secretsRecoveryResetActionPart1, attributes: [.foregroundColor: self.theme.tintColor])
let resetSecretsAttributedString = NSMutableAttributedString(string: BWIL10n.secretsRecoveryResetActionPart1, attributes: [.foregroundColor: self.theme.tintColor])
self.resetSecretsButton.setAttributedTitle(resetSecretsAttributedString, for: .normal)
}

View File

@@ -125,7 +125,7 @@ final class SecretsRecoveryWithPassphraseViewController: UIViewController {
self.useRecoveryKeyButton.vc_enableMultiLinesTitle()
self.recoverButton.vc_enableMultiLinesTitle()
self.recoverButton.setTitle(VectorL10n.secretsRecoveryWithPassphraseRecoverAction, for: .normal)
self.recoverButton.setTitle(BWIL10n.secretsRecoveryWithPassphraseRecoverAction, for: .normal)
self.updateRecoverButton()
@@ -174,7 +174,7 @@ final class SecretsRecoveryWithPassphraseViewController: UIViewController {
// Reset secrets button
let resetSecretsAttributedString = NSMutableAttributedString(string: VectorL10n.secretsRecoveryResetActionPart1, attributes: [.foregroundColor: self.theme.tintColor])
let resetSecretsAttributedString = NSMutableAttributedString(string: BWIL10n.secretsRecoveryResetActionPart1, attributes: [.foregroundColor: self.theme.tintColor])
self.resetSecretsButton.setAttributedTitle(resetSecretsAttributedString, for: .normal)
}

View File

@@ -65,6 +65,7 @@ targets:
- path: ../Riot/Categories/UISearchBar.swift
- path: ../Riot/Categories/String.swift
- path: ../Riot/Categories/UIView.swift
- path: ../Riot/Categories/UITextView.swift
- path: ../Riot/Modules/Common/Recents/Model/RecentCellData.m
- path: ../Riot/PropertyWrappers/UserDefaultsBackedPropertyWrapper.swift
- path: ../Riot/Generated/Strings.swift

View File

@@ -94,4 +94,7 @@ final class BwiBuildSettings: NSObject {
// enable BuM style authentication UI (more Info text and a logo)
static let bwiEnableBuMAuthentificationUI = true
// voicemessages should resignplaying when the app enters the background
static let bwiResignPlayingVoiceMessageInBackground = true
}