فهرست منبع

Moved refresh methods to presenter

Vadik Sirekanyan 7 سال پیش
والد
کامیت
ae8eb53c02

+ 10 - 43
app/src/main/java/com/sirekanyan/knigopis/feature/MainActivity.kt

@@ -7,14 +7,15 @@ import android.net.Uri
 import android.os.Bundle
 import android.provider.Settings
 import android.support.v7.app.AlertDialog
-import android.support.v7.widget.Toolbar
-import android.view.MenuItem
 import com.sirekanyan.knigopis.BuildConfig
 import com.sirekanyan.knigopis.R
 import com.sirekanyan.knigopis.Router
 import com.sirekanyan.knigopis.common.BaseActivity
 import com.sirekanyan.knigopis.common.ResourceProvider
-import com.sirekanyan.knigopis.common.extensions.*
+import com.sirekanyan.knigopis.common.extensions.getRootView
+import com.sirekanyan.knigopis.common.extensions.io2main
+import com.sirekanyan.knigopis.common.extensions.startActivityOrNull
+import com.sirekanyan.knigopis.common.extensions.toast
 import com.sirekanyan.knigopis.common.functions.logError
 import com.sirekanyan.knigopis.common.view.dialog.DialogFactory
 import com.sirekanyan.knigopis.createParameters
@@ -24,7 +25,6 @@ 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.repository.*
 import com.tbruyelle.rxpermissions2.RxPermissions
@@ -47,8 +47,6 @@ class MainActivity : BaseActivity(), Router, MainPresenter.Router {
     private val resourceProvider by inject<ResourceProvider>()
     private var userLoggedIn = false
     private var booksChanged = false
-    private lateinit var loginOption: MenuItem
-    private lateinit var profileOption: MenuItem
     private lateinit var presenter: MainPresenter
 
     override fun onCreate(savedInstanceState: Bundle?) {
@@ -71,15 +69,16 @@ class MainActivity : BaseActivity(), Router, MainPresenter.Router {
                 }
             )
         }
-        initNavigationView()
-        initToolbar(toolbar)
+        presenter.refreshNavigation()
+        toolbar.menu.findItem(R.id.option_dark_theme).isChecked = config.isDarkTheme
+        toolbar.menu.findItem(R.id.option_clear_cache).isVisible = BuildConfig.DEBUG
     }
 
     override fun onStart() {
         super.onStart()
-        refreshOptionsMenu()
+        presenter.refreshOptionsMenu()
         auth.requestAccessToken().bind({
-            refreshOptionsMenu()
+            presenter.refreshOptionsMenu()
             if (userLoggedIn) {
                 userLoggedIn = false
                 presenter.refresh()
@@ -162,30 +161,6 @@ class MainActivity : BaseActivity(), Router, MainPresenter.Router {
         startActivityForResult(createNewBookIntent(), BOOK_REQUEST_CODE)
     }
 
-    private fun initNavigationView() {
-        if (auth.isAuthorized()) {
-            bottomNavigation.show()
-            bottomNavigation.setOnNavigationItemSelectedListener { item ->
-                val t = CurrentTab.getByItemId(item.itemId)
-                presenter.currentTab = t
-                presenter.showPage(t, false)
-                true
-            }
-        } else {
-            bottomNavigation.hide()
-            bottomNavigation.setOnNavigationItemSelectedListener(null)
-        }
-    }
-
-    private fun initToolbar(toolbar: Toolbar) {
-        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
-        }
-    }
-
     override fun login() {
         RxPermissions(this).requestEach(READ_PHONE_STATE).bind({
             when {
@@ -196,7 +171,7 @@ class MainActivity : BaseActivity(), Router, MainPresenter.Router {
                     } else {
                         startActivityForResult(auth.getTokenRequest(), ULOGIN_REQUEST_CODE)
                     }
-                    refreshOptionsMenu()
+                    presenter.refreshOptionsMenu()
                 }
                 it.shouldShowRequestPermissionRationale -> {
                     AlertDialog.Builder(this)
@@ -231,12 +206,4 @@ class MainActivity : BaseActivity(), Router, MainPresenter.Router {
         })
     }
 
-    private fun refreshOptionsMenu() {
-        initNavigationView()
-        auth.isAuthorized().let { authorized ->
-            loginOption.isVisible = !authorized
-            profileOption.isVisible = authorized
-        }
-    }
-
 }

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

@@ -23,6 +23,8 @@ interface MainPresenter : Presenter {
     fun init(state: MainPresenterState?)
     fun start()
     fun refresh(tab: CurrentTab? = null, isForce: Boolean = false)
+    fun refreshNavigation()
+    fun refreshOptionsMenu()
     fun showPage(tab: CurrentTab, isForce: Boolean)
 
     interface Router {
@@ -68,6 +70,22 @@ class MainPresenterImpl(
         view.setNavigation(currentTab.itemId)
     }
 
+    override fun refreshNavigation() {
+        if (auth.isAuthorized()) {
+            view.showNavigation()
+        } else {
+            view.hideNavigation()
+        }
+    }
+
+    override fun refreshOptionsMenu() {
+        refreshNavigation()
+        auth.isAuthorized().let { authorized ->
+            view.showLoginOption(!authorized)
+            view.showProfileOption(authorized)
+        }
+    }
+
     override fun showPage(tab: CurrentTab, isForce: Boolean) {
         view.showPage(tab)
         val isFirst = !loadedTabs.contains(tab)
@@ -80,6 +98,11 @@ class MainPresenterImpl(
         }
     }
 
+    override fun onNavigationClicked(itemId: Int) {
+        currentTab = CurrentTab.getByItemId(itemId)
+        showPage(currentTab, false)
+    }
+
     override fun onToolbarClicked() {
         if (currentTab == HOME_TAB) {
             config.sortingMode = if (config.sortingMode == 0) 1 else 0

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

@@ -3,6 +3,7 @@ package com.sirekanyan.knigopis.feature
 import android.content.Context.MODE_PRIVATE
 import android.support.v7.app.AlertDialog
 import android.support.v7.widget.RecyclerView
+import android.view.MenuItem
 import android.view.View
 import android.widget.TextView
 import com.sirekanyan.knigopis.BuildConfig
@@ -38,9 +39,14 @@ interface MainView : BooksView, UsersView, NotesView {
     fun showProgress()
     fun hideProgress()
     fun hideSwipeRefresh()
+    fun showNavigation()
+    fun hideNavigation()
     fun setNavigation(itemId: Int)
+    fun showLoginOption(isVisible: Boolean)
+    fun showProfileOption(isVisible: Boolean)
 
     interface Callbacks : BooksView.Callbacks, UsersView.Callbacks, NotesView.Callbacks {
+        fun onNavigationClicked(itemId: Int)
         fun onToolbarClicked()
         fun onLoginOptionClicked()
         fun onProfileOptionClicked()
@@ -63,6 +69,8 @@ class MainViewImpl(
     private val booksAdapter = BooksAdapter(callbacks::onBookClicked, callbacks::onBookLongClicked)
     private val usersAdapter = UsersAdapter(callbacks::onUserClicked, callbacks::onUserLongClicked)
     private val notesAdapter = NotesAdapter(callbacks::onNoteClicked)
+    private val loginOption: MenuItem
+    private val profileOption: MenuItem
 
     init {
         toolbar.inflateMenu(R.menu.options)
@@ -97,6 +105,8 @@ class MainViewImpl(
                 else -> false
             }
         }
+        loginOption = toolbar.menu.findItem(R.id.option_login)
+        profileOption = toolbar.menu.findItem(R.id.option_profile)
         booksRecyclerView.adapter = booksAdapter
         usersRecyclerView.adapter = usersAdapter
         notesRecyclerView.adapter = notesAdapter
@@ -171,10 +181,31 @@ class MainViewImpl(
         swipeRefresh.isRefreshing = false
     }
 
+    override fun showNavigation() {
+        bottomNavigation.show()
+        bottomNavigation.setOnNavigationItemSelectedListener { item ->
+            callbacks.onNavigationClicked(item.itemId)
+            true
+        }
+    }
+
+    override fun hideNavigation() {
+        bottomNavigation.hide()
+        bottomNavigation.setOnNavigationItemSelectedListener(null)
+    }
+
     override fun setNavigation(itemId: Int) {
         bottomNavigation.selectedItemId = itemId
     }
 
+    override fun showLoginOption(isVisible: Boolean) {
+        loginOption.isVisible = isVisible
+    }
+
+    override fun showProfileOption(isVisible: Boolean) {
+        profileOption.isVisible = isVisible
+    }
+
     override fun showBookActions(book: BookDataModel) {
         val bookFullTitle = resources.getFullTitleString(book.title, book.author)
         dialogs.showDialog(