Переглянути джерело

Switch sorting mode by title click

Vadik Sirekanyan 7 роки тому
батько
коміт
341d2b8e38

+ 11 - 6
app/src/main/java/me/vadik/knigopis/BookRepository.kt

@@ -11,7 +11,7 @@ import java.util.*
 
 interface BookRepository {
 
-    fun <T : Comparable<T>> loadBooks(sortSelector: (PlannedBook) -> T): Single<List<Pair<Book, BookHeader>>>
+    fun loadBooks(): Single<List<Pair<Book, BookHeader>>>
 
     fun saveBook(bookId: String?, book: FinishedBookToSend, done: Boolean?): Completable
 
@@ -22,15 +22,20 @@ interface BookRepository {
 class BookRepositoryImpl(
     private val api: Endpoint,
     private val auth: KAuth,
-    private val resources: ResourceProvider
+    private val resources: ResourceProvider,
+    private val config: Configuration
 ) : BookRepository {
 
-    override fun <T : Comparable<T>> loadBooks(
-        sortSelector: (PlannedBook) -> T
-    ): Single<List<Pair<Book, BookHeader>>> =
+    override fun loadBooks(): Single<List<Pair<Book, BookHeader>>> =
         Singles.zip(
             api.getPlannedBooks(auth.getAccessToken())
-                .map { it.sortedByDescending(sortSelector) }
+                .map {
+                    if (config.sortingMode == 0) {
+                        it.sortedByDescending(PlannedBook::priority)
+                    } else {
+                        it.sortedByDescending(PlannedBook::updatedAt)
+                    }
+                }
                 .map { groupPlannedBooks(it) },
             api.getFinishedBooks(auth.getAccessToken())
                 .map { it.sortedByDescending(FinishedBook::order) }

+ 17 - 6
app/src/main/java/me/vadik/knigopis/Configuration.kt

@@ -4,19 +4,30 @@ import android.content.Context
 
 private const val PREFS_NAME = "knigopis-dev"
 private const val DEV_MODE_KEY = "dev-mode"
+private const val SORT_MODE_KEY = "sort-mode"
 
 interface Configuration {
-    fun isDevMode(): Boolean
-    fun setDevMode(enabled: Boolean)
+
+    var isDevMode: Boolean
+
+    var sortingMode: Int
+
 }
 
 class ConfigurationImpl(context: Context) : Configuration {
 
     private val prefs = context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
 
-    override fun isDevMode() =
-        prefs.getBoolean(DEV_MODE_KEY, false)
+    override var isDevMode: Boolean
+        get() = prefs.getBoolean(DEV_MODE_KEY, false)
+        set(enabled) {
+            prefs.edit().putBoolean(DEV_MODE_KEY, enabled).apply()
+        }
+
+    override var sortingMode: Int
+        get() = prefs.getInt(SORT_MODE_KEY, 0)
+        set(mode) {
+            prefs.edit().putInt(SORT_MODE_KEY, mode).apply()
+        }
 
-    override fun setDevMode(enabled: Boolean) =
-        prefs.edit().putBoolean(DEV_MODE_KEY, enabled).apply()
 }

+ 10 - 4
app/src/main/java/me/vadik/knigopis/MainActivity.kt

@@ -86,7 +86,7 @@ class MainActivity : AppCompatActivity(), Router {
     private lateinit var currentTab: CurrentTab
 
     override fun onCreate(savedInstanceState: Bundle?) {
-        if (config.isDevMode()) {
+        if (config.isDevMode) {
             setTheme(R.style.DevTheme)
         }
         super.onCreate(savedInstanceState)
@@ -261,7 +261,7 @@ class MainActivity : AppCompatActivity(), Router {
                     val designerView = dialogView.aboutDesignerText
                     versionView.text = BuildConfig.VERSION_NAME
                     var count = 0
-                    val enabled = config.isDevMode()
+                    val enabled = config.isDevMode
                     val max = if (enabled) {
                         VERSION_CLICK_COUNT_OFF
                     } else {
@@ -276,7 +276,7 @@ class MainActivity : AppCompatActivity(), Router {
                         if (++count == max) {
                             enabled.not().let {
                                 if (it) toast(R.string.common_info_dev)
-                                config.setDevMode(it)
+                                config.isDevMode = it
                                 recreate()
                             }
                         }
@@ -289,6 +289,12 @@ class MainActivity : AppCompatActivity(), Router {
         }
         loginOption = toolbar.menu.findItem(R.id.option_login)
         profileOption = toolbar.menu.findItem(R.id.option_profile)
+        toolbar.setOnClickListener {
+            if (currentTab == HOME_TAB) {
+                config.sortingMode = if (config.sortingMode == 0) 1 else 0
+                refresh(isForce = true)
+            }
+        }
     }
 
     private fun login() {
@@ -384,7 +390,7 @@ class MainActivity : AppCompatActivity(), Router {
     }
 
     private fun refreshHomeTab() {
-        bookRepository.loadBooks(PlannedBook::updatedAt)
+        bookRepository.loadBooks()
             .io2main()
             .showProgressBar()
             .subscribe({ books ->

+ 1 - 1
app/src/main/java/me/vadik/knigopis/dependency/modules.kt

@@ -29,7 +29,7 @@ private const val IMAGE_API_URL = "https://api.qwant.com/api/"
 private const val DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"
 
 val appModule = applicationContext {
-    bean { BookRepositoryImpl(get(), get(), get()) as BookRepository }
+    bean { BookRepositoryImpl(get(), get(), get(), get()) as BookRepository }
     bean { BookCoverSearchImpl(get(), BookCoverCacheImpl(get())) as BookCoverSearch }
     bean { KAuthImpl(get(), get()) as KAuth }
     bean { createMainEndpoint() }