diff --git a/app/src/main/java/org/thoughtcrime/securesms/badges/BadgeRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/badges/BadgeRepository.kt index 4d7972e215..d8814f9310 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/badges/BadgeRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/badges/BadgeRepository.kt @@ -20,15 +20,13 @@ class BadgeRepository(context: Context) { selfBadges: List = Recipient.self().badges ): Completable = Completable.fromAction { val recipientDatabase: RecipientDatabase = DatabaseFactory.getRecipientDatabase(context) + val badges = selfBadges.map { it.copy(visible = displayBadgesOnProfile) } + ProfileUtil.uploadProfileWithBadges(context, badges) SignalStore.donationsValues().setDisplayBadgesOnProfile(displayBadgesOnProfile) - recipientDatabase.markNeedsSync(Recipient.self().id) StorageSyncHelper.scheduleSyncForDataChange() - val badges = selfBadges.map { it.copy(visible = displayBadgesOnProfile) } - ProfileUtil.uploadProfileWithBadges(context, badges) - recipientDatabase.setBadges(Recipient.self().id, badges) }.subscribeOn(Schedulers.io()) diff --git a/app/src/main/java/org/thoughtcrime/securesms/badges/self/expired/ExpiredBadgeBottomSheetDialogFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/badges/self/expired/ExpiredBadgeBottomSheetDialogFragment.kt index 22323c9862..99447e16ef 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/badges/self/expired/ExpiredBadgeBottomSheetDialogFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/badges/self/expired/ExpiredBadgeBottomSheetDialogFragment.kt @@ -80,7 +80,7 @@ class ExpiredBadgeBottomSheetDialogFragment : DSLSettingsBottomSheetFragment( ), onClick = { dismiss() - findNavController().navigate(R.id.action_directly_to_subscribe) + findNavController().navigate(R.id.action_direct_to_subscriptions) } ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/badges/self/none/BecomeASustainerFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/badges/self/none/BecomeASustainerFragment.kt index 3a40e94324..f99ecfc1c5 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/badges/self/none/BecomeASustainerFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/badges/self/none/BecomeASustainerFragment.kt @@ -1,5 +1,6 @@ package org.thoughtcrime.securesms.badges.self.none +import android.content.Intent import androidx.fragment.app.FragmentManager import androidx.fragment.app.viewModels import org.signal.core.util.DimensionUnit @@ -60,7 +61,7 @@ class BecomeASustainerFragment : DSLSettingsBottomSheetFragment() { ), onClick = { requireActivity().finish() - requireActivity().startActivity(AppSettingsActivity.subscriptions(requireContext())) + requireActivity().startActivity(AppSettingsActivity.subscriptions(requireContext()).setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP)) } ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/badges/self/overview/BadgesOverviewFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/badges/self/overview/BadgesOverviewFragment.kt index b97ffff704..a26ddbc611 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/badges/self/overview/BadgesOverviewFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/badges/self/overview/BadgesOverviewFragment.kt @@ -71,7 +71,7 @@ class BadgesOverviewFragment : DSLSettingsFragment( asyncSwitchPref( title = DSLSettingsText.from(R.string.BadgesOverviewFragment__display_badges_on_profile), isChecked = state.displayBadgesOnProfile, - isEnabled = state.stage == BadgesOverviewState.Stage.READY && state.hasUnexpiredBadges, + isEnabled = state.stage == BadgesOverviewState.Stage.READY && state.hasUnexpiredBadges && state.hasInternet, isProcessing = state.stage == BadgesOverviewState.Stage.UPDATING_BADGE_DISPLAY_STATE, onClick = { viewModel.setDisplayBadgesOnProfile(!state.displayBadgesOnProfile) @@ -81,7 +81,7 @@ class BadgesOverviewFragment : DSLSettingsFragment( clickPref( title = DSLSettingsText.from(R.string.BadgesOverviewFragment__featured_badge), summary = state.featuredBadge?.name?.let { DSLSettingsText.from(it) }, - isEnabled = state.stage == BadgesOverviewState.Stage.READY && state.hasUnexpiredBadges, + isEnabled = state.stage == BadgesOverviewState.Stage.READY && state.hasUnexpiredBadges && state.hasInternet, onClick = { findNavController().navigate(BadgesOverviewFragmentDirections.actionBadgeManageFragmentToFeaturedBadgeFragment()) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/badges/self/overview/BadgesOverviewState.kt b/app/src/main/java/org/thoughtcrime/securesms/badges/self/overview/BadgesOverviewState.kt index 9eaa5c1bad..482f6036b7 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/badges/self/overview/BadgesOverviewState.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/badges/self/overview/BadgesOverviewState.kt @@ -7,7 +7,8 @@ data class BadgesOverviewState( val allUnlockedBadges: List = listOf(), val featuredBadge: Badge? = null, val displayBadgesOnProfile: Boolean = false, - val fadedBadgeId: String? = null + val fadedBadgeId: String? = null, + val hasInternet: Boolean = false ) { val hasUnexpiredBadges = allUnlockedBadges.any { it.expirationTimestamp > System.currentTimeMillis() } diff --git a/app/src/main/java/org/thoughtcrime/securesms/badges/self/overview/BadgesOverviewViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/badges/self/overview/BadgesOverviewViewModel.kt index 1ecfbc312b..f786aef205 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/badges/self/overview/BadgesOverviewViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/badges/self/overview/BadgesOverviewViewModel.kt @@ -15,6 +15,7 @@ import org.thoughtcrime.securesms.badges.BadgeRepository import org.thoughtcrime.securesms.components.settings.app.subscription.SubscriptionsRepository import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.recipients.Recipient +import org.thoughtcrime.securesms.util.InternetConnectionObserver import org.thoughtcrime.securesms.util.livedata.Store import org.whispersystems.libsignal.util.guava.Optional @@ -42,6 +43,12 @@ class BadgesOverviewViewModel( ) } + disposables += InternetConnectionObserver.observe() + .distinctUntilChanged() + .subscribeBy { isConnected -> + store.update { it.copy(hasInternet = isConnected) } + } + disposables += Single.zip( subscriptionsRepository.getActiveSubscription(), subscriptionsRepository.getSubscriptions() diff --git a/app/src/main/java/org/thoughtcrime/securesms/badges/view/ViewBadgeBottomSheetDialogFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/badges/view/ViewBadgeBottomSheetDialogFragment.kt index c26832fa6d..e99be40e35 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/badges/view/ViewBadgeBottomSheetDialogFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/badges/view/ViewBadgeBottomSheetDialogFragment.kt @@ -120,7 +120,7 @@ class ViewBadgeBottomSheetDialogFragment : FixedRoundedCornerBottomSheetDialogFr recipientId: RecipientId, startBadge: Badge? = null ) { - if (!FeatureFlags.displayDonorBadges()) { + if (!FeatureFlags.displayDonorBadges() && recipientId != Recipient.self().id) { return } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/DSLSettingsBottomSheetFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/DSLSettingsBottomSheetFragment.kt index 4a6c7267af..f0b00b8bd8 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/DSLSettingsBottomSheetFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/DSLSettingsBottomSheetFragment.kt @@ -34,6 +34,7 @@ abstract class DSLSettingsBottomSheetFragment( recyclerView.layoutManager = layoutManagerProducer(requireContext()) recyclerView.adapter = adapter + recyclerView.overScrollMode = RecyclerView.OVER_SCROLL_IF_CONTENT_SCROLLS bindAdapter(adapter) } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/AppSettingsActivity.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/AppSettingsActivity.kt index aa243e778e..54c403cd97 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/AppSettingsActivity.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/AppSettingsActivity.kt @@ -47,8 +47,8 @@ class AppSettingsActivity : DSLSettingsActivity(), DonationPaymentComponent { StartLocation.PROXY -> AppSettingsFragmentDirections.actionDirectToEditProxyFragment() StartLocation.NOTIFICATIONS -> AppSettingsFragmentDirections.actionDirectToNotificationsSettingsFragment() StartLocation.CHANGE_NUMBER -> AppSettingsFragmentDirections.actionDirectToChangeNumberFragment() - StartLocation.SUBSCRIPTIONS -> AppSettingsFragmentDirections.actionDirectToSubscriptions().setSkipToSubscribe(true) - StartLocation.MANAGE_SUBSCRIPTIONS -> AppSettingsFragmentDirections.actionDirectToSubscriptions() + StartLocation.SUBSCRIPTIONS -> AppSettingsFragmentDirections.actionDirectToSubscriptions() + StartLocation.MANAGE_SUBSCRIPTIONS -> AppSettingsFragmentDirections.actionDirectToManageDonations() } } @@ -75,6 +75,12 @@ class AppSettingsActivity : DSLSettingsActivity(), DonationPaymentComponent { } } + override fun onNewIntent(intent: Intent?) { + super.onNewIntent(intent) + finish() + startActivity(intent) + } + override fun onSaveInstanceState(outState: Bundle) { super.onSaveInstanceState(outState) outState.putBoolean(STATE_WAS_CONFIGURATION_UPDATED, wasConfigurationUpdated) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/AppSettingsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/AppSettingsFragment.kt index 4aa37526d5..8d7fe74b44 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/AppSettingsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/AppSettingsFragment.kt @@ -157,11 +157,11 @@ class AppSettingsFragment : DSLSettingsFragment(R.string.text_secure_normal__men icon = DSLSettingsIcon.from(R.drawable.ic_heart_24), isActive = state.hasActiveSubscription, onClick = { isActive -> - findNavController() - .navigate( - AppSettingsFragmentDirections.actionAppSettingsFragmentToSubscriptions() - .setSkipToSubscribe(!isActive) - ) + if (isActive) { + findNavController().navigate(AppSettingsFragmentDirections.actionAppSettingsFragmentToManageDonationsFragment()) + } else { + findNavController().navigate(AppSettingsFragmentDirections.actionAppSettingsFragmentToSubscribeFragment()) + } } ) ) diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/AppSettingsViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/AppSettingsViewModel.kt index 111d04f409..c4d5e37219 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/AppSettingsViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/AppSettingsViewModel.kt @@ -11,6 +11,8 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.recipients.Recipient import org.thoughtcrime.securesms.util.FeatureFlags import org.thoughtcrime.securesms.util.livedata.Store +import org.whispersystems.signalservice.api.push.exceptions.NotFoundException +import org.whispersystems.signalservice.api.push.exceptions.PushNetworkException import java.util.concurrent.TimeUnit class AppSettingsViewModel(private val subscriptionsRepository: SubscriptionsRepository) : ViewModel() { @@ -39,6 +41,10 @@ class AppSettingsViewModel(private val subscriptionsRepository: SubscriptionsRep subscriptionsRepository.getActiveSubscription().subscribeBy( onSuccess = { subscription -> store.update { it.copy(hasActiveSubscription = subscription.isActive) } }, onError = { throwable -> + if (throwable.isNotFoundException()) { + Log.w(TAG, "Could not load active subscription due to unset SubscriberId (404).") + } + Log.w(TAG, "Could not load active subscription", throwable) } ) @@ -53,4 +59,8 @@ class AppSettingsViewModel(private val subscriptionsRepository: SubscriptionsRep companion object { private val TAG = Log.tag(AppSettingsViewModel::class.java) } + + private fun Throwable.isNotFoundException(): Boolean { + return this is PushNetworkException && this.cause is NotFoundException || this is NotFoundException + } } diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/DonationEvent.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/DonationEvent.kt index e0f1691aa9..ebd31236e3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/DonationEvent.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/DonationEvent.kt @@ -8,7 +8,7 @@ import org.thoughtcrime.securesms.badges.models.Badge sealed class DonationEvent { class GooglePayUnavailableError(val throwable: Throwable) : DonationEvent() object RequestTokenSuccess : DonationEvent() - object RequestTokenError : DonationEvent() + class RequestTokenError(val throwable: Throwable) : DonationEvent() class PaymentConfirmationError(val throwable: Throwable) : DonationEvent() class PaymentConfirmationSuccess(val badge: Badge) : DonationEvent() class SubscriptionCancellationFailed(val throwable: Throwable) : DonationEvent() diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/DonationPaymentRepository.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/DonationPaymentRepository.kt index 565c113451..5dadc7abfb 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/DonationPaymentRepository.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/DonationPaymentRepository.kt @@ -1,14 +1,9 @@ package org.thoughtcrime.securesms.components.settings.app.subscription import android.app.Activity -import android.content.BroadcastReceiver -import android.content.Context import android.content.Intent -import android.content.IntentFilter -import android.net.ConnectivityManager import com.google.android.gms.wallet.PaymentData import io.reactivex.rxjava3.core.Completable -import io.reactivex.rxjava3.core.Observable import io.reactivex.rxjava3.core.Single import io.reactivex.rxjava3.schedulers.Schedulers import org.signal.core.util.concurrent.SignalExecutors @@ -21,7 +16,6 @@ import org.thoughtcrime.securesms.R import org.thoughtcrime.securesms.database.DatabaseFactory import org.thoughtcrime.securesms.dependencies.ApplicationDependencies import org.thoughtcrime.securesms.jobmanager.JobTracker -import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint import org.thoughtcrime.securesms.jobs.BoostReceiptRequestResponseJob import org.thoughtcrime.securesms.jobs.SubscriptionReceiptRequestResponseJob import org.thoughtcrime.securesms.keyvalue.SignalStore @@ -75,19 +69,6 @@ class DonationPaymentRepository(activity: Activity) : StripeApi.PaymentIntentFet StorageSyncHelper.scheduleSyncForDataChange() } - fun internetConnectionObserver(): Observable = Observable.create { - val observer = object : BroadcastReceiver() { - override fun onReceive(context: Context?, intent: Intent?) { - if (!it.isDisposed) { - it.onNext(NetworkConstraint.isMet(application)) - } - } - } - - it.setCancellable { application.unregisterReceiver(observer) } - application.registerReceiver(observer, IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)) - } - fun requestTokenFromGooglePay(price: FiatMoney, label: String, requestCode: Int) { googlePayApi.requestPayment(price, label, requestCode) } 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 47369815fe..376a4d6618 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 @@ -121,7 +121,7 @@ class BoostFragment : DSLSettingsBottomSheetFragment( is DonationEvent.GooglePayUnavailableError -> Unit is DonationEvent.PaymentConfirmationError -> onPaymentError(event.throwable) is DonationEvent.PaymentConfirmationSuccess -> onPaymentConfirmed(event.badge) - DonationEvent.RequestTokenError -> onPaymentError(null) + is DonationEvent.RequestTokenError -> onPaymentError(event.throwable) DonationEvent.RequestTokenSuccess -> Log.i(TAG, "Successfully got request token from Google Pay") DonationEvent.SubscriptionCancelled -> Unit is DonationEvent.SubscriptionCancellationFailed -> Unit diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/boost/BoostViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/boost/BoostViewModel.kt index ed2e5e3b59..f137118d2e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/boost/BoostViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/boost/BoostViewModel.kt @@ -19,6 +19,7 @@ import org.thoughtcrime.securesms.badges.models.Badge import org.thoughtcrime.securesms.components.settings.app.subscription.DonationEvent import org.thoughtcrime.securesms.components.settings.app.subscription.DonationPaymentRepository import org.thoughtcrime.securesms.keyvalue.SignalStore +import org.thoughtcrime.securesms.util.InternetConnectionObserver import org.thoughtcrime.securesms.util.PlatformCurrencyUtil import org.thoughtcrime.securesms.util.livedata.Store import java.math.BigDecimal @@ -42,8 +43,8 @@ class BoostViewModel( private var boostToPurchase: Boost? = null init { - networkDisposable = donationPaymentRepository - .internetConnectionObserver() + networkDisposable = InternetConnectionObserver + .observe() .distinctUntilChanged() .subscribe { isConnected -> if (isConnected) { @@ -152,9 +153,9 @@ class BoostViewModel( } } - override fun onError() { + override fun onError(googlePayException: GooglePayApi.GooglePayException) { store.update { it.copy(stage = BoostState.Stage.READY) } - eventPublisher.onNext(DonationEvent.RequestTokenError) + eventPublisher.onNext(DonationEvent.RequestTokenError(googlePayException)) } override fun onCancelled() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/manage/ManageDonationsFragment.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/manage/ManageDonationsFragment.kt index 503b595079..cc68ac968e 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/manage/ManageDonationsFragment.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/manage/ManageDonationsFragment.kt @@ -1,9 +1,7 @@ package org.thoughtcrime.securesms.components.settings.app.subscription.manage -import android.os.Bundle import android.widget.Toast import androidx.fragment.app.viewModels -import androidx.navigation.NavOptions import androidx.navigation.fragment.findNavController import org.signal.core.util.DimensionUnit import org.thoughtcrime.securesms.R @@ -37,29 +35,12 @@ class ManageDonationsFragment : DSLSettingsFragment() { private val lifecycleDisposable = LifecycleDisposable() - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - - val args = ManageDonationsFragmentArgs.fromBundle(requireArguments()) - if (args.skipToSubscribe) { - findNavController().navigate( - ManageDonationsFragmentDirections.actionManageDonationsFragmentToSubscribeFragment(), - NavOptions.Builder().setPopUpTo(R.id.manageDonationsFragment, true).build() - ) - } - } - override fun onResume() { super.onResume() viewModel.refresh() } override fun bindAdapter(adapter: DSLSettingsAdapter) { - val args = ManageDonationsFragmentArgs.fromBundle(requireArguments()) - if (args.skipToSubscribe) { - return - } - ActiveSubscriptionPreference.register(adapter) IndeterminateLoadingCircle.register(adapter) BadgePreview.register(adapter) @@ -149,7 +130,7 @@ class ManageDonationsFragment : DSLSettingsFragment() { title = DSLSettingsText.from(R.string.ManageDonationsFragment__badges), icon = DSLSettingsIcon.from(R.drawable.ic_badge_24), onClick = { - findNavController().navigate(ManageDonationsFragmentDirections.actionManageDonationsFragmentToSubscriptionBadgeManageFragment()) + findNavController().navigate(ManageDonationsFragmentDirections.actionManageDonationsFragmentToSubscribeFragment()) } ) 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 98d4c1f04a..26621837d9 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 @@ -16,7 +16,6 @@ import org.thoughtcrime.securesms.badges.models.BadgePreview import org.thoughtcrime.securesms.components.settings.DSLConfiguration import org.thoughtcrime.securesms.components.settings.DSLSettingsAdapter import org.thoughtcrime.securesms.components.settings.DSLSettingsFragment -import org.thoughtcrime.securesms.components.settings.DSLSettingsIcon import org.thoughtcrime.securesms.components.settings.DSLSettingsText import org.thoughtcrime.securesms.components.settings.app.AppSettingsActivity import org.thoughtcrime.securesms.components.settings.app.subscription.DonationEvent @@ -33,7 +32,6 @@ import org.thoughtcrime.securesms.help.HelpFragment import org.thoughtcrime.securesms.keyboard.findListener import org.thoughtcrime.securesms.payments.FiatMoneyUtil import org.thoughtcrime.securesms.subscription.Subscription -import org.thoughtcrime.securesms.util.CommunicationActions import org.thoughtcrime.securesms.util.LifecycleDisposable import org.thoughtcrime.securesms.util.SpanUtil import java.util.Calendar @@ -52,7 +50,7 @@ class SubscribeFragment : DSLSettingsFragment( SpannableStringBuilder(requireContext().getString(R.string.SubscribeFragment__support_technology_that_is_built_for_you_not)) .append(" ") .append( - SpanUtil.readMore(requireContext(), ContextCompat.getColor(requireContext(), R.color.signal_accent_primary)) { + SpanUtil.readMore(requireContext(), ContextCompat.getColor(requireContext(), R.color.signal_button_secondary_text)) { findNavController().navigate(SubscribeFragmentDirections.actionSubscribeFragmentToSubscribeLearnMoreBottomSheetDialog()) } ) @@ -98,7 +96,7 @@ class SubscribeFragment : DSLSettingsFragment( is DonationEvent.GooglePayUnavailableError -> Unit is DonationEvent.PaymentConfirmationError -> onPaymentError(it.throwable) is DonationEvent.PaymentConfirmationSuccess -> onPaymentConfirmed(it.badge) - DonationEvent.RequestTokenError -> onPaymentError(null) + is DonationEvent.RequestTokenError -> onPaymentError(DonationExceptions.SetupFailed(it.throwable)) DonationEvent.RequestTokenSuccess -> Log.w(TAG, "Successfully got request token from Google Pay") DonationEvent.SubscriptionCancelled -> onSubscriptionCancelled() is DonationEvent.SubscriptionCancellationFailed -> onSubscriptionFailedToCancel(it.throwable) @@ -249,13 +247,7 @@ class SubscribeFragment : DSLSettingsFragment( ) ) - secondaryButtonNoOutline( - text = DSLSettingsText.from(R.string.SubscribeFragment__more_payment_options), - icon = DSLSettingsIcon.from(R.drawable.ic_open_20, R.color.signal_accent_primary), - onClick = { - CommunicationActions.openBrowserLink(requireContext(), getString(R.string.donate_url)) - } - ) + space(DimensionUnit.DP.toPixels(8f).toInt()) } } } @@ -275,7 +267,7 @@ class SubscribeFragment : DSLSettingsFragment( Log.w(TAG, "Timeout occurred while redeeming token", throwable, true) MaterialAlertDialogBuilder(requireContext()) .setTitle(R.string.DonationsErrors__still_processing) - .setMessage(R.string.DonationsErrors__your_payment) + .setMessage(R.string.DonationsErrors__your_payment_is_still) .setPositiveButton(android.R.string.ok) { dialog, _ -> dialog.dismiss() requireActivity().finish() diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/subscribe/SubscribeViewModel.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/subscribe/SubscribeViewModel.kt index cf5e026b67..105f8a0eff 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/subscribe/SubscribeViewModel.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/app/subscription/subscribe/SubscribeViewModel.kt @@ -25,6 +25,7 @@ import org.thoughtcrime.securesms.keyvalue.SignalStore import org.thoughtcrime.securesms.subscription.LevelUpdate import org.thoughtcrime.securesms.subscription.Subscriber import org.thoughtcrime.securesms.subscription.Subscription +import org.thoughtcrime.securesms.util.InternetConnectionObserver import org.thoughtcrime.securesms.util.PlatformCurrencyUtil import org.thoughtcrime.securesms.util.livedata.Store import org.whispersystems.signalservice.api.subscriptions.ActiveSubscription @@ -49,8 +50,8 @@ class SubscribeViewModel( private val activeSubscriptionSubject = PublishSubject.create() init { - networkDisposable = donationPaymentRepository - .internetConnectionObserver() + networkDisposable = InternetConnectionObserver + .observe() .distinctUntilChanged() .subscribe { isConnected -> if (isConnected) { @@ -218,9 +219,9 @@ class SubscribeViewModel( } } - override fun onError() { + override fun onError(googlePayException: GooglePayApi.GooglePayException) { store.update { it.copy(stage = SubscribeState.Stage.READY) } - eventPublisher.onNext(DonationEvent.RequestTokenError) + eventPublisher.onNext(DonationEvent.RequestTokenError(googlePayException)) } override fun onCancelled() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/components/settings/models/AsyncSwitch.kt b/app/src/main/java/org/thoughtcrime/securesms/components/settings/models/AsyncSwitch.kt index 136024c33b..d5513aff4b 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/components/settings/models/AsyncSwitch.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/components/settings/models/AsyncSwitch.kt @@ -39,7 +39,7 @@ object AsyncSwitch { super.bind(model) switchWidget.isEnabled = model.isEnabled switchWidget.isChecked = model.isChecked - itemView.isEnabled = !model.isProcessing + itemView.isEnabled = !model.isProcessing && model.isEnabled switcher.displayedChild = if (model.isProcessing) 1 else 0 itemView.setOnClickListener { diff --git a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/DonationsValues.kt b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/DonationsValues.kt index fc53202ade..6b94ca5148 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/keyvalue/DonationsValues.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/keyvalue/DonationsValues.kt @@ -63,7 +63,7 @@ internal class DonationsValues internal constructor(store: KeyValueStore) : Sign CurrencyUtil.getCurrencyByCurrencyCode(currencyCode) } - return if (currency != null && StripeApi.Validation.supportedCurrencyCodes.contains(currency.currencyCode)) { + return if (currency != null && StripeApi.Validation.supportedCurrencyCodes.contains(currency.currencyCode.toUpperCase(Locale.ROOT))) { currency } else { Currency.getInstance("USD") diff --git a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/ManageProfileActivity.java b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/ManageProfileActivity.java index c6bdcdf8c6..78fdaaeccf 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/ManageProfileActivity.java +++ b/app/src/main/java/org/thoughtcrime/securesms/profiles/manage/ManageProfileActivity.java @@ -23,6 +23,8 @@ import org.thoughtcrime.securesms.util.DynamicTheme; */ public class ManageProfileActivity extends PassphraseRequiredActivity implements ReactWithAnyEmojiBottomSheetDialogFragment.Callback { + public static final int RESULT_BECOME_A_SUSTAINER = 12382; + private final DynamicTheme dynamicTheme = new DynamicNoActionBarTheme(); public static final String START_AT_USERNAME = "start_at_username"; diff --git a/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java b/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java index 3b4b784d0e..263c497a7d 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java +++ b/app/src/main/java/org/thoughtcrime/securesms/recipients/Recipient.java @@ -1028,7 +1028,7 @@ public class Recipient { } public @NonNull List getBadges() { - return FeatureFlags.displayDonorBadges() ? badges : Collections.emptyList(); + return FeatureFlags.displayDonorBadges() || isSelf() ? badges : Collections.emptyList(); } public @Nullable Badge getFeaturedBadge() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java b/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java index a8efa2d9f5..66d53a8aff 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java +++ b/app/src/main/java/org/thoughtcrime/securesms/util/FeatureFlags.java @@ -84,9 +84,9 @@ public final class FeatureFlags { private static final String MAX_GROUP_CALL_RING_SIZE = "global.calling.maxGroupCallRingSize"; private static final String GROUP_CALL_RINGING = "android.calling.groupCallRinging"; private static final String CHANGE_NUMBER_ENABLED = "android.changeNumber"; - private static final String DONOR_BADGES = "android.donorBadges.5"; + private static final String DONOR_BADGES = "android.donorBadges.6"; private static final String DONOR_BADGES_MEGAPHONE = "android.donorBadges.megaphone.3"; - private static final String DONOR_BADGES_DISPLAY = "android.donorBadges.display.3"; + private static final String DONOR_BADGES_DISPLAY = "android.donorBadges.display.4"; private static final String CDSH = "android.cdsh"; /** @@ -427,7 +427,7 @@ public final class FeatureFlags { * Whether or not donor badges should be displayed throughout the app. */ public static boolean displayDonorBadges() { - return getBoolean(DONOR_BADGES_DISPLAY, Environment.IS_STAGING); + return getBoolean(DONOR_BADGES_DISPLAY, false); } public static boolean cdsh() { diff --git a/app/src/main/java/org/thoughtcrime/securesms/util/InternetConnectionObserver.kt b/app/src/main/java/org/thoughtcrime/securesms/util/InternetConnectionObserver.kt new file mode 100644 index 0000000000..d7e31a24a1 --- /dev/null +++ b/app/src/main/java/org/thoughtcrime/securesms/util/InternetConnectionObserver.kt @@ -0,0 +1,27 @@ +package org.thoughtcrime.securesms.util + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.net.ConnectivityManager +import io.reactivex.rxjava3.core.Observable +import org.thoughtcrime.securesms.dependencies.ApplicationDependencies +import org.thoughtcrime.securesms.jobmanager.impl.NetworkConstraint + +object InternetConnectionObserver { + fun observe(): Observable = Observable.create { + val application = ApplicationDependencies.getApplication() + + val observer = object : BroadcastReceiver() { + override fun onReceive(context: Context?, intent: Intent?) { + if (!it.isDisposed) { + it.onNext(NetworkConstraint.isMet(application)) + } + } + } + + it.setCancellable { application.unregisterReceiver(observer) } + application.registerReceiver(observer, IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)) + } +} diff --git a/app/src/main/res/navigation/app_settings.xml b/app/src/main/res/navigation/app_settings.xml index 48b02ee906..a516dae40d 100644 --- a/app/src/main/res/navigation/app_settings.xml +++ b/app/src/main/res/navigation/app_settings.xml @@ -23,7 +23,7 @@ app:enterAnim="@anim/fragment_open_enter" app:exitAnim="@anim/fragment_open_exit" app:popEnterAnim="@anim/fragment_close_enter" - app:popExitAnim="@anim/fragment_close_exit" /> + app:popExitAnim="@anim/fragment_close_exit" /> + app:popExitAnim="@anim/fragment_close_exit" /> + app:popExitAnim="@anim/fragment_close_exit" /> + app:popExitAnim="@anim/fragment_close_exit" /> + app:popExitAnim="@anim/fragment_close_exit" /> + app:popExitAnim="@anim/fragment_close_exit" /> + app:popExitAnim="@anim/fragment_close_exit" /> + app:popExitAnim="@anim/fragment_close_exit" /> + app:popExitAnim="@anim/fragment_close_exit" /> - - - - + app:popExitAnim="@anim/fragment_close_exit"> + - - - - - + app:popExitAnim="@anim/fragment_close_exit" /> + @@ -477,4 +476,99 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/navigation/subscriptions.xml b/app/src/main/res/navigation/subscriptions.xml deleted file mode 100644 index 12ea90f6df..0000000000 --- a/app/src/main/res/navigation/subscriptions.xml +++ /dev/null @@ -1,112 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/donations/lib/src/main/java/org/signal/donations/GooglePayApi.kt b/donations/lib/src/main/java/org/signal/donations/GooglePayApi.kt index 18fe7a0c3b..077575b997 100644 --- a/donations/lib/src/main/java/org/signal/donations/GooglePayApi.kt +++ b/donations/lib/src/main/java/org/signal/donations/GooglePayApi.kt @@ -97,13 +97,13 @@ class GooglePayApi( Activity.RESULT_OK -> { data?.let { intent -> PaymentData.getFromIntent(intent)?.let { paymentRequestCallback.onSuccess(it) } - } ?: paymentRequestCallback.onError() + } ?: paymentRequestCallback.onError(GooglePayException(-1, "No data returned from Google Pay")) } Activity.RESULT_CANCELED -> paymentRequestCallback.onCancelled() AutoResolveHelper.RESULT_ERROR -> { AutoResolveHelper.getStatusFromIntent(data)?.let { Log.w(TAG, "loadPaymentData failed with error code ${it.statusCode}: ${it.statusMessage}") - paymentRequestCallback.onError() + paymentRequestCallback.onError(GooglePayException(it.statusCode, it.statusMessage)) } } } @@ -195,7 +195,9 @@ class GooglePayApi( interface PaymentRequestCallback { fun onSuccess(paymentData: PaymentData) - fun onError() + fun onError(googlePayException: GooglePayException) fun onCancelled() } + + class GooglePayException(code: Int, message: String?) : Exception(message) } \ No newline at end of file diff --git a/donations/lib/src/main/res/drawable-ar-night/donate_with_googlepay_button_content.xml b/donations/lib/src/main/res/drawable-ar-night/donate_with_googlepay_button_content.xml new file mode 100755 index 0000000000..1bf89bd308 --- /dev/null +++ b/donations/lib/src/main/res/drawable-ar-night/donate_with_googlepay_button_content.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/donations/lib/src/main/res/drawable-bg-night/donate_with_googlepay_button_content.xml b/donations/lib/src/main/res/drawable-bg-night/donate_with_googlepay_button_content.xml new file mode 100755 index 0000000000..5934236f22 --- /dev/null +++ b/donations/lib/src/main/res/drawable-bg-night/donate_with_googlepay_button_content.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/donations/lib/src/main/res/drawable-ca-night/donate_with_googlepay_button_content.xml b/donations/lib/src/main/res/drawable-ca-night/donate_with_googlepay_button_content.xml new file mode 100755 index 0000000000..1613d9062f --- /dev/null +++ b/donations/lib/src/main/res/drawable-ca-night/donate_with_googlepay_button_content.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/donations/lib/src/main/res/drawable-cs-night/donate_with_googlepay_button_content.xml b/donations/lib/src/main/res/drawable-cs-night/donate_with_googlepay_button_content.xml new file mode 100755 index 0000000000..11b599656f --- /dev/null +++ b/donations/lib/src/main/res/drawable-cs-night/donate_with_googlepay_button_content.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/donations/lib/src/main/res/drawable-da-night/donate_with_googlepay_button_content.xml b/donations/lib/src/main/res/drawable-da-night/donate_with_googlepay_button_content.xml new file mode 100755 index 0000000000..47c80caa8f --- /dev/null +++ b/donations/lib/src/main/res/drawable-da-night/donate_with_googlepay_button_content.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/donations/lib/src/main/res/drawable-de-night/donate_with_googlepay_button_content.xml b/donations/lib/src/main/res/drawable-de-night/donate_with_googlepay_button_content.xml new file mode 100755 index 0000000000..b6e8d31ce6 --- /dev/null +++ b/donations/lib/src/main/res/drawable-de-night/donate_with_googlepay_button_content.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/donations/lib/src/main/res/drawable-el-night/donate_with_googlepay_button_content.xml b/donations/lib/src/main/res/drawable-el-night/donate_with_googlepay_button_content.xml new file mode 100755 index 0000000000..10ccfd96a0 --- /dev/null +++ b/donations/lib/src/main/res/drawable-el-night/donate_with_googlepay_button_content.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/donations/lib/src/main/res/drawable-es-night/donate_with_googlepay_button_content.xml b/donations/lib/src/main/res/drawable-es-night/donate_with_googlepay_button_content.xml new file mode 100755 index 0000000000..a3a6ee7f6b --- /dev/null +++ b/donations/lib/src/main/res/drawable-es-night/donate_with_googlepay_button_content.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/donations/lib/src/main/res/drawable-et-night/donate_with_googlepay_button_content.xml b/donations/lib/src/main/res/drawable-et-night/donate_with_googlepay_button_content.xml new file mode 100755 index 0000000000..af8bcbe0b9 --- /dev/null +++ b/donations/lib/src/main/res/drawable-et-night/donate_with_googlepay_button_content.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/donations/lib/src/main/res/drawable-eu-night/donate_with_googlepay_button_content.xml b/donations/lib/src/main/res/drawable-eu-night/donate_with_googlepay_button_content.xml new file mode 100755 index 0000000000..0222308e5e --- /dev/null +++ b/donations/lib/src/main/res/drawable-eu-night/donate_with_googlepay_button_content.xml @@ -0,0 +1,43 @@ + + + + + + + + + + + + diff --git a/donations/lib/src/main/res/drawable-fi-night/donate_with_googlepay_button_content.xml b/donations/lib/src/main/res/drawable-fi-night/donate_with_googlepay_button_content.xml new file mode 100755 index 0000000000..bbeb11feda --- /dev/null +++ b/donations/lib/src/main/res/drawable-fi-night/donate_with_googlepay_button_content.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/donations/lib/src/main/res/drawable-fr-night/donate_with_googlepay_button_content.xml b/donations/lib/src/main/res/drawable-fr-night/donate_with_googlepay_button_content.xml new file mode 100755 index 0000000000..d5854fee3b --- /dev/null +++ b/donations/lib/src/main/res/drawable-fr-night/donate_with_googlepay_button_content.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/donations/lib/src/main/res/drawable-hdpi/googlepay_button_background_image_focused.9.png b/donations/lib/src/main/res/drawable-hdpi/googlepay_button_background_image_focused.9.png new file mode 100755 index 0000000000..342f248e86 Binary files /dev/null and b/donations/lib/src/main/res/drawable-hdpi/googlepay_button_background_image_focused.9.png differ diff --git a/donations/lib/src/main/res/drawable-hdpi/googlepay_button_background_image_pressed.9.png b/donations/lib/src/main/res/drawable-hdpi/googlepay_button_background_image_pressed.9.png new file mode 100755 index 0000000000..337c9325c9 Binary files /dev/null and b/donations/lib/src/main/res/drawable-hdpi/googlepay_button_background_image_pressed.9.png differ diff --git a/donations/lib/src/main/res/drawable-hdpi/googlepay_button_no_shadow_background_image_focused.9.png b/donations/lib/src/main/res/drawable-hdpi/googlepay_button_no_shadow_background_image_focused.9.png new file mode 100755 index 0000000000..b82ca103aa Binary files /dev/null and b/donations/lib/src/main/res/drawable-hdpi/googlepay_button_no_shadow_background_image_focused.9.png differ diff --git a/donations/lib/src/main/res/drawable-hdpi/googlepay_button_no_shadow_background_image_pressed.9.png b/donations/lib/src/main/res/drawable-hdpi/googlepay_button_no_shadow_background_image_pressed.9.png new file mode 100755 index 0000000000..35a44a23c6 Binary files /dev/null and b/donations/lib/src/main/res/drawable-hdpi/googlepay_button_no_shadow_background_image_pressed.9.png differ diff --git a/donations/lib/src/main/res/drawable-hr-night/donate_with_googlepay_button_content.xml b/donations/lib/src/main/res/drawable-hr-night/donate_with_googlepay_button_content.xml new file mode 100755 index 0000000000..9f911c374a --- /dev/null +++ b/donations/lib/src/main/res/drawable-hr-night/donate_with_googlepay_button_content.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/donations/lib/src/main/res/drawable-id-night/donate_with_googlepay_button_content.xml b/donations/lib/src/main/res/drawable-id-night/donate_with_googlepay_button_content.xml new file mode 100755 index 0000000000..48c66d4ba3 --- /dev/null +++ b/donations/lib/src/main/res/drawable-id-night/donate_with_googlepay_button_content.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/donations/lib/src/main/res/drawable-it-night/donate_with_googlepay_button_content.xml b/donations/lib/src/main/res/drawable-it-night/donate_with_googlepay_button_content.xml new file mode 100755 index 0000000000..e9856c70e1 --- /dev/null +++ b/donations/lib/src/main/res/drawable-it-night/donate_with_googlepay_button_content.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/donations/lib/src/main/res/drawable-ja-night/donate_with_googlepay_button_content.xml b/donations/lib/src/main/res/drawable-ja-night/donate_with_googlepay_button_content.xml new file mode 100755 index 0000000000..57ab8714f6 --- /dev/null +++ b/donations/lib/src/main/res/drawable-ja-night/donate_with_googlepay_button_content.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/donations/lib/src/main/res/drawable-ko-night/donate_with_googlepay_button_content.xml b/donations/lib/src/main/res/drawable-ko-night/donate_with_googlepay_button_content.xml new file mode 100755 index 0000000000..0951612eec --- /dev/null +++ b/donations/lib/src/main/res/drawable-ko-night/donate_with_googlepay_button_content.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/donations/lib/src/main/res/drawable-mdpi/googlepay_button_background_image_focused.9.png b/donations/lib/src/main/res/drawable-mdpi/googlepay_button_background_image_focused.9.png new file mode 100755 index 0000000000..4b0729484c Binary files /dev/null and b/donations/lib/src/main/res/drawable-mdpi/googlepay_button_background_image_focused.9.png differ diff --git a/donations/lib/src/main/res/drawable-mdpi/googlepay_button_background_image_pressed.9.png b/donations/lib/src/main/res/drawable-mdpi/googlepay_button_background_image_pressed.9.png new file mode 100755 index 0000000000..4964cdc1b4 Binary files /dev/null and b/donations/lib/src/main/res/drawable-mdpi/googlepay_button_background_image_pressed.9.png differ diff --git a/donations/lib/src/main/res/drawable-mdpi/googlepay_button_no_shadow_background_image_focused.9.png b/donations/lib/src/main/res/drawable-mdpi/googlepay_button_no_shadow_background_image_focused.9.png new file mode 100755 index 0000000000..c98d387b16 Binary files /dev/null and b/donations/lib/src/main/res/drawable-mdpi/googlepay_button_no_shadow_background_image_focused.9.png differ diff --git a/donations/lib/src/main/res/drawable-mdpi/googlepay_button_no_shadow_background_image_pressed.9.png b/donations/lib/src/main/res/drawable-mdpi/googlepay_button_no_shadow_background_image_pressed.9.png new file mode 100755 index 0000000000..340d4494ae Binary files /dev/null and b/donations/lib/src/main/res/drawable-mdpi/googlepay_button_no_shadow_background_image_pressed.9.png differ diff --git a/donations/lib/src/main/res/drawable-ms-night/donate_with_googlepay_button_content.xml b/donations/lib/src/main/res/drawable-ms-night/donate_with_googlepay_button_content.xml new file mode 100755 index 0000000000..868979506a --- /dev/null +++ b/donations/lib/src/main/res/drawable-ms-night/donate_with_googlepay_button_content.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/donations/lib/src/main/res/drawable-night-hdpi/googlepay_button_background_image.9.png b/donations/lib/src/main/res/drawable-night-hdpi/googlepay_button_background_image.9.png new file mode 100755 index 0000000000..1d6c0e3730 Binary files /dev/null and b/donations/lib/src/main/res/drawable-night-hdpi/googlepay_button_background_image.9.png differ diff --git a/donations/lib/src/main/res/drawable-night-hdpi/googlepay_button_no_shadow_background_image.9.png b/donations/lib/src/main/res/drawable-night-hdpi/googlepay_button_no_shadow_background_image.9.png new file mode 100755 index 0000000000..affa0d38c8 Binary files /dev/null and b/donations/lib/src/main/res/drawable-night-hdpi/googlepay_button_no_shadow_background_image.9.png differ diff --git a/donations/lib/src/main/res/drawable-night-mdpi/googlepay_button_background_image.9.png b/donations/lib/src/main/res/drawable-night-mdpi/googlepay_button_background_image.9.png new file mode 100755 index 0000000000..98ece61c9a Binary files /dev/null and b/donations/lib/src/main/res/drawable-night-mdpi/googlepay_button_background_image.9.png differ diff --git a/donations/lib/src/main/res/drawable-night-mdpi/googlepay_button_no_shadow_background_image.9.png b/donations/lib/src/main/res/drawable-night-mdpi/googlepay_button_no_shadow_background_image.9.png new file mode 100755 index 0000000000..5d2ca4a449 Binary files /dev/null and b/donations/lib/src/main/res/drawable-night-mdpi/googlepay_button_no_shadow_background_image.9.png differ diff --git a/donations/lib/src/main/res/drawable-night-v21/googlepay_button_background.xml b/donations/lib/src/main/res/drawable-night-v21/googlepay_button_background.xml new file mode 100755 index 0000000000..b0a94f3918 --- /dev/null +++ b/donations/lib/src/main/res/drawable-night-v21/googlepay_button_background.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + diff --git a/donations/lib/src/main/res/drawable-night-v21/googlepay_button_no_shadow_background.xml b/donations/lib/src/main/res/drawable-night-v21/googlepay_button_no_shadow_background.xml new file mode 100755 index 0000000000..c39fc11f0f --- /dev/null +++ b/donations/lib/src/main/res/drawable-night-v21/googlepay_button_no_shadow_background.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + diff --git a/donations/lib/src/main/res/drawable-night-xhdpi/googlepay_button_background_image.9.png b/donations/lib/src/main/res/drawable-night-xhdpi/googlepay_button_background_image.9.png new file mode 100755 index 0000000000..2424f96860 Binary files /dev/null and b/donations/lib/src/main/res/drawable-night-xhdpi/googlepay_button_background_image.9.png differ diff --git a/donations/lib/src/main/res/drawable-night-xhdpi/googlepay_button_no_shadow_background_image.9.png b/donations/lib/src/main/res/drawable-night-xhdpi/googlepay_button_no_shadow_background_image.9.png new file mode 100755 index 0000000000..95482f4f55 Binary files /dev/null and b/donations/lib/src/main/res/drawable-night-xhdpi/googlepay_button_no_shadow_background_image.9.png differ diff --git a/donations/lib/src/main/res/drawable-night-xxhdpi/googlepay_button_background_image.9.png b/donations/lib/src/main/res/drawable-night-xxhdpi/googlepay_button_background_image.9.png new file mode 100755 index 0000000000..a6a1b1876d Binary files /dev/null and b/donations/lib/src/main/res/drawable-night-xxhdpi/googlepay_button_background_image.9.png differ diff --git a/donations/lib/src/main/res/drawable-night-xxhdpi/googlepay_button_no_shadow_background_image.9.png b/donations/lib/src/main/res/drawable-night-xxhdpi/googlepay_button_no_shadow_background_image.9.png new file mode 100755 index 0000000000..69b8340094 Binary files /dev/null and b/donations/lib/src/main/res/drawable-night-xxhdpi/googlepay_button_no_shadow_background_image.9.png differ diff --git a/donations/lib/src/main/res/drawable-night-xxxhdpi/googlepay_button_background_image.9.png b/donations/lib/src/main/res/drawable-night-xxxhdpi/googlepay_button_background_image.9.png new file mode 100755 index 0000000000..7c781080cc Binary files /dev/null and b/donations/lib/src/main/res/drawable-night-xxxhdpi/googlepay_button_background_image.9.png differ diff --git a/donations/lib/src/main/res/drawable-night-xxxhdpi/googlepay_button_no_shadow_background_image.9.png b/donations/lib/src/main/res/drawable-night-xxxhdpi/googlepay_button_no_shadow_background_image.9.png new file mode 100755 index 0000000000..41dfb83724 Binary files /dev/null and b/donations/lib/src/main/res/drawable-night-xxxhdpi/googlepay_button_no_shadow_background_image.9.png differ diff --git a/donations/lib/src/main/res/drawable-night/donate_with_googlepay_button_content.xml b/donations/lib/src/main/res/drawable-night/donate_with_googlepay_button_content.xml new file mode 100755 index 0000000000..420a7971b0 --- /dev/null +++ b/donations/lib/src/main/res/drawable-night/donate_with_googlepay_button_content.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/donations/lib/src/main/res/drawable-night/googlepay_button_background.xml b/donations/lib/src/main/res/drawable-night/googlepay_button_background.xml new file mode 100755 index 0000000000..8f138dc545 --- /dev/null +++ b/donations/lib/src/main/res/drawable-night/googlepay_button_background.xml @@ -0,0 +1,18 @@ + + + + + + + + diff --git a/donations/lib/src/main/res/drawable-night/googlepay_button_content.xml b/donations/lib/src/main/res/drawable-night/googlepay_button_content.xml new file mode 100755 index 0000000000..57596ba5f0 --- /dev/null +++ b/donations/lib/src/main/res/drawable-night/googlepay_button_content.xml @@ -0,0 +1,48 @@ + + + + + + + + + diff --git a/donations/lib/src/main/res/drawable-night/googlepay_button_no_shadow_background.xml b/donations/lib/src/main/res/drawable-night/googlepay_button_no_shadow_background.xml new file mode 100755 index 0000000000..d6eab82b3a --- /dev/null +++ b/donations/lib/src/main/res/drawable-night/googlepay_button_no_shadow_background.xml @@ -0,0 +1,18 @@ + + + + + + + + diff --git a/donations/lib/src/main/res/drawable-night/googlepay_button_overlay.xml b/donations/lib/src/main/res/drawable-night/googlepay_button_overlay.xml new file mode 100755 index 0000000000..6e46c44805 --- /dev/null +++ b/donations/lib/src/main/res/drawable-night/googlepay_button_overlay.xml @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/donations/lib/src/main/res/drawable-nl-night/donate_with_googlepay_button_content.xml b/donations/lib/src/main/res/drawable-nl-night/donate_with_googlepay_button_content.xml new file mode 100755 index 0000000000..c803acd121 --- /dev/null +++ b/donations/lib/src/main/res/drawable-nl-night/donate_with_googlepay_button_content.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/donations/lib/src/main/res/drawable-no-night/donate_with_googlepay_button_content.xml b/donations/lib/src/main/res/drawable-no-night/donate_with_googlepay_button_content.xml new file mode 100755 index 0000000000..47c80caa8f --- /dev/null +++ b/donations/lib/src/main/res/drawable-no-night/donate_with_googlepay_button_content.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/donations/lib/src/main/res/drawable-pl-night/donate_with_googlepay_button_content.xml b/donations/lib/src/main/res/drawable-pl-night/donate_with_googlepay_button_content.xml new file mode 100755 index 0000000000..f25c83f1a8 --- /dev/null +++ b/donations/lib/src/main/res/drawable-pl-night/donate_with_googlepay_button_content.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/donations/lib/src/main/res/drawable-pt-night/donate_with_googlepay_button_content.xml b/donations/lib/src/main/res/drawable-pt-night/donate_with_googlepay_button_content.xml new file mode 100755 index 0000000000..38078a5431 --- /dev/null +++ b/donations/lib/src/main/res/drawable-pt-night/donate_with_googlepay_button_content.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/donations/lib/src/main/res/drawable-ru-night/donate_with_googlepay_button_content.xml b/donations/lib/src/main/res/drawable-ru-night/donate_with_googlepay_button_content.xml new file mode 100755 index 0000000000..c059e985db --- /dev/null +++ b/donations/lib/src/main/res/drawable-ru-night/donate_with_googlepay_button_content.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/donations/lib/src/main/res/drawable-sk-night/donate_with_googlepay_button_content.xml b/donations/lib/src/main/res/drawable-sk-night/donate_with_googlepay_button_content.xml new file mode 100755 index 0000000000..20b4772d7a --- /dev/null +++ b/donations/lib/src/main/res/drawable-sk-night/donate_with_googlepay_button_content.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/donations/lib/src/main/res/drawable-sl-night/donate_with_googlepay_button_content.xml b/donations/lib/src/main/res/drawable-sl-night/donate_with_googlepay_button_content.xml new file mode 100755 index 0000000000..bd4388542e --- /dev/null +++ b/donations/lib/src/main/res/drawable-sl-night/donate_with_googlepay_button_content.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/donations/lib/src/main/res/drawable-sr-night/donate_with_googlepay_button_content.xml b/donations/lib/src/main/res/drawable-sr-night/donate_with_googlepay_button_content.xml new file mode 100755 index 0000000000..b7cec9f8a3 --- /dev/null +++ b/donations/lib/src/main/res/drawable-sr-night/donate_with_googlepay_button_content.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/donations/lib/src/main/res/drawable-sv-night/donate_with_googlepay_button_content.xml b/donations/lib/src/main/res/drawable-sv-night/donate_with_googlepay_button_content.xml new file mode 100755 index 0000000000..a30c2fbd3e --- /dev/null +++ b/donations/lib/src/main/res/drawable-sv-night/donate_with_googlepay_button_content.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/donations/lib/src/main/res/drawable-th-night/donate_with_googlepay_button_content.xml b/donations/lib/src/main/res/drawable-th-night/donate_with_googlepay_button_content.xml new file mode 100755 index 0000000000..4db1e19fdb --- /dev/null +++ b/donations/lib/src/main/res/drawable-th-night/donate_with_googlepay_button_content.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/donations/lib/src/main/res/drawable-tr-night/donate_with_googlepay_button_content.xml b/donations/lib/src/main/res/drawable-tr-night/donate_with_googlepay_button_content.xml new file mode 100755 index 0000000000..11c930e29c --- /dev/null +++ b/donations/lib/src/main/res/drawable-tr-night/donate_with_googlepay_button_content.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/donations/lib/src/main/res/drawable-uk-night/donate_with_googlepay_button_content.xml b/donations/lib/src/main/res/drawable-uk-night/donate_with_googlepay_button_content.xml new file mode 100755 index 0000000000..33cc5f996b --- /dev/null +++ b/donations/lib/src/main/res/drawable-uk-night/donate_with_googlepay_button_content.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/donations/lib/src/main/res/drawable-xhdpi/googlepay_button_background_image_focused.9.png b/donations/lib/src/main/res/drawable-xhdpi/googlepay_button_background_image_focused.9.png new file mode 100755 index 0000000000..9f1fb57483 Binary files /dev/null and b/donations/lib/src/main/res/drawable-xhdpi/googlepay_button_background_image_focused.9.png differ diff --git a/donations/lib/src/main/res/drawable-xhdpi/googlepay_button_background_image_pressed.9.png b/donations/lib/src/main/res/drawable-xhdpi/googlepay_button_background_image_pressed.9.png new file mode 100755 index 0000000000..59161bae9e Binary files /dev/null and b/donations/lib/src/main/res/drawable-xhdpi/googlepay_button_background_image_pressed.9.png differ diff --git a/donations/lib/src/main/res/drawable-xhdpi/googlepay_button_no_shadow_background_image_focused.9.png b/donations/lib/src/main/res/drawable-xhdpi/googlepay_button_no_shadow_background_image_focused.9.png new file mode 100755 index 0000000000..210493a582 Binary files /dev/null and b/donations/lib/src/main/res/drawable-xhdpi/googlepay_button_no_shadow_background_image_focused.9.png differ diff --git a/donations/lib/src/main/res/drawable-xhdpi/googlepay_button_no_shadow_background_image_pressed.9.png b/donations/lib/src/main/res/drawable-xhdpi/googlepay_button_no_shadow_background_image_pressed.9.png new file mode 100755 index 0000000000..e246559b75 Binary files /dev/null and b/donations/lib/src/main/res/drawable-xhdpi/googlepay_button_no_shadow_background_image_pressed.9.png differ diff --git a/donations/lib/src/main/res/drawable-xxhdpi/googlepay_button_background_image_focused.9.png b/donations/lib/src/main/res/drawable-xxhdpi/googlepay_button_background_image_focused.9.png new file mode 100755 index 0000000000..e766ccb293 Binary files /dev/null and b/donations/lib/src/main/res/drawable-xxhdpi/googlepay_button_background_image_focused.9.png differ diff --git a/donations/lib/src/main/res/drawable-xxhdpi/googlepay_button_background_image_pressed.9.png b/donations/lib/src/main/res/drawable-xxhdpi/googlepay_button_background_image_pressed.9.png new file mode 100755 index 0000000000..e544a4f388 Binary files /dev/null and b/donations/lib/src/main/res/drawable-xxhdpi/googlepay_button_background_image_pressed.9.png differ diff --git a/donations/lib/src/main/res/drawable-xxhdpi/googlepay_button_no_shadow_background_image_focused.9.png b/donations/lib/src/main/res/drawable-xxhdpi/googlepay_button_no_shadow_background_image_focused.9.png new file mode 100755 index 0000000000..9b71cf6cf6 Binary files /dev/null and b/donations/lib/src/main/res/drawable-xxhdpi/googlepay_button_no_shadow_background_image_focused.9.png differ diff --git a/donations/lib/src/main/res/drawable-xxhdpi/googlepay_button_no_shadow_background_image_pressed.9.png b/donations/lib/src/main/res/drawable-xxhdpi/googlepay_button_no_shadow_background_image_pressed.9.png new file mode 100755 index 0000000000..454df9b85a Binary files /dev/null and b/donations/lib/src/main/res/drawable-xxhdpi/googlepay_button_no_shadow_background_image_pressed.9.png differ diff --git a/donations/lib/src/main/res/drawable-xxxhdpi/googlepay_button_background_image_focused.9.png b/donations/lib/src/main/res/drawable-xxxhdpi/googlepay_button_background_image_focused.9.png new file mode 100755 index 0000000000..b9223ea3a7 Binary files /dev/null and b/donations/lib/src/main/res/drawable-xxxhdpi/googlepay_button_background_image_focused.9.png differ diff --git a/donations/lib/src/main/res/drawable-xxxhdpi/googlepay_button_background_image_pressed.9.png b/donations/lib/src/main/res/drawable-xxxhdpi/googlepay_button_background_image_pressed.9.png new file mode 100755 index 0000000000..894fdcfbcc Binary files /dev/null and b/donations/lib/src/main/res/drawable-xxxhdpi/googlepay_button_background_image_pressed.9.png differ diff --git a/donations/lib/src/main/res/drawable-xxxhdpi/googlepay_button_no_shadow_background_image_focused.9.png b/donations/lib/src/main/res/drawable-xxxhdpi/googlepay_button_no_shadow_background_image_focused.9.png new file mode 100755 index 0000000000..7889152aef Binary files /dev/null and b/donations/lib/src/main/res/drawable-xxxhdpi/googlepay_button_no_shadow_background_image_focused.9.png differ diff --git a/donations/lib/src/main/res/drawable-xxxhdpi/googlepay_button_no_shadow_background_image_pressed.9.png b/donations/lib/src/main/res/drawable-xxxhdpi/googlepay_button_no_shadow_background_image_pressed.9.png new file mode 100755 index 0000000000..c461f63eff Binary files /dev/null and b/donations/lib/src/main/res/drawable-xxxhdpi/googlepay_button_no_shadow_background_image_pressed.9.png differ diff --git a/donations/lib/src/main/res/drawable-zh-night/donate_with_googlepay_button_content.xml b/donations/lib/src/main/res/drawable-zh-night/donate_with_googlepay_button_content.xml new file mode 100755 index 0000000000..83f3912a68 --- /dev/null +++ b/donations/lib/src/main/res/drawable-zh-night/donate_with_googlepay_button_content.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + +