Skip to content

Commit

Permalink
Merge pull request #1002 from hyperskill/release/1.56
Browse files Browse the repository at this point in the history
Release 1.56
  • Loading branch information
ivan-magda authored Apr 24, 2024
2 parents 92bf0ed + f7f6c78 commit fbd7a62
Show file tree
Hide file tree
Showing 214 changed files with 4,263 additions and 2,532 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package org.hyperskill.app.android.gamification_toolbar.view.ui.delegate
import android.content.Context
import androidx.core.view.isVisible
import androidx.core.view.updateLayoutParams
import androidx.fragment.app.FragmentManager
import androidx.lifecycle.LifecycleOwner
import com.github.terrakok.cicerone.Router
import com.google.android.material.appbar.AppBarLayout
Expand All @@ -11,12 +12,15 @@ import org.hyperskill.app.android.databinding.LayoutGamificationToolbarBinding
import org.hyperskill.app.android.main.view.ui.navigation.MainScreenRouter
import org.hyperskill.app.android.main.view.ui.navigation.Tabs
import org.hyperskill.app.android.main.view.ui.navigation.switch
import org.hyperskill.app.android.problems_limit.dialog.ProblemsLimitInfoBottomSheet
import org.hyperskill.app.android.progress.navigation.ProgressScreen
import org.hyperskill.app.android.topic_search.navigation.TopicSearchScreen
import org.hyperskill.app.android.view.base.ui.extension.setElevationOnCollapsed
import org.hyperskill.app.gamification_toolbar.presentation.GamificationToolbarFeature
import org.hyperskill.app.gamification_toolbar.presentation.GamificationToolbarFeature.Message
import org.hyperskill.app.problems_limit_info.domain.model.ProblemsLimitInfoModalFeatureParams
import ru.nobird.android.view.base.ui.extension.setTextIfChanged
import ru.nobird.android.view.base.ui.extension.showIfNotExists

class GamificationToolbarDelegate(
lifecycleOwner: LifecycleOwner,
Expand All @@ -38,6 +42,9 @@ class GamificationToolbarDelegate(
gamificationSearchButton.setOnClickListener {
onNewMessage(Message.ClickedSearch)
}
gamificationProblemsLimitTextView.setOnClickListener {
onNewMessage(Message.ProblemsLimitClicked)
}
}
}

Expand Down Expand Up @@ -65,7 +72,13 @@ class GamificationToolbarDelegate(
progress.value,
progress.isCompleted
)
viewBinding.gamificationTrackProgressTextView.text = progress.formattedValue
viewBinding.gamificationTrackProgressTextView.setTextIfChanged(progress.formattedValue)
}
}
state.problemsLimit.let { problemsLimit ->
viewBinding.gamificationProblemsLimitTextView.isVisible = problemsLimit != null
if (problemsLimit != null) {
viewBinding.gamificationProblemsLimitTextView.setTextIfChanged(problemsLimit.limitLabel)
}
}
viewBinding.gamificationSearchButton.isVisible = true
Expand All @@ -75,7 +88,8 @@ class GamificationToolbarDelegate(
fun onAction(
action: GamificationToolbarFeature.Action.ViewAction,
mainScreenRouter: MainScreenRouter,
router: Router
router: Router,
fragmentManager: FragmentManager
) {
when (action) {
is GamificationToolbarFeature.Action.ViewAction.ShowProfileTab ->
Expand All @@ -85,6 +99,15 @@ class GamificationToolbarDelegate(
GamificationToolbarFeature.Action.ViewAction.ShowSearchScreen -> {
router.navigateTo(TopicSearchScreen)
}
is GamificationToolbarFeature.Action.ViewAction.ShowProblemsLimitInfoModal -> {
ProblemsLimitInfoBottomSheet.newInstance(
params = ProblemsLimitInfoModalFeatureParams(
action.subscription,
action.chargeLimitsStrategy,
action.context
)
).showIfNotExists(fragmentManager, ProblemsLimitInfoBottomSheet.TAG)
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -180,7 +180,8 @@ class HomeFragment :
gamificationToolbarDelegate?.onAction(
action = action.viewAction,
mainScreenRouter = mainScreenRouter,
router = requireRouter()
router = requireRouter(),
fragmentManager = childFragmentManager
)
is HomeFeature.Action.ViewAction.NavigateTo.StepScreen -> {
navigateToStepScreen(action.stepRoute)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,8 @@ class LeaderboardFragment : Fragment(R.layout.fragment_leaderboard) {
gamificationToolbarDelegate?.onAction(
action = action.viewAction,
mainScreenRouter = mainScreenRouter,
router = requireRouter()
router = requireRouter(),
fragmentManager = childFragmentManager
)
}
is LeaderboardScreenFeature.Action.ViewAction.LeaderboardWidgetViewAction ->
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ import org.hyperskill.app.android.core.view.ui.widget.compose.HyperskillTheme
@Composable
fun PaywallContent(
buyButtonText: String,
priceText: String?,
isContinueWithLimitsButtonVisible: Boolean,
onTermsOfServiceClick: () -> Unit,
onBuySubscriptionClick: () -> Unit,
Expand All @@ -49,6 +48,7 @@ fun PaywallContent(
.padding(PaywallDefaults.ContentPadding + padding)
) {
Column(
verticalArrangement = Arrangement.spacedBy(24.dp),
modifier = Modifier.weight(1f)
) {
Image(
Expand All @@ -57,18 +57,12 @@ fun PaywallContent(
modifier = Modifier
.align(Alignment.CenterHorizontally)
)
Spacer(modifier = Modifier.height(24.dp))
Text(
text = stringResource(id = R.string.paywall_mobile_only_title),
style = MaterialTheme.typography.h5,
fontWeight = FontWeight.Medium
)
Spacer(modifier = Modifier.height(24.dp))
SubscriptionDetails()
Spacer(modifier = Modifier.height(32.dp))
if (priceText != null) {
SubscriptionPrice(priceText)
}
}
Column {
HyperskillButton(
Expand All @@ -79,10 +73,25 @@ fun PaywallContent(
}
Spacer(modifier = Modifier.height(8.dp))
if (isContinueWithLimitsButtonVisible) {
ContinueButton(onClick = onContinueWithLimitsClick)
HyperskillButton(
onClick = onContinueWithLimitsClick,
colors = HyperskillButtonDefaults.buttonColors(colorResource(id = R.color.layer_1)),
border = BorderStroke(1.dp, colorResource(id = R.color.button_tertiary)),
modifier = Modifier.fillMaxWidth()
) {
Text(
text = stringResource(id = R.string.paywall_mobile_only_continue_btn),
color = colorResource(id = R.color.button_tertiary)
)
}
}
Spacer(modifier = Modifier.height(20.dp))
TermsOfService(

Text(
text = stringResource(id = R.string.paywall_tos_and_privacy_bth),
fontSize = 12.sp,
color = colorResource(id = R.color.color_on_surface_alpha_60),
textAlign = TextAlign.Center,
modifier = Modifier
.align(Alignment.CenterHorizontally)
.clickable(onClick = onTermsOfServiceClick)
Expand All @@ -91,66 +100,13 @@ fun PaywallContent(
}
}

@Composable
private fun SubscriptionPrice(
priceText: String,
modifier: Modifier = Modifier
) {
Column(
modifier = modifier,
verticalArrangement = Arrangement.spacedBy(8.dp)
) {
Text(
text = stringResource(id = R.string.paywall_android_subscription_duration),
style = MaterialTheme.typography.subtitle1,
fontWeight = FontWeight.Medium
)
Text(
text = priceText,
style = MaterialTheme.typography.body2
)
}
}

@Composable
private fun ContinueButton(
onClick: () -> Unit,
modifier: Modifier = Modifier
) {
HyperskillButton(
onClick = onClick,
colors = HyperskillButtonDefaults.buttonColors(colorResource(id = R.color.layer_1)),
border = BorderStroke(1.dp, colorResource(id = R.color.button_tertiary)),
modifier = modifier.fillMaxWidth()
) {
Text(
text = stringResource(id = R.string.paywall_mobile_only_continue_btn),
color = colorResource(id = R.color.button_tertiary)
)
}
}

@Composable
private fun TermsOfService(
modifier: Modifier = Modifier
) {
Text(
text = stringResource(id = R.string.paywall_tos_and_privacy_bth),
fontSize = 12.sp,
color = colorResource(id = R.color.color_on_surface_alpha_60),
textAlign = TextAlign.Center,
modifier = modifier
)
}

@Preview
@Composable
fun PaywallContentPreview() {
HyperskillTheme {
PaywallContent(
buyButtonText = PaywallPreviewDefaults.BUY_BUTTON_TEXT,
isContinueWithLimitsButtonVisible = true,
priceText = PaywallPreviewDefaults.PRICE_TEXT,
onTermsOfServiceClick = {},
onBuySubscriptionClick = {},
onContinueWithLimitsClick = {}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package org.hyperskill.app.android.paywall.ui

object PaywallPreviewDefaults {
const val BUY_BUTTON_TEXT = "Subscribe"
const val PRICE_TEXT = "$11.99 / month"
const val BUY_BUTTON_TEXT = "Subscribe for $12.00/month"
}
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,6 @@ fun PaywallScreen(
PaywallContent(
buyButtonText = contentState.buyButtonText,
isContinueWithLimitsButtonVisible = contentState.isContinueWithLimitsButtonVisible,
priceText = contentState.priceText,
onBuySubscriptionClick = onBuySubscriptionClick,
onContinueWithLimitsClick = onContinueWithLimitsClick,
onTermsOfServiceClick = onTermsOfServiceClick,
Expand All @@ -133,16 +132,14 @@ private class PaywallPreviewProvider : PreviewParameterProvider<ViewState> {
isToolbarVisible = true,
contentState = ViewStateContent.Content(
buyButtonText = PaywallPreviewDefaults.BUY_BUTTON_TEXT,
isContinueWithLimitsButtonVisible = false,
priceText = "$11.99 / month"
isContinueWithLimitsButtonVisible = false
)
),
ViewState(
isToolbarVisible = false,
contentState = ViewStateContent.Content(
buyButtonText = PaywallPreviewDefaults.BUY_BUTTON_TEXT,
isContinueWithLimitsButtonVisible = true,
priceText = PaywallPreviewDefaults.PRICE_TEXT
isContinueWithLimitsButtonVisible = true
)
),
ViewState(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,7 @@ import org.hyperskill.app.android.core.view.ui.widget.compose.HyperskillTheme
import org.hyperskill.app.R as SharedR

@Composable
fun SubscriptionDetails(
modifier: Modifier = Modifier
) {
fun SubscriptionDetails(modifier: Modifier = Modifier) {
Column(
modifier = modifier,
verticalArrangement = Arrangement.spacedBy(6.dp)
Expand Down
Loading

0 comments on commit fbd7a62

Please sign in to comment.