mirror of
https://github.com/toeverything/AFFiNE.git
synced 2026-07-26 23:02:57 +08:00
feat(core): improve mobile perf (#15317)
#### PR Dependency Tree * **PR #15317** 👈 This tree was auto-generated by [Charcoal](https://github.com/danerwilliams/charcoal) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Virtualized mobile navigation with shell navigation and interactive swipe menus; coordinated mobile back handling with interactive phases/state restoration. * Added shared auth request proxy and message-port based token handling across mobile and worker flows. * **Bug Fixes** * Hydrated remote worker error stacks for calls and observable errors. * Improved SQLite FTS/indexer and nbstore optional text handling; refined docs-search ref parsing and notification loading/retry. * **Refactor / UX** * Modal focus-preservation and pointer behavior updates; improved mobile menu controls and back gesture plugins. <!-- end of auto-generated comment: release notes by coderabbit.ai -->
This commit is contained in:
@@ -55,6 +55,11 @@ class AFFiNEViewController: CAPBridgeViewController, UIScrollViewDelegate, Affin
|
||||
dismissIntelligentsButton()
|
||||
}
|
||||
|
||||
override func didReceiveMemoryWarning() {
|
||||
super.didReceiveMemoryWarning()
|
||||
webView?.evaluateJavaScript("window.dispatchEvent(new Event('affine:memory-pressure'))")
|
||||
}
|
||||
|
||||
override func capacitorDidLoad() {
|
||||
let plugins: [CAPPlugin] = [
|
||||
AffineThemePlugin(associatedController: self),
|
||||
|
||||
@@ -664,7 +664,7 @@ public class NbStorePlugin: CAPPlugin, CAPBridgedPlugin {
|
||||
indexName: indexName,
|
||||
docId: docId
|
||||
)
|
||||
call.resolve(["text": text as Any])
|
||||
call.resolve(["text": text ?? NSNull()])
|
||||
} catch {
|
||||
call.reject("Failed to get fts document, \(error)", nil, error)
|
||||
}
|
||||
|
||||
+38
-6
@@ -1,5 +1,6 @@
|
||||
import Capacitor
|
||||
import Foundation
|
||||
import UIKit
|
||||
|
||||
@objc(NavigationGesturePlugin)
|
||||
public class NavigationGesturePlugin: CAPPlugin, CAPBridgedPlugin {
|
||||
@@ -10,23 +11,54 @@ public class NavigationGesturePlugin: CAPPlugin, CAPBridgedPlugin {
|
||||
CAPPluginMethod(name: "enable", returnType: CAPPluginReturnPromise),
|
||||
CAPPluginMethod(name: "disable", returnType: CAPPluginReturnPromise),
|
||||
]
|
||||
private var edgePan: UIScreenEdgePanGestureRecognizer?
|
||||
|
||||
public override func load() {
|
||||
guard let webView = bridge?.webView else { return }
|
||||
let recognizer = UIScreenEdgePanGestureRecognizer(target: self, action: #selector(handleEdgePan(_:)))
|
||||
recognizer.edges = .left
|
||||
recognizer.isEnabled = false
|
||||
webView.addGestureRecognizer(recognizer)
|
||||
edgePan = recognizer
|
||||
}
|
||||
|
||||
@objc func isEnabled(_ call: CAPPluginCall) {
|
||||
let enabled = bridge?.webView?.allowsBackForwardNavigationGestures ?? true
|
||||
call.resolve(["value": enabled])
|
||||
DispatchQueue.main.async {
|
||||
let enabled = self.edgePan?.isEnabled ?? false
|
||||
call.resolve(["value": enabled])
|
||||
}
|
||||
}
|
||||
|
||||
@objc func enable(_ call: CAPPluginCall) {
|
||||
DispatchQueue.main.sync {
|
||||
self.bridge?.webView?.allowsBackForwardNavigationGestures = true
|
||||
DispatchQueue.main.async {
|
||||
self.edgePan?.isEnabled = true
|
||||
call.resolve([:])
|
||||
}
|
||||
}
|
||||
|
||||
@objc func disable(_ call: CAPPluginCall) {
|
||||
DispatchQueue.main.sync {
|
||||
self.bridge?.webView?.allowsBackForwardNavigationGestures = false
|
||||
DispatchQueue.main.async {
|
||||
self.edgePan?.isEnabled = false
|
||||
call.resolve([:])
|
||||
}
|
||||
}
|
||||
|
||||
@objc private func handleEdgePan(_ recognizer: UIScreenEdgePanGestureRecognizer) {
|
||||
guard let view = recognizer.view else { return }
|
||||
let progress = min(1, max(0, recognizer.translation(in: view).x / max(1, view.bounds.width)))
|
||||
switch recognizer.state {
|
||||
case .began:
|
||||
notifyListeners("gesture", data: ["phase": "begin", "progress": progress])
|
||||
case .changed:
|
||||
notifyListeners("gesture", data: ["phase": "progress", "progress": progress])
|
||||
case .ended:
|
||||
let velocity = recognizer.velocity(in: view).x
|
||||
let phase = progress >= 0.35 || velocity >= 500 ? "commit" : "cancel"
|
||||
notifyListeners("gesture", data: ["phase": phase, "progress": progress])
|
||||
case .cancelled, .failed:
|
||||
notifyListeners("gesture", data: ["phase": "cancel", "progress": progress])
|
||||
default:
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user