package com.myfatoorahreactnative.googlepay import android.app.Activity import android.app.Application import android.content.ContentProvider import android.content.ContentValues import android.database.Cursor import android.net.Uri import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.result.ActivityResultCaller import com.myfatoorah.sdk.views.embeddedpayment.googlepay.MFGooglePayLauncher import java.lang.ref.WeakReference class MFGPayInitProvider : ContentProvider() { override fun onCreate(): Boolean { val app = context?.applicationContext as? Application ?: return false app.registerActivityLifecycleCallbacks(object : Application.ActivityLifecycleCallbacks { override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) { if (activity is ComponentActivity) { MFGooglePayLauncherHolder.create(activity) } } override fun onActivityDestroyed(activity: Activity) { MFGooglePayLauncherHolder.clearIf(activity) } override fun onActivityStarted(activity: Activity) {} override fun onActivityResumed(activity: Activity) {} override fun onActivityPaused(activity: Activity) {} override fun onActivityStopped(activity: Activity) {} override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {} }) return true } override fun query(u: Uri, p: Array?, s: String?, a: Array?, o: String?): Cursor? = null override fun getType(uri: Uri): String? = null override fun insert(uri: Uri, values: ContentValues?): Uri? = null override fun delete(uri: Uri, s: String?, a: Array?): Int = 0 override fun update(uri: Uri, v: ContentValues?, s: String?, a: Array?): Int = 0 } object MFGooglePayLauncherHolder { private var activityRef: WeakReference? = null var launcher: MFGooglePayLauncher? = null private set fun create(activity: ComponentActivity) { launcher = MFGooglePayLauncher(activity as ActivityResultCaller, activity) activityRef = WeakReference(activity) } fun launcherFor(activity: Activity?): MFGooglePayLauncher? = if (activity != null && activityRef?.get() === activity) launcher else null fun clearIf(activity: Activity) { if (activityRef?.get() === activity) { launcher = null activityRef = null } } }