Things work - but animation is still janky

This commit is contained in:
Hariharan Mudaliar 2025-11-11 15:04:59 +05:30
commit ba27aa3d0f
4 changed files with 114 additions and 74 deletions

View file

@ -44,6 +44,7 @@ class DynamicIslandViewModel: NSObject, ObservableObject {
@Published var notchSize: CGSize = getClosedNotchSize()
@Published var closedNotchSize: CGSize = getClosedNotchSize()
private var minimalisticReminderRowCount: Int = 0
deinit {
destroy()
@ -71,6 +72,19 @@ class DynamicIslandViewModel: NSObject, ObservableObject {
.store(in: &cancellables)
setupDetectorObserver()
ReminderLiveActivityManager.shared.$activeWindowReminders
.removeDuplicates()
.receive(on: RunLoop.main)
.sink { [weak self] entries in
guard let self else { return }
self.minimalisticReminderRowCount = entries.count
let updatedTarget = self.calculateDynamicNotchSize()
guard self.notchState == .open else { return }
guard self.notchSize != updatedTarget else { return }
self.notchSize = updatedTarget
}
.store(in: &cancellables)
}
private func setupDetectorObserver() {
@ -124,8 +138,21 @@ class DynamicIslandViewModel: NSObject, ObservableObject {
}
func open() {
let targetSize = calculateDynamicNotchSize()
let applyWindowResize: () -> Void = {
guard let delegate = AppDelegate.shared else { return }
delegate.ensureWindowSize(targetSize, animated: false, force: true)
}
if Thread.isMainThread {
applyWindowResize()
} else {
DispatchQueue.main.async(execute: applyWindowResize)
}
withAnimation(.bouncy) {
self.notchSize = calculateDynamicNotchSize()
self.notchSize = targetSize
self.notchState = .open
}
@ -138,8 +165,7 @@ class DynamicIslandViewModel: NSObject, ObservableObject {
var baseSize = Defaults[.enableMinimalisticUI] ? minimalisticOpenNotchSize : openNotchSize
if Defaults[.enableMinimalisticUI] {
let reminderCount = ReminderLiveActivityManager.shared.activeWindowReminders.count
let extraHeight = ReminderLiveActivityManager.additionalHeight(forRowCount: reminderCount)
let extraHeight = ReminderLiveActivityManager.additionalHeight(forRowCount: minimalisticReminderRowCount)
baseSize.height += extraHeight
}