Skip to content

Commit b4fdc4b

Browse files
committed
removed hardcoded compose navigator from composable.
1 parent 0e4d24e commit b4fdc4b

File tree

16 files changed

+119
-91
lines changed

16 files changed

+119
-91
lines changed

app/src/main/kotlin/io/getstream/whatsappclone/navigation/WhatsAppNavHost.kt

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,12 @@ import androidx.navigation.compose.NavHost
2222

2323
@Composable
2424
fun WhatsAppNavHost(
25-
navHostController: NavHostController,
26-
composeNavigator: AppComposeNavigator
25+
navHostController: NavHostController
2726
) {
2827
NavHost(
2928
navController = navHostController,
3029
startDestination = WhatsAppScreens.Home.route
3130
) {
32-
whatsAppHomeNavigation(
33-
composeNavigator = composeNavigator
34-
)
31+
whatsAppHomeNavigation()
3532
}
3633
}

app/src/main/kotlin/io/getstream/whatsappclone/navigation/WhatsAppNavigation.kt

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,11 @@ import io.getstream.whatsappclone.ui.WhatsAppTabPager
2929
import io.getstream.whatsappclone.ui.WhatsAppTopBar
3030

3131
fun NavGraphBuilder.whatsAppHomeNavigation(
32-
composeNavigator: AppComposeNavigator
3332
) {
3433
composable(route = WhatsAppScreens.Home.name) {
3534
Scaffold(topBar = { WhatsAppTopBar() }) { padding ->
3635
WhatsAppTabPager(
37-
modifier = Modifier.padding(padding),
38-
composeNavigator = composeNavigator
36+
modifier = Modifier.padding(padding)
3937
)
4038
}
4139
}
@@ -47,9 +45,8 @@ fun NavGraphBuilder.whatsAppHomeNavigation(
4745
val channelId = it.arguments?.getString("channelId") ?: return@composable
4846
WhatsAppMessages(
4947
channelId = channelId,
50-
composeNavigator = composeNavigator,
51-
whatsAppMessagesViewModel = hiltViewModel()
52-
)
48+
49+
)
5350
}
5451

5552
composable(
@@ -61,7 +58,6 @@ fun NavGraphBuilder.whatsAppHomeNavigation(
6158

6259
WhatsAppCallHistoryInfo(
6360
whatsAppUser = whatsAppUser,
64-
composeNavigator = composeNavigator
65-
)
61+
)
6662
}
6763
}

app/src/main/kotlin/io/getstream/whatsappclone/navigation/WhatsAppPagerContent.kt

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,14 @@ import android.app.Activity
2020
import androidx.activity.compose.BackHandler
2121
import androidx.compose.runtime.Composable
2222
import androidx.compose.ui.platform.LocalContext
23-
import androidx.hilt.navigation.compose.hiltViewModel
2423
import io.getstream.whatsappclone.calls.WhatsAppCalls
2524
import io.getstream.whatsappclone.camera.WhatsAppCamera
26-
import io.getstream.whatsappclone.chats.WhatsAppChannels
25+
import io.getstream.whatsappclone.chats.channels.WhatsAppChannels
2726
import io.getstream.whatsappclone.status.WhatsAppStatus
2827

2928
@Composable
3029
fun WhatsAppPagerContent(
31-
page: Int,
32-
composeNavigator: AppComposeNavigator
30+
page: Int
3331
) {
3432
val activity = (LocalContext.current as? Activity)
3533
BackHandler {
@@ -38,11 +36,8 @@ fun WhatsAppPagerContent(
3836

3937
when (page) {
4038
WhatsAppPage.Camera.index -> WhatsAppCamera()
41-
WhatsAppPage.Chats.index -> WhatsAppChannels(composeNavigator = composeNavigator)
39+
WhatsAppPage.Chats.index -> WhatsAppChannels()
4240
WhatsAppPage.Status.index -> WhatsAppStatus()
43-
WhatsAppPage.Calls.index -> WhatsAppCalls(
44-
composeNavigator = composeNavigator,
45-
whatsAppCallsViewModel = hiltViewModel()
46-
)
41+
WhatsAppPage.Calls.index -> WhatsAppCalls()
4742
}
4843
}

app/src/main/kotlin/io/getstream/whatsappclone/ui/WhatsAppCloneMain.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,7 @@ fun WhatsAppCloneMain(
3737

3838
WhatsAppCloneBackground {
3939
WhatsAppNavHost(
40-
navHostController = navHostController,
41-
composeNavigator = composeNavigator
40+
navHostController = navHostController
4241
)
4342
}
4443
}

app/src/main/kotlin/io/getstream/whatsappclone/ui/WhatsAppTabPager.kt

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,7 @@ import kotlinx.coroutines.launch
4646

4747
@Composable
4848
fun WhatsAppTabPager(
49-
modifier: Modifier = Modifier,
50-
composeNavigator: AppComposeNavigator
49+
modifier: Modifier = Modifier
5150
) {
5251
val coroutineScope = rememberCoroutineScope()
5352
val pagerState = rememberPagerState()
@@ -110,8 +109,7 @@ fun WhatsAppTabPager(
110109
) { page ->
111110

112111
WhatsAppPagerContent(
113-
page = page,
114-
composeNavigator = composeNavigator
112+
page = page
115113
)
116114
}
117115
}

features/calls/src/main/kotlin/io/getstream/whatsappclone/calls/WhatsAppCalls.kt

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -20,30 +20,29 @@ import androidx.compose.foundation.lazy.LazyColumn
2020
import androidx.compose.foundation.lazy.items
2121
import androidx.compose.runtime.Composable
2222
import androidx.compose.runtime.getValue
23+
import androidx.hilt.navigation.compose.hiltViewModel
2324
import androidx.lifecycle.compose.collectAsStateWithLifecycle
2425
import io.getstream.whatsappclone.designsystem.component.WhatsAppError
2526
import io.getstream.whatsappclone.designsystem.component.WhatsAppLoadingColumn
26-
import io.getstream.whatsappclone.navigation.AppComposeNavigator
27-
import io.getstream.whatsappclone.navigation.WhatsAppScreens
27+
import io.getstream.whatsappclone.model.WhatsAppUser
2828
import io.getstream.whatsappclone.uistate.WhatsAppUserUiState
2929

3030
@Composable
3131
fun WhatsAppCalls(
32-
composeNavigator: AppComposeNavigator,
33-
whatsAppCallsViewModel: WhatsAppCallsViewModel
32+
whatsAppCallsViewModel: WhatsAppCallsViewModel = hiltViewModel()
3433
) {
3534
val whatsAppUsersUiState by whatsAppCallsViewModel.whatsAppUserState.collectAsStateWithLifecycle()
3635

3736
WhatsAppCallsScreen(
38-
composeNavigator = composeNavigator,
39-
whatsAppUsersUiState = whatsAppUsersUiState
37+
whatsAppUsersUiState = whatsAppUsersUiState,
38+
onHistoryItemClick = whatsAppCallsViewModel::navigateToCallInfo
4039
)
4140
}
4241

4342
@Composable
4443
private fun WhatsAppCallsScreen(
45-
composeNavigator: AppComposeNavigator,
46-
whatsAppUsersUiState: WhatsAppUserUiState
44+
whatsAppUsersUiState: WhatsAppUserUiState,
45+
onHistoryItemClick: (WhatsAppUser) -> Unit,
4746
) {
4847
when (whatsAppUsersUiState) {
4948
WhatsAppUserUiState.Loading -> WhatsAppLoadingColumn()
@@ -55,7 +54,7 @@ private fun WhatsAppCallsScreen(
5554
key = { it.name }
5655
) {
5756
WhatsAppCallHistory(whatsAppUser = it) {
58-
composeNavigator.navigate(WhatsAppScreens.CallInfo.createRoute(whatsAppUser = it))
57+
onHistoryItemClick(it)
5958
}
6059
}
6160
}

features/calls/src/main/kotlin/io/getstream/whatsappclone/calls/WhatsAppCallsViewModel.kt

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,21 @@ import androidx.lifecycle.viewModelScope
2121
import dagger.hilt.android.lifecycle.HiltViewModel
2222
import io.getstream.whatsappclone.data.coroutines.WhileSubscribedOrRetained
2323
import io.getstream.whatsappclone.data.repository.CallHistoryRepository
24+
import io.getstream.whatsappclone.model.WhatsAppUser
25+
import io.getstream.whatsappclone.navigation.AppComposeNavigator
26+
import io.getstream.whatsappclone.navigation.WhatsAppScreens
2427
import io.getstream.whatsappclone.uistate.WhatsAppUserExtensive
2528
import io.getstream.whatsappclone.uistate.WhatsAppUserUiState
26-
import javax.inject.Inject
2729
import kotlinx.coroutines.flow.StateFlow
2830
import kotlinx.coroutines.flow.flatMapLatest
2931
import kotlinx.coroutines.flow.flowOf
3032
import kotlinx.coroutines.flow.stateIn
33+
import javax.inject.Inject
3134

3235
@HiltViewModel
3336
class WhatsAppCallsViewModel @Inject constructor(
34-
callHistoryRepository: CallHistoryRepository
37+
callHistoryRepository: CallHistoryRepository,
38+
private val composeNavigator: AppComposeNavigator
3539
) : ViewModel() {
3640

3741
val whatsAppUserState: StateFlow<WhatsAppUserUiState> =
@@ -52,4 +56,8 @@ class WhatsAppCallsViewModel @Inject constructor(
5256
started = WhileSubscribedOrRetained,
5357
initialValue = WhatsAppUserUiState.Loading
5458
)
59+
60+
fun navigateToCallInfo(whatsAppUser: WhatsAppUser) {
61+
composeNavigator.navigate(WhatsAppScreens.CallInfo.createRoute(whatsAppUser = whatsAppUser))
62+
}
5563
}

features/calls/src/main/kotlin/io/getstream/whatsappclone/calls/info/WhatsAppCallHistoryInfo.kt

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,18 @@ import androidx.compose.foundation.layout.padding
2121
import androidx.compose.material3.Scaffold
2222
import androidx.compose.runtime.Composable
2323
import androidx.compose.ui.Modifier
24+
import androidx.hilt.navigation.compose.hiltViewModel
2425
import io.getstream.whatsappclone.model.WhatsAppUser
2526
import io.getstream.whatsappclone.navigation.AppComposeNavigator
2627

2728
@Composable
2829
fun WhatsAppCallHistoryInfo(
2930
whatsAppUser: WhatsAppUser,
30-
composeNavigator: AppComposeNavigator
31+
whatsAppCallHistoryViewModel: WhatsAppCallHistoryViewModel = hiltViewModel()
3132
) {
3233
Scaffold(
3334
modifier = Modifier.fillMaxSize(),
34-
topBar = { WhatsAppCallHistoryTopBar(composeNavigator = composeNavigator) }
35+
topBar = { WhatsAppCallHistoryTopBar(onBackClick = whatsAppCallHistoryViewModel::navigateUp) }
3536
) {
3637
WhatsAppCallHistoryInfoBody(
3738
modifier = Modifier.padding(it),

features/calls/src/main/kotlin/io/getstream/whatsappclone/calls/info/WhatsAppCallHistoryInfoBody.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ import androidx.compose.ui.Modifier
2828
import androidx.compose.ui.draw.clip
2929
import androidx.compose.ui.unit.dp
3030
import androidx.constraintlayout.compose.ConstraintLayout
31+
import androidx.hilt.navigation.compose.hiltViewModel
3132
import com.skydoves.landscapist.glide.GlideImage
3233
import io.getstream.whatsappclone.designsystem.R
3334
import io.getstream.whatsappclone.designsystem.icon.WhatsAppIcons
@@ -40,7 +41,8 @@ import java.util.Date
4041
@Composable
4142
fun WhatsAppCallHistoryInfoBody(
4243
modifier: Modifier,
43-
whatsAppUser: WhatsAppUser
44+
whatsAppUser: WhatsAppUser,
45+
4446
) {
4547
ConstraintLayout(modifier = modifier.padding(12.dp)) {
4648
val (image, name, call, divider, location, date) = createRefs()

features/calls/src/main/kotlin/io/getstream/whatsappclone/calls/info/WhatsAppCallHistoryTopBar.kt

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,17 +37,17 @@ import io.getstream.whatsappclone.navigation.WhatsAppCloneComposeNavigator
3737

3838
@Composable
3939
fun WhatsAppCallHistoryTopBar(
40-
composeNavigator: AppComposeNavigator
40+
onBackClick: () -> Unit
4141
) {
4242
TopAppBar(
4343
modifier = Modifier.fillMaxWidth(),
4444
navigationIcon = {
4545
Icon(
4646
modifier = Modifier
47-
.size(26.dp)
48-
.clickable {
49-
composeNavigator.navigateUp()
50-
},
47+
.size(26.dp)
48+
.clickable {
49+
onBackClick()
50+
},
5151
imageVector = WhatsAppIcons.ArrowBack,
5252
tint = MaterialTheme.colorScheme.tertiary,
5353
contentDescription = null
@@ -85,18 +85,15 @@ fun WhatsAppCallHistoryTopBar(
8585
@Composable
8686
private fun WhatsAppCallHistoryTopBarPreview() {
8787
WhatsAppCloneComposeTheme {
88-
WhatsAppCallHistoryTopBar(
89-
composeNavigator = WhatsAppCloneComposeNavigator()
90-
)
88+
WhatsAppCallHistoryTopBar(onBackClick = {})
9189
}
9290
}
9391

9492
@Preview
9593
@Composable
9694
private fun WhatsAppCallHistoryTopBarDarkPreview() {
9795
WhatsAppCloneComposeTheme(darkTheme = true) {
98-
WhatsAppCallHistoryTopBar(
99-
composeNavigator = WhatsAppCloneComposeNavigator()
96+
WhatsAppCallHistoryTopBar(onBackClick = {}
10097
)
10198
}
10299
}

0 commit comments

Comments
 (0)