Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  PPAssetsActionHelper.swift   Sprache: JAVA

 

import CoreLocation
import Foundation
import Photos
import ThreemaMacros
import UIKit

protocol PPAssetsActionHelperDelegate: AnyObject {
    /// Called when a user dismisses a picker by tapping cancel or background.
    /// Implementation is optional.
    /// - Parameter picker: Picker Controller that was dismissed.
    func assetsActionHelperDidCancel(_ picker: PPAssetsActionHelper)
    
    /// Called when a user selects previews and presses send button.
    /// Assets Picker is not dismissed automatically when the delegate method is called.
    /// Implementation is optional.
    /// - Parameters:
    /// - picker: Current picker controller.
    /// - assets: Assets that were selected with Preview Picker.
    func assetsActionHelper(_ picker: PPAssetsActionHelper, didFinishPicking assets: [Any])
    
    /// Called when a user click the own option
    /// Assets Picker is not dismissed automatically when the delegate method is called.
    /// Implementation is optional.
    /// - Parameter picker: Picker Controller that was dismissed.
    func assetActionHelperDidSelectOwnOption(_ picker: PPAssetsActionHelper, didFinishPicking assets: [Any])
    
    /// Called when a user click the own snap button
    /// Assets Picker is not dismissed automatically when the delegate method is called.
    /// Implementation is optional.
    /// - Parameter picker: Picker Controller that was dismissed.
    /// - assets: Assets that were selected with Preview Picker.
    func assetsActionHelperDidSelectOwnSnapButton(_ picker: PPAssetsActionHelper, didFinishPicking assets: [Any])
    
    /// Called when a user click the live camera cell
    /// Assets Picker is not dismissed automatically when the delegate method is called.
    /// Implementation is optional.
    /// - Parameter picker: Picker Controller.
    func assetsActionHelperDidSelectLiveCameraCell(_ picker: PPAssetsActionHelper)
    
    func assetsActionHelperDidSelectLocation(_ picker: PPAssetsActionHelper)
    func assetsActionHelperDidSelectRecordAudio(_ picker: PPAssetsActionHelper)
    func assetsActionHelperDidSelectCreateBallot(_ picker: PPAssetsActionHelper)
    func assetsActionHelperDidSelectShareFile(_ picker: PPAssetsActionHelper)
    func assetsActionHelperDidSelectShareContact(_ picker: PPAssetsActionHelper)
    func assetsActionHelperDidSelectScanDocument(_ picker: PPAssetsActionHelper)

    var conversationIsDistributionList: Bool { get }
}

/// Default implementation for delegate methods to make them optional.
extension PPAssetsActionHelperDelegate {
    func assetsActionHelperDidCancel(_ picker: PPAssetsActionHelper) { }
    func assetsActionHelper(_ picker: PPAssetsActionHelper, didFinishPicking assets: [Any]) { }
    func assetActionHelperDidSelectOwnOption(_ picker: PPAssetsActionHelper, didFinishPicking assets: [Any]) { }
    func assetsActionHelperDidSelectOwnSnapButton(_ picker: PPAssetsActionHelper, didFinishPicking assets: [Any]) { }
    func assetsActionHelperDidSelectLiveCameraCell(_ picker: PPAssetsActionHelper) { }
    func assetsActionHelperDiassetsPickerDidSelectLiveCameraCelldSelectLocation(_ picker: PPAssetsActionHelper) { }
    func assetsActionHelperDidSelectRecordAudio(_ picker: PPAssetsActionHelper) { }
    func assetsActionHelperDidSelectCreateBallot(_ picker: PPAssetsActionHelper) { }
    func assetsActionHelperDidSelectShareFile(_ picker: PPAssetsActionHelper) { }
    func assetsActionHelperDidSelectShareContact(_ picker: PPAssetsActionHelper) { }
    func assetsActionHelperDidSelectScanDocument(_ picker: PPAssetsActionHelper) { }
}

final class PPAssetsActionHelper: NSObject {
    
    weak var delegate: PPAssetsActionHelperDelegate?
        
    override required init() {
        super.init()
    }
    
    enum Heights: CGFloat {
        case Inches_3_5 = 480
        case Inches_4 = 568
        case Inches_4_7 = 667
        case Inches_5_5 = 736
    }
    
    func isPhone() -> Bool {
        UIDevice.current.userInterfaceIdiom == .phone
    }
    
    func isSizeOrLarger(height: Heights) -> Bool {
        UIScreen.main.bounds.size.height >= height.rawValue
    }
    
    func IS_4_7_INCHES_OR_LARGER() -> Bool {
        isPhone() && isSizeOrLarger(height: .Inches_4_7)
    }
    
    func buildAction() -> PPAssetsActionController {
        var options = [PPOption]()
        
        let shareLocationImage = UIImage(
            systemName: "mappin.and.ellipse",
            withConfiguration: UIImage.SymbolConfiguration(textStyle: .body)
        )?
            .withTintColor(.tintColor, renderingMode: .alwaysOriginal)
        let shareLocation = PPOption(
            withTitle: #localize("send_location"),
            withIcon: shareLocationImage
        ) {
            self.delegate?.assetsActionHelperDidSelectLocation(self)
        }
        options.append(shareLocation)
        
        let ballotImage = UIImage(
            systemName: "chart.pie.fill",
            withConfiguration: UIImage.SymbolConfiguration(textStyle: .body)
        )?
            .withTintColor(.tintColor, renderingMode: .alwaysOriginal)
        let ballotCreate = PPOption(
            withTitle: #localize("ballot_create"),
            withIcon: ballotImage
        ) {
            self.delegate?.assetsActionHelperDidSelectCreateBallot(self)
        }
        
        if !(delegate?.conversationIsDistributionList ?? false) {
            options.append(ballotCreate)
        }
        
        let shareFileImage = UIImage(
            systemName: "doc.fill",
            withConfiguration: UIImage.SymbolConfiguration(textStyle: .body)
        )?
            .withTintColor(.tintColor, renderingMode: .alwaysOriginal)
        let shareFile = PPOption(
            withTitle: #localize("share_file"),
            withIcon: shareFileImage
        ) {
            self.delegate?.assetsActionHelperDidSelectShareFile(self)
        }
        options.append(shareFile)
        
        let shareContactImage = UIImage(
            systemName: "person.fill",
            withConfiguration: UIImage.SymbolConfiguration(textStyle: .body)
        )?
            .withTintColor(.tintColor, renderingMode: .alwaysOriginal)
        let shareContact = PPOption(
            withTitle: #localize("share_contact"),
            withIcon: shareContactImage
        ) {
            self.delegate?.assetsActionHelperDidSelectShareContact(self)
        }
        options.append(shareContact)
        
        let scanner = PPOption(
            withTitle: #localize("scan_document"),
            withIcon: UIImage(systemName: "doc.viewfinder.fill")
        ) {
            self.delegate?.assetsActionHelperDidSelectScanDocument(self)
        }
        options.append(scanner)

        var config = PPAssetsActionConfig()
        config.textAlignment = .left
        config.showOptionsWhenAssetIsSelected = false
        
        config.showLiveCameraCell = true
        config.showVideos = true
    
        config.showGalleryPreview = UserSettings.shared().showGalleryPreview
        
        config.assetsPreviewExpandedHeight = 260.0
        config.inset = 10.0
        config.cornerRadius = 10.0
        config.sectionSpacing = 8.0
        
        config.fetchLimit = Int(UserSettings.shared().previewLimit)
        
        config.buttonHeight = IS_4_7_INCHES_OR_LARGER() ? 50.0 : 42.0
        
        if Colors.theme == .dark {
            config.backgroundColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.9)
        }
        else {
            config.backgroundColor = UIColor(red: 0.0, green: 0.0, blue: 0.0, alpha: 0.5)
        }
        
        config.maxSelectableAssets = 10
        
        config.useOwnSnapButton = true
        config.ownSnapButtonText = #localize("choose_existing")
        config.ownSnapButtonIcon = UIImage(
            systemName: "photo.fill",
            withConfiguration: UIImage.SymbolConfiguration(textStyle: .body)
        )?
            .withTintColor(.tintColor, renderingMode: .alwaysOriginal)

        config.previewReplacementText = #localize("take_photo_or_video")
        config.previewReplacementIcon = UIImage(
            systemName: "camera.fill",
            withConfiguration: UIImage.SymbolConfiguration(textStyle: .body)
        )?
            .withTintColor(.tintColor, renderingMode: .alwaysOriginal)
        
        config.tintColor = .tintColor
        config.tableBackground = Colors.backgroundNavigationController
        
        config.showAdditionalOptionWhenAssetIsSelected = true
        config.additionalOptionText = #localize("send_immediately_text")
        
        let assetsPicker = PPAssetsActionController(with: options, aConfig: config)
        assetsPicker.delegate = self
        return assetsPicker
    }
}

// MARK: - PPAssetsActionControllerDelegate

extension PPAssetsActionHelper: PPAssetsActionControllerDelegate {
    func assetsPickerDidCancel(_ picker: PPAssetsActionController) {
        delegate?.assetsActionHelperDidCancel(self)
        print("assetsPickerDidCancel")
    }
    
    func assetsPicker(_ picker: PPAssetsActionController, didFinishPicking media: [MediaProvider]) {
        var mediaArray = [Any]()
        
        for m in media {
            if m.image() != nil {
                mediaArray.append(m.image()!)
            }
            if m.video() != nil {
                mediaArray.append(m.video()!)
            }
            if m.phasset() != nil {
                mediaArray.append(m.phasset()!)
            }
        }
        
        delegate?.assetsActionHelper(self, didFinishPicking: mediaArray)
        print("assetsPicker didFinishPicking with \(media)")
    }
    
    func assetsPicker(_ picker: PPAssetsActionController, didSnapImage image: UIImage) { }
    
    func assetsPicker(_ picker: PPAssetsActionController, didSnapVideo videoURL: URL) { }
    
    func assetsPickerDidSelectOwnOption(
        _ picker: PPAssetsActionController,
        didFinishPicking media: [MediaProvider]
    ) {
        var mediaArray = [Any]()
        
        for m in media {
            if m.image() != nil {
                mediaArray.append(m.image()!)
            }
            if m.video() != nil {
                mediaArray.append(m.video()!)
            }
            if m.phasset() != nil {
                mediaArray.append(m.phasset()!)
            }
        }
        
        delegate?.assetActionHelperDidSelectOwnOption(self, didFinishPicking: mediaArray)
        print("assetsPicker didSelectOwnOption")
    }
    
    func assetsPickerDidSelectOwnSnapButton(
        _ picker: PPAssetsActionController,
        didFinishPicking media: [MediaProvider]
    ) {
        var mediaArray = [Any]()
        
        for m in media {
            if m.image() != nil {
                mediaArray.append(m.image()!)
            }
            if m.video() != nil {
                mediaArray.append(m.video()!)
            }
            if m.phasset() != nil {
                mediaArray.append(m.phasset()!)
            }
        }
        
        delegate?.assetsActionHelperDidSelectOwnSnapButton(self, didFinishPicking: mediaArray)
        print("assetsPicker didSelectOwnSnapButton")
    }
    
    func assetsPickerDidSelectLiveCameraCell(_ picker: PPAssetsActionController) {
        delegate?.assetsActionHelperDidSelectLiveCameraCell(self)
    }
}

Messung
CHZG
869110092

¤ Dauer der Verarbeitung: 0.7 Sekunden  ¤

*© 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.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik

Statistik
#Sources=1104842
#Domains=499168