mirror of
https://gitlab.opencode.de/bwi/bundesmessenger/clients/bundesmessenger-ios.git
synced 2026-04-25 19:10:49 +02:00
Merge pull request #5999 from vector-im/aringenbach/5995_presence_offline_mode
Presence offline mode setting
This commit is contained in:
@@ -63,10 +63,10 @@ final class PresenceIndicatorView: UIView {
|
||||
/// - presence: `MXPresence` to display
|
||||
func setPresence(_ presence: MXPresence) {
|
||||
switch presence {
|
||||
case MXPresenceOnline:
|
||||
case .online:
|
||||
self.backgroundColor = ThemeService.shared().theme.tintColor
|
||||
self.borderLayer.borderColor = self.borderColor.cgColor
|
||||
case MXPresenceOffline, MXPresenceUnavailable:
|
||||
case .offline, .unavailable:
|
||||
self.backgroundColor = ThemeService.shared().theme.tabBarUnselectedItemTintColor
|
||||
self.borderLayer.borderColor = self.borderColor.cgColor
|
||||
default:
|
||||
|
||||
@@ -715,6 +715,7 @@ static NSArray<NSNumber*> *initialSyncSilentErrorsHTTPStatusCodes;
|
||||
|
||||
// Instantiate new session
|
||||
mxSession = [[MXSession alloc] initWithMatrixRestClient:mxRestClient];
|
||||
mxSession.preferredSyncPresence = self.preferredSyncPresence;
|
||||
|
||||
// Check whether an antivirus url is defined.
|
||||
if (_antivirusServerURL)
|
||||
@@ -1007,7 +1008,7 @@ static NSArray<NSNumber*> *initialSyncSilentErrorsHTTPStatusCodes;
|
||||
|
||||
// Update user presence
|
||||
MXWeakify(self);
|
||||
[self setUserPresence:MXPresenceUnavailable andStatusMessage:nil completion:^{
|
||||
[self setUserPresence:MXPresenceOffline andStatusMessage:nil completion:^{
|
||||
MXStrongifyAndReturnIfNil(self);
|
||||
[self cancelPauseBackgroundTask];
|
||||
}];
|
||||
@@ -1045,8 +1046,10 @@ static NSArray<NSNumber*> *initialSyncSilentErrorsHTTPStatusCodes;
|
||||
case MXSessionStatePauseRequested:
|
||||
{
|
||||
// Resume SDK and update user presence
|
||||
MXWeakify(self);
|
||||
[mxSession resume:^{
|
||||
[self setUserPresence:MXPresenceOnline andStatusMessage:nil completion:nil];
|
||||
MXStrongifyAndReturnIfNil(self);
|
||||
[self setUserPresence:self.preferredSyncPresence andStatusMessage:nil completion:nil];
|
||||
|
||||
[self refreshAPNSPusher];
|
||||
[self refreshPushKitPusher];
|
||||
@@ -1513,7 +1516,7 @@ static NSArray<NSNumber*> *initialSyncSilentErrorsHTTPStatusCodes;
|
||||
|
||||
MXLogDebug(@"[MXKAccount] %@: The session is ready. Matrix SDK session has been started in %0.fms.", self.mxCredentials.userId, [[NSDate date] timeIntervalSinceDate:self->openSessionStartDate] * 1000);
|
||||
|
||||
[self setUserPresence:MXPresenceOnline andStatusMessage:nil completion:nil];
|
||||
[self setUserPresence:self.preferredSyncPresence andStatusMessage:nil completion:nil];
|
||||
|
||||
} failure:^(NSError *error) {
|
||||
MXStrongifyAndReturnIfNil(self);
|
||||
@@ -2159,4 +2162,20 @@ static NSArray<NSNumber*> *initialSyncSilentErrorsHTTPStatusCodes;
|
||||
}
|
||||
}
|
||||
|
||||
#pragma mark - Presence
|
||||
|
||||
- (void)setPreferredSyncPresence:(MXPresence)preferredSyncPresence
|
||||
{
|
||||
[super setPreferredSyncPresence:preferredSyncPresence];
|
||||
|
||||
if (self.mxSession)
|
||||
{
|
||||
self.mxSession.preferredSyncPresence = preferredSyncPresence;
|
||||
[self setUserPresence:preferredSyncPresence andStatusMessage:nil completion:nil];
|
||||
}
|
||||
|
||||
// Archive updated field
|
||||
[[MXKAccountManager sharedManager] saveAccounts];
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@@ -32,6 +32,7 @@
|
||||
@protected BOOL _isSoftLogout;
|
||||
@protected BOOL _hasPusherForPushNotifications;
|
||||
@protected BOOL _hasPusherForPushKitNotifications;
|
||||
@protected MXPresence _preferredSyncPresence;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -89,6 +90,12 @@
|
||||
*/
|
||||
@property (nonatomic, readonly) BOOL hasPusherForPushKitNotifications;
|
||||
|
||||
/**
|
||||
The account's preferred Presence status to share while the application is in foreground.
|
||||
Defaults to MXPresenceOnline.
|
||||
*/
|
||||
@property (nonatomic) MXPresence preferredSyncPresence;
|
||||
|
||||
|
||||
/**
|
||||
Enable In-App notifications based on Remote notifications rules.
|
||||
|
||||
@@ -80,6 +80,16 @@
|
||||
|
||||
_warnedAboutEncryption = [coder decodeBoolForKey:@"warnedAboutEncryption"];
|
||||
|
||||
if ([coder decodeObjectOfClass:NSString.class forKey:@"preferredSyncPresence"])
|
||||
{
|
||||
MXPresenceString presenceString = [coder decodeObjectOfClass:NSString.class forKey:@"preferredSyncPresence"];
|
||||
_preferredSyncPresence = [MXTools presence:presenceString];
|
||||
}
|
||||
else
|
||||
{
|
||||
_preferredSyncPresence = MXPresenceOnline;
|
||||
}
|
||||
|
||||
_others = [coder decodeObjectForKey:@"others"];
|
||||
}
|
||||
|
||||
@@ -143,6 +153,9 @@
|
||||
|
||||
[coder encodeBool:_warnedAboutEncryption forKey:@"warnedAboutEncryption"];
|
||||
|
||||
MXPresenceString presenceString = [MXTools presenceString:_preferredSyncPresence];
|
||||
[coder encodeObject:presenceString forKey:@"preferredSyncPresence"];
|
||||
|
||||
[coder encodeObject:_others forKey:@"others"];
|
||||
}
|
||||
|
||||
|
||||
@@ -34,7 +34,7 @@ final class RoomInfoListViewModel: NSObject, RoomInfoListViewModelType {
|
||||
|
||||
private var viewData: RoomInfoListViewData {
|
||||
let encryptionImage = EncryptionTrustLevelBadgeImageHelper.roomBadgeImage(for: room.summary.roomEncryptionTrustLevel())
|
||||
let directUserPresence = session.user(withUserId: room.directUserId)?.presence ?? MXPresenceUnknown
|
||||
let directUserPresence = session.user(withUserId: room.directUserId)?.presence ?? .unknown
|
||||
|
||||
let basicInfoViewData = RoomInfoBasicViewData(avatarUrl: room.summary.avatar,
|
||||
mediaManager: session.mediaManager,
|
||||
|
||||
@@ -111,7 +111,7 @@ class RoomInfoBasicView: UIView {
|
||||
badgeImageView.isHidden = false
|
||||
// Update badge position if it doesn't match expectation.
|
||||
// If presence is displayed, badge should be in the name stack.
|
||||
let isPresenceDisplayed = presence != MXPresenceUnknown
|
||||
let isPresenceDisplayed = presence != .unknown
|
||||
let isBadgeInRoomNameStackView = roomNameStackView.arrangedSubviews.contains(badgeImageView)
|
||||
switch (isPresenceDisplayed, isBadgeInRoomNameStackView) {
|
||||
case (true, false):
|
||||
|
||||
@@ -87,6 +87,9 @@
|
||||
<nil key="highlightedColor"/>
|
||||
</label>
|
||||
</subviews>
|
||||
<constraints>
|
||||
<constraint firstAttribute="height" constant="24" id="Bus-PH-DBv"/>
|
||||
</constraints>
|
||||
</stackView>
|
||||
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" verticalHuggingPriority="251" ambiguous="YES" text="Label" textAlignment="center" lineBreakMode="tailTruncation" numberOfLines="0" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="Yjw-ez-u4W">
|
||||
<rect key="frame" x="161.5" y="129" width="39.5" height="22"/>
|
||||
|
||||
@@ -50,7 +50,7 @@
|
||||
<constraint firstAttribute="width" secondItem="Ky3-cy-HAx" secondAttribute="height" multiplier="1:1" id="peq-8l-eJv"/>
|
||||
</constraints>
|
||||
</imageView>
|
||||
<view contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="grc-2K-fj1" customClass="PresenceIndicatorView" customModule="Riot" customModuleProvider="target">
|
||||
<view hidden="YES" contentMode="scaleToFill" translatesAutoresizingMaskIntoConstraints="NO" id="grc-2K-fj1" customClass="PresenceIndicatorView" customModule="Riot" customModuleProvider="target">
|
||||
<rect key="frame" x="29" y="26" width="12" height="12"/>
|
||||
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
|
||||
<constraints>
|
||||
|
||||
@@ -62,6 +62,7 @@ typedef NS_ENUM(NSUInteger, SECTION_TAG)
|
||||
SECTION_TAG_IGNORED_USERS,
|
||||
SECTION_TAG_INTEGRATIONS,
|
||||
SECTION_TAG_USER_INTERFACE,
|
||||
SECTION_TAG_PRESENCE,
|
||||
SECTION_TAG_ADVANCED,
|
||||
SECTION_TAG_ABOUT,
|
||||
SECTION_TAG_LABS,
|
||||
@@ -137,6 +138,11 @@ typedef NS_ENUM(NSUInteger, IDENTITY_SERVER)
|
||||
IDENTITY_SERVER_INDEX
|
||||
};
|
||||
|
||||
typedef NS_ENUM(NSUInteger, PRESENCE)
|
||||
{
|
||||
PRESENCE_OFFLINE_MODE = 0,
|
||||
};
|
||||
|
||||
typedef NS_ENUM(NSUInteger, ADVANCED)
|
||||
{
|
||||
ADVANCED_SHOW_NSFW_ROOMS_INDEX = 0,
|
||||
@@ -520,6 +526,16 @@ TableViewSectionsDelegate>
|
||||
|
||||
[tmpSections addObject: sectionUserInterface];
|
||||
|
||||
if(BuildSettings.settingsScreenPresenceAllowConfiguration)
|
||||
{
|
||||
Section *sectionPresence = [Section sectionWithTag:SECTION_TAG_PRESENCE];
|
||||
[sectionPresence addRowWithTag:PRESENCE_OFFLINE_MODE];
|
||||
sectionPresence.headerTitle = VectorL10n.settingsPresence;
|
||||
sectionPresence.footerTitle = VectorL10n.settingsPresenceOfflineModeDescription;
|
||||
|
||||
[tmpSections addObject:sectionPresence];
|
||||
}
|
||||
|
||||
Section *sectionAdvanced = [Section sectionWithTag:SECTION_TAG_ADVANCED];
|
||||
sectionAdvanced.headerTitle = [VectorL10n settingsAdvanced];
|
||||
|
||||
@@ -2287,6 +2303,24 @@ TableViewSectionsDelegate>
|
||||
cell.selectionStyle = UITableViewCellSelectionStyleDefault;
|
||||
}
|
||||
}
|
||||
else if (section == SECTION_TAG_PRESENCE)
|
||||
{
|
||||
if (row == PRESENCE_OFFLINE_MODE)
|
||||
{
|
||||
MXKTableViewCellWithLabelAndSwitch* labelAndSwitchCell = [self getLabelAndSwitchCell:tableView forIndexPath:indexPath];
|
||||
|
||||
labelAndSwitchCell.mxkLabel.text = VectorL10n.settingsPresenceOfflineMode;
|
||||
|
||||
MXKAccount *account = MXKAccountManager.sharedManager.accounts.firstObject;
|
||||
|
||||
labelAndSwitchCell.mxkSwitch.on = account.preferredSyncPresence == MXPresenceOffline;
|
||||
labelAndSwitchCell.mxkSwitch.onTintColor = ThemeService.shared.theme.tintColor;
|
||||
labelAndSwitchCell.mxkSwitch.enabled = YES;
|
||||
[labelAndSwitchCell.mxkSwitch addTarget:self action:@selector(togglePresenceOfflineMode:) forControlEvents:UIControlEventTouchUpInside];
|
||||
|
||||
cell = labelAndSwitchCell;
|
||||
}
|
||||
}
|
||||
else if (section == SECTION_TAG_ADVANCED)
|
||||
{
|
||||
if (row == ADVANCED_SHOW_NSFW_ROOMS_INDEX)
|
||||
@@ -3907,6 +3941,19 @@ TableViewSectionsDelegate>
|
||||
self.deactivateAccountViewController = deactivateAccountViewController;
|
||||
}
|
||||
|
||||
- (void)togglePresenceOfflineMode:(UISwitch *)sender
|
||||
{
|
||||
MXKAccount *account = MXKAccountManager.sharedManager.accounts.firstObject;
|
||||
if (sender.isOn)
|
||||
{
|
||||
account.preferredSyncPresence = MXPresenceOffline;
|
||||
}
|
||||
else
|
||||
{
|
||||
account.preferredSyncPresence = MXPresenceOnline;
|
||||
}
|
||||
}
|
||||
|
||||
- (void)toggleNSFWPublicRoomsFiltering:(UISwitch *)sender
|
||||
{
|
||||
RiotSettings.shared.showNSFWPublicRooms = sender.isOn;
|
||||
|
||||
Reference in New Issue
Block a user