From 93d8bef23852355765a88d386cd6011663727e6d Mon Sep 17 00:00:00 2001 From: b3ni15 Date: Mon, 9 Mar 2026 08:33:41 +0100 Subject: [PATCH] Refactor LiveActivityManager and public_vars to improve clarity and remove unused comments --- refilc/ios/Runner/AppDelegate.swift | 7 --- refilc/ios/Runner/public_vars.swift | 8 --- refilc/ios/livecard/LiveActivityManager.swift | 63 +++++++------------ 3 files changed, 21 insertions(+), 57 deletions(-) diff --git a/refilc/ios/Runner/AppDelegate.swift b/refilc/ios/Runner/AppDelegate.swift index 997e0114..f9e9c061 100644 --- a/refilc/ios/Runner/AppDelegate.swift +++ b/refilc/ios/Runner/AppDelegate.swift @@ -32,7 +32,6 @@ import Security self?.handleMethodCall(call, result: result) }) - // Activity dismiss figyelése: ha a user swipe-olja, értesítjük Flutter-t NotificationCenter.default.addObserver( forName: NSNotification.Name("LiveActivityDismissed"), object: nil, @@ -44,7 +43,6 @@ import Security ]) } - // Token rotation figyelése: ha az APNs új tokent ad, értesítjük Flutter-t tokenRotationObserver = NotificationCenter.default.addObserver( forName: NSNotification.Name("LiveActivityTokenUpdated"), object: nil, @@ -123,8 +121,6 @@ import Security } } - // MARK: - Keychain device ID - private func getOrCreateDeviceId() -> String { let keychainKey = "refilc.live.device_id" let query: [String: Any] = [ @@ -139,7 +135,6 @@ import Security let existingId = String(data: data, encoding: .utf8) { return existingId } - // Nem létezik – generálunk egyet let newId = UUID().uuidString let addQuery: [String: Any] = [ kSecClass as String: kSecClassGenericPassword, @@ -150,8 +145,6 @@ import Security return newId } - // MARK: - Helpers - private func checkLiveActivityFeatureAvailable() -> Bool { if #available(iOS 16.2, *) { return ActivityAuthorizationInfo().areActivitiesEnabled diff --git a/refilc/ios/Runner/public_vars.swift b/refilc/ios/Runner/public_vars.swift index 4019ce74..b35fe24b 100644 --- a/refilc/ios/Runner/public_vars.swift +++ b/refilc/ios/Runner/public_vars.swift @@ -1,15 +1,7 @@ -// -// public_vars.swift -// Runner -// -// Created by Geryy on 02/05/2024. -// - import Foundation var lessonDataDictionary: [String: Any] = [:] var globalLessonData = LessonData(from: lessonDataDictionary) var activityID: String? = "" var activityPushToken: String? = nil -/// Ha true, a monitorActivityState nem küld dismiss notification-t (cleanup közben vagyunk) var isCleaningUpOldActivities = false diff --git a/refilc/ios/livecard/LiveActivityManager.swift b/refilc/ios/livecard/LiveActivityManager.swift index 792012fc..6a83c70b 100644 --- a/refilc/ios/livecard/LiveActivityManager.swift +++ b/refilc/ios/livecard/LiveActivityManager.swift @@ -26,18 +26,12 @@ final class LiveActivityManager { static let shared = LiveActivityManager() var currentActivity: Activity? - /// Létrehozza a Live Activity-t pushType: .token-nel. - /// A completion azonnal meghívódik a létrehozás után (success/fail). - /// A push token később érkezik a pushTokenUpdates-en keresztül. class func create(completion: @escaping (Bool) -> Void) { Task { - // Előző activity-k eltakarítása, hogy ne legyen dupla - // Flag beállítása, hogy a monitorActivityState ne küldjön dismiss notification-t isCleaningUpOldActivities = true for activity in Activity.activities { await activity.end(nil, dismissalPolicy: .immediate) } - // Kis várakozás, hogy a state update-ek lefussanak try? await Task.sleep(nanoseconds: 200_000_000) isCleaningUpOldActivities = false @@ -71,14 +65,10 @@ final class LiveActivityManager { activityID = activity.id print("Live Activity létrehozva. Azonosító: \(activity.id)") - // Azonnal visszatérünk — a LA látszik completion(true) - // Dismiss/end figyelése háttérben Task { await monitorActivityState(activity: activity) } - // Push token figyelése háttérben — az első és a rotation is - // a LiveActivityTokenUpdated notification-ön keresztül megy Flutter felé Task { for await tokenData in activity.pushTokenUpdates { let tokenHex = tokenData.map { String(format: "%02x", $0) }.joined() @@ -97,11 +87,9 @@ final class LiveActivityManager { } } - /// Activity state figyelése: ha a user dismiss-eli vagy véget ér, értesítjük a Flutter-t. private class func monitorActivityState(activity: Activity) async { for await state in activity.activityStateUpdates { if state == .dismissed || state == .ended { - // Ha cleanup közben vagyunk (create() hívta), ne küldjünk dismiss notification-t if isCleaningUpOldActivities { print("Live Activity ended during cleanup - ignoring dismiss") break @@ -113,47 +101,38 @@ final class LiveActivityManager { name: NSNotification.Name("LiveActivityDismissed"), object: nil ) - // Activity formálisan is leállítjuk ha még fut await activity.end(nil, dismissalPolicy: .immediate) break } } } - /// Token rotation figyelése: ha az APNs új tokent ad ki, értesítjük a Flutter oldalt. - /// MEGJEGYZÉS: Már nem használjuk külön — a create() maga figyeli a pushTokenUpdates-t - /// és minden tokent (elsőt is, rotation-t is) a LiveActivityTokenUpdated notification-ön küld. - class func update() { Task { for activity in Activity.activities { - do { - let contentState = LiveActivitiesAppAttributes.ContentState( - color: globalLessonData.color, - icon: globalLessonData.icon, - index: globalLessonData.index, - title: globalLessonData.title, - subtitle: globalLessonData.subtitle, - description: globalLessonData.description, - startDate: globalLessonData.startDate, - endDate: globalLessonData.endDate, - date: globalLessonData.date, - nextSubject: globalLessonData.nextSubject, - nextRoom: globalLessonData.nextRoom - ) + let contentState = LiveActivitiesAppAttributes.ContentState( + color: globalLessonData.color, + icon: globalLessonData.icon, + index: globalLessonData.index, + title: globalLessonData.title, + subtitle: globalLessonData.subtitle, + description: globalLessonData.description, + startDate: globalLessonData.startDate, + endDate: globalLessonData.endDate, + date: globalLessonData.date, + nextSubject: globalLessonData.nextSubject, + nextRoom: globalLessonData.nextRoom + ) - let activityContent = ActivityContent( - state: contentState, - staleDate: globalLessonData.endDate, - relevanceScore: 0 - ) + let activityContent = ActivityContent( + state: contentState, + staleDate: globalLessonData.endDate, + relevanceScore: 0 + ) - await activity.update(activityContent) - activityID = activity.id - print("Live Activity frissítve. Azonosító: \(activity.id)") - } catch { - print("Hiba történt a Live Activity frissítésekor: \(error)") - } + await activity.update(activityContent) + activityID = activity.id + print("Live Activity frissítve. Azonosító: \(activity.id)") } } }