├── .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 | 2 | 3 | -------------------------------------------------------------------------------- /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 | 2 | 3 | 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 | 2 | 3 | 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 | 2 | 3 | 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 | 2 | 3 | -------------------------------------------------------------------------------- /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 | 2 | 3 | 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 | 2 | 3 | 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 | 2 | 3 | 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 | 2 | 3 | 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 | 2 | 3 | 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 | 2 | 3 | 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 | 2 | 3 | 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 | 2 | 3 | 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 | 2 | 3 | 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 | 2 | 3 | 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 | 2 | 3 | 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 | 2 | 3 | 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 | --------------------------------------------------------------------------------