From 805b7bcf43071c1a74bdbe64f2305682ca637df5 Mon Sep 17 00:00:00 2001 From: Eduard Kuzmenko Date: Mon, 22 Feb 2021 16:43:26 +0400 Subject: [PATCH] Fix close animation on iOS Safari Fix dividing screen after swiping back if input was focused --- src/components/appNavigationController.ts | 53 ++++++++++++++++++----- src/lib/appManagers/appMessagesManager.ts | 11 ++--- 2 files changed, 44 insertions(+), 20 deletions(-) diff --git a/src/components/appNavigationController.ts b/src/components/appNavigationController.ts index c2b7c0fd..fd85a2f7 100644 --- a/src/components/appNavigationController.ts +++ b/src/components/appNavigationController.ts @@ -1,6 +1,6 @@ import { MOUNT_CLASS_TO } from "../config/debug"; import { isMobileSafari } from "../helpers/userAgent"; -import { cancelEvent } from "../helpers/dom"; +import { blurActiveElement, cancelEvent } from "../helpers/dom"; import { logger } from "../lib/logger"; import { doubleRaf } from "../helpers/schedulers"; @@ -50,18 +50,45 @@ export class AppNavigationController { }, {capture: true}); if(isMobileSafari) { - /* window.addEventListener('touchstart', (e) => { - this.debug && this.log('touchstart'); - }, {passive: true}); */ - - window.addEventListener('touchend', (e) => { - this.debug && this.log('touchend'); + const options = {passive: true}; + window.addEventListener('touchstart', (e) => { if(e.touches.length > 1) return; - isPossibleSwipe = true; - doubleRaf().then(() => { - isPossibleSwipe = false; - }); - }, {passive: true}); + this.debug && this.log('touchstart'); + + const detach = () => { + window.removeEventListener('touchend', onTouchEnd); + window.removeEventListener('touchmove', onTouchMove); + }; + + let moved = false; + const onTouchMove = (e: TouchEvent) => { + this.debug && this.log('touchmove'); + if(e.touches.length > 1) { + detach(); + return; + } + + moved = true; + }; + + const onTouchEnd = (e: TouchEvent) => { + this.debug && this.log('touchend'); + if(e.touches.length > 1 || !moved) { + detach(); + return; + } + + isPossibleSwipe = true; + doubleRaf().then(() => { + isPossibleSwipe = false; + }); + + detach(); + }; + + window.addEventListener('touchend', onTouchEnd, options); + window.addEventListener('touchmove', onTouchMove, options); + }, options); } this.pushState(); // * push init state @@ -72,6 +99,8 @@ export class AppNavigationController { this.debug && this.log('popstate, navigation:', item, this.navigations); if(good === false) { this.pushItem(item); + } else { + blurActiveElement(); // no better place for it } this.manual = false; diff --git a/src/lib/appManagers/appMessagesManager.ts b/src/lib/appManagers/appMessagesManager.ts index 7dff03fa..ed9775b1 100644 --- a/src/lib/appManagers/appMessagesManager.ts +++ b/src/lib/appManagers/appMessagesManager.ts @@ -4582,11 +4582,8 @@ export class AppMessagesManager { let offset = 0; let offsetNotFound = false; - let isMigrated = false; - let reqPeerId = peerId; - if(this.migratedToFrom[peerId]) { - isMigrated = true; - } + const isMigrated = !!this.migratedToFrom[peerId]; + const reqPeerId = peerId; if(maxId) { offsetNotFound = true; @@ -4726,8 +4723,6 @@ export class AppMessagesManager { } public requestHistory(peerId: number, maxId: number, limit = 0, offset = 0, offsetDate = 0, threadId = 0): Promise> { - const isChannel = appPeersManager.isChannel(peerId); - //console.trace('requestHistory', peerId, maxId, limit, offset); //rootScope.broadcast('history_request'); @@ -4758,7 +4753,7 @@ export class AppMessagesManager { appChatsManager.saveApiChats(historyResult.chats); this.saveMessages(historyResult.messages); - if(isChannel) { + if(appPeersManager.isChannel(peerId)) { apiUpdatesManager.addChannelState(-peerId, (historyResult as MessagesMessages.messagesChannelMessages).pts); }