Refactor LiveActivityManager and public_vars to improve clarity and remove unused comments
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user