Skip to content

Commit 8aca084

Browse files
committed
Refactored Activities (previously TaskNotifications) to have a clear distinction in name and have a consistent API when compared with Notifications.
1 parent 5e6c608 commit 8aca084

25 files changed

+313
-461
lines changed

CodeEdit.xcodeproj/project.pbxproj

+37-37
Original file line numberDiff line numberDiff line change
@@ -309,9 +309,8 @@
309309
613DF55E2B08DD5D00E9D902 /* FileHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = 613DF55D2B08DD5D00E9D902 /* FileHelper.swift */; };
310310
61538B902B111FE800A88846 /* String+AppearancesOfSubstring.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61538B8F2B111FE800A88846 /* String+AppearancesOfSubstring.swift */; };
311311
61538B932B11201900A88846 /* String+Character.swift in Sources */ = {isa = PBXBuildFile; fileRef = 61538B922B11201900A88846 /* String+Character.swift */; };
312-
617DB3D02C25AFAE00B58BFE /* TaskNotificationHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 617DB3CF2C25AFAE00B58BFE /* TaskNotificationHandler.swift */; };
313-
617DB3D32C25AFEA00B58BFE /* TaskNotificationModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 617DB3D22C25AFEA00B58BFE /* TaskNotificationModel.swift */; };
314-
617DB3D62C25B02D00B58BFE /* TaskNotificationView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 617DB3D52C25B02D00B58BFE /* TaskNotificationView.swift */; };
312+
617DB3D02C25AFAE00B58BFE /* ActivityManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 617DB3CF2C25AFAE00B58BFE /* ActivityManager.swift */; };
313+
617DB3D62C25B02D00B58BFE /* ActivitiesView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 617DB3D52C25B02D00B58BFE /* ActivitiesView.swift */; };
315314
617DB3D82C25B04D00B58BFE /* CECircularProgressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 617DB3D72C25B04D00B58BFE /* CECircularProgressView.swift */; };
316315
617DB3DA2C25B07F00B58BFE /* TaskNotificationsDetailView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 617DB3D92C25B07F00B58BFE /* TaskNotificationsDetailView.swift */; };
317316
617DB3DC2C25B14A00B58BFE /* ActivityViewer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 617DB3DB2C25B14A00B58BFE /* ActivityViewer.swift */; };
@@ -530,6 +529,7 @@
530529
B616EA892D651ADA00DF9029 /* OverlayButtonStyle.swift in Sources */ = {isa = PBXBuildFile; fileRef = B616EA862D651ADA00DF9029 /* OverlayButtonStyle.swift */; };
531530
B616EA8D2D65238900DF9029 /* InternalDevelopmentInspectorView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B616EA8B2D65238900DF9029 /* InternalDevelopmentInspectorView.swift */; };
532531
B616EA8F2D662E9800DF9029 /* InternalDevelopmentNotificationsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B616EA8E2D662E9800DF9029 /* InternalDevelopmentNotificationsView.swift */; };
532+
B616EA942D67C4DA00DF9029 /* CEActivity.swift in Sources */ = {isa = PBXBuildFile; fileRef = B616EA932D67C4DA00DF9029 /* CEActivity.swift */; };
533533
B61A606129F188AB009B43F9 /* ExternalLink.swift in Sources */ = {isa = PBXBuildFile; fileRef = B61A606029F188AB009B43F9 /* ExternalLink.swift */; };
534534
B61A606929F4481A009B43F9 /* MonospacedFontPicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = B61A606829F4481A009B43F9 /* MonospacedFontPicker.swift */; };
535535
B61DA9DF29D929E100BF4A43 /* GeneralSettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = B61DA9DE29D929E100BF4A43 /* GeneralSettingsView.swift */; };
@@ -1023,9 +1023,8 @@
10231023
613DF55D2B08DD5D00E9D902 /* FileHelper.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileHelper.swift; sourceTree = "<group>"; };
10241024
61538B8F2B111FE800A88846 /* String+AppearancesOfSubstring.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+AppearancesOfSubstring.swift"; sourceTree = "<group>"; };
10251025
61538B922B11201900A88846 /* String+Character.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "String+Character.swift"; sourceTree = "<group>"; };
1026-
617DB3CF2C25AFAE00B58BFE /* TaskNotificationHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TaskNotificationHandler.swift; sourceTree = "<group>"; };
1027-
617DB3D22C25AFEA00B58BFE /* TaskNotificationModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TaskNotificationModel.swift; sourceTree = "<group>"; };
1028-
617DB3D52C25B02D00B58BFE /* TaskNotificationView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TaskNotificationView.swift; sourceTree = "<group>"; };
1026+
617DB3CF2C25AFAE00B58BFE /* ActivityManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActivityManager.swift; sourceTree = "<group>"; };
1027+
617DB3D52C25B02D00B58BFE /* ActivitiesView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActivitiesView.swift; sourceTree = "<group>"; };
10291028
617DB3D72C25B04D00B58BFE /* CECircularProgressView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CECircularProgressView.swift; sourceTree = "<group>"; };
10301029
617DB3D92C25B07F00B58BFE /* TaskNotificationsDetailView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TaskNotificationsDetailView.swift; sourceTree = "<group>"; };
10311030
617DB3DB2C25B14A00B58BFE /* ActivityViewer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ActivityViewer.swift; sourceTree = "<group>"; };
@@ -1226,6 +1225,7 @@
12261225
B616EA872D651ADA00DF9029 /* ScrollOffsetPreferenceKey.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ScrollOffsetPreferenceKey.swift; sourceTree = "<group>"; };
12271226
B616EA8B2D65238900DF9029 /* InternalDevelopmentInspectorView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InternalDevelopmentInspectorView.swift; sourceTree = "<group>"; };
12281227
B616EA8E2D662E9800DF9029 /* InternalDevelopmentNotificationsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InternalDevelopmentNotificationsView.swift; sourceTree = "<group>"; };
1228+
B616EA932D67C4DA00DF9029 /* CEActivity.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CEActivity.swift; sourceTree = "<group>"; };
12291229
B61A606029F188AB009B43F9 /* ExternalLink.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExternalLink.swift; sourceTree = "<group>"; };
12301230
B61A606829F4481A009B43F9 /* MonospacedFontPicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MonospacedFontPicker.swift; sourceTree = "<group>"; };
12311231
B61DA9DE29D929E100BF4A43 /* GeneralSettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = GeneralSettingsView.swift; sourceTree = "<group>"; };
@@ -1771,7 +1771,7 @@
17711771
618725B92C33107C00987354 /* CEWorkspaceSettings */,
17721772
588847642992A30900996D95 /* CEWorkspace */,
17731773
61D435C52C29684100D032B8 /* Tasks */,
1774-
617DB3CE2C25AF5B00B58BFE /* ActivityViewer */,
1774+
617DB3CE2C25AF5B00B58BFE /* Activities */,
17751775
587B9D7529300ABD00AC7927 /* CodeEditUI */,
17761776
58FD7603291EA1CB0051D6E4 /* Commands */,
17771777
043C321227E31FE8006AE443 /* Documents */,
@@ -2720,21 +2720,21 @@
27202720
path = TerminalEmulator;
27212721
sourceTree = "<group>";
27222722
};
2723-
617DB3CE2C25AF5B00B58BFE /* ActivityViewer */ = {
2723+
617DB3CE2C25AF5B00B58BFE /* Activities */ = {
27242724
isa = PBXGroup;
27252725
children = (
2726-
617DB3DB2C25B14A00B58BFE /* ActivityViewer.swift */,
2727-
618725A22C29EFE200987354 /* Tasks */,
2728-
618725A92C29F09900987354 /* Notifications */,
27292726
617DB3D12C25AFD300B58BFE /* Models */,
2727+
B616EA902D67C40800DF9029 /* Views */,
2728+
618725A22C29EFE200987354 /* ViewModifiers */,
2729+
617DB3CF2C25AFAE00B58BFE /* ActivityManager.swift */,
27302730
);
2731-
path = ActivityViewer;
2731+
path = Activities;
27322732
sourceTree = "<group>";
27332733
};
27342734
617DB3D12C25AFD300B58BFE /* Models */ = {
27352735
isa = PBXGroup;
27362736
children = (
2737-
617DB3D22C25AFEA00B58BFE /* TaskNotificationModel.swift */,
2737+
B616EA932D67C4DA00DF9029 /* CEActivity.swift */,
27382738
);
27392739
path = Models;
27402740
sourceTree = "<group>";
@@ -2747,30 +2747,12 @@
27472747
path = ActivityViewer;
27482748
sourceTree = "<group>";
27492749
};
2750-
618725A22C29EFE200987354 /* Tasks */ = {
2750+
618725A22C29EFE200987354 /* ViewModifiers */ = {
27512751
isa = PBXGroup;
27522752
children = (
2753-
B69D3EE22C5F536B005CF43A /* ActiveTaskView.swift */,
27542753
618725A52C29F02500987354 /* DropdownMenuItemStyleModifier.swift */,
2755-
618725A72C29F05500987354 /* OptionMenuItemView.swift */,
2756-
618725A02C29EFCC00987354 /* SchemeDropDownView.swift */,
2757-
618725AA2C29F2C000987354 /* TaskDropDownView.swift */,
2758-
B69D3EE42C5F54B3005CF43A /* TasksPopoverMenuItem.swift */,
2759-
B69D3EE02C5F5357005CF43A /* TaskView.swift */,
2760-
618725A32C29F00400987354 /* WorkspaceMenuItemView.swift */,
27612754
);
2762-
path = Tasks;
2763-
sourceTree = "<group>";
2764-
};
2765-
618725A92C29F09900987354 /* Notifications */ = {
2766-
isa = PBXGroup;
2767-
children = (
2768-
617DB3D52C25B02D00B58BFE /* TaskNotificationView.swift */,
2769-
617DB3D92C25B07F00B58BFE /* TaskNotificationsDetailView.swift */,
2770-
617DB3D72C25B04D00B58BFE /* CECircularProgressView.swift */,
2771-
617DB3CF2C25AFAE00B58BFE /* TaskNotificationHandler.swift */,
2772-
);
2773-
path = Notifications;
2755+
path = ViewModifiers;
27742756
sourceTree = "<group>";
27752757
};
27762758
618725B92C33107C00987354 /* CEWorkspaceSettings */ = {
@@ -2789,7 +2771,6 @@
27892771
77A01E2D2BB4261200F0EA38 /* CEWorkspaceSettings.swift */,
27902772
61A3E3D82C33126F00076BD3 /* CEWorkspaceSettingsData.swift */,
27912773
77A01E292BB424EA00F0EA38 /* CEWorkspaceSettingsData+ProjectSettings.swift */,
2792-
77A01E422BBC3A2800F0EA38 /* CETask.swift */,
27932774
);
27942775
path = Models;
27952776
sourceTree = "<group>";
@@ -3295,6 +3276,24 @@
32953276
path = InternalDevelopmentInspector;
32963277
sourceTree = "<group>";
32973278
};
3279+
B616EA902D67C40800DF9029 /* Views */ = {
3280+
isa = PBXGroup;
3281+
children = (
3282+
B69D3EE22C5F536B005CF43A /* ActiveTaskView.swift */,
3283+
618725A72C29F05500987354 /* OptionMenuItemView.swift */,
3284+
618725A02C29EFCC00987354 /* SchemeDropDownView.swift */,
3285+
618725AA2C29F2C000987354 /* TaskDropDownView.swift */,
3286+
B69D3EE42C5F54B3005CF43A /* TasksPopoverMenuItem.swift */,
3287+
B69D3EE02C5F5357005CF43A /* TaskView.swift */,
3288+
618725A32C29F00400987354 /* WorkspaceMenuItemView.swift */,
3289+
617DB3D52C25B02D00B58BFE /* ActivitiesView.swift */,
3290+
617DB3D92C25B07F00B58BFE /* TaskNotificationsDetailView.swift */,
3291+
617DB3D72C25B04D00B58BFE /* CECircularProgressView.swift */,
3292+
617DB3DB2C25B14A00B58BFE /* ActivityViewer.swift */,
3293+
);
3294+
path = Views;
3295+
sourceTree = "<group>";
3296+
};
32983297
B61DA9DD29D929BF00BF4A43 /* Pages */ = {
32993298
isa = PBXGroup;
33003299
children = (
@@ -3656,6 +3655,7 @@
36563655
B69D3EDF2C5E85B8005CF43A /* Models */ = {
36573656
isa = PBXGroup;
36583657
children = (
3658+
77A01E422BBC3A2800F0EA38 /* CETask.swift */,
36593659
61D435CD2C2969C300D032B8 /* CEActiveTask.swift */,
36603660
61D435D12C2969D800D032B8 /* CETaskStatus.swift */,
36613661
);
@@ -4185,7 +4185,7 @@
41854185
04BA7C142AE2AA7300584E1C /* GitCloneViewModel.swift in Sources */,
41864186
B61A606129F188AB009B43F9 /* ExternalLink.swift in Sources */,
41874187
587B9E9729301D8F00AC7927 /* BitBucketAccount+Token.swift in Sources */,
4188-
617DB3D62C25B02D00B58BFE /* TaskNotificationView.swift in Sources */,
4188+
617DB3D62C25B02D00B58BFE /* ActivitiesView.swift in Sources */,
41894189
587B9E7729301D8F00AC7927 /* String+PercentEncoding.swift in Sources */,
41904190
587B9E5B29301D8F00AC7927 /* GitCheckoutBranchView.swift in Sources */,
41914191
2813F93827ECC4AA00E305E4 /* FindNavigatorResultList.swift in Sources */,
@@ -4278,6 +4278,7 @@
42784278
587B9E8B29301D8F00AC7927 /* GitHubAccount+deleteReference.swift in Sources */,
42794279
6CD0358A2C3461160091E1F4 /* KeyWindowControllerObserver.swift in Sources */,
42804280
58798237292E30B90085B254 /* FeedbackView.swift in Sources */,
4281+
B616EA942D67C4DA00DF9029 /* CEActivity.swift in Sources */,
42814282
587B9E9829301D8F00AC7927 /* GitCommit.swift in Sources */,
42824283
6C5228B529A868BD00AC48F6 /* Environment+ContentInsets.swift in Sources */,
42834284
587B9E9429301D8F00AC7927 /* BitBucketTokenConfiguration.swift in Sources */,
@@ -4437,7 +4438,6 @@
44374438
581550D029FBD30400684881 /* FileSystemTableViewCell.swift in Sources */,
44384439
B607183F2B17DB07009CDAB4 /* SourceControlNavigatorRepositoryView+contextMenu.swift in Sources */,
44394440
B62AEDD42A27B29F009A9F52 /* PaneToolbar.swift in Sources */,
4440-
617DB3D32C25AFEA00B58BFE /* TaskNotificationModel.swift in Sources */,
44414441
D7E201B227E8D50000CB86D0 /* FindNavigatorForm.swift in Sources */,
44424442
287776E927E34BC700D46668 /* EditorTabBarView.swift in Sources */,
44434443
B60BE8BD297A167600841125 /* AcknowledgementRowView.swift in Sources */,
@@ -4469,7 +4469,7 @@
44694469
6C9AE66F2D148DD200FAE8D2 /* URL+FindWorkspace.swift in Sources */,
44704470
58D01C94293167DC00C5B6B4 /* Color+HEX.swift in Sources */,
44714471
6C578D8729CD345900DC73B2 /* ExtensionSceneView.swift in Sources */,
4472-
617DB3D02C25AFAE00B58BFE /* TaskNotificationHandler.swift in Sources */,
4472+
617DB3D02C25AFAE00B58BFE /* ActivityManager.swift in Sources */,
44734473
77EF6C052C57DE4B00984B69 /* URL+ResouceValues.swift in Sources */,
44744474
B640A9A129E2188F00715F20 /* View+NavigationBarBackButtonVisible.swift in Sources */,
44754475
587B9E7929301D8F00AC7927 /* GitHubIssueRouter.swift in Sources */,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
//
2+
// ActivityManager.swift
3+
// CodeEdit
4+
//
5+
// Created by Tommy Ludwig on 21.06.24.
6+
//
7+
8+
import Foundation
9+
import Combine
10+
import SwiftUI
11+
12+
/// Manages activities for a workspace
13+
final class ActivityManager: ObservableObject {
14+
/// Currently displayed activities
15+
@Published private(set) var activities: [CEActivity] = []
16+
17+
/// Posts a new activity
18+
/// - Parameters:
19+
/// - priority: Whether to insert at start of list
20+
/// - title: Activity title
21+
/// - message: Optional detail message
22+
/// - percentage: Optional progress percentage (0-1)
23+
/// - isLoading: Whether activity shows loading indicator
24+
/// - Returns: The created activity
25+
@discardableResult
26+
func post(
27+
priority: Bool = false,
28+
title: String,
29+
message: String? = nil,
30+
percentage: Double? = nil,
31+
isLoading: Bool = false
32+
) -> CEActivity {
33+
let activity = CEActivity(
34+
id: UUID().uuidString,
35+
title: title,
36+
message: message,
37+
percentage: percentage,
38+
isLoading: isLoading
39+
)
40+
41+
withAnimation(.easeInOut(duration: 0.3)) {
42+
if priority {
43+
activities.insert(activity, at: 0)
44+
} else {
45+
activities.append(activity)
46+
}
47+
}
48+
49+
return activity
50+
}
51+
52+
/// Updates an existing activity
53+
/// - Parameters:
54+
/// - id: ID of activity to update
55+
/// - title: New title (optional)
56+
/// - message: New message (optional)
57+
/// - percentage: New progress percentage (optional)
58+
/// - isLoading: New loading state (optional)
59+
func update(
60+
id: String,
61+
title: String? = nil,
62+
message: String? = nil,
63+
percentage: Double? = nil,
64+
isLoading: Bool? = nil
65+
) {
66+
if let index = activities.firstIndex(where: { $0.id == id }) {
67+
var activity = activities[index]
68+
69+
if let title = title {
70+
activity.title = title
71+
}
72+
if let message = message {
73+
activity.message = message
74+
}
75+
if let percentage = percentage {
76+
activity.percentage = percentage
77+
}
78+
if let isLoading = isLoading {
79+
activity.isLoading = isLoading
80+
}
81+
82+
activities[index] = activity
83+
}
84+
}
85+
86+
/// Deletes an activity
87+
/// - Parameter id: ID of activity to delete
88+
func delete(id: String) {
89+
withAnimation(.easeInOut(duration: 0.3)) {
90+
activities.removeAll { $0.id == id }
91+
}
92+
}
93+
94+
/// Deletes an activity after a delay
95+
/// - Parameters:
96+
/// - id: ID of activity to delete
97+
/// - delay: Time to wait before deleting
98+
func delete(id: String, delay: TimeInterval) {
99+
DispatchQueue.main.asyncAfter(deadline: .now() + delay) { [weak self] in
100+
self?.delete(id: id)
101+
}
102+
}
103+
}
104+
105+
extension Notification.Name {
106+
static let activity = Notification.Name("activity")
107+
}

CodeEdit/Features/ActivityViewer/Models/TaskNotificationModel.swift CodeEdit/Features/Activities/Models/CEActivity.swift

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
//
2-
// TaskNotificationModel.swift
2+
// CEActivity.swift
33
// CodeEdit
44
//
55
// Created by Tommy Ludwig on 21.06.24.
66
//
77

88
import Foundation
99

10-
/// Represents a notifications or tasks, that are displayed in the activity viewer
11-
struct TaskNotificationModel: Equatable {
10+
/// Represents an activity, that is displayed in the activity viewer
11+
struct CEActivity: Equatable {
1212
var id: String
1313
var title: String
1414
var message: String?
Original file line numberDiff line numberDiff line change
@@ -1,42 +1,42 @@
11
//
2-
// TaskNotificationView.swift
2+
// ActivityView.swift
33
// CodeEdit
44
//
55
// Created by Tommy Ludwig on 21.06.24.
66
//
77

88
import SwiftUI
99

10-
struct TaskNotificationView: View {
10+
struct ActivityView: View {
1111
@Environment(\.controlActiveState)
1212
private var activeState
1313

14-
@ObservedObject var taskNotificationHandler: TaskNotificationHandler
14+
@ObservedObject var activityManager: ActivityManager
1515
@State private var isPresented: Bool = false
16-
@State var notification: TaskNotificationModel?
16+
@State var activity: CEActivity?
1717

1818
var body: some View {
1919
ZStack {
20-
if let notification {
20+
if let activity {
2121
HStack {
22-
Text(notification.title)
22+
Text(activity.title)
2323
.font(.subheadline)
2424
.transition(
2525
.asymmetric(insertion: .move(edge: .top), removal: .move(edge: .bottom))
2626
.combined(with: .opacity)
2727
)
28-
.id("NotificationTitle" + notification.title)
28+
.id("ActivityTitle" + activity.title)
2929

30-
if notification.isLoading {
30+
if activity.isLoading {
3131
CECircularProgressView(
32-
progress: notification.percentage,
33-
currentTaskCount: taskNotificationHandler.notifications.count
32+
progress: activity.percentage,
33+
currentTaskCount: activityManager.activities.count
3434
)
3535
.padding(.horizontal, -1)
3636
.frame(height: 16)
3737
} else {
38-
if taskNotificationHandler.notifications.count > 1 {
39-
Text("\(taskNotificationHandler.notifications.count)")
38+
if activityManager.activities.count > 1 {
39+
Text("\(activityManager.activities.count)")
4040
.font(.caption)
4141
.padding(5)
4242
.background(
@@ -54,23 +54,23 @@ struct TaskNotificationView: View {
5454
.padding(-3)
5555
.padding(.trailing, 3)
5656
.popover(isPresented: $isPresented, arrowEdge: .bottom) {
57-
TaskNotificationsDetailView(taskNotificationHandler: taskNotificationHandler)
57+
ActivitysDetailView(activityManager: activityManager)
5858
}
5959
.onTapGesture {
6060
self.isPresented.toggle()
6161
}
6262
}
6363
}
64-
.animation(.easeInOut, value: notification)
65-
.onChange(of: taskNotificationHandler.notifications) { newValue in
64+
.animation(.easeInOut, value: activity)
65+
.onChange(of: activityManager.activities) { newValue in
6666
withAnimation {
67-
notification = newValue.first
67+
activity = newValue.first
6868
}
6969
}
7070
}
7171

7272
}
7373

7474
#Preview {
75-
TaskNotificationView(taskNotificationHandler: TaskNotificationHandler())
75+
ActivityView(activityManager: ActivityManager())
7676
}

0 commit comments

Comments
 (0)