Skip to content

Commit a263d94

Browse files
feat: offline mode dialog
1 parent b5bfca3 commit a263d94

File tree

3 files changed

+30
-0
lines changed

3 files changed

+30
-0
lines changed

app/src/main/java/org/openedx/app/di/ScreenModule.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -496,6 +496,7 @@ val screenModule = module {
496496
viewModel {
497497
DatesViewModel(
498498
datesRouter = get(),
499+
networkConnection = get()
499500
)
500501
}
501502
}

dates/src/main/java/org/openedx/dates/presentation/dates/DatesFragment.kt

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,8 @@ import androidx.compose.runtime.collectAsState
4040
import androidx.compose.runtime.getValue
4141
import androidx.compose.runtime.mutableStateOf
4242
import androidx.compose.runtime.remember
43+
import androidx.compose.runtime.saveable.rememberSaveable
44+
import androidx.compose.runtime.setValue
4345
import androidx.compose.ui.Alignment
4446
import androidx.compose.ui.Modifier
4547
import androidx.compose.ui.graphics.Color
@@ -58,6 +60,7 @@ import org.koin.androidx.viewmodel.ext.android.viewModel
5860
import org.openedx.core.presentation.ListItemPosition
5961
import org.openedx.core.ui.HandleUIMessage
6062
import org.openedx.core.ui.MainScreenTitle
63+
import org.openedx.core.ui.OfflineModeDialog
6164
import org.openedx.core.ui.displayCutoutForLandscape
6265
import org.openedx.core.ui.statusBarsInset
6366
import org.openedx.core.ui.theme.OpenEdXTheme
@@ -90,6 +93,7 @@ class DatesFragment : Fragment() {
9093
DatesScreen(
9194
uiState = uiState,
9295
uiMessage = uiMessage,
96+
hasInternetConnection = viewModel.hasInternetConnection,
9397
onAction = { action ->
9498
when (action) {
9599
DatesViewActions.OpenSettings -> {
@@ -117,6 +121,7 @@ class DatesFragment : Fragment() {
117121
private fun DatesScreen(
118122
uiState: DatesUIState,
119123
uiMessage: UIMessage?,
124+
hasInternetConnection: Boolean,
120125
onAction: (DatesViewActions) -> Unit,
121126
) {
122127
val scaffoldState = rememberScaffoldState()
@@ -133,6 +138,9 @@ private fun DatesScreen(
133138
refreshing = uiState.isRefreshing,
134139
onRefresh = { onAction(DatesViewActions.SwipeRefresh) }
135140
)
141+
var isInternetConnectionShown by rememberSaveable {
142+
mutableStateOf(false)
143+
}
136144

137145
Scaffold(
138146
scaffoldState = scaffoldState,
@@ -216,6 +224,21 @@ private fun DatesScreen(
216224
pullRefreshState,
217225
Modifier.align(Alignment.TopCenter)
218226
)
227+
228+
if (!isInternetConnectionShown && !hasInternetConnection) {
229+
OfflineModeDialog(
230+
Modifier
231+
.fillMaxWidth()
232+
.align(Alignment.BottomCenter),
233+
onDismissCLick = {
234+
isInternetConnectionShown = true
235+
},
236+
onReloadClick = {
237+
isInternetConnectionShown = true
238+
onAction(DatesViewActions.SwipeRefresh)
239+
}
240+
)
241+
}
219242
}
220243
}
221244
)
@@ -372,6 +395,7 @@ private fun DatesScreenPreview() {
372395
DatesScreen(
373396
uiState = DatesUIState(isLoading = false),
374397
uiMessage = null,
398+
hasInternetConnection = true,
375399
onAction = {}
376400
)
377401
}

dates/src/main/java/org/openedx/dates/presentation/dates/DatesViewModel.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,14 @@ import kotlinx.coroutines.flow.asSharedFlow
1010
import kotlinx.coroutines.flow.asStateFlow
1111
import kotlinx.coroutines.flow.update
1212
import kotlinx.coroutines.launch
13+
import org.openedx.core.system.connection.NetworkConnection
1314
import org.openedx.dates.presentation.DatesRouter
1415
import org.openedx.foundation.presentation.BaseViewModel
1516
import org.openedx.foundation.presentation.UIMessage
1617

1718
class DatesViewModel(
1819
private val datesRouter: DatesRouter,
20+
private val networkConnection: NetworkConnection,
1921
) : BaseViewModel() {
2022

2123
private val _uiState = MutableStateFlow(DatesUIState())
@@ -26,6 +28,9 @@ class DatesViewModel(
2628
val uiMessage: SharedFlow<UIMessage>
2729
get() = _uiMessage.asSharedFlow()
2830

31+
val hasInternetConnection: Boolean
32+
get() = networkConnection.isOnline()
33+
2934
init {
3035
fetchDates()
3136
}

0 commit comments

Comments
 (0)