├── .DS_Store
├── .gradle
├── 7.1
│ ├── dependencies-accessors
│ │ ├── dependencies-accessors.lock
│ │ └── gc.properties
│ ├── executionHistory
│ │ ├── executionHistory.bin
│ │ └── executionHistory.lock
│ ├── fileChanges
│ │ └── last-build.bin
│ ├── fileHashes
│ │ ├── fileHashes.bin
│ │ ├── fileHashes.lock
│ │ └── resourceHashesCache.bin
│ └── gc.properties
├── 8.10
│ ├── checksums
│ │ ├── checksums.lock
│ │ └── sha1-checksums.bin
│ ├── dependencies-accessors
│ │ └── gc.properties
│ ├── executionHistory
│ │ ├── executionHistory.bin
│ │ └── executionHistory.lock
│ ├── fileChanges
│ │ └── last-build.bin
│ ├── fileHashes
│ │ ├── fileHashes.bin
│ │ ├── fileHashes.lock
│ │ └── resourceHashesCache.bin
│ └── gc.properties
├── buildOutputCleanup
│ ├── buildOutputCleanup.lock
│ ├── cache.properties
│ └── outputFiles.bin
├── checksums
│ └── checksums.lock
├── config.properties
├── file-system.probe
├── vcs-1
│ └── gc.properties
└── vcsWorkingDirs
│ └── gc.properties
├── .idea
├── AndroidProjectSystem.xml
├── caches
│ ├── build_file_checksums.ser
│ └── deviceStreaming.xml
├── codeStyles
│ └── Project.xml
├── compiler.xml
├── deploymentTargetDropDown.xml
├── deploymentTargetSelector.xml
├── gradle.xml
├── jarRepositories.xml
├── libraries
│ ├── Gradle__D.xml
│ ├── Gradle__D__1_.xml
│ ├── Gradle__androidx_annotation_annotation_1_0_0.xml
│ ├── Gradle__androidx_appcompat_appcompat_1_0_0_aar.xml
│ ├── Gradle__androidx_arch_core_core_common_2_0_0.xml
│ ├── Gradle__androidx_arch_core_core_runtime_2_0_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_0_0.xml
│ ├── Gradle__androidx_constraintlayout_constraintlayout_1_1_3_aar.xml
│ ├── Gradle__androidx_constraintlayout_constraintlayout_solver_1_1_3.xml
│ ├── Gradle__androidx_coordinatorlayout_coordinatorlayout_1_0_0_aar.xml
│ ├── Gradle__androidx_core_core_1_0_0_aar.xml
│ ├── Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml
│ ├── Gradle__androidx_customview_customview_1_0_0_aar.xml
│ ├── Gradle__androidx_documentfile_documentfile_1_0_0_aar.xml
│ ├── Gradle__androidx_drawerlayout_drawerlayout_1_0_0_aar.xml
│ ├── Gradle__androidx_fragment_fragment_1_0_0_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_lifecycle_lifecycle_common_2_0_0.xml
│ ├── Gradle__androidx_lifecycle_lifecycle_extensions_2_0_0_aar.xml
│ ├── Gradle__androidx_lifecycle_lifecycle_livedata_2_0_0_aar.xml
│ ├── Gradle__androidx_lifecycle_lifecycle_livedata_core_2_0_0_aar.xml
│ ├── Gradle__androidx_lifecycle_lifecycle_process_2_0_0_aar.xml
│ ├── Gradle__androidx_lifecycle_lifecycle_runtime_2_0_0_aar.xml
│ ├── Gradle__androidx_lifecycle_lifecycle_service_2_0_0_aar.xml
│ ├── Gradle__androidx_lifecycle_lifecycle_viewmodel_2_0_0_aar.xml
│ ├── Gradle__androidx_loader_loader_1_0_0_aar.xml
│ ├── Gradle__androidx_localbroadcastmanager_localbroadcastmanager_1_0_0_aar.xml
│ ├── Gradle__androidx_print_print_1_0_0_aar.xml
│ ├── Gradle__androidx_recyclerview_recyclerview_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_2_0_aar.xml
│ ├── Gradle__androidx_test_espresso_espresso_core_3_1_0_aar.xml
│ ├── Gradle__androidx_test_espresso_espresso_idling_resource_3_1_0_aar.xml
│ ├── Gradle__androidx_test_ext_junit_1_1_1_aar.xml
│ ├── Gradle__androidx_test_monitor_1_2_0_aar.xml
│ ├── Gradle__androidx_test_runner_1_1_0_aar.xml
│ ├── Gradle__androidx_transition_transition_1_0_0_aar.xml
│ ├── Gradle__androidx_vectordrawable_vectordrawable_1_0_0_aar.xml
│ ├── Gradle__androidx_vectordrawable_vectordrawable_animated_1_0_0_aar.xml
│ ├── Gradle__androidx_versionedparcelable_versionedparcelable_1_0_0_aar.xml
│ ├── Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml
│ ├── Gradle__com_google_android_material_material_1_0_0_aar.xml
│ ├── Gradle__com_google_code_findbugs_jsr305_2_0_1.xml
│ ├── Gradle__com_google_code_gson_gson_2_8_5.xml
│ ├── Gradle__com_squareup_javawriter_2_1_1.xml
│ ├── Gradle__com_squareup_okhttp3_okhttp_3_12_12.xml
│ ├── Gradle__com_squareup_okio_okio_1_15_0.xml
│ ├── Gradle__commons_logging_commons_logging_1_3_5.xml
│ ├── Gradle__io_socket_engine_io_client_2_1_0.xml
│ ├── Gradle__io_socket_socket_io_client_2_1_1.xml
│ ├── Gradle__javax_inject_javax_inject_1.xml
│ ├── Gradle__junit_junit_4_12.xml
│ ├── Gradle__net_sf_kxml_kxml2_2_3_0.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_8_0.xml
│ └── Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_8_0.xml
├── migrations.xml
├── misc.xml
├── modules.xml
├── modules
│ └── app
│ │ ├── Multiparty-Video-Chat-Application-Sample-for-Android.app.androidTest.iml
│ │ ├── Multiparty-Video-Chat-Application-Sample-for-Android.app.iml
│ │ ├── Multiparty-Video-Chat-Application-Sample-for-Android.app.main.iml
│ │ └── Multiparty-Video-Chat-Application-Sample-for-Android.app.unitTest.iml
├── runConfigurations.xml
├── vcs.xml
└── workspace.xml
├── Multiparty-Video-Chat-Application-Sample-for-Android.iml
├── README.md
├── app
├── .gitignore
├── build.gradle
├── libs
│ ├── EnxRtcAndroid-release_2.3.24.aar
│ └── libwebrtc.aar
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── com
│ │ └── enablex
│ │ └── multiconferencequickapp
│ │ └── ExampleInstrumentedTest.java
│ ├── main
│ ├── AndroidManifest.xml
│ ├── ic_launcher-web.png
│ ├── java
│ │ └── com
│ │ │ └── enablex
│ │ │ └── multiconferencequickapp
│ │ │ ├── ApplicationController.java
│ │ │ ├── activity
│ │ │ ├── DashboardActivity.java
│ │ │ └── VideoConferenceActivity.java
│ │ │ ├── adapter
│ │ │ └── HorizontalViewAdapter.java
│ │ │ ├── model
│ │ │ ├── HorizontalViewModel.java
│ │ │ ├── RoomModel.java
│ │ │ ├── SIPData.java
│ │ │ ├── SettingsData.java
│ │ │ ├── UserDataModel.java
│ │ │ └── UserModel.java
│ │ │ ├── utilities
│ │ │ └── OnDragTouchListener.java
│ │ │ └── web_communication
│ │ │ ├── WebCall.java
│ │ │ ├── WebConstants.java
│ │ │ └── WebResponse.java
│ └── res
│ │ ├── drawable-v24
│ │ └── mybutton.xml
│ │ ├── drawable
│ │ ├── background.xml
│ │ ├── camera.png
│ │ ├── disconnect.png
│ │ ├── frame_border.xml
│ │ ├── front_camera.xml
│ │ ├── ic_videocam.xml
│ │ ├── ic_videocam_off.xml
│ │ ├── items_background.xml
│ │ ├── logofront.png
│ │ ├── mute.xml
│ │ ├── mybutton.xml
│ │ ├── rear_camera.xml
│ │ ├── share.xml
│ │ ├── transparent_bg.png
│ │ ├── unmute.xml
│ │ ├── volume_off.xml
│ │ └── volume_on.xml
│ │ ├── layout
│ │ ├── activity_video_conference.xml
│ │ ├── dashboard.xml
│ │ ├── horizontalviewitem.xml
│ │ └── radiogroup.xml
│ │ ├── menu
│ │ └── actions.xml
│ │ ├── mipmap-hdpi
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-mdpi
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xhdpi
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xxhdpi
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xxxhdpi
│ │ └── ic_launcher_round.png
│ │ └── values
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ └── test
│ └── java
│ └── com
│ └── enablex
│ └── multiconferencequickapp
│ └── ExampleUnitTest.java
├── build.gradle
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── local.properties
└── settings.gradle
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android/629cb1779296907d15f065bb76ffa4df8f2568da/.DS_Store
--------------------------------------------------------------------------------
/.gradle/7.1/dependencies-accessors/dependencies-accessors.lock:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android/629cb1779296907d15f065bb76ffa4df8f2568da/.gradle/7.1/dependencies-accessors/dependencies-accessors.lock
--------------------------------------------------------------------------------
/.gradle/7.1/dependencies-accessors/gc.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android/629cb1779296907d15f065bb76ffa4df8f2568da/.gradle/7.1/dependencies-accessors/gc.properties
--------------------------------------------------------------------------------
/.gradle/7.1/executionHistory/executionHistory.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android/629cb1779296907d15f065bb76ffa4df8f2568da/.gradle/7.1/executionHistory/executionHistory.bin
--------------------------------------------------------------------------------
/.gradle/7.1/executionHistory/executionHistory.lock:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android/629cb1779296907d15f065bb76ffa4df8f2568da/.gradle/7.1/executionHistory/executionHistory.lock
--------------------------------------------------------------------------------
/.gradle/7.1/fileChanges/last-build.bin:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.gradle/7.1/fileHashes/fileHashes.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android/629cb1779296907d15f065bb76ffa4df8f2568da/.gradle/7.1/fileHashes/fileHashes.bin
--------------------------------------------------------------------------------
/.gradle/7.1/fileHashes/fileHashes.lock:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android/629cb1779296907d15f065bb76ffa4df8f2568da/.gradle/7.1/fileHashes/fileHashes.lock
--------------------------------------------------------------------------------
/.gradle/7.1/fileHashes/resourceHashesCache.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android/629cb1779296907d15f065bb76ffa4df8f2568da/.gradle/7.1/fileHashes/resourceHashesCache.bin
--------------------------------------------------------------------------------
/.gradle/7.1/gc.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android/629cb1779296907d15f065bb76ffa4df8f2568da/.gradle/7.1/gc.properties
--------------------------------------------------------------------------------
/.gradle/8.10/checksums/checksums.lock:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android/629cb1779296907d15f065bb76ffa4df8f2568da/.gradle/8.10/checksums/checksums.lock
--------------------------------------------------------------------------------
/.gradle/8.10/checksums/sha1-checksums.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android/629cb1779296907d15f065bb76ffa4df8f2568da/.gradle/8.10/checksums/sha1-checksums.bin
--------------------------------------------------------------------------------
/.gradle/8.10/dependencies-accessors/gc.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android/629cb1779296907d15f065bb76ffa4df8f2568da/.gradle/8.10/dependencies-accessors/gc.properties
--------------------------------------------------------------------------------
/.gradle/8.10/executionHistory/executionHistory.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android/629cb1779296907d15f065bb76ffa4df8f2568da/.gradle/8.10/executionHistory/executionHistory.bin
--------------------------------------------------------------------------------
/.gradle/8.10/executionHistory/executionHistory.lock:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android/629cb1779296907d15f065bb76ffa4df8f2568da/.gradle/8.10/executionHistory/executionHistory.lock
--------------------------------------------------------------------------------
/.gradle/8.10/fileChanges/last-build.bin:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.gradle/8.10/fileHashes/fileHashes.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android/629cb1779296907d15f065bb76ffa4df8f2568da/.gradle/8.10/fileHashes/fileHashes.bin
--------------------------------------------------------------------------------
/.gradle/8.10/fileHashes/fileHashes.lock:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android/629cb1779296907d15f065bb76ffa4df8f2568da/.gradle/8.10/fileHashes/fileHashes.lock
--------------------------------------------------------------------------------
/.gradle/8.10/fileHashes/resourceHashesCache.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android/629cb1779296907d15f065bb76ffa4df8f2568da/.gradle/8.10/fileHashes/resourceHashesCache.bin
--------------------------------------------------------------------------------
/.gradle/8.10/gc.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android/629cb1779296907d15f065bb76ffa4df8f2568da/.gradle/8.10/gc.properties
--------------------------------------------------------------------------------
/.gradle/buildOutputCleanup/buildOutputCleanup.lock:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android/629cb1779296907d15f065bb76ffa4df8f2568da/.gradle/buildOutputCleanup/buildOutputCleanup.lock
--------------------------------------------------------------------------------
/.gradle/buildOutputCleanup/cache.properties:
--------------------------------------------------------------------------------
1 | #Thu Apr 03 11:20:59 IST 2025
2 | gradle.version=8.10
3 |
--------------------------------------------------------------------------------
/.gradle/buildOutputCleanup/outputFiles.bin:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android/629cb1779296907d15f065bb76ffa4df8f2568da/.gradle/buildOutputCleanup/outputFiles.bin
--------------------------------------------------------------------------------
/.gradle/checksums/checksums.lock:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android/629cb1779296907d15f065bb76ffa4df8f2568da/.gradle/checksums/checksums.lock
--------------------------------------------------------------------------------
/.gradle/config.properties:
--------------------------------------------------------------------------------
1 | #Thu Apr 03 11:19:35 IST 2025
2 | java.home=C\:\\Program Files\\Android\\Android Studio\\jbr
3 |
--------------------------------------------------------------------------------
/.gradle/file-system.probe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android/629cb1779296907d15f065bb76ffa4df8f2568da/.gradle/file-system.probe
--------------------------------------------------------------------------------
/.gradle/vcs-1/gc.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android/629cb1779296907d15f065bb76ffa4df8f2568da/.gradle/vcs-1/gc.properties
--------------------------------------------------------------------------------
/.gradle/vcsWorkingDirs/gc.properties:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android/629cb1779296907d15f065bb76ffa4df8f2568da/.gradle/vcsWorkingDirs/gc.properties
--------------------------------------------------------------------------------
/.idea/AndroidProjectSystem.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/caches/build_file_checksums.ser:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android/629cb1779296907d15f065bb76ffa4df8f2568da/.idea/caches/build_file_checksums.ser
--------------------------------------------------------------------------------
/.idea/codeStyles/Project.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | xmlns:android
11 |
12 | ^$
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 | xmlns:.*
22 |
23 | ^$
24 |
25 |
26 | BY_NAME
27 |
28 |
29 |
30 |
31 |
32 |
33 | .*:id
34 |
35 | http://schemas.android.com/apk/res/android
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 | .*:name
45 |
46 | http://schemas.android.com/apk/res/android
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 | name
56 |
57 | ^$
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 | style
67 |
68 | ^$
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 | .*
78 |
79 | ^$
80 |
81 |
82 | BY_NAME
83 |
84 |
85 |
86 |
87 |
88 |
89 | .*
90 |
91 | http://schemas.android.com/apk/res/android
92 |
93 |
94 | ANDROID_ATTRIBUTE_ORDER
95 |
96 |
97 |
98 |
99 |
100 |
101 | .*
102 |
103 | .*
104 |
105 |
106 | BY_NAME
107 |
108 |
109 |
110 |
111 |
112 |
113 |
--------------------------------------------------------------------------------
/.idea/compiler.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/deploymentTargetDropDown.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/.idea/deploymentTargetSelector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/.idea/gradle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
18 |
19 |
--------------------------------------------------------------------------------
/.idea/jarRepositories.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__D.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__D__1_.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_annotation_annotation_1_0_0.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_appcompat_appcompat_1_0_0_aar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_arch_core_core_common_2_0_0.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_arch_core_core_runtime_2_0_0_aar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_asynclayoutinflater_asynclayoutinflater_1_0_0_aar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_cardview_cardview_1_0_0_aar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_collection_collection_1_0_0.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_1_1_3_aar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_constraintlayout_constraintlayout_solver_1_1_3.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_coordinatorlayout_coordinatorlayout_1_0_0_aar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_core_core_1_0_0_aar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_aar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_customview_customview_1_0_0_aar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_documentfile_documentfile_1_0_0_aar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_drawerlayout_drawerlayout_1_0_0_aar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_fragment_fragment_1_0_0_aar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_aar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.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 |
--------------------------------------------------------------------------------
/.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 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_2_0_0.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_extensions_2_0_0_aar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_2_0_0_aar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_0_0_aar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_process_2_0_0_aar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_0_0_aar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_service_2_0_0_aar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_0_0_aar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_loader_loader_1_0_0_aar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_localbroadcastmanager_localbroadcastmanager_1_0_0_aar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.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 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_recyclerview_recyclerview_1_0_0_aar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_slidingpanelayout_slidingpanelayout_1_0_0_aar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.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 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_test_core_1_2_0_aar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_test_espresso_espresso_core_3_1_0_aar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_test_espresso_espresso_idling_resource_3_1_0_aar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_test_ext_junit_1_1_1_aar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_test_monitor_1_2_0_aar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_test_runner_1_1_0_aar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_transition_transition_1_0_0_aar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_0_0_aar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_0_0_aar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_0_0_aar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_aar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__com_google_android_material_material_1_0_0_aar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__com_google_code_findbugs_jsr305_2_0_1.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__com_google_code_gson_gson_2_8_5.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__com_squareup_javawriter_2_1_1.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__com_squareup_okhttp3_okhttp_3_12_12.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__com_squareup_okio_okio_1_15_0.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__commons_logging_commons_logging_1_3_5.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__io_socket_engine_io_client_2_1_0.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__io_socket_socket_io_client_2_1_1.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__javax_inject_javax_inject_1.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__junit_junit_4_12.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__net_sf_kxml_kxml2_2_3_0.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__org_hamcrest_hamcrest_core_1_3.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__org_hamcrest_hamcrest_integration_1_3.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__org_hamcrest_hamcrest_library_1_3.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__org_jetbrains_annotations_13_0.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_8_0.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_8_0.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/.idea/migrations.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/.idea/modules/app/Multiparty-Video-Chat-Application-Sample-for-Android.app.androidTest.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
--------------------------------------------------------------------------------
/.idea/modules/app/Multiparty-Video-Chat-Application-Sample-for-Android.app.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/.idea/modules/app/Multiparty-Video-Chat-Application-Sample-for-Android.app.main.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
--------------------------------------------------------------------------------
/.idea/modules/app/Multiparty-Video-Chat-Application-Sample-for-Android.app.unitTest.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
--------------------------------------------------------------------------------
/.idea/runConfigurations.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/Multiparty-Video-Chat-Application-Sample-for-Android.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Multi-Party RTC: Android App with EnableX Android Toolkit
2 |
3 | Multi-Party RTC: A Sample Android App with EnableX Android Toolkit
4 |
5 | This is a Sample Android App that demonstrates the use of EnableX platform Video APIs (https://developer.enablex.io/docs/references/apis/video-api/index/) and Android Toolkit (https://developer.enablex.io/docs/references/sdks/video-sdk/android-sdk/index/) to build Multi-Party RTC (Real Time Communication) Application. It allows developers to ramp up on app development by hosting on their own devices.
6 |
7 | This App creates a virtual Room on the fly hosted on the Enablex platform using REST calls and uses the Room credentials (i.e. Room Id) to connect to the virtual Room as a mobile client. The same Room credentials can be shared with others to join the same virtual Room to carry out an RTC session.
8 |
9 | > EnableX Developer Center: https://developer.enablex.io/
10 |
11 | ## 1. How to get started
12 |
13 | ### 1.1 Prerequisites
14 |
15 | #### 1.1.1 App Id and App Key
16 |
17 | * Register with EnableX [https://www.enablex.io/free-trial/]
18 | * Create your Application
19 | * Get your App ID and App Key delivered to your email
20 |
21 |
22 | #### 1.1.2 Sample Android Client
23 |
24 | * Clone or download this Repository [https://github.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android.git]
25 |
26 |
27 | #### 1.1.3 Test Application Server
28 |
29 | You need to set up an Application Server to provision Web Service API for your Android Application to enable Video Session.
30 |
31 | To help you to try our Android Application quickly, without having to set up Application Server, this Application is shipped pre-configured to work in a "try" mode with EnableX hosted Application Server i.e. https://demo.enablex.io.
32 |
33 | Our Application Server restricts a single Session duations to 10 minutes, and allows 1 moderator and not more than 3 participants in a Session.
34 |
35 | Once you tried EnableX Android Sample Application, you may need to set up your own Application Server and verify your Application to work with your Application Server. Refer to point 2 for more details on this
36 |
37 |
38 |
39 | #### 1.1.4 Configure Android Client
40 |
41 | * Open the App
42 | * Go to WebConstants and change the following:
43 | ```
44 | /* To try the App with Enablex Hosted Service you need to set the kTry = true When you setup your own Application Service, set kTry = false */
45 |
46 | public static final boolean kTry = true;
47 |
48 | /* Your Web Service Host URL. Keet the defined host when kTry = true */
49 |
50 | String kBaseURL = "https://demo.enablex.io/"
51 |
52 | /* Your Application Credential required to try with EnableX Hosted Service
53 | When you setup your own Application Service, remove these */
54 |
55 | String kAppId = ""
56 | String kAppkey = ""
57 | ```
58 |
59 |
60 | ### 1.2 Test
61 |
62 | #### 1.2.1 Open the App
63 |
64 | * Open the App in your Device. You get a form to enter Credentials i.e. Name & Room Id.
65 | * You need to create a Room by clicking the "Create Room" button.
66 | * Once the Room Id is created, you can use it and share with others to connect to the Virtual Room to carry out an RTC Session either as a Moderator or a Participant (Choose applicable Role in the Form).
67 |
68 | Note: Only one user with Moderator Role allowed to connect to a Virtual Room while trying with EnableX Hosted Service. Your Own Application Server may allow upto 5 Moderators.
69 |
70 | Note:- In case of emulator/simulator your local stream will not create. It will create only on real device.
71 |
72 | ## 2 Set up Your Own Application Server
73 |
74 | You may need to set up your own Application Server after you tried the Sample Application with EnableX hosted Server. We have differnt variants of Application Server Sample Code. Pick one in your preferred language and follow instructions given in respective README.md file.
75 |
76 | * NodeJS: [https://github.com/EnableX/Video-Conferencing-Open-Source-Web-Application-Sample]
77 | * PHP: [https://github.com/EnableX/Group-Video-Call-Conferencing-Sample-Application-in-PHP]
78 |
79 | Note the following:
80 | * You need to use App ID and App Key to run this Service.
81 | * Your Android Client End Point needs to connect to this Service to create Virtual Room and Create Token to join the session.
82 | * Application Server is created using EnableX Server API, a Rest API Service helps in provisioning, session access and post-session reporting.
83 |
84 | To know more about Server API, go to:
85 | https://developer.enablex.io/docs/guides/video-guide/sample-codes/video-calling-app/#demo-application-server
86 |
87 |
88 | ## 3 Android Toolkit
89 |
90 | This Sample Application uses EnableX Android Toolkit to communicate with EnableX Servers to initiate and manage Real Time Communications. Please update your Application with latest version of EnableX Android Toolkit as and when a new release is available.
91 |
92 | * Documentation: https://developer.enablex.io/docs/references/sdks/video-sdk/android-sdk/index/
93 | * Download Toolkit: https://developer.enablex.io/docs/references/sdks/video-sdk/android-sdk/index/
94 |
95 |
96 | ## 4 Trial
97 |
98 | EnableX provides hosted Demo Application Server of different use-case for you to try out.
99 |
100 | Try a quick Video Call: https://demo.enablex.io/
101 |
102 | Sign up for a free trial https://www.enablex.io/free-trial/
103 |
104 |
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/app/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 | android {
4 | compileSdkVersion 34
5 | namespace 'com.enablex.multipartyquickapp'
6 | defaultConfig {
7 | applicationId 'com.enablex.multipartyquickapp'
8 | minSdkVersion 24
9 | targetSdkVersion 34
10 | versionCode 1
11 | versionName "1.1"
12 | testInstrumentationRunner 'androidx.test.runner.AndroidJUnitRunner'
13 | vectorDrawables.useSupportLibrary = true
14 | }
15 | buildTypes {
16 | release {
17 | minifyEnabled false
18 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
19 | }
20 | }
21 | compileOptions {
22 | sourceCompatibility JavaVersion.VERSION_1_8
23 | targetCompatibility JavaVersion.VERSION_1_8
24 | }
25 | lintOptions {
26 | disable 'RestrictedApi'
27 | }
28 | productFlavors {
29 | }
30 | ndkVersion '20.0.5594570'
31 | }
32 |
33 | dependencies {
34 | implementation fileTree(include: ['*.aar'], dir: 'libs')
35 | implementation 'androidx.appcompat:appcompat:1.0.0'
36 | implementation 'com.google.android.material:material:1.0.0'
37 | implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
38 | implementation 'androidx.vectordrawable:vectordrawable:1.0.0'
39 | testImplementation 'junit:junit:4.12'
40 | androidTestImplementation 'androidx.test.ext:junit:1.1.1'
41 | androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0'
42 |
43 | implementation('io.socket:socket.io-client:2.1.1') {
44 | //Excluding org.json which is provided by Android
45 | exclude group: 'org.json', module: 'json'
46 | }
47 | implementation 'android.arch.lifecycle:extensions:1.1.1'
48 | implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0'
49 | implementation 'com.google.code.gson:gson:2.8.5'
50 | implementation "org.jetbrains.kotlin:kotlin-stdlib:1.8.0"
51 | implementation("commons-logging:commons-logging:1.3.5")
52 |
53 | }
54 |
--------------------------------------------------------------------------------
/app/libs/EnxRtcAndroid-release_2.3.24.aar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android/629cb1779296907d15f065bb76ffa4df8f2568da/app/libs/EnxRtcAndroid-release_2.3.24.aar
--------------------------------------------------------------------------------
/app/libs/libwebrtc.aar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android/629cb1779296907d15f065bb76ffa4df8f2568da/app/libs/libwebrtc.aar
--------------------------------------------------------------------------------
/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
22 |
--------------------------------------------------------------------------------
/app/src/androidTest/java/com/enablex/multiconferencequickapp/ExampleInstrumentedTest.java:
--------------------------------------------------------------------------------
1 | package com.enablex.demo.demoenablex;
2 |
3 | import android.content.Context;
4 | import androidx.test.platform.app.InstrumentationRegistry;
5 | import androidx.test.ext.junit.runners.AndroidJUnit4;
6 |
7 | import org.junit.Test;
8 | import org.junit.runner.RunWith;
9 |
10 | import static org.junit.Assert.*;
11 |
12 | /**
13 | * Instrumented test, which will execute on an Android device.
14 | *
15 | * @see Testing documentation
16 | */
17 | @RunWith(AndroidJUnit4.class)
18 | public class ExampleInstrumentedTest {
19 | @Test
20 | public void useAppContext() {
21 | // Context of the app under test.
22 | Context appContext = InstrumentationRegistry.getTargetContext();
23 |
24 | assertEquals("com.enablex.demo.demoenablex", appContext.getPackageName());
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
26 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
36 |
37 |
--------------------------------------------------------------------------------
/app/src/main/ic_launcher-web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android/629cb1779296907d15f065bb76ffa4df8f2568da/app/src/main/ic_launcher-web.png
--------------------------------------------------------------------------------
/app/src/main/java/com/enablex/multiconferencequickapp/ApplicationController.java:
--------------------------------------------------------------------------------
1 | package com.enablex.multiconferencequickapp;
2 |
3 | import android.app.Activity;
4 | import android.app.Application;
5 | import android.content.ComponentCallbacks2;
6 | import android.content.Context;
7 | import android.content.SharedPreferences;
8 | import android.os.Bundle;
9 |
10 | public class ApplicationController extends Application implements Application.ActivityLifecycleCallbacks, ComponentCallbacks2 {
11 | public static Context context;
12 |
13 | public static SharedPreferences getSharedPrefs() {
14 | return context.getSharedPreferences("APP_PREF_MULTIPARTY", MODE_PRIVATE);
15 | }
16 |
17 | @Override
18 | public void onCreate() {
19 | super.onCreate();
20 | context = this;
21 | }
22 |
23 | @Override
24 | public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
25 |
26 | }
27 |
28 | @Override
29 | public void onActivityStarted(Activity activity) {
30 |
31 | }
32 |
33 | @Override
34 | public void onActivityResumed(Activity activity) {
35 |
36 | }
37 |
38 | @Override
39 | public void onActivityPaused(Activity activity) {
40 |
41 | }
42 |
43 | @Override
44 | public void onActivityStopped(Activity activity) {
45 |
46 | }
47 |
48 | @Override
49 | public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
50 |
51 | }
52 |
53 | @Override
54 | public void onActivityDestroyed(Activity activity) {
55 |
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/app/src/main/java/com/enablex/multiconferencequickapp/activity/DashboardActivity.java:
--------------------------------------------------------------------------------
1 | package com.enablex.multiconferencequickapp.activity;
2 |
3 | import android.content.Intent;
4 | import android.content.SharedPreferences;
5 | import android.os.Bundle;
6 |
7 | import androidx.annotation.Nullable;
8 | import androidx.appcompat.app.AppCompatActivity;
9 |
10 | import android.util.Log;
11 | import android.view.Menu;
12 | import android.view.MenuInflater;
13 | import android.view.MenuItem;
14 | import android.view.View;
15 | import android.widget.Button;
16 | import android.widget.EditText;
17 | import android.widget.RadioGroup;
18 | import android.widget.Toast;
19 |
20 | import com.enablex.multiconferencequickapp.ApplicationController;
21 | import com.enablex.multiconferencequickapp.web_communication.WebCall;
22 | import com.enablex.multiconferencequickapp.web_communication.WebConstants;
23 | import com.enablex.multiconferencequickapp.web_communication.WebResponse;
24 | import com.enablex.multipartyquickapp.R;
25 |
26 | import org.json.JSONException;
27 | import org.json.JSONObject;
28 |
29 | public class DashboardActivity extends AppCompatActivity implements View.OnClickListener, WebResponse {
30 | private EditText name;
31 | private EditText roomId;
32 | private Button joinRoom;
33 | private Button createRoom;
34 | private String token;
35 | private SharedPreferences sharedPreferences;
36 | private String room_Id;
37 | private RadioGroup radioGroup;
38 | private String role = "moderator";
39 |
40 | @Override
41 | protected void onCreate(@Nullable Bundle savedInstanceState) {
42 | super.onCreate(savedInstanceState);
43 | setContentView(R.layout.dashboard);
44 | getSupportActionBar().setTitle("QuickApp");
45 | sharedPreferences = ApplicationController.getSharedPrefs();
46 | setView();
47 | setClickListener();
48 | getSupportActionBar().setTitle("Quick App");
49 | setSharedPreference();
50 | }
51 |
52 | @Override
53 | public void onClick(View view) {
54 | int id=view.getId();
55 |
56 | if(id== R.id.createRoom) {
57 |
58 | new WebCall(this, this, null, WebConstants.getRoomId, WebConstants.getRoomIdCode, false, true).execute();
59 |
60 | }
61 | else if(id== R.id.joinRoom){
62 | room_Id = roomId.getText().toString();
63 | if (validations()) {
64 | validateRoomIDWebCall();
65 | }
66 |
67 | }
68 | }
69 |
70 | private boolean validations() {
71 | if (name.getText().toString().isEmpty()) {
72 | Toast.makeText(this, "Please Enter name", Toast.LENGTH_SHORT).show();
73 | return false;
74 | } else if (roomId.getText().toString().isEmpty()) {
75 | Toast.makeText(this, "Please create Room Id.", Toast.LENGTH_SHORT).show();
76 | return false;
77 | }
78 | return true;
79 | }
80 |
81 | private void validateRoomIDWebCall() {
82 | new WebCall(this, this, null, WebConstants.validateRoomId + room_Id, WebConstants.validateRoomIdCode, true, false).execute();
83 | }
84 |
85 | @Override
86 | public boolean onCreateOptionsMenu(Menu menu) {
87 | MenuInflater inflater = getMenuInflater();
88 | inflater.inflate(R.menu.actions, menu);
89 | return true;
90 | }
91 |
92 | @Override
93 | public boolean onOptionsItemSelected(MenuItem item) {
94 |
95 | int id=item.getItemId();
96 | if(id== R.id.action_share){
97 | if (!name.getText().toString().equalsIgnoreCase("") && !roomId.getText().toString().equalsIgnoreCase("")) {
98 | String shareBody = "Hi,\n" + name.getText().toString() + " has invited you to join room with Room Id " + roomId.getText().toString();
99 | Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
100 | sharingIntent.setType("text/plain");
101 | sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Subject Here");
102 | sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);
103 | startActivity(sharingIntent);
104 | } else {
105 | Toast.makeText(this, "Please create Room first.", Toast.LENGTH_SHORT).show();
106 | }
107 |
108 | }
109 | return super.onOptionsItemSelected(item);
110 | }
111 |
112 | @Override
113 | public void onWebResponse(String response, int callCode) {
114 | switch (callCode) {
115 | case WebConstants.getRoomIdCode:
116 | onGetRoomIdSuccess(response);
117 | break;
118 | case WebConstants.getTokenURLCode:
119 | onGetTokenSuccess(response);
120 | break;
121 | case WebConstants.validateRoomIdCode:
122 | onVaidateRoomIdSuccess(response);
123 | break;
124 | }
125 |
126 | }
127 |
128 | private void onVaidateRoomIdSuccess(String response) {
129 | Log.e("responsevalidate", response);
130 | try {
131 | JSONObject jsonObject = new JSONObject(response);
132 | if (jsonObject.optString("result").trim().equalsIgnoreCase("40001")) {
133 | Toast.makeText(this, jsonObject.optString("error"), Toast.LENGTH_SHORT).show();
134 | } else {
135 | savePreferences();
136 | getRoomTokenWebCall();
137 | }
138 | } catch (JSONException e) {
139 | e.printStackTrace();
140 | }
141 |
142 | }
143 |
144 | private void onGetTokenSuccess(String response) {
145 | Log.e("responseToken", response);
146 |
147 | try {
148 | JSONObject jsonObject = new JSONObject(response);
149 | if (jsonObject.optString("result").equalsIgnoreCase("0")) {
150 | token = jsonObject.optString("token");
151 | Log.e("token", token);
152 | Intent intent = new Intent(DashboardActivity.this, VideoConferenceActivity.class);
153 | intent.putExtra("token", token);
154 | intent.putExtra("name", name.getText().toString());
155 | startActivity(intent);
156 | } else {
157 | Toast.makeText(this, jsonObject.optString("error"), Toast.LENGTH_SHORT).show();
158 | }
159 | } catch (JSONException e) {
160 | e.printStackTrace();
161 | }
162 | }
163 |
164 | private void onGetRoomIdSuccess(String response) {
165 | Log.e("responseDashboard", response);
166 |
167 | try {
168 | JSONObject jsonObject = new JSONObject(response);
169 | room_Id = jsonObject.optJSONObject("room").optString("room_id");
170 | } catch (JSONException e) {
171 |
172 | e.printStackTrace();
173 | }
174 |
175 | runOnUiThread(new Runnable() {
176 | @Override
177 | public void run() {
178 | roomId.setText(room_Id);
179 | }
180 | });
181 | }
182 |
183 | @Override
184 | public void onWebResponseError(String error, int callCode) {
185 | Log.e("errorDashboard", error);
186 | }
187 |
188 | private void setSharedPreference() {
189 | if (sharedPreferences != null) {
190 | if (!sharedPreferences.getString("name", "").isEmpty()) {
191 | name.setText(sharedPreferences.getString("name", ""));
192 | }
193 | if (!sharedPreferences.getString("room_id", "").isEmpty()) {
194 | roomId.setText(sharedPreferences.getString("room_id", ""));
195 | }
196 | }
197 | }
198 |
199 | private void setClickListener() {
200 | createRoom.setOnClickListener(this);
201 | joinRoom.setOnClickListener(this);
202 | radioGroup.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
203 | @Override
204 | public void onCheckedChanged(RadioGroup radioGroup, int i) {
205 | if (i == 0) {
206 | role = "moderator";
207 | } else {
208 | role = "participant";
209 | }
210 | }
211 | });
212 | }
213 |
214 | private void setView() {
215 | name = (EditText) findViewById(R.id.name);
216 | roomId = (EditText) findViewById(R.id.roomId);
217 | createRoom = (Button) findViewById(R.id.createRoom);
218 | joinRoom = (Button) findViewById(R.id.joinRoom);
219 | radioGroup = (RadioGroup) findViewById(R.id.radioButtonGroup);
220 | }
221 |
222 | private JSONObject jsonObjectToSend() {
223 | JSONObject jsonObject = new JSONObject();
224 | try {
225 | jsonObject.put("name", "Test Dev Room");
226 | jsonObject.put("settings", getSettingsObject());
227 | jsonObject.put("data", getDataObject());
228 | jsonObject.put("sip", getSIPObject());
229 | jsonObject.put("owner_ref", "fadaADADAAee");
230 | } catch (JSONException e) {
231 | e.printStackTrace();
232 | }
233 | return jsonObject;
234 | }
235 |
236 | private JSONObject getSIPObject() {
237 | JSONObject jsonObject = new JSONObject();
238 | return jsonObject;
239 | }
240 |
241 | private JSONObject getDataObject() {
242 | JSONObject jsonObject = new JSONObject();
243 | try {
244 | jsonObject.put("name", name.getText().toString());
245 | } catch (JSONException e) {
246 | e.printStackTrace();
247 | }
248 | return jsonObject;
249 | }
250 |
251 | private JSONObject getSettingsObject() {
252 | JSONObject jsonObject = new JSONObject();
253 | try {
254 | jsonObject.put("description", "Testing");
255 | jsonObject.put("scheduled", false);
256 | jsonObject.put("scheduled_time", "");
257 | jsonObject.put("duration", 50);
258 | jsonObject.put("participants", 10);
259 | jsonObject.put("billing_code", 1234);
260 | jsonObject.put("auto_recording", false);
261 | jsonObject.put("active_talker", true);
262 | jsonObject.put("quality", "HD");
263 | jsonObject.put("wait_moderator", false);
264 | jsonObject.put("adhoc", false);
265 | jsonObject.put("mode", "group");
266 | } catch (JSONException e) {
267 | e.printStackTrace();
268 | }
269 | return jsonObject;
270 | }
271 |
272 | private void getRoomTokenWebCall() {
273 | JSONObject jsonObject = new JSONObject();
274 | try {
275 | jsonObject.put("name", name.getText().toString());
276 | jsonObject.put("role", role);
277 | jsonObject.put("user_ref", "2236");
278 | jsonObject.put("roomId", room_Id);
279 | } catch (JSONException e) {
280 | e.printStackTrace();
281 | }
282 | if (!name.getText().toString().isEmpty() && !roomId.getText().toString().isEmpty()) {
283 | new WebCall(this, this, jsonObject, WebConstants.getTokenURL, WebConstants.getTokenURLCode, false, false).execute();
284 | }
285 | }
286 |
287 |
288 | private void savePreferences() {
289 | SharedPreferences.Editor editor = sharedPreferences.edit();
290 | editor.putString("name", name.getText().toString());
291 | editor.putString("room_id", room_Id);
292 | editor.commit();
293 |
294 | }
295 | }
296 |
--------------------------------------------------------------------------------
/app/src/main/java/com/enablex/multiconferencequickapp/adapter/HorizontalViewAdapter.java:
--------------------------------------------------------------------------------
1 | package com.enablex.multiconferencequickapp.adapter;
2 |
3 |
4 | import android.content.Context;
5 | import androidx.recyclerview.widget.RecyclerView;
6 | import android.view.LayoutInflater;
7 | import android.view.View;
8 | import android.view.ViewGroup;
9 | import android.widget.RelativeLayout;
10 | import android.widget.TextView;
11 | import android.widget.Toast;
12 |
13 | import com.enablex.multiconferencequickapp.model.HorizontalViewModel;
14 | import com.enablex.multipartyquickapp.R;
15 |
16 | import java.util.List;
17 |
18 | import enx_rtc_android.Controller.EnxPlayerView;
19 | import enx_rtc_android.Controller.EnxStream;
20 |
21 |
22 | public class HorizontalViewAdapter extends RecyclerView.Adapter {
23 |
24 | private List streamArrayList;
25 | private Context context;
26 | int mHieght;
27 | int mWidth;
28 | boolean mSharedPrersentation;
29 |
30 | public HorizontalViewAdapter(List horizontalList, Context context, int hieght, int width, boolean sharedPresentation) {
31 | this.streamArrayList = horizontalList;
32 | this.context = context;
33 | this.mHieght = hieght;
34 | this.mWidth = width;
35 | this.mSharedPrersentation = sharedPresentation;
36 | }
37 |
38 | @Override
39 | public int getItemCount() {
40 | if (streamArrayList.size() > 0) {
41 | return streamArrayList.size();
42 | }
43 | return 0;
44 | }
45 |
46 | @Override
47 | public int getItemViewType(int position) {
48 | return super.getItemViewType(position);
49 | }
50 |
51 | @Override
52 | public void onBindViewHolder(final MessageViewHolder holder, final int position) {
53 | final EnxStream enxStream = streamArrayList.get(position).getEnxStream();
54 | final boolean isAudioOnly = streamArrayList.get(position).getEnxStream().isAudioOnlyStream();
55 | MessageViewHolder messageViewHolder = (MessageViewHolder) holder;
56 |
57 | try {
58 | if (enxStream == null) {
59 | return;
60 | }
61 | boolean mScreen = enxStream.hasScreen();
62 | EnxPlayerView enxPlayerView = streamArrayList.get(position).getEnxPlayerView();
63 | enxPlayerView.setId(Integer.valueOf(enxStream.getId()));
64 | if (mScreen) {
65 | enxPlayerView.setScalingType(EnxPlayerView.ScalingType.SCALE_ASPECT_FIT);//SCALE_ASPECT_BALANCED for full view other waise FIT is actual size
66 | enxPlayerView.setTag("screen");
67 | } else {
68 | enxPlayerView.setScalingType(EnxPlayerView.ScalingType.SCALE_ASPECT_BALANCED);
69 | enxPlayerView.setTag("not_screen");
70 | }
71 |
72 | String name = enxStream.getName();
73 |
74 | int count = messageViewHolder.relativeLayout.getChildCount();
75 | if (count > 0) {
76 | TextView textView = null;
77 | View surfaceview = null;
78 | for (int i = 0; i < count; i++) {
79 | surfaceview = messageViewHolder.relativeLayout.getChildAt(i);
80 | if (surfaceview instanceof EnxPlayerView) {
81 | if (i == count - 1) {
82 | textView = (TextView) messageViewHolder.relativeLayout.getChildAt(i - 1);
83 | } else {
84 | textView = (TextView) messageViewHolder.relativeLayout.getChildAt(i + 1);
85 | }
86 | break;
87 | } else {
88 | surfaceview = null;
89 | textView = (TextView) messageViewHolder.relativeLayout.getChildAt(i);
90 | }
91 | }
92 | if (surfaceview != null) {
93 | EnxPlayerView sv = (EnxPlayerView) surfaceview;
94 | messageViewHolder.relativeLayout.removeView(sv);
95 | messageViewHolder.relativeLayout.removeView(textView);
96 | } else {
97 | messageViewHolder.relativeLayout.removeView(textView);
98 | }
99 | }
100 |
101 | if (mSharedPrersentation) {
102 | if (position == 0) {
103 | messageViewHolder.relativeLayout.setBackgroundColor(context.getResources().getColor(R.color.colorAccent));
104 | } else {
105 | messageViewHolder.relativeLayout.setBackgroundColor(context.getResources().getColor(R.color.white));
106 | }
107 | } else {
108 | messageViewHolder.relativeLayout.setBackgroundColor(context.getResources().getColor(R.color.white));
109 | }
110 |
111 | messageViewHolder.relativeLayout.addView(enxPlayerView);
112 |
113 | if (enxStream.getMedia() != null) {
114 | enxStream.attachRenderer(enxPlayerView);
115 | } else {
116 | Toast.makeText(context, name + "null", Toast.LENGTH_SHORT).show();
117 | }
118 |
119 | if (!isAudioOnly) {
120 | messageViewHolder.audioOnlyText.setVisibility(View.GONE);
121 | } else {
122 | messageViewHolder.audioOnlyText.setVisibility(View.VISIBLE);
123 | }
124 |
125 | TextView tv = new TextView(context);
126 | tv.setTextColor(context.getResources().getColor(R.color.green));
127 | RelativeLayout.LayoutParams tvlp = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
128 | tvlp.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
129 | tvlp.addRule(RelativeLayout.CENTER_HORIZONTAL);
130 | tv.setLayoutParams(tvlp);
131 | if (name != null) {
132 | tv.setText(name);
133 | }
134 | messageViewHolder.relativeLayout.addView(tv);
135 |
136 |
137 | } catch (Exception e) {
138 | Toast.makeText(context, "Error", Toast.LENGTH_SHORT).show();
139 | }
140 | }
141 |
142 | public class MessageViewHolder extends RecyclerView.ViewHolder {
143 |
144 | RelativeLayout relativeLayout;
145 | TextView audioOnlyText;
146 |
147 | private MessageViewHolder(View view) {
148 | super(view);
149 | relativeLayout = (RelativeLayout) view.findViewById(R.id.imageView);
150 | audioOnlyText = (TextView) view.findViewById(R.id.audioonlyAdapterText);
151 | }
152 | }
153 |
154 | @Override
155 | public MessageViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
156 | View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.horizontalviewitem, parent, false);
157 | return new MessageViewHolder(itemView);
158 | }
159 |
160 | public void setItems(List list) {
161 | this.streamArrayList = list;
162 | }
163 | }
164 |
--------------------------------------------------------------------------------
/app/src/main/java/com/enablex/multiconferencequickapp/model/HorizontalViewModel.java:
--------------------------------------------------------------------------------
1 | package com.enablex.multiconferencequickapp.model;
2 |
3 | import enx_rtc_android.Controller.EnxPlayerView;
4 | import enx_rtc_android.Controller.EnxStream;
5 |
6 | public class HorizontalViewModel {
7 | private EnxStream enxStream;
8 | private boolean isAudioOnly;
9 | private String mediaType;
10 | private EnxPlayerView enxPlayerView;
11 |
12 | public EnxStream getEnxStream() {
13 | return enxStream;
14 | }
15 |
16 | public void setEnxStream(EnxStream enxStream) {
17 | this.enxStream = enxStream;
18 | }
19 |
20 | public EnxPlayerView getEnxPlayerView() {
21 | return enxPlayerView;
22 | }
23 |
24 | public void setEnxPlayerView(EnxPlayerView enxPlayerView) {
25 | this.enxPlayerView = enxPlayerView;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/app/src/main/java/com/enablex/multiconferencequickapp/model/RoomModel.java:
--------------------------------------------------------------------------------
1 | package com.enablex.multiconferencequickapp.model;
2 |
3 | public class RoomModel {
4 | /**
5 | * result : 0
6 | * room : {"name":"Test Dev Room","owner_ref":"fadaADADAAee","settings":{"description":"Testing","mode":"lecture","scheduled":false,"adhoc":false,"participants":"10","billing_code":1234,"auto_recording":false,"active_talker":true,"quality":"HD"},"data":{"name":"Mayank"},"created":"2018-11-28T09:26:17.837Z","room_id":"5bfe5f39e9f8e16af7dd5b77"}
7 | */
8 |
9 | private int result;
10 | private RoomData room;
11 |
12 | public int getResult()
13 | {
14 | return result;
15 | }
16 |
17 | public void setResult(int result)
18 | {
19 | this.result = result;
20 | }
21 |
22 | public RoomData getRoom()
23 | {
24 | return room;
25 | }
26 |
27 | public void setRoom(RoomData room)
28 | {
29 | this.room = room;
30 | }
31 |
32 | public static class RoomData
33 | {
34 | /**
35 | * name : Test Dev Room
36 | * owner_ref : fadaADADAAee
37 | * settings : {"description":"Testing","mode":"lecture","scheduled":false,"adhoc":false,"participants":"10","billing_code":1234,"auto_recording":false,"active_talker":true,"quality":"HD"}
38 | * data : {"name":"Mayank"}
39 | * created : 2018-11-28T09:26:17.837Z
40 | * room_id : 5bfe5f39e9f8e16af7dd5b77
41 | */
42 |
43 | private String name;
44 | private String owner_ref;
45 | private SettingsData settings;
46 | private UserDataModel data;
47 | private String created;
48 | private String room_id;
49 |
50 | public String getName()
51 | {
52 | return name;
53 | }
54 |
55 | public void setName(String name)
56 | {
57 | this.name = name;
58 | }
59 |
60 | public String getOwner_ref()
61 | {
62 | return owner_ref;
63 | }
64 |
65 | public void setOwner_ref(String owner_ref)
66 | {
67 | this.owner_ref = owner_ref;
68 | }
69 |
70 | public SettingsData getSettings()
71 | {
72 | return settings;
73 | }
74 |
75 | public void setSettings(SettingsData settings)
76 | {
77 | this.settings = settings;
78 | }
79 |
80 | public UserDataModel getData()
81 | {
82 | return data;
83 | }
84 |
85 | public void setData(UserDataModel data)
86 | {
87 | this.data = data;
88 | }
89 |
90 | public String getCreated()
91 | {
92 | return created;
93 | }
94 |
95 | public void setCreated(String created)
96 | {
97 | this.created = created;
98 | }
99 |
100 | public String getRoom_id()
101 | {
102 | return room_id;
103 | }
104 |
105 | public void setRoom_id(String room_id)
106 | {
107 | this.room_id = room_id;
108 | }
109 | }
110 |
111 | /**
112 | * room_id : 5b9f8f3c6306115afd6a1f07
113 | * role : participant
114 | * mode : group
115 | */
116 |
117 |
118 | }
119 |
--------------------------------------------------------------------------------
/app/src/main/java/com/enablex/multiconferencequickapp/model/SIPData.java:
--------------------------------------------------------------------------------
1 | package com.enablex.multiconferencequickapp.model;
2 |
3 | import java.util.List;
4 |
5 | public class SIPData
6 | {
7 | /**
8 | * enabled : true
9 | * uri : sip:292@192.168.200.116:5060
10 | * name : Mayank
11 | * auth : Yes
12 | * secret : No
13 | * aor : ["sip:292@192.168.200.116:5060","sip:292@192.168.200.116:5060"]
14 | */
15 |
16 | private boolean enabled;
17 | private String uri;
18 | private String name;
19 | private String auth;
20 | private String secret;
21 | private List aor;
22 |
23 | public boolean isEnabled()
24 | {
25 | return enabled;
26 | }
27 |
28 | public void setEnabled(boolean enabled)
29 | {
30 | this.enabled = enabled;
31 | }
32 |
33 | public String getUri()
34 | {
35 | return uri;
36 | }
37 |
38 | public void setUri(String uri)
39 | {
40 | this.uri = uri;
41 | }
42 |
43 | public String getName()
44 | {
45 | return name;
46 | }
47 |
48 | public void setName(String name)
49 | {
50 | this.name = name;
51 | }
52 |
53 | public String getAuth()
54 | {
55 | return auth;
56 | }
57 |
58 | public void setAuth(String auth)
59 | {
60 | this.auth = auth;
61 | }
62 |
63 | public String getSecret()
64 | {
65 | return secret;
66 | }
67 |
68 | public void setSecret(String secret)
69 | {
70 | this.secret = secret;
71 | }
72 |
73 | public List getAor()
74 | {
75 | return aor;
76 | }
77 |
78 | public void setAor(List aor)
79 | {
80 | this.aor = aor;
81 | }
82 | }
83 |
84 |
--------------------------------------------------------------------------------
/app/src/main/java/com/enablex/multiconferencequickapp/model/SettingsData.java:
--------------------------------------------------------------------------------
1 | package com.enablex.multiconferencequickapp.model;
2 |
3 | import java.io.Serializable;
4 |
5 | public class SettingsData implements Serializable
6 | {
7 |
8 | /**
9 | * description : Testing
10 | * mode : lecture
11 | * scheduled : false
12 | * adhoc : false
13 | * participants : 10
14 | * billing_code : 1234
15 | * auto_recording : false
16 | * active_talker : true
17 | * quality : HD
18 | */
19 |
20 | private String description;
21 | private String mode;
22 | private boolean scheduled;
23 | private boolean adhoc;
24 | private String participants;
25 | private int billing_code;
26 | private boolean auto_recording;
27 | private boolean active_talker;
28 | private String quality;
29 |
30 | public String getDescription()
31 | {
32 | return description;
33 | }
34 |
35 | public void setDescription(String description)
36 | {
37 | this.description = description;
38 | }
39 |
40 | public String getMode()
41 | {
42 | return mode;
43 | }
44 |
45 | public void setMode(String mode)
46 | {
47 | this.mode = mode;
48 | }
49 |
50 | public boolean isScheduled()
51 | {
52 | return scheduled;
53 | }
54 |
55 | public void setScheduled(boolean scheduled)
56 | {
57 | this.scheduled = scheduled;
58 | }
59 |
60 | public boolean isAdhoc()
61 | {
62 | return adhoc;
63 | }
64 |
65 | public void setAdhoc(boolean adhoc)
66 | {
67 | this.adhoc = adhoc;
68 | }
69 |
70 | public String getParticipants()
71 | {
72 | return participants;
73 | }
74 |
75 | public void setParticipants(String participants)
76 | {
77 | this.participants = participants;
78 | }
79 |
80 | public int getBilling_code()
81 | {
82 | return billing_code;
83 | }
84 |
85 | public void setBilling_code(int billing_code)
86 | {
87 | this.billing_code = billing_code;
88 | }
89 |
90 | public boolean isAuto_recording()
91 | {
92 | return auto_recording;
93 | }
94 |
95 | public void setAuto_recording(boolean auto_recording)
96 | {
97 | this.auto_recording = auto_recording;
98 | }
99 |
100 | public boolean isActive_talker()
101 | {
102 | return active_talker;
103 | }
104 |
105 | public void setActive_talker(boolean active_talker)
106 | {
107 | this.active_talker = active_talker;
108 | }
109 |
110 | public String getQuality()
111 | {
112 | return quality;
113 | }
114 |
115 | public void setQuality(String quality)
116 | {
117 | this.quality = quality;
118 | }
119 |
120 | }
121 |
--------------------------------------------------------------------------------
/app/src/main/java/com/enablex/multiconferencequickapp/model/UserDataModel.java:
--------------------------------------------------------------------------------
1 | package com.enablex.multiconferencequickapp.model;
2 |
3 | public class UserDataModel
4 | {
5 |
6 |
7 | /**
8 | * name : Mayank
9 | */
10 |
11 | private String name;
12 |
13 | public String getName()
14 | {
15 | return name;
16 | }
17 |
18 | public void setName(String name)
19 | {
20 | this.name = name;
21 | }
22 |
23 | }
24 |
--------------------------------------------------------------------------------
/app/src/main/java/com/enablex/multiconferencequickapp/model/UserModel.java:
--------------------------------------------------------------------------------
1 | package com.enablex.multiconferencequickapp.model;
2 |
3 | public class UserModel {
4 |
5 | /**
6 | * name : moderator
7 | * user_ref : 2236
8 | * role : moderator
9 | * permissions : {"publish":true,"subscribe":true,"record":true,"stats":true,"controlhandlers":true}
10 | * clientId : bdacbfe9-0db9-4577-b0b0-d2538614a640
11 | */
12 |
13 | private String name;
14 | private String user_ref;
15 | private String role;
16 | private PermissionsBean permissions;
17 | private String clientId;
18 |
19 | public String getName() {
20 | return name;
21 | }
22 |
23 | public void setName(String name) {
24 | this.name = name;
25 | }
26 |
27 | public String getUser_ref() {
28 | return user_ref;
29 | }
30 |
31 | public void setUser_ref(String user_ref) {
32 | this.user_ref = user_ref;
33 | }
34 |
35 | public String getRole() {
36 | return role;
37 | }
38 |
39 | public void setRole(String role) {
40 | this.role = role;
41 | }
42 |
43 | public PermissionsBean getPermissions() {
44 | return permissions;
45 | }
46 |
47 | public void setPermissions(PermissionsBean permissions) {
48 | this.permissions = permissions;
49 | }
50 |
51 | public String getClientId() {
52 | return clientId;
53 | }
54 |
55 | public void setClientId(String clientId) {
56 | this.clientId = clientId;
57 | }
58 |
59 | public static class PermissionsBean {
60 | /**
61 | * publish : true
62 | * subscribe : true
63 | * record : true
64 | * stats : true
65 | * controlhandlers : true
66 | */
67 |
68 | private boolean publish;
69 | private boolean subscribe;
70 | private boolean record;
71 | private boolean stats;
72 | private boolean controlhandlers;
73 |
74 | public boolean isPublish() {
75 | return publish;
76 | }
77 |
78 | public void setPublish(boolean publish) {
79 | this.publish = publish;
80 | }
81 |
82 | public boolean isSubscribe() {
83 | return subscribe;
84 | }
85 |
86 | public void setSubscribe(boolean subscribe) {
87 | this.subscribe = subscribe;
88 | }
89 |
90 | public boolean isRecord() {
91 | return record;
92 | }
93 |
94 | public void setRecord(boolean record) {
95 | this.record = record;
96 | }
97 |
98 | public boolean isStats() {
99 | return stats;
100 | }
101 |
102 | public void setStats(boolean stats) {
103 | this.stats = stats;
104 | }
105 |
106 | public boolean isControlhandlers() {
107 | return controlhandlers;
108 | }
109 |
110 | public void setControlhandlers(boolean controlhandlers) {
111 | this.controlhandlers = controlhandlers;
112 | }
113 | }
114 | }
115 |
--------------------------------------------------------------------------------
/app/src/main/java/com/enablex/multiconferencequickapp/utilities/OnDragTouchListener.java:
--------------------------------------------------------------------------------
1 | package com.enablex.multiconferencequickapp.utilities;
2 |
3 | import android.view.MotionEvent;
4 | import android.view.View;
5 |
6 | public class OnDragTouchListener implements View.OnTouchListener {
7 |
8 | private View mView;
9 | private View mParent;
10 | private boolean isDragging;
11 | private boolean isInitialized = false;
12 |
13 | private int width;
14 | private float xWhenAttached;
15 | private float maxLeft;
16 | private float maxRight;
17 | private float dX;
18 |
19 | private int height;
20 | private float yWhenAttached;
21 | private float maxTop;
22 | private float maxBottom;
23 | private float dY;
24 |
25 | private OnDragActionListener mOnDragActionListener;
26 |
27 | public OnDragTouchListener(View view) {
28 | this(view, (View) view.getParent(), null);
29 | }
30 |
31 | public OnDragTouchListener(View view, View parent) {
32 | this(view, parent, null);
33 | }
34 |
35 | public OnDragTouchListener(View view, OnDragActionListener onDragActionListener) {
36 | this(view, (View) view.getParent(), onDragActionListener);
37 | }
38 |
39 | public OnDragTouchListener(View view, View parent, OnDragActionListener onDragActionListener) {
40 | initListener(view, parent);
41 | setOnDragActionListener(onDragActionListener);
42 | }
43 |
44 | public void setOnDragActionListener(OnDragActionListener onDragActionListener) {
45 | mOnDragActionListener = onDragActionListener;
46 | }
47 |
48 | @Override
49 | public boolean onTouch(View v, MotionEvent event) {
50 | if (isDragging) {
51 | float[] bounds = new float[4];
52 | // LEFT
53 | bounds[0] = event.getRawX() + dX;
54 | if (bounds[0] < maxLeft) {
55 | bounds[0] = maxLeft;
56 | }
57 | // RIGHT
58 | bounds[2] = bounds[0] + width;
59 | if (bounds[2] > maxRight) {
60 | bounds[2] = maxRight;
61 | bounds[0] = bounds[2] - width;
62 | }
63 | // TOP
64 | bounds[1] = event.getRawY() + dY;
65 | if (bounds[1] < maxTop) {
66 | bounds[1] = maxTop;
67 | }
68 | // BOTTOM
69 | bounds[3] = bounds[1] + height;
70 | if (bounds[3] > maxBottom) {
71 | bounds[3] = maxBottom;
72 | bounds[1] = bounds[3] - height;
73 | }
74 |
75 | switch (event.getAction()) {
76 | case MotionEvent.ACTION_CANCEL:
77 | case MotionEvent.ACTION_UP:
78 | onDragFinish();
79 | break;
80 | case MotionEvent.ACTION_MOVE:
81 | mView.animate().x(bounds[0]).y(bounds[1]).setDuration(0).start();
82 | break;
83 | }
84 | return true;
85 | } else {
86 | switch (event.getAction()) {
87 | case MotionEvent.ACTION_DOWN:
88 | isDragging = true;
89 | if (!isInitialized) {
90 | updateBounds();
91 | }
92 | dX = v.getX() - event.getRawX();
93 | dY = v.getY() - event.getRawY();
94 | if (mOnDragActionListener != null) {
95 | mOnDragActionListener.onDragStart(mView);
96 | }
97 | return true;
98 | }
99 | }
100 | return false;
101 | }
102 |
103 |
104 | public void initListener(View view, View parent) {
105 | mView = view;
106 | mParent = parent;
107 | isDragging = false;
108 | isInitialized = false;
109 | }
110 |
111 | public void updateBounds() {
112 | updateViewBounds();
113 | updateParentBounds();
114 | isInitialized = true;
115 | }
116 |
117 | public void updateViewBounds() {
118 | width = mView.getWidth();
119 | xWhenAttached = mView.getX();
120 | dX = 0;
121 |
122 | height = mView.getHeight();
123 | yWhenAttached = mView.getY();
124 | dY = 0;
125 | }
126 |
127 | public void updateParentBounds() {
128 | maxLeft = 0;
129 | maxRight = maxLeft + mParent.getWidth();
130 |
131 | maxTop = 0;
132 | maxBottom = maxTop + mParent.getHeight();
133 | }
134 |
135 | private void onDragFinish() {
136 | if (mOnDragActionListener != null) {
137 | mOnDragActionListener.onDragEnd(mView);
138 | }
139 |
140 | dX = 0;
141 | dY = 0;
142 | isDragging = false;
143 | }
144 |
145 | public interface OnDragActionListener {
146 | void onDragStart(View view);
147 |
148 | void onDragEnd(View view);
149 | }
150 | }
151 |
--------------------------------------------------------------------------------
/app/src/main/java/com/enablex/multiconferencequickapp/web_communication/WebCall.java:
--------------------------------------------------------------------------------
1 | package com.enablex.multiconferencequickapp.web_communication;
2 |
3 | import android.app.ProgressDialog;
4 | import android.content.Context;
5 | import android.net.ConnectivityManager;
6 | import android.net.NetworkInfo;
7 | import android.os.AsyncTask;
8 | import android.util.Log;
9 | import android.widget.Toast;
10 |
11 | import org.json.JSONObject;
12 |
13 | import java.io.BufferedReader;
14 | import java.io.InputStream;
15 | import java.io.InputStreamReader;
16 | import java.io.OutputStream;
17 | import java.net.HttpURLConnection;
18 | import java.net.URL;
19 | import java.net.URLEncoder;
20 | import java.util.HashMap;
21 | import java.util.Map;
22 |
23 |
24 | public class WebCall extends AsyncTask {
25 |
26 | private static final String TAG = "WebCall";
27 | private Context context;
28 | private WebResponse callback;
29 | private HashMap paramsMap;
30 | private String urlPath;
31 | private int callCode;
32 | private Boolean isShowDialog = true;
33 | private Boolean isGetCall = false;
34 | private Boolean isAuthenticated = false;
35 | private JSONObject object = null;
36 | ProgressDialog dialog;
37 |
38 | public WebCall(Context context, WebResponse callback, JSONObject object,
39 | String urlPath, int callCode, Boolean isGetCall, Boolean isAuthenticated) {
40 | this.context = context;
41 | this.callback = callback;
42 | this.object = object;
43 | this.urlPath = urlPath;
44 | this.callCode = callCode;
45 | this.isGetCall = isGetCall;
46 | this.isAuthenticated = isAuthenticated;
47 | }
48 |
49 | @Override
50 | protected void onPreExecute() {
51 | super.onPreExecute();
52 | if (!checkIntenetConnection()) {
53 |
54 | return;
55 | }
56 | if (isShowDialog) {
57 | dialog = new ProgressDialog(context);
58 | dialog.setCancelable(false);
59 | dialog.show();
60 | }
61 | }
62 |
63 | @Override
64 | protected String doInBackground(Void... params) {
65 | if (isGetCall) {
66 | return callGetCall();
67 | } else {
68 | return callPostCallWithJSON();
69 | }
70 |
71 | }
72 |
73 | private String callGetCall() {
74 | HttpURLConnection httpURLConnection = null;
75 | try {
76 | URL url = new URL(WebConstants.kBaseURL + urlPath + getDataForGetCall(paramsMap));
77 | Log.e("Weburl", String.valueOf(url));
78 | httpURLConnection = (HttpURLConnection) url.openConnection();
79 | httpURLConnection.setReadTimeout(60000);
80 | httpURLConnection.setConnectTimeout(60000);
81 | httpURLConnection.setRequestMethod("GET");
82 |
83 | if (WebConstants.kTry) {
84 | httpURLConnection.setRequestProperty("x-app-id", WebConstants.kAppId);
85 | httpURLConnection.setRequestProperty("x-app-key", WebConstants.kAppkey);
86 | }
87 | httpURLConnection.setRequestProperty("Content-Type", "application/json");
88 | httpURLConnection.connect();
89 | Log.e("responseCode", String.valueOf(httpURLConnection.getResponseCode()));
90 | if (httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_FORBIDDEN) {
91 | httpURLConnection.disconnect();
92 | return "HTTP_FORBIDDEN";
93 | }
94 | if (httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_OK ||
95 | httpURLConnection.getResponseCode() == 422 ||
96 | httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_UNAUTHORIZED ||
97 | httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_NOT_FOUND) {
98 | InputStream is = null;
99 | if (httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_NOT_FOUND ||
100 | httpURLConnection.getResponseCode() == 422 || httpURLConnection.getResponseCode() == 401) {
101 | is = httpURLConnection.getErrorStream();
102 | } else {
103 | is = httpURLConnection.getInputStream();
104 | }
105 | BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
106 | StringBuilder builder = new StringBuilder();
107 | String line = bufferedReader.readLine();
108 | while (line != null) {
109 | builder.append(line + "\n");
110 | line = bufferedReader.readLine();
111 | }
112 | is.close();
113 | if (httpURLConnection != null) {
114 | httpURLConnection.disconnect();
115 | }
116 | return builder.toString();
117 | } else {
118 | if (httpURLConnection != null) {
119 | httpURLConnection.disconnect();
120 | }
121 | return "Invalid response from the server";
122 | }
123 | } catch (Exception e) {
124 | e.printStackTrace();
125 | } finally {
126 | if (httpURLConnection != null) {
127 | httpURLConnection.disconnect();
128 | }
129 | }
130 | return null;
131 | }
132 |
133 | private String callPostCallWithJSON() {
134 | HttpURLConnection httpURLConnection = null;
135 | try {
136 | URL url = new URL(WebConstants.kBaseURL + urlPath);
137 | Log.e("Weburl", String.valueOf(url));
138 | httpURLConnection = (HttpURLConnection) url.openConnection();
139 | httpURLConnection.setReadTimeout(60000);
140 | httpURLConnection.setConnectTimeout(60000);
141 | httpURLConnection.setRequestMethod("POST");
142 | httpURLConnection.setDoInput(true);
143 | httpURLConnection.setDoOutput(true);
144 | httpURLConnection.setRequestProperty("Content-Type", "application/json");
145 | if (WebConstants.kTry) {
146 | httpURLConnection.setRequestProperty("x-app-id", WebConstants.kAppId);
147 | httpURLConnection.setRequestProperty("x-app-key", WebConstants.kAppkey);
148 | }
149 | httpURLConnection.connect();
150 | OutputStream os = httpURLConnection.getOutputStream();
151 | if (object != null) {
152 | Log.e("jsonObject", object.toString());
153 | os.write(object.toString().getBytes());
154 | os.flush();
155 | os.close();
156 | }
157 | Log.e("responseCode", String.valueOf(httpURLConnection.getResponseCode()));
158 | if (httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_OK ||
159 | httpURLConnection.getResponseCode() == 422 ||
160 | httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_UNAUTHORIZED ||
161 | httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_NOT_FOUND) {
162 | InputStream is = null;
163 | if (httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_NOT_FOUND ||
164 | httpURLConnection.getResponseCode() == 422 || httpURLConnection.getResponseCode() == 401) {
165 | is = httpURLConnection.getErrorStream();
166 | } else {
167 | is = httpURLConnection.getInputStream();
168 | }
169 | BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
170 | StringBuilder builder = new StringBuilder();
171 | String line = bufferedReader.readLine();
172 | while (line != null) {
173 | builder.append(line + "\n");
174 | line = bufferedReader.readLine();
175 | }
176 | is.close();
177 | if (httpURLConnection != null) {
178 | httpURLConnection.disconnect();
179 | }
180 | return builder.toString();
181 | } else {
182 | if (httpURLConnection != null) {
183 | httpURLConnection.disconnect();
184 | }
185 | return "Invalid response from the server";
186 | }
187 | } catch (Exception e) {
188 | e.printStackTrace();
189 | } finally {
190 | if (httpURLConnection != null) {
191 | httpURLConnection.disconnect();
192 | }
193 | }
194 | return null;
195 | }
196 |
197 | @Override
198 | protected void onPostExecute(String response) {
199 | super.onPostExecute(response);
200 | try {
201 | if (dialog != null && dialog.isShowing()) {
202 | dialog.dismiss();
203 | }
204 | if (response == null) {
205 | Toast.makeText(context, "Something went wrong", Toast.LENGTH_SHORT).show();
206 | } else {
207 | Log.d(TAG, response);
208 | if (!response.isEmpty()) {
209 | callback.onWebResponse(response, callCode);
210 | } else {
211 | callback.onWebResponseError(response, callCode);
212 | }
213 | }
214 | } catch (Exception e) {
215 | e.printStackTrace();
216 | }
217 | }
218 |
219 | private String getDataForGetCall(HashMap postparams) {
220 | StringBuilder builder = new StringBuilder();
221 | int count = 0;
222 | if (postparams != null && postparams.size() > 0) {
223 | for (Map.Entry entry : postparams.entrySet()) {
224 | try {
225 | if (count == 0) {
226 | builder.append("?");
227 | } else {
228 | builder.append("&");
229 | }
230 | builder.append(URLEncoder.encode(entry.getKey(), "UTF-8"));
231 | builder.append("=");
232 | builder.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
233 | count++;
234 | } catch (Exception e) {
235 | e.printStackTrace();
236 | }
237 | }
238 | Log.d("Web Query", builder.toString());
239 | return builder.toString();
240 | } else {
241 | return "";
242 | }
243 | }
244 |
245 | private boolean checkIntenetConnection() {
246 | ConnectivityManager connectivityManager = (ConnectivityManager)
247 | context.getSystemService(Context.CONNECTIVITY_SERVICE);
248 | NetworkInfo activeNetInfo = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
249 | NetworkInfo activeNetInfoWifi = connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
250 | boolean isConnected = activeNetInfo != null && activeNetInfo.isConnectedOrConnecting() || activeNetInfoWifi != null && activeNetInfoWifi.isConnectedOrConnecting();
251 | if (isConnected) {
252 | Log.i("NET", "connected" + isConnected);
253 | return true;
254 | } else {
255 | Log.i("NET", "disconnected" + isConnected);
256 | return false;
257 | }
258 | }
259 |
260 | }
261 |
262 |
--------------------------------------------------------------------------------
/app/src/main/java/com/enablex/multiconferencequickapp/web_communication/WebConstants.java:
--------------------------------------------------------------------------------
1 | package com.enablex.multiconferencequickapp.web_communication;
2 |
3 | public class WebConstants {
4 |
5 |
6 | /* To try the app with Enablex hosted service you need to set the kTry = true */
7 | public static final boolean kTry = true;
8 |
9 | /*Your webservice host URL, Keet the defined host when kTry = true */
10 |
11 | public static final String kBaseURL = "https://demo.enablex.io/";
12 |
13 | /*The following information required, Only when kTry = true, When you hosted your own webservice remove these fileds*/
14 |
15 | /*Use enablex portal to create your app and get these following credentials*/
16 | public static final String kAppId = "App--ID";
17 | public static final String kAppkey = "App--Key";
18 |
19 |
20 | public static final String getRoomId = "createRoom/";
21 | public static final int getRoomIdCode = 1;
22 | public static final String validateRoomId = "getRoom/";
23 | public static final int validateRoomIdCode = 2;
24 | public static final String getTokenURL = "createToken/";
25 | public static final int getTokenURLCode = 3;
26 | }
27 |
--------------------------------------------------------------------------------
/app/src/main/java/com/enablex/multiconferencequickapp/web_communication/WebResponse.java:
--------------------------------------------------------------------------------
1 | package com.enablex.multiconferencequickapp.web_communication;
2 |
3 | public interface WebResponse {
4 | void onWebResponse(String response, int callCode);
5 |
6 | void onWebResponseError(String error, int callCode);
7 | }
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-v24/mybutton.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/background.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/camera.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android/629cb1779296907d15f065bb76ffa4df8f2568da/app/src/main/res/drawable/camera.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/disconnect.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android/629cb1779296907d15f065bb76ffa4df8f2568da/app/src/main/res/drawable/disconnect.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/frame_border.xml:
--------------------------------------------------------------------------------
1 |
4 |
7 |
8 |
13 |
14 |
18 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/front_camera.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_videocam.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_videocam_off.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/items_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
8 |
10 |
11 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/logofront.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android/629cb1779296907d15f065bb76ffa4df8f2568da/app/src/main/res/drawable/logofront.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/mute.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/mybutton.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/rear_camera.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/share.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/transparent_bg.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android/629cb1779296907d15f065bb76ffa4df8f2568da/app/src/main/res/drawable/transparent_bg.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/unmute.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/volume_off.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/volume_on.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_video_conference.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
15 |
16 |
23 |
24 |
31 |
32 |
35 |
36 |
43 |
44 |
45 |
46 |
50 |
51 |
56 |
57 |
62 |
63 |
70 |
71 |
76 |
77 |
85 |
86 |
93 |
94 |
101 |
102 |
110 |
111 |
119 |
120 |
121 |
122 |
123 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/dashboard.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
12 |
13 |
21 |
22 |
27 |
28 |
37 |
38 |
48 |
49 |
66 |
67 |
84 |
85 |
93 |
94 |
102 |
103 |
112 |
113 |
114 |
115 |
122 |
123 |
135 |
136 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/horizontalviewitem.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
15 |
16 |
23 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/radiogroup.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/actions.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android/629cb1779296907d15f065bb76ffa4df8f2568da/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android/629cb1779296907d15f065bb76ffa4df8f2568da/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android/629cb1779296907d15f065bb76ffa4df8f2568da/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android/629cb1779296907d15f065bb76ffa4df8f2568da/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android/629cb1779296907d15f065bb76ffa4df8f2568da/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #6f5989
4 | #534367
5 | #D81B60
6 | #FFFFFF
7 | #a4c639
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 30dp
4 | 30dp
5 |
--------------------------------------------------------------------------------
/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | MultiParty QuickApp
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/test/java/com/enablex/multiconferencequickapp/ExampleUnitTest.java:
--------------------------------------------------------------------------------
1 | package com.enablex.demo.demoenablex;
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 | }
--------------------------------------------------------------------------------
/build.gradle:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 |
3 | buildscript {
4 |
5 | repositories {
6 | google()
7 | jcenter()
8 | }
9 | dependencies {
10 | classpath "com.android.tools.build:gradle:8.1.0"
11 |
12 |
13 | // NOTE: Do not place your application dependencies here; they belong
14 | // in the individual module build.gradle files
15 | }
16 | }
17 |
18 | allprojects {
19 | repositories {
20 | google()
21 | jcenter()
22 | mavenCentral()
23 |
24 |
25 | }
26 | }
27 |
28 | task clean(type: Delete) {
29 | delete rootProject.buildDir
30 | }
31 |
--------------------------------------------------------------------------------
/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=-Xmx1536m
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 | #android.enableD8.desugaring=false
15 | android.useAndroidX=true
16 | android.enableJetifier=true
17 |
18 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/EnableX/Multiparty-Video-Chat-Application-Sample-for-Android/629cb1779296907d15f065bb76ffa4df8f2568da/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip
4 | networkTimeout=10000
5 | validateDistributionUrl=true
6 | zipStoreBase=GRADLE_USER_HOME
7 | zipStorePath=wrapper/dists
8 |
--------------------------------------------------------------------------------
/gradlew:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | #
4 | # Copyright © 2015-2021 the original authors.
5 | #
6 | # Licensed under the Apache License, Version 2.0 (the "License");
7 | # you may not use this file except in compliance with the License.
8 | # You may obtain a copy of the License at
9 | #
10 | # https://www.apache.org/licenses/LICENSE-2.0
11 | #
12 | # Unless required by applicable law or agreed to in writing, software
13 | # distributed under the License is distributed on an "AS IS" BASIS,
14 | # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 | # See the License for the specific language governing permissions and
16 | # limitations under the License.
17 | #
18 | # SPDX-License-Identifier: Apache-2.0
19 | #
20 |
21 | ##############################################################################
22 | #
23 | # Gradle start up script for POSIX generated by Gradle.
24 | #
25 | # Important for running:
26 | #
27 | # (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
28 | # noncompliant, but you have some other compliant shell such as ksh or
29 | # bash, then to run this script, type that shell name before the whole
30 | # command line, like:
31 | #
32 | # ksh Gradle
33 | #
34 | # Busybox and similar reduced shells will NOT work, because this script
35 | # requires all of these POSIX shell features:
36 | # * functions;
37 | # * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
38 | # «${var#prefix}», «${var%suffix}», and «$( cmd )»;
39 | # * compound commands having a testable exit status, especially «case»;
40 | # * various built-in commands including «command», «set», and «ulimit».
41 | #
42 | # Important for patching:
43 | #
44 | # (2) This script targets any POSIX shell, so it avoids extensions provided
45 | # by Bash, Ksh, etc; in particular arrays are avoided.
46 | #
47 | # The "traditional" practice of packing multiple parameters into a
48 | # space-separated string is a well documented source of bugs and security
49 | # problems, so this is (mostly) avoided, by progressively accumulating
50 | # options in "$@", and eventually passing that to Java.
51 | #
52 | # Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
53 | # and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
54 | # see the in-line comments for details.
55 | #
56 | # There are tweaks for specific operating systems such as AIX, CygWin,
57 | # Darwin, MinGW, and NonStop.
58 | #
59 | # (3) This script is generated from the Groovy template
60 | # https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
61 | # within the Gradle project.
62 | #
63 | # You can find Gradle at https://github.com/gradle/gradle/.
64 | #
65 | ##############################################################################
66 |
67 | # Attempt to set APP_HOME
68 |
69 | # Resolve links: $0 may be a link
70 | app_path=$0
71 |
72 | # Need this for daisy-chained symlinks.
73 | while
74 | APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
75 | [ -h "$app_path" ]
76 | do
77 | ls=$( ls -ld "$app_path" )
78 | link=${ls#*' -> '}
79 | case $link in #(
80 | /*) app_path=$link ;; #(
81 | *) app_path=$APP_HOME$link ;;
82 | esac
83 | done
84 |
85 | # This is normally unused
86 | # shellcheck disable=SC2034
87 | APP_BASE_NAME=${0##*/}
88 | # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
89 | APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s
90 | ' "$PWD" ) || exit
91 |
92 | # Use the maximum available, or set MAX_FD != -1 to use that value.
93 | MAX_FD=maximum
94 |
95 | warn () {
96 | echo "$*"
97 | } >&2
98 |
99 | die () {
100 | echo
101 | echo "$*"
102 | echo
103 | exit 1
104 | } >&2
105 |
106 | # OS specific support (must be 'true' or 'false').
107 | cygwin=false
108 | msys=false
109 | darwin=false
110 | nonstop=false
111 | case "$( uname )" in #(
112 | CYGWIN* ) cygwin=true ;; #(
113 | Darwin* ) darwin=true ;; #(
114 | MSYS* | MINGW* ) msys=true ;; #(
115 | NONSTOP* ) nonstop=true ;;
116 | esac
117 |
118 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
119 |
120 |
121 | # Determine the Java command to use to start the JVM.
122 | if [ -n "$JAVA_HOME" ] ; then
123 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
124 | # IBM's JDK on AIX uses strange locations for the executables
125 | JAVACMD=$JAVA_HOME/jre/sh/java
126 | else
127 | JAVACMD=$JAVA_HOME/bin/java
128 | fi
129 | if [ ! -x "$JAVACMD" ] ; then
130 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
131 |
132 | Please set the JAVA_HOME variable in your environment to match the
133 | location of your Java installation."
134 | fi
135 | else
136 | JAVACMD=java
137 | if ! command -v java >/dev/null 2>&1
138 | then
139 | die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
140 |
141 | Please set the JAVA_HOME variable in your environment to match the
142 | location of your Java installation."
143 | fi
144 | fi
145 |
146 | # Increase the maximum file descriptors if we can.
147 | if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
148 | case $MAX_FD in #(
149 | max*)
150 | # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
151 | # shellcheck disable=SC2039,SC3045
152 | MAX_FD=$( ulimit -H -n ) ||
153 | warn "Could not query maximum file descriptor limit"
154 | esac
155 | case $MAX_FD in #(
156 | '' | soft) :;; #(
157 | *)
158 | # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
159 | # shellcheck disable=SC2039,SC3045
160 | ulimit -n "$MAX_FD" ||
161 | warn "Could not set maximum file descriptor limit to $MAX_FD"
162 | esac
163 | fi
164 |
165 | # Collect all arguments for the java command, stacking in reverse order:
166 | # * args from the command line
167 | # * the main class name
168 | # * -classpath
169 | # * -D...appname settings
170 | # * --module-path (only if needed)
171 | # * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
172 |
173 | # For Cygwin or MSYS, switch paths to Windows format before running java
174 | if "$cygwin" || "$msys" ; then
175 | APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
176 | CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
177 |
178 | JAVACMD=$( cygpath --unix "$JAVACMD" )
179 |
180 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
181 | for arg do
182 | if
183 | case $arg in #(
184 | -*) false ;; # don't mess with options #(
185 | /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
186 | [ -e "$t" ] ;; #(
187 | *) false ;;
188 | esac
189 | then
190 | arg=$( cygpath --path --ignore --mixed "$arg" )
191 | fi
192 | # Roll the args list around exactly as many times as the number of
193 | # args, so each arg winds up back in the position where it started, but
194 | # possibly modified.
195 | #
196 | # NB: a `for` loop captures its iteration list before it begins, so
197 | # changing the positional parameters here affects neither the number of
198 | # iterations, nor the values presented in `arg`.
199 | shift # remove old arg
200 | set -- "$@" "$arg" # push replacement arg
201 | done
202 | fi
203 |
204 |
205 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
206 | DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
207 |
208 | # Collect all arguments for the java command:
209 | # * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
210 | # and any embedded shellness will be escaped.
211 | # * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
212 | # treated as '${Hostname}' itself on the command line.
213 |
214 | set -- \
215 | "-Dorg.gradle.appname=$APP_BASE_NAME" \
216 | -classpath "$CLASSPATH" \
217 | org.gradle.wrapper.GradleWrapperMain \
218 | "$@"
219 |
220 | # Stop when "xargs" is not available.
221 | if ! command -v xargs >/dev/null 2>&1
222 | then
223 | die "xargs is not available"
224 | fi
225 |
226 | # Use "xargs" to parse quoted args.
227 | #
228 | # With -n1 it outputs one arg per line, with the quotes and backslashes removed.
229 | #
230 | # In Bash we could simply go:
231 | #
232 | # readarray ARGS < <( xargs -n1 <<<"$var" ) &&
233 | # set -- "${ARGS[@]}" "$@"
234 | #
235 | # but POSIX shell has neither arrays nor command substitution, so instead we
236 | # post-process each arg (as a line of input to sed) to backslash-escape any
237 | # character that might be a shell metacharacter, then use eval to reverse
238 | # that process (while maintaining the separation between arguments), and wrap
239 | # the whole thing up as a single "set" statement.
240 | #
241 | # This will of course break if any of these variables contains a newline or
242 | # an unmatched quote.
243 | #
244 |
245 | eval "set -- $(
246 | printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
247 | xargs -n1 |
248 | sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
249 | tr '\n' ' '
250 | )" '"$@"'
251 |
252 | exec "$JAVACMD" "$@"
253 |
--------------------------------------------------------------------------------
/gradlew.bat:
--------------------------------------------------------------------------------
1 | @rem
2 | @rem Copyright 2015 the original author or authors.
3 | @rem
4 | @rem Licensed under the Apache License, Version 2.0 (the "License");
5 | @rem you may not use this file except in compliance with the License.
6 | @rem You may obtain a copy of the License at
7 | @rem
8 | @rem https://www.apache.org/licenses/LICENSE-2.0
9 | @rem
10 | @rem Unless required by applicable law or agreed to in writing, software
11 | @rem distributed under the License is distributed on an "AS IS" BASIS,
12 | @rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 | @rem See the License for the specific language governing permissions and
14 | @rem limitations under the License.
15 | @rem
16 | @rem SPDX-License-Identifier: Apache-2.0
17 | @rem
18 |
19 | @if "%DEBUG%"=="" @echo off
20 | @rem ##########################################################################
21 | @rem
22 | @rem Gradle startup script for Windows
23 | @rem
24 | @rem ##########################################################################
25 |
26 | @rem Set local scope for the variables with windows NT shell
27 | if "%OS%"=="Windows_NT" setlocal
28 |
29 | set DIRNAME=%~dp0
30 | if "%DIRNAME%"=="" set DIRNAME=.
31 | @rem This is normally unused
32 | set APP_BASE_NAME=%~n0
33 | set APP_HOME=%DIRNAME%
34 |
35 | @rem Resolve any "." and ".." in APP_HOME to make it shorter.
36 | for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
37 |
38 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
39 | set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
40 |
41 | @rem Find java.exe
42 | if defined JAVA_HOME goto findJavaFromJavaHome
43 |
44 | set JAVA_EXE=java.exe
45 | %JAVA_EXE% -version >NUL 2>&1
46 | if %ERRORLEVEL% equ 0 goto execute
47 |
48 | echo. 1>&2
49 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
50 | echo. 1>&2
51 | echo Please set the JAVA_HOME variable in your environment to match the 1>&2
52 | echo location of your Java installation. 1>&2
53 |
54 | goto fail
55 |
56 | :findJavaFromJavaHome
57 | set JAVA_HOME=%JAVA_HOME:"=%
58 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
59 |
60 | if exist "%JAVA_EXE%" goto execute
61 |
62 | echo. 1>&2
63 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
64 | echo. 1>&2
65 | echo Please set the JAVA_HOME variable in your environment to match the 1>&2
66 | echo location of your Java installation. 1>&2
67 |
68 | goto fail
69 |
70 | :execute
71 | @rem Setup the command line
72 |
73 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
74 |
75 |
76 | @rem Execute Gradle
77 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
78 |
79 | :end
80 | @rem End local scope for the variables with windows NT shell
81 | if %ERRORLEVEL% equ 0 goto mainEnd
82 |
83 | :fail
84 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
85 | rem the _cmd.exe /c_ return code!
86 | set EXIT_CODE=%ERRORLEVEL%
87 | if %EXIT_CODE% equ 0 set EXIT_CODE=1
88 | if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
89 | exit /b %EXIT_CODE%
90 |
91 | :mainEnd
92 | if "%OS%"=="Windows_NT" endlocal
93 |
94 | :omega
95 |
--------------------------------------------------------------------------------
/local.properties:
--------------------------------------------------------------------------------
1 | ## This file must *NOT* be checked into Version Control Systems,
2 | # as it contains information specific to your local configuration.
3 | #
4 | # Location of the SDK. This is only used by Gradle.
5 | # For customization when using a Version Control System, please read the
6 | # header note.
7 | #Thu Apr 03 11:20:40 IST 2025
8 | sdk.dir=C\:\\Users\\PankajPandey\\AppData\\Local\\Android\\Sdk
9 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
--------------------------------------------------------------------------------