Skip to content

Commit b460b1e

Browse files
author
Patrick Jackson
committed
[WIP] refactor PresenterFactory to presenterMiddleware. update BaseViewController to handle attach/detach. created GlobalDispatch
1 parent 44e97b6 commit b460b1e

File tree

21 files changed

+167
-155
lines changed

21 files changed

+167
-155
lines changed

android/src/main/java/com/jackson/openlibrary/BottomNavigationDialogFragment.kt

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -4,20 +4,14 @@ import android.os.Bundle
44
import android.view.LayoutInflater
55
import android.view.View
66
import android.view.ViewGroup
7-
import android.widget.Toast
8-
import androidx.fragment.app.Fragment
97
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
10-
import com.jackson.openlibrary.store.CompletedFragment
11-
import com.willowtreeapps.common.AppState
12-
import com.willowtreeapps.common.NavigationActions
13-
import com.willowtreeapps.common.SelectorSubscriberBuilder
14-
import com.willowtreeapps.common.UiActions
15-
import com.willowtreeapps.common.middleware.Screen
8+
import com.willowtreeapps.common.*
9+
import com.willowtreeapps.common.external.AttachView
10+
import com.willowtreeapps.common.external.DetachView
11+
import com.willowtreeapps.common.external.SelectorSubscriberBuilder
1612
import com.willowtreeapps.common.ui.BottomNavSheet
17-
import com.willowtreeapps.common.ui.LibraryView
1813
import kotlinx.android.synthetic.main.fragment_bottomsheet.*
1914
import org.reduxkotlin.Dispatcher
20-
import java.lang.IllegalArgumentException
2115

2216
class BottomNavigationDrawerFragment : BottomSheetDialogFragment(), BottomNavSheet {
2317

@@ -31,12 +25,12 @@ class BottomNavigationDrawerFragment : BottomSheetDialogFragment(), BottomNavShe
3125

3226
override fun onResume() {
3327
super.onResume()
34-
OpenLibraryApp.gameEngine().attachView(this)
28+
OpenLibraryApp.dispatch(AttachView(this))
3529
}
3630

3731
override fun onPause() {
3832
super.onPause()
39-
OpenLibraryApp.gameEngine().detachView(this)
33+
OpenLibraryApp.dispatch(DetachView(this))
4034
}
4135

4236
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {

android/src/main/java/com/jackson/openlibrary/MainActivity.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ class MainActivity : AppCompatActivity() {
3535
fragTransaction.replace(R.id.nav_host_fragment, fragment, fragment::class.java.name)
3636
fragTransaction.commit()
3737
fab.setOnClickListener {
38-
OpenLibraryApp.gameEngine().dispatch(UiActions.SearchBtnTapped())
38+
OpenLibraryApp.dispatch(UiActions.SearchBtnTapped())
3939
fab.hide()
4040
}
4141

android/src/main/java/com/jackson/openlibrary/OpenLibraryApp.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import com.willowtreeapps.common.LibraryApp
1313
import com.willowtreeapps.common.Logger
1414
import com.willowtreeapps.common.createDatabase
1515
import kotlinx.coroutines.Dispatchers
16+
import org.reduxkotlin.Dispatcher
1617

1718
class OpenLibraryApp : Application() {
1819

@@ -48,6 +49,8 @@ class OpenLibraryApp : Application() {
4849
lateinit var instance: OpenLibraryApp
4950

5051
fun gameEngine() = instance.libraryApp
52+
val dispatch
53+
get() = instance.libraryApp.store.dispatch
5154
}
5255
}
5356

android/src/main/java/com/jackson/openlibrary/store/BaseLibraryViewFragment.kt

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,11 @@ package com.jackson.openlibrary.store
22

33
import android.os.Bundle
44
import androidx.fragment.app.Fragment
5-
import androidx.lifecycle.Lifecycle
6-
import androidx.lifecycle.LifecycleObserver
7-
import androidx.lifecycle.OnLifecycleEvent
8-
import com.willowtreeapps.common.Logger
95
import com.jackson.openlibrary.OpenLibraryApp
10-
import com.willowtreeapps.common.AppState
11-
import com.willowtreeapps.common.SelectorSubscriberBuilder
12-
import com.willowtreeapps.common.ui.LibraryProvider
6+
import com.willowtreeapps.common.*
7+
import com.willowtreeapps.common.external.AttachView
8+
import com.willowtreeapps.common.external.DetachView
9+
import com.willowtreeapps.common.external.SelectorSubscriberBuilder
1310
import com.willowtreeapps.common.ui.LibraryView
1411
import kotlinx.coroutines.CoroutineScope
1512
import kotlinx.coroutines.Dispatchers
@@ -39,7 +36,7 @@ open class BaseLibraryViewFragment<V: LibraryView>: Fragment(), LibraryView, Cor
3936

4037
override fun onResume() {
4138
super.onResume()
42-
OpenLibraryApp.gameEngine().attachView(this)
39+
OpenLibraryApp.dispatch(AttachView(this))
4340
if (viewRecreated) {
4441
//TODO update view with all state
4542
// presenter?.recreateView()
@@ -48,7 +45,7 @@ open class BaseLibraryViewFragment<V: LibraryView>: Fragment(), LibraryView, Cor
4845

4946
override fun onPause() {
5047
super.onPause()
51-
OpenLibraryApp.gameEngine().detachView(this)
48+
OpenLibraryApp.dispatch(DetachView(this))
5249
}
5350
}
5451

android/src/main/java/com/jackson/openlibrary/store/BooksAdapter.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ class BookViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {
5858
GlideApp.with(itemView)
5959
.load(book.coverImageUrl)
6060
.into(itemView.ivBookCover)
61-
itemView.setOnClickListener { OpenLibraryApp.gameEngine().dispatch(UiActions.BookTapped(book)) }
61+
itemView.setOnClickListener { OpenLibraryApp.dispatch(UiActions.BookTapped(book)) }
6262
}
6363

6464
}

android/src/main/java/com/jackson/openlibrary/store/ReadingListFragment.kt

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,6 @@ class ReadingListFragment : BaseLibraryViewFragment<ReadingListView>(), Coroutin
4040
(activity as MainActivity).showFab()
4141
}
4242

43-
override fun onPause() {
44-
super.onPause()
45-
OpenLibraryApp.gameEngine().detachView(this)
46-
}
47-
4843
override fun hideLoading() {
4944
loading_spinner.visibility = View.GONE
5045
}

common/src/commonMain/kotlin/com/willowtreeapps/common/Actions.kt

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,8 @@ package com.willowtreeapps.common
33
import com.willowtreeapps.common.middleware.Screen
44
import com.willowtreeapps.common.repo.Book
55
import com.willowtreeapps.common.ui.BookListItemViewState
6-
import com.willowtreeapps.common.ui.View
76

8-
sealed class Actions {
7+
internal sealed class Actions {
98

109

1110
class FetchingItemsStartedAction
@@ -22,27 +21,13 @@ sealed class Actions {
2221
data class ToReadLoaded(val books: List<Book>)
2322
class LoadCompleted
2423
data class CompletedLoaded(val books: List<Book>)
25-
data class AttachView<S: Any>(val view: View<S>)
2624

2725
class NextBook
2826
class PrevBook
2927
}
3028

31-
sealed class UiActions {
32-
//Should we fire event when screen shown? or always navigate to a screen
33-
class ReadingListShown
34-
class CompletedListShown
35-
class SearchBtnTapped
36-
class ReadingListBtnTapped
37-
class CompletedListBtnTapped
38-
class BookTapped(val book: BookListItemViewState)
39-
data class SearchQueryEntered(val query: String)
40-
class AddToReadingButtonTapped
41-
class RemoveFromReadingButtonTapped
42-
class AddToCompletedButtonTapped
43-
class RemoveFromCompletedButtonTapped
44-
}
4529

46-
sealed class NavigationActions {
30+
31+
internal sealed class NavigationActions {
4732
data class GotoScreen(val screen: Screen)
4833
}
Lines changed: 9 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
package com.willowtreeapps.common
22

33
import com.willowtree.common.LibraryDatabase
4+
import com.willowtreeapps.common.external.coroutineDispatcher
5+
import com.willowtreeapps.common.external.presenterMiddleware
46
import org.reduxkotlin.createStore
57
import org.reduxkotlin.applyMiddleware
68
import com.willowtreeapps.common.middleware.*
79
import com.willowtreeapps.common.middleware.NavigationMiddleware
810
import com.willowtreeapps.common.repo.*
9-
import com.willowtreeapps.common.ui.LibraryProvider
10-
import com.willowtreeapps.common.ui.LibraryView
11-
import com.willowtreeapps.common.ui.PresenterFactory
11+
import com.willowtreeapps.common.ui.*
1212
import kotlinx.coroutines.CoroutineScope
1313
import kotlinx.coroutines.launch
1414
import org.reduxkotlin.combineReducers
@@ -22,11 +22,13 @@ class LibraryApp(navigator: Navigator,
2222
private val localStorageRepo = BookDatabaseRepo(libraryDatabase)
2323
private val databaseMiddleware = DatabaseMiddleware(localStorageRepo)
2424
private val bookRepository: BookRepository by lazy { KtorOpenBookRepository(networkContext) }
25-
private val presenterFactory by lazy { PresenterFactory(this, uiContext) }
2625
override val networkThunks = NetworkThunks(networkContext, bookRepository)
2726

2827
val store by lazy {
29-
createStore(combineReducers(reducer, navigationReducer), AppState.INITIAL_STATE, applyMiddleware(createThunkMiddleware2(),
28+
createStore(combineReducers(reducer, navigationReducer), AppState.INITIAL_STATE, applyMiddleware(
29+
presenterMiddleware<AppState, LibraryView>(uiContext),
30+
coroutineDispatcher(uiContext),
31+
createThunkMiddleware2(),
3032
uiActionMiddleware(networkThunks),
3133
databaseMiddleware.middleware,
3234
navigationMiddleware::dispatch,
@@ -36,21 +38,12 @@ class LibraryApp(navigator: Navigator,
3638
init {
3739
CoroutineScope(uiContext).launch {
3840
//do any initialization here
39-
dispatch(NavigationActions.GotoScreen(state.currentScreen))
40-
}
41-
}
42-
43-
fun dispatch(action: Any) {
44-
CoroutineScope(uiContext).launch {
45-
store.dispatch(action)
41+
store.dispatch(NavigationActions.GotoScreen(state.currentScreen))
4642
}
4743
}
4844

4945
val state: AppState
5046
get() = store.state as AppState
47+
}
5148

52-
fun <V : LibraryView> attachView(view: V) = presenterFactory.attachView(view)
53-
54-
fun detachView(view: LibraryView) = presenterFactory.detachView(view)
5549

56-
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package com.willowtreeapps.common
2+
3+
interface LibraryProvider {
4+
val networkThunks: NetworkThunks
5+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package com.willowtreeapps.common
2+
3+
import com.willowtreeapps.common.ui.BookListItemViewState
4+
5+
sealed class UiActions {
6+
//Should we fire event when screen shown? or always navigate to a screen
7+
class ReadingListShown
8+
class CompletedListShown
9+
class SearchBtnTapped
10+
class ReadingListBtnTapped
11+
class CompletedListBtnTapped
12+
class BookTapped(val book: BookListItemViewState)
13+
data class SearchQueryEntered(val query: String)
14+
class AddToReadingButtonTapped
15+
class RemoveFromReadingButtonTapped
16+
class AddToCompletedButtonTapped
17+
class RemoveFromCompletedButtonTapped
18+
19+
20+
}

0 commit comments

Comments
 (0)