From e17c49505c588924b9acc83a58c7230f3161a4de Mon Sep 17 00:00:00 2001 From: Alex Hart Date: Thu, 18 Nov 2021 13:25:37 -0400 Subject: [PATCH] Implement several donor badge fixes and rotate flags. * Add white Google Pay buttons for use in dark mode. * Always display badges for self. * Disallow toggling / feature selection if no network is present. * Only display bottom sheet overscroll if content scrolls. * Flatten settings xml for better animations. * Add a bit of space to the bottom of subscribe fragment. * Treat GooglePay errors as setup failures. * Add quieter log for 404. * Ensure we check case before initial currency code comparison. * Fix timeout dialog copy. * Fix double settings activity on top issue. * Rotate FF. --- .../securesms/badges/BadgeRepository.kt | 6 +- .../ExpiredBadgeBottomSheetDialogFragment.kt | 2 +- .../self/none/BecomeASustainerFragment.kt | 3 +- .../self/overview/BadgesOverviewFragment.kt | 4 +- .../self/overview/BadgesOverviewState.kt | 3 +- .../self/overview/BadgesOverviewViewModel.kt | 7 + .../ViewBadgeBottomSheetDialogFragment.kt | 2 +- .../DSLSettingsBottomSheetFragment.kt | 1 + .../settings/app/AppSettingsActivity.kt | 10 +- .../settings/app/AppSettingsFragment.kt | 10 +- .../settings/app/AppSettingsViewModel.kt | 10 ++ .../app/subscription/DonationEvent.kt | 2 +- .../subscription/DonationPaymentRepository.kt | 19 --- .../app/subscription/boost/BoostFragment.kt | 2 +- .../app/subscription/boost/BoostViewModel.kt | 9 +- .../manage/ManageDonationsFragment.kt | 21 +-- .../subscribe/SubscribeFragment.kt | 16 +- .../subscribe/SubscribeViewModel.kt | 9 +- .../components/settings/models/AsyncSwitch.kt | 2 +- .../securesms/keyvalue/DonationsValues.kt | 2 +- .../manage/ManageProfileActivity.java | 2 + .../securesms/recipients/Recipient.java | 2 +- .../securesms/util/FeatureFlags.java | 6 +- .../util/InternetConnectionObserver.kt | 27 ++++ app/src/main/res/navigation/app_settings.xml | 152 ++++++++++++++---- app/src/main/res/navigation/subscriptions.xml | 112 ------------- .../java/org/signal/donations/GooglePayApi.kt | 8 +- .../donate_with_googlepay_button_content.xml | 14 ++ .../donate_with_googlepay_button_content.xml | 14 ++ .../donate_with_googlepay_button_content.xml | 14 ++ .../donate_with_googlepay_button_content.xml | 14 ++ .../donate_with_googlepay_button_content.xml | 14 ++ .../donate_with_googlepay_button_content.xml | 15 ++ .../donate_with_googlepay_button_content.xml | 14 ++ .../donate_with_googlepay_button_content.xml | 14 ++ .../donate_with_googlepay_button_content.xml | 14 ++ .../donate_with_googlepay_button_content.xml | 43 +++++ .../donate_with_googlepay_button_content.xml | 15 ++ .../donate_with_googlepay_button_content.xml | 14 ++ ...epay_button_background_image_focused.9.png | Bin 0 -> 1287 bytes ...epay_button_background_image_pressed.9.png | Bin 0 -> 1111 bytes ...n_no_shadow_background_image_focused.9.png | Bin 0 -> 642 bytes ...n_no_shadow_background_image_pressed.9.png | Bin 0 -> 700 bytes .../donate_with_googlepay_button_content.xml | 14 ++ .../donate_with_googlepay_button_content.xml | 14 ++ .../donate_with_googlepay_button_content.xml | 14 ++ .../donate_with_googlepay_button_content.xml | 14 ++ .../donate_with_googlepay_button_content.xml | 14 ++ ...epay_button_background_image_focused.9.png | Bin 0 -> 571 bytes ...epay_button_background_image_pressed.9.png | Bin 0 -> 484 bytes ...n_no_shadow_background_image_focused.9.png | Bin 0 -> 240 bytes ...n_no_shadow_background_image_pressed.9.png | Bin 0 -> 250 bytes .../donate_with_googlepay_button_content.xml | 14 ++ .../googlepay_button_background_image.9.png | Bin 0 -> 1024 bytes ...ay_button_no_shadow_background_image.9.png | Bin 0 -> 508 bytes .../googlepay_button_background_image.9.png | Bin 0 -> 432 bytes ...ay_button_no_shadow_background_image.9.png | Bin 0 -> 219 bytes .../googlepay_button_background.xml | 21 +++ .../googlepay_button_no_shadow_background.xml | 21 +++ .../googlepay_button_background_image.9.png | Bin 0 -> 947 bytes ...ay_button_no_shadow_background_image.9.png | Bin 0 -> 320 bytes .../googlepay_button_background_image.9.png | Bin 0 -> 3413 bytes ...ay_button_no_shadow_background_image.9.png | Bin 0 -> 1309 bytes .../googlepay_button_background_image.9.png | Bin 0 -> 4463 bytes ...ay_button_no_shadow_background_image.9.png | Bin 0 -> 1066 bytes .../donate_with_googlepay_button_content.xml | 14 ++ .../googlepay_button_background.xml | 18 +++ .../googlepay_button_content.xml | 48 ++++++ .../googlepay_button_no_shadow_background.xml | 18 +++ .../googlepay_button_overlay.xml | 11 ++ .../donate_with_googlepay_button_content.xml | 14 ++ .../donate_with_googlepay_button_content.xml | 14 ++ .../donate_with_googlepay_button_content.xml | 14 ++ .../donate_with_googlepay_button_content.xml | 14 ++ .../donate_with_googlepay_button_content.xml | 14 ++ .../donate_with_googlepay_button_content.xml | 14 ++ .../donate_with_googlepay_button_content.xml | 14 ++ .../donate_with_googlepay_button_content.xml | 14 ++ .../donate_with_googlepay_button_content.xml | 14 ++ .../donate_with_googlepay_button_content.xml | 14 ++ .../donate_with_googlepay_button_content.xml | 14 ++ .../donate_with_googlepay_button_content.xml | 14 ++ ...epay_button_background_image_focused.9.png | Bin 0 -> 1338 bytes ...epay_button_background_image_pressed.9.png | Bin 0 -> 1283 bytes ...n_no_shadow_background_image_focused.9.png | Bin 0 -> 563 bytes ...n_no_shadow_background_image_pressed.9.png | Bin 0 -> 587 bytes ...epay_button_background_image_focused.9.png | Bin 0 -> 4308 bytes ...epay_button_background_image_pressed.9.png | Bin 0 -> 3713 bytes ...n_no_shadow_background_image_focused.9.png | Bin 0 -> 1628 bytes ...n_no_shadow_background_image_pressed.9.png | Bin 0 -> 1470 bytes ...epay_button_background_image_focused.9.png | Bin 0 -> 5839 bytes ...epay_button_background_image_pressed.9.png | Bin 0 -> 4857 bytes ...n_no_shadow_background_image_focused.9.png | Bin 0 -> 1410 bytes ...n_no_shadow_background_image_pressed.9.png | Bin 0 -> 1421 bytes .../donate_with_googlepay_button_content.xml | 15 ++ 95 files changed, 838 insertions(+), 228 deletions(-) create mode 100644 app/src/main/java/org/thoughtcrime/securesms/util/InternetConnectionObserver.kt delete mode 100644 app/src/main/res/navigation/subscriptions.xml create mode 100755 donations/lib/src/main/res/drawable-ar-night/donate_with_googlepay_button_content.xml create mode 100755 donations/lib/src/main/res/drawable-bg-night/donate_with_googlepay_button_content.xml create mode 100755 donations/lib/src/main/res/drawable-ca-night/donate_with_googlepay_button_content.xml create mode 100755 donations/lib/src/main/res/drawable-cs-night/donate_with_googlepay_button_content.xml create mode 100755 donations/lib/src/main/res/drawable-da-night/donate_with_googlepay_button_content.xml create mode 100755 donations/lib/src/main/res/drawable-de-night/donate_with_googlepay_button_content.xml create mode 100755 donations/lib/src/main/res/drawable-el-night/donate_with_googlepay_button_content.xml create mode 100755 donations/lib/src/main/res/drawable-es-night/donate_with_googlepay_button_content.xml create mode 100755 donations/lib/src/main/res/drawable-et-night/donate_with_googlepay_button_content.xml create mode 100755 donations/lib/src/main/res/drawable-eu-night/donate_with_googlepay_button_content.xml create mode 100755 donations/lib/src/main/res/drawable-fi-night/donate_with_googlepay_button_content.xml create mode 100755 donations/lib/src/main/res/drawable-fr-night/donate_with_googlepay_button_content.xml create mode 100755 donations/lib/src/main/res/drawable-hdpi/googlepay_button_background_image_focused.9.png create mode 100755 donations/lib/src/main/res/drawable-hdpi/googlepay_button_background_image_pressed.9.png create mode 100755 donations/lib/src/main/res/drawable-hdpi/googlepay_button_no_shadow_background_image_focused.9.png create mode 100755 donations/lib/src/main/res/drawable-hdpi/googlepay_button_no_shadow_background_image_pressed.9.png create mode 100755 donations/lib/src/main/res/drawable-hr-night/donate_with_googlepay_button_content.xml create mode 100755 donations/lib/src/main/res/drawable-id-night/donate_with_googlepay_button_content.xml create mode 100755 donations/lib/src/main/res/drawable-it-night/donate_with_googlepay_button_content.xml create mode 100755 donations/lib/src/main/res/drawable-ja-night/donate_with_googlepay_button_content.xml create mode 100755 donations/lib/src/main/res/drawable-ko-night/donate_with_googlepay_button_content.xml create mode 100755 donations/lib/src/main/res/drawable-mdpi/googlepay_button_background_image_focused.9.png create mode 100755 donations/lib/src/main/res/drawable-mdpi/googlepay_button_background_image_pressed.9.png create mode 100755 donations/lib/src/main/res/drawable-mdpi/googlepay_button_no_shadow_background_image_focused.9.png create mode 100755 donations/lib/src/main/res/drawable-mdpi/googlepay_button_no_shadow_background_image_pressed.9.png create mode 100755 donations/lib/src/main/res/drawable-ms-night/donate_with_googlepay_button_content.xml create mode 100755 donations/lib/src/main/res/drawable-night-hdpi/googlepay_button_background_image.9.png create mode 100755 donations/lib/src/main/res/drawable-night-hdpi/googlepay_button_no_shadow_background_image.9.png create mode 100755 donations/lib/src/main/res/drawable-night-mdpi/googlepay_button_background_image.9.png create mode 100755 donations/lib/src/main/res/drawable-night-mdpi/googlepay_button_no_shadow_background_image.9.png create mode 100755 donations/lib/src/main/res/drawable-night-v21/googlepay_button_background.xml create mode 100755 donations/lib/src/main/res/drawable-night-v21/googlepay_button_no_shadow_background.xml create mode 100755 donations/lib/src/main/res/drawable-night-xhdpi/googlepay_button_background_image.9.png create mode 100755 donations/lib/src/main/res/drawable-night-xhdpi/googlepay_button_no_shadow_background_image.9.png create mode 100755 donations/lib/src/main/res/drawable-night-xxhdpi/googlepay_button_background_image.9.png create mode 100755 donations/lib/src/main/res/drawable-night-xxhdpi/googlepay_button_no_shadow_background_image.9.png create mode 100755 donations/lib/src/main/res/drawable-night-xxxhdpi/googlepay_button_background_image.9.png create mode 100755 donations/lib/src/main/res/drawable-night-xxxhdpi/googlepay_button_no_shadow_background_image.9.png create mode 100755 donations/lib/src/main/res/drawable-night/donate_with_googlepay_button_content.xml create mode 100755 donations/lib/src/main/res/drawable-night/googlepay_button_background.xml create mode 100755 donations/lib/src/main/res/drawable-night/googlepay_button_content.xml create mode 100755 donations/lib/src/main/res/drawable-night/googlepay_button_no_shadow_background.xml create mode 100755 donations/lib/src/main/res/drawable-night/googlepay_button_overlay.xml create mode 100755 donations/lib/src/main/res/drawable-nl-night/donate_with_googlepay_button_content.xml create mode 100755 donations/lib/src/main/res/drawable-no-night/donate_with_googlepay_button_content.xml create mode 100755 donations/lib/src/main/res/drawable-pl-night/donate_with_googlepay_button_content.xml create mode 100755 donations/lib/src/main/res/drawable-pt-night/donate_with_googlepay_button_content.xml create mode 100755 donations/lib/src/main/res/drawable-ru-night/donate_with_googlepay_button_content.xml create mode 100755 donations/lib/src/main/res/drawable-sk-night/donate_with_googlepay_button_content.xml create mode 100755 donations/lib/src/main/res/drawable-sl-night/donate_with_googlepay_button_content.xml create mode 100755 donations/lib/src/main/res/drawable-sr-night/donate_with_googlepay_button_content.xml create mode 100755 donations/lib/src/main/res/drawable-sv-night/donate_with_googlepay_button_content.xml create mode 100755 donations/lib/src/main/res/drawable-th-night/donate_with_googlepay_button_content.xml create mode 100755 donations/lib/src/main/res/drawable-tr-night/donate_with_googlepay_button_content.xml create mode 100755 donations/lib/src/main/res/drawable-uk-night/donate_with_googlepay_button_content.xml create mode 100755 donations/lib/src/main/res/drawable-xhdpi/googlepay_button_background_image_focused.9.png create mode 100755 donations/lib/src/main/res/drawable-xhdpi/googlepay_button_background_image_pressed.9.png create mode 100755 donations/lib/src/main/res/drawable-xhdpi/googlepay_button_no_shadow_background_image_focused.9.png create mode 100755 donations/lib/src/main/res/drawable-xhdpi/googlepay_button_no_shadow_background_image_pressed.9.png create mode 100755 donations/lib/src/main/res/drawable-xxhdpi/googlepay_button_background_image_focused.9.png create mode 100755 donations/lib/src/main/res/drawable-xxhdpi/googlepay_button_background_image_pressed.9.png create mode 100755 donations/lib/src/main/res/drawable-xxhdpi/googlepay_button_no_shadow_background_image_focused.9.png create mode 100755 donations/lib/src/main/res/drawable-xxhdpi/googlepay_button_no_shadow_background_image_pressed.9.png create mode 100755 donations/lib/src/main/res/drawable-xxxhdpi/googlepay_button_background_image_focused.9.png create mode 100755 donations/lib/src/main/res/drawable-xxxhdpi/googlepay_button_background_image_pressed.9.png create mode 100755 donations/lib/src/main/res/drawable-xxxhdpi/googlepay_button_no_shadow_background_image_focused.9.png create mode 100755 donations/lib/src/main/res/drawable-xxxhdpi/googlepay_button_no_shadow_background_image_pressed.9.png create mode 100755 donations/lib/src/main/res/drawable-zh-night/donate_with_googlepay_button_content.xml 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 0000000000000000000000000000000000000000..342f248e86be0ff06177c25cb1b79190aaa38517 GIT binary patch literal 1287 zcmV+i1^D`jP)ld3Ze z&iVSk=Qi%21OCO$`j_KB*l4r7_pq!3b1D875c?$0KmYteh)$h49c%|%gc{LEvP926w4LH)hSf~#OtrWdu=??Z&1%ZgU!AJhFb#$ zjj{#~_D2lhft-8x8Dhq2`;C74gHMZ_arIPo>U1P(bb(?usSLn)^Ue2)Vq6jZ2aWt? z{=%i^j-9)#eaWO%UtjNwNG1(y*X}*m!bQtW4#(6J1LnW;&IbZ&tE{X%(pHLHzXJ$J zp*sTx#vMQ4q^RC!NWTFie%Z8Xt7RBS1_wKz=i4~6Z>Ql_vDX2A7^C1o(jfYFav{hYwdQ9&-0}a%z zXVf9Q63D{+lf0H8!^c^?!7eS98xI=?5J(4&M&nWvgTb@niT+E_sd1uQieV$h zTYNg+RL43Lzl>M^IBG zAT(r1A*2ve2z^jRKtL^#Q;{TmFxA_0-@AM%aE18{Z-75ouvtNAq?K@$mm^**5 zY2<)PU~yTxY^B+Y*YwisZ{O#+*4=hPG)uW5B(*00n{Z-Q|A8Y-m~Y@W@iPp#!3GW) zZGIc>F^{oef$Zvr$l#Z$WbBe#@3^=7x8ElgJ1u60k9vk-?b`Lb#q9e?&(-(b|H$=< z61+6sFXQQ`0zpO73U9gno?E{BCO!wlho2Np37s0#7mxIx$GiL;@&D|PTrpE(n0)yHdEjnI4Hd)w;^L_C_S|8%kpqDuMOB+W{OGeUfBM;Xmz!foqhxNIi z2v2$JiRWLFRkel4f+d0=oZpn^&eN5dI`AA(Rj*c*fFLnV6BV_2MO9TRsVb1wfgF*m zSXCXA)u1Rab`2ijva+(1yaMPrIWvn`b6Q}YDjH2$~KvpEEwBXUK~$lZ2!LmA%A xZu0(n1Hl35cZa|U{dRW<#9z5P1b(34+pmNjNZGx?@4f&4002ovPDHLkV1jl)eZ&9& literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..337c9325c922055a537854d9e17faf89510da6f3 GIT binary patch literal 1111 zcmV-d1gQIoP)uZ2XV0Fw5sa}s%SgXbxzERztUu$3Nf%{|N(=#l^+t<=^wQZQC|KW2}J1VkyY~Rwyevc8sbpbU`Du zLNl}@2LKYGNC7cGV1hb)LQLLF*9+ThwxUT%NyXw^uHuLmjFpJSF!VtyH0xYDazHM~ z$#Bd+frzdEVNAAu{raj8A3hxX#_K&72n62y1A$;ngx~+s>-ArGoSHgf^XARf^nn8l zBd5lV8|M?C{0ij9+XOH`6m-vBzHIe)e5W~xOyh|H@}i<*d?4^P)9dwKyn6Mj-lnfA#7*CNfjJ zeEs@X0%H|y{MHd%@&gcI?Qn5-Se?%5KA-=i*?@R`zE8=F)qqR5LyWcL&pj<#*fB3I-r1%%tGu{e=g+yWq0T`wmGq-Re7i21?*f?Oj2gn$qb zQ|vC`10jb5{{{rLfJtf@c_8GF$N?cB1jGcp4LKwdK+NP8atHw-Advz>wG26gY8i3} z0U;n}t7WK`p<0G&8FB~#As|%C&^vcj%g{S_1cZQu2ZU-Fc_8Evs%6L_**S%1#*jaS zD4bLEdcB{`27~AHMLee}eUdpfHT}NXYMHe3^hZ)BnSXcIegFQ0bI?*@7I&c4?mQHm81 zKA-=~)6~?AU3>PeA2(sbaJ$Q8H+p5zWr|#l+XeB*p1TmaA}J{;r4n_$rd`#Otg71H zrl`HFOdDWP)IoM0N|Xk)K_j%<6xKUSJ98!T7r3^@*ACnPqC2FzG6BWHp(HU@C7JI! zc2$i_R#h8!jYDxd6^GiUbu#QRVB&;8le@Mp&dCO7rDM&iOz0J2D+SV@mT5XhE}n&8_tmE?55uT|K`&n5aE0} d1b(34*EfrK!PsG>4afih002ovPDHLkV1oF}1cm?r literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..b82ca103aa90baa59e29bf784c763a415255f1c9 GIT binary patch literal 642 zcmV-|0)737P)Nklfm_ls4L2QhI(b~3mOR=qSp*ww&wT<4ttG?Zf(bu{< z&Bu(fD4M3tzIX4@Qq6Di_@CE9-bcQ8~BVET$Ot8%1~aT)%EE>>>(#NIulm|xV4L7ddAF!4P>IOzL~>~Lj) z-v|9aKMva`{cSHqTO?>v`d*hrNmQQqx+F?tltjmXWQ;_ssYN9bZI8&+wMXP+AQH4j z_YP)+YXJM6v`nS( z%zOV@HTYQp*3g))(Kcvf1CG!W;B?N2`8bOoBbDEv4Rr4n=vLM3m$ED`StvW%i>$!> z>B-%0=em36g7ZH39_|sm-_vgl=BLBY=frR>?CxEs(e`5TFMzo!isFKW-rnkWRgIcN zKF`ga9?c-u0>DQWN@tQRr>Bv=7(2T--_KZ|w2&qR_??AP;c0YB)+a2o02bImbo4aZ zKn040QguaRPa$H_2aD|;2|Y}O1}#)5X*)`&UwFIubfL-Xo2P`**7Zjg0#A5ZJ|UTJ z<~z!Ztij#6LiaMxD2_rsV?V+ZqHDb1OY;fQwTPdvbp<4&L`RvprmP$B=l{J3a5RjL zvQrYWF2Te?*--&mH^EUR$v`ahT(WMEpLJz#-B{?kWZfV$>*lH}KkJ5b$+{tD-JErE z);&FP*3DTrXWg82bJopScgf->KkMfAx|?IOuHO&5WWJxv=igcDn^>s)tQ!jzTy=8~ zgUlWV`B|48J)M&aA@?wdue#JmCiuPX!&K-^gO(Zv + + + + + + + + + + + + + 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 0000000000000000000000000000000000000000..4b0729484c3c29879df9968f7762c7e45dd49bf7 GIT binary patch literal 571 zcmV-B0>u4^P)vL!F?fKtMoIRau*!rOVCIQ&w6$JUlx;Lv3<+iHnkp zj+Qz=Ks-S~KtM%nq8)Ys00233QchC<{{aF61qTQT3JL@aLVJgZ2_Cur|Nk8iyZ`_H z|44)X5|I;<6qEmnStiLCNX`F89zA!WtS~b)?W@^R00037Nkl*BidiFQ%i(P6b_W`TTml1m+M9_Yn;+*ztp60`O4u5e>`w;y~}D;;6l& zwQCbY4ze6I26$F3vvT5~5D5_@_HqG;#5ms*=XEkC0JO;*o>=co9_xMP@%(LGr}JCy zztX$?r`|2qnsXIPu%a`kF{+Ku%{n%LG2O5;Lk3c7xod-l5FXycl;wSDo7`Rp1tF5v z&+%=tmo}*RlpPR!yZ|b@fB&Jat?koi&!0Yf zW@hJR2^4a0c=6)J)2C0bUcGkp+O?L>&L>ZwK6&!g*4eqPuJOXfi;tgxxEC&5bar;O zws*F2bg_1Duyt_uJF&bJ=oGz@AirRS|BOs5tZW=yyu5sDCR;!MH~;uiV5j8QuZk)v z|GynO7XS6DR`%KN-_HuW28T!Fyt0l3>b&jg;uuoF`1UGeI*Xx1%frgaZ;IY5dMfhk ze|-$2PVRfXnOzw>m0oJ;yghJ0`A3uEcgOD=>jZ;d8%$YR8QRm(w^di1b5$G1h0Ev4 z1Vd_f`5wN${^ixyh@F0cwz@Me9W@GU+;VJ zg&q5TT+06OZ|>~{+V>~^ol_g*{`B+${(|q!AO7#IX88Bz?%UAAYswyPll+{pyYTr3 zgG>ESP6aLAR*3?%D%eb_*p0G|+7AiZkUs+FrZFJHZR#j4FK zR&PFV=mby@$awYo&37R90RrcA^tFMa>?J{d!3>-Y$L{?3_sxV|4JcIT>EaloF)=xT zp}B}dBcXvw@j741g;y#82M%PIz2-5pFg?4Wp;7ZWkCca2Lc+{uJ&UCcjiqO2+B%2{ z#YG)B(75iy8BQy%um=Jz#p-fXnYAq%-l=FlF}&-Uc!cq?kW@sM^3_D&`4PcJ*G$gG c^)X5?6gn!k9yeh61+<*O)78&qol`;+0A~YQ+yDRo literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..340d4494ae41b55d032ca18c728a814d4b7d3c01 GIT binary patch literal 250 zcmeAS@N?(olHy`uVBq!ia0vp^>LAR*3?%D%eb|7MR)9~4E0BKt`0?$#4{zOhaQn^! zAPGeG9z4GP;4x4N$bS0l`STYbQ1gTe~DWM4fD-35v literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..1d6c0e37306c3eb5891bd28686eaf14ba97a8a93 GIT binary patch literal 1024 zcmV+b1poVqP)Q3dJ3PRPF*WdL3dDIT zKp2ayS+l0(i`TC^$H&L-OHNMyr29y5t>Fm?2}j?&dDCOV#*L-4u3fXkQ}ycAGdV+X z0rLGe0SpiY-78nF2pq&-tgriSC36pl@87?#Hfz=_C%nO<0R-&=#DIa3a-0=8R;^l9 zIw~e+2Y+9p?)#M#8y|mk^XAQ!;SG~woGC6qoDR`UIGnHtZ{5Ay%a{y{RPuwzkB4#) zdEgOVzn>BpAjWiHs{|=Z;fScH6S~DJDk|zs0Aoc&zI9xt!~o)acBp(hLhSa^iHV8f zRs+I4MFcZe22;W(#5hYl18K@fi9^X}QQTqH*Qv`&MRdp)^3DLAd zDFf2BZK?qRuYVc{0U;m+gn;M-gn$qb0zyCt2mv7=1cZPP5CTF#2nYcoAOwVf5D)@F zKnMr{As_^V{!v9h2nYcoAOwVfqz)higl-|4+*9S(pd&4KwL8lEo~nnN%pX2{xL`FP z+|w2Fo6H{Wy6@h-caGKKAxDoNpC>R@B}I4L9q;^_hUh(|#-u3kM_QXAGa&&#+;RDmF-q`smE z1BVRjxnRc%IA1}Rf`HMR@dW9H65 zE=O2cSiV3_D{GUrpb%MZEJ|{_5T)2%3FIbjEJ~g3|-7ba74eEPiLmMJoLpwYKI$)Tm zGTr2M@$JaS?c$KdV%U3v-CjIEl1fTm-p~lG&+XIhn zOY8-lI2OuJ)lE4&P1XCweqO=McXQsGJioJcr+3$#t8+h_u0Orwx}W)(m$g6NoUWY1 z`grbMS=avsW%8kS&5zCL*z(@!^*p1($yr-Clh@1-`5be0ug7zqX={5OCM?q6J3D)~ z(WAGsU$_1H9l(B=U$$?SVTAUzIluExsN_rE-sgAuO9nTW?Sz>>3YUks+{}>+TOH)g zacfG#+KA6N`#AP~Pi!rXSNf;sIjLFd*RNUg)2=38BFp6yj&>bdUnDn2FJfjds_%WENcZeNjAT>G6$HAN6Nns1C6U zeAUakD?+FF^InBV^8e!vB}0o#E(D%u6I*(3Q%>Afne1bJ-?{@cB)`X2=1q3t&(fH* zY_al5Yjd|b#|_<9icjC^*=*hUIEt~_Au78+@phAv#;xs9KP_L~tXQxr^VEBV8Jco( ocTVb@*1vAund5Bw>E>@nt0~hZMJBPY0>&zXr>mdKI;Vst09%OQW&i*H literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..98ece61c9a4cab9f0bc41df42c9b5ce211c59d7a GIT binary patch literal 432 zcmeAS@N?(olHy`uVBq!ia0vp^dLYcf3?viMZ?gia(g2?jS0D`p|NsAQXlQV7a4Xs^{R>p{<;xdaTiZW>|C-sk zSpxYE4uAgqdGYdPSMP*hzkl00J2$noKYH}|_wV1%&d%2M&Q^{t)(#G~4$jVZZ{>tv=MZgzdt^UaiZ`l;~nZNf~t^FD8gxp}((Q>uB-y!rYJ X@j3A)PRA9Bf&$*t)z4*}Q$iB}p^(EB literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..5d2ca4a4495fda6d02f0b97a69701ecaacc01e66 GIT binary patch literal 219 zcmeAS@N?(olHy`uVBq!ia0vp^>LAR)1|)kH2buz@MV>B>Ar*{oZ!oeQb`WWK$nfQw zZ7ko#eUqZ1s+vRIy#BYLsmZlx#>2)0JMN@qjZc2?E}K%c(|+FdXq}6B+0)tOY8~zS z{&C2Po&Hl*|7us==4-Ru+w7`d=AV%CKd$)9nTv&eUSIYthjjun72kIBE)V74v#E~J zV(l+H_P4XJQf*G*G0AiYQE%33e9q$KT9@+FN%x*FneO}4cgB(jzV_V@V%Ozgj`ae% Omci52&t;ucLK6ULT3YA; literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..2424f968602dd099577d3723632d61fd61a9a0a3 GIT binary patch literal 947 zcmeAS@N?(olHy`uVBq!ia0vp^Q6S903?%u>HW~n_{{cQBu0R^Z{Qtk9p&>Lh)By+@ z8jRCG0Lb<9^aKh38NR;0Zf`=KNlAl5H}#e#@qYcrAuGGe*OLX_rHJt zfJOmzdhNdH@ELUegJhlIXV6P``6sr z+1A`5!(_20kr%)1J?1YI z37UN2n$NqNt9wtFDttL7sr&9b!~VAg2ZYuOtvCGN*0ebDOp{=jc#^#i-{ZYIOxguG z6gRf?8van#Go0QU)X|#RvwLIXtjml}6RVmW>hB)?;i;djF`+`wTQWVkO=ZiQjNMhY z!?yFbN-<1|YVn_~vau)E-*zb{j{--)mJ`LE!tEK`oPrq0_wr>l92|Dz{@ zJQ1D>uFrN~zEQNHZdPtPqaeeR$h_pF2F-2tN!9ZMg5!F;;-9E6noJ0qso2Jm9wxOv zMt1s4o{5!`pWR(NW=gl+Nb%yxV3_2@BXsT0HI8G;X0D%htri#o?N&b+*BrI7OquG7>{Is{LB`_pkl^>tI`nAPRg|6lETEod(DMs3mkt2JBi-mOl3mit)Y zt(o!a@^WdZhP%I>Eneb3Y2Su3>Grq3m`OUY1Z}A)ulkf&wOT#n=A-2Q8S(Pv-)ps` z&9!`{%AMQz{`FoJU74DFuD=Su2ZWj}{d+RKT5zV|L7~vA)w$=ssmtrM96fjY?d(?f z=C{B875@q~m0Yp-e72~B^%|=ZkvY!-1^O&f%^0)}B=E~52tKm-BRyrO-u0_N5w*ai O$KdJe=d#Wzp$P!)o}8Hg literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..95482f4f559440e613ace861ca805fe8e6d3d836 GIT binary patch literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^J|N7&3?x5zE|dgPmH|E?u0Zzv5V<+EX1re9Pj+?e?{{P>oxb2dw-WhGB z$~?!)FJ2~IfAjYH#HOw3-x2xc+8lP7^<@!fUg~dST@v(rN91}{#XWvL>`%<5Wl1{9 z&v2GIow|cRZNe?9YeHv^=$sN*alr4)Vy^_zx+K9^rq><9%xxYFhDk^MiQeuMRCeo; z0J7yeKR);9xgl(DaiUAfK0(=OF6#Oh4gJd0L}U$8mxms_ST63pmoemYdDVu`=VO4* OX7F_Nb6Mw<&;$VU3X{(O literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..a6a1b1876d31e3f6fed773c1b3650ee1914a6507 GIT binary patch literal 3413 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..69b83400941353adeb2286affbbc7db588bda969 GIT binary patch literal 1309 zcmZWpdr(wm6u+P%V#GtL6*CqMF)bl_Ib`Hx8J0meZ~+Ae0%skj31kc;6GRjgFbik~ zV5`P-pvWKuL4s4oqNA{$;h(@YU=`mDsS(6KCjD?`GHhXB7)B5(3{%Zw)GS!s=YUV4 zJ|8R!aSF#ZBuS#E7UMHl6L?F`puX*Yg**;Q&0r)Cf~u5CN~hB)6bgbMP*ly=;ygG; zsBxI2hM+V!$@}nj6r(UwJ&ofW$C0ECa?n+7kT!2Hn#@+mlGEjKyWJj-#|s8rv&E)2 zEE1F!#h)Ob zcP!28jsM~Uj&adqvD%@v8I1CE#J34j;}pap2skv&IGt`EGJrD-OR49)%P>|vUN49Y zoIz(GU|28_qy~JLizW+z&T;~E@7NB%on^lpeS1)xV_EOi)!iGmU68vO-z7kZWjvEt z1TOxZ<7RTBQW)N0tUV{9%QgH(vCDJU+gY}Im}Mshra5W>ViqT##2Gm`06hAJO@lQ1 zU?Jx@858hwr$*k9>o=sprZNBPA(HS>%eZ(X?V_LT^|nje)}PGTOjz^2>~^hL@amzg2d>0Ts{Ik- zhVJ2^vM<*rc1)xTH6v`{m1&K ztUDc}+Y9CKIsQqB{eMYfpE@WFP23RId!?>GSSqY*5)VBq@JN!M$;!+CL+=(Xbnfc> z;rna7v1A z+4{%=;fE7B0qTm!(!5*smB%;IE%*Ocie3=sTsZ&RNJvHB+32sfIP;5#-|SAYXB7wM zBGR6v9ku-e#lUBGm9Asm@lmf-_v|t?AvN3}!u5wB%vJF|<>i4NCAORVUoJISBI-I= GaQPo&EpEvG literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..7c781080cc197052fada85b5a798521aa76ac4a2 GIT binary patch literal 4463 zcma)A2{>C>`=_?rwU+2uMyb)(PBleI?MsW677=@hwxpI6C6+<$OM}{K8(R8lLkUT2 zu{T14+GAI>R3#Ke?H`@aeBXcOndkrA=iGbGbMAZIbAG>b&hLGn8++5#fRpVfHaa>w zP9sBI^P@NB_&&*e^qh}NyGuuR>avlp*6m01)N~fMh-*B07AB36x3xO^bUWV*2q+BH zgfD!VXAVnq9Vh8Kw;q1Toz{pNfqQHan-n};S=d^6l%meMaOjXInK~q2yA=jH$1N!y zrE4TmB;?K@y+;O0UqBQCa)xQ{h!yq+(oJ2BYQG94>BxB+mcNqeSz>t1s5xuiBjDrE z1VMHYk47aE9wg%7;<2jOwLtLHMg*G zxKE3uU3FxTSXJPTQu}~ve9huVSUwc?eeMP3ayK^a^qE3Ce#uU|eY3oN$SgF#eZI6v zXZf=UjbPwD3<o#g4HFww{bpKU5;PL*J4h{|#rRJsia~F%F22!4xL+;-wEm6g`(+Mb?iXTy@eF;;oK#4fBP_U=U zwkBG4Ua7YyfC<&rkFFyXRnt^dqA%mIc745r8`gZw^(3EH&U z5=oUJ+(4#{1>*h_dKt$PLS-4m8!~r2f>%(`QwY7!dN(}zs`3`6Q%!AFH-;UiigCEj zn4zJeF}P=LAAl?LbdqjE6#&v2j~jGt!~=JJ78mCRjp-JuP>YIhy;m7{_RIpw;YiO* zX*y|HpIN~dA8-=2zeVK2Y#CDJX4t6Wj^s?mrJyg(Eb3!kdA;T7mc`ImbBL3qQ^W>BiTIaiWPd-%@H#RmN zvLor?ucU7M=#d!W2!|7^#e+)=%XB-785yjYI_ScDn`*&(Q1xr*R3))ezOf$5+42N) zX6Dk^&0*g5_`-)!M(NCEuBh_I7l3Yl{&c*|s<@(Q?waR{FCz;J3lkkemrAeQxifgj z&vz#)fAMkQJ?7uX=@3avov9LR4W}j%ZH)ruzf@mu<$oDm-}mk#k#-k3)REZL)nl#f zFz=>TaQ9glKiQE*$GU|NR}ToGAPig&Q6H=LSBdZ(W+f#h%W*|z#9)cC8_aTWV4N~J zY47|p!Dg_-jPIBW!Ism-<@}z)3vl_MYe^uWpZ^zIPjbIm-R#1foSf83A~hwYC91f% zy$%^DFhaz>(hVteWKyOy^Q0?8$_`7{sfR@Lqy=klb|(@D-sYy=7fS*H+%xJAcJgFP zOFw#`&E16-mc-3&m4~09I-b0qxwhFkS+iCyR@bgPqO9GU3{e=hd{I#M zy(uLGM{QhfSRlrQ|A|W>N`>si9btXrq>Dd8o89clt~+J)x2meIVu2!K<)RR$G{aTi zKj4h(<=1H`$&kuQV!LjSG0`KWFzA; zY|p`p!Gq@WG1d3_ZXcs)|@Nf6%ss0<@tu|cJMxJLZW zdV-VeS=2=Tg9t5Laz}c2PRvQAbmoWzy&H18E?bme%*5VCRji|a1oBT+Qgsc%cGkg>&%B#i%CyO zxg@Y+)t0!T)Ay$)|MyKKAoZu8s`; z!RKEG{b$QRouB&y;_pC@@W~wEmOd)qE5~2|UnW37|G^qiM?1*N%abE@a8e?4IuT8J?AKVuJ{_+Gw9;c@7BT^3m5P z#;L=YtxP&t%Tn{Q>$bb_Qw{Fk_ZHI}($Y*mQ>o||`>|z@ZaqE8{)f>1I7ZP-Bb!km zH4?qhjZk*gez65~YKn?ae`UA2{Cclc-j&V$Es)H8clX_#O#@V;M7S{Vn4$0Eb1BUW zyU1{{`9i*5IgTH%kd{v&u%S_Fp_GI&VBo!gR=nprHWw#ejX8F-u> z{6R`Gqs{@KOB=)OPi5_F zMhC`iVLB_8JK`qFA-VmmKeC#?v8FYJVsV!rzd9n4cE%F<5>TQV$zU)yp4|Mk^@*Ba z&(fR5)fdC|LjFtj0qeySv{wNECGdBTA9F1o--#qn>^&;SiOacw)?I)EFF-KWXk5aq zi`64JS;!E>N$%!O7^Sta%d3V^DXaL#N4>5CVqJaHO*%d-Oy{r!Ps_ljFL2Sk_g zOC>c9L<^6y z*%3M{qL?k!1-nPoqb$d_mtCIl(7?!Ov63Ai_sk9q-YCh19l+&rifpx3W?lPe{^$}X zJ}(Ju5%K>dYYGv$lt~Jfe{x$sG_+{FppB8x*>e;Sju`9}w_% z_s-y8{_Wub^6RovyQWuzJ75_r`TGW(f6GVzSh<=>L8x_Wj`~kh9GI7Xgp* zZkcj14q>-g6xF?834$6xP50h2hlH!xASSY+p-PV z+TU_O95Uz)Pgvc4*t*ZH`A}j>tMsr60l4DRc1D5rho}LRK_ySdN*c&dslT z)Ep?;y=m;!9;(Z;;IafXbLq$^z7>F?72ER|Y^NE4+Roix(K-PPFD6qS!~|XFzwcZvptK#_Kw57RfnM#Am1_R!e#DTRqtae02 zys{nb7gtpLZjpm|X=;~~6?47(liXIHI*kMJ2Ww47Zc}*;3ZoRcyp`wrjf%H|?&OLE zI>41?&Lo%Er8(SY?W$+YcnWxqqXRwFTaV<$q6<&RK60oM$_T{?XS)|!)!u3#xHi2W zT<&(RBV=2I&?Xm)Ud})M8`my|&ZgLNqOv~MKNWyg{q}sa3+^=nDiL6zs`qdnoEYt; zy70`4R45VL>;08-cIC- zyz*hTI`5({YP6Kj%C_y}LQo&?xI)`$3lBx&PY9|ik2LT2v|)Otj?U>r-{eX%_I*V+ z737|w&om0MN@RYa#CbEVmUH@kJkn-Ha{4cwo0v@7)VyWA(!a^aji;;r-1Nq^%s z0-eu1koElMab`dbl{Y-V*+kLmyfF9J^{{PR+ebZ7MP+O!7-i*0(KPt}KXlJJ)Y<@n_Ut_}#Q|H8#xUO&Pv5 za;T`ma3hNHmMm=@U4L4$Ey?csw9M*C{J22i?Ye@)*ug}UTD)u-a^V}Fk+1R3o1lK> zrWf<+ZWA(|XnhjpvN-!5K<~jjTXqqRho*TI?#)LtP{B`w5yS?8YRT0pKtLNgr$0rl z&{(1ul5ZBM@Qy=yY={bRd)gH0Fe`(Ae3J1K3GUx6a*J{8%4U#_H8Yu=%Ge$Qs`3^f o!-rQ4_kg+wA;iVSny(Bh2Ioy~qI;T-ex%SD>6z-5X*-7h8z0w#{{R30 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..41dfb8372466405174ec4e511482779bc2075215 GIT binary patch literal 1066 zcmeAS@N?(olHy`uVBq!ia0vp^(?FPm8Ax*9Z@j?3z-Sua6XFWw0>S&|H0t#*Tlc`a?mUE;bLZZpdk>!6fB59# zqoKpT2zg z^7ZT2Z(qNC2Ri!>(8gOpGl32RIqA;5$3QcIragc0`rZ4FpTB(l@#E+3-+%u8{rm6V zKcHi7-3EH|(St|Np1pYe{=+ArAwPfq`VCY8R`THCQ=mqm`1c<_KYjl4^VhEz9uk7U zP>U-G@(X78FJKhWvhu{eH{bsJXJQjlb4YAjwC~!p4?q5hSQITdaP`5%ox`UU0wpAo3kbK&c6pmRX(0fGzNAh-QHr6}piz`*3@>Eakt z!T9!$dD(3ThL(qt0tUrJd{c{`URs;{{_w6c3x>Ov@eWIwnp2JiGHG70WP1Jm*?tDQ zH+i;4*1P-0 zI|PgRd1cKjez|1vH3$W0hTn_XU#90N^!99e@FdH{Ctl{5X-|K=qb%{$Cd+v}kxZ+e zp8A?)tm!&AR-n~XS2e`M(pb*l&d|walmDdK)j9#L?{bZo$}Di0lshR|yt#AGd1iUbzgSk_^ZE0uqk6oVy}nN1dqO;FlHA6L0%!l8}GLt zOb9r@*1_SJHZ3wubZTVU%v2x)Ok7+JXCef#v#ymJdmo$+(}+-WG+;L)hYJVifu|4o zlsud{4yy1hRSt^{GSFICcgAW}pTerwD@46Hlv>YwakEWLy(-|aRX@U$VO`XwbGIgj zxILWOuj#&~b;&f9(p5rS-mA){1c`Mpc-r!s%onfj- + + + + + + + + + + + + + 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 0000000000000000000000000000000000000000..9f1fb57483d4b224f146ddb9b43aeccbea4430b9 GIT binary patch literal 1338 zcmV-A1;zS_P)FVqB_4WAp`1twx`1tws_4bsMnu&>yy}!lo?(aZAK%}Rxl$4!4NlBoit2;$SrKqs! z>g+>9Lpnl2sH(E}`1m|TL^?)BH$_D^LqkJDLqI@4K|w*Msj>9-_N1q;nVzM8f{8#y zN}i&rKtM)kX>O&cu|GpYbar~BsIql+c|}D@q#2#hi#vX z4wrVavmqr2q~A5lCpKY07zh(rwmYvJuCDK$7y|)F zvE0OOBPk&f7$CXwth~#$4xs#96aNDR)Z(8X}seSzq{uMGL|lVgy9ZZpOP?$2;k?13+2{ zNGviC$f$Bdtn_69MF50R${=v%h6sV6fFwcyDH{`+5O&=rj3fvE)WIqd2^s5W3jlE_3>?ZF>N-(RrE z$~~;^`-?00usWH(*U%H9XZl_<{A&ywSw>DGrK&yr1DQpy8B_;?fL}>ey$95@>h*wn zX1yL(r!Xc+2-WQY^{je5pq^>3nfH3$>%X_x%zHiW^}N^fUjOfU?J0Xb@AbUb^Ip$; z?OFHQ6E%kWxjjJvA_SnC-Ecn`fB@TM244YANYa9E%^nk(*oFcIr-T6+8L*sk-A)?} z0bn1b@Z$8nUNFi7yZ?cB)alW&r|-4LkE$ElHUwb%i#Fnk?a|_NyXY#i2hL3+!m#Y2x`d8uFY?|{!rC`0OQq@h2M9#jz`s}%)|KVk8-kf wn4Jy2dPl*ldde&S85moUGd#c|#MQxn0(bQiJD{w1jQ{`u07*qoM6N<$f)lK5sQ>@~ literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..59161bae9e423a6cc715b2db560d3a3524c19005 GIT binary patch literal 1283 zcmV+e1^oJnP)V}{0nIYL4}Mn*b9MnFJAeSm_+#mC&;-sR@z=H}D^Ktnn|LOef0KR-e`LPa`3L_b18K0!e}L`OfIf;|8L0Ah4fPE!E?0RjUA1O){K z2M7rY3k(bi4G$0y5j~#U_5c6>oemYF{r~-=7swK(MHZzU;1nbF_7^G`Eg3EvFZblM zv}pZ4y}dJ0*d{$#!2KI6LR5Ud=lA!%O;=rCVPRoLOHEEs6Z}X+0009jNkl48uUQ5VEs&I0ZW;Z2J|U25u&VlsT)U6e0sUvR~0?IZA}gCraz0D9S$; z+@iIbh-mam8Mj=KsKV$G?4Y?*7lCI#=5~b!)y4Pp6+gKYG9-7#nE&IpxdX6z9ys$K3!(WBMI%Vb2SdC@&Sjhkk?11P3`dhCikeMR?xHh2!$jXgXK=>9Fb1T;>M zb#_b#$JKx?KcfAZf(@Kg!_@@ZIJ}C-jgiLG1e(lah9=OAd?q!4X5}-X2{bF82~BQD zh`fG_UYw&@`Ald6ZNlU=?K((aQ|M56O`t>NHGvM5*91CLUQ_5`c}?u~b9;7Sg8&c& zQFN~YV$cBY?(XjH(0>y|_kb93gWeYLviYOhYk~7x;Jg+%uLaI)f%976ycYlNwf0(j zt-aP>>;IZ?UK7r1!g)i+hMcrPmyYIBTWVc%7D6i(_0yjn^3& z<2WH^)p(tg36aBRzM#TuOJ0Ug&b7so3a`sWnQJ*RSE{w=y{=U&GBR@-uQ!^l_H$la zTFpjXrg0AXoo=r`7>>q|dOaCU2mM~R!$JRShVXV9v-x7VTCX>E-+H}TF6OgF*UK}+ z`FP^!)GNj9ZhtsFaEJYFTddSO4jxY~CLg2Q8;HabsfR8Riv+xGBTqipLzT%Nj>eM@ tT|650o8(XhoY!!pAa2UU53mAsbOKZ051--!ql5qe002ovPDHLkV1kl-U-Dg!i2q$J2MnBl+ktQ(*Is~)g>_wPRh*ye2e^@4$cvDwqbF{FZV%@lT_ zW(OYTm5aWA`#+yeKCJ4i>&oo3Ykmyu`a=7BKbQs1Sz@5(`{;ycpIjv0`6rU8uAQs$ zZuwm*zk9*({>K|vL{Gh(kgED@>GWML`~Ms}-D6a|NoI42^o^?r*V`zIN49u9o20b6 zbpPid#apR{S&8xSy%p0{BdRrbnw$Skc*u5A&--GTyV*Pq?(H7sk_Yxrx_n!rz-VRW zN!whWQ*3{QZ=645KKbK?3%4bvTwM1#dd8+W>5uzO3{#_Ie(2wrVI(`{Z_XMc&2P;J zPXG9({D0)cd7>{P3+L5tG2aY?$75R3f6JURmwq_&bMIlH2Qv>(njC(Avv#HBv9Gqp xJ-dw)&l{&7NjZyVjttTs37;S23IuUJ0pFnShd*?0&P_nxkPF6*2UngFUk9UcGx literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..e246559b755f0338eb5cb45362df38f4c479b454 GIT binary patch literal 587 zcmeAS@N?(olHy`uVBq!ia0vp^J|N7&3?x5zE|dgP-T^)#u0R?H?%sWP`_98#cOTpW zl6M~5z5Dp~od@^sJ-Q7Pzx(jvqbJXvy?Fit2wuK;`4UJyc=QA)d+)*HXU|_eefIp> zv*&joJbssYiydf|NJ)@iFvEZ6SvNlaS3O|&?%#h1u+7=_>jeV?<7`hC$B+ufC0ERo zm<@SY16?)FKd`?0e_3D2V;!lxZzlE2irqi+>3HNHi`8G#q9<>@yC!`7iQCesOp*6#I~3_weT1;|k~hNW7Toao(j$ z?UM1td7WQ;mZU4$3crL2G0tmEe;8RIHt+Ad`m`nKZdE{Hqj_?E-6nJXQ=5~Y%=W36 zcKKam=Z7^*&Q1=G{;pH~Ny;$q=H_|lW^z_Xe_nIW=LO^DE8pi`J XU*6Q-saegZ3Q7~6u6{1-oD!M literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..e766ccb29382a1638433afd71b909384830ccba9 GIT binary patch literal 4308 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 Jw1Rjv_aAZ(0=WPH literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..454df9b85a457c224ad74befefac52fce3fd88e8 GIT binary patch literal 1470 zcmZ8h2~bm46b(96!J<+piqVRI5UfjU711&k7a|}KQIQ}xAX;o?#041(NQ$T^sHn7P z(TH>u5kUzq1gt?&qbOpq<3tF5U-A>g7+fGx$p3vmIMbQFdAYgwzH{z7_r9555G4(9 zbrHD;1OnHv(BL)Te;5B7H5^#oUuseyaI!>2L`y&j77W8EO29DD1>;@7B0~=FacIZ~ z76N%3K`0EvAc%%}qyxZPOb-o({}K5*5Uz(Yz6eBgcH#`f=yW<1MIngfxd>kza$Er+ zju6ISjO;)Vj^i+lfl(52NWyT6AZdzbXai#~7!3^Az+ni|fDzQ^IuJoo6hU-fw6Gbr~33^0P27>q_K5aDeU?3I2!5V5D zz)0Hg`7TE(5SvWhfB-b>VVtIUsW9K5W1a|3P&CMcA{1=^`5~@D3<2(-83s%Y(816! zf(90B&@~W7QVfREe48lG;<;TIm_oxq z0JVBOx^Le;eH0r7-uqJe8tGaA_jP1J9b~p~A1#Rb#9E(GQ&wkJXu8b(1B2E#NXwOj zF`h0XJXY0UEO-w_CG&Oi+x@JE4;+hqerTq%m%Q0(XIV#*wYTND_w#4^IFArJ$MxQf z_e`g3+$X~^1wtsVb$}#(v*Q!*7 zB1ZqXsVFfTnxyQLe(F9%m20-U?aeiR+*y=%^4H>vb2GnKQumeUaiIUo*v_&H)q?%O zD=Wu}uheCKpVq7w{$5eG`h57QtfE{Jjg)lT&LttZqRQj=TT%vbFAY{)=fl3~`zE=bmRgcKI#O zTv5KNFpx=cep|tQGrRK9@Sg1~Rdn~nCSQ2I#i=8Ar1Y$9<6zi=Wm@=$?Akedf{x_d z0@;a+$Hhh*^v6$RdEfW83KpuCyPu59yd}Rn$$4vWh(Mm9aVn{oxHOcWDXN{{>UrNg zTooB1A6Q@eO!ex(^tnepv~O0aCkAaxsNymbtL~4reh@!Wto2d(mKiv4fuc4wfQfGX zLz7?$7jp4h>5udB-i40*X=>_>K;I?;q=eat-dPMPI}*M*vOF_wq2 zo_S4EWFZ=vP%hC;&DOm(`Nh8#j(NC2o^A{-T5w4=s2S$dlz7drMx1=3K4tYAYc*CH z(0|!WA=`YqLb>Ip>-Y=1wTp~_UKt?)$I9esE$hnj{m*^STy2}IUHYZu=a!aeIDoo( zDN?LDdhM6#Nja_0Cj6N!k{y3~F2I0gIoskyF|qSMlt>rdG3G2BNM{chwl|DCJxkD8 zmR6d1ktywXx8k3PS|pf6-!}<3PChQ-dY}D9 V1JSslSImEg!z9w+nq?dJ{|hGPt;hfX literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..b9223ea3a7013cb10335f2487131fbf2ce1cf744 GIT binary patch literal 5839 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 literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..7889152aefc5482610d72208b723241ef3c61294 GIT binary patch literal 1410 zcmYL}c~nzJ6o-Qpv?8b=RgqI=5qb)!6m7v;1r3UV5iG?JtfHb8X{!Yk*%!siCJ3S& z3}RWD@JNhF9sxqwLS!*ikc1R4Jjf=51PDn8lnQj>smI^BZ|2@R-@P+${+JAZ%n{So zR;y7cl<83)^hq#3)PJiC!Dup)+KWON#QFOLdV>&%LTM%v>#D13i6pp+1QV;_s%kng z;s;AfNrCjLBNCqx^vRm4YM4l>(ZdiR0k1CsB9dtki4GV71TYvl`aZyiXrLQtQC3zD zK{N=WzAx0T0wYlv&*@A$qmfbHT-VUbWU(6>+ZviUtR@bV)kY@65Lw?1ltAPfS`Dj( z-O25K&F>!^5+cZ`SR|22q;I9bWMfk47&0mu5{^Ln1L(Jg$S{dgOM@HgS?m`bTu?PK zDjt_lOiioQ8qKUuH#avoKR>V5X!-pEFWR}_U%;_pMkAZk)h`$nOJoY=a077mXpl~clD(YRazy3Xq6n2l|SNTSwi!8X$> zm2z^5)6NwlqO#%Qb>Ql+M4!Zbk6K>$74~*jC!*B7TV7#o?%;VYt*lA#RyDuDJ@RQw z|EPRsVad?M#``+;jb>?S`G4646p0r;h9Db|-8=j563_=^X(>y&_%X4R6>VdMLKz-E ziuMY;X)q~Fj}-cBFzSuD$VfkT$@$DeYI>>JyVmoq>N_53e!g#u>z#7qyUmWc5D-@l znGh5oZJHNj5SyIPvr~Gm1kO+xpKmSrV_UZPCp7M}98SQd&b%C>&3^l@|!wG+5?3v#{rlltWXJw++MdSF1zH{WBWj`(RfXl?B%dqS^4%5gh%*B|*$>_Pw zMgdk5T9!XL8*7FI_v=nf20YT2#NFPA;e(tP0Web`aSm7X#Zzj2czAQo+Vk(xCmBOmf#Z9IVo@{F zhmDh!>rts|KB24nC&m#MCXZlkDC{L<+mSI zV-t^k>#~F9Skf!8orLe~h`HPqWhaPU?~lLGLZ&|7y(KeB)Xl(Ju5=R%*VML8++V|~ zr#fWj?Af+CpBgjcOn2)DIu*-om}0i(fBq2@0}nO_&eF&F;pph1TC#C>3Nry(LXHpFS~lWNS&a P{wY1`jX^&<7@GDUx|%!% literal 0 HcmV?d00001 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 0000000000000000000000000000000000000000..c461f63eff566e13feb6f0a76484249d7475cd48 GIT binary patch literal 1421 zcmY+Dc~DbV6o-RE1kq^}6wN3CMjeGnTcO&b2(oAdL4qB};)M-Rc{wHkpSOa&oo2vunil?GJ- z2STQn&0#o>4`?)MHLTLWQ%buSXf&wWu1CO5lB62esWkuvtAG+hUVMN|X+Q?RD2f_H z5S7+(3PSB1wf#7xMIpzo(PA1Hvma5RgM&y<4~3#Agy2(yX%QSjaSS7HoWyk`PLMi+ zL@@$JaWFOnI;sE@3}$CKuyz`Z;22KeI)WhdBuVM@lpf4MQ7BG;?kdQkL3J1oXnKOQ zFH&zeQcr=7KnC)_$8-cm4UwcCGzA?6xg-7|i z`z466sQ_fe34Z0u(RWs0j=IgNEVI0iK8PG8tL5Eiww)3h&G}nSWcZFer(x(X5uW5Z zU3nx`zRfQ}T)j|&9GkX?bY=lT$I`lIvAPegFCk7c7OL zkJsPx>16-TN%lXeOk+PYosgbMB9blZW13r6mR;|pH*OW@kA%$06?&Jpx~V>A_obT# z0%_6Lvcsg7ynCgICo{u+=%20FFkB-WWnC}hk{RX`|Mpf5ex*cS6q(^7)INv~gjRJ}cC(1}%c5P$x4-Kiwiy1AR7x7eI&X7X zkL%r$j|PMputoOAc>B>9dRjs#q9_VE9R{ID zF1C3o!&e;Fss8$aD8z48F@ErlhllH9hEURAViX;|##%Hj0uDOv?RIMv?XFrNbhU*U zRZ9#EmX|i0P;lEjMJw`(RZMSd^SsCINcpU>`}M{^hEv*ja?H5x)nIyi=X^KY#ep&7 z$GLS@!Few;KeenQBGe-*1DmKEeLa!5wqtRGq3!Q5+C)-&MxDl^5pGGkeShKqvhU0Nd|n{mu4@szgx}}FZwnNY?3V=l1JeOF zob74~-`*sr&&XmX$%1z#CN(gNY70I2U2|FV^nhzC53t>q!pv2|z?e-7;!?X8b4qK2 zy*5dgWwxvzZcC~!XjX2>;>oLmpI@n&o3nc1)-`)XWByVebt$OVx{c@0ss62Ch6}f3 zqTeUf_-kJB@~r7Iw&ceU$20QblphV5`m5TG*KZVUET=g>L!UgFd{}Af>Pw&5dYSLG zVzrE0#U=+H9x}@1k*Az@aPlW(PCS?-p8R`NQIe@Knr@ymn-p~cM}PXJuX5-4UV}lw zw-{f1R3d%!AXkv$iSJGb+GyGHjE|RXH0Q + + + + + + + + + + + + + +