Refactor LiveActivityManager and public_vars to improve clarity and remove unused comments

This commit is contained in:
2026-03-09 08:33:41 +01:00
parent c4945f6ab9
commit 93d8bef238
3 changed files with 21 additions and 57 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -26,18 +26,12 @@ final class LiveActivityManager {
static let shared = LiveActivityManager()
var currentActivity: Activity<LiveActivitiesAppAttributes>?
/// 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<LiveActivitiesAppAttributes>.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<LiveActivitiesAppAttributes>) 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<LiveActivitiesAppAttributes>.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)")
}
}
}