From 8b233b2629039e8144fe6eef5438125cd48c8973 Mon Sep 17 00:00:00 2001 From: Allan Wang Date: Sat, 17 Apr 2021 18:35:14 -0700 Subject: Inject main activity contract --- .../pitchedapps/frost/activities/BaseMainActivity.kt | 16 ++++++++++++++++ .../com/pitchedapps/frost/fragments/FragmentBase.kt | 17 +++++++++-------- .../com/pitchedapps/frost/intro/IntroMainFragments.kt | 4 ++-- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/app/src/main/kotlin/com/pitchedapps/frost/activities/BaseMainActivity.kt b/app/src/main/kotlin/com/pitchedapps/frost/activities/BaseMainActivity.kt index 8f440129..51f4732a 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/activities/BaseMainActivity.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/activities/BaseMainActivity.kt @@ -128,7 +128,13 @@ import com.pitchedapps.frost.views.BadgedIcon import com.pitchedapps.frost.views.FrostVideoViewer import com.pitchedapps.frost.views.FrostViewPager import com.pitchedapps.frost.widgets.NotificationWidget +import dagger.Module +import dagger.Provides +import dagger.hilt.InstallIn import dagger.hilt.android.AndroidEntryPoint +import dagger.hilt.android.components.ActivityComponent +import dagger.hilt.android.qualifiers.ActivityContext +import dagger.hilt.android.scopes.ActivityScoped import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.launch import javax.inject.Inject @@ -936,3 +942,13 @@ abstract class BaseMainActivity : const val UNSELECTED_TAB_ALPHA = 128f } } + +@Module +@InstallIn(ActivityComponent::class) +object MainActivityModule { + @Provides + @ActivityScoped + fun contract(@ActivityContext context: Context): MainActivityContract = + (context as? BaseMainActivity) + ?: throw IllegalArgumentException("${context::class.java.simpleName} does not implement MainActivityContract") +} diff --git a/app/src/main/kotlin/com/pitchedapps/frost/fragments/FragmentBase.kt b/app/src/main/kotlin/com/pitchedapps/frost/fragments/FragmentBase.kt index 825e0937..f7d6b0ad 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/fragments/FragmentBase.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/fragments/FragmentBase.kt @@ -41,6 +41,7 @@ import com.pitchedapps.frost.utils.L import com.pitchedapps.frost.utils.REQUEST_REFRESH import com.pitchedapps.frost.utils.REQUEST_TEXT_ZOOM import com.pitchedapps.frost.utils.frostEvent +import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.Job @@ -49,7 +50,7 @@ import kotlinx.coroutines.channels.ReceiveChannel import kotlinx.coroutines.isActive import kotlinx.coroutines.launch import org.koin.android.ext.android.inject -import org.koin.core.component.inject +import javax.inject.Inject import kotlin.coroutines.CoroutineContext /** @@ -59,6 +60,7 @@ import kotlin.coroutines.CoroutineContext * Must be attached to activities implementing [MainActivityContract] */ @UseExperimental(ExperimentalCoroutinesApi::class) +@AndroidEntryPoint abstract class BaseFragment : Fragment(), CoroutineScope, @@ -87,6 +89,9 @@ abstract class BaseFragment : } } + @Inject + lateinit var mainContract: MainActivityContract + protected val fbCookie: FbCookie by inject() protected val prefs: Prefs by inject() protected val themeProvider: ThemeProvider by inject() @@ -107,7 +112,7 @@ abstract class BaseFragment : "Native Fallback", "Item" to baseEnum.name ) - (context as MainActivityContract).reloadFragment(this) + mainContract.reloadFragment(this) } override var firstLoad: Boolean = true @@ -122,8 +127,6 @@ abstract class BaseFragment : super.onCreate(savedInstanceState) job = SupervisorJob() firstLoad = true - if (context !is MainActivityContract) - throw IllegalArgumentException("${this::class.java.simpleName} is not attached to a context implementing MainActivityContract") } final override fun onCreateView( @@ -145,9 +148,7 @@ abstract class BaseFragment : onCreateRunnable = null firstLoadRequest() detachMainObservable() - (context as? MainActivityContract)?.let { - activityReceiver = attachMainObservable(it) - } + activityReceiver = attachMainObservable(mainContract) } override fun setUserVisibleHint(isVisibleToUser: Boolean) { @@ -168,7 +169,7 @@ abstract class BaseFragment : } override fun setTitle(title: String) { - (context as? MainActivityContract)?.setTitle(title) + mainContract.setTitle(title) } override fun attachMainObservable(contract: MainActivityContract): ReceiveChannel { diff --git a/app/src/main/kotlin/com/pitchedapps/frost/intro/IntroMainFragments.kt b/app/src/main/kotlin/com/pitchedapps/frost/intro/IntroMainFragments.kt index 7ff1df1d..040fa96f 100644 --- a/app/src/main/kotlin/com/pitchedapps/frost/intro/IntroMainFragments.kt +++ b/app/src/main/kotlin/com/pitchedapps/frost/intro/IntroMainFragments.kt @@ -52,10 +52,10 @@ import kotlin.math.abs abstract class BaseIntroFragment(val layoutRes: Int) : Fragment() { @Inject - lateinit var prefs: Prefs + protected lateinit var prefs: Prefs @Inject - lateinit var themeProvider: ThemeProvider + protected lateinit var themeProvider: ThemeProvider val screenWidth get() = resources.displayMetrics.widthPixels -- cgit v1.2.3