Merge commit '5c25bca177cea0c968a67393a0ecf4347ddd9aee'

This commit is contained in:
Ali 2023-07-17 18:53:41 +04:00
commit d45e111151
7 changed files with 28 additions and 8 deletions

View File

@ -7390,6 +7390,7 @@ Sorry for the inconvenience.";
"Attachment.MediaAccessTitle" = "Access Your Photos and Videos"; "Attachment.MediaAccessTitle" = "Access Your Photos and Videos";
"Attachment.MediaAccessText" = "Share an unlimited number of photos and videos of up to 2 GB each."; "Attachment.MediaAccessText" = "Share an unlimited number of photos and videos of up to 2 GB each.";
"Attachment.MediaAccessStoryText" = "Share an unlimited number of photos and videos of up to 2 GB each.";
"Attachment.LimitedMediaAccessText" = "You have limited Telegram from accessing all of your photos."; "Attachment.LimitedMediaAccessText" = "You have limited Telegram from accessing all of your photos.";
"Attachment.CameraAccessText" = "Telegram needs camera access so that you can take photos and videos."; "Attachment.CameraAccessText" = "Telegram needs camera access so that you can take photos and videos.";
@ -9420,7 +9421,7 @@ Sorry for the inconvenience.";
"StoryFeed.TooltipStoryLimit" = "You can't post more than **%@** stories in **24 hours**."; "StoryFeed.TooltipStoryLimit" = "You can't post more than **%@** stories in **24 hours**.";
"StoryFeed.TooltipPostingDuringCall" = "You can't post stories during a call."; "StoryFeed.TooltipPostingDuringCall" = "You can't post stories during a call.";
"StoryFeed.TooltipPostingDuringGroupCall" = "You can't post stories during a voice chat."; "StoryFeed.TooltipPostingDuringGroupCall" = "You can't post stories during a video chat.";
"StoryFeed.MyStory" = "My Story"; "StoryFeed.MyStory" = "My Story";
"StoryFeed.MyUploading" = "Uploading..."; "StoryFeed.MyUploading" = "Uploading...";

View File

@ -10,7 +10,7 @@ import PresentationDataUtils
final class MediaPickerPlaceholderNode: ASDisplayNode { final class MediaPickerPlaceholderNode: ASDisplayNode {
enum Content { enum Content {
case intro case intro(story: Bool)
case bannedSendMedia(String) case bannedSendMedia(String)
} }
@ -144,9 +144,9 @@ final class MediaPickerPlaceholderNode: ASDisplayNode {
let title: String let title: String
let text: String let text: String
switch self.content { switch self.content {
case .intro: case let .intro(story):
title = strings.Attachment_MediaAccessTitle title = strings.Attachment_MediaAccessTitle
text = strings.Attachment_MediaAccessText text = story ? strings.Attachment_MediaAccessStoryText : strings.Attachment_MediaAccessText
case let .bannedSendMedia(banDescription): case let .bannedSendMedia(banDescription):
title = "" title = ""
text = banDescription text = banDescription

View File

@ -1333,8 +1333,10 @@ public final class MediaPickerScreen: ViewController, AttachmentContainable {
if case let .noAccess(cameraAccess) = self.state { if case let .noAccess(cameraAccess) = self.state {
var hasCamera = cameraAccess == .authorized var hasCamera = cameraAccess == .authorized
var story = false
if let subject = self.controller?.subject, case .assets(_, .story) = subject { if let subject = self.controller?.subject, case .assets(_, .story) = subject {
hasCamera = false hasCamera = false
story = true
self.controller?.navigationItem.rightBarButtonItem = nil self.controller?.navigationItem.rightBarButtonItem = nil
} }
@ -1344,7 +1346,7 @@ public final class MediaPickerScreen: ViewController, AttachmentContainable {
if let current = self.placeholderNode { if let current = self.placeholderNode {
placeholderNode = current placeholderNode = current
} else { } else {
placeholderNode = MediaPickerPlaceholderNode(content: .intro) placeholderNode = MediaPickerPlaceholderNode(content: .intro(story: story))
placeholderNode.settingsPressed = { [weak self] in placeholderNode.settingsPressed = { [weak self] in
self?.controller?.context.sharedContext.applicationBindings.openSettings() self?.controller?.context.sharedContext.applicationBindings.openSettings()
} }

View File

@ -98,10 +98,8 @@ public final class MediaAssetsContext: NSObject, PHPhotoLibraryChangeObserver {
public func requestMediaAccess(completion: @escaping () -> Void = {}) -> Void { public func requestMediaAccess(completion: @escaping () -> Void = {}) -> Void {
PHPhotoLibrary.requestAuthorization { [weak self] status in PHPhotoLibrary.requestAuthorization { [weak self] status in
Queue.mainQueue().async { Queue.mainQueue().async {
if case .authorized = status {
completion() completion()
} }
}
self?.mediaAccessSink.putNext(status) self?.mediaAccessSink.putNext(status)
} }
} }

View File

@ -41,6 +41,7 @@ swift_library(
"//submodules/TelegramUI/Components/ShareWithPeersScreen", "//submodules/TelegramUI/Components/ShareWithPeersScreen",
"//submodules/TelegramUI/Components/CameraButtonComponent", "//submodules/TelegramUI/Components/CameraButtonComponent",
"//submodules/ChatPresentationInterfaceState", "//submodules/ChatPresentationInterfaceState",
"//submodules/DeviceAccess",
], ],
visibility = [ visibility = [
"//visibility:public", "//visibility:public",

View File

@ -30,6 +30,7 @@ import UndoUI
import ChatEntityKeyboardInputNode import ChatEntityKeyboardInputNode
import ChatPresentationInterfaceState import ChatPresentationInterfaceState
import TextFormat import TextFormat
import DeviceAccess
enum DrawingScreenType { enum DrawingScreenType {
case drawing case drawing
@ -3953,7 +3954,20 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
fileprivate var isSavingAvailable = false fileprivate var isSavingAvailable = false
private var previousSavedValues: MediaEditorValues? private var previousSavedValues: MediaEditorValues?
func requestSave() { func requestSave() {
let context = self.context
DeviceAccess.authorizeAccess(to: .mediaLibrary(.save), presentationData: context.sharedContext.currentPresentationData.with { $0 }, present: { c, a in
context.sharedContext.presentGlobalController(c, a)
}, openSettings: context.sharedContext.applicationBindings.openSettings, { [weak self] authorized in
if !authorized {
return
}
self?.performSave()
})
}
private func performSave() {
guard let mediaEditor = self.node.mediaEditor, let subject = self.node.subject, self.isSavingAvailable else { guard let mediaEditor = self.node.mediaEditor, let subject = self.node.subject, self.isSavingAvailable else {
return return
} }

View File

@ -94,6 +94,10 @@ final class StoryItemSetContainerSendMessage {
self.navigationActionDisposable.dispose() self.navigationActionDisposable.dispose()
self.resolvePeerByNameDisposable.dispose() self.resolvePeerByNameDisposable.dispose()
self.inputMediaNodeDataDisposable?.dispose() self.inputMediaNodeDataDisposable?.dispose()
if let tooltipScreen = self.tooltipScreen {
tooltipScreen.dismiss()
}
} }
func setup(context: AccountContext, view: StoryItemSetContainerComponent.View, inputPanelExternalState: MessageInputPanelComponent.ExternalState, keyboardInputData: Signal<ChatEntityKeyboardInputNode.InputData, NoError>) { func setup(context: AccountContext, view: StoryItemSetContainerComponent.View, inputPanelExternalState: MessageInputPanelComponent.ExternalState, keyboardInputData: Signal<ChatEntityKeyboardInputNode.InputData, NoError>) {