restoring fold/unfold states

This commit is contained in:
True Zhuanjia committed 2026-02-01 16:02:57 +08:00
1 parent be69af925a
commit 600b882929
8 files changed
+83 -18

No files matched your search

+34 -3
View File
@@ -11,9 +11,13 @@ import SVGKit
@objc class OnScreenWidgetView: UIView {
@objc public static var mapping: [Int16:OnScreenWidgetView] = [:]
@objc public static var isRestoring: Bool = false
@objc public static func set(widget:OnScreenWidgetView, for key:Int16) {
mapping[key] = widget
}
@objc public static func widgetFor(key:Int16) -> OnScreenWidgetView? {
return mapping[key]
}
@objc public static func removeWidgetFromMappings(key:Int16) {
mapping.removeValue(forKey: key)
}
@@ -21,6 +25,12 @@ import SVGKit
mapping.removeAll()
}
@objc public static var unfoldedExclusiveFolderSequence:Int16 = -1
@objc public static var postExclusiveUnfoldedSequences:Set<Int16> = Set()
@objc public static func setPostExclusiveUnfoldeds(_ sequences:NSSet){
let sequenceSet:Set<Int16> = sequences as? Set<Int16> ?? Set()
postExclusiveUnfoldedSequences = Set(sequenceSet)
print("postExclusiveUnfoldedSequences \(postExclusiveUnfoldedSequences) \(CACurrentMediaTime())")
}
@objc public weak var guidelineDelegate: OnScreenWidgetGuidelineUpdateDelegate?
@objc protocol OnScreenWidgetGuidelineUpdateDelegate: AnyObject {
@@ -274,6 +284,7 @@ import SVGKit
private var tickFlag: UInt8 = 0
@objc public var folded: Bool = false
@objc public var persistedFolded: Bool = false
@objc public var revealMode: RevealMode = .coexist
@objc public var sequenceSet: Set<Int16> = Set()
@objc public var parentSequence: Int16 = -1
@@ -2804,6 +2815,7 @@ import SVGKit
setCollection(hidden: folded, for: folder)
if !folded, folder.revealMode == .exclusive {
OnScreenWidgetView.unfoldedExclusiveFolderSequence = folder.sequence
if(!isRestoring) {OnScreenWidgetView.postExclusiveUnfoldedSequences.removeAll()}
let currentRootFolder = OnScreenWidgetView.getRootFolder(of: folder) ?? folder
var offshootRootFolders:Set<OnScreenWidgetView> = Set()
folder.forEachWidget{ widget in
@@ -2822,6 +2834,15 @@ import SVGKit
guard currentRootFolder != folder else {return}
setCollection(hidden: true, for:currentRootFolder, exception: folder, recursive: true)
}
if folded, folder.revealMode == .exclusive {
OnScreenWidgetView.unfoldedExclusiveFolderSequence = -1
}
if folder.revealMode == .coexist {
if folded {
OnScreenWidgetView.postExclusiveUnfoldedSequences.remove(folder.sequence)
}
else {OnScreenWidgetView.postExclusiveUnfoldedSequences.insert(folder.sequence)}
}
}
private static func getRootFolder(of widget:OnScreenWidgetView) -> OnScreenWidgetView?{
@@ -2867,17 +2888,27 @@ import SVGKit
}
@objc static func restoreFoldedStates(){
isRestoring = true
var unfoldedExclusiveFolder: OnScreenWidgetView?
if unfoldedExclusiveFolderSequence != -1 {
unfoldedExclusiveFolder = OnScreenWidgetView.mapping[unfoldedExclusiveFolderSequence]
if(unfoldedExclusiveFolder != nil){
OnScreenWidgetView.set(folded: false, for: unfoldedExclusiveFolder!)
}
}
for widget in OnScreenWidgetView.mapping.values {
OnScreenWidgetView.setCollection(hidden: widget.folded, for: widget, exception: unfoldedExclusiveFolder)
}
if(unfoldedExclusiveFolder != nil){
OnScreenWidgetView.set(folded: false, for: unfoldedExclusiveFolder!)
}
print("postExclusiveUnfoldedSequences \(postExclusiveUnfoldedSequences) stamp \(CACurrentMediaTime())")
for sequence in postExclusiveUnfoldedSequences {
guard let folder = OnScreenWidgetView.mapping[sequence] else { continue }
OnScreenWidgetView.set(folded: false, for: folder)
}
isRestoring = false
}
override func didMoveToSuperview() {