kopia lustrzana https://github.com/ryukoposting/Signal-Android
160 wiersze
6.4 KiB
Kotlin
160 wiersze
6.4 KiB
Kotlin
package org.thoughtcrime.securesms.components.settings.app.subscription.thanks
|
|
|
|
import android.animation.Animator
|
|
import android.content.DialogInterface
|
|
import android.os.Bundle
|
|
import android.text.SpannableStringBuilder
|
|
import android.view.LayoutInflater
|
|
import android.view.View
|
|
import android.view.ViewGroup
|
|
import android.widget.TextView
|
|
import androidx.core.content.ContextCompat
|
|
import androidx.navigation.fragment.findNavController
|
|
import com.airbnb.lottie.LottieAnimationView
|
|
import com.airbnb.lottie.LottieDrawable
|
|
import com.google.android.material.button.MaterialButton
|
|
import com.google.android.material.switchmaterial.SwitchMaterial
|
|
import io.reactivex.rxjava3.kotlin.subscribeBy
|
|
import org.signal.core.util.logging.Log
|
|
import org.thoughtcrime.securesms.R
|
|
import org.thoughtcrime.securesms.animation.AnimationCompleteListener
|
|
import org.thoughtcrime.securesms.badges.BadgeImageView
|
|
import org.thoughtcrime.securesms.badges.BadgeRepository
|
|
import org.thoughtcrime.securesms.components.FixedRoundedCornerBottomSheetDialogFragment
|
|
import org.thoughtcrime.securesms.components.settings.app.AppSettingsActivity
|
|
import org.thoughtcrime.securesms.keyvalue.SignalStore
|
|
import org.thoughtcrime.securesms.recipients.Recipient
|
|
import org.thoughtcrime.securesms.util.SpanUtil
|
|
import org.thoughtcrime.securesms.util.visible
|
|
|
|
class ThanksForYourSupportBottomSheetDialogFragment : FixedRoundedCornerBottomSheetDialogFragment() {
|
|
|
|
override val peekHeightPercentage: Float = 1f
|
|
|
|
private lateinit var switch: SwitchMaterial
|
|
private lateinit var heading: TextView
|
|
|
|
private lateinit var badgeRepository: BadgeRepository
|
|
private lateinit var controlState: ControlState
|
|
|
|
private enum class ControlState {
|
|
FEATURE,
|
|
DISPLAY
|
|
}
|
|
|
|
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
|
return inflater.inflate(R.layout.thanks_for_your_support_bottom_sheet_dialog_fragment, container, false)
|
|
}
|
|
|
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
|
badgeRepository = BadgeRepository(requireContext())
|
|
|
|
val badgeView: BadgeImageView = view.findViewById(R.id.thanks_bottom_sheet_badge)
|
|
val lottie: LottieAnimationView = view.findViewById(R.id.thanks_bottom_sheet_lottie)
|
|
val done: MaterialButton = view.findViewById(R.id.thanks_bottom_sheet_done)
|
|
val controlText: TextView = view.findViewById(R.id.thanks_bottom_sheet_control_text)
|
|
val controlNote: View = view.findViewById(R.id.thanks_bottom_sheet_featured_note)
|
|
val subhead: TextView = view.findViewById(R.id.thanks_bottom_sheet_subhead)
|
|
|
|
heading = view.findViewById(R.id.thanks_bottom_sheet_heading)
|
|
switch = view.findViewById(R.id.thanks_bottom_sheet_switch)
|
|
|
|
val args = ThanksForYourSupportBottomSheetDialogFragmentArgs.fromBundle(requireArguments())
|
|
|
|
badgeView.setBadge(args.badge)
|
|
|
|
if (args.badge.isBoost()) {
|
|
if (Recipient.self().badges.any { !it.isBoost() }) {
|
|
subhead.setText(R.string.SubscribeThanksForYourSupportBottomSheetDialogFragment__youve_earned_a_donor_badge)
|
|
} else {
|
|
subhead.text = SpannableStringBuilder(getString(R.string.SubscribeThanksForYourSupportBottomSheetDialogFragment__youve_earned_a_donor_badge))
|
|
.append(" ")
|
|
.append(getString(R.string.SubscribeThanksForYourSupportBottomSheetDialogFragment__you_can_also))
|
|
.append(" ")
|
|
.append(
|
|
SpanUtil.clickable(
|
|
getString(R.string.SubscribeThanksForYourSupportBottomSheetDialogFragment__become_a_montly_sustainer),
|
|
ContextCompat.getColor(requireContext(), R.color.signal_accent_primary)
|
|
) {
|
|
requireActivity().finish()
|
|
requireActivity().startActivity(AppSettingsActivity.subscriptions(requireContext()))
|
|
}
|
|
)
|
|
}
|
|
} else {
|
|
subhead.text = getString(R.string.SubscribeThanksForYourSupportBottomSheetDialogFragment__youve_earned_a_donor_badge)
|
|
}
|
|
|
|
val otherBadges = Recipient.self().badges.filterNot { it.id == args.badge.id }
|
|
val hasOtherBadges = otherBadges.isNotEmpty()
|
|
val displayingBadges = SignalStore.donationsValues().getDisplayBadgesOnProfile()
|
|
|
|
if (hasOtherBadges && displayingBadges) {
|
|
switch.isChecked = false
|
|
controlText.setText(R.string.SubscribeThanksForYourSupportBottomSheetDialogFragment__make_featured_badge)
|
|
controlNote.visible = true
|
|
controlState = ControlState.FEATURE
|
|
} else if (hasOtherBadges) {
|
|
switch.isChecked = false
|
|
controlText.setText(R.string.SubscribeThanksForYourSupportBottomSheetDialogFragment__display_on_profile)
|
|
controlNote.visible = false
|
|
controlState = ControlState.DISPLAY
|
|
} else {
|
|
switch.isChecked = true
|
|
controlText.setText(R.string.SubscribeThanksForYourSupportBottomSheetDialogFragment__display_on_profile)
|
|
controlNote.visible = false
|
|
controlState = ControlState.DISPLAY
|
|
}
|
|
|
|
if (args.isBoost) {
|
|
badgeView.visibility = View.INVISIBLE
|
|
lottie.visible = true
|
|
lottie.playAnimation()
|
|
lottie.addAnimatorListener(object : AnimationCompleteListener() {
|
|
override fun onAnimationEnd(animation: Animator) {
|
|
lottie.removeAnimatorListener(this)
|
|
lottie.setMinAndMaxFrame(30, 91)
|
|
lottie.repeatMode = LottieDrawable.RESTART
|
|
lottie.repeatCount = LottieDrawable.INFINITE
|
|
lottie.frame = 30
|
|
lottie.playAnimation()
|
|
}
|
|
})
|
|
} else {
|
|
lottie.visible = false
|
|
}
|
|
|
|
done.setOnClickListener { dismissAllowingStateLoss() }
|
|
}
|
|
|
|
override fun onDismiss(dialog: DialogInterface) {
|
|
val controlChecked = switch.isChecked
|
|
val args = ThanksForYourSupportBottomSheetDialogFragmentArgs.fromBundle(requireArguments())
|
|
|
|
if (controlState == ControlState.DISPLAY) {
|
|
badgeRepository.setVisibilityForAllBadges(controlChecked).subscribeBy(
|
|
onError = {
|
|
Log.w(TAG, "Failure while updating badge visibility", it)
|
|
}
|
|
)
|
|
} else if (controlChecked) {
|
|
badgeRepository.setFeaturedBadge(args.badge).subscribeBy(
|
|
onError = {
|
|
Log.w(TAG, "Failure while updating featured badge", it)
|
|
}
|
|
)
|
|
}
|
|
|
|
if (args.isBoost) {
|
|
findNavController().popBackStack()
|
|
} else {
|
|
requireActivity().finish()
|
|
requireActivity().startActivity(AppSettingsActivity.manageSubscriptions(requireContext()))
|
|
}
|
|
}
|
|
|
|
companion object {
|
|
private val TAG = Log.tag(ThanksForYourSupportBottomSheetDialogFragment::class.java)
|
|
}
|
|
}
|