folder behavior improvement
This commit is contained in:
1 parent
ffe48a5382
commit
90116e7ff6
2 files changed
+50
-20
No files matched your search
@@ -1587,6 +1587,7 @@ import ObjectiveC.runtime
|
|||||||
|
|
||||||
//==== Button widget tap down=============================================
|
//==== Button widget tap down=============================================
|
||||||
private func handleTapDownOrSlidein() {
|
private func handleTapDownOrSlidein() {
|
||||||
|
if self.isHidden {return}
|
||||||
if autoTapInterval < OnScreenWidgetView.MinAutotapInterval {
|
if autoTapInterval < OnScreenWidgetView.MinAutotapInterval {
|
||||||
handleButtonDown()
|
handleButtonDown()
|
||||||
}
|
}
|
||||||
@@ -1597,6 +1598,7 @@ import ObjectiveC.runtime
|
|||||||
}
|
}
|
||||||
|
|
||||||
private func handleFingerUpOrSlideout(leaveNonSkillButtonAlone: Bool = false, event: UIEvent? = nil) {
|
private func handleFingerUpOrSlideout(leaveNonSkillButtonAlone: Bool = false, event: UIEvent? = nil) {
|
||||||
|
if self.isHidden {return}
|
||||||
if autoTapInterval < OnScreenWidgetView.MinAutotapInterval {
|
if autoTapInterval < OnScreenWidgetView.MinAutotapInterval {
|
||||||
handleButtonUp(leaveNonSkillButtonAlone:leaveNonSkillButtonAlone, event:event)
|
handleButtonUp(leaveNonSkillButtonAlone:leaveNonSkillButtonAlone, event:event)
|
||||||
}
|
}
|
||||||
@@ -3593,7 +3595,7 @@ import ObjectiveC.runtime
|
|||||||
|
|
||||||
self.autoDockIsDocked = true
|
self.autoDockIsDocked = true
|
||||||
UIView.animate(
|
UIView.animate(
|
||||||
withDuration: 0.62,
|
withDuration: 0.1,
|
||||||
delay: 0,
|
delay: 0,
|
||||||
usingSpringWithDamping: OnScreenWidgetView.autoDockGoDamping,
|
usingSpringWithDamping: OnScreenWidgetView.autoDockGoDamping,
|
||||||
initialSpringVelocity: 0.35,
|
initialSpringVelocity: 0.35,
|
||||||
@@ -3607,7 +3609,7 @@ import ObjectiveC.runtime
|
|||||||
}
|
}
|
||||||
|
|
||||||
} completion: { _ in
|
} completion: { _ in
|
||||||
UIView.animate(withDuration: 0.1, delay: 0, options: [.allowUserInteraction, .curveEaseOut]) {
|
UIView.animate(withDuration: 0, delay: 0, options: [.allowUserInteraction, .curveEaseOut]) {
|
||||||
self.autoDockApplyTemporarySize()
|
self.autoDockApplyTemporarySize()
|
||||||
self.transform = .identity
|
self.transform = .identity
|
||||||
self.label.alpha = 0
|
self.label.alpha = 0
|
||||||
@@ -3713,18 +3715,19 @@ import ObjectiveC.runtime
|
|||||||
if !widget.isHidden {
|
if !widget.isHidden {
|
||||||
widget.center = CGPoint(x: widget.center.x+vector.dx, y: widget.center.y+vector.dy)
|
widget.center = CGPoint(x: widget.center.x+vector.dx, y: widget.center.y+vector.dy)
|
||||||
}
|
}
|
||||||
|
widget.layoutChanges.append(widget.storedCenter)
|
||||||
widget.relocatedDuringStreaming = true
|
widget.relocatedDuringStreaming = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@objc static var enableFolderAnimation:Bool = true
|
@objc static var enableFolderAnimation:Bool = true
|
||||||
private static func setCollection(hidden:Bool, for folder:OnScreenWidgetView, exception:OnScreenWidgetView? = nil, recursive:Bool = false) {
|
private static func setCollection(folded:Bool, for folder:OnScreenWidgetView, exception:OnScreenWidgetView? = nil, recursive:Bool = false) {
|
||||||
guard folder.isFolder else {return}
|
guard folder.isFolder else {return}
|
||||||
// guard folder.folded != hidden else { return }
|
// guard folder.folded != hidden else { return }
|
||||||
folder.folded = hidden
|
folder.folded = folded
|
||||||
folder.setupAtrributedText()
|
folder.setupAtrributedText()
|
||||||
folder.reverseColorPhase(reversed: !folder.folded)
|
folder.reverseColorPhase(reversed: !folder.folded)
|
||||||
if hidden {
|
if folded {
|
||||||
for sequence in folder.sequenceSet {
|
for sequence in folder.sequenceSet {
|
||||||
guard let widget = OnScreenWidgetView.mapping[sequence], widget != exception else {continue}
|
guard let widget = OnScreenWidgetView.mapping[sequence], widget != exception else {continue}
|
||||||
DispatchQueue.main.async {
|
DispatchQueue.main.async {
|
||||||
@@ -3739,7 +3742,7 @@ import ObjectiveC.runtime
|
|||||||
UIView.animate(withDuration: duration, animations: {
|
UIView.animate(withDuration: duration, animations: {
|
||||||
widget.center = folder.center
|
widget.center = folder.center
|
||||||
},completion: { finished in
|
},completion: { finished in
|
||||||
widget.isUserInteractionEnabled = !hidden
|
widget.isUserInteractionEnabled = !folded
|
||||||
widget.center = folder.folded ? folder.storedCenter : widget.storedCenter
|
widget.center = folder.folded ? folder.storedCenter : widget.storedCenter
|
||||||
widget.isHidden = folder.folded
|
widget.isHidden = folder.folded
|
||||||
if ((folder.buttonMode != .slideAndHold && widget.widgetType == .touchPad)
|
if ((folder.buttonMode != .slideAndHold && widget.widgetType == .touchPad)
|
||||||
@@ -3790,14 +3793,22 @@ import ObjectiveC.runtime
|
|||||||
for sequence in folder.sequenceSet {
|
for sequence in folder.sequenceSet {
|
||||||
guard let widget = OnScreenWidgetView.mapping[sequence] else {continue}
|
guard let widget = OnScreenWidgetView.mapping[sequence] else {continue}
|
||||||
guard widget.isFolder, widget != exception else {continue}
|
guard widget.isFolder, widget != exception else {continue}
|
||||||
OnScreenWidgetView.setCollection(hidden: hidden, for: widget, exception: exception, recursive: true)
|
OnScreenWidgetView.setCollection(folded: folded, for: widget, exception: exception, recursive: true)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static func setCollection(hidden:Bool, for folder:OnScreenWidgetView) {
|
||||||
|
for sequence in folder.sequenceSet {
|
||||||
|
guard let widget = OnScreenWidgetView.mapping[sequence] else {continue}
|
||||||
|
widget.isHidden = hidden
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@objc static func set(folded:Bool, for folder:OnScreenWidgetView) { // folder综合逻辑
|
@objc static func set(folded:Bool, for folder:OnScreenWidgetView) { // folder综合逻辑
|
||||||
guard folder.isFolder else {return}
|
guard folder.isFolder else {return}
|
||||||
setCollection(hidden: folded, for: folder)
|
setCollection(folded: folded, for: folder)
|
||||||
|
|
||||||
if !folded, folder.revealMode == .exclusive {
|
if !folded, folder.revealMode == .exclusive {
|
||||||
OnScreenWidgetView.unfoldedExclusiveFolderSequence = folder.sequence
|
OnScreenWidgetView.unfoldedExclusiveFolderSequence = folder.sequence
|
||||||
if(!isRestoringFolderStates) {OnScreenWidgetView.postExclusiveUnfoldedSequences.removeAll()}
|
if(!isRestoringFolderStates) {OnScreenWidgetView.postExclusiveUnfoldedSequences.removeAll()}
|
||||||
@@ -3811,17 +3822,17 @@ import ObjectiveC.runtime
|
|||||||
}
|
}
|
||||||
|
|
||||||
offshootRootFolders.remove(currentRootFolder)
|
offshootRootFolders.remove(currentRootFolder)
|
||||||
for folder in offshootRootFolders {
|
for _ in offshootRootFolders {
|
||||||
// print("offshootRootFolder \(CACurrentMediaTime()) \(folder.label.text ?? "")")
|
// print("offshootRootFolder \(CACurrentMediaTime()) \(folder.label.text ?? "")")
|
||||||
}
|
}
|
||||||
|
|
||||||
guard !folder.sequenceSet.isEmpty else {return}
|
guard !folder.sequenceSet.isEmpty else {return}
|
||||||
for folder in offshootRootFolders {
|
for folder in offshootRootFolders {
|
||||||
setCollection(hidden: true, for: folder, recursive: true)
|
setCollection(folded: true, for: folder, recursive: true)
|
||||||
}
|
}
|
||||||
|
|
||||||
guard currentRootFolder != folder else {return}
|
guard currentRootFolder != folder else {return}
|
||||||
setCollection(hidden: true, for:currentRootFolder, exception: folder, recursive: true)
|
setCollection(folded: true, for:currentRootFolder, exception: folder, recursive: true)
|
||||||
}
|
}
|
||||||
if folded, folder.revealMode == .exclusive {
|
if folded, folder.revealMode == .exclusive {
|
||||||
OnScreenWidgetView.unfoldedExclusiveFolderSequence = -1
|
OnScreenWidgetView.unfoldedExclusiveFolderSequence = -1
|
||||||
@@ -3830,7 +3841,22 @@ import ObjectiveC.runtime
|
|||||||
if folded {
|
if folded {
|
||||||
OnScreenWidgetView.postExclusiveUnfoldedSequences.remove(folder.sequence)
|
OnScreenWidgetView.postExclusiveUnfoldedSequences.remove(folder.sequence)
|
||||||
}
|
}
|
||||||
else {OnScreenWidgetView.postExclusiveUnfoldedSequences.insert(folder.sequence)}
|
else {
|
||||||
|
OnScreenWidgetView.postExclusiveUnfoldedSequences.insert(folder.sequence)
|
||||||
|
for unfoldedExclusiveFolder in OnScreenWidgetView.mapping.values.filter({$0.isFolder
|
||||||
|
&& !$0.folded
|
||||||
|
&& $0 != folder
|
||||||
|
&& $0.revealMode == .exclusive
|
||||||
|
&& !OnScreenWidgetView.getParentFolders(of: $0).contains(folder)}) {
|
||||||
|
OnScreenWidgetView.setCollection(folded: true, for: unfoldedExclusiveFolder)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if folder.buttonMode == .slideAndHold, folder.isOnlyRootFolder(), folder.revealMode == .coexist {
|
||||||
|
for otherUnfoldedFolder in OnScreenWidgetView.mapping.values.filter({$0.isFolder && !$0.folded && $0 != folder}) {
|
||||||
|
OnScreenWidgetView.setCollection(hidden: !folded, for: otherUnfoldedFolder)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3863,8 +3889,14 @@ import ObjectiveC.runtime
|
|||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private func isOnlyRootFolder() -> Bool {
|
||||||
|
let rootFolders = OnScreenWidgetView.mapping.values.filter({$0.isFolder && $0.parentSequence == -1})
|
||||||
|
if rootFolders.count != 1 {return false}
|
||||||
|
return rootFolders.contains(self)
|
||||||
|
}
|
||||||
|
|
||||||
@objc static var onlyRootFolderVisible: Bool {
|
@objc static var onlyRootFolderVisible: Bool {
|
||||||
var visibleNonFolerCount:Int = 0
|
var visibleNonFolderCount:Int = 0
|
||||||
var visibleFolderCount:Int = 0
|
var visibleFolderCount:Int = 0
|
||||||
for widget in OnScreenWidgetView.mapping.values {
|
for widget in OnScreenWidgetView.mapping.values {
|
||||||
if widget.isHidden {continue}
|
if widget.isHidden {continue}
|
||||||
@@ -3874,8 +3906,8 @@ import ObjectiveC.runtime
|
|||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
visibleNonFolerCount += 1
|
visibleNonFolderCount += 1
|
||||||
if visibleNonFolerCount > 0 {return false}
|
if visibleNonFolderCount > 0 {return false}
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -3923,7 +3955,7 @@ import ObjectiveC.runtime
|
|||||||
}
|
}
|
||||||
|
|
||||||
for widget in OnScreenWidgetView.mapping.values {
|
for widget in OnScreenWidgetView.mapping.values {
|
||||||
OnScreenWidgetView.setCollection(hidden: widget.folded, for: widget, exception: unfoldedExclusiveFolder)
|
OnScreenWidgetView.setCollection(folded: widget.folded, for: widget, exception: unfoldedExclusiveFolder)
|
||||||
}
|
}
|
||||||
|
|
||||||
if(unfoldedExclusiveFolder != nil){
|
if(unfoldedExclusiveFolder != nil){
|
||||||
|
|||||||
@@ -218,9 +218,7 @@ public final class WidgetPickerViewController: UIViewController {
|
|||||||
|
|
||||||
private static func refreshSystemGestureDeferral() {
|
private static func refreshSystemGestureDeferral() {
|
||||||
guard let hostViewController = originalHostViewController else { return }
|
guard let hostViewController = originalHostViewController else { return }
|
||||||
if #available(iOS 11.0, *) {
|
hostViewController.setNeedsUpdateOfScreenEdgesDeferringSystemGestures()
|
||||||
hostViewController.setNeedsUpdateOfScreenEdgesDeferringSystemGestures()
|
hostViewController.setNeedsUpdateOfHomeIndicatorAutoHidden()
|
||||||
hostViewController.setNeedsUpdateOfHomeIndicatorAutoHidden()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in new issue
Block a user