diff --git a/Telegram/Telegram-iOS/en.lproj/Localizable.strings b/Telegram/Telegram-iOS/en.lproj/Localizable.strings index 5fec3e871b..858e3c09db 100644 --- a/Telegram/Telegram-iOS/en.lproj/Localizable.strings +++ b/Telegram/Telegram-iOS/en.lproj/Localizable.strings @@ -10963,3 +10963,4 @@ Sorry for the inconvenience."; "PrivacyInfo.ShowReadTime.Text" = "To see when **%@** read the message, either start showing your own read time:"; "PrivacyInfo.ShowReadTime.ButtonTitle" = "Show My Read Time"; "PrivacyInfo.ShowReadTime.PremiumInfo" = "Subscription will let you see **%@'s** read time without showing yours."; +"PrivacyInfo.ShowReadTime.AlwaysToast.Text" = "Set **Last Seen** privacy to 'Nobody' or 'My Contacts.'"; diff --git a/submodules/SettingsUI/Sources/Privacy and Security/SelectivePrivacySettingsController.swift b/submodules/SettingsUI/Sources/Privacy and Security/SelectivePrivacySettingsController.swift index 93a6103c96..54319dab06 100644 --- a/submodules/SettingsUI/Sources/Privacy and Security/SelectivePrivacySettingsController.swift +++ b/submodules/SettingsUI/Sources/Privacy and Security/SelectivePrivacySettingsController.swift @@ -58,6 +58,7 @@ private final class SelectivePrivacySettingsControllerArguments { let setPublicPhoto: (() -> Void)? let removePublicPhoto: (() -> Void)? let updateHideReadTime: ((Bool) -> Void)? + let updateHideReadTimeDisabled: (() -> Void)? let openPremiumIntro: () -> Void init( @@ -71,6 +72,7 @@ private final class SelectivePrivacySettingsControllerArguments { setPublicPhoto: (() -> Void)?, removePublicPhoto: (() -> Void)?, updateHideReadTime: ((Bool) -> Void)?, + updateHideReadTimeDisabled: (() -> Void)?, openPremiumIntro: @escaping () -> Void ) { self.context = context @@ -83,6 +85,7 @@ private final class SelectivePrivacySettingsControllerArguments { self.setPublicPhoto = setPublicPhoto self.removePublicPhoto = removePublicPhoto self.updateHideReadTime = updateHideReadTime + self.updateHideReadTimeDisabled = updateHideReadTimeDisabled self.openPremiumIntro = openPremiumIntro } } @@ -138,7 +141,7 @@ private enum SelectivePrivacySettingsEntry: ItemListNodeEntry { case phoneDiscoveryEverybody(PresentationTheme, String, Bool) case phoneDiscoveryMyContacts(PresentationTheme, String, Bool) case phoneDiscoveryInfo(PresentationTheme, String, String) - case hideReadTime(PresentationTheme, String, Bool) + case hideReadTime(PresentationTheme, String, Bool, Bool) case hideReadTimeInfo(PresentationTheme, String) case subscribeToPremium(PresentationTheme, String) case subscribeToPremiumInfo(PresentationTheme, String) @@ -410,8 +413,8 @@ private enum SelectivePrivacySettingsEntry: ItemListNodeEntry { } else { return false } - case let .hideReadTime(lhsTheme, lhsText, lhsValue): - if case let .hideReadTime(rhsTheme, rhsText, rhsValue) = rhs, lhsTheme === rhsTheme, lhsText == rhsText, lhsValue == rhsValue { + case let .hideReadTime(lhsTheme, lhsText, lhsEnabled, lhsValue): + if case let .hideReadTime(rhsTheme, rhsText, rhsEnabled, rhsValue) = rhs, lhsTheme === rhsTheme, lhsText == rhsText, lhsEnabled == rhsEnabled, lhsValue == rhsValue { return true } else { return false @@ -535,9 +538,11 @@ private enum SelectivePrivacySettingsEntry: ItemListNodeEntry { case let .publicPhotoInfo(_, text): return ItemListTextItem(presentationData: presentationData, text: .markdown(text), sectionId: self.section, linkAction: { _ in }) - case let .hideReadTime(_, text, value): - return ItemListSwitchItem(presentationData: presentationData, title: text, value: value, sectionId: self.section, style: .blocks, updated: { value in + case let .hideReadTime(_, text, enabled, value): + return ItemListSwitchItem(presentationData: presentationData, title: text, value: value, enabled: enabled, sectionId: self.section, style: .blocks, updated: { value in arguments.updateHideReadTime?(value) + }, activatedWhileDisabled: { + arguments.updateHideReadTimeDisabled?() }) case let .hideReadTimeInfo(_, text): return ItemListTextItem(presentationData: presentationData, text: .plain(text), sectionId: self.section) @@ -847,7 +852,14 @@ private func selectivePrivacySettingsControllerEntries(presentationData: Present } if case .presence = kind, let peer { - entries.append(.hideReadTime(presentationData.theme, presentationData.strings.Settings_Privacy_ReadTime, state.hideReadTimeEnabled == true)) + let isEnabled: Bool + switch state.setting { + case .everybody: + isEnabled = false + default: + isEnabled = true + } + entries.append(.hideReadTime(presentationData.theme, presentationData.strings.Settings_Privacy_ReadTime, isEnabled, isEnabled && state.hideReadTimeEnabled == true)) entries.append(.hideReadTimeInfo(presentationData.theme, presentationData.strings.Settings_Privacy_ReadTimeFooter)) if !peer.isPremium { @@ -1164,6 +1176,9 @@ func selectivePrivacySettingsController( updateState { state in return state.withUpdatedHideReadTimeEnabled(value) } + }, updateHideReadTimeDisabled: { + let presentationData = context.sharedContext.currentPresentationData.with { $0 } + presentControllerImpl?(UndoOverlayController(presentationData: presentationData, content: .info(title: nil, text: presentationData.strings.PrivacyInfo_ShowReadTime_AlwaysToast_Text, timeout: nil, customUndoText: nil), elevatedLayout: false, animateInAsReplacement: false, action: { _ in return false }), nil) }, openPremiumIntro: { let controller = context.sharedContext.makePremiumIntroController(context: context, source: .presence, forceDark: false, dismissed: nil) pushControllerImpl?(controller, true) @@ -1353,7 +1368,18 @@ func selectivePrivacySettingsController( (controller?.navigationController as? NavigationController)?.pushViewController(c, animated: animated) } presentControllerImpl = { [weak controller] c, a in - controller?.present(c, in: .window(.root), with: a) + if c is UndoOverlayController { + controller?.forEachController { other in + if let other = other as? UndoOverlayController { + other.dismiss() + } + return true + } + + controller?.present(c, in: .current, with: a) + } else { + controller?.present(c, in: .window(.root), with: a) + } } return controller