├── .gitignore ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.MD ├── LICENSE ├── README.md ├── android ├── README.md ├── java │ ├── .gitignore │ ├── .idea │ │ ├── $CACHE_FILE$ │ │ ├── .gitignore │ │ ├── .name │ │ ├── assetWizardSettings.xml │ │ ├── caches │ │ │ └── build_file_checksums.ser │ │ ├── compiler.xml │ │ ├── gradle.xml │ │ ├── jarRepositories.xml │ │ ├── libraries │ │ │ ├── Gradle__androidx_activity_activity_1_1_0_aar.xml │ │ │ ├── Gradle__androidx_activity_activity_ktx_1_1_0_aar.xml │ │ │ ├── Gradle__androidx_annotation_annotation_1_1_0.xml │ │ │ ├── Gradle__androidx_annotation_annotation_experimental_1_0_0_aar.xml │ │ │ ├── Gradle__androidx_appcompat_appcompat_1_2_0_aar.xml │ │ │ ├── Gradle__androidx_appcompat_appcompat_resources_1_2_0_aar.xml │ │ │ ├── Gradle__androidx_arch_core_core_common_2_1_0.xml │ │ │ ├── Gradle__androidx_arch_core_core_runtime_2_1_0_aar.xml │ │ │ ├── Gradle__androidx_asynclayoutinflater_asynclayoutinflater_1_0_0_aar.xml │ │ │ ├── Gradle__androidx_cardview_cardview_1_0_0_aar.xml │ │ │ ├── Gradle__androidx_collection_collection_1_1_0.xml │ │ │ ├── Gradle__androidx_constraintlayout_constraintlayout_2_0_4_aar.xml │ │ │ ├── Gradle__androidx_constraintlayout_constraintlayout_solver_2_0_4.xml │ │ │ ├── Gradle__androidx_coordinatorlayout_coordinatorlayout_1_1_0_aar.xml │ │ │ ├── Gradle__androidx_core_core_1_3_2_aar.xml │ │ │ ├── Gradle__androidx_core_core_ktx_1_1_0_aar.xml │ │ │ ├── Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml │ │ │ ├── Gradle__androidx_customview_customview_1_1_0_aar.xml │ │ │ ├── Gradle__androidx_databinding_viewbinding_4_1_2_aar.xml │ │ │ ├── Gradle__androidx_documentfile_documentfile_1_0_0_aar.xml │ │ │ ├── Gradle__androidx_drawerlayout_drawerlayout_1_1_1_aar.xml │ │ │ ├── Gradle__androidx_dynamicanimation_dynamicanimation_1_0_0_aar.xml │ │ │ ├── Gradle__androidx_emoji_emoji_1_2_0_alpha03_aar.xml │ │ │ ├── Gradle__androidx_emoji_emoji_appcompat_1_2_0_alpha03_aar.xml │ │ │ ├── Gradle__androidx_emoji_emoji_bundled_1_2_0_alpha03_aar.xml │ │ │ ├── Gradle__androidx_fragment_fragment_1_2_4_aar.xml │ │ │ ├── Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml │ │ │ ├── Gradle__androidx_legacy_legacy_support_core_ui_1_0_0_aar.xml │ │ │ ├── Gradle__androidx_legacy_legacy_support_core_utils_1_0_0_aar.xml │ │ │ ├── Gradle__androidx_legacy_legacy_support_v4_1_0_0_aar.xml │ │ │ ├── Gradle__androidx_lifecycle_lifecycle_common_2_2_0.xml │ │ │ ├── Gradle__androidx_lifecycle_lifecycle_livedata_2_0_0_aar.xml │ │ │ ├── Gradle__androidx_lifecycle_lifecycle_livedata_core_2_2_0_aar.xml │ │ │ ├── Gradle__androidx_lifecycle_lifecycle_runtime_2_2_0_aar.xml │ │ │ ├── Gradle__androidx_lifecycle_lifecycle_runtime_ktx_2_2_0_aar.xml │ │ │ ├── Gradle__androidx_lifecycle_lifecycle_viewmodel_2_2_0_aar.xml │ │ │ ├── Gradle__androidx_lifecycle_lifecycle_viewmodel_ktx_2_2_0_aar.xml │ │ │ ├── Gradle__androidx_lifecycle_lifecycle_viewmodel_savedstate_2_2_0_aar.xml │ │ │ ├── Gradle__androidx_loader_loader_1_0_0_aar.xml │ │ │ ├── Gradle__androidx_localbroadcastmanager_localbroadcastmanager_1_0_0_aar.xml │ │ │ ├── Gradle__androidx_media_media_1_0_0_aar.xml │ │ │ ├── Gradle__androidx_navigation_navigation_common_2_3_3_aar.xml │ │ │ ├── Gradle__androidx_navigation_navigation_common_ktx_2_3_3_aar.xml │ │ │ ├── Gradle__androidx_navigation_navigation_fragment_2_3_3_aar.xml │ │ │ ├── Gradle__androidx_navigation_navigation_runtime_2_3_3_aar.xml │ │ │ ├── Gradle__androidx_navigation_navigation_runtime_ktx_2_3_3_aar.xml │ │ │ ├── Gradle__androidx_navigation_navigation_testing_2_3_3_aar.xml │ │ │ ├── Gradle__androidx_navigation_navigation_ui_2_3_3_aar.xml │ │ │ ├── Gradle__androidx_print_print_1_0_0_aar.xml │ │ │ ├── Gradle__androidx_recyclerview_recyclerview_1_2_0_beta02_aar.xml │ │ │ ├── Gradle__androidx_savedstate_savedstate_1_0_0_aar.xml │ │ │ ├── Gradle__androidx_slidingpanelayout_slidingpanelayout_1_0_0_aar.xml │ │ │ ├── Gradle__androidx_swiperefreshlayout_swiperefreshlayout_1_0_0_aar.xml │ │ │ ├── Gradle__androidx_test_core_1_3_0_aar.xml │ │ │ ├── Gradle__androidx_test_espresso_espresso_core_3_3_0_aar.xml │ │ │ ├── Gradle__androidx_test_espresso_espresso_idling_resource_3_3_0_aar.xml │ │ │ ├── Gradle__androidx_test_ext_junit_1_1_2_aar.xml │ │ │ ├── Gradle__androidx_test_monitor_1_3_0_aar.xml │ │ │ ├── Gradle__androidx_test_runner_1_3_0_aar.xml │ │ │ ├── Gradle__androidx_transition_transition_1_2_0_aar.xml │ │ │ ├── Gradle__androidx_transition_transition_1_3_0_aar.xml │ │ │ ├── Gradle__androidx_vectordrawable_vectordrawable_1_1_0_aar.xml │ │ │ ├── Gradle__androidx_vectordrawable_vectordrawable_animated_1_1_0_aar.xml │ │ │ ├── Gradle__androidx_versionedparcelable_versionedparcelable_1_1_0_aar.xml │ │ │ ├── Gradle__androidx_viewpager2_viewpager2_1_0_0_aar.xml │ │ │ ├── Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml │ │ │ ├── Gradle__com_google_android_material_material_1_3_0_aar.xml │ │ │ ├── Gradle__com_google_code_findbugs_jsr305_2_0_1.xml │ │ │ ├── Gradle__com_nabinbhandari_android_permissions_3_8_aar.xml │ │ │ ├── Gradle__com_squareup_javawriter_2_1_1.xml │ │ │ ├── Gradle__javax_inject_javax_inject_1.xml │ │ │ ├── Gradle__junit_junit_4_12.xml │ │ │ ├── Gradle__junit_junit_4_13_2.xml │ │ │ ├── Gradle__org_hamcrest_hamcrest_core_1_3.xml │ │ │ ├── Gradle__org_hamcrest_hamcrest_integration_1_3.xml │ │ │ ├── Gradle__org_hamcrest_hamcrest_library_1_3.xml │ │ │ ├── Gradle__org_jetbrains_annotations_13_0.xml │ │ │ ├── Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_3_71.xml │ │ │ ├── Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_3_71.xml │ │ │ ├── Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_android_1_3_0.xml │ │ │ └── Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_core_1_3_0.xml │ │ ├── misc.xml │ │ ├── modules.xml │ │ └── navEditor.xml │ ├── app │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── proguard-rules.pro │ │ └── src │ │ │ ├── androidTest │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── daily │ │ │ │ └── partyline │ │ │ │ └── ExampleInstrumentedTest.java │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── assets │ │ │ │ └── audio-single-file.html │ │ │ ├── ic_launcher-playstore.png │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── daily │ │ │ │ │ └── partyline │ │ │ │ │ ├── FooterAdapter.java │ │ │ │ │ ├── GridConcatAdapter.java │ │ │ │ │ ├── HeaderAdapter.java │ │ │ │ │ ├── JoinFragment.java │ │ │ │ │ ├── MainActivity.java │ │ │ │ │ ├── OnItemClickListener.java │ │ │ │ │ ├── Participant.java │ │ │ │ │ ├── ParticipantsAdapter.java │ │ │ │ │ ├── RoomFragment.java │ │ │ │ │ ├── WebAppClient.java │ │ │ │ │ └── WebAppClientCallback.java │ │ │ └── res │ │ │ │ ├── drawable │ │ │ │ ├── ic_item_mic_off.xml │ │ │ │ ├── ic_item_mic_on.xml │ │ │ │ ├── ic_lightground.xml │ │ │ │ ├── ic_mic_off.xml │ │ │ │ ├── ic_mic_on.xml │ │ │ │ └── ic_more__horizontal.xml │ │ │ │ ├── layout │ │ │ │ ├── activity_main.xml │ │ │ │ ├── fragment_join.xml │ │ │ │ ├── fragment_room.xml │ │ │ │ ├── grid_item_participant.xml │ │ │ │ ├── list_item_footer.xml │ │ │ │ ├── list_item_header.xml │ │ │ │ └── list_item_inner_grid.xml │ │ │ │ ├── menu │ │ │ │ └── popup_menu.xml │ │ │ │ ├── mipmap-anydpi-v26 │ │ │ │ ├── ic_launcher.xml │ │ │ │ └── ic_launcher_round.xml │ │ │ │ ├── mipmap-hdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_foreground.png │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-mdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_foreground.png │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-xhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_foreground.png │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_foreground.png │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ ├── ic_launcher_foreground.png │ │ │ │ └── ic_launcher_round.png │ │ │ │ ├── navigation │ │ │ │ └── navigation_graph.xml │ │ │ │ ├── values-night │ │ │ │ └── themes.xml │ │ │ │ └── values │ │ │ │ ├── colors.xml │ │ │ │ ├── ic_launcher_background.xml │ │ │ │ ├── strings.xml │ │ │ │ └── themes.xml │ │ │ └── test │ │ │ └── java │ │ │ └── com │ │ │ └── daily │ │ │ └── partyline │ │ │ └── ExampleUnitTest.java │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ └── settings.gradle └── kotlin │ ├── .gitignore │ ├── .idea │ ├── $CACHE_FILE$ │ ├── .gitignore │ ├── .name │ ├── compiler.xml │ ├── jarRepositories.xml │ └── misc.xml │ ├── app │ ├── .gitignore │ ├── build.gradle │ ├── proguard-rules.pro │ └── src │ │ ├── androidTest │ │ └── java │ │ │ └── com │ │ │ └── daily │ │ │ └── partyline │ │ │ └── ExampleInstrumentedTest.kt │ │ ├── main │ │ ├── AndroidManifest.xml │ │ ├── assets │ │ │ └── audio-single-file.html │ │ ├── ic_launcher-playstore.png │ │ ├── java │ │ │ └── com │ │ │ │ └── daily │ │ │ │ └── partyline │ │ │ │ ├── FooterAdapter.kt │ │ │ │ ├── GridConcatAdapter.kt │ │ │ │ ├── HeaderAdapter.kt │ │ │ │ ├── JoinFragment.kt │ │ │ │ ├── MainActivity.kt │ │ │ │ ├── OnItemClickListener.kt │ │ │ │ ├── Participant.kt │ │ │ │ ├── ParticipantsAdapter.kt │ │ │ │ ├── RoomFragment.kt │ │ │ │ ├── WebAppClient.kt │ │ │ │ └── WebAppClientCallback.kt │ │ └── res │ │ │ ├── drawable │ │ │ ├── ic_item_mic_off.xml │ │ │ ├── ic_item_mic_on.xml │ │ │ ├── ic_lightground.xml │ │ │ ├── ic_mic_off.xml │ │ │ ├── ic_mic_on.xml │ │ │ └── ic_more__horizontal.xml │ │ │ ├── layout │ │ │ ├── activity_main.xml │ │ │ ├── fragment_join.xml │ │ │ ├── fragment_room.xml │ │ │ ├── grid_item_participant.xml │ │ │ ├── list_item_footer.xml │ │ │ ├── list_item_header.xml │ │ │ └── list_item_inner_grid.xml │ │ │ ├── menu │ │ │ └── popup_menu.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ ├── ic_launcher.xml │ │ │ └── ic_launcher_round.xml │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ ├── ic_launcher_foreground.png │ │ │ └── ic_launcher_round.png │ │ │ ├── navigation │ │ │ └── navigation_graph.xml │ │ │ ├── values-night │ │ │ └── themes.xml │ │ │ └── values │ │ │ ├── colors.xml │ │ │ ├── ic_launcher_background.xml │ │ │ ├── strings.xml │ │ │ └── themes.xml │ │ └── test │ │ └── java │ │ └── com │ │ └── daily │ │ └── partyline │ │ └── ExampleUnitTest.kt │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ └── wrapper │ │ ├── gradle-wrapper.jar │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ └── settings.gradle ├── ios ├── .gitignore ├── Party Line.xcodeproj │ ├── project.pbxproj │ ├── project.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ └── xcshareddata │ │ └── xcschemes │ │ └── Party Line.xcscheme ├── Party Line │ ├── API │ │ ├── Action.swift │ │ ├── Client.swift │ │ ├── Events.swift │ │ ├── Identifiers.swift │ │ ├── Participant.swift │ │ └── Room.swift │ ├── Auxiliaries │ │ ├── JSONValue.swift │ │ └── Message.swift │ ├── Extensions │ │ ├── Binding+Extensions.swift │ │ ├── Color+Extensions.swift │ │ └── JSONDecoder.swift │ ├── Info.plist │ ├── PartyLineApp.swift │ ├── Preview Content │ │ └── Preview Assets.xcassets │ │ │ └── Contents.json │ ├── Resources │ │ ├── Assets.xcassets │ │ │ ├── AppIcon.appiconset │ │ │ │ ├── Contents.json │ │ │ │ ├── Icon-60@2x.png │ │ │ │ ├── Icon-60@3x.png │ │ │ │ ├── Icon-Notification@2x.png │ │ │ │ ├── Icon-Notification@3x.png │ │ │ │ ├── Icon-Small-40@2x.png │ │ │ │ ├── Icon-Small-40@3x.png │ │ │ │ ├── Icon-Small@2x.png │ │ │ │ ├── Icon-Small@3x.png │ │ │ │ └── icon.png │ │ │ ├── Contents.json │ │ │ ├── daily │ │ │ │ ├── Contents.json │ │ │ │ ├── accentColor.colorset │ │ │ │ │ └── Contents.json │ │ │ │ ├── backgroundColor.colorset │ │ │ │ │ └── Contents.json │ │ │ │ ├── primaryColor.colorset │ │ │ │ │ └── Contents.json │ │ │ │ ├── secondaryAccentColor.colorset │ │ │ │ │ └── Contents.json │ │ │ │ ├── secondaryColor.colorset │ │ │ │ │ └── Contents.json │ │ │ │ └── textfieldBackgroundColor.colorset │ │ │ │ │ └── Contents.json │ │ │ └── logo.imageset │ │ │ │ ├── Contents.json │ │ │ │ ├── logo-1.pdf │ │ │ │ └── logo.pdf │ │ └── client.html │ ├── View Controllers │ │ └── ActivityViewController.swift │ └── Views │ │ ├── BadgeView.swift │ │ ├── ContentView.swift │ │ ├── HeaderView.swift │ │ ├── InvitationView.swift │ │ ├── LearnMoreView.swift │ │ ├── ParticipantGridItemView.swift │ │ ├── ParticipantsGridView.swift │ │ ├── RoomView.swift │ │ ├── TimeRemainingView.swift │ │ └── WaitingView.swift └── README.md ├── netlify.toml ├── react-native ├── .buckconfig ├── .eslintrc.js ├── .flowconfig ├── .gitattributes ├── .gitignore ├── .prettierrc.js ├── .watchmanconfig ├── README.md ├── __tests__ │ └── App-test.js ├── android │ ├── app │ │ ├── _BUCK │ │ ├── build.gradle │ │ ├── build_defs.bzl │ │ ├── debug.keystore │ │ ├── proguard-rules.pro │ │ └── src │ │ │ ├── debug │ │ │ ├── AndroidManifest.xml │ │ │ └── java │ │ │ │ └── com │ │ │ │ └── audioonlyrn │ │ │ │ └── ReactNativeFlipper.java │ │ │ └── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── java │ │ │ └── com │ │ │ │ └── audioonlyrn │ │ │ │ ├── MainActivity.java │ │ │ │ └── MainApplication.java │ │ │ └── res │ │ │ ├── mipmap-hdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-mdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ ├── ic_launcher.png │ │ │ └── ic_launcher_round.png │ │ │ └── values │ │ │ ├── strings.xml │ │ │ └── styles.xml │ ├── build.gradle │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ └── settings.gradle ├── app.json ├── babel.config.js ├── components │ ├── App.js │ ├── CopyLinkBox.jsx │ ├── Counter.jsx │ ├── Header.jsx │ ├── InCall.jsx │ ├── Menu.jsx │ ├── Participant.jsx │ ├── PreJoinRoom.jsx │ ├── Tray.jsx │ ├── icons │ │ ├── logo.png │ │ ├── logo@2x.png │ │ ├── logo@3x.png │ │ ├── mic.png │ │ ├── mic@2x.png │ │ ├── mic@3x.png │ │ ├── more.png │ │ ├── more@2x.png │ │ ├── more@3x.png │ │ ├── muted.png │ │ ├── muted@2x.png │ │ ├── muted@3x.png │ │ ├── simple_mic.png │ │ ├── simple_mic@2x.png │ │ ├── simple_mic@3x.png │ │ ├── simple_muted.png │ │ ├── simple_muted@2x.png │ │ └── simple_muted@3x.png │ └── theme.js ├── contexts │ └── CallProvider.jsx ├── index.js ├── ios │ ├── AudioOnlyRN-tvOS │ │ └── Info.plist │ ├── AudioOnlyRN-tvOSTests │ │ └── Info.plist │ ├── AudioOnlyRN.xcodeproj │ │ ├── project.pbxproj │ │ └── xcshareddata │ │ │ └── xcschemes │ │ │ ├── AudioOnlyRN-tvOS.xcscheme │ │ │ └── AudioOnlyRN.xcscheme │ ├── AudioOnlyRN.xcworkspace │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata │ │ │ └── IDEWorkspaceChecks.plist │ ├── AudioOnlyRN │ │ ├── AppDelegate.h │ │ ├── AppDelegate.m │ │ ├── Images.xcassets │ │ │ ├── AppIcon.appiconset │ │ │ │ ├── Contents.json │ │ │ │ ├── partylineApp 2 Android.png │ │ │ │ ├── partylineApp 2 iOS@2x.png │ │ │ │ └── partylineApp 2 iOS@3x.png │ │ │ └── Contents.json │ │ ├── Info.plist │ │ ├── LaunchScreen.storyboard │ │ └── main.m │ ├── AudioOnlyRNTests │ │ ├── AudioOnlyRNTests.m │ │ └── Info.plist │ ├── Podfile │ └── Podfile.lock ├── metro.config.js ├── package-lock.json └── package.json ├── react ├── .gitignore ├── README.md ├── package-lock.json ├── package.json ├── public │ ├── favicon.ico │ ├── index.html │ ├── logo192.png │ ├── logo512.png │ ├── manifest.json │ └── robots.txt ├── server │ ├── .gitignore │ ├── README.md │ ├── api-helper.js │ ├── functions │ │ ├── room.js │ │ └── token.js │ ├── package-lock.json │ ├── package.json │ └── sample.env └── src │ ├── App.js │ ├── App.test.js │ ├── CallProvider.jsx │ ├── components │ ├── Audio.jsx │ ├── CopyLinkBox.jsx │ ├── Counter.jsx │ ├── InCall.jsx │ ├── Menu.jsx │ ├── MicIcon.jsx │ ├── MoreIcon.jsx │ ├── MutedIcon.jsx │ ├── Participant.jsx │ ├── PreJoinRoom.jsx │ └── shared │ │ └── SmallText.js │ ├── icons │ ├── logo.svg │ ├── mic.svg │ ├── more.svg │ ├── muted.svg │ ├── simple_mic.svg │ └── simple_muted.svg │ ├── index.css │ ├── index.js │ ├── reportWebVitals.js │ ├── setupTests.js │ ├── theme.js │ └── useClickAway.js ├── screenshot.png └── yarn.lock /README.md: -------------------------------------------------------------------------------- 1 | # Party line: Audio-only demos for React, React Native, iOS, and Android 2 | 3 | ## Built by and with [Daily](https://www.daily.co/) 4 | 5 | ![party line screenshot](screenshot.png) 6 | 7 | Multi-platform audio-only demos, for React, React Native, Android, and iOS. 8 | 9 | See individual folder READMEs for setup instructions. 10 | 11 | Or deploy React and serverless parts instantly with the following button: 12 | 13 | [![Deploy with Netlify](https://www.netlify.com/img/deploy/button.svg)](https://app.netlify.com/start/deploy?repository=https://github.com/daily-demos/party-line) 14 | 15 | For a detailed overview, read our blog post on [building an audio-only app in a weekend.](https://www.daily.co/blog/p/6cf7dfd2-8214-456b-a495-2a089a3a89c7/) 16 | -------------------------------------------------------------------------------- /android/java/.idea/$CACHE_FILE$: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Android 10 | 11 | 12 | LintAndroid 13 | 14 | 15 | PerformanceLintAndroid 16 | 17 | 18 | 19 | 20 | Android 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /android/java/.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /android/java/.idea/.name: -------------------------------------------------------------------------------- 1 | Party line -------------------------------------------------------------------------------- /android/java/.idea/caches/build_file_checksums.ser: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/android/java/.idea/caches/build_file_checksums.ser -------------------------------------------------------------------------------- /android/java/.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /android/java/.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 22 | 23 | -------------------------------------------------------------------------------- /android/java/.idea/jarRepositories.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 9 | 10 | 14 | 15 | 19 | 20 | 24 | 25 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_activity_activity_1_1_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_activity_activity_ktx_1_1_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_annotation_annotation_1_1_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_annotation_annotation_experimental_1_0_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_appcompat_appcompat_1_2_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_appcompat_appcompat_resources_1_2_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_arch_core_core_common_2_1_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_1_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_asynclayoutinflater_asynclayoutinflater_1_0_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_cardview_cardview_1_0_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_collection_collection_1_1_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_2_0_4_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_solver_2_0_4.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_coordinatorlayout_coordinatorlayout_1_1_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_core_core_1_3_2_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_core_core_ktx_1_1_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_customview_customview_1_1_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_databinding_viewbinding_4_1_2_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_documentfile_documentfile_1_0_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_drawerlayout_drawerlayout_1_1_1_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_dynamicanimation_dynamicanimation_1_0_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_emoji_emoji_1_2_0_alpha03_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_emoji_emoji_appcompat_1_2_0_alpha03_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_emoji_emoji_bundled_1_2_0_alpha03_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_fragment_fragment_1_2_4_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_ui_1_0_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_legacy_legacy_support_core_utils_1_0_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_legacy_legacy_support_v4_1_0_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_2_2_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_2_0_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_2_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_2_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_ktx_2_2_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_2_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_ktx_2_2_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_savedstate_2_2_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_localbroadcastmanager_localbroadcastmanager_1_0_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_media_media_1_0_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_navigation_navigation_common_2_3_3_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_navigation_navigation_common_ktx_2_3_3_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_navigation_navigation_fragment_2_3_3_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_navigation_navigation_runtime_2_3_3_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_navigation_navigation_runtime_ktx_2_3_3_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_navigation_navigation_testing_2_3_3_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_navigation_navigation_ui_2_3_3_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_print_print_1_0_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_recyclerview_recyclerview_1_2_0_beta02_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_savedstate_savedstate_1_0_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_slidingpanelayout_slidingpanelayout_1_0_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_swiperefreshlayout_swiperefreshlayout_1_0_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_test_core_1_3_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_test_espresso_espresso_core_3_3_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_test_espresso_espresso_idling_resource_3_3_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_test_ext_junit_1_1_2_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_test_monitor_1_3_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_test_runner_1_3_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_transition_transition_1_2_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_transition_transition_1_3_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_1_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_1_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_1_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_viewpager2_viewpager2_1_0_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__com_google_android_material_material_1_3_0_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__com_google_code_findbugs_jsr305_2_0_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__com_nabinbhandari_android_permissions_3_8_aar.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__com_squareup_javawriter_2_1_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__javax_inject_javax_inject_1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__junit_junit_4_12.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__junit_junit_4_13_2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__org_hamcrest_hamcrest_core_1_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__org_hamcrest_hamcrest_integration_1_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__org_hamcrest_hamcrest_library_1_3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__org_jetbrains_annotations_13_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_3_71.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_3_71.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_android_1_3_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_core_1_3_0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /android/java/.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /android/java/app/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /android/java/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /android/java/app/src/androidTest/java/com/daily/partyline/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package com.daily.partyline; 2 | 3 | import android.content.Context; 4 | 5 | import androidx.test.platform.app.InstrumentationRegistry; 6 | import androidx.test.ext.junit.runners.AndroidJUnit4; 7 | 8 | import org.junit.Test; 9 | import org.junit.runner.RunWith; 10 | 11 | import static org.junit.Assert.*; 12 | 13 | /** 14 | * Instrumented test, which will execute on an Android device. 15 | * 16 | * @see Testing documentation 17 | */ 18 | @RunWith(AndroidJUnit4.class) 19 | public class ExampleInstrumentedTest { 20 | @Test 21 | public void useAppContext() { 22 | // Context of the app under test. 23 | Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext(); 24 | assertEquals("com.daily.audioonly", appContext.getPackageName()); 25 | } 26 | } -------------------------------------------------------------------------------- /android/java/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 17 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /android/java/app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/android/java/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /android/java/app/src/main/java/com/daily/partyline/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.daily.partyline; 2 | 3 | import androidx.appcompat.app.AppCompatActivity; 4 | import androidx.appcompat.app.AppCompatDelegate; 5 | 6 | import android.os.Bundle; 7 | import android.view.WindowManager; 8 | 9 | public class MainActivity extends AppCompatActivity { 10 | 11 | @Override 12 | protected void onCreate(Bundle savedInstanceState) { 13 | super.onCreate(savedInstanceState); 14 | setContentView(R.layout.activity_main); 15 | getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /android/java/app/src/main/java/com/daily/partyline/OnItemClickListener.java: -------------------------------------------------------------------------------- 1 | package com.daily.partyline; 2 | 3 | public interface OnItemClickListener { 4 | void onModeratorMute(String Id); 5 | void onModeratorChangeRole(String Id); 6 | void onModeratorMakeModerator(String Id); 7 | void onModeratorEject(String Id); 8 | } 9 | -------------------------------------------------------------------------------- /android/java/app/src/main/java/com/daily/partyline/WebAppClientCallback.java: -------------------------------------------------------------------------------- 1 | package com.daily.partyline; 2 | 3 | public interface WebAppClientCallback { 4 | 5 | void setRoomName(String roomName); 6 | void onJoinedMeeting(); 7 | void onTick(String timer); 8 | void onDataChanged(); 9 | void onForceEject(); 10 | void onError(); 11 | void onRoleChanged(); 12 | void onEndCall(); 13 | void onAudioStateChanged(Boolean isMuted); 14 | } 15 | -------------------------------------------------------------------------------- /android/java/app/src/main/res/drawable/ic_item_mic_on.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 13 | 14 | -------------------------------------------------------------------------------- /android/java/app/src/main/res/drawable/ic_mic_on.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /android/java/app/src/main/res/drawable/ic_more__horizontal.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /android/java/app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 21 | 22 | -------------------------------------------------------------------------------- /android/java/app/src/main/res/layout/list_item_inner_grid.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 23 | 24 | -------------------------------------------------------------------------------- /android/java/app/src/main/res/menu/popup_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 11 | 12 | 15 | 16 | -------------------------------------------------------------------------------- /android/java/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /android/java/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /android/java/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/android/java/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/java/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/android/java/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/java/app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/android/java/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/java/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/android/java/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/java/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/android/java/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/java/app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/android/java/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/java/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/android/java/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/java/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/android/java/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/java/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/android/java/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/java/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/android/java/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/java/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/android/java/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/java/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/android/java/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/java/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/android/java/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/java/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/android/java/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/java/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/android/java/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/java/app/src/main/res/navigation/navigation_graph.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 13 | 16 | 17 | 22 | 27 | 32 | 33 | -------------------------------------------------------------------------------- /android/java/app/src/main/res/values-night/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16 | -------------------------------------------------------------------------------- /android/java/app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FFC8D1DC 4 | #FFE6EAEF 5 | #FFF7F9FA 6 | #FF121A24 7 | #FF6B7785 8 | #FF1BEBB9 9 | #FF00A981 10 | #FF000000 11 | #FFFFFFFF 12 | -------------------------------------------------------------------------------- /android/java/app/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FD6527 4 | -------------------------------------------------------------------------------- /android/java/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Party Line 3 | Learn more about this demo 4 | Learn more 5 | 6 | -------------------------------------------------------------------------------- /android/java/app/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16 | -------------------------------------------------------------------------------- /android/java/app/src/test/java/com/daily/partyline/ExampleUnitTest.java: -------------------------------------------------------------------------------- 1 | package com.daily.partyline; 2 | 3 | import org.junit.Test; 4 | 5 | import static org.junit.Assert.*; 6 | 7 | /** 8 | * Example local unit test, which will execute on the development machine (host). 9 | * 10 | * @see Testing documentation 11 | */ 12 | public class ExampleUnitTest { 13 | @Test 14 | public void addition_isCorrect() { 15 | assertEquals(4, 2 + 2); 16 | } 17 | } -------------------------------------------------------------------------------- /android/java/build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | buildscript { 3 | repositories { 4 | google() 5 | jcenter() 6 | } 7 | dependencies { 8 | classpath "com.android.tools.build:gradle:4.1.2" 9 | classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.3.3" 10 | // NOTE: Do not place your application dependencies here; they belong 11 | // in the individual module build.gradle files 12 | } 13 | } 14 | 15 | allprojects { 16 | repositories { 17 | google() 18 | jcenter() 19 | } 20 | gradle.projectsEvaluated { 21 | tasks.withType(JavaCompile) { 22 | options.compilerArgs << "-Xlint:unchecked" 23 | } 24 | } 25 | 26 | } 27 | 28 | task clean(type: Delete) { 29 | delete rootProject.buildDir 30 | } -------------------------------------------------------------------------------- /android/java/gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | # IDE (e.g. Android Studio) users: 3 | # Gradle settings configured through the IDE *will override* 4 | # any settings specified in this file. 5 | # For more details on how to configure your build environment visit 6 | # http://www.gradle.org/docs/current/userguide/build_environment.html 7 | # Specifies the JVM arguments used for the daemon process. 8 | # The setting is particularly useful for tweaking memory settings. 9 | org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 10 | # When configured, Gradle will run in incubating parallel mode. 11 | # This option should only be used with decoupled projects. More details, visit 12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 13 | # org.gradle.parallel=true 14 | # AndroidX package structure to make it clearer which packages are bundled with the 15 | # Android operating system, and which are packaged with your app"s APK 16 | # https://developer.android.com/topic/libraries/support-library/androidx-rn 17 | android.useAndroidX=true 18 | # Automatically convert third-party libraries to use AndroidX 19 | android.enableJetifier=true -------------------------------------------------------------------------------- /android/java/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/android/java/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /android/java/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Fri Feb 12 19:48:00 EET 2021 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip 7 | -------------------------------------------------------------------------------- /android/java/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | rootProject.name = "Party line" -------------------------------------------------------------------------------- /android/kotlin/.idea/$CACHE_FILE$: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | Android 10 | 11 | 12 | LintAndroid 13 | 14 | 15 | PerformanceLintAndroid 16 | 17 | 18 | 19 | 20 | Android 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /android/kotlin/.idea/.gitignore: -------------------------------------------------------------------------------- 1 | # Default ignored files 2 | /shelf/ 3 | /workspace.xml 4 | -------------------------------------------------------------------------------- /android/kotlin/.idea/.name: -------------------------------------------------------------------------------- 1 | Party line -------------------------------------------------------------------------------- /android/kotlin/.idea/compiler.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /android/kotlin/app/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /android/kotlin/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /android/kotlin/app/src/androidTest/java/com/daily/partyline/ExampleInstrumentedTest.kt: -------------------------------------------------------------------------------- 1 | package com.daily.partyline 2 | 3 | import androidx.test.ext.junit.runners.AndroidJUnit4 4 | import androidx.test.platform.app.InstrumentationRegistry 5 | import org.junit.Assert 6 | import org.junit.Test 7 | import org.junit.runner.RunWith 8 | 9 | /** 10 | * Instrumented test, which will execute on an Android device. 11 | * 12 | * @see [Testing documentation](http://d.android.com/tools/testing) 13 | */ 14 | @RunWith(AndroidJUnit4::class) 15 | class ExampleInstrumentedTest { 16 | @Test 17 | fun useAppContext() { 18 | // Context of the app under test. 19 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext 20 | Assert.assertEquals("com.daily.audioonly", appContext.packageName) 21 | } 22 | } -------------------------------------------------------------------------------- /android/kotlin/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 17 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /android/kotlin/app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/android/kotlin/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /android/kotlin/app/src/main/java/com/daily/partyline/MainActivity.kt: -------------------------------------------------------------------------------- 1 | package com.daily.partyline 2 | 3 | import android.os.Bundle 4 | import android.view.WindowManager 5 | import androidx.appcompat.app.AppCompatActivity 6 | import androidx.appcompat.app.AppCompatDelegate 7 | 8 | class MainActivity : AppCompatActivity() { 9 | override fun onCreate(savedInstanceState: Bundle?) { 10 | super.onCreate(savedInstanceState) 11 | setContentView(R.layout.activity_main) 12 | getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 13 | } 14 | } -------------------------------------------------------------------------------- /android/kotlin/app/src/main/java/com/daily/partyline/OnItemClickListener.kt: -------------------------------------------------------------------------------- 1 | package com.daily.partyline 2 | 3 | interface OnItemClickListener { 4 | open fun onModeratorMute(Id: String?) 5 | open fun onModeratorChangeRole(Id: String?) 6 | open fun onModeratorMakeModerator(Id: String?) 7 | open fun onModeratorEject(Id: String?) 8 | } -------------------------------------------------------------------------------- /android/kotlin/app/src/main/java/com/daily/partyline/WebAppClientCallback.kt: -------------------------------------------------------------------------------- 1 | package com.daily.partyline 2 | 3 | interface WebAppClientCallback { 4 | fun setRoomName(roomName: String?) 5 | fun onJoinedMeeting() 6 | fun onTick(timer: String?) 7 | fun onDataChanged() 8 | fun onForceEject() 9 | fun onError() 10 | fun onRoleChanged() 11 | fun onEndCall() 12 | fun onAudioStateChanged(isMuted: Boolean) 13 | } -------------------------------------------------------------------------------- /android/kotlin/app/src/main/res/drawable/ic_item_mic_on.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 13 | 14 | -------------------------------------------------------------------------------- /android/kotlin/app/src/main/res/drawable/ic_mic_on.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /android/kotlin/app/src/main/res/drawable/ic_more__horizontal.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /android/kotlin/app/src/main/res/layout/activity_main.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 21 | 22 | -------------------------------------------------------------------------------- /android/kotlin/app/src/main/res/layout/list_item_inner_grid.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 23 | 24 | -------------------------------------------------------------------------------- /android/kotlin/app/src/main/res/menu/popup_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 11 | 12 | 15 | 16 | -------------------------------------------------------------------------------- /android/kotlin/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /android/kotlin/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /android/kotlin/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/android/kotlin/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/kotlin/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/android/kotlin/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/kotlin/app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/android/kotlin/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/kotlin/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/android/kotlin/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/kotlin/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/android/kotlin/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/kotlin/app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/android/kotlin/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/kotlin/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/android/kotlin/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/kotlin/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/android/kotlin/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/kotlin/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/android/kotlin/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/kotlin/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/android/kotlin/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/kotlin/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/android/kotlin/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/kotlin/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/android/kotlin/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/kotlin/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/android/kotlin/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /android/kotlin/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/android/kotlin/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png -------------------------------------------------------------------------------- /android/kotlin/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/android/kotlin/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /android/kotlin/app/src/main/res/values-night/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16 | -------------------------------------------------------------------------------- /android/kotlin/app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FFC8D1DC 4 | #FFE6EAEF 5 | #FFF7F9FA 6 | #FF121A24 7 | #FF6B7785 8 | #FF1BEBB9 9 | #FF00A981 10 | #FF000000 11 | #FFFFFFFF 12 | -------------------------------------------------------------------------------- /android/kotlin/app/src/main/res/values/ic_launcher_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #FD6527 4 | -------------------------------------------------------------------------------- /android/kotlin/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | Party Line 3 | Learn more about this demo 4 | Learn more 5 | 6 | -------------------------------------------------------------------------------- /android/kotlin/app/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 16 | -------------------------------------------------------------------------------- /android/kotlin/app/src/test/java/com/daily/partyline/ExampleUnitTest.kt: -------------------------------------------------------------------------------- 1 | package com.daily.partyline 2 | 3 | import org.junit.Assert 4 | import org.junit.Test 5 | 6 | /** 7 | * Example local unit test, which will execute on the development machine (host). 8 | * 9 | * @see [Testing documentation](http://d.android.com/tools/testing) 10 | */ 11 | class ExampleUnitTest { 12 | @Test 13 | fun addition_isCorrect() { 14 | Assert.assertEquals(4, (2 + 2).toLong()) 15 | } 16 | } -------------------------------------------------------------------------------- /android/kotlin/build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | buildscript { 3 | ext.kotlin_version = '1.4.31' 4 | repositories { 5 | google() 6 | jcenter() 7 | } 8 | dependencies { 9 | classpath "com.android.tools.build:gradle:4.1.2" 10 | classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.3.3" 11 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" 12 | // NOTE: Do not place your application dependencies here; they belong 13 | // in the individual module build.gradle files 14 | } 15 | } 16 | 17 | allprojects { 18 | repositories { 19 | google() 20 | jcenter() 21 | } 22 | gradle.projectsEvaluated { 23 | tasks.withType(JavaCompile) { 24 | options.compilerArgs << "-Xlint:unchecked" 25 | } 26 | } 27 | 28 | } 29 | 30 | task clean(type: Delete) { 31 | delete rootProject.buildDir 32 | } -------------------------------------------------------------------------------- /android/kotlin/gradle.properties: -------------------------------------------------------------------------------- 1 | # Project-wide Gradle settings. 2 | # IDE (e.g. Android Studio) users: 3 | # Gradle settings configured through the IDE *will override* 4 | # any settings specified in this file. 5 | # For more details on how to configure your build environment visit 6 | # http://www.gradle.org/docs/current/userguide/build_environment.html 7 | # Specifies the JVM arguments used for the daemon process. 8 | # The setting is particularly useful for tweaking memory settings. 9 | org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 10 | # When configured, Gradle will run in incubating parallel mode. 11 | # This option should only be used with decoupled projects. More details, visit 12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects 13 | # org.gradle.parallel=true 14 | # AndroidX package structure to make it clearer which packages are bundled with the 15 | # Android operating system, and which are packaged with your app"s APK 16 | # https://developer.android.com/topic/libraries/support-library/androidx-rn 17 | android.useAndroidX=true 18 | # Automatically convert third-party libraries to use AndroidX 19 | android.enableJetifier=true -------------------------------------------------------------------------------- /android/kotlin/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/android/kotlin/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /android/kotlin/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Fri Feb 12 19:48:00 EET 2021 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip 7 | -------------------------------------------------------------------------------- /android/kotlin/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | rootProject.name = "Party line" -------------------------------------------------------------------------------- /ios/Party Line.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /ios/Party Line.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /ios/Party Line/API/Action.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | enum Action: CustomStringConvertible { 4 | case muteParticipant 5 | case makeListener 6 | case makeSpeaker 7 | case makeModerator 8 | case ejectParticipant 9 | 10 | var description: String { 11 | switch self { 12 | case .muteParticipant: 13 | return "Mute" 14 | case .makeListener: 15 | return "Demote to Listener" 16 | case .makeSpeaker: 17 | return "Promote to Speaker" 18 | case .makeModerator: 19 | return "Promote to Moderator" 20 | case .ejectParticipant: 21 | return "Eject" 22 | } 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /ios/Party Line/API/Room.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | struct Room: Decodable, Equatable { 4 | enum CodingKeys: String, CodingKey { 5 | case id 6 | case name 7 | case config 8 | } 9 | 10 | struct Config: Decodable, Equatable { 11 | enum CodingKeys: String, CodingKey { 12 | case exp 13 | } 14 | 15 | let expirationDate: Date 16 | 17 | init(from decoder: Decoder) throws { 18 | let container = try decoder.container(keyedBy: CodingKeys.self) 19 | self.expirationDate = Date(timeIntervalSince1970: try container.decode( 20 | TimeInterval.self, 21 | forKey: .exp 22 | )) 23 | } 24 | } 25 | 26 | let id: RoomID 27 | let name: String 28 | let config: Config 29 | } 30 | -------------------------------------------------------------------------------- /ios/Party Line/Extensions/Color+Extensions.swift: -------------------------------------------------------------------------------- 1 | import SwiftUI 2 | 3 | extension Color { 4 | enum Daily { 5 | static let accentColor: Color = .init("daily/accentColor") 6 | static let secondaryAccentColor: Color = .init("daily/secondaryAccentColor") 7 | static let backgroundColor: Color = .init("daily/backgroundColor") 8 | static let textfieldBackgroundColor: Color = .init("daily/textfieldBackgroundColor") 9 | } 10 | } 11 | -------------------------------------------------------------------------------- /ios/Party Line/Extensions/JSONDecoder.swift: -------------------------------------------------------------------------------- 1 | import Foundation 2 | 3 | extension JSONDecoder { 4 | static func daily() -> JSONDecoder { 5 | let decoder = JSONDecoder() 6 | 7 | decoder.dateDecodingStrategy = .custom { decoder in 8 | let container = try decoder.singleValueContainer() 9 | let string = try container.decode(String.self) 10 | 11 | let formatter = ISO8601DateFormatter() 12 | formatter.timeZone = TimeZone(secondsFromGMT: 0) 13 | formatter.formatOptions = [ 14 | .withFullDate, 15 | .withFullTime, 16 | .withDashSeparatorInDate, 17 | .withFractionalSeconds 18 | ] 19 | 20 | guard let date = formatter.date(from: string) else { 21 | throw DecodingError.dataCorruptedError( 22 | in: container, 23 | debugDescription: "Not a valid ISO8601 date" 24 | ) 25 | } 26 | 27 | return date 28 | } 29 | 30 | return decoder 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /ios/Party Line/PartyLineApp.swift: -------------------------------------------------------------------------------- 1 | import SwiftUI 2 | import os 3 | 4 | let logger: Logger = .init() 5 | 6 | @main 7 | struct PartyLineApp: App { 8 | var body: some Scene { 9 | WindowGroup { 10 | ContentView() 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /ios/Party Line/Preview Content/Preview Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /ios/Party Line/Resources/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/ios/Party Line/Resources/Assets.xcassets/AppIcon.appiconset/Icon-60@2x.png -------------------------------------------------------------------------------- /ios/Party Line/Resources/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/ios/Party Line/Resources/Assets.xcassets/AppIcon.appiconset/Icon-60@3x.png -------------------------------------------------------------------------------- /ios/Party Line/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Notification@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/ios/Party Line/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Notification@2x.png -------------------------------------------------------------------------------- /ios/Party Line/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Notification@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/ios/Party Line/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Notification@3x.png -------------------------------------------------------------------------------- /ios/Party Line/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/ios/Party Line/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@2x.png -------------------------------------------------------------------------------- /ios/Party Line/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/ios/Party Line/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Small-40@3x.png -------------------------------------------------------------------------------- /ios/Party Line/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/ios/Party Line/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Small@2x.png -------------------------------------------------------------------------------- /ios/Party Line/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/ios/Party Line/Resources/Assets.xcassets/AppIcon.appiconset/Icon-Small@3x.png -------------------------------------------------------------------------------- /ios/Party Line/Resources/Assets.xcassets/AppIcon.appiconset/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/ios/Party Line/Resources/Assets.xcassets/AppIcon.appiconset/icon.png -------------------------------------------------------------------------------- /ios/Party Line/Resources/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /ios/Party Line/Resources/Assets.xcassets/daily/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "author" : "xcode", 4 | "version" : 1 5 | }, 6 | "properties" : { 7 | "provides-namespace" : true 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /ios/Party Line/Resources/Assets.xcassets/daily/accentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0.694", 9 | "green" : "0.910", 10 | "red" : "0.097" 11 | } 12 | }, 13 | "idiom" : "universal" 14 | }, 15 | { 16 | "appearances" : [ 17 | { 18 | "appearance" : "luminosity", 19 | "value" : "dark" 20 | } 21 | ], 22 | "color" : { 23 | "color-space" : "display-p3", 24 | "components" : { 25 | "alpha" : "1.000", 26 | "blue" : "0.510", 27 | "green" : "0.577", 28 | "red" : "0.136" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | } 33 | ], 34 | "info" : { 35 | "author" : "xcode", 36 | "version" : 1 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /ios/Party Line/Resources/Assets.xcassets/daily/backgroundColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0.980", 9 | "green" : "0.977", 10 | "red" : "0.965" 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.141", 27 | "green" : "0.102", 28 | "red" : "0.071" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | } 33 | ], 34 | "info" : { 35 | "author" : "xcode", 36 | "version" : 1 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /ios/Party Line/Resources/Assets.xcassets/daily/primaryColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0.141", 9 | "green" : "0.102", 10 | "red" : "0.071" 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.980", 27 | "green" : "0.977", 28 | "red" : "0.965" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | } 33 | ], 34 | "info" : { 35 | "author" : "xcode", 36 | "version" : 1 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /ios/Party Line/Resources/Assets.xcassets/daily/secondaryAccentColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0.863", 9 | "green" : "0.820", 10 | "red" : "0.784" 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.337", 27 | "green" : "0.247", 28 | "red" : "0.169" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | } 33 | ], 34 | "info" : { 35 | "author" : "xcode", 36 | "version" : 1 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /ios/Party Line/Resources/Assets.xcassets/daily/secondaryColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0.239", 9 | "green" : "0.176", 10 | "red" : "0.122" 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.933", 27 | "green" : "0.918", 28 | "red" : "0.902" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | } 33 | ], 34 | "info" : { 35 | "author" : "xcode", 36 | "version" : 1 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /ios/Party Line/Resources/Assets.xcassets/daily/textfieldBackgroundColor.colorset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "colors" : [ 3 | { 4 | "color" : { 5 | "color-space" : "srgb", 6 | "components" : { 7 | "alpha" : "1.000", 8 | "blue" : "0.933", 9 | "green" : "0.918", 10 | "red" : "0.902" 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.239", 27 | "green" : "0.176", 28 | "red" : "0.122" 29 | } 30 | }, 31 | "idiom" : "universal" 32 | } 33 | ], 34 | "info" : { 35 | "author" : "xcode", 36 | "version" : 1 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /ios/Party Line/Resources/Assets.xcassets/logo.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "filename" : "logo.pdf", 5 | "idiom" : "universal" 6 | }, 7 | { 8 | "appearances" : [ 9 | { 10 | "appearance" : "luminosity", 11 | "value" : "dark" 12 | } 13 | ], 14 | "filename" : "logo-1.pdf", 15 | "idiom" : "universal" 16 | } 17 | ], 18 | "info" : { 19 | "author" : "xcode", 20 | "version" : 1 21 | }, 22 | "properties" : { 23 | "preserves-vector-representation" : true 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /ios/Party Line/Resources/Assets.xcassets/logo.imageset/logo-1.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/ios/Party Line/Resources/Assets.xcassets/logo.imageset/logo-1.pdf -------------------------------------------------------------------------------- /ios/Party Line/Resources/Assets.xcassets/logo.imageset/logo.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/ios/Party Line/Resources/Assets.xcassets/logo.imageset/logo.pdf -------------------------------------------------------------------------------- /ios/Party Line/View Controllers/ActivityViewController.swift: -------------------------------------------------------------------------------- 1 | import UIKit 2 | import SwiftUI 3 | 4 | struct ActivityViewController: UIViewControllerRepresentable { 5 | var activityItems: [Any] 6 | var applicationActivities: [UIActivity]? = nil 7 | 8 | func makeUIViewController( 9 | context: UIViewControllerRepresentableContext 10 | ) -> UIActivityViewController { 11 | return UIActivityViewController( 12 | activityItems: activityItems, 13 | applicationActivities: applicationActivities 14 | ) 15 | } 16 | 17 | func updateUIViewController( 18 | _ uiViewController: UIActivityViewController, 19 | context: UIViewControllerRepresentableContext 20 | ) { 21 | 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /ios/Party Line/Views/BadgeView.swift: -------------------------------------------------------------------------------- 1 | import SwiftUI 2 | 3 | struct BadgeView: View 4 | where 5 | Content: View 6 | { 7 | let content: Content 8 | 9 | init(_ content: Content) { 10 | self.content = content 11 | } 12 | 13 | var body: some View { 14 | self.content 15 | .padding(5.0) 16 | .frame(width: 32.0, height: 32.0) 17 | .background( 18 | Circle() 19 | .foregroundColor(Color.white) 20 | ) 21 | } 22 | } 23 | 24 | struct BadgeView_Previews: PreviewProvider { 25 | static var previews: some View { 26 | BadgeView(Image(systemName: "mic")) 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /ios/Party Line/Views/HeaderView.swift: -------------------------------------------------------------------------------- 1 | import SwiftUI 2 | 3 | struct HeaderView: View { 4 | var body: some View { 5 | VStack(alignment: .leading) { 6 | HStack(alignment: .center) { 7 | Text("Party line") 8 | .font(.largeTitle) 9 | .bold() 10 | Spacer() 11 | Image("logo") 12 | } 13 | Text("An audio API demo from Daily") 14 | .font(.footnote) 15 | .foregroundColor(.secondary) 16 | } 17 | } 18 | } 19 | 20 | struct HeaderView_Previews: PreviewProvider { 21 | static var previews: some View { 22 | HeaderView() 23 | .background(Color.Daily.backgroundColor) 24 | .previewLayout(.sizeThatFits) 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /ios/Party Line/Views/LearnMoreView.swift: -------------------------------------------------------------------------------- 1 | import SwiftUI 2 | 3 | struct LearnMoreView: View { 4 | private var url: URL { 5 | // FIXME: Update URL 6 | URL(string: "https://daily.co")! 7 | } 8 | 9 | var body: some View { 10 | HStack { 11 | Spacer() 12 | Link("Learn more about this demo", destination: self.url) 13 | .font(.footnote) 14 | Spacer() 15 | } 16 | } 17 | } 18 | 19 | struct LearnMoreView_Previews: PreviewProvider { 20 | static var previews: some View { 21 | LearnMoreView() 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /ios/Party Line/Views/TimeRemainingView.swift: -------------------------------------------------------------------------------- 1 | import SwiftUI 2 | 3 | struct TimeRemainingView: View { 4 | var timeRemaining: TimeInterval? 5 | 6 | static let formatter: DateComponentsFormatter = { 7 | let formatter = DateComponentsFormatter() 8 | formatter.allowedUnits = [.minute, .second] 9 | formatter.zeroFormattingBehavior = .pad 10 | return formatter 11 | }() 12 | 13 | var timeRemainingString: String { 14 | guard let timeRemaining = self.timeRemaining else { 15 | return "Demo ended" 16 | } 17 | 18 | let timeRemainingString = Self.formatter.string( 19 | from: timeRemaining 20 | )! 21 | 22 | return "Demo ends in \(timeRemainingString)" 23 | } 24 | 25 | var timeRemainingColor: Color { 26 | guard let timeRemaining = self.timeRemaining else { 27 | return .red 28 | } 29 | 30 | return timeRemaining > 10.0 ? .secondary : .red 31 | } 32 | 33 | var body: some View { 34 | Text(self.timeRemainingString) 35 | .foregroundColor(self.timeRemainingColor) 36 | .font(.footnote) 37 | } 38 | } 39 | 40 | struct TimeRemainingView_Previews: PreviewProvider { 41 | static var previews: some View { 42 | TimeRemainingView(timeRemaining: 42.0) 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /ios/Party Line/Views/WaitingView.swift: -------------------------------------------------------------------------------- 1 | import SwiftUI 2 | 3 | struct WaitingView: View { 4 | var body: some View { 5 | VStack(alignment: .center, spacing: 10.0) { 6 | ProgressView() 7 | Text("Waiting for Room …") 8 | .bold() 9 | } 10 | .padding() 11 | .overlay( 12 | RoundedRectangle(cornerRadius: 10) 13 | .stroke(Color.secondary.opacity(0.25)) 14 | ) 15 | } 16 | } 17 | 18 | struct WaitingView_Previews: PreviewProvider { 19 | static var previews: some View { 20 | WaitingView() 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /netlify.toml: -------------------------------------------------------------------------------- 1 | [build] 2 | # we put server/functions inside react so we can do a deploy button for both 3 | # netlify only allows a single deploy button (and related toml) 4 | functions = "server/functions" 5 | 6 | # react and subfolders are the only parts that can be netlify deployed it is our base 7 | base = "./react/" 8 | 9 | command = "npm run build" 10 | 11 | publish = "build/" 12 | 13 | [build.environment] 14 | # suppress failures for for build warnings 15 | CI = "false" 16 | 17 | [template.environment] 18 | DAILY_API_KEY = "Replace with Daily API key" -------------------------------------------------------------------------------- /react-native/.buckconfig: -------------------------------------------------------------------------------- 1 | 2 | [android] 3 | target = Google Inc.:Google APIs:23 4 | 5 | [maven_repositories] 6 | central = https://repo1.maven.org/maven2 7 | -------------------------------------------------------------------------------- /react-native/.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | extends: '@react-native-community', 4 | }; 5 | -------------------------------------------------------------------------------- /react-native/.gitattributes: -------------------------------------------------------------------------------- 1 | *.pbxproj -text 2 | -------------------------------------------------------------------------------- /react-native/.gitignore: -------------------------------------------------------------------------------- 1 | # OSX 2 | # 3 | .DS_Store 4 | 5 | # Xcode 6 | # 7 | build/ 8 | *.pbxuser 9 | !default.pbxuser 10 | *.mode1v3 11 | !default.mode1v3 12 | *.mode2v3 13 | !default.mode2v3 14 | *.perspectivev3 15 | !default.perspectivev3 16 | xcuserdata 17 | *.xccheckout 18 | *.moved-aside 19 | DerivedData 20 | *.hmap 21 | *.ipa 22 | *.xcuserstate 23 | 24 | # Android/IntelliJ 25 | # 26 | build/ 27 | .idea 28 | .gradle 29 | local.properties 30 | *.iml 31 | 32 | # node.js 33 | # 34 | node_modules/ 35 | npm-debug.log 36 | yarn-error.log 37 | 38 | # BUCK 39 | buck-out/ 40 | \.buckd/ 41 | *.keystore 42 | !debug.keystore 43 | 44 | # fastlane 45 | # 46 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 47 | # screenshots whenever they are needed. 48 | # For more information about the recommended setup visit: 49 | # https://docs.fastlane.tools/best-practices/source-control/ 50 | 51 | */fastlane/report.xml 52 | */fastlane/Preview.html 53 | */fastlane/screenshots 54 | 55 | # Bundle artifact 56 | *.jsbundle 57 | 58 | # CocoaPods 59 | /ios/Pods/ 60 | -------------------------------------------------------------------------------- /react-native/.prettierrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | bracketSpacing: false, 3 | jsxBracketSameLine: true, 4 | singleQuote: true, 5 | trailingComma: 'all', 6 | }; 7 | -------------------------------------------------------------------------------- /react-native/.watchmanconfig: -------------------------------------------------------------------------------- 1 | {} -------------------------------------------------------------------------------- /react-native/__tests__/App-test.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @format 3 | */ 4 | 5 | import 'react-native'; 6 | import React from 'react'; 7 | import App from '../App'; 8 | 9 | // Note: test renderer must be required after react-native. 10 | import renderer from 'react-test-renderer'; 11 | 12 | it('renders correctly', () => { 13 | renderer.create(); 14 | }); 15 | -------------------------------------------------------------------------------- /react-native/android/app/build_defs.bzl: -------------------------------------------------------------------------------- 1 | """Helper definitions to glob .aar and .jar targets""" 2 | 3 | def create_aar_targets(aarfiles): 4 | for aarfile in aarfiles: 5 | name = "aars__" + aarfile[aarfile.rindex("/") + 1:aarfile.rindex(".aar")] 6 | lib_deps.append(":" + name) 7 | android_prebuilt_aar( 8 | name = name, 9 | aar = aarfile, 10 | ) 11 | 12 | def create_jar_targets(jarfiles): 13 | for jarfile in jarfiles: 14 | name = "jars__" + jarfile[jarfile.rindex("/") + 1:jarfile.rindex(".jar")] 15 | lib_deps.append(":" + name) 16 | prebuilt_jar( 17 | name = name, 18 | binary_jar = jarfile, 19 | ) 20 | -------------------------------------------------------------------------------- /react-native/android/app/debug.keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/react-native/android/app/debug.keystore -------------------------------------------------------------------------------- /react-native/android/app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in /usr/local/Cellar/android-sdk/24.3.3/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | -------------------------------------------------------------------------------- /react-native/android/app/src/debug/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /react-native/android/app/src/main/java/com/audioonlyrn/MainActivity.java: -------------------------------------------------------------------------------- 1 | package com.audioonlyrn; 2 | 3 | import com.facebook.react.ReactActivity; 4 | 5 | public class MainActivity extends ReactActivity { 6 | 7 | /** 8 | * Returns the name of the main component registered from JavaScript. This is used to schedule 9 | * rendering of the component. 10 | */ 11 | @Override 12 | protected String getMainComponentName() { 13 | return "AudioOnlyRN"; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /react-native/android/app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/react-native/android/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /react-native/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/react-native/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /react-native/android/app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/react-native/android/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /react-native/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/react-native/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /react-native/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/react-native/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /react-native/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/react-native/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /react-native/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/react-native/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /react-native/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/react-native/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /react-native/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/react-native/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /react-native/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/react-native/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /react-native/android/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | AudioOnlyRN 3 | 4 | -------------------------------------------------------------------------------- /react-native/android/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /react-native/android/build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | 3 | buildscript { 4 | ext { 5 | buildToolsVersion = "29.0.2" 6 | minSdkVersion = 24 7 | compileSdkVersion = 29 8 | targetSdkVersion = 29 9 | } 10 | repositories { 11 | google() 12 | jcenter() 13 | } 14 | dependencies { 15 | classpath("com.android.tools.build:gradle:3.5.3") 16 | // NOTE: Do not place your application dependencies here; they belong 17 | // in the individual module build.gradle files 18 | } 19 | } 20 | 21 | allprojects { 22 | repositories { 23 | mavenLocal() 24 | maven { 25 | // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm 26 | url("$rootDir/../node_modules/react-native/android") 27 | } 28 | maven { 29 | // Android JSC is installed from npm 30 | url("$rootDir/../node_modules/jsc-android/dist") 31 | } 32 | 33 | google() 34 | jcenter() 35 | maven { url 'https://www.jitpack.io' } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /react-native/android/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/react-native/android/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /react-native/android/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | distributionBase=GRADLE_USER_HOME 2 | distributionPath=wrapper/dists 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.2-all.zip 4 | zipStoreBase=GRADLE_USER_HOME 5 | zipStorePath=wrapper/dists 6 | -------------------------------------------------------------------------------- /react-native/android/settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = 'AudioOnlyRN' 2 | apply from: file("../node_modules/@react-native-community/cli-platform-android/native_modules.gradle"); applyNativeModulesSettingsGradle(settings) 3 | include ':app' 4 | -------------------------------------------------------------------------------- /react-native/app.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "AudioOnlyRN", 3 | "displayName": "AudioOnlyRN" 4 | } -------------------------------------------------------------------------------- /react-native/babel.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | presets: ['module:metro-react-native-babel-preset'], 3 | }; 4 | -------------------------------------------------------------------------------- /react-native/components/Header.jsx: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import {StyleSheet, View, Text, Image} from 'react-native'; 3 | import theme from './theme'; 4 | 5 | function Header() { 6 | return ( 7 | 8 | 9 | Party line 10 | logo 15 | 16 | An audio API demo from Daily 17 | 18 | ); 19 | } 20 | 21 | const styles = StyleSheet.create({ 22 | header: { 23 | paddingHorizontal: 24, 24 | }, 25 | headerTop: { 26 | alignItems: 'center', 27 | justifyContent: 'space-between', 28 | flexDirection: 'row', 29 | }, 30 | title: { 31 | fontSize: theme.fontSize.xxlarge, 32 | marginHorizontal: 0, 33 | color: theme.colors.blueDark, 34 | fontWeight: '600', 35 | }, 36 | logo: { 37 | height: 24, 38 | }, 39 | smallText: { 40 | fontSize: theme.fontSize.large, 41 | color: theme.colors.greyDark, 42 | fontWeight: '400', 43 | marginTop: 8, 44 | marginBottom: 24, 45 | marginHorizontal: 0, 46 | }, 47 | }); 48 | 49 | export default Header; 50 | -------------------------------------------------------------------------------- /react-native/components/icons/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/react-native/components/icons/logo.png -------------------------------------------------------------------------------- /react-native/components/icons/logo@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/react-native/components/icons/logo@2x.png -------------------------------------------------------------------------------- /react-native/components/icons/logo@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/react-native/components/icons/logo@3x.png -------------------------------------------------------------------------------- /react-native/components/icons/mic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/react-native/components/icons/mic.png -------------------------------------------------------------------------------- /react-native/components/icons/mic@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/react-native/components/icons/mic@2x.png -------------------------------------------------------------------------------- /react-native/components/icons/mic@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/react-native/components/icons/mic@3x.png -------------------------------------------------------------------------------- /react-native/components/icons/more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/react-native/components/icons/more.png -------------------------------------------------------------------------------- /react-native/components/icons/more@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/react-native/components/icons/more@2x.png -------------------------------------------------------------------------------- /react-native/components/icons/more@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/react-native/components/icons/more@3x.png -------------------------------------------------------------------------------- /react-native/components/icons/muted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/react-native/components/icons/muted.png -------------------------------------------------------------------------------- /react-native/components/icons/muted@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/react-native/components/icons/muted@2x.png -------------------------------------------------------------------------------- /react-native/components/icons/muted@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/react-native/components/icons/muted@3x.png -------------------------------------------------------------------------------- /react-native/components/icons/simple_mic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/react-native/components/icons/simple_mic.png -------------------------------------------------------------------------------- /react-native/components/icons/simple_mic@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/react-native/components/icons/simple_mic@2x.png -------------------------------------------------------------------------------- /react-native/components/icons/simple_mic@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/react-native/components/icons/simple_mic@3x.png -------------------------------------------------------------------------------- /react-native/components/icons/simple_muted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/react-native/components/icons/simple_muted.png -------------------------------------------------------------------------------- /react-native/components/icons/simple_muted@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/react-native/components/icons/simple_muted@2x.png -------------------------------------------------------------------------------- /react-native/components/icons/simple_muted@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/react-native/components/icons/simple_muted@3x.png -------------------------------------------------------------------------------- /react-native/components/theme.js: -------------------------------------------------------------------------------- 1 | const theme = { 2 | colors: { 3 | blue: '#1f2d3d', 4 | blueDark: '#121a24', 5 | blueLight: '#2b3f56', 6 | cyan: '#00c9df', 7 | cyanDark: '#00a4b7', 8 | cyanLight: '#e2fbfd', 9 | green: '#72cc18', 10 | greenDark: '#62a60f', 11 | greenLight: '#eefae0', 12 | grey: '#c8d1dc', 13 | greyDark: '#6b7785', 14 | greyLight: '#e6eaef', 15 | greyLightest: '#f7f9fa', 16 | orange: '#fb651e', 17 | orangeDark: '#d48200', 18 | orangeLight: '#fef2d8', 19 | red: '#e71115', 20 | redDark: '#bb0c0c', 21 | redLight: '#fddddd', 22 | white: '#ffffff', 23 | turquoise: '#1bebb9', 24 | teal: '#14997a', 25 | }, 26 | fontSize: { 27 | small: 11, 28 | base: 12, 29 | med: 14, 30 | large: 16, 31 | xlarge: 22, 32 | xxlarge: 32, 33 | }, 34 | fontFamily: { 35 | regular: 'Helvetica, Arial, sans-serif', 36 | }, 37 | }; 38 | 39 | export default theme; 40 | -------------------------------------------------------------------------------- /react-native/index.js: -------------------------------------------------------------------------------- 1 | /** 2 | * @format 3 | */ 4 | 5 | import {AppRegistry} from 'react-native'; 6 | import App from './components/App'; 7 | import {name as appName} from './app.json'; 8 | 9 | AppRegistry.registerComponent(appName, () => App); 10 | -------------------------------------------------------------------------------- /react-native/ios/AudioOnlyRN-tvOSTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /react-native/ios/AudioOnlyRN.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /react-native/ios/AudioOnlyRN.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IDEDidComputeMac32BitWarning 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /react-native/ios/AudioOnlyRN/AppDelegate.h: -------------------------------------------------------------------------------- 1 | #import 2 | #import 3 | 4 | @interface AppDelegate : UIResponder 5 | 6 | @property (nonatomic, strong) UIWindow *window; 7 | 8 | @end 9 | -------------------------------------------------------------------------------- /react-native/ios/AudioOnlyRN/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images": [ 3 | { 4 | "idiom": "iphone", 5 | "size": "29x29", 6 | "scale": "2x" 7 | }, 8 | { 9 | "idiom": "iphone", 10 | "size": "29x29", 11 | "scale": "3x" 12 | }, 13 | { 14 | "idiom": "iphone", 15 | "size": "40x40", 16 | "scale": "2x" 17 | }, 18 | { 19 | "idiom": "iphone", 20 | "size": "40x40", 21 | "scale": "3x" 22 | }, 23 | { 24 | "idiom": "iphone", 25 | "size": "60x60", 26 | "scale": "2x" 27 | }, 28 | { 29 | "filename": "partylineApp 2 iOS@2x.png", 30 | "idiom": "iphone", 31 | "scale": "2x", 32 | "size": "60x60" 33 | }, 34 | { 35 | "filename": "partylineApp 2 iOS@3x.png", 36 | "idiom": "iphone", 37 | "scale": "3x", 38 | "size": "60x60" 39 | }, 40 | { 41 | "idiom": "ios-marketing", 42 | "scale": "1x", 43 | "size": "1024x1024" 44 | }, 45 | { 46 | "filename": "partylineApp 2 Android.png", 47 | "idiom": "mac", 48 | "scale": "1x", 49 | "size": "512x512" 50 | } 51 | ], 52 | "info": { 53 | "version": 1, 54 | "author": "xcode" 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /react-native/ios/AudioOnlyRN/Images.xcassets/AppIcon.appiconset/partylineApp 2 Android.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/react-native/ios/AudioOnlyRN/Images.xcassets/AppIcon.appiconset/partylineApp 2 Android.png -------------------------------------------------------------------------------- /react-native/ios/AudioOnlyRN/Images.xcassets/AppIcon.appiconset/partylineApp 2 iOS@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/react-native/ios/AudioOnlyRN/Images.xcassets/AppIcon.appiconset/partylineApp 2 iOS@2x.png -------------------------------------------------------------------------------- /react-native/ios/AudioOnlyRN/Images.xcassets/AppIcon.appiconset/partylineApp 2 iOS@3x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/react-native/ios/AudioOnlyRN/Images.xcassets/AppIcon.appiconset/partylineApp 2 iOS@3x.png -------------------------------------------------------------------------------- /react-native/ios/AudioOnlyRN/Images.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } 7 | -------------------------------------------------------------------------------- /react-native/ios/AudioOnlyRN/main.m: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | #import "AppDelegate.h" 4 | 5 | int main(int argc, char * argv[]) { 6 | @autoreleasepool { 7 | return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /react-native/ios/AudioOnlyRNTests/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | 24 | 25 | -------------------------------------------------------------------------------- /react-native/ios/Podfile: -------------------------------------------------------------------------------- 1 | require_relative '../node_modules/react-native/scripts/react_native_pods' 2 | require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules' 3 | 4 | platform :ios, '10.0' 5 | 6 | target 'AudioOnlyRN' do 7 | config = use_native_modules! 8 | 9 | use_react_native!(:path => config["reactNativePath"]) 10 | 11 | target 'AudioOnlyRNTests' do 12 | inherit! :complete 13 | # Pods for testing 14 | end 15 | 16 | # Enables Flipper. 17 | # 18 | # Note that if you have use_frameworks! enabled, Flipper will not work and 19 | # you should disable these next few lines. 20 | use_flipper! 21 | post_install do |installer| 22 | flipper_post_install(installer) 23 | end 24 | end 25 | 26 | target 'AudioOnlyRN-tvOS' do 27 | # Pods for AudioOnlyRN-tvOS 28 | 29 | target 'AudioOnlyRN-tvOSTests' do 30 | inherit! :search_paths 31 | # Pods for testing 32 | end 33 | end 34 | -------------------------------------------------------------------------------- /react-native/metro.config.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Metro configuration for React Native 3 | * https://github.com/facebook/react-native 4 | * 5 | * @format 6 | */ 7 | 8 | module.exports = { 9 | resolver: { 10 | sourceExts: ['jsx', 'js'], 11 | }, 12 | transformer: { 13 | getTransformOptions: async () => ({ 14 | transform: { 15 | experimentalImportSupport: false, 16 | inlineRequires: false, 17 | }, 18 | }), 19 | }, 20 | }; 21 | -------------------------------------------------------------------------------- /react-native/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "AudioOnlyRN", 3 | "version": "0.0.1", 4 | "private": true, 5 | "scripts": { 6 | "android": "react-native run-android", 7 | "ios": "react-native run-ios", 8 | "start": "react-native start", 9 | "test": "jest", 10 | "lint": "eslint ." 11 | }, 12 | "dependencies": { 13 | "@daily-co/react-native-daily-js": "^0.7.1", 14 | "@daily-co/react-native-webrtc": "^1.75.8", 15 | "@react-native-clipboard/clipboard": "^1.6.0", 16 | "@react-native-community/async-storage": "^1.12.1", 17 | "react": "16.13.1", 18 | "react-native": "0.63.4", 19 | "react-native-background-timer": "^2.4.1", 20 | "react-native-material-menu": "^1.2.0" 21 | }, 22 | "devDependencies": { 23 | "@babel/core": "^7.8.4", 24 | "@babel/runtime": "^7.8.4", 25 | "@react-native-community/eslint-config": "^1.1.0", 26 | "babel-jest": "^25.1.0", 27 | "eslint": "^6.5.1", 28 | "jest": "^25.1.0", 29 | "metro-react-native-babel-preset": "^0.59.0", 30 | "react-test-renderer": "16.13.1" 31 | }, 32 | "jest": { 33 | "preset": "react-native" 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /react/.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.js 7 | 8 | # testing 9 | /coverage 10 | 11 | # production 12 | /build 13 | 14 | # misc 15 | .DS_Store 16 | .env 17 | .env.local 18 | .env.development.local 19 | .env.test.local 20 | .env.production.local 21 | 22 | npm-debug.log* 23 | yarn-debug.log* 24 | yarn-error.log* 25 | -------------------------------------------------------------------------------- /react/README.md: -------------------------------------------------------------------------------- 1 | # Party line: An audio-only demo for React 2 | 3 | ## Built by and with [Daily](https://docs.daily.co/reference) 4 | 5 | --- 6 | 7 | This app is built using [Create React App](https://github.com/facebook/create-react-app). 8 | 9 | To run locally: 10 | 11 | - Clone this repo locally 12 | - Run the following 13 | 14 | ```terminal 15 | npm i 16 | npm run start 17 | ``` 18 | 19 | ## Testing 20 | 21 | To add more participants to your call, you can run additional windows locally or take advantage of the React demo currently hosted at [partyline.daily.co](https://partyline.daily.co/). 22 | 23 | ## Deployment 24 | 25 | Once you've deployed your own server, make sure to update the necessary URLs as noted in: 26 | 27 | - react/src/CallProvider.jsx 28 | 29 | ## A note for Safari users 30 | 31 | Safari prevents the auto playing of audio by default. You can enable this in Preferences > Websites > Auto-Play 32 | -------------------------------------------------------------------------------- /react/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "audio-only-web", 3 | "version": "0.1.0", 4 | "private": true, 5 | "dependencies": { 6 | "@daily-co/daily-js": "^0.27.0", 7 | "@testing-library/jest-dom": "^5.11.4", 8 | "@testing-library/react": "^11.1.0", 9 | "@testing-library/user-event": "^12.1.10", 10 | "react": "^17.0.1", 11 | "react-dom": "^17.0.1", 12 | "react-scripts": "4.0.2", 13 | "styled-components": "^5.2.1", 14 | "web-vitals": "^1.0.1" 15 | }, 16 | "scripts": { 17 | "start": "react-scripts start", 18 | "prebuild": "cd server/functions && npm install", 19 | "build": "react-scripts build", 20 | "test": "react-scripts test", 21 | "eject": "react-scripts eject" 22 | }, 23 | "eslintConfig": { 24 | "extends": [ 25 | "react-app", 26 | "react-app/jest" 27 | ] 28 | }, 29 | "browserslist": { 30 | "production": [ 31 | ">0.2%", 32 | "not dead", 33 | "not op_mini all" 34 | ], 35 | "development": [ 36 | "last 1 chrome version", 37 | "last 1 firefox version", 38 | "last 1 safari version" 39 | ] 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /react/public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/react/public/favicon.ico -------------------------------------------------------------------------------- /react/public/logo192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/react/public/logo192.png -------------------------------------------------------------------------------- /react/public/logo512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/react/public/logo512.png -------------------------------------------------------------------------------- /react/public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "React App", 3 | "name": "Create React App Sample", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "logo192.png", 12 | "type": "image/png", 13 | "sizes": "192x192" 14 | }, 15 | { 16 | "src": "logo512.png", 17 | "type": "image/png", 18 | "sizes": "512x512" 19 | } 20 | ], 21 | "start_url": ".", 22 | "display": "standalone", 23 | "theme_color": "#000000", 24 | "background_color": "#ffffff" 25 | } 26 | -------------------------------------------------------------------------------- /react/public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /react/server/README.md: -------------------------------------------------------------------------------- 1 | # audio-only-server 2 | 3 | Just kidding, it's serverless ;) 4 | 5 | There are two functions here, designed to be deployed as [Netlify functions](https://www.netlify.com/products/functions/) 6 | 7 | You can deploy to your account via the deploy button below (including the React app): 8 | 9 | [![Deploy with Netlify](https://www.netlify.com/img/deploy/button.svg)](https://app.netlify.com/start/deploy?repository=https://github.com/daily-demos/party-line) 10 | 11 | You will be prompted to add your API key, which you can get from the [Developers](https://dashboard.daily.co/developers) section of the Dashboard. Sign up for a free account if you don't have one already. 12 | 13 | ## Functions 14 | 15 | `room.js` - This accepts an empty `POST` and calls the [`/rooms`](https://docs.daily.co/reference#rooms) endpoint, with a few properties, feel free to change these in your own implementation. We're also calling [`/meeting-tokens`](https://docs.daily.co/reference#meeting-tokens) since you'll want at least one token when the room is initially created. This saves the client from doing two API calls. 16 | 17 | `token.js` - This accepts a `POST` with a body in the form of `{ properties: { room_name: INSERTNAME } }` and calls the [`/meeting-tokens`](https://docs.daily.co/reference#meeting-tokens) endpoint to create an owner token for the `room_name` specified. 18 | -------------------------------------------------------------------------------- /react/server/api-helper.js: -------------------------------------------------------------------------------- 1 | const axios = require("axios"); 2 | 3 | const BASE_URL = process.env.DAILY_BASE_URL || "https://api.daily.co/v1/" 4 | const API_AUTH = process.env.DAILY_API_KEY; 5 | 6 | // create an axios instance that includes the BASE_URL and your auth token 7 | // this may be useful to put in an external file to it can be referenced 8 | // elsewhere once your application grows 9 | const api = axios.create({ 10 | baseURL: BASE_URL, 11 | timeout: 5000, 12 | headers: { Authorization: `Bearer ${API_AUTH}` }, 13 | }); 14 | 15 | exports.apiHelper = async (method, endpoint, body = {}) => { 16 | try { 17 | const response = await api.request({ 18 | url: endpoint, 19 | method: method, 20 | data: body, 21 | }); 22 | return response.data; 23 | } catch (error) { 24 | console.log("Status: ", error.response.status); 25 | console.log("Text: ", error.response.statusText); 26 | // need to throw again so error is caught 27 | // a possible improvement here is to pass the status code back so it can be returned to the user 28 | throw new Error(error); 29 | } 30 | }; 31 | -------------------------------------------------------------------------------- /react/server/functions/token.js: -------------------------------------------------------------------------------- 1 | const { apiHelper } = require("../api-helper"); 2 | 3 | const headers = { 4 | "Content-Type": "application/json; charset=utf-8", 5 | "Access-Control-Allow-Origin": "*", 6 | "Access-Control-Allow-Headers": "Content-Type", 7 | "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE", 8 | }; 9 | 10 | exports.handler = async function (event, context) { 11 | if (event.httpMethod !== "POST") { 12 | return { 13 | statusCode: 200, 14 | headers, 15 | body: "This was not a POST request!", 16 | }; 17 | } 18 | 19 | const reqBody = JSON.parse(event.body); 20 | const roomName = reqBody.properties.room_name; 21 | 22 | let res = {}; 23 | let code = 500; 24 | try { 25 | const tokenBody = JSON.stringify({ 26 | properties: { 27 | // expire in 10 minutes 28 | exp: Math.round(Date.now() / 1000) + 10 * 60, 29 | room_name: roomName, 30 | is_owner: true, 31 | }, 32 | }); 33 | const token = await apiHelper("post", "/meeting-tokens", tokenBody); 34 | 35 | res = token; 36 | code = 200; 37 | } catch (e) { 38 | console.log("error: ", e); 39 | res = { error: e.message }; 40 | code = 500; 41 | } 42 | 43 | return { 44 | statusCode: code, 45 | body: JSON.stringify(res), 46 | headers, 47 | }; 48 | }; 49 | -------------------------------------------------------------------------------- /react/server/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "audio-only-server", 3 | "version": "1.0.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "axios": { 8 | "version": "0.21.1", 9 | "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", 10 | "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", 11 | "requires": { 12 | "follow-redirects": "^1.10.0" 13 | } 14 | }, 15 | "follow-redirects": { 16 | "version": "1.13.2", 17 | "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.2.tgz", 18 | "integrity": "sha512-6mPTgLxYm3r6Bkkg0vNM0HTjfGrOEtsfbhagQvbxDEsEkpNhw582upBaoRZylzen6krEmxXJgt9Ju6HiI4O7BA==" 19 | }, 20 | "prettier": { 21 | "version": "2.2.1", 22 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.2.1.tgz", 23 | "integrity": "sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==", 24 | "dev": true 25 | } 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /react/server/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "audio-only-server", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "", 6 | "scripts": { 7 | "prettify": "prettier --write \"./**/*.{js,css,html,md}\"" 8 | }, 9 | "repository": { 10 | "type": "git", 11 | "url": "git+https://github.com/daily-demos/audio-only-server.git" 12 | }, 13 | "author": "philmillman", 14 | "license": "ISC", 15 | "bugs": { 16 | "url": "https://github.com/daily-demos/audio-only-server/issues" 17 | }, 18 | "homepage": "https://github.com/daily-demos/audio-only-server#readme", 19 | "devDependencies": { 20 | "prettier": "^2.2.1" 21 | }, 22 | "dependencies": { 23 | "axios": "^0.21.1" 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /react/server/sample.env: -------------------------------------------------------------------------------- 1 | DAILY_API_KEY=REPLACE_WITH_YOUR_API_KEY -------------------------------------------------------------------------------- /react/src/App.test.js: -------------------------------------------------------------------------------- 1 | import { render, screen } from '@testing-library/react'; 2 | import App from './App'; 3 | 4 | test('renders learn react link', () => { 5 | render(); 6 | const linkElement = screen.getByText(/learn react/i); 7 | expect(linkElement).toBeInTheDocument(); 8 | }); 9 | -------------------------------------------------------------------------------- /react/src/components/Menu.jsx: -------------------------------------------------------------------------------- 1 | import styled from "styled-components"; 2 | import theme from "../theme"; 3 | 4 | const Menu = ({ options, setIsVisible }) => { 5 | return ( 6 | 7 | {(options || []).map((o, i) => ( 8 | 18 | ))} 19 | 20 | ); 21 | }; 22 | 23 | const Container = styled.ul` 24 | display: flex; 25 | flex-direction: column; 26 | background-color: ${theme.colors.white}; 27 | box-shadow: 0px 4px 4px rgba(0, 0, 0, 0.04), 0px 0px 4px rgba(0, 0, 0, 0.08); 28 | margin: 0; 29 | padding: 8px 0; 30 | `; 31 | const Option = styled.li` 32 | list-style: none; 33 | font-size: ${theme.fontSize.base}; 34 | color: ${(props) => 35 | props.warning ? theme.colors.redDark : theme.colors.blueDark}; 36 | background-color: ${theme.colors.white}; 37 | line-height: 16px; 38 | padding: 8px; 39 | 40 | &:hover { 41 | background-color: ${theme.colors.greyLight}; 42 | cursor: pointer; 43 | } 44 | `; 45 | 46 | export default Menu; 47 | -------------------------------------------------------------------------------- /react/src/components/MicIcon.jsx: -------------------------------------------------------------------------------- 1 | import styled from "styled-components"; 2 | import mic from "../icons/mic.svg"; 3 | import simple from "../icons/simple_mic.svg"; 4 | 5 | const MicIcon = ({ type = "default" }) => { 6 | const src = type === "default" ? mic : simple; 7 | return ; 8 | }; 9 | 10 | const Icon = styled.img``; 11 | 12 | export default MicIcon; 13 | -------------------------------------------------------------------------------- /react/src/components/MoreIcon.jsx: -------------------------------------------------------------------------------- 1 | import styled from "styled-components"; 2 | import more from "../icons/more.svg"; 3 | import theme from "../theme"; 4 | 5 | const MoreIcon = () => { 6 | return ; 7 | }; 8 | 9 | const Icon = styled.img` 10 | background-color: ${theme.colors.white}; 11 | padding: 4px; 12 | border-radius: 24px; 13 | `; 14 | 15 | export default MoreIcon; 16 | -------------------------------------------------------------------------------- /react/src/components/MutedIcon.jsx: -------------------------------------------------------------------------------- 1 | import styled from "styled-components"; 2 | import muted from "../icons/muted.svg"; 3 | import simple from "../icons/simple_muted.svg"; 4 | 5 | const MutedIcon = ({ type = "default" }) => { 6 | const src = type === "default" ? muted : simple; 7 | return ; 8 | }; 9 | 10 | const Icon = styled.img``; 11 | 12 | export default MutedIcon; 13 | -------------------------------------------------------------------------------- /react/src/components/shared/SmallText.js: -------------------------------------------------------------------------------- 1 | import styled from "styled-components"; 2 | import theme from "../../theme"; 3 | 4 | export const SmallText = styled.p` 5 | font-size: ${theme.fontSize.base}; 6 | color: ${theme.colors.greyDark}; 7 | font-weight: 400; 8 | margin: ${(props) => props.margin || "12px 0"}; 9 | `; 10 | -------------------------------------------------------------------------------- /react/src/icons/mic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /react/src/icons/more.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /react/src/icons/muted.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /react/src/icons/simple_mic.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /react/src/icons/simple_muted.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /react/src/index.css: -------------------------------------------------------------------------------- 1 | html { 2 | width: 100%; 3 | height: 100%; 4 | } 5 | 6 | body { 7 | margin: 0; 8 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Roboto", "Oxygen", 9 | "Ubuntu", "Cantarell", "Fira Sans", "Droid Sans", "Helvetica Neue", 10 | sans-serif; 11 | -webkit-font-smoothing: antialiased; 12 | -moz-osx-font-smoothing: grayscale; 13 | width: 100%; 14 | height: 100%; 15 | } 16 | 17 | #root { 18 | width: 100%; 19 | height: 100%; 20 | display: flex; 21 | } 22 | 23 | code { 24 | font-family: source-code-pro, Menlo, Monaco, Consolas, "Courier New", 25 | monospace; 26 | } 27 | -------------------------------------------------------------------------------- /react/src/index.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import ReactDOM from 'react-dom'; 3 | import './index.css'; 4 | import App from './App'; 5 | import reportWebVitals from './reportWebVitals'; 6 | 7 | ReactDOM.render( 8 | 9 | 10 | , 11 | document.getElementById('root') 12 | ); 13 | 14 | // If you want to start measuring performance in your app, pass a function 15 | // to log results (for example: reportWebVitals(console.log)) 16 | // or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals 17 | reportWebVitals(); 18 | -------------------------------------------------------------------------------- /react/src/reportWebVitals.js: -------------------------------------------------------------------------------- 1 | const reportWebVitals = onPerfEntry => { 2 | if (onPerfEntry && onPerfEntry instanceof Function) { 3 | import('web-vitals').then(({ getCLS, getFID, getFCP, getLCP, getTTFB }) => { 4 | getCLS(onPerfEntry); 5 | getFID(onPerfEntry); 6 | getFCP(onPerfEntry); 7 | getLCP(onPerfEntry); 8 | getTTFB(onPerfEntry); 9 | }); 10 | } 11 | }; 12 | 13 | export default reportWebVitals; 14 | -------------------------------------------------------------------------------- /react/src/setupTests.js: -------------------------------------------------------------------------------- 1 | // jest-dom adds custom jest matchers for asserting on DOM nodes. 2 | // allows you to do things like: 3 | // expect(element).toHaveTextContent(/react/i) 4 | // learn more: https://github.com/testing-library/jest-dom 5 | import '@testing-library/jest-dom'; 6 | -------------------------------------------------------------------------------- /react/src/theme.js: -------------------------------------------------------------------------------- 1 | const theme = { 2 | colors: { 3 | blue: "#1f2d3d", 4 | blueDark: "#121a24", 5 | blueLight: "#2b3f56", 6 | cyan: "#00c9df", 7 | cyanDark: "#00a4b7", 8 | cyanLight: "#e2fbfd", 9 | green: "#72cc18", 10 | greenDark: "#62a60f", 11 | greenLight: "#eefae0", 12 | grey: "#c8d1dc", 13 | greyDark: "#6b7785", 14 | greyLight: "#e6eaef", 15 | greyLightest: "#f7f9fa", 16 | orange: "#fb651e", 17 | orangeDark: "#d48200", 18 | orangeLight: "#fef2d8", 19 | red: "#e71115", 20 | redDark: "#bb0c0c", 21 | redLight: "#fddddd", 22 | white: "#ffffff", 23 | turquoise: "#1bebb9", 24 | teal: "#14997a", 25 | }, 26 | fontSize: { 27 | small: "11px", 28 | base: "12px", 29 | med: "14px", 30 | large: "16px", 31 | xlarge: "28px", 32 | xxlarge: "32px", 33 | }, 34 | fontFamily: { 35 | regular: "Helvetica, Arial, sans-serif", 36 | }, 37 | }; 38 | 39 | export default theme; 40 | -------------------------------------------------------------------------------- /react/src/useClickAway.js: -------------------------------------------------------------------------------- 1 | import { useState, useEffect, useRef } from "react"; 2 | 3 | export default function useClickAway(initial) { 4 | const [isVisible, setIsVisible] = useState(initial); 5 | const ref = useRef(null); 6 | 7 | const handleHideDropdown = (event) => { 8 | if (event.key === "Escape") { 9 | setIsVisible(false); 10 | } 11 | }; 12 | 13 | const handleClickOutside = (event) => { 14 | if (ref.current && !ref.current.contains(event.target)) { 15 | setIsVisible(false); 16 | } 17 | }; 18 | 19 | useEffect(() => { 20 | document.addEventListener("keydown", handleHideDropdown, true); 21 | document.addEventListener("click", handleClickOutside, true); 22 | return () => { 23 | document.removeEventListener("keydown", handleHideDropdown, true); 24 | document.removeEventListener("click", handleClickOutside, true); 25 | }; 26 | }); 27 | 28 | return { ref, isVisible, setIsVisible }; 29 | } 30 | -------------------------------------------------------------------------------- /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/daily-demos/party-line/3b923241e1b925291c97d10162b1e97e7f960938/screenshot.png -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | --------------------------------------------------------------------------------