File tree Expand file tree Collapse file tree 10 files changed +112
-1
lines changed
data/src/main/java/com/example/data
src/main/java/com/example
src/main/java/com/example/presentaion/viewmodel Expand file tree Collapse file tree 10 files changed +112
-1
lines changed Original file line number Diff line number Diff line change @@ -26,6 +26,9 @@ android {
2626 proguardFiles getDefaultProguardFile(' proguard-android-optimize.txt' ), ' proguard-rules.pro'
2727 }
2828 }
29+ composeOptions {
30+ kotlinCompilerExtensionVersion = " 1.4.2"
31+ }
2932 compileOptions {
3033 sourceCompatibility JavaVersion . VERSION_1_8
3134 targetCompatibility JavaVersion . VERSION_1_8
@@ -36,6 +39,9 @@ android {
3639 viewBinding{
3740 enabled = true
3841 }
42+ buildFeatures {
43+ compose true
44+ }
3945}
4046
4147dependencies {
@@ -66,5 +72,6 @@ dependencies {
6672 implementation ' androidx.activity:activity-compose:1.7.2'
6773
6874 implementation " androidx.navigation:navigation-compose:2.6.0"
75+ implementation " androidx.hilt:hilt-navigation-compose:1.0.0"
6976
7077}
Original file line number Diff line number Diff line change 2525 android : name =" android.app.lib_name"
2626 android : value =" " />
2727 </activity >
28+ <activity android : name =" .MainActivity" />
2829 <activity
29- android : name =" com.example.webrtc.MainActivity "
30+ android : name =" com.example.webrtc.ComposeActivity "
3031 android : exported =" true" >
3132 <intent-filter >
3233 <action android : name =" android.intent.action.MAIN" />
Original file line number Diff line number Diff line change 11package com.example.data.di
22
3+ import com.example.data.repository.FireStoreRepositoryImpl
34import com.example.data.repository.SignalRepositoryImpl
45import com.example.data.repository.WebRTCRepositoryImpl
6+ import com.example.domain.repository.FireStoreRepository
57import com.example.domain.repository.SignalRepository
68import com.example.domain.repository.WebRTCRepository
79import dagger.Binds
@@ -18,4 +20,7 @@ internal abstract class RepositoryModule {
1820
1921 @Binds
2022 abstract fun bindsWebRTCRepository (webRTCRepositoryImpl : WebRTCRepositoryImpl ): WebRTCRepository
23+
24+ @Binds
25+ abstract fun bindsFireStoreRepository (fireStoreRepositoryImpl : FireStoreRepositoryImpl ): FireStoreRepository
2126}
Original file line number Diff line number Diff line change 1+ package com.example.data.repository
2+
3+ import android.content.Intent
4+ import com.example.domain.repository.FireStoreRepository
5+ import com.google.firebase.firestore.DocumentSnapshot
6+ import com.google.firebase.firestore.FirebaseFirestore
7+ import kotlinx.coroutines.CoroutineScope
8+ import kotlinx.coroutines.Dispatchers
9+ import kotlinx.coroutines.channels.awaitClose
10+ import kotlinx.coroutines.flow.Flow
11+ import kotlinx.coroutines.flow.callbackFlow
12+ import kotlinx.coroutines.launch
13+ import javax.inject.Inject
14+
15+ class FireStoreRepositoryImpl @Inject constructor(
16+ private val firestore : FirebaseFirestore
17+ ) : FireStoreRepository {
18+ override fun getRoomInfo (roomID : String ): Flow <DocumentSnapshot > = callbackFlow {
19+ firestore.collection(" calls" )
20+ .document(roomID)
21+ .get()
22+ .addOnSuccessListener {
23+ CoroutineScope (Dispatchers .IO ).launch {
24+ send(it)
25+ }
26+ }
27+ awaitClose {}
28+ }
29+ }
Original file line number Diff line number Diff line change @@ -46,4 +46,7 @@ dependencies {
4646 kapt ' com.google.dagger:hilt-android-compiler:2.45'
4747
4848 implementation ' org.webrtc:google-webrtc:1.0.32006'
49+
50+ implementation platform(' com.google.firebase:firebase-bom:31.0.3' )
51+ implementation ' com.google.firebase:firebase-firestore-ktx'
4952}
Original file line number Diff line number Diff line change 1+ package com.example.domain.repository
2+
3+ import com.google.firebase.firestore.DocumentSnapshot
4+ import kotlinx.coroutines.flow.Flow
5+
6+ interface FireStoreRepository {
7+ fun getRoomInfo (roomID : String ): Flow <DocumentSnapshot >
8+ }
Original file line number Diff line number Diff line change 1+ package com.example.domain.state
2+
3+ sealed class FireStoreState {
4+ object Idle : FireStoreState()
5+ data class EnterRoom (val isJoin : Boolean ) : FireStoreState()
6+ object RoomAlreadyEnded: FireStoreState()
7+ }
Original file line number Diff line number Diff line change 1+ package com.example.usecase
2+
3+ import com.example.domain.repository.FireStoreRepository
4+ import javax.inject.Inject
5+
6+ class GetRoomInfoUseCase @Inject constructor(private val fireStoreRepository : FireStoreRepository ) {
7+
8+ suspend operator fun invoke (roomId : String ) = fireStoreRepository.getRoomInfo(roomId)
9+ }
Original file line number Diff line number Diff line change @@ -24,13 +24,25 @@ android {
2424 proguardFiles getDefaultProguardFile(' proguard-android-optimize.txt' ), ' proguard-rules.pro'
2525 }
2626 }
27+ composeOptions {
28+ kotlinCompilerExtensionVersion = " 1.4.2"
29+ }
30+ buildFeatures {
31+ compose true
32+ }
2733 compileOptions {
2834 sourceCompatibility JavaVersion . VERSION_1_8
2935 targetCompatibility JavaVersion . VERSION_1_8
3036 }
3137 kotlinOptions {
3238 jvmTarget = ' 1.8'
3339 }
40+ viewBinding{
41+ enabled = true
42+ }
43+ dataBinding {
44+ enabled = true
45+ }
3446}
3547
3648dependencies {
@@ -49,6 +61,7 @@ dependencies {
4961 implementation ' androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1'
5062 implementation ' androidx.lifecycle:lifecycle-runtime-ktx:2.6.1'
5163 implementation ' androidx.activity:activity-ktx:1.7.2'
64+ implementation ' androidx.fragment:fragment-ktx:1.6.0'
5265 implementation ' org.webrtc:google-webrtc:1.0.32006'
5366
5467 implementation platform(' com.google.firebase:firebase-bom:31.0.3' )
@@ -59,4 +72,5 @@ dependencies {
5972 implementation ' androidx.compose.material:material:1.4.3'
6073 implementation ' androidx.compose.runtime:runtime:1.4.3'
6174 implementation ' androidx.activity:activity-compose:1.7.2'
75+ implementation " androidx.navigation:navigation-compose:2.6.0"
6276}
Original file line number Diff line number Diff line change 1+ package com.example.presentaion.viewmodel
2+
3+ import androidx.lifecycle.ViewModel
4+ import androidx.lifecycle.viewModelScope
5+ import com.example.domain.state.FireStoreState
6+ import com.example.usecase.GetRoomInfoUseCase
7+ import dagger.hilt.android.lifecycle.HiltViewModel
8+ import kotlinx.coroutines.flow.MutableStateFlow
9+ import kotlinx.coroutines.flow.asStateFlow
10+ import kotlinx.coroutines.launch
11+ import javax.inject.Inject
12+
13+ @HiltViewModel
14+ class FireStoreViewModel @Inject constructor(
15+ private val getRoomInfoUseCase : GetRoomInfoUseCase
16+ ) : ViewModel() {
17+ private val _state = MutableStateFlow <FireStoreState >(FireStoreState .Idle )
18+ val state = _state .asStateFlow()
19+ fun getRoomInfo (roomId : String , isJoin : Boolean ) = viewModelScope.launch {
20+ getRoomInfoUseCase(roomId).collect { snapshot ->
21+ if (snapshot[" type" ] == " OFFER" || snapshot[" type" ] == " ANSWER" || snapshot[" type" ] == " END_CALL" ) {
22+ _state .emit(FireStoreState .RoomAlreadyEnded )
23+ } else {
24+ _state .emit(FireStoreState .EnterRoom (isJoin))
25+ }
26+ }
27+ }
28+ }
You can’t perform that action at this time.
0 commit comments