Various improvements

This commit is contained in:
Ilya Laktyushin 2024-07-24 10:28:56 +04:00
parent 9ba0743553
commit b006c36c59
13 changed files with 95 additions and 41 deletions

View File

@ -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";

View File

@ -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 {

View File

@ -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)

View File

@ -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
}

View File

@ -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)

View File

@ -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

View File

@ -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)
}
}

View File

@ -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
}

View File

@ -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 {

View File

@ -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)
}
}

View File

@ -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()

View File

@ -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

View File

@ -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