diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/boost/BoostFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/boost/BoostFragment.kt index a89aa47d18..9896a7d915 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/boost/BoostFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/boost/BoostFragment.kt @@ -27,6 +27,7 @@ import org.thoughtcrime.securesms.components.settings.app.subscription.DonationE import org.thoughtcrime.securesms.components.settings.app.subscription.models.CurrencySelection import org.thoughtcrime.securesms.components.settings.app.subscription.models.GooglePayButton import org.thoughtcrime.securesms.components.settings.configure +import org.thoughtcrime.securesms.components.settings.models.Progress import org.thoughtcrime.securesms.help.HelpFragment import org.thoughtcrime.securesms.util.BottomSheetUtil.requireCoordinatorLayout import org.thoughtcrime.securesms.util.CommunicationActions @@ -70,6 +71,7 @@ class BoostFragment : DSLSettingsBottomSheetFragment( BadgePreview.register(adapter) Boost.register(adapter) GooglePayButton.register(adapter) + Progress.register(adapter) processingDonationPaymentDialog = MaterialAlertDialogBuilder(requireContext()) .setView(R.layout.processing_payment_dialog) @@ -151,25 +153,33 @@ class BoostFragment : DSLSettingsBottomSheetFragment( ) ) - customPref( - Boost.SelectionModel( - boosts = state.boosts, - selectedBoost = state.selectedBoost, - currency = state.customAmount.currency, - isCustomAmountFocused = state.isCustomAmountFocused, - isEnabled = state.stage == BoostState.Stage.READY, - onBoostClick = { view, boost -> - startAnimationAboveSelectedBoost(view) - viewModel.setSelectedBoost(boost) - }, - onCustomAmountChanged = { - viewModel.setCustomAmount(it) - }, - onCustomAmountFocusChanged = { - viewModel.setCustomAmountFocused(it) - } + if (state.stage == BoostState.Stage.INIT) { + customPref( + Progress.Model( + title = DSLSettingsText.from(R.string.load_more_header__loading) + ) ) - ) + } else { + customPref( + Boost.SelectionModel( + boosts = state.boosts, + selectedBoost = state.selectedBoost, + currency = state.customAmount.currency, + isCustomAmountFocused = state.isCustomAmountFocused, + isEnabled = state.stage == BoostState.Stage.READY, + onBoostClick = { view, boost -> + startAnimationAboveSelectedBoost(view) + viewModel.setSelectedBoost(boost) + }, + onCustomAmountChanged = { + viewModel.setCustomAmount(it) + }, + onCustomAmountFocusChanged = { + viewModel.setCustomAmountFocused(it) + } + ) + ) + } space(DimensionUnit.DP.toPixels(16f).toInt()) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/subscribe/SubscribeFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/subscribe/SubscribeFragment.kt index 3cb3f564d9..cec6f25d7e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/subscribe/SubscribeFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/subscribe/SubscribeFragment.kt @@ -24,6 +24,7 @@ import org.thoughtcrime.securesms.components.settings.app.subscription.DonationE import org.thoughtcrime.securesms.components.settings.app.subscription.models.CurrencySelection import org.thoughtcrime.securesms.components.settings.app.subscription.models.GooglePayButton import org.thoughtcrime.securesms.components.settings.configure +import org.thoughtcrime.securesms.components.settings.models.Progress import org.thoughtcrime.securesms.help.HelpFragment import org.thoughtcrime.securesms.payments.FiatMoneyUtil import org.thoughtcrime.securesms.subscription.Subscription @@ -68,6 +69,7 @@ class SubscribeFragment : DSLSettingsFragment( CurrencySelection.register(adapter) Subscription.register(adapter) GooglePayButton.register(adapter) + Progress.register(adapter) processingDonationPaymentDialog = MaterialAlertDialogBuilder(requireContext()) .setView(R.layout.processing_payment_dialog) @@ -132,20 +134,28 @@ class SubscribeFragment : DSLSettingsFragment( space(DimensionUnit.DP.toPixels(4f).toInt()) - state.subscriptions.forEach { - val isActive = state.activeSubscription?.activeSubscription?.level == it.level + if (state.stage == SubscribeState.Stage.INIT) { customPref( - Subscription.Model( - subscription = it, - isSelected = state.selectedSubscription == it, - isEnabled = areFieldsEnabled, - isActive = isActive, - willRenew = isActive && state.activeSubscription?.activeSubscription?.willCancelAtPeriodEnd() ?: false, - onClick = { viewModel.setSelectedSubscription(it) }, - renewalTimestamp = TimeUnit.SECONDS.toMillis(state.activeSubscription?.activeSubscription?.endOfCurrentPeriod ?: 0L), - selectedCurrency = state.currencySelection + Progress.Model( + title = DSLSettingsText.from(R.string.load_more_header__loading) ) ) + } else { + state.subscriptions.forEach { + val isActive = state.activeSubscription?.activeSubscription?.level == it.level + customPref( + Subscription.Model( + subscription = it, + isSelected = state.selectedSubscription == it, + isEnabled = areFieldsEnabled, + isActive = isActive, + willRenew = isActive && state.activeSubscription?.activeSubscription?.willCancelAtPeriodEnd() ?: false, + onClick = { viewModel.setSelectedSubscription(it) }, + renewalTimestamp = TimeUnit.SECONDS.toMillis(state.activeSubscription?.activeSubscription?.endOfCurrentPeriod ?: 0L), + selectedCurrency = state.currencySelection + ) + ) + } } if (state.activeSubscription?.isActive == true) { diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/models/Progress.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/models/Progress.kt new file mode 100644 index 0000000000..1268672e09 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/models/Progress.kt @@ -0,0 +1,31 @@ +package org.thoughtcrime.securesms.components.settings.models + +import android.view.View +import android.widget.TextView +import org.thoughtcrime.securesms.R +import org.thoughtcrime.securesms.components.settings.DSLSettingsText +import org.thoughtcrime.securesms.components.settings.PreferenceModel +import org.thoughtcrime.securesms.util.MappingAdapter +import org.thoughtcrime.securesms.util.MappingViewHolder +import org.thoughtcrime.securesms.util.visible + +object Progress { + + fun register(mappingAdapter: MappingAdapter) { + mappingAdapter.registerFactory(Model::class.java, MappingAdapter.LayoutFactory(::ViewHolder, R.layout.dsl_progress_pref)) + } + + data class Model( + override val title: DSLSettingsText? + ) : PreferenceModel() + + private class ViewHolder(itemView: View) : MappingViewHolder(itemView) { + + private val title: TextView = itemView.findViewById(R.id.dsl_progress_pref_title) + + override fun bind(model: Model) { + title.text = model.title?.resolve(context) + title.visible = model.title != null + } + } +} diff --git a/app/src/main/res/layout/dsl_progress_pref.xml b/app/src/main/res/layout/dsl_progress_pref.xml new file mode 100644 index 0000000000..8b2b212307 --- /dev/null +++ b/app/src/main/res/layout/dsl_progress_pref.xml @@ -0,0 +1,33 @@ + + + + + + + + \ No newline at end of file