Ver Fonte

Removed reference to books collection in activity

Vadik Sirekanyan há 7 anos atrás
pai
commit
8b03efcfba

+ 3 - 0
app/src/main/java/com/sirekanyan/knigopis/common/adapter/HeadedAdapter.kt

@@ -31,4 +31,7 @@ abstract class HeadedAdapter<T : HeadedModel>(
     override fun getItemViewType(position: Int): Int =
         if (getItem(position).isHeader) HEADER_TYPE else DATA_TYPE
 
+    fun getModelByPosition(position: Int): T =
+        getItem(position)
+
 }

+ 4 - 3
app/src/main/java/com/sirekanyan/knigopis/common/view/header/StickyHeaderImpl.kt

@@ -2,20 +2,21 @@ package com.sirekanyan.knigopis.common.view.header
 
 import android.view.View
 import com.sirekanyan.knigopis.R
+import com.sirekanyan.knigopis.common.adapter.HeadedAdapter
 import com.sirekanyan.knigopis.common.extensions.showNow
 import com.sirekanyan.knigopis.model.BookModel
 import kotlinx.android.synthetic.main.header.view.*
 
-class StickyHeaderImpl(private val books: List<BookModel>) : StickyHeader {
+class StickyHeaderImpl(private val adapter: HeadedAdapter<BookModel>) : StickyHeader {
 
     override fun getHeaderPositionForItem(itemPosition: Int) = itemPosition
 
     override fun getHeaderLayout(headerPosition: Int) = R.layout.header
 
-    override fun isHeader(itemPosition: Int) = books[itemPosition].isHeader
+    override fun isHeader(itemPosition: Int) = adapter.getModelByPosition(itemPosition).isHeader
 
     override fun bindHeaderData(header: View, headerPosition: Int) {
-        val group = books[headerPosition].group
+        val group = adapter.getModelByPosition(headerPosition).group
         header.headerTitle.text = group.title
         header.headerCount.text = group.count
         header.headerBottomDivider.showNow()

+ 16 - 19
app/src/main/java/com/sirekanyan/knigopis/feature/MainActivity.kt

@@ -33,8 +33,11 @@ import com.sirekanyan.knigopis.feature.profile.createProfileIntent
 import com.sirekanyan.knigopis.feature.user.createUserIntent
 import com.sirekanyan.knigopis.feature.users.UriItem
 import com.sirekanyan.knigopis.feature.users.UsersAdapter
-import com.sirekanyan.knigopis.model.*
+import com.sirekanyan.knigopis.model.BookDataModel
+import com.sirekanyan.knigopis.model.CurrentTab
 import com.sirekanyan.knigopis.model.CurrentTab.*
+import com.sirekanyan.knigopis.model.NoteModel
+import com.sirekanyan.knigopis.model.UserModel
 import com.sirekanyan.knigopis.repository.*
 import com.tbruyelle.rxpermissions2.RxPermissions
 import io.reactivex.Flowable
@@ -59,7 +62,6 @@ class MainActivity : BaseActivity(), Router, MainPresenter.Router {
     private val userRepository by inject<UserRepository>()
     private val noteRepository by inject<NoteRepository>()
     private val resourceProvider by inject<ResourceProvider>()
-    private val allBooks = mutableListOf<BookModel>()
     private val booksAdapter by lazy { BooksAdapter(::onBookClicked, ::onBookLongClicked) }
     private val usersAdapter by lazy { UsersAdapter(::onUserClicked, ::onUserLongClicked) }
     private val notesAdapter by lazy { NotesAdapter(::onNoteClicked) }
@@ -76,7 +78,7 @@ class MainActivity : BaseActivity(), Router, MainPresenter.Router {
         setContentView(R.layout.activity_main)
         val view = MainViewImpl(getRootView(), booksAdapter, usersAdapter, notesAdapter)
         MainPresenterImpl(view, this, config).apply { view.callbacks = this }
-        booksRecyclerView.addItemDecoration(HeaderItemDecoration(StickyHeaderImpl(allBooks)))
+        booksRecyclerView.addItemDecoration(HeaderItemDecoration(StickyHeaderImpl(booksAdapter)))
         val currentTabId = savedInstanceState?.getInt(CURRENT_TAB_KEY)
         val currentTab = currentTabId?.let { CurrentTab.getByItemId(it) }
         val defaultTab = if (auth.isAuthorized()) HOME_TAB else NOTES_TAB
@@ -287,8 +289,6 @@ class MainActivity : BaseActivity(), Router, MainPresenter.Router {
             .bind({ books ->
                 booksPlaceholder.show(books.isEmpty())
                 booksErrorPlaceholder.hide()
-                allBooks.clear()
-                allBooks.addAll(books)
                 booksAdapter.submitList(books)
                 loadedTabs.add(tab)
             }, {
@@ -367,21 +367,18 @@ class MainActivity : BaseActivity(), Router, MainPresenter.Router {
     private fun onBookLongClicked(book: BookDataModel) {
         val bookFullTitle = resources.getFullTitleString(book.title, book.author)
         val onDeleteConfirmed = {
-            val index = allBooks.indexOfFirst { it.id == book.id }
-            if (index >= 0) {
-                if (book.isFinished) {
-                    api.deleteFinishedBook(book.id, auth.getAccessToken())
-                } else {
-                    api.deletePlannedBook(book.id, auth.getAccessToken())
-                }
-                    .io2main()
-                    .bind({
-                        refresh(isForce = true)
-                    }, {
-                        toast(R.string.books_error_delete)
-                        logError("cannot delete finished book", it)
-                    })
+            if (book.isFinished) {
+                api.deleteFinishedBook(book.id, auth.getAccessToken())
+            } else {
+                api.deletePlannedBook(book.id, auth.getAccessToken())
             }
+                .io2main()
+                .bind({
+                    refresh(isForce = true)
+                }, {
+                    toast(R.string.books_error_delete)
+                    logError("cannot delete finished book", it)
+                })
         }
         val onDeleteClicked = {
             AlertDialog.Builder(this)

+ 1 - 5
app/src/main/java/com/sirekanyan/knigopis/feature/user/UserActivity.kt

@@ -20,7 +20,6 @@ import com.sirekanyan.knigopis.common.view.header.StickyHeaderImpl
 import com.sirekanyan.knigopis.createParameters
 import com.sirekanyan.knigopis.feature.book.createNewBookIntent
 import com.sirekanyan.knigopis.model.BookDataModel
-import com.sirekanyan.knigopis.model.BookModel
 import com.sirekanyan.knigopis.repository.Configuration
 import kotlinx.android.synthetic.main.user_activity.*
 import org.koin.android.ext.android.inject
@@ -41,7 +40,6 @@ class UserActivity : BaseActivity() {
     private val interactor by inject<UserInteractor>()
     private val dialogs by inject<DialogFactory>(parameters = createParameters())
     private val userId by lazy { intent.getStringExtra(EXTRA_USER_ID) }
-    private val books = mutableListOf<BookModel>()
     private val booksAdapter = UserBooksAdapter(::onBookLongClicked)
     private lateinit var unsubscribeOption: MenuItem
 
@@ -76,7 +74,7 @@ class UserActivity : BaseActivity() {
         supportActionBar?.setDisplayHomeAsUpEnabled(true)
         val layoutManager = LinearLayoutManager(this)
         userBooksRecyclerView.layoutManager = layoutManager
-        userBooksRecyclerView.addItemDecoration(HeaderItemDecoration(StickyHeaderImpl(books)))
+        userBooksRecyclerView.addItemDecoration(HeaderItemDecoration(StickyHeaderImpl(booksAdapter)))
         userBooksRecyclerView.adapter = booksAdapter
     }
 
@@ -92,8 +90,6 @@ class UserActivity : BaseActivity() {
             .doOnSuccess { userBooksRecyclerView.show() }
             .doOnError { userBooksErrorPlaceholder.show() }
             .bind({
-                books.clear()
-                books.addAll(it)
                 booksAdapter.submitList(it)
                 onBooksLoaded()
             }, {