From 320e23724790b79b7afd00cdf6dfac65c61e5c2b Mon Sep 17 00:00:00 2001 From: PavloNetrebchuk Date: Mon, 25 Mar 2024 13:08:12 +0200 Subject: [PATCH] refactor: Created WarningLabel --- .../detail/CourseDetailsFragment.kt | 167 +++++++----------- .../course/presentation/ui/CourseUI.kt | 67 +++++++ 2 files changed, 134 insertions(+), 100 deletions(-) diff --git a/course/src/main/java/org/openedx/course/presentation/detail/CourseDetailsFragment.kt b/course/src/main/java/org/openedx/course/presentation/detail/CourseDetailsFragment.kt index 15e936a84..5e3b852ce 100644 --- a/course/src/main/java/org/openedx/course/presentation/detail/CourseDetailsFragment.kt +++ b/course/src/main/java/org/openedx/course/presentation/detail/CourseDetailsFragment.kt @@ -2,7 +2,10 @@ package org.openedx.course.presentation.detail import android.annotation.SuppressLint import android.content.Intent -import android.content.res.Configuration.* +import android.content.res.Configuration.ORIENTATION_LANDSCAPE +import android.content.res.Configuration.ORIENTATION_PORTRAIT +import android.content.res.Configuration.UI_MODE_NIGHT_NO +import android.content.res.Configuration.UI_MODE_NIGHT_YES import android.net.Uri import android.os.Bundle import android.view.LayoutInflater @@ -10,21 +13,56 @@ import android.view.ViewGroup import android.webkit.WebResourceRequest import android.webkit.WebView import android.webkit.WebViewClient -import androidx.compose.foundation.* -import androidx.compose.foundation.layout.* -import androidx.compose.material.* +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.aspectRatio +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.navigationBarsPadding +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.widthIn +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material.CircularProgressIndicator +import androidx.compose.material.Icon +import androidx.compose.material.IconButton +import androidx.compose.material.MaterialTheme +import androidx.compose.material.Scaffold +import androidx.compose.material.Surface +import androidx.compose.material.Text import androidx.compose.material.icons.Icons import androidx.compose.material.icons.outlined.Report -import androidx.compose.runtime.* +import androidx.compose.material.rememberScaffoldState +import androidx.compose.runtime.Composable +import androidx.compose.runtime.MutableState +import androidx.compose.runtime.getValue import androidx.compose.runtime.livedata.observeAsState +import androidx.compose.runtime.mutableFloatStateOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha -import androidx.compose.ui.draw.shadow import androidx.compose.ui.graphics.Color -import androidx.compose.ui.platform.* +import androidx.compose.ui.graphics.vector.rememberVectorPainter +import androidx.compose.ui.platform.ComposeView +import androidx.compose.ui.platform.LocalConfiguration +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalUriHandler +import androidx.compose.ui.platform.ViewCompositionStrategy +import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.semantics.semantics @@ -44,17 +82,28 @@ import org.openedx.core.UIMessage import org.openedx.core.domain.model.Course import org.openedx.core.domain.model.Media import org.openedx.core.extension.isEmailValid -import org.openedx.core.ui.* +import org.openedx.core.ui.AuthButtonsPanel +import org.openedx.core.ui.HandleUIMessage +import org.openedx.core.ui.OfflineModeDialog +import org.openedx.core.ui.OpenEdXButton +import org.openedx.core.ui.Toolbar +import org.openedx.core.ui.WindowSize +import org.openedx.core.ui.WindowType +import org.openedx.core.ui.displayCutoutForLandscape +import org.openedx.core.ui.isPreview +import org.openedx.core.ui.rememberWindowSize +import org.openedx.core.ui.statusBarsInset import org.openedx.core.ui.theme.OpenEdXTheme import org.openedx.core.ui.theme.appColors -import org.openedx.core.ui.theme.appShapes import org.openedx.core.ui.theme.appTypography +import org.openedx.core.ui.windowSizeValue import org.openedx.core.utils.EmailUtil import org.openedx.course.R import org.openedx.course.presentation.CourseRouter import org.openedx.course.presentation.ui.CourseImageHeader +import org.openedx.course.presentation.ui.WarningLabel import java.nio.charset.StandardCharsets -import java.util.* +import java.util.Date import org.openedx.course.R as courseR class CourseDetailsFragment : Fragment() { @@ -555,100 +604,18 @@ private fun CourseDetailNativeContentLandscape( @Composable private fun EnrollOverLabel() { - val borderColor = if (!isSystemInDarkTheme()) { - MaterialTheme.appColors.cardViewBorder - } else { - MaterialTheme.appColors.surface - } - Box( - Modifier - .fillMaxWidth() - .shadow( - 0.dp, - MaterialTheme.appShapes.material.medium - ) - .background( - MaterialTheme.appColors.surface, - MaterialTheme.appShapes.material.medium - ) - .border( - 1.dp, - borderColor, - MaterialTheme.appShapes.material.medium - ) - ) { - Row( - modifier = Modifier - .fillMaxWidth() - .padding( - horizontal = 16.dp, - vertical = 12.dp - ), - verticalAlignment = Alignment.CenterVertically - ) { - Icon( - imageVector = Icons.Outlined.Report, - contentDescription = null, - tint = MaterialTheme.appColors.warning - ) - Spacer(Modifier.width(12.dp)) - Text( - modifier = Modifier.testTag("txt_enroll_error"), - text = stringResource(id = courseR.string.course_you_cant_enroll), - color = MaterialTheme.appColors.textPrimaryVariant, - style = MaterialTheme.appTypography.titleSmall - ) - } - } + WarningLabel( + painter = rememberVectorPainter(Icons.Outlined.Report), + text = stringResource(id = courseR.string.course_you_cant_enroll) + ) } @Composable private fun NoInternetLabel() { - val borderColor = if (!isSystemInDarkTheme()) { - MaterialTheme.appColors.cardViewBorder - } else { - MaterialTheme.appColors.surface - } - Box( - Modifier - .fillMaxWidth() - .shadow( - 0.dp, - MaterialTheme.appShapes.material.medium - ) - .background( - MaterialTheme.appColors.surface, - MaterialTheme.appShapes.material.medium - ) - .border( - 1.dp, - borderColor, - MaterialTheme.appShapes.material.medium - ) - ) { - Row( - modifier = Modifier - .fillMaxWidth() - .padding( - horizontal = 16.dp, - vertical = 12.dp - ), - verticalAlignment = Alignment.CenterVertically - ) { - Icon( - painter = painterResource(id = org.openedx.core.R.drawable.core_ic_offline), - contentDescription = null, - tint = MaterialTheme.appColors.warning - ) - Spacer(Modifier.width(12.dp)) - Text( - modifier = Modifier.testTag("txt_enroll_internet_error"), - text = stringResource(id = courseR.string.course_no_internet_label), - color = MaterialTheme.appColors.textPrimaryVariant, - style = MaterialTheme.appTypography.titleSmall - ) - } - } + WarningLabel( + painter = painterResource(id = org.openedx.core.R.drawable.core_ic_offline), + text = stringResource(id = courseR.string.course_no_internet_label) + ) } @Composable diff --git a/course/src/main/java/org/openedx/course/presentation/ui/CourseUI.kt b/course/src/main/java/org/openedx/course/presentation/ui/CourseUI.kt index cd2512cc2..e37c04175 100644 --- a/course/src/main/java/org/openedx/course/presentation/ui/CourseUI.kt +++ b/course/src/main/java/org/openedx/course/presentation/ui/CourseUI.kt @@ -9,6 +9,7 @@ import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.border import androidx.compose.foundation.clickable +import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -58,7 +59,9 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.alpha import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.rotate +import androidx.compose.ui.draw.shadow import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.platform.LocalConfiguration import androidx.compose.ui.platform.LocalContext @@ -1157,6 +1160,70 @@ fun CourseDatesBannerTablet( } } +@Composable +fun WarningLabel( + painter: Painter, + text: String +) { + val borderColor = if (!isSystemInDarkTheme()) { + MaterialTheme.appColors.cardViewBorder + } else { + MaterialTheme.appColors.surface + } + Box( + Modifier + .fillMaxWidth() + .shadow( + 0.dp, + MaterialTheme.appShapes.material.medium + ) + .background( + MaterialTheme.appColors.surface, + MaterialTheme.appShapes.material.medium + ) + .border( + 1.dp, + borderColor, + MaterialTheme.appShapes.material.medium + ) + ) { + Row( + modifier = Modifier + .fillMaxWidth() + .padding( + horizontal = 16.dp, + vertical = 12.dp + ), + verticalAlignment = Alignment.CenterVertically + ) { + Icon( + painter = painter, + contentDescription = null, + tint = MaterialTheme.appColors.warning + ) + Spacer(Modifier.width(12.dp)) + Text( + modifier = Modifier.testTag("txt_enroll_internet_error"), + text = text, + color = MaterialTheme.appColors.textPrimaryVariant, + style = MaterialTheme.appTypography.titleSmall + ) + } + } +} + +@Preview(uiMode = Configuration.UI_MODE_NIGHT_NO) +@Preview(uiMode = Configuration.UI_MODE_NIGHT_YES) +@Composable +private fun WarningLabelPreview() { + OpenEdXTheme { + WarningLabel( + painter = painterResource(id = org.openedx.core.R.drawable.core_ic_offline), + text = stringResource(id = courseR.string.course_no_internet_label) + ) + } +} + @Preview(uiMode = Configuration.UI_MODE_NIGHT_NO) @Preview(uiMode = Configuration.UI_MODE_NIGHT_YES) @Composable