diff --git a/app/src/main/kotlin/com/aliucord/manager/ManagerApplication.kt b/app/src/main/kotlin/com/aliucord/manager/ManagerApplication.kt index 91e7ac0..87a2ea7 100644 --- a/app/src/main/kotlin/com/aliucord/manager/ManagerApplication.kt +++ b/app/src/main/kotlin/com/aliucord/manager/ManagerApplication.kt @@ -29,7 +29,11 @@ class ManagerApplication : Application() { super.onCreate() startKoin { + // Android activities & context androidContext(this@ManagerApplication) + modules(module(createdAtStart = true) { + singleOf(::ActivityProvider) + }) // HTTP modules(module { diff --git a/app/src/main/kotlin/com/aliucord/manager/di/ActivityProvider.kt b/app/src/main/kotlin/com/aliucord/manager/di/ActivityProvider.kt new file mode 100644 index 0000000..aa10376 --- /dev/null +++ b/app/src/main/kotlin/com/aliucord/manager/di/ActivityProvider.kt @@ -0,0 +1,34 @@ +package com.aliucord.manager.di + +import android.app.Activity +import android.app.Application +import android.os.Bundle +import java.util.Objects + +class ActivityProvider(application: Application) { + private var activeActivity: Activity? = null + + /** + * Gets the current active activity as a specific activity or errors otherwise. + */ + @Suppress("UNCHECKED_CAST") + fun get(): T = Objects.requireNonNull(activeActivity, "No active activity cached!") as T + + init { + application.registerActivityLifecycleCallbacks(object : Application.ActivityLifecycleCallbacks { + override fun onActivityCreated(activity: Activity, savedInstanceState: Bundle?) {} + override fun onActivityPaused(activity: Activity) {} + override fun onActivitySaveInstanceState(activity: Activity, outState: Bundle) {} + override fun onActivityStarted(activity: Activity) {} + override fun onActivityStopped(activity: Activity) {} + + override fun onActivityResumed(activity: Activity) { + activeActivity = activity + } + + override fun onActivityDestroyed(activity: Activity) { + activeActivity = null + } + }) + } +}