123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- //
- // SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
- // SPDX-License-Identifier: GPL-3.0-or-later
- //
- import UIKit
- import SwiftUI
- import SwiftUIIntrospect
- @_spi(Advanced) import SwiftUIIntrospect
- @objc protocol UserStatusViewDelegate: AnyObject {
- func userStatusViewDidDisappear()
- }
- struct UserStatusSwiftUIView: View {
- @Environment(\.dismiss) var dismiss
- @State var userStatus: NCUserStatus
- @State var changed: Bool = false
- init(userStatus: NCUserStatus) {
- _userStatus = State(initialValue: userStatus)
- }
- weak var delegate: UserStatusViewDelegate?
- var body: some View {
- NavigationView {
- VStack {
- Form {
- Section(header: Text("Online status")) {
- NavigationLink(destination: {
- UserStatusOptionsSwiftUI(changed: $changed, userStatus: $userStatus)
- }, label: {
- HStack(spacing: 10) {
- AnyView(NCUserStatus.getUserStatusIcon(userStatus: userStatus.status))
- Text(userStatus.readableUserStatus())
- }
- })
- }
- Section(header: Text("Status message")) {
- NavigationLink(destination: {
- UserStatusMessageSwiftUIView(changed: $changed)
- }, label: {
- Text(userStatus.readableUserStatusMessage().isEmpty ? NSLocalizedString("What is your status?", comment: "") : userStatus.readableUserStatusMessage() )
- })
- }
- }
- }
- .navigationBarTitle(Text(NSLocalizedString("Status", comment: "")), displayMode: .inline)
- .navigationBarHidden(false)
- .toolbar(content: {
- ToolbarItem(placement: .navigationBarLeading) {
- Button(action: {
- dismiss()
- }) {
- Text("Cancel")
- .foregroundColor(Color(NCAppBranding.themeTextColor()))
- }
- }
- })
- }
- .introspect(.navigationView(style: .stack), on: .iOS(.v15...)) { navController in
- let appearance = UINavigationBarAppearance()
- appearance.configureWithOpaqueBackground()
- appearance.backgroundColor = NCAppBranding.themeColor()
- appearance.titleTextAttributes = [.foregroundColor: NCAppBranding.themeTextColor()]
- navController.navigationBar.tintColor = NCAppBranding.themeTextColor()
- navController.navigationBar.standardAppearance = appearance
- navController.navigationBar.compactAppearance = appearance
- navController.navigationBar.scrollEdgeAppearance = appearance
- }
- .navigationViewStyle(StackNavigationViewStyle())
- .tint(Color(NCAppBranding.themeTextColor()))
- .onAppear {
- getUserStatus()
- }
- .onChange(of: changed) { newValue in
- if newValue == true {
- getUserStatus()
- changed = false
- }
- }
- .onDisappear {
- delegate?.userStatusViewDidDisappear()
- }
- }
- func getUserStatus() {
- let activeAccount = NCDatabaseManager.sharedInstance().activeAccount()
- NCAPIController.sharedInstance().getUserStatus(for: activeAccount) { [self] userStatusDict, error in
- if error == nil && userStatusDict != nil {
- userStatus = NCUserStatus(dictionary: userStatusDict!)
- }
- }
- }
- }
- @objc class UserStatusSwiftUIViewFactory: NSObject {
- @objc static func create(userStatus: NCUserStatus, delegate: UserStatusViewDelegate) -> UIViewController {
- var userStatusView = UserStatusSwiftUIView(userStatus: userStatus)
- userStatusView.delegate = delegate
- let hostingController = UIHostingController(rootView: userStatusView)
- return hostingController
- }
- }
|