Bläddra i källkod

Added ability to finish planned books

sirekanyan 8 år sedan
förälder
incheckning
8eca1c61c4

+ 21 - 13
app/src/main/java/me/vadik/knigopis/BookActivity.kt

@@ -91,25 +91,31 @@ class BookActivity : AppCompatActivity() {
             when (saveMenuItem.itemId) {
                 R.id.option_save_book -> {
                     hideKeyboard()
+                    val wasFinished = intent.getBooleanExtra(EXTRA_BOOK_FINISHED, false)
+                        .takeUnless { bookId == null }
                     if (progressSeekBar.progress == 100) {
                         repository.saveBook(
-                            bookId, FinishedBookToSend(
+                            bookId,
+                            FinishedBookToSend(
                                 titleEditText.text.toString(),
                                 authorEditText.text.toString(),
                                 dayEditText.text.toString(),
                                 monthEditText.text.toString(),
                                 yearEditText.text.toString(),
                                 notesTextArea.text.toString()
-                            )
+                            ),
+                            wasFinished
                         )
                     } else {
                         repository.saveBook(
-                            bookId, PlannedBookToSend(
+                            bookId,
+                            PlannedBookToSend(
                                 titleEditText.text.toString(),
                                 authorEditText.text.toString(),
                                 notesTextArea.text.toString(),
                                 progressSeekBar.progress
-                            )
+                            ),
+                            wasFinished
                         )
                     }.io2main()
                         .doOnSubscribe {
@@ -160,7 +166,7 @@ class BookActivity : AppCompatActivity() {
                 progressText.text = "$progress%"
                 if (progress == 100) {
                     bookDateInputGroup.showNow()
-                    if (yearEditText.text.isEmpty() && monthEditText.text.isEmpty() && dayEditText.text.isEmpty()) {
+                    if (bookId != null && yearEditText.text.isEmpty() && monthEditText.text.isEmpty() && dayEditText.text.isEmpty()) {
                         yearEditText.setText(today.get(Calendar.YEAR).toString())
                         monthEditText.setText(today.get(Calendar.MONTH).inc().toString())
                         dayEditText.setText(today.get(Calendar.DAY_OF_MONTH).toString())
@@ -174,14 +180,16 @@ class BookActivity : AppCompatActivity() {
 
     override fun onStart() {
         super.onStart()
-        titleEditText.setText(intent.getStringExtra(EXTRA_BOOK_TITLE))
-        authorEditText.setText(intent.getStringExtra(EXTRA_BOOK_AUTHOR))
-        progressSeekBar.setProgressSmoothly(intent.getIntExtra(EXTRA_BOOK_PROGRESS, 0))
-        notesTextArea.setText(intent.getStringExtra(EXTRA_BOOK_NOTES))
-        if (intent.getBooleanExtra(EXTRA_BOOK_FINISHED, false)) {
-            yearEditText.setText(intent.getStringExtra(EXTRA_BOOK_YEAR))
-            monthEditText.setText(intent.getStringExtra(EXTRA_BOOK_MONTH))
-            dayEditText.setText(intent.getStringExtra(EXTRA_BOOK_DAY))
+        if (bookId != null) {
+            titleEditText.setText(intent.getStringExtra(EXTRA_BOOK_TITLE))
+            authorEditText.setText(intent.getStringExtra(EXTRA_BOOK_AUTHOR))
+            progressSeekBar.setProgressSmoothly(intent.getIntExtra(EXTRA_BOOK_PROGRESS, 0))
+            notesTextArea.setText(intent.getStringExtra(EXTRA_BOOK_NOTES))
+            if (intent.getBooleanExtra(EXTRA_BOOK_FINISHED, false)) {
+                yearEditText.setText(intent.getStringExtra(EXTRA_BOOK_YEAR))
+                monthEditText.setText(intent.getStringExtra(EXTRA_BOOK_MONTH))
+                dayEditText.setText(intent.getStringExtra(EXTRA_BOOK_DAY))
+            }
         }
     }
 }

+ 22 - 14
app/src/main/java/me/vadik/knigopis/BookRepository.kt

@@ -7,8 +7,8 @@ import me.vadik.knigopis.model.FinishedBookToSend
 import me.vadik.knigopis.model.PlannedBookToSend
 
 interface BookRepository {
-    fun saveBook(bookId: String?, book: FinishedBookToSend): Completable
-    fun saveBook(bookId: String?, book: PlannedBookToSend): Completable
+    fun saveBook(bookId: String?, book: FinishedBookToSend, done: Boolean?): Completable
+    fun saveBook(bookId: String?, book: PlannedBookToSend, done: Boolean?): Completable
 }
 
 class BookRepositoryImpl(
@@ -16,26 +16,34 @@ class BookRepositoryImpl(
     private val auth: KAuth
 ) : BookRepository {
 
-    override fun saveBook(bookId: String?, book: FinishedBookToSend) =
-        if (bookId == null) {
-            api.postFinishedBook(auth.getAccessToken(), book)
-        } else {
-            api.putFinishedBook(bookId, auth.getAccessToken(), book)
+    override fun saveBook(bookId: String?, book: FinishedBookToSend, done: Boolean?): Completable =
+        when {
+            bookId == null -> api.createFinishedBook(auth.getAccessToken(), book)
+            done == null -> Completable.error(UnsupportedOperationException())
+            done -> api.updateFinishedBook(bookId, auth.getAccessToken(), book)
+            else -> {
+                api.createFinishedBook(auth.getAccessToken(), book)
+                    .andThen(api.deletePlannedBook(bookId, auth.getAccessToken()))
+            }
         }
 
-    override fun saveBook(bookId: String?, book: PlannedBookToSend) =
-        if (bookId == null) {
-            api.postPlannedBook(auth.getAccessToken(), book)
-        } else {
-            api.putPlannedBook(bookId, auth.getAccessToken(), book)
+    override fun saveBook(bookId: String?, book: PlannedBookToSend, done: Boolean?): Completable =
+        when {
+            bookId == null -> api.createPlannedBook(auth.getAccessToken(), book)
+            done == null -> Completable.error(UnsupportedOperationException())
+            !done -> api.updatePlannedBook(bookId, auth.getAccessToken(), book)
+            else -> {
+                api.createPlannedBook(auth.getAccessToken(), book)
+                    .andThen(api.deleteFinishedBook(bookId, auth.getAccessToken()))
+            }
         }
 }
 
 class BookRepositoryMock : BookRepository {
 
-    override fun saveBook(bookId: String?, book: FinishedBookToSend): Completable =
+    override fun saveBook(bookId: String?, book: FinishedBookToSend, done: Boolean?): Completable =
         Completable.fromAction { Thread.sleep(2000) }
 
-    override fun saveBook(bookId: String?, book: PlannedBookToSend): Completable =
+    override fun saveBook(bookId: String?, book: PlannedBookToSend, done: Boolean?): Completable =
         Completable.fromAction { Thread.sleep(2000) }
 }

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

@@ -99,7 +99,7 @@ class MainActivity : AppCompatActivity(), Router {
         when (book) {
             is PlannedBook -> startActivityForResult(createEditBookIntent(book), BOOK_REQUEST_CODE)
             is FinishedBook -> startActivityForResult(createEditBookIntent(book), BOOK_REQUEST_CODE)
-            else -> UnsupportedOperationException()
+            else -> throw UnsupportedOperationException()
         }
     }
 

+ 4 - 4
app/src/main/java/me/vadik/knigopis/api/Endpoint.kt

@@ -17,14 +17,14 @@ interface Endpoint {
     fun getFinishedBook(@Path("id") id: String): Single<FinishedBook>
 
     @PUT("books/{id}")
-    fun putFinishedBook(
+    fun updateFinishedBook(
         @Path("id") id: String,
         @Query("access-token") accessToken: String,
         @Body book: FinishedBookToSend
     ): Completable
 
     @POST("books")
-    fun postFinishedBook(
+    fun createFinishedBook(
         @Query("access-token") accessToken: String,
         @Body book: FinishedBookToSend
     ): Completable
@@ -42,14 +42,14 @@ interface Endpoint {
     fun getPlannedBook(@Path("id") id: String): Single<PlannedBook>
 
     @PUT("wishes/{id}")
-    fun putPlannedBook(
+    fun updatePlannedBook(
         @Path("id") id: String,
         @Query("access-token") accessToken: String,
         @Body book: PlannedBookToSend
     ): Completable
 
     @POST("wishes")
-    fun postPlannedBook(
+    fun createPlannedBook(
         @Query("access-token") accessToken: String,
         @Body book: PlannedBookToSend
     ): Completable

+ 1 - 1
app/src/main/res/drawable/light_progress_bar_background.xml

@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
 <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
     <item android:id="@android:id/progress">
-        <clip android:drawable="@color/colorPrimaryLight" />
+        <clip android:drawable="@color/colorPrimaryLightest" />
     </item>
 </layer-list>

+ 1 - 0
app/src/main/res/values/colors.xml

@@ -14,6 +14,7 @@
     <color name="colorPrimary">#673AB7</color>
     <color name="colorPrimaryDark">#512DA8</color>
     <color name="colorPrimaryLight">#9575CD</color>
+    <color name="colorPrimaryLightest">#B39DDB</color>
     <color name="colorAccent">#FF3D00</color>
 
     <color name="white">#FFFFFF</color>