Skip to content

Commit d223ab8

Browse files
committed
메인 페이지 데이터바인딩
1 parent 50fe369 commit d223ab8

File tree

8 files changed

+136
-97
lines changed

8 files changed

+136
-97
lines changed

app/build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,9 @@ android {
3939
viewBinding{
4040
enabled = true
4141
}
42+
dataBinding {
43+
enabled = true
44+
}
4245
buildFeatures {
4346
compose true
4447
}

app/src/main/AndroidManifest.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@
2525
android:name="android.app.lib_name"
2626
android:value="" />
2727
</activity>
28-
<activity android:name=".MainActivity"/>
28+
<activity android:name=".ComposeActivity"/>
2929
<activity
30-
android:name="com.example.webrtc.ComposeActivity"
30+
android:name="com.example.webrtc.MainActivity"
3131
android:exported="true">
3232
<intent-filter>
3333
<action android:name="android.intent.action.MAIN" />

app/src/main/java/com/example/webrtc/MainActivity.kt

Lines changed: 33 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -7,51 +7,58 @@ import androidx.appcompat.app.AppCompatActivity
77
import android.os.Bundle
88
import android.util.Log
99
import android.widget.Toast
10+
import androidx.activity.viewModels
1011
import androidx.appcompat.app.AlertDialog
1112
import androidx.core.app.ActivityCompat
1213
import androidx.core.content.ContextCompat
14+
import androidx.lifecycle.lifecycleScope
15+
import com.example.domain.state.FireStoreState
16+
import com.example.presentaion.viewmodel.FireStoreViewModel
1317
import com.example.webrtc.databinding.ActivityMainBinding
18+
import com.google.android.material.snackbar.Snackbar
1419
import com.google.firebase.firestore.ktx.firestore
1520
import com.google.firebase.ktx.Firebase
21+
import dagger.hilt.android.AndroidEntryPoint
22+
import kotlinx.coroutines.launch
1623

24+
@AndroidEntryPoint
1725
class MainActivity : AppCompatActivity() {
1826
private lateinit var binding: ActivityMainBinding
19-
private val db = Firebase.firestore
27+
private val viewModel: FireStoreViewModel by viewModels()
2028
override fun onCreate(savedInstanceState: Bundle?) {
2129
super.onCreate(savedInstanceState)
2230
binding = ActivityMainBinding.inflate(layoutInflater)
31+
binding.viewModel = viewModel
2332
setContentView(binding.root)
2433
checkCameraAndAudioPermission()
25-
init()
34+
collectState()
2635
}
2736

28-
private fun init() = with(binding) {
29-
start.setOnClickListener {
30-
val roomID = roomID.text.toString()
31-
getRoomInfo(roomID)
32-
}
33-
join.setOnClickListener {
34-
val roomID = roomID.text.toString()
35-
val intent = Intent(this@MainActivity, WebRTCConnectActivity::class.java)
36-
intent.putExtra("roomID", roomID)
37-
intent.putExtra("isJoin", true)
38-
startActivity(intent)
39-
}
40-
}
37+
private fun collectState() {
38+
lifecycleScope.launch {
39+
viewModel.state.collect {
40+
when (it) {
41+
is FireStoreState.EnterRoom -> {
42+
val intent =
43+
Intent(this@MainActivity, WebRTCConnectActivity::class.java).apply {
44+
putExtra("roomID", it.roomId)
45+
putExtra("isJoin", it.isJoin)
46+
addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK)
47+
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
48+
}
49+
startActivity(intent)
50+
}
4151

42-
private fun getRoomInfo(roomID: String) {
43-
db.collection("calls")
44-
.document(roomID)
45-
.get()
46-
.addOnSuccessListener {
47-
if (it["type"] == "OFFER" || it["type"] == "ANSWER" || it["type"] == "END_CALL") {
48-
} else {
49-
val intent = Intent(this@MainActivity, WebRTCConnectActivity::class.java)
50-
intent.putExtra("roomID", roomID)
51-
intent.putExtra("isJoin", false)
52-
startActivity(intent)
52+
is FireStoreState.RoomAlreadyEnded -> {
53+
Snackbar.make(binding.root, "이미 사용된 방입니다.", Snackbar.LENGTH_SHORT).show()
54+
}
55+
56+
is FireStoreState.Idle -> {
57+
58+
}
5359
}
5460
}
61+
}
5562
}
5663

5764
private fun checkCameraAndAudioPermission() {

app/src/main/java/com/example/webrtc/WebRTCApp.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ fun WebRTCApp(
2121
HomeScreen(
2222
navController = navHostController,
2323
state = fireStoreViewModel.state.collectAsState(),
24-
onStart = { fireStoreViewModel.getRoomInfo(it, false) },
25-
onJoin = { fireStoreViewModel.getRoomInfo(it, true) })
24+
onStart = { fireStoreViewModel.getRoomInfo(false) },
25+
onJoin = { fireStoreViewModel.getRoomInfo(true) })
2626
}
2727
composable(Route.CONNECT.path) {
2828
ConnectScreen()
Lines changed: 44 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,49 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
3-
xmlns:app="http://schemas.android.com/apk/res-auto"
4-
xmlns:tools="http://schemas.android.com/tools"
5-
android:layout_width="match_parent"
6-
android:layout_height="match_parent"
7-
tools:context=".view.MainActivity">
2+
<layout>
83

9-
<EditText
10-
android:id="@+id/roomID"
11-
android:layout_width="0dp"
12-
android:layout_height="wrap_content"
13-
android:layout_marginHorizontal="20dp"
14-
android:hint="roomID"
15-
app:layout_constraintBottom_toBottomOf="parent"
16-
app:layout_constraintEnd_toEndOf="parent"
17-
app:layout_constraintStart_toStartOf="parent"
18-
app:layout_constraintTop_toTopOf="parent" />
4+
<data>
195

20-
<Button
21-
android:id="@+id/start"
22-
android:layout_width="wrap_content"
23-
android:layout_height="wrap_content"
24-
android:text="start"
25-
app:layout_constraintStart_toStartOf="@+id/roomID"
26-
app:layout_constraintTop_toBottomOf="@+id/roomID" />
6+
<variable
7+
name="viewModel"
8+
type="com.example.presentaion.viewmodel.FireStoreViewModel" />
9+
</data>
2710

28-
<Button
29-
android:id="@+id/join"
30-
android:layout_width="wrap_content"
31-
android:layout_height="wrap_content"
32-
android:text="join"
33-
app:layout_constraintEnd_toEndOf="@+id/roomID"
34-
app:layout_constraintTop_toBottomOf="@+id/roomID" />
11+
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
12+
xmlns:app="http://schemas.android.com/apk/res-auto"
13+
xmlns:tools="http://schemas.android.com/tools"
14+
android:layout_width="match_parent"
15+
android:layout_height="match_parent"
16+
tools:context=".MainActivity">
3517

36-
</androidx.constraintlayout.widget.ConstraintLayout>
18+
<EditText
19+
android:id="@+id/roomID"
20+
android:layout_width="0dp"
21+
android:layout_height="wrap_content"
22+
android:layout_marginHorizontal="20dp"
23+
android:hint="roomID"
24+
android:text="@={viewModel.roomId}"
25+
app:layout_constraintBottom_toBottomOf="parent"
26+
app:layout_constraintEnd_toEndOf="parent"
27+
app:layout_constraintStart_toStartOf="parent"
28+
app:layout_constraintTop_toTopOf="parent" />
29+
30+
<Button
31+
android:id="@+id/start"
32+
android:layout_width="wrap_content"
33+
android:layout_height="wrap_content"
34+
android:onClick="@{() -> viewModel.getRoomInfo(false)}"
35+
android:text="start"
36+
app:layout_constraintStart_toStartOf="@+id/roomID"
37+
app:layout_constraintTop_toBottomOf="@+id/roomID" />
38+
39+
<Button
40+
android:id="@+id/join"
41+
android:layout_width="wrap_content"
42+
android:layout_height="wrap_content"
43+
android:onClick="@{() -> viewModel.getRoomInfo(true)}"
44+
android:text="join"
45+
app:layout_constraintEnd_toEndOf="@+id/roomID"
46+
app:layout_constraintTop_toBottomOf="@+id/roomID" />
47+
48+
</androidx.constraintlayout.widget.ConstraintLayout>
49+
</layout>

domain/src/main/java/com/example/domain/state/FireStoreState.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@ package com.example.domain.state
22

33
sealed class FireStoreState {
44
object Idle : FireStoreState()
5-
data class EnterRoom(val isJoin: Boolean) : FireStoreState()
6-
object RoomAlreadyEnded: FireStoreState()
5+
data class EnterRoom(val roomId: String, val isJoin: Boolean) : FireStoreState()
6+
object RoomAlreadyEnded : FireStoreState()
77
}

presentaion/src/main/java/com/example/presentaion/viewmodel/FireStoreViewModel.kt

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.example.presentaion.viewmodel
22

3+
import android.util.Log
34
import androidx.lifecycle.ViewModel
45
import androidx.lifecycle.viewModelScope
56
import com.example.domain.state.FireStoreState
@@ -16,12 +17,14 @@ class FireStoreViewModel @Inject constructor(
1617
) : ViewModel() {
1718
private val _state = MutableStateFlow<FireStoreState>(FireStoreState.Idle)
1819
val state = _state.asStateFlow()
19-
fun getRoomInfo(roomId: String, isJoin: Boolean) = viewModelScope.launch {
20-
getRoomInfoUseCase(roomId).collect { snapshot ->
20+
val roomId = MutableStateFlow("")
21+
fun getRoomInfo(isJoin: Boolean) = viewModelScope.launch {
22+
Log.e("123","123")
23+
getRoomInfoUseCase(roomId.value).collect { snapshot ->
2124
if (snapshot["type"] == "OFFER" || snapshot["type"] == "ANSWER" || snapshot["type"] == "END_CALL") {
2225
_state.emit(FireStoreState.RoomAlreadyEnded)
2326
} else {
24-
_state.emit(FireStoreState.EnterRoom(isJoin))
27+
_state.emit(FireStoreState.EnterRoom(roomId.value, isJoin))
2528
}
2629
}
2730
}
Lines changed: 44 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,49 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
3-
xmlns:app="http://schemas.android.com/apk/res-auto"
4-
xmlns:tools="http://schemas.android.com/tools"
5-
android:layout_width="match_parent"
6-
android:layout_height="match_parent"
7-
tools:context=".view.MainActivity">
2+
<layout>
83

9-
<EditText
10-
android:id="@+id/roomID"
11-
android:layout_width="0dp"
12-
android:layout_height="wrap_content"
13-
android:layout_marginHorizontal="20dp"
14-
android:hint="roomID"
15-
app:layout_constraintBottom_toBottomOf="parent"
16-
app:layout_constraintEnd_toEndOf="parent"
17-
app:layout_constraintStart_toStartOf="parent"
18-
app:layout_constraintTop_toTopOf="parent" />
4+
<data>
195

20-
<Button
21-
android:id="@+id/start"
22-
android:layout_width="wrap_content"
23-
android:layout_height="wrap_content"
24-
android:text="start"
25-
app:layout_constraintStart_toStartOf="@+id/roomID"
26-
app:layout_constraintTop_toBottomOf="@+id/roomID" />
6+
<variable
7+
name="viewModel"
8+
type="com.example.presentaion.viewmodel.FireStoreViewModel" />
9+
</data>
2710

28-
<Button
29-
android:id="@+id/join"
30-
android:layout_width="wrap_content"
31-
android:layout_height="wrap_content"
32-
android:text="join"
33-
app:layout_constraintEnd_toEndOf="@+id/roomID"
34-
app:layout_constraintTop_toBottomOf="@+id/roomID" />
11+
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
12+
xmlns:app="http://schemas.android.com/apk/res-auto"
13+
xmlns:tools="http://schemas.android.com/tools"
14+
android:layout_width="match_parent"
15+
android:layout_height="match_parent"
16+
tools:context=".MainActivity">
3517

36-
</androidx.constraintlayout.widget.ConstraintLayout>
18+
<EditText
19+
android:id="@+id/roomID"
20+
android:layout_width="0dp"
21+
android:layout_height="wrap_content"
22+
android:layout_marginHorizontal="20dp"
23+
android:hint="roomID"
24+
android:text="@={viewModel.roomId}"
25+
app:layout_constraintBottom_toBottomOf="parent"
26+
app:layout_constraintEnd_toEndOf="parent"
27+
app:layout_constraintStart_toStartOf="parent"
28+
app:layout_constraintTop_toTopOf="parent" />
29+
30+
<Button
31+
android:id="@+id/start"
32+
android:layout_width="wrap_content"
33+
android:layout_height="wrap_content"
34+
android:onClick="@{() -> viewModel.getRoomInfo(false)}"
35+
android:text="start"
36+
app:layout_constraintStart_toStartOf="@+id/roomID"
37+
app:layout_constraintTop_toBottomOf="@+id/roomID" />
38+
39+
<Button
40+
android:id="@+id/join"
41+
android:layout_width="wrap_content"
42+
android:layout_height="wrap_content"
43+
android:onClick="@{() -> viewModel.getRoomInfo(true)}"
44+
android:text="join"
45+
app:layout_constraintEnd_toEndOf="@+id/roomID"
46+
app:layout_constraintTop_toBottomOf="@+id/roomID" />
47+
48+
</androidx.constraintlayout.widget.ConstraintLayout>
49+
</layout>

0 commit comments

Comments
 (0)