From 193036f37c96fd6111196fa16c65e01bd07b6ccf Mon Sep 17 00:00:00 2001 From: rushiiMachine <33725716+rushiiMachine@users.noreply.github.com> Date: Sun, 4 Aug 2024 22:39:16 -0700 Subject: [PATCH] feat: ActivityProvider --- .../aliucord/manager/ManagerApplication.kt | 4 +++ .../aliucord/manager/di/ActivityProvider.kt | 34 +++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 app/src/main/kotlin/com/aliucord/manager/di/ActivityProvider.kt 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 + } + }) + } +}