package ani.dantotsu import android.annotation.SuppressLint import android.app.Activity import android.content.Context import android.os.Bundle import androidx.multidex.MultiDex import androidx.multidex.MultiDexApplication import ani.dantotsu.aniyomi.anime.custom.AppModule import ani.dantotsu.aniyomi.anime.custom.PreferenceModule import eu.kanade.tachiyomi.data.notification.Notifications import tachiyomi.core.util.system.logcat import ani.dantotsu.others.DisabledReports import com.google.android.material.color.DynamicColors import com.google.firebase.crashlytics.ktx.crashlytics import com.google.firebase.ktx.Firebase import logcat.AndroidLogcatLogger import logcat.LogPriority import logcat.LogcatLogger import uy.kohesive.injekt.Injekt @SuppressLint("StaticFieldLeak") class App : MultiDexApplication() { override fun attachBaseContext(base: Context?) { super.attachBaseContext(base) MultiDex.install(this) } init { instance = this } val mFTActivityLifecycleCallbacks = FTActivityLifecycleCallbacks() override fun onCreate() { super.onCreate() val sharedPreferences = getSharedPreferences("Dantotsu", Context.MODE_PRIVATE) val useMaterialYou = sharedPreferences.getBoolean("use_material_you", false) if(useMaterialYou) { DynamicColors.applyToActivitiesIfAvailable(this) } registerActivityLifecycleCallbacks(mFTActivityLifecycleCallbacks) Firebase.crashlytics.setCrashlyticsCollectionEnabled(!DisabledReports) initializeNetwork(baseContext) Injekt.importModule(AppModule(this)) Injekt.importModule(PreferenceModule(this)) setupNotificationChannels() if (!LogcatLogger.isInstalled) { LogcatLogger.install(AndroidLogcatLogger(LogPriority.VERBOSE)) } } private fun setupNotificationChannels() { try { Notifications.createChannels(this) } catch (e: Exception) { logcat(LogPriority.ERROR, e) { "Failed to modify notification channels" } } } inner class FTActivityLifecycleCallbacks : ActivityLifecycleCallbacks { var currentActivity: Activity? = null override fun onActivityCreated(p0: Activity, p1: Bundle?) {} override fun onActivityStarted(p0: Activity) { currentActivity = p0 } override fun onActivityResumed(p0: Activity) { currentActivity = p0 } override fun onActivityPaused(p0: Activity) {} override fun onActivityStopped(p0: Activity) {} override fun onActivitySaveInstanceState(p0: Activity, p1: Bundle) {} override fun onActivityDestroyed(p0: Activity) {} } companion object { private var instance: App? = null var context : Context? = null fun currentContext(): Context? { return instance?.mFTActivityLifecycleCallbacks?.currentActivity ?: context } fun currentActivity(): Activity? { return instance?.mFTActivityLifecycleCallbacks?.currentActivity } } }