mirror of
https://github.com/Swiftgram/Telegram-iOS.git
synced 2025-06-16 05:55:20 +00:00
Various improvements
This commit is contained in:
parent
9ba0743553
commit
b006c36c59
@ -9587,6 +9587,7 @@ Sorry for the inconvenience.";
|
||||
"Story.ContextPrivacy.LabelEveryone" = "Everyone";
|
||||
"Story.Context.Privacy" = "Who Can See";
|
||||
"Story.Context.Edit" = "Edit Story";
|
||||
"Story.Context.EditCover" = "Edit Cover";
|
||||
"Story.Context.SaveToProfile" = "Save to Profile";
|
||||
"Story.Context.RemoveFromProfile" = "Remove from Profile";
|
||||
"Story.ToastRemovedFromProfileText" = "Story removed from your profile";
|
||||
|
@ -186,7 +186,7 @@ protocol BrowserContent: UIView {
|
||||
|
||||
func addToRecentlyVisited()
|
||||
|
||||
func updateLayout(size: CGSize, insets: UIEdgeInsets, transition: ComponentTransition)
|
||||
func updateLayout(size: CGSize, insets: UIEdgeInsets, fullInsets: UIEdgeInsets, transition: ComponentTransition)
|
||||
}
|
||||
|
||||
struct ContentScrollingUpdate {
|
||||
|
@ -100,8 +100,8 @@ final class BrowserDocumentContent: UIView, BrowserContent, WKNavigationDelegate
|
||||
self.backgroundColor = presentationData.theme.list.plainBackgroundColor
|
||||
self.webView.underPageBackgroundColor = presentationData.theme.list.plainBackgroundColor
|
||||
}
|
||||
if let (size, insets) = self.validLayout {
|
||||
self.updateLayout(size: size, insets: insets, transition: .immediate)
|
||||
if let (size, insets, fullInsets) = self.validLayout {
|
||||
self.updateLayout(size: size, insets: insets, fullInsets: fullInsets, transition: .immediate)
|
||||
}
|
||||
}
|
||||
|
||||
@ -239,9 +239,9 @@ final class BrowserDocumentContent: UIView, BrowserContent, WKNavigationDelegate
|
||||
self.webView.scrollView.setContentOffset(CGPoint(x: 0.0, y: -self.webView.scrollView.contentInset.top), animated: true)
|
||||
}
|
||||
|
||||
private var validLayout: (CGSize, UIEdgeInsets)?
|
||||
func updateLayout(size: CGSize, insets: UIEdgeInsets, transition: ComponentTransition) {
|
||||
self.validLayout = (size, insets)
|
||||
private var validLayout: (CGSize, UIEdgeInsets, UIEdgeInsets)?
|
||||
func updateLayout(size: CGSize, insets: UIEdgeInsets, fullInsets: UIEdgeInsets, transition: ComponentTransition) {
|
||||
self.validLayout = (size, insets, fullInsets)
|
||||
|
||||
self.previousScrollingOffset = ScrollingOffsetState(value: self.webView.scrollView.contentOffset.y, isDraggingOrDecelerating: self.webView.scrollView.isDragging || self.webView.scrollView.isDecelerating)
|
||||
|
||||
|
@ -26,6 +26,7 @@ final class BrowserInstantPageContent: UIView, BrowserContent, UIScrollViewDeleg
|
||||
private let context: AccountContext
|
||||
private var presentationData: PresentationData
|
||||
private var theme: InstantPageTheme
|
||||
private var settings: InstantPagePresentationSettings = .defaultSettings
|
||||
private let sourceLocation: InstantPageSourceLocation
|
||||
|
||||
private var webPage: TelegramMediaWebpage?
|
||||
@ -85,7 +86,7 @@ final class BrowserInstantPageContent: UIView, BrowserContent, UIScrollViewDeleg
|
||||
private let loadProgress = ValuePromise<CGFloat>(1.0, ignoreRepeated: true)
|
||||
private let readingProgress = ValuePromise<CGFloat>(1.0, ignoreRepeated: true)
|
||||
|
||||
private var containerLayout: (size: CGSize, insets: UIEdgeInsets)?
|
||||
private var containerLayout: (size: CGSize, insets: UIEdgeInsets, fullInsets: UIEdgeInsets)?
|
||||
private var setupScrollOffsetOnLayout = false
|
||||
|
||||
init(context: AccountContext, presentationData: PresentationData, webPage: TelegramMediaWebpage, anchor: String?, url: String, sourceLocation: InstantPageSourceLocation) {
|
||||
@ -175,8 +176,9 @@ final class BrowserInstantPageContent: UIView, BrowserContent, UIScrollViewDeleg
|
||||
func updatePresentationData(_ presentationData: PresentationData) {
|
||||
self.presentationData = presentationData
|
||||
|
||||
self.theme = instantPageThemeForType(presentationData.theme.overallDarkAppearance ? .dark : .light, settings: .defaultSettings)
|
||||
self.theme = instantPageThemeForType(presentationData.theme.overallDarkAppearance ? .dark : .light, settings: self.settings)
|
||||
self.updatePageLayout()
|
||||
self.updateVisibleItems(visibleBounds: self.scrollNode.view.bounds)
|
||||
}
|
||||
|
||||
func tapActionAtPoint(_ point: CGPoint) -> TapLongTapOrDoubleTapGestureRecognizerAction {
|
||||
@ -295,10 +297,10 @@ final class BrowserInstantPageContent: UIView, BrowserContent, UIScrollViewDeleg
|
||||
}
|
||||
|
||||
private func requestLayout(transition: ContainedViewLayoutTransition) {
|
||||
guard let (size, insets) = self.containerLayout else {
|
||||
guard let (size, insets, fullInsets) = self.containerLayout else {
|
||||
return
|
||||
}
|
||||
self.updateLayout(size: size, insets: insets, transition: transition)
|
||||
self.updateLayout(size: size, insets: insets, fullInsets: fullInsets, transition: transition)
|
||||
}
|
||||
|
||||
func reload() {
|
||||
@ -319,8 +321,40 @@ final class BrowserInstantPageContent: UIView, BrowserContent, UIScrollViewDeleg
|
||||
|
||||
}
|
||||
|
||||
var currentFontState = BrowserPresentationState.FontState(size: 100, isSerif: false)
|
||||
func updateFontState(_ state: BrowserPresentationState.FontState) {
|
||||
self.currentFontState = state
|
||||
|
||||
let fontSize: InstantPagePresentationFontSize
|
||||
switch state.size {
|
||||
case 50:
|
||||
fontSize = .xxsmall
|
||||
case 75:
|
||||
fontSize = .xsmall
|
||||
case 85:
|
||||
fontSize = .small
|
||||
case 100:
|
||||
fontSize = .standard
|
||||
case 115:
|
||||
fontSize = .large
|
||||
case 125:
|
||||
fontSize = .xlarge
|
||||
case 150:
|
||||
fontSize = .xxlarge
|
||||
default:
|
||||
fontSize = .standard
|
||||
}
|
||||
|
||||
self.settings = InstantPagePresentationSettings(
|
||||
themeType: self.presentationData.theme.overallDarkAppearance ? .dark : .light,
|
||||
fontSize: fontSize,
|
||||
forceSerif: state.isSerif,
|
||||
autoNightMode: false,
|
||||
ignoreAutoNightModeUntil: 0
|
||||
)
|
||||
self.theme = instantPageThemeForType(self.presentationData.theme.overallDarkAppearance ? .dark : .light, settings: self.settings)
|
||||
self.updatePageLayout()
|
||||
self.updateVisibleItems(visibleBounds: self.scrollNode.view.bounds)
|
||||
}
|
||||
|
||||
func setSearch(_ query: String?, completion: ((Int) -> Void)?) {
|
||||
@ -340,12 +374,12 @@ final class BrowserInstantPageContent: UIView, BrowserContent, UIScrollViewDeleg
|
||||
scrollView.setContentOffset(CGPoint(x: 0.0, y: -scrollView.contentInset.top), animated: true)
|
||||
}
|
||||
|
||||
func updateLayout(size: CGSize, insets: UIEdgeInsets, transition: ComponentTransition) {
|
||||
self.updateLayout(size: size, insets: insets, transition: transition.containedViewLayoutTransition)
|
||||
func updateLayout(size: CGSize, insets: UIEdgeInsets, fullInsets: UIEdgeInsets, transition: ComponentTransition) {
|
||||
self.updateLayout(size: size, insets: insets, fullInsets: fullInsets, transition: transition.containedViewLayoutTransition)
|
||||
}
|
||||
|
||||
func updateLayout(size: CGSize, insets: UIEdgeInsets, transition: ContainedViewLayoutTransition) {
|
||||
self.containerLayout = (size, insets)
|
||||
func updateLayout(size: CGSize, insets: UIEdgeInsets, fullInsets: UIEdgeInsets, transition: ContainedViewLayoutTransition) {
|
||||
self.containerLayout = (size, insets, fullInsets)
|
||||
|
||||
var updateVisibleItems = false
|
||||
let resetContentOffset = self.scrollNode.bounds.size.width.isZero || self.setupScrollOffsetOnLayout || !(self.initialAnchor ?? "").isEmpty
|
||||
@ -401,7 +435,7 @@ final class BrowserInstantPageContent: UIView, BrowserContent, UIScrollViewDeleg
|
||||
}
|
||||
|
||||
private func updatePageLayout() {
|
||||
guard let (size, insets) = self.containerLayout, let webPage = self.webPage else {
|
||||
guard let (size, insets, _) = self.containerLayout, let webPage = self.webPage else {
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -109,8 +109,8 @@ final class BrowserPdfContent: UIView, BrowserContent, WKNavigationDelegate, WKU
|
||||
if #available(iOS 15.0, *) {
|
||||
self.backgroundColor = presentationData.theme.list.plainBackgroundColor
|
||||
}
|
||||
if let (size, insets) = self.validLayout {
|
||||
self.updateLayout(size: size, insets: insets, transition: .immediate)
|
||||
if let (size, insets, fullInsets) = self.validLayout {
|
||||
self.updateLayout(size: size, insets: insets, fullInsets: fullInsets, transition: .immediate)
|
||||
}
|
||||
}
|
||||
|
||||
@ -248,9 +248,9 @@ final class BrowserPdfContent: UIView, BrowserContent, WKNavigationDelegate, WKU
|
||||
self.scrollView.setContentOffset(CGPoint(x: 0.0, y: -self.scrollView.contentInset.top), animated: true)
|
||||
}
|
||||
|
||||
private var validLayout: (CGSize, UIEdgeInsets)?
|
||||
func updateLayout(size: CGSize, insets: UIEdgeInsets, transition: ComponentTransition) {
|
||||
self.validLayout = (size, insets)
|
||||
private var validLayout: (CGSize, UIEdgeInsets, UIEdgeInsets)?
|
||||
func updateLayout(size: CGSize, insets: UIEdgeInsets, fullInsets: UIEdgeInsets, transition: ComponentTransition) {
|
||||
self.validLayout = (size, insets, fullInsets)
|
||||
|
||||
self.previousScrollingOffset = ScrollingOffsetState(value: self.scrollView.contentOffset.y, isDraggingOrDecelerating: self.scrollView.isDragging || self.scrollView.isDecelerating)
|
||||
|
||||
|
@ -908,7 +908,7 @@ public class BrowserScreen: ViewController, MinimizableController {
|
||||
action(.default)
|
||||
})))
|
||||
}
|
||||
if [.webPage, .instantPage].contains(contentState.contentType) {
|
||||
if [.webPage].contains(contentState.contentType) {
|
||||
items.append(.action(ContextMenuActionItem(text: self.presentationData.strings.InstantPage_Search, icon: { theme in return generateTintedImage(image: UIImage(bundleImageName: "Instant View/Settings/Search"), color: theme.contextMenu.primaryColor) }, action: { (controller, action) in
|
||||
performAction.invoke(.updateSearchActive(true))
|
||||
action(.default)
|
||||
@ -1311,7 +1311,10 @@ private final class BrowserContentComponent: Component {
|
||||
let collapsedHeight: CGFloat = 24.0
|
||||
let topInset: CGFloat = component.insets.top + component.navigationBarHeight * (1.0 - component.scrollingPanelOffsetFraction) + collapsedHeight * component.scrollingPanelOffsetFraction
|
||||
let bottomInset = (49.0 + component.insets.bottom) * (1.0 - component.scrollingPanelOffsetFraction)
|
||||
component.content.updateLayout(size: availableSize, insets: UIEdgeInsets(top: topInset, left: component.insets.left, bottom: bottomInset, right: component.insets.right), transition: transition)
|
||||
let insets = UIEdgeInsets(top: topInset, left: component.insets.left, bottom: bottomInset, right: component.insets.right)
|
||||
let fullInsets = UIEdgeInsets(top: component.insets.top + component.navigationBarHeight, left: component.insets.left, bottom: 49.0 + component.insets.bottom, right: component.insets.right)
|
||||
|
||||
component.content.updateLayout(size: availableSize, insets: insets, fullInsets: fullInsets, transition: transition)
|
||||
transition.setFrame(view: component.content, frame: CGRect(origin: .zero, size: availableSize))
|
||||
|
||||
return availableSize
|
||||
|
@ -244,8 +244,8 @@ final class BrowserWebContent: UIView, BrowserContent, WKNavigationDelegate, WKU
|
||||
self.backgroundColor = presentationData.theme.list.plainBackgroundColor
|
||||
self.webView.underPageBackgroundColor = presentationData.theme.list.plainBackgroundColor
|
||||
}
|
||||
if let (size, insets) = self.validLayout {
|
||||
self.updateLayout(size: size, insets: insets, transition: .immediate)
|
||||
if let (size, insets, fullInsets) = self.validLayout {
|
||||
self.updateLayout(size: size, insets: insets, fullInsets: fullInsets, transition: .immediate)
|
||||
}
|
||||
}
|
||||
|
||||
@ -254,6 +254,7 @@ final class BrowserWebContent: UIView, BrowserContent, WKNavigationDelegate, WKU
|
||||
func updateFontState(_ state: BrowserPresentationState.FontState) {
|
||||
self.updateFontState(state, force: false)
|
||||
}
|
||||
|
||||
func updateFontState(_ state: BrowserPresentationState.FontState, force: Bool) {
|
||||
self.currentFontState = state
|
||||
|
||||
@ -432,13 +433,13 @@ final class BrowserWebContent: UIView, BrowserContent, WKNavigationDelegate, WKU
|
||||
self.webView.scrollView.setContentOffset(CGPoint(x: 0.0, y: -self.webView.scrollView.contentInset.top), animated: true)
|
||||
}
|
||||
|
||||
private var validLayout: (CGSize, UIEdgeInsets)?
|
||||
func updateLayout(size: CGSize, insets: UIEdgeInsets, transition: ComponentTransition) {
|
||||
self.validLayout = (size, insets)
|
||||
private var validLayout: (CGSize, UIEdgeInsets, UIEdgeInsets)?
|
||||
func updateLayout(size: CGSize, insets: UIEdgeInsets, fullInsets: UIEdgeInsets, transition: ComponentTransition) {
|
||||
self.validLayout = (size, insets, fullInsets)
|
||||
|
||||
self.previousScrollingOffset = ScrollingOffsetState(value: self.webView.scrollView.contentOffset.y, isDraggingOrDecelerating: self.webView.scrollView.isDragging || self.webView.scrollView.isDecelerating)
|
||||
|
||||
let webViewFrame = CGRect(origin: CGPoint(x: insets.left, y: insets.top), size: CGSize(width: size.width - insets.left - insets.right, height: size.height - insets.top - insets.bottom))
|
||||
let webViewFrame = CGRect(origin: CGPoint(x: insets.left, y: insets.top), size: CGSize(width: size.width - insets.left - insets.right, height: size.height - insets.top - fullInsets.bottom))
|
||||
var refresh = false
|
||||
if self.webView.frame.width > 0 && webViewFrame.width != self.webView.frame.width {
|
||||
refresh = true
|
||||
@ -575,8 +576,8 @@ final class BrowserWebContent: UIView, BrowserContent, WKNavigationDelegate, WKU
|
||||
} else {
|
||||
self.currentError = nil
|
||||
}
|
||||
if let (size, insets) = self.validLayout {
|
||||
self.updateLayout(size: size, insets: insets, transition: .immediate)
|
||||
if let (size, insets, fullInsets) = self.validLayout {
|
||||
self.updateLayout(size: size, insets: insets, fullInsets: fullInsets, transition: .immediate)
|
||||
}
|
||||
}
|
||||
|
||||
@ -586,8 +587,8 @@ final class BrowserWebContent: UIView, BrowserContent, WKNavigationDelegate, WKU
|
||||
} else {
|
||||
self.currentError = nil
|
||||
}
|
||||
if let (size, insets) = self.validLayout {
|
||||
self.updateLayout(size: size, insets: insets, transition: .immediate)
|
||||
if let (size, insets, fullInsets) = self.validLayout {
|
||||
self.updateLayout(size: size, insets: insets, fullInsets: fullInsets, transition: .immediate)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -264,6 +264,10 @@ private let darkTheme = InstantPageTheme(
|
||||
|
||||
private func fontSizeMultiplierForVariant(_ variant: InstantPagePresentationFontSize) -> CGFloat {
|
||||
switch variant {
|
||||
case .xxsmall:
|
||||
return 0.5
|
||||
case .xsmall:
|
||||
return 0.75
|
||||
case .small:
|
||||
return 0.85
|
||||
case .standard:
|
||||
@ -271,7 +275,7 @@ private func fontSizeMultiplierForVariant(_ variant: InstantPagePresentationFont
|
||||
case .large:
|
||||
return 1.15
|
||||
case .xlarge:
|
||||
return 1.3
|
||||
return 1.25
|
||||
case .xxlarge:
|
||||
return 1.5
|
||||
}
|
||||
|
@ -1508,7 +1508,15 @@ public final class MediaEditor {
|
||||
|
||||
public func setVideoTrimRange(_ trimRange: Range<Double>, apply: Bool) {
|
||||
self.updateValues(mode: .skipRendering) { values in
|
||||
return values.withUpdatedVideoTrimRange(trimRange)
|
||||
var updatedValues = values.withUpdatedVideoTrimRange(trimRange)
|
||||
if let coverImageTimestamp = updatedValues.coverImageTimestamp {
|
||||
if coverImageTimestamp < trimRange.lowerBound {
|
||||
updatedValues = updatedValues.withUpdatedCoverImageTimestamp(trimRange.lowerBound)
|
||||
} else if coverImageTimestamp > trimRange.upperBound {
|
||||
updatedValues = updatedValues.withUpdatedCoverImageTimestamp(trimRange.upperBound)
|
||||
}
|
||||
}
|
||||
return updatedValues
|
||||
}
|
||||
|
||||
if apply {
|
||||
|
@ -565,7 +565,7 @@ final class MediaCoverScreen: ViewController {
|
||||
if let coverImageTimestamp = mediaEditor.values.coverImageTimestamp {
|
||||
mediaEditor.seek(coverImageTimestamp, andPlay: false)
|
||||
} else {
|
||||
mediaEditor.seek(0.0, andPlay: false)
|
||||
mediaEditor.seek(mediaEditor.values.videoTrimRange?.lowerBound ?? 0.0, andPlay: false)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -4747,7 +4747,7 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
|
||||
self.controller?.currentCoverImage = image
|
||||
}
|
||||
}
|
||||
self.controller?.present(coverController, in: .window(.root))
|
||||
self.controller?.present(coverController, in: .current)
|
||||
self.coverScreen = coverController
|
||||
self.animateOutToTool(tool: .cover)
|
||||
}
|
||||
@ -5808,6 +5808,7 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
|
||||
return
|
||||
}
|
||||
mediaEditor.maybePauseVideo()
|
||||
mediaEditor.seek(mediaEditor.values.videoTrimRange?.lowerBound ?? 0.0, andPlay: false)
|
||||
|
||||
let privacy = privacy ?? self.state.privacy
|
||||
|
||||
@ -5916,9 +5917,7 @@ public final class MediaEditorScreen: ViewController, UIDropInteractionDelegate
|
||||
|
||||
editCoverImpl = { [weak self, weak controller] in
|
||||
if let self {
|
||||
Queue.mainQueue().after(0.25, {
|
||||
self.node.openCoverSelection()
|
||||
})
|
||||
self.node.openCoverSelection()
|
||||
}
|
||||
if let controller {
|
||||
controller.dismiss()
|
||||
|
@ -665,7 +665,7 @@ public final class MediaScrubberComponent: Component {
|
||||
transition.setFrame(view: self.ghostTrimView, frame: ghostTrimViewFrame)
|
||||
transition.setAlpha(view: self.ghostTrimView, alpha: ghostTrimVisible ? 0.75 : 0.0)
|
||||
|
||||
if case .videoMessage = component.style {
|
||||
if [.videoMessage, .cover].contains(component.style) {
|
||||
for (_ , trackView) in self.trackViews {
|
||||
trackView.updateOpaqueEdges(
|
||||
left: leftHandleFrame.minX,
|
||||
@ -803,7 +803,6 @@ private class TrackView: UIView, UIScrollViewDelegate, UIGestureRecognizerDelega
|
||||
|
||||
self.scrollView.delegate = self
|
||||
|
||||
self.videoTransparentFramesContainer.alpha = 0.5
|
||||
self.videoTransparentFramesContainer.clipsToBounds = true
|
||||
self.videoTransparentFramesContainer.isUserInteractionEnabled = false
|
||||
|
||||
@ -935,13 +934,16 @@ private class TrackView: UIView, UIScrollViewDelegate, UIGestureRecognizerDelega
|
||||
case .editor, .cover:
|
||||
fullTrackHeight = trackHeight
|
||||
framesCornerRadius = 9.0
|
||||
self.videoTransparentFramesContainer.alpha = 0.35
|
||||
case .videoMessage:
|
||||
fullTrackHeight = 33.0
|
||||
framesCornerRadius = fullTrackHeight / 2.0
|
||||
self.videoTransparentFramesContainer.alpha = 0.5
|
||||
}
|
||||
self.videoTransparentFramesContainer.layer.cornerRadius = framesCornerRadius
|
||||
self.videoOpaqueFramesContainer.layer.cornerRadius = framesCornerRadius
|
||||
|
||||
|
||||
let scrubberSize = CGSize(width: availableSize.width, height: isSelected ? fullTrackHeight : collapsedTrackHeight)
|
||||
|
||||
var screenSpanDuration = duration
|
||||
|
@ -11,6 +11,8 @@ public enum InstantPageThemeType: Int32 {
|
||||
}
|
||||
|
||||
public enum InstantPagePresentationFontSize: Int32 {
|
||||
case xxsmall = -2
|
||||
case xsmall = -1
|
||||
case small = 0
|
||||
case standard = 1
|
||||
case large = 2
|
||||
|
Loading…
x
Reference in New Issue
Block a user