diff --git a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java index f158dac251..0b71b50bd9 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java +++ b/app/src/main/java/org/thoughtcrime/securesms/ApplicationContext.java @@ -238,11 +238,11 @@ public class ApplicationContext extends MultiDexApplication implements AppForegr AppDependencies.getMegaphoneRepository().onAppForegrounded(); AppDependencies.getDeadlockDetector().start(); InAppPaymentKeepAliveJob.enqueueAndTrackTimeIfNecessary(); - AppDependencies.getJobManager().add(new InAppPaymentAuthCheckJob()); FcmFetchManager.onForeground(this); startAnrDetector(); SignalExecutors.BOUNDED.execute(() -> { + InAppPaymentAuthCheckJob.enqueueIfNeeded(); RemoteConfig.refreshIfNecessary(); RetrieveProfileJob.enqueueRoutineFetchIfNecessary(); executePendingContactSync(); diff --git a/app/src/main/java/org/thoughtcrime/securesms/database/InAppPaymentTable.kt b/app/src/main/java/org/thoughtcrime/securesms/database/InAppPaymentTable.kt index 77e0312144..9f042ba711 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/database/InAppPaymentTable.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/database/InAppPaymentTable.kt @@ -162,6 +162,13 @@ class InAppPaymentTable(context: Context, databaseHelper: SignalDatabase) : Data AppDependencies.databaseObserver.notifyInAppPaymentsObservers(inAppPayment) } + fun hasWaitingForAuth(): Boolean { + return readableDatabase + .exists(TABLE_NAME) + .where("$STATE = ?", State.serialize(State.WAITING_FOR_AUTHORIZATION)) + .run() + } + fun getAllWaitingForAuth(): List { return readableDatabase.select() .from(TABLE_NAME) diff --git a/app/src/main/java/org/thoughtcrime/securesms/jobs/InAppPaymentAuthCheckJob.kt b/app/src/main/java/org/thoughtcrime/securesms/jobs/InAppPaymentAuthCheckJob.kt index 6e81e3330a..47d55fabd3 100644 --- a/app/src/main/java/org/thoughtcrime/securesms/jobs/InAppPaymentAuthCheckJob.kt +++ b/app/src/main/java/org/thoughtcrime/securesms/jobs/InAppPaymentAuthCheckJob.kt @@ -39,7 +39,7 @@ import kotlin.time.Duration.Companion.days */ class InAppPaymentAuthCheckJob private constructor(parameters: Parameters) : BaseJob(parameters), StripeApi.PaymentIntentFetcher, StripeApi.SetupIntentHelper { - constructor() : this( + private constructor() : this( Parameters.Builder() .addConstraint(NetworkConstraint.KEY) .setMaxAttempts(Parameters.UNLIMITED) @@ -51,6 +51,13 @@ class InAppPaymentAuthCheckJob private constructor(parameters: Parameters) : Bas companion object { private val TAG = Log.tag(InAppPaymentAuthCheckJob::class.java) const val KEY = "InAppPaymentAuthCheckJob" + + @JvmStatic + fun enqueueIfNeeded() { + if (SignalDatabase.inAppPayments.hasWaitingForAuth()) { + AppDependencies.jobManager.add(InAppPaymentAuthCheckJob()) + } + } } private val stripeApi = StripeApi(Environment.Donations.STRIPE_CONFIGURATION, this, this, AppDependencies.okHttpClient)