Selaa lähdekoodia

Moved routers to corresponding presenters

Vadik Sirekanyan 7 vuotta sitten
vanhempi
commit
84a5fec041

+ 18 - 9
app/src/main/java/com/sirekanyan/knigopis/dependency.kt

@@ -94,9 +94,9 @@ private fun KoinContext.mainModule() {
     factory {
         val params = it.getContext().createParameters()
         val loginPresenter = LoginPresenterImpl(it.getRouter(), get(params))
-        val booksPresenter = BooksPresenterImpl(get())
-        val usersPresenter = UsersPresenterImpl(get(), get())
-        val notesPresenter = NotesPresenterImpl(get())
+        val booksPresenter = BooksPresenterImpl(it.getRouter(), get())
+        val usersPresenter = UsersPresenterImpl(it.getRouter(), get(), get())
+        val notesPresenter = NotesPresenterImpl(it.getRouter(), get())
         MainPresenterImpl(
             loginPresenter,
             booksPresenter,
@@ -105,15 +105,24 @@ private fun KoinContext.mainModule() {
             it.getRouter(),
             get(),
             get()
-        ).also { p ->
+        ).also { mainPresenter ->
             val rootView = it.getRootView()
-            val progressView = ProgressViewImpl(rootView.swipeRefresh, p)
+            val progressView = ProgressViewImpl(rootView.swipeRefresh, mainPresenter)
             val dialogs: DialogFactory = get(params)
             loginPresenter.view = LoginViewImpl(rootView, loginPresenter)
-            booksPresenter.view = BooksViewImpl(rootView.booksPage, p, progressView, dialogs)
-            usersPresenter.view = UsersViewImpl(rootView.usersPage, p, progressView, dialogs)
-            notesPresenter.view = NotesViewImpl(rootView.notesPage, p, progressView)
-            p.view = MainViewImpl(rootView, p)
+            booksPresenter.also { p ->
+                p.view = BooksViewImpl(rootView.booksPage, booksPresenter, progressView, dialogs)
+                p.parent = mainPresenter
+            }
+            usersPresenter.also { p ->
+                p.view = UsersViewImpl(rootView.usersPage, usersPresenter, progressView, dialogs)
+                p.parent = mainPresenter
+            }
+            notesPresenter.also { p ->
+                p.view = NotesViewImpl(rootView.notesPage, notesPresenter, progressView)
+                p.parent = mainPresenter
+            }
+            mainPresenter.view = MainViewImpl(rootView, mainPresenter)
         } as MainPresenter
     }
 }

+ 9 - 1
app/src/main/java/com/sirekanyan/knigopis/feature/MainActivity.kt

@@ -15,9 +15,12 @@ import com.sirekanyan.knigopis.common.functions.logError
 import com.sirekanyan.knigopis.createParameters
 import com.sirekanyan.knigopis.feature.book.createEditBookIntent
 import com.sirekanyan.knigopis.feature.book.createNewBookIntent
+import com.sirekanyan.knigopis.feature.books.BooksPresenter
 import com.sirekanyan.knigopis.feature.login.LoginPresenter
+import com.sirekanyan.knigopis.feature.notes.NotesPresenter
 import com.sirekanyan.knigopis.feature.profile.createProfileIntent
 import com.sirekanyan.knigopis.feature.user.createUserIntent
+import com.sirekanyan.knigopis.feature.users.UsersPresenter
 import com.sirekanyan.knigopis.feature.users.getMainState
 import com.sirekanyan.knigopis.feature.users.saveMainState
 import com.sirekanyan.knigopis.model.BookDataModel
@@ -29,7 +32,12 @@ import ru.ulogin.sdk.UloginAuthActivity
 private const val LOGIN_REQUEST_CODE = 0
 private const val BOOK_REQUEST_CODE = 1
 
-class MainActivity : BaseActivity(), MainPresenter.Router, LoginPresenter.Router {
+class MainActivity : BaseActivity(),
+    MainPresenter.Router,
+    LoginPresenter.Router,
+    BooksPresenter.Router,
+    UsersPresenter.Router,
+    NotesPresenter.Router {
 
     private val presenter by inject<MainPresenter>(parameters = createParameters(this))
     private val api by inject<Endpoint>()

+ 4 - 62
app/src/main/java/com/sirekanyan/knigopis/feature/MainPresenter.kt

@@ -1,18 +1,14 @@
 package com.sirekanyan.knigopis.feature
 
-import android.net.Uri
 import com.sirekanyan.knigopis.common.BasePresenter
 import com.sirekanyan.knigopis.common.Presenter
 import com.sirekanyan.knigopis.common.functions.logError
 import com.sirekanyan.knigopis.feature.books.BooksPresenter
-import com.sirekanyan.knigopis.feature.books.BooksView
 import com.sirekanyan.knigopis.feature.login.LoginPresenter
 import com.sirekanyan.knigopis.feature.notes.NotesPresenter
-import com.sirekanyan.knigopis.feature.notes.NotesView
 import com.sirekanyan.knigopis.feature.users.MainPresenterState
 import com.sirekanyan.knigopis.feature.users.UsersPresenter
-import com.sirekanyan.knigopis.feature.users.UsersView
-import com.sirekanyan.knigopis.model.*
+import com.sirekanyan.knigopis.model.CurrentTab
 import com.sirekanyan.knigopis.model.CurrentTab.*
 import com.sirekanyan.knigopis.repository.AuthRepository
 import com.sirekanyan.knigopis.repository.Configuration
@@ -29,10 +25,6 @@ interface MainPresenter : Presenter {
 
     interface Router {
         fun openProfileScreen()
-        fun openNewBookScreen()
-        fun openBookScreen(book: BookDataModel)
-        fun openUserScreen(id: String, name: String, image: String?)
-        fun openWebPage(uri: Uri)
         fun reopenScreen()
     }
 
@@ -49,9 +41,7 @@ class MainPresenterImpl(
 ) : BasePresenter<MainView>(loginPresenter, booksPresenter, usersPresenter, notesPresenter),
     MainPresenter,
     MainView.Callbacks,
-    BooksView.Callbacks,
-    UsersView.Callbacks,
-    NotesView.Callbacks,
+    PagesPresenter,
     ProgressView.Callbacks {
 
     private val loadedTabs = mutableSetOf<CurrentTab>()
@@ -169,60 +159,12 @@ class MainPresenterImpl(
         router.reopenScreen()
     }
 
-    override fun onAddBookClicked() {
-        router.openNewBookScreen()
-    }
-
     override fun onRefreshSwiped() {
         refresh(isForce = true)
     }
 
-    override fun onBookClicked(book: BookDataModel) {
-        router.openBookScreen(book)
-    }
-
-    override fun onBookLongClicked(book: BookDataModel) {
-        booksPresenter.showBookActions(book)
-    }
-
-    override fun onEditBookClicked(book: BookDataModel) {
-        router.openBookScreen(book)
-    }
-
-    override fun onDeleteBookClicked(book: BookDataModel) {
-        booksPresenter.showBookDeleteDialog(book)
-    }
-
-    override fun onDeleteBookConfirmed(book: BookDataModel) {
-        booksPresenter.deleteBook(book)
-    }
-
-    override fun onUserClicked(user: UserModel) {
-        router.openUserScreen(user.id, user.name, user.image)
-    }
-
-    override fun onUserLongClicked(user: UserModel) {
-        usersPresenter.showUserProfiles(user)
-    }
-
-    override fun onUserProfileClicked(uri: ProfileItem) {
-        router.openWebPage(uri.uri)
-    }
-
-    override fun onNoteClicked(note: NoteModel) {
-        router.openUserScreen(note.userId, note.userName, note.userImage)
-    }
-
-    override fun onBooksUpdated() {
-        loadedTabs.add(HOME_TAB)
-    }
-
-    override fun onUsersUpdated() {
-        loadedTabs.add(USERS_TAB)
-    }
-
-    override fun onNotesUpdated() {
-        loadedTabs.add(NOTES_TAB)
+    override fun onPageUpdated(tab: CurrentTab) {
+        loadedTabs.add(tab)
     }
 
 }

+ 7 - 0
app/src/main/java/com/sirekanyan/knigopis/feature/PagesPresenter.kt

@@ -0,0 +1,7 @@
+package com.sirekanyan.knigopis.feature
+
+import com.sirekanyan.knigopis.model.CurrentTab
+
+interface PagesPresenter {
+    fun onPageUpdated(tab: CurrentTab)
+}

+ 37 - 11
app/src/main/java/com/sirekanyan/knigopis/feature/books/BooksPresenter.kt

@@ -5,20 +5,30 @@ import com.sirekanyan.knigopis.common.Presenter
 import com.sirekanyan.knigopis.common.extensions.io2main
 import com.sirekanyan.knigopis.common.extensions.showProgressBar
 import com.sirekanyan.knigopis.common.functions.logError
+import com.sirekanyan.knigopis.feature.PagesPresenter
 import com.sirekanyan.knigopis.model.BookDataModel
+import com.sirekanyan.knigopis.model.CurrentTab
 import com.sirekanyan.knigopis.repository.BookRepository
 
 interface BooksPresenter : Presenter {
+
     fun refresh()
-    fun deleteBook(book: BookDataModel)
-    fun showBookActions(book: BookDataModel)
-    fun showBookDeleteDialog(book: BookDataModel)
+
+    interface Router {
+        fun openNewBookScreen()
+        fun openBookScreen(book: BookDataModel)
+    }
+
 }
 
 class BooksPresenterImpl(
+    private val router: BooksPresenter.Router,
     private val bookRepository: BookRepository
 ) : BasePresenter<BooksView>(),
-    BooksPresenter {
+    BooksPresenter,
+    BooksView.Callbacks {
+
+    lateinit var parent: PagesPresenter
 
     override fun refresh() {
         bookRepository.observeBooks()
@@ -32,7 +42,27 @@ class BooksPresenterImpl(
             })
     }
 
-    override fun deleteBook(book: BookDataModel) {
+    override fun onAddBookClicked() {
+        router.openNewBookScreen()
+    }
+
+    override fun onBookClicked(book: BookDataModel) {
+        router.openBookScreen(book)
+    }
+
+    override fun onBookLongClicked(book: BookDataModel) {
+        view.showBookActions(book)
+    }
+
+    override fun onEditBookClicked(book: BookDataModel) {
+        router.openBookScreen(book)
+    }
+
+    override fun onDeleteBookClicked(book: BookDataModel) {
+        view.showBookDeleteDialog(book)
+    }
+
+    override fun onDeleteBookConfirmed(book: BookDataModel) {
         bookRepository.deleteBook(book)
             .io2main()
             .bind({
@@ -43,12 +73,8 @@ class BooksPresenterImpl(
             })
     }
 
-    override fun showBookActions(book: BookDataModel) {
-        view.showBookActions(book)
-    }
-
-    override fun showBookDeleteDialog(book: BookDataModel) {
-        view.showBookDeleteDialog(book)
+    override fun onBooksUpdated() {
+        parent.onPageUpdated(CurrentTab.HOME_TAB)
     }
 
 }

+ 22 - 1
app/src/main/java/com/sirekanyan/knigopis/feature/notes/NotesPresenter.kt

@@ -5,16 +5,29 @@ import com.sirekanyan.knigopis.common.Presenter
 import com.sirekanyan.knigopis.common.extensions.io2main
 import com.sirekanyan.knigopis.common.extensions.showProgressBar
 import com.sirekanyan.knigopis.common.functions.logError
+import com.sirekanyan.knigopis.feature.PagesPresenter
+import com.sirekanyan.knigopis.model.CurrentTab
+import com.sirekanyan.knigopis.model.NoteModel
 import com.sirekanyan.knigopis.repository.NoteRepository
 
 interface NotesPresenter : Presenter {
+
     fun refresh()
+
+    interface Router {
+        fun openUserScreen(id: String, name: String, image: String?)
+    }
+
 }
 
 class NotesPresenterImpl(
+    private val router: NotesPresenter.Router,
     private val noteRepository: NoteRepository
 ) : BasePresenter<NotesView>(),
-    NotesPresenter {
+    NotesPresenter,
+    NotesView.Callbacks {
+
+    lateinit var parent: PagesPresenter
 
     override fun refresh() {
         noteRepository.observeNotes()
@@ -28,4 +41,12 @@ class NotesPresenterImpl(
             })
     }
 
+    override fun onNoteClicked(note: NoteModel) {
+        router.openUserScreen(note.userId, note.userName, note.userImage)
+    }
+
+    override fun onNotesUpdated() {
+        parent.onPageUpdated(CurrentTab.NOTES_TAB)
+    }
+
 }

+ 28 - 3
app/src/main/java/com/sirekanyan/knigopis/feature/users/UsersPresenter.kt

@@ -1,5 +1,6 @@
 package com.sirekanyan.knigopis.feature.users
 
+import android.net.Uri
 import com.sirekanyan.knigopis.common.BasePresenter
 import com.sirekanyan.knigopis.common.Presenter
 import com.sirekanyan.knigopis.common.android.ResourceProvider
@@ -7,20 +8,32 @@ import com.sirekanyan.knigopis.common.extensions.io2main
 import com.sirekanyan.knigopis.common.extensions.showProgressBar
 import com.sirekanyan.knigopis.common.extensions.toUriOrNull
 import com.sirekanyan.knigopis.common.functions.logError
+import com.sirekanyan.knigopis.feature.PagesPresenter
+import com.sirekanyan.knigopis.model.CurrentTab
 import com.sirekanyan.knigopis.model.ProfileItem
 import com.sirekanyan.knigopis.model.UserModel
 import com.sirekanyan.knigopis.repository.UserRepository
 
 interface UsersPresenter : Presenter {
+
     fun refresh()
-    fun showUserProfiles(user: UserModel)
+
+    interface Router {
+        fun openUserScreen(id: String, name: String, image: String?)
+        fun openWebPage(uri: Uri)
+    }
+
 }
 
 class UsersPresenterImpl(
+    private val router: UsersPresenter.Router,
     private val userRepository: UserRepository,
     private val resources: ResourceProvider
 ) : BasePresenter<UsersView>(),
-    UsersPresenter {
+    UsersPresenter,
+    UsersView.Callbacks {
+
+    lateinit var parent: PagesPresenter
 
     override fun refresh() {
         userRepository.observeUsers()
@@ -34,7 +47,11 @@ class UsersPresenterImpl(
             })
     }
 
-    override fun showUserProfiles(user: UserModel) {
+    override fun onUserClicked(user: UserModel) {
+        router.openUserScreen(user.id, user.name, user.image)
+    }
+
+    override fun onUserLongClicked(user: UserModel) {
         val uriItems = user.profiles
             .mapNotNull(String::toUriOrNull)
             .map { ProfileItem(it, resources) }
@@ -42,4 +59,12 @@ class UsersPresenterImpl(
         view.showUserProfiles(user.name, uriItems)
     }
 
+    override fun onUserProfileClicked(uri: ProfileItem) {
+        router.openWebPage(uri.uri)
+    }
+
+    override fun onUsersUpdated() {
+        parent.onPageUpdated(CurrentTab.USERS_TAB)
+    }
+
 }