Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Threema/Threema/Settings/   (Social Medium ©)  Datei vom 26.9.2026 mit Größe 3 kB image not shown  

Quelle  SettingsViewController.swift   Sprache: JAVA

 

import Foundation
import TipKit
import UIKit

final class SettingsViewController: UIViewController {
    
    // MARK: - Properties
    
    weak var coordinator: SettingsCoordinator?
    
    private lazy var collectionView = SettingsCollectionView { [weak self] in
        self?.coordinator?.currentDestination
    } shouldAllowAutoDeselection: { [weak self] in
        self?.coordinator?.presentingViewController?.isCollapsed == true
    }

    private lazy var dataSource = SettingsCollectionViewDataSource(
        collectionView: collectionView,
        coordinator: coordinator
    )
    
    // MARK: TipKit

    private var betaFeedbackTip = TipKitManager.ThreemaBetaFeedbackTip()
    private var tipObservationTask: Task<Void, Never>?
    private weak var tipPopoverController: TipUIPopoverViewController?
    private var isVisible = false
    
    // MARK: - Lifecycle
    
    init(coordinator: SettingsCoordinator) {
        self.coordinator = coordinator
        super.init(nibName: nil, bundle: nil)
    }
    
    @available(*, unavailable)
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()

        configureView()
        dataSource.configureData()
    }
    
    override func viewIsAppearing(_ animated: Bool) {
        super.viewIsAppearing(animated)
        updateSelection()
    }
    
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        isVisible = true
        showBetaFeedbackTip()
    }
    
    override func viewWillDisappear(_ animated: Bool) {
        super.viewWillDisappear(animated)
        isVisible = false
        removeTipObserver()
    }
    
    // MARK: - Configuration
    
    private func configureView() {
        navigationController?.navigationBar.prefersLargeTitles = true

        collectionView.translatesAutoresizingMaskIntoConstraints = false
        view.addSubview(collectionView)
        
        NSLayoutConstraint.activate([
            collectionView.leadingAnchor.constraint(equalTo: view.leadingAnchor),
            collectionView.trailingAnchor.constraint(equalTo: view.trailingAnchor),
            collectionView.topAnchor.constraint(equalTo: view.topAnchor),
            collectionView.bottomAnchor.constraint(equalTo: view.bottomAnchor),
        ])
    }
    
    // MARK: - Updates
    
    func updateSelection() {
        collectionView.updateSelection(for: traitCollection.horizontalSizeClass)
    }
    
    private func showBetaFeedbackTip() {
        guard let cell = collectionView.betaFeedbackCell() else {
            return
        }
        
        tipObservationTask = tipObservationTask ?? Task { @MainActor in
            for await shouldDisplay in betaFeedbackTip.shouldDisplayUpdates {
                if shouldDisplay, isVisible {
                    let popoverController = TipUIPopoverViewController(betaFeedbackTip, sourceItem: cell)
                    present(popoverController, animated: true)
                    tipPopoverController = popoverController
                }
                else {
                    if presentedViewController is TipUIPopoverViewController {
                        tipPopoverController?.dismiss(animated: true)
                        tipPopoverController = nil
                    }
                }
            }
        }
    }
    
    private func removeTipObserver() {
        tipPopoverController?.dismiss(animated: false)
        tipObservationTask?.cancel()
        tipObservationTask = nil
    }
}

Messung
CHZG
839710093

¤ Dauer der Verarbeitung: 0.0 Sekunden  (vorverarbeitet am  2026-11-04) ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover


Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.