Ver código fonte

Moved code from activity to presenter and view

Vadik Sirekanyan 7 anos atrás
pai
commit
917ad3dcab

+ 13 - 18
app/src/main/java/com/sirekanyan/knigopis/feature/MainActivity.kt

@@ -22,10 +22,10 @@ import com.sirekanyan.knigopis.feature.book.createEditBookIntent
 import com.sirekanyan.knigopis.feature.book.createNewBookIntent
 import com.sirekanyan.knigopis.feature.profile.createProfileIntent
 import com.sirekanyan.knigopis.feature.user.createUserIntent
+import com.sirekanyan.knigopis.feature.users.MainPresenterState
 import com.sirekanyan.knigopis.model.BookDataModel
 import com.sirekanyan.knigopis.model.CurrentTab
 import com.sirekanyan.knigopis.model.CurrentTab.HOME_TAB
-import com.sirekanyan.knigopis.model.CurrentTab.NOTES_TAB
 import com.sirekanyan.knigopis.repository.*
 import com.tbruyelle.rxpermissions2.RxPermissions
 import kotlinx.android.synthetic.main.activity_main.*
@@ -63,13 +63,14 @@ class MainActivity : BaseActivity(), Router, MainPresenter.Router {
             userRepository,
             noteRepository,
             resourceProvider
-        ).apply {
-            view = MainViewImpl(getRootView(), this, dialogs)
+        ).also { presenter ->
+            presenter.view = MainViewImpl(getRootView(), presenter, dialogs)
+            presenter.init(
+                savedInstanceState?.let {
+                    MainPresenterState(it.getInt(CURRENT_TAB_KEY))
+                }
+            )
         }
-        val currentTabId = savedInstanceState?.getInt(CURRENT_TAB_KEY)
-        val currentTab = currentTabId?.let { CurrentTab.getByItemId(it) }
-        val defaultTab = if (auth.isAuthorized()) HOME_TAB else NOTES_TAB
-        presenter.refresh(currentTab ?: defaultTab)
         initNavigationView()
         initToolbar(toolbar)
     }
@@ -177,17 +178,11 @@ class MainActivity : BaseActivity(), Router, MainPresenter.Router {
     }
 
     private fun initToolbar(toolbar: Toolbar) {
-        loginOption = toolbar.menu.findItem(R.id.option_login)
-        profileOption = toolbar.menu.findItem(R.id.option_profile)
-        val darkThemeOption = toolbar.menu.findItem(R.id.option_dark_theme)
-        darkThemeOption.isChecked = config.isDarkTheme
-        val clearCacheOption = toolbar.menu.findItem(R.id.option_clear_cache)
-        clearCacheOption.isVisible = BuildConfig.DEBUG
-        toolbar.setOnClickListener {
-            if (presenter.currentTab == HOME_TAB) {
-                config.sortingMode = if (config.sortingMode == 0) 1 else 0
-                presenter.refresh(isForce = true)
-            }
+        toolbar.menu.let { menu ->
+            loginOption = menu.findItem(R.id.option_login)
+            profileOption = menu.findItem(R.id.option_profile)
+            menu.findItem(R.id.option_dark_theme).isChecked = config.isDarkTheme
+            menu.findItem(R.id.option_clear_cache).isVisible = BuildConfig.DEBUG
         }
     }
 

+ 19 - 0
app/src/main/java/com/sirekanyan/knigopis/feature/MainPresenter.kt

@@ -7,6 +7,7 @@ import com.sirekanyan.knigopis.common.ResourceProvider
 import com.sirekanyan.knigopis.common.extensions.io2main
 import com.sirekanyan.knigopis.common.extensions.toUriOrNull
 import com.sirekanyan.knigopis.common.functions.logError
+import com.sirekanyan.knigopis.feature.users.MainPresenterState
 import com.sirekanyan.knigopis.feature.users.UriItem
 import com.sirekanyan.knigopis.model.BookDataModel
 import com.sirekanyan.knigopis.model.CurrentTab
@@ -19,6 +20,8 @@ import io.reactivex.Flowable
 interface MainPresenter : Presenter {
 
     var currentTab: CurrentTab
+    fun init(state: MainPresenterState?)
+    fun start()
     fun refresh(tab: CurrentTab? = null, isForce: Boolean = false)
     fun showPage(tab: CurrentTab, isForce: Boolean)
 
@@ -46,6 +49,15 @@ class MainPresenterImpl(
     override lateinit var currentTab: CurrentTab
     private val loadedTabs = mutableSetOf<CurrentTab>()
 
+    override fun init(state: MainPresenterState?) {
+        val currentTab = state?.currentTab?.let { CurrentTab.getByItemId(it) }
+        val defaultTab = if (auth.isAuthorized()) HOME_TAB else NOTES_TAB
+        refresh(currentTab ?: defaultTab)
+    }
+
+    override fun start() {
+    }
+
     override fun refresh(tab: CurrentTab?, isForce: Boolean) {
         if (!auth.isAuthorized()) {
             currentTab = NOTES_TAB
@@ -68,6 +80,13 @@ class MainPresenterImpl(
         }
     }
 
+    override fun onToolbarClicked() {
+        if (currentTab == HOME_TAB) {
+            config.sortingMode = if (config.sortingMode == 0) 1 else 0
+            refresh(isForce = true)
+        }
+    }
+
     override fun onLoginOptionClicked() {
         router.login()
     }

+ 4 - 0
app/src/main/java/com/sirekanyan/knigopis/feature/MainView.kt

@@ -41,6 +41,7 @@ interface MainView : BooksView, UsersView, NotesView {
     fun setNavigation(itemId: Int)
 
     interface Callbacks : BooksView.Callbacks, UsersView.Callbacks, NotesView.Callbacks {
+        fun onToolbarClicked()
         fun onLoginOptionClicked()
         fun onProfileOptionClicked()
         fun onAboutOptionClicked()
@@ -65,6 +66,9 @@ class MainViewImpl(
 
     init {
         toolbar.inflateMenu(R.menu.options)
+        toolbar.setOnClickListener {
+            callbacks.onToolbarClicked()
+        }
         toolbar.setOnMenuItemClickListener { item ->
             when (item.itemId) {
                 R.id.option_login -> {

+ 3 - 0
app/src/main/java/com/sirekanyan/knigopis/feature/users/MainPresenterState.kt

@@ -0,0 +1,3 @@
+package com.sirekanyan.knigopis.feature.users
+
+class MainPresenterState(val currentTab: Int)