Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Inject RecycledViewPool by using Dagger2 #662

Merged
merged 2 commits into from
Feb 10, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package io.github.droidkaigi.confsched2018.di

import android.support.v7.widget.RecyclerView
import dagger.Module
import dagger.Provides

// Share RecycledViewPool between content fragments of ViewPager.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍

@Module class RecycledViewPoolModule {

private val recycledViewPool = RecyclerView.RecycledViewPool()

@Provides
fun providesRecycledViewPool(): RecyclerView.RecycledViewPool = recycledViewPool
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,13 @@ package io.github.droidkaigi.confsched2018.di.activitymodule

import dagger.Module
import dagger.android.ContributesAndroidInjector
import io.github.droidkaigi.confsched2018.di.RecycledViewPoolModule
import io.github.droidkaigi.confsched2018.presentation.MainActivity

@Module interface MainActivityBuilder {
@ContributesAndroidInjector(modules = [MainActivityModule::class])
@ContributesAndroidInjector(modules = [
MainActivityModule::class,
RecycledViewPoolModule::class
])
fun contributeMainActivity(): MainActivity
}
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ class FavoriteSessionsFragment : DaggerFragment() {
@Inject lateinit var navigationController: NavigationController
@Inject lateinit var sessionAlarm: SessionAlarm
@Inject lateinit var viewModelFactory: ViewModelProvider.Factory
@Inject lateinit var sharedRecycledViewPool: RecyclerView.RecycledViewPool
private val sessionsViewModel: FavoriteSessionsViewModel by lazy {
ViewModelProviders.of(this, viewModelFactory).get(FavoriteSessionsViewModel::class.java)
}
Expand Down Expand Up @@ -114,6 +115,8 @@ class FavoriteSessionsFragment : DaggerFragment() {
})
setLinearDivider(R.drawable.shape_divider_vertical_12dp,
layoutManager as LinearLayoutManager)
recycledViewPool = sharedRecycledViewPool
(layoutManager as LinearLayoutManager).recycleChildrenOnDetach = true
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,16 +54,12 @@ class AllSessionsFragment :
@Inject lateinit var viewModelFactory: ViewModelProvider.Factory
@Inject lateinit var navigationController: NavigationController
@Inject lateinit var sessionAlarm: SessionAlarm
@Inject lateinit var sharedRecycledViewPool: RecyclerView.RecycledViewPool

private val allSessionsViewModel: AllSessionsViewModel by lazy {
ViewModelProviders.of(this, viewModelFactory).get(AllSessionsViewModel::class.java)
}

private val sessionsViewModel: SessionsViewModel by lazy {
ViewModelProviders.of(parentFragment ?: this, viewModelFactory)
.get(SessionsViewModel::class.java)
}

private val onFavoriteClickListener = { session: Session.SpeechSession ->
allSessionsViewModel.onFavoriteClick(session)
sessionAlarm.toggleRegister(session)
Expand Down Expand Up @@ -171,7 +167,7 @@ class AllSessionsFragment :
})
setLinearDivider(R.drawable.shape_divider_vertical_12dp,
layoutManager as LinearLayoutManager)
recycledViewPool = sessionsViewModel.viewPool
recycledViewPool = sharedRecycledViewPool
(layoutManager as LinearLayoutManager).recycleChildrenOnDetach = true
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,17 +56,13 @@ class RoomSessionsFragment :

@Inject lateinit var navigationController: NavigationController
@Inject lateinit var sessionAlarm: SessionAlarm
@Inject lateinit var sharedRecycledViewPool: RecyclerView.RecycledViewPool

@Inject lateinit var viewModelFactory: ViewModelProvider.Factory
private val roomSessionsViewModel: RoomSessionsViewModel by lazy {
ViewModelProviders.of(this, viewModelFactory).get(RoomSessionsViewModel::class.java)
}

private val sessionsViewModel: SessionsViewModel by lazy {
ViewModelProviders.of(parentFragment ?: this, viewModelFactory)
.get(SessionsViewModel::class.java)
}

private val onFavoriteClickListener = { session: Session.SpeechSession ->
roomSessionsViewModel.onFavoriteClick(session)
sessionAlarm.toggleRegister(session)
Expand Down Expand Up @@ -180,7 +176,7 @@ class RoomSessionsFragment :
})
setLinearDivider(R.drawable.shape_divider_vertical_12dp,
layoutManager as LinearLayoutManager)
recycledViewPool = sessionsViewModel.viewPool
recycledViewPool = sharedRecycledViewPool
(layoutManager as LinearLayoutManager).recycleChildrenOnDetach = true
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import android.arch.lifecycle.ViewModelProvider
import android.arch.lifecycle.ViewModelProviders
import android.os.Bundle
import android.support.v7.widget.LinearLayoutManager
import android.support.v7.widget.RecyclerView
import android.support.v7.widget.SimpleItemAnimator
import android.view.LayoutInflater
import android.view.View
Expand Down Expand Up @@ -44,17 +45,13 @@ class ScheduleSessionsFragment :
@Inject lateinit var viewModelFactory: ViewModelProvider.Factory
@Inject lateinit var navigationController: NavigationController
@Inject lateinit var sessionAlarm: SessionAlarm
@Inject lateinit var sharedRecycledViewPool: RecyclerView.RecycledViewPool

private val scheduleSessionsViewModel: ScheduleSessionsViewModel by lazy {
ViewModelProviders.of(this, viewModelFactory)
.get(ScheduleSessionsViewModel::class.java)
}

private val sessionsViewModel: SessionsViewModel by lazy {
ViewModelProviders.of(parentFragment ?: this, viewModelFactory)
.get(SessionsViewModel::class.java)
}

private val onFavoriteClickListener = { session: Session.SpeechSession ->
scheduleSessionsViewModel.onFavoriteClick(session)
sessionAlarm.toggleRegister(session)
Expand Down Expand Up @@ -117,7 +114,7 @@ class ScheduleSessionsFragment :
(itemAnimator as SimpleItemAnimator).supportsChangeAnimations = false
setLinearDivider(R.drawable.shape_divider_vertical_12dp,
layoutManager as LinearLayoutManager)
recycledViewPool = sessionsViewModel.viewPool
recycledViewPool = sharedRecycledViewPool
(layoutManager as LinearLayoutManager).recycleChildrenOnDetach = true
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import android.arch.lifecycle.LiveData
import android.arch.lifecycle.MutableLiveData
import android.arch.lifecycle.OnLifecycleEvent
import android.arch.lifecycle.ViewModel
import android.support.v7.widget.RecyclerView
import io.github.droidkaigi.confsched2018.data.repository.SessionRepository
import io.github.droidkaigi.confsched2018.presentation.Result
import io.github.droidkaigi.confsched2018.presentation.common.mapper.toResult
Expand Down Expand Up @@ -50,10 +49,6 @@ class SessionsViewModel @Inject constructor(
val isLoading: LiveData<Boolean> by lazy {
tab.map { it.inProgress }
}
// Share RecycledViewPool between content fragments of sessions ViewPager.
val viewPool: RecyclerView.RecycledViewPool by lazy {
RecyclerView.RecycledViewPool()
}
private val mutableRefreshState: MutableLiveData<Result<Unit>> = MutableLiveData()
val refreshResult: LiveData<Result<Unit>> = mutableRefreshState

Expand Down