From ab13b91d20ca16d8465a8638c833cfca7fda6c5c Mon Sep 17 00:00:00 2001 From: Hariharan Mudaliar Date: Wed, 13 Aug 2025 23:37:44 +0530 Subject: [PATCH] Updates WOrking --- DynamicIsland/ContentView.swift | 10 ++- .../components/Notch/NotchStatsView.swift | 72 +++++++++++++++---- DynamicIsland/managers/StatsManager.swift | 8 +-- 3 files changed, 72 insertions(+), 18 deletions(-) diff --git a/DynamicIsland/ContentView.swift b/DynamicIsland/ContentView.swift index d194707..8760a57 100644 --- a/DynamicIsland/ContentView.swift +++ b/DynamicIsland/ContentView.swift @@ -125,7 +125,15 @@ struct ContentView: View { // Only close if mouse leaves and the notch is open and no popovers are active if !hovering && vm.notchState == .open && !vm.isBatteryPopoverActive { - vm.close() + // Add slight delay for stats tab to prevent accidental closure during layout changes + let delay: Double = (coordinator.currentView == .stats) ? 0.2 : 0.0 + + DispatchQueue.main.asyncAfter(deadline: .now() + delay) { + // Double-check conditions after delay + if !isHovering && vm.notchState == .open && !vm.isBatteryPopoverActive { + vm.close() + } + } } } .onTapGesture { diff --git a/DynamicIsland/components/Notch/NotchStatsView.swift b/DynamicIsland/components/Notch/NotchStatsView.swift index 6deac34..94e81e5 100644 --- a/DynamicIsland/components/Notch/NotchStatsView.swift +++ b/DynamicIsland/components/Notch/NotchStatsView.swift @@ -118,25 +118,71 @@ struct NotchStatsView: View { return graphs } - // Simplified and more consistent layout system + // Smart grid layout system for different graph counts @ViewBuilder var statsGridLayout: some View { let graphCount = availableGraphs.count - // Use LazyVGrid for all cases - more predictable layout behavior - LazyVGrid( - columns: Array(repeating: GridItem(.flexible(), spacing: 8), count: min(graphCount, 3)), - spacing: 12 - ) { - ForEach(0.. 0.1 && previousNetworkStats.bytesIn > 0 && previousNetworkStats.bytesOut > 0 { + // Only calculate speeds if we have a reasonable time interval and this isn't the first run + if timeInterval > 0.1 && (previousNetworkStats.bytesIn > 0 || previousNetworkStats.bytesOut > 0) { let bytesDownloaded = currentNetworkStats.bytesIn > previousNetworkStats.bytesIn ? currentNetworkStats.bytesIn - previousNetworkStats.bytesIn : 0 let bytesUploaded = currentNetworkStats.bytesOut > previousNetworkStats.bytesOut ? @@ -136,8 +136,8 @@ class StatsManager: ObservableObject { var readSpeed: Double = 0.0 var writeSpeed: Double = 0.0 - // Only calculate speeds if we have a reasonable time interval and previous data - if timeInterval > 0.1 && previousDiskStats.bytesRead > 0 && previousDiskStats.bytesWritten > 0 { + // Only calculate speeds if we have a reasonable time interval and this isn't the first run + if timeInterval > 0.1 && (previousDiskStats.bytesRead > 0 || previousDiskStats.bytesWritten > 0) { let bytesRead = currentDiskStats.bytesRead > previousDiskStats.bytesRead ? currentDiskStats.bytesRead - previousDiskStats.bytesRead : 0 let bytesWritten = currentDiskStats.bytesWritten > previousDiskStats.bytesWritten ?