Sfoglia il codice sorgente

Added showing fab button when tab opens

Vadik Sirekanyan 7 anni fa
parent
commit
557b26d14b

+ 6 - 3
app/src/main/java/com/sirekanyan/knigopis/dependency.kt

@@ -26,6 +26,7 @@ import com.sirekanyan.knigopis.feature.users.UsersViewImpl
 import com.sirekanyan.knigopis.model.BookDataModel
 import com.sirekanyan.knigopis.model.BookHeaderModel
 import com.sirekanyan.knigopis.model.BookModel
+import com.sirekanyan.knigopis.model.CurrentTab.*
 import com.sirekanyan.knigopis.model.dto.FinishedBook
 import com.sirekanyan.knigopis.model.dto.PlannedBook
 import com.sirekanyan.knigopis.repository.*
@@ -99,9 +100,11 @@ private fun KoinContext.mainModule() {
         val notesPresenter = NotesPresenterImpl(it.getRouter(), get())
         MainPresenterImpl(
             loginPresenter,
-            booksPresenter,
-            usersPresenter,
-            notesPresenter,
+            mapOf(
+                BOOKS_TAB to booksPresenter,
+                USERS_TAB to usersPresenter,
+                NOTES_TAB to notesPresenter
+            ),
             it.getRouter(),
             get(),
             get()

+ 14 - 22
app/src/main/java/com/sirekanyan/knigopis/feature/MainPresenter.kt

@@ -3,13 +3,11 @@ package com.sirekanyan.knigopis.feature
 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.login.LoginPresenter
-import com.sirekanyan.knigopis.feature.notes.NotesPresenter
 import com.sirekanyan.knigopis.feature.users.MainPresenterState
-import com.sirekanyan.knigopis.feature.users.UsersPresenter
 import com.sirekanyan.knigopis.model.CurrentTab
-import com.sirekanyan.knigopis.model.CurrentTab.*
+import com.sirekanyan.knigopis.model.CurrentTab.BOOKS_TAB
+import com.sirekanyan.knigopis.model.CurrentTab.NOTES_TAB
 import com.sirekanyan.knigopis.repository.AuthRepository
 import com.sirekanyan.knigopis.repository.Configuration
 
@@ -32,13 +30,11 @@ interface MainPresenter : Presenter {
 
 class MainPresenterImpl(
     private val loginPresenter: LoginPresenter,
-    private val booksPresenter: BooksPresenter,
-    private val usersPresenter: UsersPresenter,
-    private val notesPresenter: NotesPresenter,
+    private val pagePresenters: Map<CurrentTab, PagePresenter>,
     private val router: MainPresenter.Router,
     private val config: Configuration,
     private val auth: AuthRepository
-) : BasePresenter<MainView>(loginPresenter, booksPresenter, usersPresenter, notesPresenter),
+) : BasePresenter<MainView>(loginPresenter, *pagePresenters.values.toTypedArray()),
     MainPresenter,
     MainView.Callbacks,
     PagesPresenter,
@@ -54,13 +50,13 @@ class MainPresenterImpl(
 
     override fun init(state: MainPresenterState?) {
         view.setDarkThemeOptionChecked(config.isDarkTheme)
-        val defaultTab = if (auth.isAuthorized()) HOME_TAB else NOTES_TAB
+        val defaultTab = if (auth.isAuthorized()) BOOKS_TAB else NOTES_TAB
         this.currentTab = state?.currentTab ?: defaultTab
     }
 
     override fun start() {
         refreshButtons()
-        refresh(currentTab)
+        refresh()
     }
 
     override fun resume() {
@@ -68,7 +64,8 @@ class MainPresenterImpl(
             refreshButtons()
             if (userLoggedIn) {
                 userLoggedIn = false
-                refresh(HOME_TAB)
+                currentTab = BOOKS_TAB
+                refresh()
             }
         }, {
             logError("cannot check credentials", it)
@@ -80,18 +77,17 @@ class MainPresenterImpl(
     }
 
     override fun back(): Boolean =
-        if (currentTab == HOME_TAB || !auth.isAuthorized()) {
+        if (currentTab == BOOKS_TAB || !auth.isAuthorized()) {
             false
         } else {
-            refresh(HOME_TAB)
+            currentTab = BOOKS_TAB
+            refresh()
             true
         }
 
-    private fun refresh(tab: CurrentTab? = null, isForce: Boolean = false) {
+    private fun refresh(isForce: Boolean = false) {
         if (!auth.isAuthorized()) {
             currentTab = NOTES_TAB
-        } else if (tab != null) {
-            currentTab = tab
         }
         currentTab?.let {
             showPage(it, isForce)
@@ -111,11 +107,7 @@ class MainPresenterImpl(
         view.showPage(tab)
         val isFirst = !loadedTabs.contains(tab)
         if (isFirst || isForce) {
-            when (tab) {
-                HOME_TAB -> booksPresenter.refresh()
-                USERS_TAB -> usersPresenter.refresh()
-                NOTES_TAB -> notesPresenter.refresh()
-            }
+            pagePresenters[tab]?.refresh()
         }
     }
 
@@ -136,7 +128,7 @@ class MainPresenterImpl(
     }
 
     override fun onToolbarClicked() {
-        if (currentTab == HOME_TAB) {
+        if (currentTab == BOOKS_TAB) {
             config.sortingMode = if (config.sortingMode == 0) 1 else 0
             refresh(isForce = true)
         }

+ 8 - 1
app/src/main/java/com/sirekanyan/knigopis/feature/MainView.kt

@@ -95,7 +95,14 @@ class MainViewImpl(
     }
 
     override fun showPage(tab: CurrentTab) {
-        booksPage.show(tab == HOME_TAB)
+        if (tab == BOOKS_TAB) {
+            addBookButton.translationX = 0f
+            addBookButton.translationY = 0f
+        }
+        booksRecyclerView.stopScroll()
+        usersRecyclerView.stopScroll()
+        notesRecyclerView.stopScroll()
+        booksPage.show(tab == BOOKS_TAB)
         usersPage.show(tab == USERS_TAB)
         notesPage.show(tab == NOTES_TAB)
     }

+ 9 - 0
app/src/main/java/com/sirekanyan/knigopis/feature/PagePresenter.kt

@@ -0,0 +1,9 @@
+package com.sirekanyan.knigopis.feature
+
+import com.sirekanyan.knigopis.common.Presenter
+
+interface PagePresenter : Presenter {
+
+    fun refresh()
+
+}

+ 3 - 5
app/src/main/java/com/sirekanyan/knigopis/feature/books/BooksPresenter.kt

@@ -1,18 +1,16 @@
 package com.sirekanyan.knigopis.feature.books
 
 import com.sirekanyan.knigopis.common.BasePresenter
-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.PagePresenter
 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()
+interface BooksPresenter : PagePresenter {
 
     interface Router {
         fun openNewBookScreen()
@@ -74,7 +72,7 @@ class BooksPresenterImpl(
     }
 
     override fun onBooksUpdated() {
-        parent.onPageUpdated(CurrentTab.HOME_TAB)
+        parent.onPageUpdated(CurrentTab.BOOKS_TAB)
     }
 
 }

+ 2 - 4
app/src/main/java/com/sirekanyan/knigopis/feature/notes/NotesPresenter.kt

@@ -1,18 +1,16 @@
 package com.sirekanyan.knigopis.feature.notes
 
 import com.sirekanyan.knigopis.common.BasePresenter
-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.PagePresenter
 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 NotesPresenter : PagePresenter {
 
     interface Router {
         fun openUserScreen(id: String, name: String, image: String?)

+ 2 - 4
app/src/main/java/com/sirekanyan/knigopis/feature/users/UsersPresenter.kt

@@ -2,21 +2,19 @@ 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
 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.PagePresenter
 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()
+interface UsersPresenter : PagePresenter {
 
     interface Router {
         fun openUserScreen(id: String, name: String, image: String?)

+ 1 - 1
app/src/main/java/com/sirekanyan/knigopis/model/CurrentTab.kt

@@ -5,7 +5,7 @@ import com.sirekanyan.knigopis.R
 
 enum class CurrentTab(@IdRes val itemId: Int) {
 
-    HOME_TAB(R.id.navigation_home),
+    BOOKS_TAB(R.id.navigation_home),
     USERS_TAB(R.id.navigation_users),
     NOTES_TAB(R.id.navigation_notes);