├── .github
├── CODEOWNERS
├── CODE_OF_CONDUCT.md
├── ISSUE_TEMPLATE
│ ├── report-a-bug.md
│ └── request-a-feature.md
└── PULL_REQUEST_TEMPLATE.md
├── .gitignore
├── .ufm.json
├── AzureCommunicationUI
├── .swiftlint-tests.yml
├── .swiftlint.yml
├── AzureCommunicationUI.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ ├── IDETemplateMacros.plist
│ │ ├── IDEWorkspaceChecks.plist
│ │ └── WorkspaceSettings.xcsettings
├── AzureCommunicationUIDemoApp
│ ├── AzureCommunicationUIDemoApp.entitlements
│ ├── AzureCommunicationUIDemoApp.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcshareddata
│ │ │ └── xcschemes
│ │ │ └── AzureCommunicationUIDemoApp.xcscheme
│ ├── AzureCommunicationUIDemoAppDebug.entitlements
│ ├── AzureCommunicationUIDemoAppExtension
│ │ ├── Info.plist
│ │ └── IntentHandler.swift
│ ├── README.md
│ ├── Sources
│ │ ├── .swiftlint.yml
│ │ ├── AppConfig.xcconfig
│ │ ├── AppDelegate.swift
│ │ ├── Assets.xcassets
│ │ │ ├── AccentColor.colorset
│ │ │ │ └── Contents.json
│ │ │ ├── AppIcon.appiconset
│ │ │ │ ├── 100.png
│ │ │ │ ├── 1024.png
│ │ │ │ ├── 114.png
│ │ │ │ ├── 120.png
│ │ │ │ ├── 144.png
│ │ │ │ ├── 152.png
│ │ │ │ ├── 167.png
│ │ │ │ ├── 180.png
│ │ │ │ ├── 20.png
│ │ │ │ ├── 29.png
│ │ │ │ ├── 40.png
│ │ │ │ ├── 50.png
│ │ │ │ ├── 57.png
│ │ │ │ ├── 58.png
│ │ │ │ ├── 60.png
│ │ │ │ ├── 72.png
│ │ │ │ ├── 76.png
│ │ │ │ ├── 80.png
│ │ │ │ ├── 87.png
│ │ │ │ └── Contents.json
│ │ │ ├── AppIcon.dev.appiconset
│ │ │ │ ├── 100.png
│ │ │ │ ├── 1024.png
│ │ │ │ ├── 114.png
│ │ │ │ ├── 120.png
│ │ │ │ ├── 144.png
│ │ │ │ ├── 152.png
│ │ │ │ ├── 167.png
│ │ │ │ ├── 180.png
│ │ │ │ ├── 20.png
│ │ │ │ ├── 29.png
│ │ │ │ ├── 40.png
│ │ │ │ ├── 50.png
│ │ │ │ ├── 57.png
│ │ │ │ ├── 58.png
│ │ │ │ ├── 60.png
│ │ │ │ ├── 72.png
│ │ │ │ ├── 76.png
│ │ │ │ ├── 80.png
│ │ │ │ ├── 87.png
│ │ │ │ └── Contents.json
│ │ │ ├── Avatars
│ │ │ │ ├── Contents.json
│ │ │ │ ├── cat.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ └── cat.svg
│ │ │ │ ├── fox.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ └── fox.svg
│ │ │ │ ├── koala.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ └── koala.svg
│ │ │ │ ├── monkey.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ └── monkey.svg
│ │ │ │ ├── mouse.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ └── mouse.svg
│ │ │ │ └── octopus.imageset
│ │ │ │ │ ├── Contents.json
│ │ │ │ │ └── octopus.svg
│ │ │ ├── Contents.json
│ │ │ ├── ic_fluent_chat_20_regular.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_chat_20_regular.svg
│ │ │ └── ic_fluent_chevron_right_20_regular.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_chevron_right_20_regular.svg
│ │ ├── AuthenticationHelper.swift
│ │ ├── DemoInputTypes.swift
│ │ ├── EnvConfig.swift
│ │ ├── GlobalCompositeManager.swift
│ │ ├── Info.plist
│ │ ├── Mockings
│ │ │ ├── CallClientMockings.swift
│ │ │ ├── CallConfigurationMocking.swift
│ │ │ ├── CallingSDKEventsHandlerMocking.swift
│ │ │ └── UITestCallingSDKWrapper.swift
│ │ ├── NSUserActivity.swift
│ │ ├── RemoteParticipantAvatarHelper.swift
│ │ ├── SceneDelegate.swift
│ │ ├── StartCallConvertible.swift
│ │ ├── ThemeOptions.swift
│ │ ├── URL.swift
│ │ ├── Utilities
│ │ │ ├── AccessibilityId.swift
│ │ │ ├── Extension.swift
│ │ │ └── UserReportedIssueHandler.swift
│ │ └── Views
│ │ │ ├── Base.lproj
│ │ │ └── LaunchScreen.storyboard
│ │ │ ├── CallingDemoView.swift
│ │ │ ├── CallingDemoViewController.swift
│ │ │ ├── CallingDemoViewModel.swift
│ │ │ ├── ChatDemoView.swift
│ │ │ ├── ChatDemoViewController.swift
│ │ │ ├── CustomControls.swift
│ │ │ ├── EntryViewController.swift
│ │ │ ├── FloatingUITestWindow.swift
│ │ │ ├── SettingsView.swift
│ │ │ ├── UserReportedIssueView.swift
│ │ │ ├── ViewModifier
│ │ │ ├── ErrorView.swift
│ │ │ └── TextFieldClearButton.swift
│ │ │ ├── ar.lproj
│ │ │ ├── LaunchScreen.strings
│ │ │ └── Localizable.strings
│ │ │ ├── en.lproj
│ │ │ └── Localizable.strings
│ │ │ ├── fr-CA.lproj
│ │ │ ├── LaunchScreen.strings
│ │ │ └── Localizable.strings
│ │ │ ├── fr.lproj
│ │ │ ├── LaunchScreen.strings
│ │ │ └── Localizable.strings
│ │ │ ├── it.lproj
│ │ │ ├── LaunchScreen.strings
│ │ │ └── Localizable.strings
│ │ │ └── zh-Hant.lproj
│ │ │ ├── LaunchScreen.strings
│ │ │ └── Localizable.strings
│ └── Tests
│ │ ├── AzureCommunicationUIDemoAppAudioOnlyTests.swift
│ │ ├── AzureCommunicationUIDemoAppCallDiagnosticsTests.swift
│ │ ├── AzureCommunicationUIDemoAppCallTests.swift
│ │ ├── AzureCommunicationUIDemoAppDebugInfoTests.swift
│ │ ├── AzureCommunicationUIDemoAppE2ETests.swift
│ │ ├── AzureCommunicationUIDemoAppLaunchTests.swift
│ │ ├── AzureCommunicationUIDemoAppPIPTests.swift
│ │ ├── AzureCommunicationUIDemoAppRemoteParticipantsTests.swift
│ │ ├── AzureCommunicationUIDemoAppSetupViewTests.swift
│ │ ├── AzureCommunicationUIDemoAppTokenTests.swift
│ │ ├── AzureCommunicationUIDemoAppUITests.swift
│ │ ├── Info.plist
│ │ └── Utilities
│ │ ├── XCTestCaseExtension.swift
│ │ ├── XCUIElementExtension.swift
│ │ └── XCUITestBase.swift
├── Podfile
├── Podfile.lock
└── sdk
│ ├── AzureCommunicationUICalling
│ ├── AzureCommunicationUICalling.podspec
│ ├── AzureCommunicationUICalling.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcshareddata
│ │ │ └── xcschemes
│ │ │ └── AzureCommunicationUICalling.xcscheme
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── Sources
│ │ ├── Assets.xcassets
│ │ │ ├── Color
│ │ │ │ ├── Contents.json
│ │ │ │ ├── hangupColor.colorset
│ │ │ │ │ └── Contents.json
│ │ │ │ ├── onHoldBackground.colorset
│ │ │ │ │ └── Contents.json
│ │ │ │ └── overlayColor.colorset
│ │ │ │ │ └── Contents.json
│ │ │ ├── Contents.json
│ │ │ └── Icon
│ │ │ │ ├── Contents.json
│ │ │ │ ├── ic_fluent_arrow_maximize_20_filled.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_arrow_maximize_20_filled.svg
│ │ │ │ ├── ic_fluent_arrow_minimize_20_filled.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_arrow_minimize_20_filled.svg
│ │ │ │ ├── ic_fluent_call_end_24_filled.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_call_end_24_filled.svg
│ │ │ │ ├── ic_fluent_call_end_24_regular.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_call_end_24_regular.svg
│ │ │ │ ├── ic_fluent_camera_switch_24_regular.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_camera_switch_24_regular.svg
│ │ │ │ ├── ic_fluent_checkmark_24_regular.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_checkmark_24_regular.svg
│ │ │ │ ├── ic_fluent_chevron_right_20_regular.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_chevron_right_20_regular.svg
│ │ │ │ ├── ic_fluent_clock_24_filled.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_clock_24_filled.svg
│ │ │ │ ├── ic_fluent_closed_caption_24_regular.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_closed_caption_24_regular.svg
│ │ │ │ ├── ic_fluent_closed_caption_off_20_regular.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_closed_caption_off_20_regular.svg
│ │ │ │ ├── ic_fluent_dismiss_16_regular.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_dismiss_16_regular.svg
│ │ │ │ ├── ic_fluent_error_circle_16_regular.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_error_circle_16_regular.svg
│ │ │ │ ├── ic_fluent_guest_add_20_filled.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_guest_add_20_filled.svg
│ │ │ │ ├── ic_fluent_local_language_24_regular.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_local_language_24_regular.svg
│ │ │ │ ├── ic_fluent_meet_now_20_regular.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_meet_now_20_regular.svg
│ │ │ │ ├── ic_fluent_mic_24_filled.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_mic_24_filled.svg
│ │ │ │ ├── ic_fluent_mic_24_regular.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_mic_24_regular.svg
│ │ │ │ ├── ic_fluent_mic_off_24_filled.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_mic_off_24_filled.svg
│ │ │ │ ├── ic_fluent_mic_off_24_regular.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_mic_off_24_regular.svg
│ │ │ │ ├── ic_fluent_mic_prohibited_24_regular.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_mic_prohibited_24_regular.svg
│ │ │ │ ├── ic_fluent_more_horizontal_24_filled.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_more_horizontal_24_filled.svg
│ │ │ │ ├── ic_fluent_people_24_regular.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_people_24_regular.svg
│ │ │ │ ├── ic_fluent_person_delete_24_regular.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_person_delete_24_regular.svg
│ │ │ │ ├── ic_fluent_person_feedback_24_regular.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── Size=24, Theme=Regular.pdf
│ │ │ │ ├── ic_fluent_person_prohibited_24_regular.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_person_prohibited_24_regular.svg
│ │ │ │ ├── ic_fluent_person_voice_24_regular.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_person_voice_24_regular.svg
│ │ │ │ ├── ic_fluent_share_ios_24_regular.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_share_ios_24_regular.svg
│ │ │ │ ├── ic_fluent_slide_text_call_20_regular.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_slide_text_call_20_regular.svg
│ │ │ │ ├── ic_fluent_speaker_2_24_filled.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_speaker_2_24_filled.svg
│ │ │ │ ├── ic_fluent_speaker_2_24_regular.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_speaker_2_24_regular.svg
│ │ │ │ ├── ic_fluent_speaker_bluetooth_24_regular.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_speaker_bluetooth_24_regular.svg
│ │ │ │ ├── ic_fluent_speaker_mute_24_regular.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_speaker_mute_24_regular.svg
│ │ │ │ ├── ic_fluent_video_24_filled.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_video_24_filled.svg
│ │ │ │ ├── ic_fluent_video_off_24_filled.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_video_off_24_filled.svg
│ │ │ │ ├── ic_fluent_video_off_24_regular.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_video_off_24_regular.svg
│ │ │ │ ├── ic_fluent_warning_24_filled.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_warning_24_filled.svg
│ │ │ │ ├── ic_fluent_wifi_warning_24_filled.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_wifi_warning_24_filled.svg
│ │ │ │ └── ic_ios_arrow_left_24.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_ios_arrow_ltr_24_regular.svg
│ │ ├── CallComposite.swift
│ │ ├── CallCompositeOptions
│ │ │ ├── BaseLocalizationProvider.swift
│ │ │ ├── ButtonViewData.swift
│ │ │ ├── CallCompositeAudioVideoMode.swift
│ │ │ ├── CallCompositeCallState.swift
│ │ │ ├── CallCompositeDismissed.swift
│ │ │ ├── CallCompositeError.swift
│ │ │ ├── CallCompositeOptions.swift
│ │ │ ├── CallCompositeUserReportedError.swift
│ │ │ ├── CallConfiguration.swift
│ │ │ ├── CallError.swift
│ │ │ ├── CallHistoryRecord.swift
│ │ │ ├── CallKitOptions.swift
│ │ │ ├── CallKitRemoteInfo.swift
│ │ │ ├── CallScreenControlBarOptions.swift
│ │ │ ├── CallScreenHeaderViewData.swift
│ │ │ ├── CallScreenOptions.swift
│ │ │ ├── Caller.swift
│ │ │ ├── CapabilitiesChangedNotificationMode.swift
│ │ │ ├── CaptionOptions.swift
│ │ │ ├── CommunicationTokenCredentialError.swift
│ │ │ ├── CustomButtonViewData.swift
│ │ │ ├── DebugInfo.swift
│ │ │ ├── DiagnosticConfig.swift
│ │ │ ├── IncomingCall.swift
│ │ │ ├── IncomingCallCancelled.swift
│ │ │ ├── IncomingCallError.swift
│ │ │ ├── LeaveCallConfirmationMode.swift
│ │ │ ├── LocalOptions.swift
│ │ │ ├── LocalizationOptions.swift
│ │ │ ├── OrientationOptions.swift
│ │ │ ├── PushNotification.swift
│ │ │ ├── PushNotificationEventType.swift
│ │ │ ├── RemoteOptions.swift
│ │ │ ├── SetParticipantViewDataError.swift
│ │ │ ├── SetupScreenOptions.swift
│ │ │ ├── SupportedLocale.swift
│ │ │ └── ThemeOptions.swift
│ │ ├── Data
│ │ │ └── CallHistoryRepository.swift
│ │ ├── Info.plist
│ │ ├── Localization
│ │ │ ├── ar-SA.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── ar.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── de-DE.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── de.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── en-GB.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── en-US.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── en.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── es-ES.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── es.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── fi-FI.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── fi.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── fr-FR.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── fr.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── he-IL.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── he.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── it-IT.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── it.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── ja-JP.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── ja.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── ko-KR.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── ko.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── nb-NO.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── nb.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── nl-NL.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── nl.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── pl-PL.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── pl.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── pt-BR.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── pt.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── ru-RU.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── ru.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── sv-SE.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── sv.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── tr-TR.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── tr.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── zh-Hans-CN.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── zh-Hans.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── zh-Hant-TW.lproj
│ │ │ │ └── Localizable.strings
│ │ │ ├── zh-Hant.lproj
│ │ │ │ └── Localizable.strings
│ │ │ └── zh.lproj
│ │ │ │ └── Localizable.strings
│ │ ├── Model
│ │ │ ├── CallCompositeCaptionsData.swift
│ │ │ ├── CallInfoModel.swift
│ │ │ ├── CalllCompositeRttData.swift
│ │ │ ├── CapabilitiesChangedEvent.swift
│ │ │ ├── CapabilitiesChangedReason.swift
│ │ │ ├── CapabilityResolutionReason.swift
│ │ │ ├── ParticipantCapability.swift
│ │ │ ├── ParticipantCapabilityType.swift
│ │ │ ├── ParticipantInfoModel.swift
│ │ │ ├── ParticipantRoleEnum.swift
│ │ │ ├── UserFacingDiagnosticModel.swift
│ │ │ └── VideoStreamInfoModel.swift
│ │ ├── Presentation
│ │ │ ├── Factories
│ │ │ │ ├── CompositeViewFactory.swift
│ │ │ │ ├── CompositeViewModelFactory.swift
│ │ │ │ └── CompositeViewModelFactoryProtocols.swift
│ │ │ ├── FluentUI
│ │ │ │ ├── Icon.swift
│ │ │ │ └── Wrapper
│ │ │ │ │ ├── CompositeAvatar.swift
│ │ │ │ │ ├── CompositeButton.swift
│ │ │ │ │ ├── DrawerViewControllerProtocol.swift
│ │ │ │ │ └── SourceViewSpace.swift
│ │ │ ├── Manager
│ │ │ │ ├── AppLifeCycleManager.swift
│ │ │ │ ├── AudioDeviceType.swift
│ │ │ │ ├── AudioSessionManager.swift
│ │ │ │ ├── AvatarViewManager.swift
│ │ │ │ ├── CallDurationManager.swift
│ │ │ │ ├── CallStateManager.swift
│ │ │ │ ├── CapabilitiesManager.swift
│ │ │ │ ├── CaptionsRttDataManager.swift
│ │ │ │ ├── CompositeErrorManager.swift
│ │ │ │ ├── CompositeExitManager.swift
│ │ │ │ ├── DebugInfoManager.swift
│ │ │ │ ├── NetworkManager.swift
│ │ │ │ ├── PermissionsManager.swift
│ │ │ │ ├── PipManager.swift
│ │ │ │ ├── RemoteParticipantsManager.swift
│ │ │ │ └── UpdatableOptionsManager.swift
│ │ │ ├── Navigation
│ │ │ │ └── NavigationRouter.swift
│ │ │ ├── Pip
│ │ │ │ └── CallPipVideoViewController.swift
│ │ │ ├── Style
│ │ │ │ ├── ColorThemeProvider.swift
│ │ │ │ ├── IconProvider.swift
│ │ │ │ ├── LocalizationProvider.swift
│ │ │ │ ├── OrientationProvider.swift
│ │ │ │ └── StyleProvider.swift
│ │ │ ├── SwiftUI
│ │ │ │ ├── Calling
│ │ │ │ │ ├── CallingView.swift
│ │ │ │ │ ├── CallingViewComponent
│ │ │ │ │ │ ├── Banner
│ │ │ │ │ │ │ ├── BannerInfoType.swift
│ │ │ │ │ │ │ ├── BannerTextView.swift
│ │ │ │ │ │ │ ├── BannerTextViewModel.swift
│ │ │ │ │ │ │ ├── BannerView.swift
│ │ │ │ │ │ │ └── BannerViewModel.swift
│ │ │ │ │ │ ├── CaptionsRtt
│ │ │ │ │ │ │ ├── CaptionsAndRttLandscapeView.swift
│ │ │ │ │ │ │ ├── CaptionsErrorView.swift
│ │ │ │ │ │ │ ├── CaptionsErrorViewModel.swift
│ │ │ │ │ │ │ ├── CaptionsLanguageListView.swift
│ │ │ │ │ │ │ ├── CaptionsLanguageListViewModel.swift
│ │ │ │ │ │ │ ├── CaptionsRttInfoCellView.swift
│ │ │ │ │ │ │ ├── CaptionsRttInfoView.swift
│ │ │ │ │ │ │ ├── CaptionsRttInfoViewModel.swift
│ │ │ │ │ │ │ ├── CaptionsRttListView.swift
│ │ │ │ │ │ │ └── CaptionsRttListViewModel.swift
│ │ │ │ │ │ ├── ControlBarView.swift
│ │ │ │ │ │ ├── ControlBarViewModel.swift
│ │ │ │ │ │ ├── DraggableLocalVideoView.swift
│ │ │ │ │ │ ├── InfoHeaderView.swift
│ │ │ │ │ │ ├── InfoHeaderViewModel.swift
│ │ │ │ │ │ ├── LobbyErrorHeaderView.swift
│ │ │ │ │ │ ├── LobbyErrorHeaderViewModel.swift
│ │ │ │ │ │ ├── LobbyWaitingHeaderView.swift
│ │ │ │ │ │ ├── LobbyWaitingHeaderViewModel.swift
│ │ │ │ │ │ └── Overlay
│ │ │ │ │ │ │ ├── LoadingOverlayView.swift
│ │ │ │ │ │ │ ├── LoadingOverlayViewModel.swift
│ │ │ │ │ │ │ ├── LobbyOverlayView.swift
│ │ │ │ │ │ │ ├── LobbyOverlayViewModel.swift
│ │ │ │ │ │ │ ├── OnHoldOverlayViewModel.swift
│ │ │ │ │ │ │ └── OverlayViewModelProtocol.swift
│ │ │ │ │ ├── CallingViewModel.swift
│ │ │ │ │ ├── Grid
│ │ │ │ │ │ ├── Cell
│ │ │ │ │ │ │ ├── ParticipantGridCellVideoView.swift
│ │ │ │ │ │ │ ├── ParticipantGridCellView.swift
│ │ │ │ │ │ │ ├── ParticipantGridCellViewModel.swift
│ │ │ │ │ │ │ └── ZoomableVideoRenderView.swift
│ │ │ │ │ │ ├── ParticipantGridLayoutView.swift
│ │ │ │ │ │ ├── ParticipantGridView.swift
│ │ │ │ │ │ └── ParticipantGridViewModel.swift
│ │ │ │ │ └── KeybaordResponder.swift
│ │ │ │ ├── Container
│ │ │ │ │ ├── ContainerUIHostingController.swift
│ │ │ │ │ └── ContainerView.swift
│ │ │ │ ├── Setup
│ │ │ │ │ ├── SetupView.swift
│ │ │ │ │ ├── SetupViewComponent
│ │ │ │ │ │ ├── JoiningCallActivityView.swift
│ │ │ │ │ │ ├── JoiningCallActivityViewModel.swift
│ │ │ │ │ │ ├── PreviewAreaView.swift
│ │ │ │ │ │ ├── PreviewAreaViewModel.swift
│ │ │ │ │ │ ├── SetupControlBarView.swift
│ │ │ │ │ │ └── SetupControlBarViewModel.swift
│ │ │ │ │ └── SetupViewModel.swift
│ │ │ │ ├── Utilities
│ │ │ │ │ ├── AppPhaseKey.swift
│ │ │ │ │ ├── ButtonState.swift
│ │ │ │ │ ├── FontExtension.swift
│ │ │ │ │ ├── IconAndLabelConversion.swift
│ │ │ │ │ └── LandscapeAwareKeyboardWatcher.swift
│ │ │ │ └── ViewComponents
│ │ │ │ │ ├── AudioSelection
│ │ │ │ │ ├── AudioDeviceListView.swift
│ │ │ │ │ └── AudioDevicesListViewModel.swift
│ │ │ │ │ ├── Button
│ │ │ │ │ ├── IconButton.swift
│ │ │ │ │ ├── IconButtonViewModel.swift
│ │ │ │ │ ├── IconWithLabelButton.swift
│ │ │ │ │ ├── IconWithLabelButtonViewModel.swift
│ │ │ │ │ ├── PrimaryButton.swift
│ │ │ │ │ └── PrimaryButtonViewModel.swift
│ │ │ │ │ ├── CustomAlert
│ │ │ │ │ └── CustomAlert.swift
│ │ │ │ │ ├── Diagnostics
│ │ │ │ │ ├── CallDiagnosticsViewModel.swift
│ │ │ │ │ ├── MessageBarDiagnosticView.swift
│ │ │ │ │ └── MessageBarDiagnosticViewModel.swift
│ │ │ │ │ ├── Drawer
│ │ │ │ │ ├── BottomDrawer.swift
│ │ │ │ │ ├── DrawerListView.swift
│ │ │ │ │ ├── DrawerViewModels.swift
│ │ │ │ │ ├── ExpandableDrawer.swift
│ │ │ │ │ └── Views
│ │ │ │ │ │ ├── CustomTextField.swift
│ │ │ │ │ │ ├── DrawerBodyTextView.swift
│ │ │ │ │ │ ├── DrawerGenericItemView.swift
│ │ │ │ │ │ ├── DrawerParticipantView.swift
│ │ │ │ │ │ ├── DrawerSelectableItemView.swift
│ │ │ │ │ │ └── DrawerTitleView.swift
│ │ │ │ │ ├── Error
│ │ │ │ │ ├── ErrorInfoView.swift
│ │ │ │ │ └── ErrorInfoViewModel.swift
│ │ │ │ │ ├── LeaveCallConfirmation
│ │ │ │ │ ├── LeaveCallConfirmationView.swift
│ │ │ │ │ └── LeaveCallConfirmationViewModel.swift
│ │ │ │ │ ├── LockPhoneOrientation.swift
│ │ │ │ │ ├── MoreCallOptions
│ │ │ │ │ ├── MoreCallOptionsListView.swift
│ │ │ │ │ └── MoreCallOptionsListViewModel.swift
│ │ │ │ │ ├── ParticipantActions
│ │ │ │ │ ├── ParticipantMenuView.swift
│ │ │ │ │ └── ParticipantMenuViewModel.swift
│ │ │ │ │ ├── ParticipantsList
│ │ │ │ │ ├── ParticipantListVIew.swift
│ │ │ │ │ ├── ParticipantsListCellViewModel.swift
│ │ │ │ │ └── ParticipantsListViewModel.swift
│ │ │ │ │ ├── PopupModalView.swift
│ │ │ │ │ ├── SharingActivity
│ │ │ │ │ ├── DebugInfoSharingActivityViewModel.swift
│ │ │ │ │ ├── SharingActivityContainerController.swift
│ │ │ │ │ └── SharingActivityView.swift
│ │ │ │ │ ├── SupportForm
│ │ │ │ │ ├── SupportFormView.swift
│ │ │ │ │ └── SupportFormViewModel.swift
│ │ │ │ │ ├── ToastNotification
│ │ │ │ │ ├── BottomToastView.swift
│ │ │ │ │ └── BottomToastViewModel.swift
│ │ │ │ │ └── VideoView
│ │ │ │ │ ├── LocalVideoView.swift
│ │ │ │ │ ├── LocalVideoViewModel.swift
│ │ │ │ │ └── VideoRenderView.swift
│ │ │ └── VideoViewManager.swift
│ │ ├── Redux
│ │ │ ├── Action
│ │ │ │ ├── Action.swift
│ │ │ │ ├── AudioSessionAction.swift
│ │ │ │ ├── ButtonViewDataAction.swift
│ │ │ │ ├── CallScreenInfoHeaderAction.swift
│ │ │ │ ├── CallingAction.swift
│ │ │ │ ├── CaptionsAction.swift
│ │ │ │ ├── DiagnosticsAction.swift
│ │ │ │ ├── LifecycleAction.swift
│ │ │ │ ├── LocalUserAction.swift
│ │ │ │ ├── PermissionAction.swift
│ │ │ │ ├── RemoteParticipantsAction.swift
│ │ │ │ ├── RttAction.swift
│ │ │ │ ├── ToastNotificationAction.swift
│ │ │ │ └── VisibilityAction.swift
│ │ │ ├── Middleware
│ │ │ │ ├── CallingMiddleware.swift
│ │ │ │ ├── CallingMiddlewareHandler.swift
│ │ │ │ ├── CallingMiddlewareHandlerExtension.swift
│ │ │ │ └── ThrottleMiddleware.swift
│ │ │ ├── Reducer
│ │ │ │ ├── AppStateReducer.swift
│ │ │ │ ├── AudioSessionReducer.swift
│ │ │ │ ├── ButtonViewDataReducer.swift
│ │ │ │ ├── CallDiagnosticsReducer.swift
│ │ │ │ ├── CallScreenInfoHeaderReducer.swift
│ │ │ │ ├── CallingReducer.swift
│ │ │ │ ├── CaptionsReducer.swift
│ │ │ │ ├── ErrorReducer.swift
│ │ │ │ ├── LifeCycleReducer.swift
│ │ │ │ ├── LocalUserReducer.swift
│ │ │ │ ├── NavigationReducer.swift
│ │ │ │ ├── PermissionReducer.swift
│ │ │ │ ├── PipReducer.swift
│ │ │ │ ├── RemoteParticipantsReducer.swift
│ │ │ │ ├── RttReducer.swift
│ │ │ │ └── ToastNotificationReducer.swift
│ │ │ ├── State
│ │ │ │ ├── AppLifeCycleState.swift
│ │ │ │ ├── AppState.swift
│ │ │ │ ├── AudioSessionState.swift
│ │ │ │ ├── ButtonViewDataState.swift
│ │ │ │ ├── CallDiagnosticsState.swift
│ │ │ │ ├── CallScreenInfoHeaderState.swift
│ │ │ │ ├── CallingState.swift
│ │ │ │ ├── CaptionsState.swift
│ │ │ │ ├── DefaultUserState.swift
│ │ │ │ ├── ErrorState.swift
│ │ │ │ ├── LocalUserState.swift
│ │ │ │ ├── NavigationState.swift
│ │ │ │ ├── PermissionState.swift
│ │ │ │ ├── RemoteParticipantsState.swift
│ │ │ │ ├── RttState.swift
│ │ │ │ ├── ToastNotificationState.swift
│ │ │ │ └── VisibilityState.swift
│ │ │ └── StoreExtensions.swift
│ │ ├── Service
│ │ │ └── Calling
│ │ │ │ ├── AzureCommunicationCalling
│ │ │ │ ├── ACSCallEndReasonExtension.swift
│ │ │ │ ├── ACSCallingStateExtension.swift
│ │ │ │ ├── ACSCameraFacingExtension.swift
│ │ │ │ ├── ACSDiagnosticQualityExtension.swift
│ │ │ │ ├── ACSParticipantStateExtension.swift
│ │ │ │ ├── CallingSDKEventsHandler.swift
│ │ │ │ ├── CallingSDKInitializer.swift
│ │ │ │ ├── CallingSDKWrapper.swift
│ │ │ │ ├── LocalVideoStreamExtension.swift
│ │ │ │ ├── RemoteParticipantExtension.swift
│ │ │ │ └── RemoteParticipantsEventsAdapter.swift
│ │ │ │ ├── CallHistoryService.swift
│ │ │ │ ├── CallingSDKWrapperProtocol.swift
│ │ │ │ └── CallingService.swift
│ │ └── Utilities
│ │ │ ├── AccessibilityIdentifier.swift
│ │ │ ├── CallCompositeInternalError.swift
│ │ │ ├── ColorExtension.swift
│ │ │ ├── LocalizationKey.swift
│ │ │ ├── NotificationCenterName.swift
│ │ │ └── ThemeColor.swift
│ ├── Tests
│ │ ├── .swiftlint.yml
│ │ ├── AccessibilityProviderMocking.swift
│ │ ├── Builder
│ │ │ └── ParticipantInfoModelBuilder.swift
│ │ ├── CallCompositeOptions
│ │ │ ├── CallConfigurationTests.swift
│ │ │ ├── CallKitOptionsTests.swift
│ │ │ ├── CallScreenOptionsTests.swift
│ │ │ ├── DiagnosticConfigTests.swift
│ │ │ ├── PushNotificationEventTypeTests.swift
│ │ │ ├── PushNotificationTests.swift
│ │ │ ├── RemoteOptionsTests.swift
│ │ │ └── SetupScreenOptionsTests.swift
│ │ ├── CallHistoryRepositoryMocking.swift
│ │ ├── CallHistoryServiceMocking.swift
│ │ ├── CallingMiddlewareHandlerMocking.swift
│ │ ├── CallingSDKEventsHandlerMocking.swift
│ │ ├── CompositeViewModelFactoryMocking.swift
│ │ ├── ErrorMocking.swift
│ │ ├── Info.plist
│ │ ├── LocalizationProviderMocking.swift
│ │ ├── Manager
│ │ │ ├── AvatarManagerTests.swift
│ │ │ ├── CallDurationManagerTests.swift
│ │ │ ├── CallStateManagerTests.swift
│ │ │ ├── CapabilitiesManagerTests.swift
│ │ │ ├── CaptionsViewManagerTests.swift
│ │ │ ├── CompositeErrorManagerTests.swift
│ │ │ ├── CompositeExitManagerTests.swift
│ │ │ └── RemoteParticipantsManagerTests.swift
│ │ ├── MockThemeOptions.swift
│ │ ├── Mocking
│ │ │ ├── AvatarViewManagerMocking.swift
│ │ │ ├── CallingSDKWrapperMocking.swift
│ │ │ ├── CallingServiceMocking.swift
│ │ │ ├── DebugInfoManagerMocking.swift
│ │ │ ├── LoggerMocking.swift
│ │ │ ├── MiddlewareMocking.swift
│ │ │ ├── PermissionsManagerMocking.swift
│ │ │ ├── ReducerMocking.swift
│ │ │ ├── StoreFactoryMocking.swift
│ │ │ ├── VideoViewManagerMocking.swift
│ │ │ └── ViewModels
│ │ │ │ ├── AudioDeviceListViewModelMocking.swift
│ │ │ │ ├── BannerTextViewModelMocking.swift
│ │ │ │ ├── BannerViewModelMocking.swift
│ │ │ │ ├── ControlBarViewModelMocking.swift
│ │ │ │ ├── ErrorInfoViewModelMocking.swift
│ │ │ │ ├── IconButtonViewModelMocking.swift
│ │ │ │ ├── IconWithLabelButtonViewModelMocking.swift
│ │ │ │ ├── InfoHeaderViewModelMocking.swift
│ │ │ │ ├── LocalVideoViewModelMocking.swift
│ │ │ │ ├── OnHoldOverlayViewModelMocking.swift
│ │ │ │ ├── ParticipantGridCellViewModelMocking.swift
│ │ │ │ ├── ParticipantGridViewModelMocking.swift
│ │ │ │ ├── ParticipantsListViewModelMocking.swift
│ │ │ │ ├── PreviewAreaViewModelMocking.swift
│ │ │ │ ├── PrimaryButtonViewModelMocking.swift
│ │ │ │ └── SetupControlBarViewModelMocking.swift
│ │ ├── Presentation
│ │ │ ├── Calling
│ │ │ │ ├── BannerInfoTypeTests.swift
│ │ │ │ ├── BannerTextViewModelTests.swift
│ │ │ │ ├── BannerViewModelTests.swift
│ │ │ │ ├── BottomToastViewModelTests.swift
│ │ │ │ ├── CallDiagnosticsViewModelTests.swift
│ │ │ │ ├── CallingViewModelTests.swift
│ │ │ │ ├── CompositeButtonTests.swift
│ │ │ │ ├── ControlBarViewModelTests.swift
│ │ │ │ ├── InfoHeaderViewModelTests.swift
│ │ │ │ ├── LoadingOverlayViewModelTests.swift
│ │ │ │ ├── LobbyOverlayViewModelTests.swift
│ │ │ │ ├── LobbyWaitingHeaderViewModelTest.swift
│ │ │ │ ├── MessageBarDiagnosticViewModelTests.swift
│ │ │ │ ├── OnHoldOverlayViewModelTests.swift
│ │ │ │ ├── ParticipantCellViewModelTests.swift
│ │ │ │ ├── ParticipantGridsViewModelTests.swift
│ │ │ │ ├── ParticipantMenuViewModelTests.swift
│ │ │ │ ├── ParticipantsListViewModelTests.swift
│ │ │ │ └── SupportFormViewModelTests.swift
│ │ │ ├── ContainerViewModelTests.swift
│ │ │ ├── Factories
│ │ │ │ └── CompositeViewModelFactoryTests.swift
│ │ │ ├── Provider
│ │ │ │ └── LocalizationProviderTests.swift
│ │ │ ├── Setup
│ │ │ │ ├── CallCompositeTests.swift
│ │ │ │ ├── ErrorInfoViewModelTests.swift
│ │ │ │ ├── JoiningCallActivityViewModelTests.swift
│ │ │ │ ├── PreviewAreaViewModelTests.swift
│ │ │ │ ├── SetupControlBarViewModelTests.swift
│ │ │ │ └── SetupViewModelTests.swift
│ │ │ └── ViewComponents
│ │ │ │ ├── AudioDevicesListViewModelTests.swift
│ │ │ │ └── LocalVideoViewModelTests.swift
│ │ ├── Redux
│ │ │ ├── Middleware
│ │ │ │ ├── CallingMiddlewareHandlerTests.swift
│ │ │ │ ├── CallingMiddlewareTests.swift
│ │ │ │ └── ThrottleMiddlewareTests.swift
│ │ │ └── Reducer
│ │ │ │ ├── AppStateReducerTests.swift
│ │ │ │ ├── AudioSessionReducerTests.swift
│ │ │ │ ├── CallDiagnosticsReducerTests.swift
│ │ │ │ ├── CallingReducerTests.swift
│ │ │ │ ├── ErrorReducerTests.swift
│ │ │ │ ├── LifeCycleReducerTests.swift
│ │ │ │ ├── LocalUserReducerTests.swift
│ │ │ │ ├── NavigationReducerTests.swift
│ │ │ │ ├── PermissionReducerTests.swift
│ │ │ │ ├── RemoteParticipantsReducerTests.swift
│ │ │ │ └── ToastNotificationReducerTests.swift
│ │ └── Service
│ │ │ ├── CallHistoryRepositoryTests.swift
│ │ │ ├── CallHistoryRepositoryTests.swift.plist
│ │ │ ├── CallHistoryServiceTests.swift
│ │ │ ├── CallingSDKInitializerTests.swift
│ │ │ ├── CallingServiceTests.swift
│ │ │ └── NavigationRouterTests.swift
│ └── manual-installation.md
│ ├── AzureCommunicationUIChat
│ ├── AzureCommunicationUIChat.podspec
│ ├── AzureCommunicationUIChat.xcodeproj
│ │ ├── project.pbxproj
│ │ ├── project.xcworkspace
│ │ │ ├── contents.xcworkspacedata
│ │ │ └── xcshareddata
│ │ │ │ └── IDEWorkspaceChecks.plist
│ │ └── xcshareddata
│ │ │ └── xcschemes
│ │ │ └── AzureCommunicationUIChat.xcscheme
│ ├── CHANGELOG.md
│ ├── README.md
│ ├── Sources
│ │ ├── Assets.xcassets
│ │ │ ├── Contents.json
│ │ │ └── Icon
│ │ │ │ ├── Contents.json
│ │ │ │ ├── ic_fluent_arrow_down_24_filled.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_arrow_down_24_filled.svg
│ │ │ │ ├── ic_fluent_checkmark_circle_12_regular.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_checkmark_circle_12_regular.svg
│ │ │ │ ├── ic_fluent_circle_12_regular.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_circle_12_regular.svg
│ │ │ │ ├── ic_fluent_error_circle_12_regular.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_error_circle_12_regular.svg
│ │ │ │ ├── ic_fluent_eye_12_regular.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_eye_12_regular.svg
│ │ │ │ ├── ic_fluent_person_add_24_regular.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── person-add.svg
│ │ │ │ ├── ic_fluent_person_remove_24_regular.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── person-arrow-left.svg
│ │ │ │ ├── ic_fluent_send_24_filled.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_send_24_filled.svg
│ │ │ │ ├── ic_fluent_send_24_regular.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_send_24_regular.svg
│ │ │ │ └── ic_ios_arrow_left_24_filled.imageset
│ │ │ │ ├── Contents.json
│ │ │ │ └── ic_fluent_ios_arrow_ltr_24_regular.svg
│ │ ├── ChatAdapter.swift
│ │ ├── ChatCompositeOptions
│ │ │ ├── BaseLocalizationProviderProtocol.swift
│ │ │ ├── ChatCompositeError.swift
│ │ │ ├── ChatCompositeOptions.swift
│ │ │ ├── ChatConfiguration.swift
│ │ │ ├── DiagnosticConfig.swift
│ │ │ ├── LocalizationOptions.swift
│ │ │ ├── SetParticipantViewDataError.swift
│ │ │ ├── SupportedLocale.swift
│ │ │ └── ThemeOptions.swift
│ │ ├── Info.plist
│ │ ├── Localization
│ │ │ └── Localizable.strings
│ │ ├── Model
│ │ │ ├── BaseInfoModel.swift
│ │ │ ├── ChatEventModel.swift
│ │ │ ├── ChatMessageInfoModel.swift
│ │ │ ├── ChatThreadInfoModel.swift
│ │ │ ├── LocalUserInfoModel.swift
│ │ │ ├── ParticipantInfoModel.swift
│ │ │ ├── ParticipantsInfoModel.swift
│ │ │ ├── ReadReceiptInfoModel.swift
│ │ │ └── UserEventTimestampModel.swift
│ │ ├── Presentation
│ │ │ ├── ChatCompositeView.swift
│ │ │ ├── Factories
│ │ │ │ ├── CompositeViewFactory.swift
│ │ │ │ └── CompositeViewModelFactory.swift
│ │ │ ├── FluentUI
│ │ │ │ ├── Icon.swift
│ │ │ │ └── Wrapper
│ │ │ │ │ ├── TypingParticipantAvatarGroup.swift
│ │ │ │ │ └── TypingParticipantAvatarGroupContainer.swift
│ │ │ ├── Manager
│ │ │ │ ├── AppLifeCycleManager.swift
│ │ │ │ ├── AvatarViewManager.swift
│ │ │ │ ├── CompositeManager.swift
│ │ │ │ ├── ErrorManager.swift
│ │ │ │ ├── MessageRepositoryManager.swift
│ │ │ │ └── RemoteParticipantsManager.swift
│ │ │ ├── Style
│ │ │ │ ├── ColorThemeProvider.swift
│ │ │ │ ├── IconProvider.swift
│ │ │ │ ├── LocalizationProvider.swift
│ │ │ │ └── StyleProvider.swift
│ │ │ ├── SwiftUI
│ │ │ │ ├── Button
│ │ │ │ │ ├── IconButton.swift
│ │ │ │ │ └── IconButtonViewModel.swift
│ │ │ │ ├── Chat
│ │ │ │ │ ├── ChatView.swift
│ │ │ │ │ ├── ChatViewComponents
│ │ │ │ │ │ ├── BottomBarView.swift
│ │ │ │ │ │ ├── BottomBarViewModel.swift
│ │ │ │ │ │ ├── Message
│ │ │ │ │ │ │ ├── HtmlMessageView.swift
│ │ │ │ │ │ │ ├── MessageView.swift
│ │ │ │ │ │ │ ├── SystemMessageView.swift
│ │ │ │ │ │ │ └── TextMessageView.swift
│ │ │ │ │ │ ├── MessageListView.swift
│ │ │ │ │ │ ├── MessageListViewModel.swift
│ │ │ │ │ │ ├── ObservableScrollView.swift
│ │ │ │ │ │ ├── TopBarView.swift
│ │ │ │ │ │ ├── TopBarViewModel.swift
│ │ │ │ │ │ ├── TypingParticipantsView.swift
│ │ │ │ │ │ └── TypingParticipantsViewModel.swift
│ │ │ │ │ └── ChatViewModel.swift
│ │ │ │ ├── ChatCompositeViewController.swift
│ │ │ │ └── Container
│ │ │ │ │ ├── ContainerUIHostingController.swift
│ │ │ │ │ └── ContainerView.swift
│ │ │ └── Utilities
│ │ │ │ └── UIApplicationHelper.swift
│ │ ├── Redux
│ │ │ ├── Action
│ │ │ │ ├── Action.swift
│ │ │ │ ├── ChatAction.swift
│ │ │ │ ├── ErrorAction.swift
│ │ │ │ ├── LifecycleAction.swift
│ │ │ │ ├── ParticipantsAction.swift
│ │ │ │ └── RepositoryAction.swift
│ │ │ ├── Middleware
│ │ │ │ ├── ChatActionHandler.swift
│ │ │ │ ├── ChatMiddleware.swift
│ │ │ │ ├── ChatServiceEventHandler.swift
│ │ │ │ ├── RepositoryMiddleware.swift
│ │ │ │ └── RepositoryMiddlewareHandler.swift
│ │ │ ├── Reducer
│ │ │ │ ├── AppStateReducer.swift
│ │ │ │ ├── ChatReducer.swift
│ │ │ │ ├── ErrorReducer.swift
│ │ │ │ ├── LifeCycleReducer.swift
│ │ │ │ ├── NavigationReducer.swift
│ │ │ │ ├── ParticipantsReducer.swift
│ │ │ │ └── RepositoryReducer.swift
│ │ │ ├── State
│ │ │ │ ├── AppLifeCycleState.swift
│ │ │ │ ├── ChatAppState.swift
│ │ │ │ ├── ChatState.swift
│ │ │ │ ├── ErrorState.swift
│ │ │ │ ├── NavigationState.swift
│ │ │ │ ├── ParticipantsState.swift
│ │ │ │ └── RepositoryState.swift
│ │ │ └── StoreExtensions.swift
│ │ ├── Service
│ │ │ └── Chat
│ │ │ │ ├── ChatSDKEventsHandler.swift
│ │ │ │ ├── ChatSDKWrapper.swift
│ │ │ │ ├── ChatSDKWrapperProtocol.swift
│ │ │ │ ├── ChatService.swift
│ │ │ │ └── Extension
│ │ │ │ ├── ChatMessageExtension.swift
│ │ │ │ ├── ChatParticipantExtension.swift
│ │ │ │ ├── ChatSDKAsyncExtension.swift
│ │ │ │ ├── CommunicationIdentifierExtension.swift
│ │ │ │ └── TrouterEventExtension.swift
│ │ └── Utilities
│ │ │ ├── ChatCompositeInternalError.swift
│ │ │ ├── ColorExtension.swift
│ │ │ ├── LocalizationKey.swift
│ │ │ └── StringExtension.swift
│ └── Tests
│ │ ├── .swiftlint.yml
│ │ ├── ChatCompositeOptions
│ │ ├── DiagnosticConfigTests.swift
│ │ └── RemoteOptionsTests.swift
│ │ ├── Manager
│ │ ├── AvatarManagerTests.swift
│ │ ├── ErrorManagerTests.swift
│ │ ├── MessageRepositoryManagerTests.swift
│ │ └── RemoteParticipantsManagerTests.swift
│ │ ├── Mocking
│ │ ├── AccessibilityProviderMocking.swift
│ │ ├── ChatCompositeMocking.swift
│ │ ├── ChatSDKWrapperMocking.swift
│ │ ├── ChatServiceMocking.swift
│ │ ├── CompositeViewModelFactoryMocking.swift
│ │ ├── ErrorMocking.swift
│ │ ├── LocalizationProviderMocking.swift
│ │ ├── LoggerMocking.swift
│ │ ├── MessageRepositoryManagerMocking.swift
│ │ ├── Redux
│ │ │ ├── ChatActionHandlerMocking.swift
│ │ │ ├── ChatServiceEventHandlerMocking.swift
│ │ │ ├── MiddlewareMocking.swift
│ │ │ ├── ReducerMocking.swift
│ │ │ ├── RepositoryHandlerMocking.swift
│ │ │ └── StoreFactoryMocking.swift
│ │ └── ViewModels
│ │ │ └── ChatViewModelMocking.swift
│ │ ├── Presentation
│ │ ├── Chat
│ │ │ ├── ChatViewModelTests.swift
│ │ │ └── MessageViewModelTests.swift
│ │ ├── Factories
│ │ │ └── CompositeViewModelFactoryTests.swift
│ │ └── Provider
│ │ │ └── LocalizationProviderTests.swift
│ │ ├── Redux
│ │ ├── Middleware
│ │ │ ├── ChatActionHandlerTests.swift
│ │ │ ├── ChatMiddlewareTests.swift
│ │ │ ├── ChatServiceEventHandlerTests.swift
│ │ │ ├── RepositoryMiddlewareHandlerTests.swift
│ │ │ └── RepositoryMiddlewareTests.swift
│ │ └── Reducer
│ │ │ ├── AppStateReducerTests.swift
│ │ │ ├── ChatReducerTests.swift
│ │ │ ├── ErrorReducerTests.swift
│ │ │ ├── LifeCycleReducerTests.swift
│ │ │ ├── NavigationReducerTests.swift
│ │ │ ├── ParticipantsReducerTests.swift
│ │ │ └── RepositoryReducerTests.swift
│ │ └── Service
│ │ ├── ChatSDKEventsHandlerTests.swift
│ │ ├── ChatServiceTests.swift
│ │ └── NavigationRouterTests.swift
│ └── AzureCommunicationUICommon
│ ├── .gitignore
│ ├── .swiftlint.yml
│ ├── Package.swift
│ ├── README.md
│ ├── Sources
│ └── AzureCommunicationUICommon
│ │ ├── AccessibilityProvider.swift
│ │ ├── AccessibilityProviderNotificationsObserver.swift
│ │ ├── AccessibilityProviderProtocol.swift
│ │ ├── ArrayExtension.swift
│ │ ├── CancelBag.swift
│ │ ├── DeviceExtension.swift
│ │ ├── EnvironmentValuesExtension.swift
│ │ ├── Logger.swift
│ │ ├── MappedSequence.swift
│ │ ├── Middleware.swift
│ │ ├── OrientationManager.swift
│ │ ├── PreferenceKey.swift
│ │ ├── Reducer.swift
│ │ ├── Store.swift
│ │ ├── StringConstants.swift
│ │ ├── UIViewControllerExtension.swift
│ │ ├── UIWindowExtension.swift
│ │ ├── ViewExtension.swift
│ │ └── ViewModifer.swift
│ └── Tests
│ └── AzureCommunicationUICommonTests
│ ├── ArrayExtensionTests.swift
│ ├── CancelBagTests.swift
│ └── MappedSequenceTests.swift
├── CHANGELOG.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── LICENSE
├── README.md
├── SECURITY.md
├── SUPPORT.md
├── azure-pipelines.yml
├── docs
├── contributing-guide.md
└── images
│ ├── EnvConfig.png
│ ├── SelectSimulator.png
│ ├── calling.png
│ ├── chat.png
│ ├── mobile-ui-library-calling-hero-image.png
│ ├── mobile-ui-library-chat-hero-image.png
│ └── mobile-ui-library-hero-image.png
├── eng
├── jazzy
│ ├── AzureCommunicationUICalling.yml
│ └── AzureCommunicationUIChat.yml
├── pipelines
│ ├── ci.yml
│ ├── jazzy-docs.yml
│ ├── jobs
│ │ ├── CI-build-job.yml
│ │ ├── UI-test-job.yml
│ │ ├── appcenter-test-job-steps.yml
│ │ └── templates
│ │ │ ├── build-and-coverage.yml
│ │ │ ├── configure-for-enterprise-signing.yml
│ │ │ ├── jazzy-build-script.yml
│ │ │ ├── retrieve-acs-token.yml
│ │ │ ├── run-appcenter-test.yml
│ │ │ ├── set-appcenter-devices.yml
│ │ │ └── update-demo-app-plist-for-testing.yml
│ ├── nightly.yml
│ └── release.yml
└── slather
│ ├── ui-calling-slather.yml
│ └── ui-chat-slather.yml
└── scripts
├── README.md
├── __pycache__
├── composite.cpython-311.pyc
└── composite.cpython-312.pyc
├── composite.py
├── main-repo-updater.py
└── podspec-updater.py
/.github/CODEOWNERS:
--------------------------------------------------------------------------------
1 | # Instructions for CODEOWNERS file format:
2 | # https://github.com/Azure/azure-sdk/blob/main/docs/policies/opensource.md#codeowners
3 |
4 | # These owners will be the default owners for everything in the repository unless a later match takes precedencet.
5 | * @Azure/acs-ui-mobile-calling-reviewer-1 @Azure/acs-ui-mobile-calling-reviewer-2 @Azure/acs-ui-mobile-chat-reviewer-1 @Azure/acs-ui-mobile-chat-reviewer-2
6 |
7 | # AzureCommunicationUICalling
8 | /AzureCommunicationUI/sdk/AzureCommunicationUICalling/ @Azure/acs-ui-mobile-calling-reviewer-1 @Azure/acs-ui-mobile-calling-reviewer-2
9 |
10 | # AzureCommunicationUIChat
11 | /AzureCommunicationUI/sdk/AzureCommunicationUIChat/ @Azure/acs-ui-mobile-chat-reviewer-1 @Azure/acs-ui-mobile-chat-reviewer-2
12 |
--------------------------------------------------------------------------------
/.github/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Microsoft Open Source Code of Conduct
2 |
3 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
4 |
5 | Resources:
6 |
7 | - [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/)
8 | - [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/)
9 | - Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns
10 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/report-a-bug.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Report a bug
3 | about: Report a bug to help us improve.
4 | title: [Version]
5 | labels: Bug
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Describe the bug**
11 | A clear and concise description of what the bug is.
12 |
13 | **To Reproduce**
14 | Steps to reproduce the behavior:
15 | 1. Go to '...'
16 | 2. Click on '....'
17 | 3. Scroll down to '....'
18 | 4. See error
19 | 5. This bug is [always/occasional/seldom] reproducible.
20 |
21 | **Expected behavior**
22 | A clear and concise description of what you expected to happen.
23 |
24 | **Screenshots**
25 | If applicable, add screenshots to help explain your problem.
26 |
27 | **AzureCommunicationUILibrary (please complete the following information):**
28 | - Version [e.g. 22]
29 |
30 | **Smartphone (please complete the following information):**
31 | - Device: [e.g. iPhone6]
32 | - OS: [e.g. iOS8.1]
33 |
34 | **Additional context**
35 | Add any other context about the problem here.
36 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/request-a-feature.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Request a feature
3 | about: Suggest a feature or share an idea.
4 | title: Add [what] to/in [where]
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **What feature are you requesting?**
11 |
12 | **What would be the benefit of adding this feature?**
13 |
14 | **What solution would be ideal for you?**
15 |
16 | **What alternatives have you considered?**
17 |
18 | **Is there any additional information for your request?**
19 |
20 | **Attach screenshots or images add detail to your request:**
21 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/.swiftlint-tests.yml:
--------------------------------------------------------------------------------
1 | parent_config: .swiftlint.yml
2 | disabled_rules:
3 | - line_length
4 | - file_length
5 | - type_body_length
6 |
7 |
8 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUI.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
12 |
13 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUI.xcworkspace/xcshareddata/IDETemplateMacros.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | FILEHEADER
6 |
7 | // Copyright (c) Microsoft Corporation. All rights reserved.
8 | // Licensed under the MIT License.
9 | //
10 |
11 |
12 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUI.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUI.xcworkspace/xcshareddata/WorkspaceSettings.xcsettings:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreviewsEnabled
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/AzureCommunicationUIDemoApp.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/AzureCommunicationUIDemoApp.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/AzureCommunicationUIDemoApp.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/AzureCommunicationUIDemoAppDebug.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/AzureCommunicationUIDemoAppExtension/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | NSExtension
6 |
7 | NSExtensionAttributes
8 |
9 | IntentsRestrictedWhileLocked
10 |
11 | IntentsSupported
12 |
13 | INSendMessageIntent
14 | INSearchForMessagesIntent
15 | INSetMessageAttributeIntent
16 |
17 |
18 | NSExtensionPointIdentifier
19 | com.apple.intents-service
20 | NSExtensionPrincipalClass
21 | $(PRODUCT_MODULE_NAME).IntentHandler
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/.swiftlint.yml:
--------------------------------------------------------------------------------
1 | parent_config: ../../.swiftlint.yml
2 | disabled_rules:
3 | - function_body_length
4 | - file_length
5 | - type_body_length
6 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/AppConfig.xcconfig:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 | #include? "EnvConfig.xcconfig"
6 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AccentColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "idiom" : "universal"
5 | }
6 | ],
7 | "info" : {
8 | "author" : "xcode",
9 | "version" : 1
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.appiconset/100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.appiconset/100.png
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.appiconset/1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.appiconset/1024.png
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.appiconset/114.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.appiconset/114.png
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.appiconset/120.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.appiconset/120.png
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.appiconset/144.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.appiconset/144.png
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.appiconset/152.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.appiconset/152.png
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.appiconset/167.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.appiconset/167.png
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.appiconset/180.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.appiconset/180.png
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.appiconset/20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.appiconset/20.png
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.appiconset/29.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.appiconset/29.png
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.appiconset/40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.appiconset/40.png
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.appiconset/50.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.appiconset/50.png
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.appiconset/57.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.appiconset/57.png
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.appiconset/58.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.appiconset/58.png
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.appiconset/60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.appiconset/60.png
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.appiconset/72.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.appiconset/72.png
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.appiconset/76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.appiconset/76.png
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.appiconset/80.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.appiconset/80.png
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.appiconset/87.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.appiconset/87.png
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.dev.appiconset/100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.dev.appiconset/100.png
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.dev.appiconset/1024.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.dev.appiconset/1024.png
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.dev.appiconset/114.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.dev.appiconset/114.png
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.dev.appiconset/120.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.dev.appiconset/120.png
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.dev.appiconset/144.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.dev.appiconset/144.png
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.dev.appiconset/152.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.dev.appiconset/152.png
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.dev.appiconset/167.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.dev.appiconset/167.png
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.dev.appiconset/180.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.dev.appiconset/180.png
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.dev.appiconset/20.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.dev.appiconset/20.png
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.dev.appiconset/29.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.dev.appiconset/29.png
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.dev.appiconset/40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.dev.appiconset/40.png
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.dev.appiconset/50.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.dev.appiconset/50.png
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.dev.appiconset/57.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.dev.appiconset/57.png
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.dev.appiconset/58.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.dev.appiconset/58.png
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.dev.appiconset/60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.dev.appiconset/60.png
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.dev.appiconset/72.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.dev.appiconset/72.png
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.dev.appiconset/76.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.dev.appiconset/76.png
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.dev.appiconset/80.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.dev.appiconset/80.png
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.dev.appiconset/87.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/AppIcon.dev.appiconset/87.png
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/Avatars/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/Avatars/cat.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "cat.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/Avatars/fox.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "fox.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/Avatars/koala.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "koala.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/Avatars/monkey.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "monkey.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/Avatars/mouse.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "mouse.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/Avatars/octopus.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "octopus.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/ic_fluent_chat_20_regular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_chat_20_regular.svg",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/ic_fluent_chevron_right_20_regular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_chevron_right_20_regular.svg",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "scale" : "2x"
11 | },
12 | {
13 | "idiom" : "universal",
14 | "scale" : "3x"
15 | }
16 | ],
17 | "info" : {
18 | "author" : "xcode",
19 | "version" : 1
20 | },
21 | "properties" : {
22 | "template-rendering-intent" : "template"
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Assets.xcassets/ic_fluent_chevron_right_20_regular.imageset/ic_fluent_chevron_right_20_regular.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/DemoInputTypes.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | import AzureCommunicationUICalling
8 |
9 | enum MeetingType: Int {
10 | case groupCall
11 | case teamsMeeting
12 | case oneToNCall
13 | case roomCall
14 | }
15 |
16 | enum ChatType: Int {
17 | case groupChat
18 | case teamsChat
19 | }
20 |
21 | enum ACSTokenType: Int {
22 | case tokenUrl
23 | case token
24 | }
25 |
26 | enum DemoError: Error {
27 | case invalidToken
28 | case invalidGroupCallId
29 |
30 | func getErrorCode() -> String {
31 | switch self {
32 | case .invalidToken:
33 | return CallCompositeErrorCode.tokenExpired
34 | case .invalidGroupCallId:
35 | return CallCompositeErrorCode.callJoin
36 | }
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/GlobalCompositeManager.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | #if DEBUG
8 | @testable import AzureCommunicationUICalling
9 | #else
10 | import AzureCommunicationUICalling
11 | #endif
12 |
13 | class GlobalCompositeManager {
14 | static var callComposite: CallComposite?
15 | }
16 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/NSUserActivity.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | import Intents
8 |
9 | extension NSUserActivity: StartCallConvertible {
10 |
11 | private struct Constants {
12 | static let ActivityType = String(describing: INStartCallIntent.self)
13 | }
14 |
15 | var startCallHandle: String? {
16 | guard activityType == Constants.ActivityType else {
17 | return nil
18 | }
19 |
20 | guard
21 | let interaction = interaction,
22 | let startAudioCallIntent = interaction.intent as? INStartCallIntent,
23 | let contact = startAudioCallIntent.contacts?.first
24 | else {
25 | return nil
26 | }
27 |
28 | return contact.personHandle?.value
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/StartCallConvertible.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | protocol StartCallConvertible {
9 | var startCallHandle: String? { get }
10 | }
11 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/URL.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | import Intents
8 |
9 | extension URL: StartCallConvertible {
10 |
11 | private struct Constants {
12 | static let URLScheme: String = "acsui"
13 | }
14 |
15 | var startCallHandle: String? { // Explicitly define the data type as String
16 | guard scheme == Constants.URLScheme else {
17 | return nil
18 | }
19 |
20 | return host
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Utilities/Extension.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | extension URL {
8 | func toQueryDictionary() -> [String: String] {
9 |
10 | // Group call = acsui://calling?acstoken={}&name={}&groupid={}
11 | // Teams call = acsui://calling?acstoken={}&name={}&teamsurl={}
12 | guard let query = self.query else {
13 | return [:]
14 | }
15 | var queryStrings = [String: String]()
16 | for pair in query.components(separatedBy: "&") {
17 | let key = pair.components(separatedBy: "=")[0]
18 | let value = String(pair.dropFirst(key.count + 1)).removingPercentEncoding ?? ""
19 | queryStrings[key.lowercased()] = value
20 | }
21 | return queryStrings
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Views/CustomControls.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | import SwiftUI
8 |
9 | struct DemoButtonStyle: ButtonStyle {
10 | @Environment(\.isEnabled) var isEnabled: Bool
11 |
12 | func makeBody(configuration: Configuration) -> some View {
13 | configuration.label
14 | .padding(.horizontal, 20)
15 | .padding(.vertical, 10)
16 | .foregroundColor(isEnabled ? .white : .disabledWhite)
17 | .background(isEnabled ? Color.blue : Color.disabledBlue)
18 | .clipShape(RoundedRectangle(cornerRadius: 8))
19 | }
20 | }
21 |
22 | extension Color {
23 | static let disabledBlue = Color(red: 188 / 255.0, green: 224 / 255.0, blue: 253 / 255.0)
24 | static let disabledWhite = Color(white: 1, opacity: 179 / 255.0)
25 | }
26 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Views/UserReportedIssueView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | import UIKit
8 | import AzureCommunicationUICalling
9 |
10 | func showUserReportAlert(from viewController: UIViewController, issue: CallCompositeUserReportedIssue) {
11 | DispatchQueue.main.async {
12 | let alert = UIAlertController(title: "Issue Reported", message: issue.userMessage, preferredStyle: .alert)
13 | alert.addAction(UIAlertAction(title: "OK", style: .default))
14 | viewController.present(alert, animated: true)
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Views/ViewModifier/ErrorView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import SwiftUI
7 |
8 | struct ErrorView: ViewModifier {
9 | @Binding var isPresented: Bool
10 |
11 | var errorMessage: String
12 | var onDismiss: (() -> Void)?
13 |
14 | func body(content: Content) -> some View {
15 | content.alert(isPresented: $isPresented) {
16 | Alert(title: Text("Error"),
17 | message: Text(errorMessage),
18 | dismissButton: .default(Text("Dismiss"), action: onDismiss))
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Views/ViewModifier/TextFieldClearButton.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import SwiftUI
7 |
8 | struct TextFieldClearButton: ViewModifier {
9 | @Binding var text: String
10 |
11 | func body(content: Content) -> some View {
12 | HStack {
13 | content
14 |
15 | if !text.isEmpty {
16 | Button(
17 | action: { self.text = "" },
18 | label: {
19 | Image(systemName: "delete.left")
20 | .foregroundColor(Color(UIColor.opaqueSeparator))
21 | }
22 | ).accessibilityIdentifier(AccessibilityId.clearTokenTextFieldAccessibilityID.rawValue)
23 | }
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Views/ar.lproj/LaunchScreen.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Views/ar.lproj/Localizable.strings:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Views/en.lproj/Localizable.strings:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Views/fr-CA.lproj/LaunchScreen.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Views/fr-CA.lproj/Localizable.strings:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | "AzureCommunicationUICalling.SetupView.Button.JoinCall"="Join call (override fr-CA)";
7 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Views/fr.lproj/LaunchScreen.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Views/fr.lproj/Localizable.strings:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | "AzureCommunicationUICalling.SetupView.Button.JoinCall"="Join call (override fr)";
7 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Views/it.lproj/LaunchScreen.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Views/it.lproj/Localizable.strings:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Views/zh-Hant.lproj/LaunchScreen.strings:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Sources/Views/zh-Hant.lproj/Localizable.strings:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | "AzureCommunicationUICalling.SetupView.Button.JoinCall"="Join call (override zh-Hant)";
7 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Tests/AzureCommunicationUIDemoAppLaunchTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import XCTest
7 |
8 | class AzureCommunicationUIDemoAppLaunchTests: XCUITestBase {
9 | func testCallCompositeSwiftUILaunch() {
10 | tapInterfaceFor(.callSwiftUI)
11 | startApp()
12 | }
13 |
14 | func testCallCompositeUIKitLaunch() {
15 | tapInterfaceFor(.callUIKit)
16 | startApp()
17 | }
18 | }
19 |
20 | extension AzureCommunicationUIDemoAppLaunchTests {
21 | func startApp() {
22 | startExperience(useCallingSDKMock: false)
23 | wait(for: app.buttons[AccessibilityIdentifier.joinCallAccessibilityID.rawValue])
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Tests/AzureCommunicationUIDemoAppPIPTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import XCTest
7 | @testable import AzureCommunicationUICalling
8 |
9 | class AzureCommunicationUIDemoAppPIPTests: XCUITestBase {
10 | func testCallCompositeCurrentParticipantOnlyCallNoPIP() {
11 | tapInterfaceFor(.callUIKit)
12 | startExperience()
13 |
14 | joinCall()
15 |
16 | wait(for: app.buttons[AccessibilityIdentifier.hangupAccessibilityID.rawValue])
17 |
18 | let draggablePipViewRetest = app.otherElements[AccessibilityIdentifier.draggablePipViewAccessibilityID.rawValue]
19 | XCTAssertFalse(draggablePipViewRetest.exists)
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Tests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleShortVersionString
6 | $(MARKETING_VERSION)
7 | CFBundleIdentifier
8 | $(PRODUCT_BUNDLE_IDENTIFIER)
9 | CFBundleName
10 | $(PRODUCT_NAME)
11 | CFBundleExecutable
12 | $(EXECUTABLE_NAME)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundlePackageType
16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE)
17 | CFBundleVersion
18 | $(CURRENT_PROJECT_VERSION)
19 | CFBundleDevelopmentRegion
20 | $(DEVELOPMENT_LANGUAGE)
21 |
22 |
23 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Tests/Utilities/XCTestCaseExtension.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import XCTest
7 |
8 | extension XCTestCase {
9 | func wait(for element: XCUIElement, timeout: TimeInterval = 20.0) {
10 | let predicate = NSPredicate(format: "exists == true")
11 | let expectation = expectation(for: predicate, evaluatedWith: element, handler: nil)
12 | wait(for: [expectation], timeout: timeout)
13 | }
14 |
15 | func waitEnabled(for element: XCUIElement, timeout: TimeInterval = 20.0) {
16 | let predicate = NSPredicate(format: "enabled == true")
17 | let expectation = expectation(for: predicate, evaluatedWith: element, handler: nil)
18 | wait(for: [expectation], timeout: timeout)
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/AzureCommunicationUIDemoApp/Tests/Utilities/XCUIElementExtension.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import XCTest
7 |
8 | extension XCUIElement {
9 | var isOn: Bool? {
10 | return (self.value as? String).map { $0 == "1" }
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/AzureCommunicationUICalling.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/AzureCommunicationUICalling.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Color/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | },
6 | "properties" : {
7 | "provides-namespace" : true
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Color/hangupColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0x43",
9 | "green" : "0x2E",
10 | "red" : "0xA4"
11 | }
12 | },
13 | "idiom" : "universal"
14 | },
15 | {
16 | "appearances" : [
17 | {
18 | "appearance" : "luminosity",
19 | "value" : "dark"
20 | }
21 | ],
22 | "color" : {
23 | "color-space" : "srgb",
24 | "components" : {
25 | "alpha" : "1.000",
26 | "blue" : "0x33",
27 | "green" : "0x33",
28 | "red" : "0xCC"
29 | }
30 | },
31 | "idiom" : "universal"
32 | }
33 | ],
34 | "info" : {
35 | "author" : "xcode",
36 | "version" : 1
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Color/onHoldBackground.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.898",
9 | "green" : "0.898",
10 | "red" : "0.898"
11 | }
12 | },
13 | "idiom" : "universal"
14 | },
15 | {
16 | "appearances" : [
17 | {
18 | "appearance" : "luminosity",
19 | "value" : "dark"
20 | }
21 | ],
22 | "color" : {
23 | "color-space" : "srgb",
24 | "components" : {
25 | "alpha" : "1.000",
26 | "blue" : "0.000",
27 | "green" : "0.000",
28 | "red" : "0.000"
29 | }
30 | },
31 | "idiom" : "universal"
32 | }
33 | ],
34 | "info" : {
35 | "author" : "xcode",
36 | "version" : 1
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Color/overlayColor.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "0.800",
8 | "blue" : "0xE0",
9 | "green" : "0xE0",
10 | "red" : "0xE0"
11 | }
12 | },
13 | "idiom" : "universal"
14 | },
15 | {
16 | "appearances" : [
17 | {
18 | "appearance" : "luminosity",
19 | "value" : "dark"
20 | }
21 | ],
22 | "color" : {
23 | "color-space" : "srgb",
24 | "components" : {
25 | "alpha" : "0.800",
26 | "blue" : "0x13",
27 | "green" : "0x13",
28 | "red" : "0x13"
29 | }
30 | },
31 | "idiom" : "universal"
32 | }
33 | ],
34 | "info" : {
35 | "author" : "xcode",
36 | "version" : 1
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | },
6 | "properties" : {
7 | "compression-type" : "automatic"
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | },
6 | "properties" : {
7 | "provides-namespace" : true
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_arrow_maximize_20_filled.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_arrow_maximize_20_filled.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true,
14 | "template-rendering-intent" : "template"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_arrow_maximize_20_filled.imageset/ic_fluent_arrow_maximize_20_filled.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_arrow_minimize_20_filled.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_arrow_minimize_20_filled.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true,
14 | "template-rendering-intent" : "template"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_call_end_24_filled.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_call_end_24_filled.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true,
14 | "template-rendering-intent" : "template"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_call_end_24_filled.imageset/ic_fluent_call_end_24_filled.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_call_end_24_regular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_call_end_24_regular.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true,
14 | "template-rendering-intent" : "template"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_camera_switch_24_regular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_camera_switch_24_regular.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true,
14 | "template-rendering-intent" : "template"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_checkmark_24_regular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_checkmark_24_regular.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true,
14 | "template-rendering-intent" : "template"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_checkmark_24_regular.imageset/ic_fluent_checkmark_24_regular.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_chevron_right_20_regular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_chevron_right_20_regular.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true,
14 | "template-rendering-intent" : "template"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_chevron_right_20_regular.imageset/ic_fluent_chevron_right_20_regular.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_clock_24_filled.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_clock_24_filled.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true,
14 | "template-rendering-intent" : "template"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_clock_24_filled.imageset/ic_fluent_clock_24_filled.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_closed_caption_24_regular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_closed_caption_24_regular.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true,
14 | "template-rendering-intent" : "template"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_closed_caption_off_20_regular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_closed_caption_off_20_regular.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true,
14 | "template-rendering-intent" : "template"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_dismiss_16_regular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_dismiss_16_regular.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true,
14 | "template-rendering-intent" : "template"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_dismiss_16_regular.imageset/ic_fluent_dismiss_16_regular.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_error_circle_16_regular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_error_circle_16_regular.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_error_circle_16_regular.imageset/ic_fluent_error_circle_16_regular.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_guest_add_20_filled.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_guest_add_20_filled.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_local_language_24_regular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_local_language_24_regular.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_meet_now_20_regular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_meet_now_20_regular.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true,
14 | "template-rendering-intent" : "template"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_mic_24_filled.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_mic_24_filled.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true,
14 | "template-rendering-intent" : "template"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_mic_24_filled.imageset/ic_fluent_mic_24_filled.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_mic_24_regular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_mic_24_regular.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true,
14 | "template-rendering-intent" : "template"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_mic_24_regular.imageset/ic_fluent_mic_24_regular.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_mic_off_24_filled.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_mic_off_24_filled.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true,
14 | "template-rendering-intent" : "template"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_mic_off_24_regular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_mic_off_24_regular.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true,
14 | "template-rendering-intent" : "template"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_mic_prohibited_24_regular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images": [
3 | {
4 | "filename": "ic_fluent_mic_prohibited_24_regular.svg",
5 | "idiom": "universal"
6 | }
7 | ],
8 | "info": {
9 | "author": "xcode",
10 | "version": 1
11 | },
12 | "properties": {
13 | "template-rendering-intent": "template"
14 | }
15 | }
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_more_horizontal_24_filled.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_more_horizontal_24_filled.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true,
14 | "template-rendering-intent" : "template"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_more_horizontal_24_filled.imageset/ic_fluent_more_horizontal_24_filled.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_people_24_regular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_people_24_regular.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true,
14 | "template-rendering-intent" : "template"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_person_delete_24_regular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_person_delete_24_regular.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_person_feedback_24_regular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "Size=24, Theme=Regular.pdf",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_person_prohibited_24_regular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_person_prohibited_24_regular.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_person_voice_24_regular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_person_voice_24_regular.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_share_ios_24_regular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_share_ios_24_regular.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true,
14 | "template-rendering-intent" : "template"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_slide_text_call_20_regular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_slide_text_call_20_regular.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_speaker_2_24_filled.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_speaker_2_24_filled.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true,
14 | "template-rendering-intent" : "template"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_speaker_2_24_regular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_speaker_2_24_regular.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true,
14 | "template-rendering-intent" : "template"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_speaker_bluetooth_24_regular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_speaker_bluetooth_24_regular.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true,
14 | "template-rendering-intent" : "template"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_speaker_mute_24_regular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images": [
3 | {
4 | "filename": "ic_fluent_speaker_mute_24_regular.svg",
5 | "idiom": "universal"
6 | }
7 | ],
8 | "info": {
9 | "author": "xcode",
10 | "version": 1
11 | },
12 | "properties": {
13 | "template-rendering-intent": "template"
14 | }
15 | }
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_video_24_filled.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_video_24_filled.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true,
14 | "template-rendering-intent" : "template"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_video_24_filled.imageset/ic_fluent_video_24_filled.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_video_off_24_filled.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_video_off_24_filled.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true,
14 | "template-rendering-intent" : "template"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_video_off_24_filled.imageset/ic_fluent_video_off_24_filled.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_video_off_24_regular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images": [
3 | {
4 | "filename": "ic_fluent_video_off_24_regular.svg",
5 | "idiom": "universal"
6 | }
7 | ],
8 | "info": {
9 | "author": "xcode",
10 | "version": 1
11 | },
12 | "properties": {
13 | "template-rendering-intent": "template"
14 | }
15 | }
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_warning_24_filled.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_warning_24_filled.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true,
14 | "template-rendering-intent" : "template"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_fluent_wifi_warning_24_filled.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images": [
3 | {
4 | "filename": "ic_fluent_wifi_warning_24_filled.svg",
5 | "idiom": "universal"
6 | }
7 | ],
8 | "info": {
9 | "author": "xcode",
10 | "version": 1
11 | },
12 | "properties": {
13 | "template-rendering-intent": "template"
14 | }
15 | }
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_ios_arrow_left_24.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_ios_arrow_ltr_24_regular.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true,
14 | "template-rendering-intent" : "template"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Assets.xcassets/Icon/ic_ios_arrow_left_24.imageset/ic_fluent_ios_arrow_ltr_24_regular.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/CallCompositeOptions/CallCompositeAudioVideoMode.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | /// Represents the mode of audio and video in a call.
9 | public enum CallCompositeAudioVideoMode {
10 | /// - `audioAndVideo`: Both audio and video are enabled.
11 | case audioAndVideo
12 | /// - `audioOnly`: Only audio is enabled, no video, except for "shared content".
13 | case audioOnly
14 | /// `rawValue` provides a `String` representation of the mode:
15 | /// - For `.audioAndVideo`, it returns "audioAndVideo".
16 | /// - For `.audioOnly`, it returns "audioOnly".
17 | var rawValue: String {
18 | switch self {
19 | case .audioAndVideo:
20 | return "audioAndVideo"
21 | case .audioOnly:
22 | return "audioOnly"
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/CallCompositeOptions/CallError.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | /// Errors for call actions.
9 | public enum CallError: String, Error {
10 | /// Call is not in progress.
11 | case callIsNotInProgress
12 | }
13 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/CallCompositeOptions/CallHistoryRecord.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | /// Call history.
9 | public struct CallHistoryRecord {
10 |
11 | /// Device-generated timestamp for the call start.
12 | public let callStartedOn: Date
13 |
14 | /// Call Ids associated with particular call started on callStartedOn date.
15 | public let callIds: [String]
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/CallCompositeOptions/CallKitRemoteInfo.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import CallKit
7 |
8 | /// CXHandle and Display Name for the Remote participant while using callKit.
9 | public struct CallKitRemoteInfo {
10 | /// Display name of the remote participant
11 | public let displayName: String
12 |
13 | /// CXHandle of the remote participant, for call history
14 | public let handle: CXHandle
15 |
16 | /// Initialize a `CallKitRemoteInfo`
17 | /// - Parameters:
18 | /// - displayName: Display name of the remote participant
19 | /// - handle: CXHandle of the remote participant, for call history
20 | public init(displayName: String, handle: CXHandle) {
21 | self.displayName = displayName
22 | self.handle = handle
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/CallCompositeOptions/Caller.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | import AzureCommunicationCommon
8 |
9 | /// Call composite caller.
10 | public struct Caller {
11 | /// Caller display name.
12 | public let displayName: String
13 |
14 | /// Caller CommunicationIdentifier.
15 | public let identifier: CommunicationIdentifier
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/CallCompositeOptions/CaptionOptions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 | import Foundation
6 |
7 | /// Configuration options for captions in a UI component.
8 | public struct CaptionsOptions {
9 | let captionsOn: Bool
10 | let spokenLanguage: String?
11 |
12 | public init(captionsOn: Bool = false, spokenLanguage: String? = nil) {
13 | self.spokenLanguage = spokenLanguage
14 | self.captionsOn = captionsOn
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/CallCompositeOptions/CommunicationTokenCredentialError.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | /// Errors for CommunicationTokenCredential.
9 | public enum CommunicationTokenCredentialError: String, Error {
10 | /// Credentials not set.
11 | case communicationTokenCredentialNotSet
12 | }
13 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/CallCompositeOptions/IncomingCall.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | import AzureCommunicationCommon
8 |
9 | /// Incoming call..
10 | public struct IncomingCall {
11 | /// Call id.
12 | public let callId: String
13 | /// Caller display name.
14 | public let callerDisplayName: String
15 | /// Caller CommunicationIdentifier.
16 | public let callerIdentifier: CommunicationIdentifier
17 | }
18 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/CallCompositeOptions/IncomingCallCancelled.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | /// Incoming call cancelled..
9 | public struct IncomingCallCancelled {
10 | /// Call id.
11 | public let callId: String
12 | /// call cancelled code
13 | public let code: Int
14 | /// call cancelled sub code
15 | public let subCode: Int
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/CallCompositeOptions/IncomingCallError.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | /// An error that occurs on incoming call accept/decline.
9 | public enum IncomingCallError: String, Error {
10 | /// call id not found.
11 | case callIdNotFound
12 | }
13 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/CallCompositeOptions/SetParticipantViewDataError.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | /// An error that occurs during setting participants view data.
9 | public enum SetParticipantViewDataError: String, Error {
10 | /// Error when the remote participant is not in the call.
11 | case participantNotInCall
12 | }
13 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE)
17 | CFBundleShortVersionString
18 | $(MARKETING_VERSION)
19 | CFBundleVersion
20 | $(CURRENT_PROJECT_VERSION)
21 | UILibrarySemVersion
22 | 1.14.1
23 |
24 |
25 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Model/CallInfoModel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | struct CallInfoModel {
7 | let status: CallingStatus
8 | let internalError: CallCompositeInternalError?
9 | let callEndReasonCode: Int?
10 | let callEndReasonSubCode: Int?
11 | }
12 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Model/CapabilitiesChangedReason.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | import AzureCommunicationCalling
8 |
9 | enum CapabilitiesChangedReason: String, CaseIterable, Equatable {
10 | case roleChanged
11 | case userPolicyChanged
12 | case meetingDetailsChanged
13 | }
14 |
15 | extension AzureCommunicationCalling.CapabilitiesChangedReason {
16 | func toCapabilitiesChangedReason() -> CapabilitiesChangedReason {
17 | switch self {
18 | case .roleChanged:
19 | return .roleChanged
20 | case .userPolicyChanged:
21 | return .userPolicyChanged
22 | case .meetingDetailsChanged:
23 | return .meetingDetailsChanged
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Model/ParticipantInfoModel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | enum ParticipantStatus: Int {
9 | case idle
10 | case earlyMedia
11 | case connecting
12 | case connected
13 | case hold
14 | case inLobby
15 | case disconnected
16 | case ringing
17 | }
18 |
19 | struct ParticipantInfoModel: Hashable, Equatable {
20 | let displayName: String
21 | let isSpeaking: Bool
22 | var isTypingRtt: Bool
23 | let isMuted: Bool
24 |
25 | let isRemoteUser: Bool
26 | let userIdentifier: String
27 | let status: ParticipantStatus
28 |
29 | let screenShareVideoStreamModel: VideoStreamInfoModel?
30 | let cameraVideoStreamModel: VideoStreamInfoModel?
31 | }
32 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Model/VideoStreamInfoModel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | struct VideoStreamInfoModel: Hashable, Equatable {
9 | enum MediaStreamType {
10 | case cameraVideo
11 | case screenSharing
12 | }
13 | let videoStreamIdentifier: String
14 | let mediaStreamType: MediaStreamType
15 | }
16 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Presentation/FluentUI/Icon.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import SwiftUI
7 |
8 | struct Icon: View {
9 | var name: CompositeIcon?
10 | var uiImage: UIImage?
11 | var size: CGFloat
12 |
13 | var body: some View {
14 | if let uiImage = uiImage {
15 | Image(uiImage: uiImage)
16 | .resizable()
17 | .frame(width: size, height: size, alignment: .center)
18 | }
19 | if let name = name {
20 | StyleProvider.icon.getImage(for: name)
21 | .resizable()
22 | .frame(width: size, height: size, alignment: .center)
23 | }
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Presentation/FluentUI/Wrapper/CompositeAvatar.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import SwiftUI
7 | import FluentUI
8 | import UIKit
9 |
10 | struct CompositeAvatar: View {
11 | @Binding var displayName: String?
12 | @Binding var avatarImage: UIImage?
13 | var isSpeaking: Bool
14 | var avatarSize: MSFAvatarSize = .size72
15 | var body: some View {
16 | let isNameEmpty = displayName == nil
17 | || displayName?.trimmingCharacters(in: .whitespaces).isEmpty == true
18 | return Avatar(style: isNameEmpty ? .outlined : .default,
19 | size: avatarSize,
20 | image: avatarImage,
21 | primaryText: displayName)
22 | .ringColor(StyleProvider.color.primaryColor)
23 | .isRingVisible(isSpeaking)
24 | .accessibilityHidden(true)
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Presentation/FluentUI/Wrapper/DrawerViewControllerProtocol.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import UIKit
7 |
8 | protocol DrawerViewControllerProtocol {
9 | func resetOrientation()
10 | }
11 |
12 | extension DrawerViewControllerProtocol where Self: UIViewController {
13 | func resetOrientation() {
14 | if UIDevice.current.userInterfaceIdiom == .phone {
15 | UIDevice.current.setValue(UIDevice.current.orientation.rawValue, forKey: "orientation")
16 | UIViewController.attemptRotationToDeviceOrientation()
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Presentation/FluentUI/Wrapper/SourceViewSpace.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import SwiftUI
7 |
8 | struct SourceViewSpace: View {
9 | let sourceView: UIView
10 |
11 | var body: some View {
12 | GeometryReader { geometry -> Color in
13 | sourceView.translatesAutoresizingMaskIntoConstraints = false
14 | sourceView.frame = geometry.frame(in: CoordinateSpace.global)
15 | sourceView.bounds = geometry.frame(in: CoordinateSpace.local)
16 | return .clear
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Presentation/Manager/CapabilitiesManager.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | internal class CapabilitiesManager {
9 | private var callType: CompositeCallType
10 |
11 | init(callType: CompositeCallType) {
12 | self.callType = callType
13 | }
14 |
15 | func hasCapability(capabilities: Set,
16 | capability: ParticipantCapabilityType) -> Bool {
17 | switch callType {
18 | case .groupCall, .oneToNOutgoing, .oneToOneIncoming:
19 | return true
20 | case .teamsMeeting, .roomsCall:
21 | return capabilities.contains(capability)
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Presentation/Style/LocalizationProvider.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | import SwiftUI
8 |
9 | protocol LocalizationProviderProtocol: BaseLocalizationProviderProtocol {
10 | var isRightToLeft: Bool { get }
11 | func apply(localeConfig: LocalizationOptions)
12 | func getLocalizedString(_ key: LocalizationKey) -> String
13 | func getLocalizedString(_ key: LocalizationKey, _ args: CVarArg...) -> String
14 | }
15 |
16 | class LocalizationProvider: BaseLocalizationProvider, LocalizationProviderProtocol {
17 | init(logger: Logger) {
18 | super.init(logger: logger, bundleClass: CallComposite.self)
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Presentation/Style/OrientationProvider.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | import UIKit
8 |
9 | class OrientationProvider {
10 | func orientationMask(for options: OrientationOptions?) -> UIInterfaceOrientationMask? {
11 | switch options?.requestString {
12 | case "portrait":
13 | return .portrait
14 | case "landscape":
15 | return .landscape
16 | case "allButUpsideDown":
17 | return .allButUpsideDown
18 | case "landscapeRight":
19 | return .landscapeRight
20 | case "landscapeLeft":
21 | return .landscapeLeft
22 | default:
23 | return nil
24 | }
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Presentation/Style/StyleProvider.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | struct StyleProvider {
9 | static var color = ColorThemeProvider(themeOptions: nil)
10 | static var icon = IconProvider()
11 | // static var font = FontProvider()
12 | }
13 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Presentation/SwiftUI/Calling/CallingViewComponent/CaptionsRtt/CaptionsLanguageListView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import SwiftUI
7 | import FluentUI
8 | import UIKit
9 |
10 | internal struct CaptionsLanguageListView: View {
11 | @ObservedObject var viewModel: CaptionsLanguageListViewModel
12 | let avatarManager: AvatarViewManagerProtocol
13 |
14 | init(viewModel: CaptionsLanguageListViewModel,
15 | avatarManager: AvatarViewManagerProtocol) {
16 | self.viewModel = viewModel
17 | self.avatarManager = avatarManager
18 | }
19 |
20 | var body: some View {
21 | DrawerListView(sections: [DrawerListSection(header: nil, items: viewModel.items)],
22 | avatarManager: avatarManager)
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Presentation/SwiftUI/Calling/CallingViewComponent/CaptionsRtt/CaptionsRttListView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | import SwiftUI
8 | import FluentUI
9 |
10 | internal struct CaptionsRttListView: View {
11 | @ObservedObject var viewModel: CaptionsRttListViewModel
12 | let avatarManager: AvatarViewManagerProtocol
13 |
14 | init(viewModel: CaptionsRttListViewModel,
15 | avatarManager: AvatarViewManagerProtocol) {
16 | self.viewModel = viewModel
17 | self.avatarManager = avatarManager
18 | }
19 |
20 | var body: some View {
21 | DrawerListView(sections: [DrawerListSection(header: nil, items: viewModel.items)],
22 | avatarManager: avatarManager)
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Presentation/SwiftUI/Calling/CallingViewComponent/Overlay/OverlayViewModelProtocol.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | import SwiftUI
8 |
9 | protocol OverlayViewModelProtocol {
10 | var title: String { get }
11 | var subtitle: String? { get }
12 | var background: UIColor { get }
13 | var actionButtonViewModel: PrimaryButtonViewModel? { get }
14 | var errorInfoViewModel: ErrorInfoViewModel? { get }
15 | var isDisplayed: Bool { get }
16 | }
17 |
18 | extension OverlayViewModelProtocol {
19 | var subtitle: String? { return nil }
20 | var background: UIColor { return StyleProvider.color.overlay }
21 | var actionButtonViewModel: PrimaryButtonViewModel? { return nil }
22 | var errorInfoViewModel: ErrorInfoViewModel? { return nil }
23 | }
24 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Presentation/SwiftUI/Setup/SetupViewComponent/JoiningCallActivityView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import SwiftUI
7 | import FluentUI
8 |
9 | struct JoiningCallActivityView: View {
10 | let viewModel: JoiningCallActivityViewModel
11 | let containerHeight: CGFloat = 52
12 |
13 | var body: some View {
14 | HStack {
15 | Spacer()
16 | ActivityIndicator(size: .small)
17 | .isAnimating(true)
18 | Text(viewModel.title)
19 | .font(Fonts.subhead.font)
20 | .foregroundColor(Color(StyleProvider.color.onSurfaceColor))
21 | Spacer()
22 | }.frame(height: containerHeight)
23 | }
24 |
25 | }
26 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Presentation/SwiftUI/Setup/SetupViewComponent/JoiningCallActivityViewModel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | struct JoiningCallActivityViewModel {
9 | var title: String
10 | }
11 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Presentation/SwiftUI/Utilities/AppPhaseKey.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | import SwiftUI
8 |
9 | struct AppPhaseKey: EnvironmentKey {
10 | static let defaultValue: AppStatus = .foreground
11 | }
12 |
13 | extension EnvironmentValues {
14 | var appPhase: AppStatus {
15 | get { self[AppPhaseKey.self] }
16 | set { self[AppPhaseKey.self] = newValue }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Presentation/SwiftUI/Utilities/FontExtension.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import SwiftUI
7 | import UIKit
8 | import FluentUI
9 |
10 | extension UIFont {
11 | var font: Font {
12 | return Font(self as CTFont)
13 | }
14 | }
15 |
16 | extension Fonts {
17 | static var button1Accessibility: UIFont { return Fonts.button1.withSize(26) }
18 | static var button2Accessibility: UIFont { return Fonts.button2.withSize(20) }
19 | }
20 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Presentation/SwiftUI/ViewComponents/AudioSelection/AudioDeviceListView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | import SwiftUI
8 | import FluentUI
9 |
10 | internal struct AudioDevicesListView: View {
11 | @ObservedObject var viewModel: AudioDevicesListViewModel
12 | let avatarManager: AvatarViewManagerProtocol
13 |
14 | init(viewModel: AudioDevicesListViewModel,
15 | avatarManager: AvatarViewManagerProtocol) {
16 | self.viewModel = viewModel
17 | self.avatarManager = avatarManager
18 | }
19 |
20 | var body: some View {
21 | DrawerListView(sections: [DrawerListSection(header: nil, items: viewModel.audioDevicesList)],
22 | avatarManager: avatarManager)
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Presentation/SwiftUI/ViewComponents/LeaveCallConfirmation/LeaveCallConfirmationView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | import SwiftUI
8 | import FluentUI
9 |
10 | internal struct LeaveCallConfirmationView: View {
11 | @ObservedObject var viewModel: LeaveCallConfirmationViewModel
12 | let avatarManager: AvatarViewManagerProtocol
13 | init(viewModel: LeaveCallConfirmationViewModel,
14 | avatarManager: AvatarViewManagerProtocol) {
15 | self.viewModel = viewModel
16 | self.avatarManager = avatarManager
17 | }
18 |
19 | var body: some View {
20 | DrawerListView(sections: [DrawerListSection(header: nil, items: viewModel.options)],
21 | avatarManager: avatarManager)
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Presentation/SwiftUI/ViewComponents/MoreCallOptions/MoreCallOptionsListView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | import SwiftUI
8 | import FluentUI
9 |
10 | internal struct MoreCallOptionsListView: View {
11 | @ObservedObject var viewModel: MoreCallOptionsListViewModel
12 | let avatarManager: AvatarViewManagerProtocol
13 | init(viewModel: MoreCallOptionsListViewModel, avatarManager: AvatarViewManagerProtocol) {
14 | self.viewModel = viewModel
15 | self.avatarManager = avatarManager
16 | }
17 |
18 | var body: some View {
19 | DrawerListView(sections: [DrawerListSection(header: nil, items: viewModel.items)],
20 | avatarManager: avatarManager)
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Presentation/SwiftUI/ViewComponents/ParticipantActions/ParticipantMenuView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | import SwiftUI
8 | import FluentUI
9 |
10 | internal struct ParticipantMenuView: View {
11 | @ObservedObject var viewModel: ParticipantMenuViewModel
12 | let avatarManager: AvatarViewManagerProtocol
13 |
14 | init(viewModel: ParticipantMenuViewModel,
15 | avatarManager: AvatarViewManagerProtocol) {
16 | self.viewModel = viewModel
17 | self.avatarManager = avatarManager
18 | }
19 |
20 | var body: some View {
21 | DrawerListView(sections: [DrawerListSection(header: nil, items: viewModel.items)],
22 | avatarManager: avatarManager)
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Redux/Action/AudioSessionAction.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | enum AudioSessionAction: Equatable {
9 | case audioInterrupted
10 | case audioInterruptEnded
11 | case audioEngaged
12 | }
13 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Redux/Action/CallScreenInfoHeaderAction.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | enum CallScreenInfoHeaderAction: Equatable {
9 | case updateTitle(title: String?)
10 | case updateSubtitle(subtitle: String?)
11 | }
12 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Redux/Action/CaptionsAction.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | enum CaptionsAction: Equatable {
9 | case turnOnCaptions(language: String)
10 | case started
11 | case turnOffCaptions
12 | case stopped
13 | case setSpokenLanguageRequested(language: String)
14 | case spokenLanguageChanged(language: String)
15 | case setCaptionLanguageRequested(language: String)
16 | case captionLanguageChanged(language: String)
17 | case typeChanged(type: CallCompositeCaptionsType)
18 | case isTranslationSupportedChanged(isSupported: Bool)
19 | case error(errors: CallCompositeCaptionsErrors)
20 | case supportedSpokenLanguagesChanged(languages: [String])
21 | case supportedCaptionLanguagesChanged(languages: [String])
22 | }
23 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Redux/Action/DiagnosticsAction.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | enum DiagnosticsAction: Equatable {
7 | case networkQuality(diagnostic: NetworkQualityDiagnosticModel)
8 | case network(diagnostic: NetworkDiagnosticModel)
9 | case media(diagnostic: MediaDiagnosticModel)
10 | case dismissNetworkQuality(diagnostic: NetworkQualityCallDiagnostic)
11 | case dismissNetwork(diagnostic: NetworkCallDiagnostic)
12 | case dismissMedia(diagnostic: MediaCallDiagnostic)
13 | }
14 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Redux/Action/LifecycleAction.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | enum LifecycleAction: Equatable {
9 | case foregroundEntered
10 | case backgroundEntered
11 | case willTerminate
12 | }
13 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Redux/Action/RemoteParticipantsAction.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | enum RemoteParticipantsAction: Equatable {
9 | case dominantSpeakersUpdated(speakers: [String])
10 | case participantListUpdated(participants: [ParticipantInfoModel])
11 | case admitAll
12 | case declineAll
13 | case admit(participantId: String)
14 | case decline(participantId: String)
15 | case lobbyError(errorCode: LobbyErrorCode?)
16 | case remove(participantId: String)
17 | case removeParticipantError
18 | case setTotalParticipantCount(participantCount: Int)
19 | }
20 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Redux/Action/RttAction.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | enum RttAction: Equatable {
9 | case turnOnRtt
10 | case sendRtt(message: String, isFinal: Bool)
11 | case updateMaximized(isMaximized: Bool)
12 | }
13 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Redux/Action/ToastNotificationAction.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | enum ToastNotificationAction: Equatable {
9 | case showNotification(kind: ToastNotificationKind)
10 | case dismissNotification
11 | }
12 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Redux/Action/VisibilityAction.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | enum VisibilityAction: Equatable {
9 | case hideRequested
10 | case hideEntered
11 | case pipModeRequested
12 | case pipModeEntered
13 | case showNormalEntered
14 | }
15 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Redux/Reducer/AudioSessionReducer.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | extension Reducer where State == AudioSessionState,
9 | Actions == AudioSessionAction {
10 | static var liveAudioSessionReducer: Self = Reducer { audioSessionState, action in
11 |
12 | var audioSessionStatus = audioSessionState.status
13 | switch action {
14 | case .audioEngaged,
15 | .audioInterruptEnded:
16 | audioSessionStatus = .active
17 | case .audioInterrupted:
18 | audioSessionStatus = .interrupted
19 | }
20 | return AudioSessionState(status: audioSessionStatus)
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Redux/Reducer/CallScreenInfoHeaderReducer.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | extension Reducer where State == CallScreenInfoHeaderState,
9 | Actions == CallScreenInfoHeaderAction {
10 | static var callScreenInfoHeaderReducer: Self = Reducer { currentState, action in
11 | var newState = currentState
12 | switch action {
13 | case .updateTitle(let title):
14 | newState = CallScreenInfoHeaderState(title: title,
15 | subtitle: currentState.subtitle)
16 | case .updateSubtitle(let subtitle):
17 | newState = CallScreenInfoHeaderState(title: currentState.title,
18 | subtitle: subtitle)
19 | }
20 | return newState
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Redux/Reducer/LifeCycleReducer.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | extension Reducer where State == LifeCycleState,
9 | Actions == LifecycleAction {
10 | static var liveLifecycleReducer: Self = Reducer { appLifeCycleCurrentState, action in
11 |
12 | var currentStatus = appLifeCycleCurrentState.currentStatus
13 | switch action {
14 | case .foregroundEntered:
15 | currentStatus = .foreground
16 | case .backgroundEntered:
17 | currentStatus = .background
18 | case .willTerminate:
19 | currentStatus = .willTerminate
20 | }
21 | return LifeCycleState(currentStatus: currentStatus)
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Redux/Reducer/PipReducer.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | extension Reducer where State == VisibilityState,
9 | Actions == VisibilityAction {
10 | static var visibilityReducer: Self = Reducer { currentState, action in
11 |
12 | var newStatus = currentState.currentStatus
13 | switch action {
14 | case .showNormalEntered:
15 | newStatus = .visible
16 | case .hideRequested:
17 | newStatus = .hideRequested
18 | case .pipModeRequested:
19 | newStatus = .pipModeRequested
20 | case .pipModeEntered:
21 | newStatus = .pipModeEntered
22 | case .hideEntered:
23 | newStatus = .hidden
24 | }
25 | return VisibilityState(currentStatus: newStatus)
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Redux/Reducer/RttReducer.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | extension Reducer where State == RttState, Actions == RttAction {
9 | static var rttReducer: Self = Reducer { currentState, action in
10 | var newState = currentState
11 | switch action {
12 | case .turnOnRtt:
13 | newState.isRttOn = true
14 | case .sendRtt(message: let message, isFinal: let isFinal):
15 | newState = currentState
16 | case .updateMaximized(isMaximized: let isMaximized):
17 | newState.isMaximized = isMaximized
18 | }
19 | return newState
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Redux/Reducer/ToastNotificationReducer.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | extension Reducer where State == ToastNotificationState,
9 | Actions == ToastNotificationAction {
10 | static var toastNotificationReducer: Self = Reducer { currentState, action in
11 | var newStatus = currentState.status
12 | switch action {
13 | case .showNotification(let kind):
14 | newStatus = kind
15 | case .dismissNotification:
16 | newStatus = nil
17 | }
18 | return ToastNotificationState(status: newStatus)
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Redux/State/AppLifeCycleState.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | enum AppStatus {
9 | case foreground
10 | case background
11 | case willTerminate
12 |
13 | var description: String {
14 | switch self {
15 | case .foreground:
16 | return "foreground"
17 | case .background:
18 | return "background"
19 | case .willTerminate:
20 | return "willTerminate"
21 | }
22 | }
23 | }
24 |
25 | struct LifeCycleState {
26 |
27 | let currentStatus: AppStatus
28 |
29 | init(currentStatus: AppStatus = .foreground) {
30 | self.currentStatus = currentStatus
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Redux/State/AudioSessionState.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | enum AudioSessionStatus {
9 | case active
10 | case interrupted
11 | }
12 |
13 | struct AudioSessionState {
14 |
15 | let status: AudioSessionStatus
16 |
17 | init(status: AudioSessionStatus = .active) {
18 | self.status = status
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Redux/State/CallDiagnosticsState.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | struct CallDiagnosticsState: Equatable {
7 |
8 | var networkDiagnostic: NetworkDiagnosticModel?
9 | var networkQualityDiagnostic: NetworkQualityDiagnosticModel?
10 | var mediaDiagnostic: MediaDiagnosticModel?
11 |
12 | init(networkDiagnostic: NetworkDiagnosticModel? = nil,
13 | networkQualityDiagnostic: NetworkQualityDiagnosticModel? = nil,
14 | mediaDiagnostic: MediaDiagnosticModel? = nil) {
15 | self.networkDiagnostic = networkDiagnostic
16 | self.networkQualityDiagnostic = networkQualityDiagnostic
17 | self.mediaDiagnostic = mediaDiagnostic
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Redux/State/CallScreenInfoHeaderState.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | struct CallScreenInfoHeaderState {
9 | let title: String?
10 | let subtitle: String?
11 | init(title: String? = nil, subtitle: String? = nil) {
12 | self.title = title
13 | self.subtitle = subtitle
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Redux/State/DefaultUserState.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | struct DefaultUserState {
9 | enum CameraState: Equatable {
10 | case on
11 | case off
12 | }
13 |
14 | enum AudioState: Equatable {
15 | case on
16 | case off
17 | }
18 |
19 | let cameraState: CameraState
20 | let audioState: AudioState
21 |
22 | init(cameraState: CameraState = .off,
23 | audioState: AudioState = .off) {
24 | self.cameraState = cameraState
25 | self.audioState = audioState
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Redux/State/ErrorState.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | enum ErrorCategory {
9 | case fatal
10 | case callState
11 | case none
12 | }
13 |
14 | struct ErrorState: Equatable {
15 | // errorType would be nil for no error status
16 | let internalError: CallCompositeInternalError?
17 | let error: Error?
18 | let errorCategory: ErrorCategory
19 |
20 | init(internalError: CallCompositeInternalError? = nil,
21 | error: Error? = nil,
22 | errorCategory: ErrorCategory = .none) {
23 | self.internalError = internalError
24 | self.error = error
25 | self.errorCategory = errorCategory
26 | }
27 |
28 | static func == (lhs: ErrorState, rhs: ErrorState) -> Bool {
29 | return (lhs.internalError == rhs.internalError)
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Redux/State/PermissionState.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | enum AppPermission {
9 | case audioPermission
10 | case cameraPermission
11 |
12 | enum Status: String, Equatable {
13 | case unknown
14 | case notAsked
15 | case requesting
16 | case granted
17 | case denied
18 | }
19 | }
20 |
21 | struct PermissionState {
22 |
23 | let audioPermission: AppPermission.Status
24 | let cameraPermission: AppPermission.Status
25 |
26 | init(audioPermission: AppPermission.Status = .unknown, cameraPermission: AppPermission.Status = .unknown) {
27 | self.audioPermission = audioPermission
28 | self.cameraPermission = cameraPermission
29 | }
30 |
31 | }
32 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Redux/State/RttState.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 | import Foundation
6 |
7 | struct RttState: Equatable {
8 | var isRttOn: Bool
9 | var isMaximized: Bool
10 |
11 | init(isEnabled: Bool = false, isMaximized: Bool = false) {
12 | self.isRttOn = isEnabled
13 | self.isMaximized = isMaximized
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Redux/State/ToastNotificationState.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | enum ToastNotificationKind {
9 | case networkReceiveQuality
10 | case networkSendQuality
11 | case networkReconnectionQuality
12 | case networkUnavailable
13 | case networkRelaysUnreachable
14 | case speakingWhileMicrophoneIsMuted
15 | case cameraStartFailed
16 | case cameraStartTimedOut
17 | case someFeaturesLost
18 | case someFeaturesGained
19 | }
20 |
21 | struct ToastNotificationState: Equatable {
22 | let status: ToastNotificationKind?
23 |
24 | init(status: ToastNotificationKind? = nil) {
25 | self.status = status
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Service/Calling/AzureCommunicationCalling/ACSCameraFacingExtension.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import AzureCommunicationCalling
7 | import Foundation
8 |
9 | extension CameraFacing {
10 | func toCameraDevice() -> CameraDevice {
11 | switch self {
12 | case .front:
13 | return .front
14 | case .back:
15 | return .back
16 | default:
17 | return .front
18 | }
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Service/Calling/AzureCommunicationCalling/ACSDiagnosticQualityExtension.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import AzureCommunicationCalling
7 |
8 | extension AzureCommunicationCalling.DiagnosticQuality {
9 | func toCallCompositeDiagnosticQuality() -> CallDiagnosticQuality {
10 | switch self {
11 | case .unknown:
12 | return .unknown
13 | case .good:
14 | return .good
15 | case .poor:
16 | return .poor
17 | case .bad:
18 | return .bad
19 | @unknown default:
20 | return .unknown
21 | }
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Service/Calling/AzureCommunicationCalling/ACSParticipantStateExtension.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import AzureCommunicationCalling
7 |
8 | extension ParticipantState {
9 | func toCompositeParticipantStatus() -> ParticipantStatus {
10 | switch self {
11 | case .idle:
12 | return .idle
13 | case .earlyMedia:
14 | return .earlyMedia
15 | case .connecting:
16 | return .connecting
17 | case .connected:
18 | return .connected
19 | case .hold:
20 | return .hold
21 | case .inLobby:
22 | return .inLobby
23 | case .disconnected:
24 | return .disconnected
25 | case .ringing:
26 | return .ringing
27 | default:
28 | return .idle
29 | }
30 | }
31 | }
32 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Service/Calling/AzureCommunicationCalling/LocalVideoStreamExtension.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import AzureCommunicationCalling
7 | import Foundation
8 |
9 | extension CompositeLocalVideoStream {
10 | static func nativeAccMediaStreamType(type: CompositeMediaStreamType)
11 | -> AzureCommunicationCalling.VideoStreamSourceType {
12 | switch type {
13 | case .cameraVideo:
14 | return AzureCommunicationCalling.VideoStreamSourceType .video
15 | case .screenSharing:
16 | return AzureCommunicationCalling.VideoStreamSourceType .screenSharing
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Utilities/ColorExtension.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | import UIKit
8 |
9 | enum CompositeColor: String {
10 | case hangup = "hangupColor"
11 | case overlay = "overlayColor"
12 | case onHoldBackground = "onHoldBackground"
13 | }
14 |
15 | extension UIColor {
16 | static func compositeColor(_ name: CompositeColor) -> UIColor {
17 | return getAssetsColor(named: name.rawValue)
18 | }
19 |
20 | private static func getAssetsColor(named: String) -> UIColor {
21 | if let assetsColor = UIColor(named: "Color/" + named,
22 | in: Bundle(for: CallComposite.self),
23 | compatibleWith: nil) {
24 | return assetsColor
25 | } else {
26 | preconditionFailure("invalid asset color")
27 | }
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Utilities/NotificationCenterName.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | enum NotificationCenterName: String {
9 | case drawerViewDidDisappear = "DrawerViewDidDisappear" // Used to focus back in controlbar more button
10 | }
11 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Sources/Utilities/ThemeColor.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | import UIKit
8 | import FluentUI
9 |
10 | class ThemeColor: ThemeOptions {
11 | var colorSchemeOverride: UIUserInterfaceStyle {
12 | return .unspecified
13 | }
14 | var primaryColor: UIColor {
15 | return Colors.Palette.communicationBlue.color
16 | }
17 | var primaryColorTint10: UIColor {
18 | return Colors.Palette.communicationBlueTint10.color
19 | }
20 | var primaryColorTint20: UIColor {
21 | return Colors.Palette.communicationBlueTint20.color
22 | }
23 | var primaryColorTint30: UIColor {
24 | return Colors.Palette.communicationBlueTint30.color
25 | }
26 | /* */
27 | var foregroundOnPrimaryColor: UIColor {
28 | return UIColor.init(dynamicColor: Colors.surfacePrimary.dynamicColor!)
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Tests/.swiftlint.yml:
--------------------------------------------------------------------------------
1 | disabled_rules:
2 | - line_length
3 | - file_length
4 | - type_body_length
5 |
6 |
7 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Tests/CallCompositeOptions/SetupScreenOptionsTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | import XCTest
8 | import AzureCommunicationCommon
9 | import AzureCommunicationCalling
10 | @testable import AzureCommunicationUICalling
11 |
12 | class SetupScreenOptionsTests: XCTestCase {
13 | func test_setupscreenoptions_default_controlsEbabled() {
14 | let setupScreenOptions = SetupScreenOptions()
15 |
16 | XCTAssertTrue(setupScreenOptions.cameraButtonEnabled)
17 | XCTAssertTrue(setupScreenOptions.microphoneButtonEnabled)
18 | }
19 |
20 | func test_setupscreenoptions_disabled() {
21 | let setupScreenOptions = SetupScreenOptions(cameraButtonEnabled: false, microphoneButtonEnabled: false)
22 |
23 | XCTAssertFalse(setupScreenOptions.cameraButtonEnabled)
24 | XCTAssertFalse(setupScreenOptions.microphoneButtonEnabled)
25 | }}
26 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Tests/CallHistoryRepositoryMocking.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | @testable import AzureCommunicationUICalling
8 |
9 | class CallHistoryRepositoryMocking: CallHistoryRepository {
10 | var insertCallCount: Int = 0
11 |
12 | init(userDefaults: UserDefaults) {
13 | super.init(logger: LoggerMocking(),
14 | userDefaults: userDefaults)
15 | }
16 |
17 | override func insert(callStartedOn: Date, callId: String) async -> Error? {
18 | insertCallCount += 1
19 | return nil
20 | }
21 |
22 | func insertWasCalled() -> Bool {
23 | return insertCallCount > 0
24 | }
25 |
26 | override func getAll() -> [AzureCommunicationUICalling.CallHistoryRecord] {
27 | return []
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Tests/CallHistoryServiceMocking.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | @testable import AzureCommunicationUICalling
8 |
9 | class CallHistoryServiceMocking: CallHistoryService {
10 | var recordCallHistoryCallCount: Int = 0
11 |
12 | override func recordCallHistory(callStartedOn: Date, callId: String) {
13 | recordCallHistoryCallCount += 1
14 | }
15 |
16 | func recordCallHistoryWasCalled() -> Bool {
17 | return recordCallHistoryCallCount > 0
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Tests/ErrorMocking.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | enum ErrorMocking: Error {
9 | case mockError
10 | }
11 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Tests/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE)
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 |
22 |
23 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Tests/Mocking/AvatarViewManagerMocking.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | @testable import AzureCommunicationUICalling
8 |
9 | class AvatarViewManagerMocking: AvatarViewManager {
10 | var updateStorage: (([String]) -> Void)?
11 |
12 | override func updateStorage(with removedParticipantsIds: [String]) {
13 | updateStorage?(removedParticipantsIds)
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Tests/Mocking/DebugInfoManagerMocking.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | @testable import AzureCommunicationUICalling
8 |
9 | class DebugInfoManagerMocking: DebugInfoManagerProtocol {
10 | var debugInfo: DebugInfo?
11 |
12 | func getDebugInfo() -> DebugInfo {
13 | return debugInfo ?? DebugInfo(
14 | callHistoryRecords: [],
15 | callingUIVersion: "Mock",
16 | logFiles: [])
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Tests/Mocking/LoggerMocking.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | @testable import AzureCommunicationUICalling
8 |
9 | class LoggerMocking: Logger {
10 | var logCallCount: Int = 0
11 |
12 | func logWasCalled() -> Bool {
13 | return logCallCount > 0
14 | }
15 |
16 | func debug(_: @autoclosure @escaping () -> String?) {
17 | logCallCount += 1
18 |
19 | }
20 |
21 | func info(_: @autoclosure @escaping () -> String?) {
22 | logCallCount += 1
23 |
24 | }
25 |
26 | func warning(_: @autoclosure @escaping () -> String?) {
27 | logCallCount += 1
28 |
29 | }
30 |
31 | func error(_: @autoclosure @escaping () -> String?) {
32 | logCallCount += 1
33 |
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Tests/Mocking/MiddlewareMocking.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | @testable import AzureCommunicationUICalling
8 |
9 | extension Middleware where State == AppState {
10 | static func mock(
11 | applyingClosure: @escaping (
12 | @escaping ActionDispatch,
13 | @escaping () -> State) -> (@escaping ActionDispatch) -> ActionDispatch
14 | ) -> Middleware {
15 | return .init(apply: applyingClosure)
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Tests/Mocking/ReducerMocking.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | @testable import AzureCommunicationUICalling
8 |
9 | extension Reducer {
10 | static func mockReducer(
11 | outputState: State? = nil
12 | ) -> Reducer {
13 |
14 | return Reducer { state, _ in
15 | if let outputState = outputState {
16 | return outputState
17 | }
18 | return state
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Tests/Mocking/VideoViewManagerMocking.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | @testable import AzureCommunicationUICalling
9 |
10 | class VideoViewManagerMocking: RendererViewManager {
11 | var didRenderFirstFrame: ((CGSize) -> Void)?
12 |
13 | func getRemoteParticipantVideoRendererView(_ videoViewId: AzureCommunicationUICalling.RemoteParticipantVideoViewId) -> AzureCommunicationUICalling.ParticipantRendererViewInfo? {
14 | return nil
15 | }
16 |
17 | func getRemoteParticipantVideoRendererViewSize() -> CGSize? {
18 | return nil
19 | }
20 |
21 | func updateDisplayedRemoteVideoStream(_ videoViewIdArray: [AzureCommunicationUICalling.RemoteParticipantVideoViewId]) {
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Tests/Mocking/ViewModels/AudioDeviceListViewModelMocking.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | @testable import AzureCommunicationUICalling
8 |
9 | class AudioDevicesListViewModelMocking: AudioDevicesListViewModel {
10 | var updateState: ((LocalUserState.AudioDeviceSelectionStatus) -> Void)?
11 |
12 | override func update(audioDeviceStatus: LocalUserState.AudioDeviceSelectionStatus,
13 | navigationState: NavigationState,
14 | visibilityState: VisibilityState) {
15 | updateState?(audioDeviceStatus)
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Tests/Mocking/ViewModels/BannerTextViewModelMocking.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | import Combine
8 |
9 | @testable import AzureCommunicationUICalling
10 |
11 | class BannerTextViewModelMocking: BannerTextViewModel {
12 | var updateBannerInfoType: ((BannerInfoType?) -> Void)?
13 | var bannerType: BannerInfoType?
14 |
15 | init(accessibilityProvider: AccessibilityProviderProtocol = AccessibilityProvider(),
16 | updateBannerInfoType: ((BannerInfoType?) -> Void)? = nil) {
17 | self.updateBannerInfoType = updateBannerInfoType
18 | super.init(accessibilityProvider: accessibilityProvider,
19 | localizationProvider: LocalizationProviderMocking())
20 | }
21 |
22 | override func update(bannerInfoType: BannerInfoType?) {
23 | updateBannerInfoType?(bannerInfoType)
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Tests/Mocking/ViewModels/BannerViewModelMocking.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | @testable import AzureCommunicationUICalling
8 |
9 | class BannerViewModelMocking: BannerViewModel {
10 | private let updateState: ((CallingState, VisibilityState) -> Void)?
11 |
12 | init(compositeViewModelFactory: CompositeViewModelFactoryProtocol,
13 | dispatchAction: @escaping ActionDispatch,
14 | updateState: ((CallingState, VisibilityState) -> Void)? = nil) {
15 | self.updateState = updateState
16 | super.init(compositeViewModelFactory: compositeViewModelFactory, dispatchAction: dispatchAction)
17 | }
18 |
19 | override func update(callingState: CallingState, visibilityState: VisibilityState) {
20 | updateState?(callingState, visibilityState)
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Tests/Mocking/ViewModels/ErrorInfoViewModelMocking.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | @testable import AzureCommunicationUICalling
8 |
9 | class ErrorInfoViewModelMocking: ErrorInfoViewModel {
10 | private let updateState: ((ErrorState) -> Void)?
11 |
12 | init(updateState: ((ErrorState) -> Void)? = nil) {
13 | self.updateState = updateState
14 | super.init(localizationProvider: LocalizationProviderMocking())
15 | }
16 |
17 | override func update(errorState: ErrorState) {
18 | updateState?(errorState)
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Tests/Mocking/ViewModels/IconButtonViewModelMocking.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | @testable import AzureCommunicationUICalling
8 |
9 | class IconButtonViewModelMocking: IconButtonViewModel {
10 | var updateIcon: ((CompositeIcon?) -> Void)?
11 | var updateIsDisabledState: ((Bool) -> Void)?
12 |
13 | override func update(iconName: CompositeIcon?) {
14 | updateIcon?(iconName)
15 | }
16 |
17 | override func update(isDisabled: Bool) {
18 | updateIsDisabledState?(isDisabled)
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Tests/Mocking/ViewModels/IconWithLabelButtonViewModelMocking.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | @testable import AzureCommunicationUICalling
8 |
9 | class IconWithLabelButtonViewModelMocking: IconWithLabelButtonViewModel {
10 | var updateButtonInfo: ((T) -> Void)?
11 | var updateDisabledState: ((Bool) -> Void)?
12 |
13 | override func update(selectedButtonState: T) {
14 | updateButtonInfo?(selectedButtonState)
15 | }
16 |
17 | override func update(isDisabled: Bool) {
18 | updateDisabledState?(isDisabled)
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Tests/Mocking/ViewModels/ParticipantsListViewModelMocking.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | @testable import AzureCommunicationUICalling
8 |
9 | class ParticipantsListViewModelMocking: ParticipantsListViewModel {
10 | var updateStates: ((LocalUserState, RemoteParticipantsState, Bool) -> Void)?
11 |
12 | override func update(localUserState: LocalUserState,
13 | remoteParticipantsState: RemoteParticipantsState,
14 | isDisplayed: Bool) {
15 | updateStates?(localUserState, remoteParticipantsState, isDisplayed)
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Tests/Presentation/Setup/JoiningCallActivityViewModelTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | import XCTest
8 | @testable import AzureCommunicationUICalling
9 |
10 | class JoiningCallActivityViewModelTests: XCTestCase {
11 |
12 | func test_joiningCallActivityViewModel_when_getTitle_then_shouldLocalizedPlaceholderString() {
13 | let sut = makeSUT()
14 | XCTAssertEqual(sut.title, "AzureCommunicationUICalling.SetupView.Button.JoiningCall")
15 | }
16 | }
17 |
18 | extension JoiningCallActivityViewModelTests {
19 | func makeSUT() -> JoiningCallActivityViewModel {
20 | return JoiningCallActivityViewModel(title: "AzureCommunicationUICalling.SetupView.Button.JoiningCall")
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Tests/Service/CallHistoryRepositoryTests.swift.plist:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/AzureCommunicationUI/sdk/AzureCommunicationUICalling/Tests/Service/CallHistoryRepositoryTests.swift.plist
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/AzureCommunicationUIChat.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/AzureCommunicationUIChat.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Assets.xcassets/Icon/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | },
6 | "properties" : {
7 | "provides-namespace" : true
8 | }
9 | }
10 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Assets.xcassets/Icon/ic_fluent_arrow_down_24_filled.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_arrow_down_24_filled.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true,
14 | "template-rendering-intent" : "template"
15 | }
16 | }
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Assets.xcassets/Icon/ic_fluent_arrow_down_24_filled.imageset/ic_fluent_arrow_down_24_filled.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Assets.xcassets/Icon/ic_fluent_checkmark_circle_12_regular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_checkmark_circle_12_regular.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true,
14 | "template-rendering-intent" : "template"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Assets.xcassets/Icon/ic_fluent_checkmark_circle_12_regular.imageset/ic_fluent_checkmark_circle_12_regular.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Assets.xcassets/Icon/ic_fluent_circle_12_regular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_circle_12_regular.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true,
14 | "template-rendering-intent" : "template"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Assets.xcassets/Icon/ic_fluent_circle_12_regular.imageset/ic_fluent_circle_12_regular.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Assets.xcassets/Icon/ic_fluent_error_circle_12_regular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_error_circle_12_regular.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true,
14 | "template-rendering-intent" : "template"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Assets.xcassets/Icon/ic_fluent_error_circle_12_regular.imageset/ic_fluent_error_circle_12_regular.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Assets.xcassets/Icon/ic_fluent_eye_12_regular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_eye_12_regular.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true,
14 | "template-rendering-intent" : "template"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Assets.xcassets/Icon/ic_fluent_person_add_24_regular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "person-add.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true,
14 | "template-rendering-intent" : "template"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Assets.xcassets/Icon/ic_fluent_person_remove_24_regular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "person-arrow-left.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true,
14 | "template-rendering-intent" : "template"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Assets.xcassets/Icon/ic_fluent_send_24_filled.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_send_24_filled.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true,
14 | "template-rendering-intent" : "template"
15 | }
16 | }
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Assets.xcassets/Icon/ic_fluent_send_24_filled.imageset/ic_fluent_send_24_filled.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Assets.xcassets/Icon/ic_fluent_send_24_regular.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_send_24_regular.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true,
14 | "template-rendering-intent" : "template"
15 | }
16 | }
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Assets.xcassets/Icon/ic_fluent_send_24_regular.imageset/ic_fluent_send_24_regular.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Assets.xcassets/Icon/ic_ios_arrow_left_24_filled.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "ic_fluent_ios_arrow_ltr_24_regular.svg",
5 | "idiom" : "universal"
6 | }
7 | ],
8 | "info" : {
9 | "author" : "xcode",
10 | "version" : 1
11 | },
12 | "properties" : {
13 | "preserves-vector-representation" : true,
14 | "template-rendering-intent" : "template"
15 | }
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Assets.xcassets/Icon/ic_ios_arrow_left_24_filled.imageset/ic_fluent_ios_arrow_ltr_24_regular.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/ChatCompositeOptions/ChatCompositeOptions.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | import UIKit
8 |
9 | /// User-configurable options for creating ChatComposite.
10 | struct ChatCompositeOptions {
11 | private(set) var themeOptions: ThemeOptions?
12 | private(set) var localizationOptions: LocalizationOptions?
13 |
14 | /// Creates an instance of ChatCompositeOptions with related options.
15 | /// - Parameter theme: ThemeOptions for changing color pattern.
16 | /// Default value is `nil`.
17 | /// - Parameter localization: LocalizationOptions for specifying
18 | /// localization customization. Default value is `nil`.
19 | init(theme: ThemeOptions? = nil,
20 | localization: LocalizationOptions? = nil) {
21 | self.themeOptions = theme
22 | self.localizationOptions = localization
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/ChatCompositeOptions/ChatConfiguration.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import AzureCommunicationCommon
7 | import Foundation
8 |
9 | struct ChatConfiguration {
10 | let endpoint: String
11 | let identifier: CommunicationIdentifier
12 | let credential: CommunicationTokenCredential
13 | let displayName: String?
14 | let diagnosticConfig: DiagnosticConfig
15 | let pageSize: Int32 = 100
16 |
17 | init(endpoint: String,
18 | identifier: CommunicationIdentifier,
19 | credential: CommunicationTokenCredential,
20 | displayName: String?) {
21 | self.identifier = identifier
22 | self.credential = credential
23 | self.endpoint = endpoint
24 | self.displayName = displayName
25 | self.diagnosticConfig = DiagnosticConfig()
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/ChatCompositeOptions/SetParticipantViewDataError.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | /// An error that occurs during setting participants view data.
9 | enum SetParticipantViewDataError: String, Error {
10 | /// Error when the remote participant is not in the chat.
11 | case participantNotInChat
12 | }
13 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIdentifier
10 | $(PRODUCT_BUNDLE_IDENTIFIER)
11 | CFBundleInfoDictionaryVersion
12 | 6.0
13 | CFBundleName
14 | $(PRODUCT_NAME)
15 | CFBundlePackageType
16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE)
17 | CFBundleShortVersionString
18 | $(MARKETING_VERSION)
19 | CFBundleVersion
20 | $(CURRENT_PROJECT_VERSION)
21 | UILibrarySemVersion
22 | 1.0.0-beta.5
23 |
24 |
25 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Model/BaseInfoModel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | protocol BaseInfoModel {}
9 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Model/ChatThreadInfoModel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import AzureCore
7 | import Foundation
8 |
9 | struct ChatThreadInfoModel: BaseInfoModel, Equatable {
10 | let topic: String?
11 | let receivedOn: Iso8601Date
12 | let createdBy: String?
13 |
14 | init(topic: String? = nil, receivedOn: Iso8601Date, createdBy: String? = nil) {
15 | self.topic = topic
16 | self.receivedOn = receivedOn
17 | self.createdBy = createdBy
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Model/LocalUserInfoModel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | import AzureCommunicationCommon
8 |
9 | struct LocalUserInfoModel {
10 | let displayName: String?
11 | let localUserId: String?
12 | let localUserIdentifier: CommunicationIdentifier?
13 | let chatThreadId: String?
14 |
15 | init(displayName: String? = nil,
16 | identifier: CommunicationIdentifier? = nil,
17 | chatThreadId: String? = nil) {
18 | self.displayName = displayName
19 | self.localUserId = identifier?.stringValue
20 | self.localUserIdentifier = identifier
21 | self.chatThreadId = chatThreadId
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Model/ParticipantsInfoModel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | import AzureCore
8 |
9 | struct ParticipantsInfoModel: BaseInfoModel {
10 | let participants: [ParticipantInfoModel]
11 | let createdOn: Iso8601Date
12 | }
13 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Model/ReadReceiptInfoModel.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | import AzureCommunicationCommon
8 | import AzureCore
9 |
10 | struct ReadReceiptInfoModel: BaseInfoModel, Equatable {
11 | let senderIdentifier: CommunicationIdentifier
12 | let chatMessageId: String
13 | let readOn: Iso8601Date
14 |
15 | static func == (lhs: ReadReceiptInfoModel, rhs: ReadReceiptInfoModel) -> Bool {
16 | return lhs.chatMessageId == rhs.chatMessageId
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Presentation/Factories/CompositeViewFactory.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | protocol CompositeViewFactoryProtocol {
9 | func makeChatView() -> ChatView
10 | }
11 |
12 | struct CompositeViewFactory: CompositeViewFactoryProtocol {
13 | private let logger: Logger
14 | private let compositeViewModelFactory: CompositeViewModelFactoryProtocol
15 |
16 | init(logger: Logger,
17 | compositeViewModelFactory: CompositeViewModelFactoryProtocol) {
18 | self.logger = logger
19 | self.compositeViewModelFactory = compositeViewModelFactory
20 | }
21 |
22 | func makeChatView() -> ChatView {
23 | return ChatView(viewModel: compositeViewModelFactory.getChatViewModel())
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Presentation/FluentUI/Icon.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import SwiftUI
7 |
8 | struct Icon: View {
9 | var name: CompositeIcon
10 | var size: CGFloat
11 |
12 | var body: some View {
13 | StyleProvider.icon.getImage(for: name)
14 | .resizable()
15 | .frame(width: size, height: size, alignment: .center)
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Presentation/FluentUI/Wrapper/TypingParticipantAvatarGroupContainer.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import SwiftUI
7 |
8 | struct TypingParticipantAvatarGroupContainer: UIViewRepresentable {
9 |
10 | var participantList: [ParticipantInfoModel]
11 | var avatarGroup: TypingParticipantAvatarGroup
12 |
13 | func makeUIView(context: Context) -> TypingParticipantAvatarGroup {
14 | avatarGroup.setContentCompressionResistancePriority(.defaultLow, for: .horizontal)
15 | return avatarGroup
16 | }
17 |
18 | func updateUIView(_ uiView: TypingParticipantAvatarGroup, context: Context) {
19 | avatarGroup.setAvatars(to: participantList)
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Presentation/Manager/AvatarViewManager.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Presentation/Manager/RemoteParticipantsManager.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Presentation/Style/LocalizationProvider.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | import SwiftUI
8 |
9 | protocol LocalizationProviderProtocol: BaseLocalizationProviderProtocol {
10 | var isRightToLeft: Bool { get }
11 | func getLocalizedString(_ key: LocalizationKey) -> String
12 | func getLocalizedString(_ key: LocalizationKey, _ args: CVarArg...) -> String
13 | }
14 |
15 | class LocalizationProvider: BaseLocalizationProvider, LocalizationProviderProtocol {
16 | init(logger: Logger) {
17 | super.init(logger: logger, bundleClass: ChatAdapter.self)
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Presentation/Style/StyleProvider.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | struct StyleProvider {
9 | static var color = ColorThemeProvider(themeOptions: nil)
10 | static var icon = IconProvider()
11 | // static var font = FontProvider()
12 | }
13 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Presentation/SwiftUI/Chat/ChatViewComponents/Message/HtmlMessageView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import SwiftUI
7 |
8 | struct HtmlMessageView: View {
9 | let messageModel: ChatMessageInfoModel
10 |
11 | var body: some View {
12 | HStack {
13 | Text(messageModel.getContentLabel())
14 | .font(.caption2)
15 | .foregroundColor(Color(StyleProvider.color.textSecondary))
16 | Spacer()
17 | }
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Presentation/SwiftUI/Container/ContainerUIHostingController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | import SwiftUI
8 |
9 | class ContainerUIHostingController: UIHostingController {
10 | private let cancelBag = CancelBag()
11 |
12 | init(rootView: ContainerView) {
13 | super.init(rootView: Root(containerView: rootView))
14 | }
15 |
16 | @objc required dynamic init?(coder aDecoder: NSCoder) {
17 | fatalError("init(coder:) has not been implemented")
18 | }
19 |
20 | struct Root: View {
21 | let containerView: ContainerView
22 |
23 | var body: some View {
24 | containerView
25 | }
26 | }
27 |
28 | // MARK: Prefers Home Indicator Auto Hidden
29 | }
30 |
31 | extension ContainerUIHostingController: UIViewControllerTransitioningDelegate {}
32 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Presentation/SwiftUI/Container/ContainerView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import SwiftUI
7 |
8 | struct ContainerView: View {
9 | let viewFactory: CompositeViewFactoryProtocol
10 |
11 | var body: some View {
12 | viewFactory.makeChatView()
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Presentation/Utilities/UIApplicationHelper.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import SwiftUI
7 |
8 | struct UIApplicationHelper {
9 | static func dismissKeyboard() {
10 | UIApplication.shared.windows.filter {$0.isKeyWindow}.first?.endEditing(true)
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Redux/Action/Action.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | ///
9 | /// Action for the entire library. All actions are defined here as a heirarchy of enum types
10 | ///
11 | enum Action: Equatable {
12 | case lifecycleAction(LifecycleAction)
13 | case chatAction(ChatAction)
14 | case participantsAction(ParticipantsAction)
15 | case repositoryAction(RepositoryAction)
16 | case errorAction(ErrorAction)
17 |
18 | case compositeExitAction
19 | case chatViewLaunched
20 | case chatViewHeadless
21 | }
22 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Redux/Action/ErrorAction.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | enum ErrorAction: Equatable {
9 | case fatalErrorUpdated(internalError: ChatCompositeInternalError, error: Error?)
10 |
11 | static func == (lhs: ErrorAction, rhs: ErrorAction) -> Bool {
12 | switch (lhs, rhs) {
13 | case let (.fatalErrorUpdated(internalError: lErr, error: _),
14 | .fatalErrorUpdated(internalError: rErr, error: _)):
15 | return lErr == rErr
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Redux/Action/LifecycleAction.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | enum LifecycleAction: Equatable {
9 | case foregroundEntered
10 | case backgroundEntered
11 | }
12 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Redux/Reducer/LifeCycleReducer.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | extension Reducer where State == LifeCycleState,
9 | Actions == Action {
10 | static var liveLifecycleReducer: Self = Reducer { appLifeCycleCurrentState, action in
11 | var currentStatus = appLifeCycleCurrentState.currentStatus
12 | switch action {
13 | case .lifecycleAction(.foregroundEntered):
14 | currentStatus = .foreground
15 | case .lifecycleAction(.backgroundEntered):
16 | currentStatus = .background
17 | default:
18 | break
19 | }
20 | return LifeCycleState(currentStatus: currentStatus)
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Redux/Reducer/NavigationReducer.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | extension Reducer where State == NavigationState,
9 | Actions == Action {
10 | static var liveNavigationReducer: Self = Reducer { state, action in
11 | var navigationStatus = state.status
12 | switch action {
13 | case .chatViewLaunched:
14 | navigationStatus = .inChat
15 | case .chatViewHeadless:
16 | navigationStatus = .headless
17 | case .compositeExitAction:
18 | navigationStatus = .exit
19 | default:
20 | return state
21 | }
22 | return NavigationState(status: navigationStatus)
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Redux/State/AppLifeCycleState.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | enum AppStatus {
9 | case foreground
10 | case background
11 | }
12 |
13 | struct LifeCycleState {
14 |
15 | let currentStatus: AppStatus
16 |
17 | init(currentStatus: AppStatus = .foreground) {
18 | self.currentStatus = currentStatus
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Redux/State/ErrorState.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | enum ErrorCategory {
9 | case fatal
10 | case chatState
11 | case trouter
12 | case none
13 | }
14 |
15 | struct ErrorState: Equatable {
16 | // errorType would be nil for no error status
17 | let internalError: ChatCompositeInternalError?
18 | let error: Error?
19 | let errorCategory: ErrorCategory
20 |
21 | init(internalError: ChatCompositeInternalError? = nil,
22 | error: Error? = nil,
23 | errorCategory: ErrorCategory = .none) {
24 | self.internalError = internalError
25 | self.error = error
26 | self.errorCategory = errorCategory
27 | }
28 |
29 | static func == (lhs: ErrorState, rhs: ErrorState) -> Bool {
30 | return (lhs.internalError?.rawValue == rhs.internalError?.rawValue)
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Redux/State/NavigationState.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | enum NavigationStatus {
9 | case inChat
10 | case headless
11 | case exit
12 | }
13 |
14 | struct NavigationState: Equatable {
15 |
16 | let status: NavigationStatus
17 |
18 | init(status: NavigationStatus = .inChat) {
19 | self.status = status
20 | }
21 |
22 | static func == (lhs: NavigationState, rhs: NavigationState) -> Bool {
23 | return lhs.status == rhs.status
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Redux/State/RepositoryState.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | struct RepositoryState {
9 | let lastUpdatedTimestamp: Date
10 | let hasFetchedInitialMessages: Bool
11 | let hasFetchedPreviousMessages: Bool
12 | let hasFetchedAllMessages: Bool
13 |
14 | init(lastUpdatedTimestamp: Date = Date(),
15 | hasFetchedInitialMessages: Bool = false,
16 | hasFetchedPreviousMessages: Bool = true,
17 | hasFetchedAllMessages: Bool = false) {
18 | self.lastUpdatedTimestamp = lastUpdatedTimestamp
19 | self.hasFetchedInitialMessages = hasFetchedInitialMessages
20 | self.hasFetchedPreviousMessages = hasFetchedPreviousMessages
21 | self.hasFetchedAllMessages = hasFetchedAllMessages
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Service/Chat/Extension/CommunicationIdentifierExtension.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import AzureCommunicationCommon
7 |
8 | extension CommunicationIdentifier {
9 | var stringValue: String {
10 |
11 | switch self {
12 | case let id as CommunicationUserIdentifier:
13 | return id.identifier
14 | case let id as PhoneNumberIdentifier:
15 | return id.phoneNumber
16 | case let id as MicrosoftTeamsUserIdentifier:
17 | return id.userId
18 | case let id as UnknownIdentifier:
19 | return id.identifier
20 | default:
21 | return UUID().uuidString
22 | }
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Sources/Utilities/ColorExtension.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Tests/.swiftlint.yml:
--------------------------------------------------------------------------------
1 | disabled_rules:
2 | - line_length
3 | - file_length
4 | - type_body_length
5 |
6 |
7 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Tests/ChatCompositeOptions/RemoteOptionsTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Tests/Manager/AvatarManagerTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Tests/Manager/RemoteParticipantsManagerTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Tests/Mocking/AccessibilityProviderMocking.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Tests/Mocking/ChatCompositeMocking.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Tests/Mocking/CompositeViewModelFactoryMocking.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Tests/Mocking/ErrorMocking.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Tests/Mocking/LocalizationProviderMocking.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | @testable import AzureCommunicationUIChat
7 |
8 | class LocalizationProviderMocking: BaseLocalizationProvider, LocalizationProviderProtocol {
9 | var isGetLocalizedStringCalled = false
10 | var isGetLocalizedStringWithArgsCalled = false
11 |
12 | override var isRightToLeft: Bool {
13 | return false
14 | }
15 |
16 | func getLocalizedString(_ key: LocalizationKey) -> String {
17 | isGetLocalizedStringCalled = true
18 | return key.rawValue
19 | }
20 |
21 | func getLocalizedString(_ key: LocalizationKey, _ args: CVarArg...) -> String {
22 | isGetLocalizedStringWithArgsCalled = true
23 | return key.rawValue
24 | }
25 | }
26 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Tests/Mocking/LoggerMocking.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | @testable import AzureCommunicationUIChat
8 |
9 | class LoggerMocking {
10 | var logCallCount: Int = 0
11 |
12 | func logWasCalled() -> Bool {
13 | return logCallCount > 0
14 | }
15 | }
16 |
17 | extension LoggerMocking: Logger {
18 | func debug(_: @autoclosure @escaping () -> String?) {
19 | logCallCount += 1
20 |
21 | }
22 |
23 | func info(_: @autoclosure @escaping () -> String?) {
24 | logCallCount += 1
25 |
26 | }
27 |
28 | func warning(_: @autoclosure @escaping () -> String?) {
29 | logCallCount += 1
30 |
31 | }
32 |
33 | func error(_: @autoclosure @escaping () -> String?) {
34 | logCallCount += 1
35 |
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Tests/Mocking/Redux/ChatServiceEventHandlerMocking.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | @testable import AzureCommunicationUIChat
8 |
9 | class ChatServiceEventHandlerMocking: ChatServiceEventHandling {
10 | func subscription(dispatch: @escaping ActionDispatch) {
11 | // stub: to be implemented
12 | }
13 | }
14 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Tests/Mocking/Redux/MiddlewareMocking.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | @testable import AzureCommunicationUIChat
8 |
9 | extension Middleware where State == ChatAppState, Action == AzureCommunicationUIChat.Action {
10 | static func mock(
11 | applyingClosure: @escaping (
12 | @escaping ActionDispatch,
13 | @escaping () -> State) -> (@escaping ActionDispatch) -> ActionDispatch
14 | ) -> Middleware {
15 | .init(apply: applyingClosure)
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Tests/Mocking/Redux/ReducerMocking.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | @testable import AzureCommunicationUIChat
8 |
9 | extension Reducer {
10 | static func mockReducer(
11 | outputState: State? = nil
12 | ) -> Reducer {
13 |
14 | return Reducer { state, _ in
15 | if let outputState = outputState {
16 | return outputState
17 | }
18 | return state
19 | }
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Tests/Mocking/ViewModels/ChatViewModelMocking.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | // import Foundation
7 | // @testable import AzureCommunicationUIChat
8 | //
9 | // class ChatViewModelMocking: ChatViewModel {
10 | // init(compositeViewModelFactory: CompositeViewModelFactoryProtocol,
11 | // logger: Logger) {
12 | // super.init(compositeViewModelFactory: compositeViewModelFactory,
13 | // logger: logger,
14 | // store: )
15 | // }
16 | // }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Tests/Presentation/Chat/ChatViewModelTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Tests/Presentation/Chat/MessageViewModelTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Tests/Presentation/Factories/CompositeViewModelFactoryTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Tests/Redux/Reducer/AppStateReducerTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Tests/Redux/Reducer/LifeCycleReducerTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUIChat/Tests/Service/NavigationRouterTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICommon/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
2 | /.build
3 | /Packages
4 | /*.xcodeproj
5 | xcuserdata/
6 | DerivedData/
7 | .swiftpm/config/registries.json
8 | .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
9 | .netrc
10 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICommon/.swiftlint.yml:
--------------------------------------------------------------------------------
1 | # Need to disable file header because package.swift uses the header area comments.
2 | disabled_rules:
3 | - file_header
4 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICommon/Package.swift:
--------------------------------------------------------------------------------
1 | // swift-tools-version: 5.6
2 | // The swift-tools-version declares the minimum version of Swift required to build this package.
3 |
4 | import PackageDescription
5 |
6 | let package = Package(
7 | name: "AzureCommunicationUICommon",
8 | platforms: [.iOS(.v14)],
9 | products: [
10 | .library(
11 | name: "AzureCommunicationUICommon",
12 | targets: ["AzureCommunicationUICommon"])
13 | ],
14 | dependencies: [
15 | ],
16 | targets: [
17 | .target(
18 | name: "AzureCommunicationUICommon",
19 | dependencies: [],
20 | swiftSettings: [
21 | .unsafeFlags(
22 | ["-enable-library-evolution"]
23 | )
24 | ]
25 | ),
26 | .testTarget(
27 | name: "AzureCommunicationUICommonTests",
28 | dependencies: ["AzureCommunicationUICommon"]
29 | )
30 | ]
31 | )
32 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICommon/README.md:
--------------------------------------------------------------------------------
1 | # AzureCommunicationUICommon
2 |
3 | Provides common code components for the AzureCommunicationUI packages
4 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICommon/Sources/AzureCommunicationUICommon/AccessibilityProviderNotificationsObserver.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | @objc
9 | protocol AccessibilityProviderNotificationsObserver {
10 | /// Function will be executed when receiving a notification.
11 | /// The notification may be sent a couple of times for the same value
12 | func didChangeVoiceOverStatus(_ notification: NSNotification)
13 |
14 | func didUIFocusUpdateNotification(_ notification: NSNotification)
15 | }
16 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICommon/Sources/AzureCommunicationUICommon/CancelBag.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Combine
7 |
8 | final class CancelBag {
9 |
10 | fileprivate(set) var subscriptions = Set()
11 |
12 | func cancel() {
13 | subscriptions.removeAll()
14 | }
15 |
16 | func collect(@Builder _ cancellables: () -> [AnyCancellable]) {
17 | subscriptions.formUnion(cancellables())
18 | }
19 |
20 | @resultBuilder
21 | struct Builder {
22 | static func buildBlock(_ cancellables: AnyCancellable...) -> [AnyCancellable] {
23 | return cancellables
24 | }
25 | }
26 | }
27 |
28 | extension AnyCancellable {
29 |
30 | func store(in cancelBag: CancelBag) {
31 | cancelBag.subscriptions.insert(self)
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICommon/Sources/AzureCommunicationUICommon/Middleware.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | typealias CommonActionDispatch = (A) -> Void
9 |
10 | struct Middleware {
11 | var apply: (_ actionDispatch: @escaping CommonActionDispatch, _ getState: @escaping () -> State) ->
12 | (@escaping CommonActionDispatch) ->
13 | CommonActionDispatch
14 | }
15 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICommon/Sources/AzureCommunicationUICommon/Reducer.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | struct Reducer {
9 | let reduce: (_ state: State, _ action: Actions) -> State
10 | }
11 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICommon/Sources/AzureCommunicationUICommon/StringConstants.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 |
8 | enum StringConstants {
9 | static let privacyPolicyLink: String = "https://privacy.microsoft.com/privacystatement#mainnoticetoendusersmodule"
10 | static let learnMoreLink: String = "https://support.microsoft.com/office/"
11 | + "record-a-meeting-in-teams-34dfbe7f-b07d-4a27-b4c6-de62f1348c24"
12 |
13 | static let rttLearnMoreLink: String = "https://learn.microsoft.com/en-us/azure/communication-services/concepts/voice-video-calling/real-time-text"
14 | static let callIdDebugInfoTitle: String = "Call ID:"
15 | static let defaultCallIdDebugInfoValue: String = "UNKNOWN"
16 | }
17 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICommon/Sources/AzureCommunicationUICommon/UIViewControllerExtension.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import Foundation
7 | import UIKit
8 |
9 | extension UIViewController {
10 | func dismissSelf(completion: (() -> Void)? = nil, animated: Bool = true) {
11 | view.endEditing(true)
12 | if let presentingVc = presentingViewController {
13 | presentingVc.dismiss(animated: animated, completion: completion)
14 | } else {
15 | completion?()
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICommon/Sources/AzureCommunicationUICommon/ViewModifer.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import SwiftUI
7 |
8 | struct DeviceRotationViewModifier: ViewModifier {
9 | let action: (UIDeviceOrientation) -> Void
10 |
11 | func body(content: Content) -> some View {
12 | content
13 | .onAppear()
14 | .onReceive(NotificationCenter.default.publisher(for: UIDevice.orientationDidChangeNotification)) { _ in
15 | action(UIDevice.current.orientation)
16 | }
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/AzureCommunicationUI/sdk/AzureCommunicationUICommon/Tests/AzureCommunicationUICommonTests/CancelBagTests.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Copyright (c) Microsoft Corporation. All rights reserved.
3 | // Licensed under the MIT License.
4 | //
5 |
6 | import XCTest
7 | @testable import AzureCommunicationUICommon
8 |
9 | final class CancelBagTests: XCTestCase {
10 | func testCancelBag() throws {
11 | let cancelBag = CancelBag()
12 |
13 | XCTAssertNotNil(cancelBag)
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Release History
2 |
3 | * [AzureCommunicationUICalling](AzureCommunicationUI/sdk/AzureCommunicationUICalling/CHANGELOG.md)
4 | * [AzureCommunicationUIChat](AzureCommunicationUI/sdk/AzureCommunicationUIChat/CHANGELOG.md)
5 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Microsoft Open Source Code of Conduct
2 |
3 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
4 |
5 | Resources:
6 |
7 | - [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/)
8 | - [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/)
9 | - Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns
10 |
--------------------------------------------------------------------------------
/SUPPORT.md:
--------------------------------------------------------------------------------
1 | # Support
2 |
3 | ## How to file issues and get help
4 |
5 | This project uses GitHub Issues to track bugs and feature requests. Please search the existing
6 | issues before filing new issues to avoid duplicates. For new issues, file your bug or
7 | feature request as a new Issue.
8 |
9 | ## Microsoft Support Policy
10 |
11 | Support for this **PROJECT or PRODUCT** is limited to the resources listed above.
12 |
--------------------------------------------------------------------------------
/docs/images/EnvConfig.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/docs/images/EnvConfig.png
--------------------------------------------------------------------------------
/docs/images/SelectSimulator.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/docs/images/SelectSimulator.png
--------------------------------------------------------------------------------
/docs/images/calling.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/docs/images/calling.png
--------------------------------------------------------------------------------
/docs/images/chat.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/docs/images/chat.png
--------------------------------------------------------------------------------
/docs/images/mobile-ui-library-calling-hero-image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/docs/images/mobile-ui-library-calling-hero-image.png
--------------------------------------------------------------------------------
/docs/images/mobile-ui-library-chat-hero-image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/docs/images/mobile-ui-library-chat-hero-image.png
--------------------------------------------------------------------------------
/docs/images/mobile-ui-library-hero-image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/docs/images/mobile-ui-library-hero-image.png
--------------------------------------------------------------------------------
/eng/jazzy/AzureCommunicationUICalling.yml:
--------------------------------------------------------------------------------
1 | author: Microsoft
2 | author_url: https://azure.github.io/azure-sdk/
3 | github_url: https://github.com/Azure/communication-ui-library-ios
4 | module: AzureCommunicationUICalling
5 | module_version: 1.13.0
6 | readme: ../../AzureCommunicationUI/sdk/AzureCommunicationUICalling/README.md
7 | skip_undocumented: false
8 | hide_unlisted_documentation: false
9 | theme: fullwidth
10 | output: ../../build/jazzy/AzureCommunicationUICalling
11 | clean: true
12 | sdk: iphonesimulator
13 | xcodebuild_arguments:
14 | - "-workspace"
15 | - "../../AzureCommunicationUI/AzureCommunicationUI.xcworkspace"
16 | - "-scheme"
17 | - "AzureCommunicationUICalling"
18 | - "-sdk"
19 | - "iphonesimulator"
20 | - "-arch"
21 | - "x86_64"
22 | exclude:
23 | - "*/Source/ObjectiveCCompatibility/*"
24 | - "*/Tests/*"
25 |
--------------------------------------------------------------------------------
/eng/jazzy/AzureCommunicationUIChat.yml:
--------------------------------------------------------------------------------
1 | author: Microsoft
2 | author_url: https://azure.github.io/azure-sdk/
3 | github_url: https://github.com/Azure/communication-ui-library-ios
4 | module: AzureCommunicationUIChat
5 | module_version: 1.0.0-beta.5
6 | readme: ../../AzureCommunicationUI/sdk/AzureCommunicationUIChat/README.md
7 | skip_undocumented: false
8 | hide_unlisted_documentation: false
9 | theme: fullwidth
10 | output: ../../build/jazzy/AzureCommunicationUIChat
11 | clean: true
12 | sdk: iphonesimulator
13 | xcodebuild_arguments:
14 | - "-workspace"
15 | - "../../AzureCommunicationUI/AzureCommunicationUI.xcworkspace"
16 | - "-scheme"
17 | - "AzureCommunicationUIChat"
18 | - "-sdk"
19 | - "iphonesimulator"
20 | - "-arch"
21 | - "x86_64"
22 | exclude:
23 | - "*/Source/ObjectiveCCompatibility/*"
24 | - "*/Tests/*"
25 |
--------------------------------------------------------------------------------
/eng/pipelines/jobs/templates/jazzy-build-script.yml:
--------------------------------------------------------------------------------
1 |
2 | parameters:
3 | - name: buildScheme
4 | type: string
5 | default: 'AzureCommunicationUICalling'
6 | values:
7 | - AzureCommunicationUICalling
8 | - AzureCommunicationUIChat
9 | - name: firstStep
10 | type: string
11 | default: ''
12 | - name: secondStep
13 | type: string
14 | default: ''
15 |
16 | steps:
17 | - script: |
18 | cd $(Pipeline.Workspace)/communication-ui-library-ios/eng/jazzy
19 | jazzy --config ${{ parameters.buildScheme }}.yml
20 | displayName: "${{ parameters.firstStep }} Run Jazzy for ${{ parameters.buildScheme }}"
21 | - script: |
22 | cp -Rf $(Pipeline.Workspace)/communication-ui-library-ios/build/jazzy/${{ parameters.buildScheme }} $(Pipeline.Workspace)/$(ado-repo)/acs_ui_api_doc_jazzy
23 | displayName: "${{ parameters.secondStep }} Replace ${{ parameters.buildScheme }} Jazzy doc in function app"
24 |
--------------------------------------------------------------------------------
/eng/pipelines/jobs/templates/run-appcenter-test.yml:
--------------------------------------------------------------------------------
1 | # Runs AppCenter tests with a specific device set
2 |
3 | parameters:
4 | - name: devices
5 | type: string
6 | default: ''
7 | - name: appFile
8 | type: string
9 | default: ''
10 |
11 | steps:
12 | - task: AppCenterTest@1
13 | displayName: 'Test with Visual Studio App Center (${{ parameters.devices }})'
14 | inputs:
15 | appFile: '${{ parameters.appFile }}'
16 | frameworkOption: xcuitest
17 | xcUITestBuildDirectory: '$(build.artifactStagingDirectory)/DerivedData/Build/Products/Debug-iphoneos'
18 | serverEndpoint: 'SPOOL-CallingComposite-iOS-AppCenter2'
19 | appSlug: 'Azure-Communication-Services/Azure-Communication-Services-Call-UI-Library-Sample-iOS-Internal'
20 | devices: '${{ parameters.devices }}'
21 | dsymDirectory: '**/*.dSYM/**'
22 | skipWaitingForResults: true
23 | showDebugOutput: true
--------------------------------------------------------------------------------
/eng/slather/ui-calling-slather.yml:
--------------------------------------------------------------------------------
1 | coverage_service: cobertura_xml
2 | output_directory: slather-report
3 | scheme: AzureCommunicationUICalling
4 | workspace: AzureCommunicationUI.xcworkspace
5 | xcodeproj: sdk/AzureCommunicationUICalling/AzureCommunicationUICalling.xcodeproj
6 | ignore:
7 | - AzureCommunicationUIDemoApp/**
8 | - sdk/AzureCommunicationUICalling/Tests/**
9 | - sdk/AzureCommunicationUIChat/Tests/**
10 | - sdk/AzureCommunicationUICommon/Tests/**
11 | - sdk/**/*Button.swift
12 | - sdk/**/*Cell.swift
13 | - sdk/**/*View.swift
14 | - sdk/**/*Controller.swift
15 |
16 |
--------------------------------------------------------------------------------
/eng/slather/ui-chat-slather.yml:
--------------------------------------------------------------------------------
1 | coverage_service: cobertura_xml
2 | output_directory: slather-report
3 | scheme: AzureCommunicationUIChat
4 | workspace: AzureCommunicationUI.xcworkspace
5 | xcodeproj: sdk/AzureCommunicationUIChat/AzureCommunicationUIChat.xcodeproj
6 | ignore:
7 | - AzureCommunicationUIDemoApp/**
8 | - sdk/AzureCommunicationUICalling/Tests/**
9 | - sdk/AzureCommunicationUIChat/Tests/**
10 | - sdk/AzureCommunicationUICommon/Tests/**
11 | - sdk/**/*Button.swift
12 | - sdk/**/*Cell.swift
13 | - sdk/**/*View.swift
14 |
--------------------------------------------------------------------------------
/scripts/__pycache__/composite.cpython-311.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/scripts/__pycache__/composite.cpython-311.pyc
--------------------------------------------------------------------------------
/scripts/__pycache__/composite.cpython-312.pyc:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Azure/communication-ui-library-ios/30f139a3ddec7315838583ea19681af4ea59fd94/scripts/__pycache__/composite.cpython-312.pyc
--------------------------------------------------------------------------------
/scripts/composite.py:
--------------------------------------------------------------------------------
1 | from enum import Enum
2 |
3 | class Composite(Enum):
4 | CHAT = 'chat'
5 | CALLING = 'calling'
6 | UNKNOWN = ''
7 | @classmethod
8 | def _missing_(cls, value):
9 | for member in cls:
10 | if member.value == value.lower():
11 | return member
12 |
13 |
--------------------------------------------------------------------------------