11package org.wikipedia.donate
22
3+ import android.app.DatePickerDialog
34import android.content.Context
45import android.content.Intent
56import android.os.Bundle
7+ import android.text.format.DateUtils
68import androidx.activity.viewModels
79import androidx.core.view.isVisible
10+ import com.google.android.material.dialog.MaterialAlertDialogBuilder
811import org.wikipedia.Constants
912import org.wikipedia.R
1013import org.wikipedia.activity.BaseActivity
1114import org.wikipedia.databinding.ActivityDonorHistoryBinding
1215import org.wikipedia.settings.Prefs
16+ import org.wikipedia.util.CustomTabsUtil
17+ import org.wikipedia.util.DateUtil
1318import org.wikipedia.util.ResourceUtil
1419import kotlin.getValue
1520
@@ -18,18 +23,49 @@ class DonorHistoryActivity : BaseActivity() {
1823 private lateinit var binding: ActivityDonorHistoryBinding
1924 private val viewModel: DonorHistoryViewModel by viewModels { DonorHistoryViewModel .Factory (intent.extras!! ) }
2025
26+ private var donorStatusList = arrayOf(
27+ getString(R .string.donor_history_update_donor_status_donor),
28+ getString(R .string.donor_history_update_donor_status_not_a_donor)
29+ )
2130
2231 override fun onCreate (savedInstanceState : Bundle ? ) {
2332 super .onCreate(savedInstanceState)
2433 binding = ActivityDonorHistoryBinding .inflate(layoutInflater)
34+
35+ init ()
2536 }
2637
2738 private fun init () {
2839
2940 binding.donationInfoContainer.isVisible = viewModel.isDonor
3041
42+ updateDonorStatusText()
43+ binding.donorStatus.setOnClickListener {
44+ showDonorStatusDialog()
45+ }
46+
47+ updateLastDonatedText()
48+ binding.lastDonationLabel.setOnClickListener {
49+ showLastDonatedDatePicker()
50+ }
51+
52+ binding.recurringDonorCheckbox.isChecked = viewModel.isRecurringDonor
53+ binding.recurringDonorCheckbox.setOnCheckedChangeListener { _, isChecked ->
54+ viewModel.isRecurringDonor = isChecked
55+ }
56+
57+ binding.donateButton.setOnClickListener {
58+ launchDonateDialog()
59+ }
60+
61+ binding.experimentLink.setOnClickListener {
62+ CustomTabsUtil .openInCustomTab(this , getString(R .string.contributions_dashboard_wiki_url))
63+ }
64+ }
65+
66+ private fun updateDonorStatusText () {
3167 var donorStatusTextColor = R .attr.primary_color
32- val donorStatusText = if (! Prefs .hasDonorHistorySaved) {
68+ val donorStatusText = if (! Prefs .hasDonorHistorySaved && ! viewModel.isDonor ) {
3369 donorStatusTextColor = R .attr.placeholder_color
3470 R .string.donor_history_update_donor_status_default
3571 } else if (viewModel.isDonor) {
@@ -39,7 +75,10 @@ class DonorHistoryActivity : BaseActivity() {
3975 }
4076 binding.donorStatus.text = getString(donorStatusText)
4177 binding.donorStatus.setTextColor(ResourceUtil .getThemedColorStateList(this , donorStatusTextColor))
78+ }
4279
80+ private fun updateLastDonatedText () {
81+ binding.lastDonationDate.isVisible = viewModel.lastDonated != null
4382 var lastDonatedTextColor = R .attr.primary_color
4483 val lastDonatedText = if (viewModel.lastDonated == null ) {
4584 lastDonatedTextColor = R .attr.placeholder_color
@@ -48,12 +87,31 @@ class DonorHistoryActivity : BaseActivity() {
4887 R .string.donor_history_last_donated
4988 }
5089 binding.lastDonationLabel.text = getString(lastDonatedText)
51- binding.donorStatus.setTextColor(ResourceUtil .getThemedColorStateList(this , lastDonatedTextColor))
90+ binding.lastDonationLabel.setTextColor(ResourceUtil .getThemedColorStateList(this , lastDonatedTextColor))
91+ viewModel.lastDonated?.let {
92+ binding.lastDonationDate.text = DateUtils .getRelativeTimeSpanString(DateUtil .iso8601DateParse(it).time, System .currentTimeMillis(), 0L )
93+ }
94+ }
5295
53- binding.recurringDonorCheckbox.isChecked = viewModel.isRecurringDonor
96+ private fun showDonorStatusDialog () {
97+ MaterialAlertDialogBuilder (this )
98+ .setSingleChoiceItems(donorStatusList, - 1 ) { dialog, which ->
99+ viewModel.isDonor = which == 0
100+ updateDonorStatusText()
101+ dialog.dismiss()
102+ }
103+ .show()
104+ }
105+
106+ private fun showLastDonatedDatePicker () {
107+ DatePickerDialog (this , { _, year, month, day ->
108+ viewModel.lastDonated = " $year -${month + 1 } -$day "
109+ updateLastDonatedText()
110+ }, 2024 , 10 , 10 ).show()
54111 }
55112
56113 companion object {
114+
57115 fun newIntent (context : Context , completedDonation : Boolean = false): Intent {
58116 return Intent (context, DonorHistoryActivity ::class .java)
59117 .putExtra(Constants .ARG_BOOLEAN , completedDonation)
0 commit comments