mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-04-17 15:09:31 +02:00
MESSENGER Release 1.24.0
This commit is contained in:
@@ -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)
|
||||
===================================================
|
||||
|
||||
|
||||
@@ -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 = ""
|
||||
|
||||
@@ -258,4 +258,4 @@ SPEC CHECKSUMS:
|
||||
|
||||
PODFILE CHECKSUM: 6f433a3973cc99b689d4e62b616b4ea5994dbd79
|
||||
|
||||
COCOAPODS: 1.10.1
|
||||
COCOAPODS: 1.11.3
|
||||
|
||||
@@ -4,8 +4,7 @@
|
||||
version = "1.3">
|
||||
<BuildAction
|
||||
parallelizeBuildables = "YES"
|
||||
buildImplicitDependencies = "YES"
|
||||
runPostActionsOnFailure = "NO">
|
||||
buildImplicitDependencies = "YES">
|
||||
<BuildActionEntries>
|
||||
<BuildActionEntry
|
||||
buildForTesting = "YES"
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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>
|
||||
|
||||
29
Riot/Categories/UITextView.swift
Normal file
29
Riot/Categories/UITextView.swift
Normal 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)
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -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")
|
||||
}
|
||||
|
||||
@@ -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];
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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];
|
||||
}
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user