package com.fireworksdk.bridge 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 com.fireworksdk.bridge.models.weakProperty import com.fireworksdk.bridge.utils.FWLogUtils class FWInitializationProvider: ContentProvider() { var application: Application? = null var resumedActivity by weakProperty() var mainActivity by weakProperty() override fun onCreate(): Boolean { sInstance = this val context = context if (context != null) { // Many Initializer's expect the `applicationContext` to be non-null. This // typically happens when `android:sharedUid` is used. In such cases, we postpone // initialization altogether, and rely on lazy init. // More context: b/196959015 val applicationContext = context.applicationContext as Application? application = applicationContext if (applicationContext != null) { applicationContext.registerActivityLifecycleCallbacks(object : Application.ActivityLifecycleCallbacks { override fun onActivityCreated(activity: Activity, bundle: Bundle?) { } override fun onActivityStarted(activity: Activity) { } override fun onActivityResumed(activity: Activity) { resumedActivity = activity if (mainActivity == null) { // only set once mainActivity = activity } } override fun onActivityPaused(activity: Activity) { if (resumedActivity == activity) { resumedActivity = null } } override fun onActivityStopped(activity: Activity) { } override fun onActivitySaveInstanceState(activity: Activity, bundle: Bundle) { } override fun onActivityDestroyed(activity: Activity) { } }) } else { FWLogUtils.w {"Deferring initialization because `applicationContext` is null."} } } else { throw Exception("Context cannot be null") } return true } override fun query( p0: Uri, p1: Array?, p2: String?, p3: Array?, p4: String? ): Cursor? { throw IllegalStateException("Not allowed.") } override fun getType(p0: Uri): String? { throw IllegalStateException("Not allowed.") } override fun insert(p0: Uri, p1: ContentValues?): Uri? { throw IllegalStateException("Not allowed.") } override fun delete(p0: Uri, p1: String?, p2: Array?): Int { throw IllegalStateException("Not allowed.") } override fun update(p0: Uri, p1: ContentValues?, p2: String?, p3: Array?): Int { throw IllegalStateException("Not allowed.") } companion object { private lateinit var sInstance: FWInitializationProvider val INSTANCE: FWInitializationProvider get() = sInstance } }