Sfoglia il codice sorgente

Added saving planned and finished books to server

sirekanyan 8 anni fa
parent
commit
0eb71df42c

+ 37 - 9
app/src/main/java/me/vadik/knigopis/BookActivity.kt

@@ -4,18 +4,26 @@ import android.os.Bundle
 import android.support.v7.app.AppCompatActivity
 import android.support.v7.widget.Toolbar
 import android.view.View
-import android.view.View.*
+import android.view.View.GONE
+import android.view.View.VISIBLE
 import android.widget.CheckBox
-import android.widget.EditText
 import android.widget.ImageView
+import android.widget.TextView
 import com.bumptech.glide.Glide
 import com.bumptech.glide.request.RequestOptions
 import me.vadik.knigopis.api.BookCoverSearch
 import me.vadik.knigopis.api.BookCoverSearchImpl
+import me.vadik.knigopis.api.Endpoint
 import me.vadik.knigopis.api.ImageEndpoint
+import me.vadik.knigopis.auth.KAuth
+import me.vadik.knigopis.auth.KAuthImpl
+import me.vadik.knigopis.model.FinishedBookToSend
+import me.vadik.knigopis.model.PlannedBookToSend
 
 class BookActivity : AppCompatActivity() {
 
+  private val api by lazy { app().baseApi.create(Endpoint::class.java) }
+  private val auth by lazy { KAuthImpl(applicationContext, api) as KAuth }
   private val imageSearch: BookCoverSearch by lazy {
     BookCoverSearchImpl(
         app().imageApi.create(ImageEndpoint::class.java),
@@ -23,14 +31,18 @@ class BookActivity : AppCompatActivity() {
     )
   }
   private val toolbar by lazy { findView<Toolbar>(R.id.toolbar) }
-  private val titleEditText by lazy { findView<EditText>(R.id.book_title_edit_text) }
-  private val coverImageView by lazy { findView<ImageView>(R.id.cover_image_view) }
+  private val titleEditText by lazy { findView<TextView>(R.id.book_title_edit_text) }
+  private val authorEditText by lazy { findView<TextView>(R.id.book_author_edit_text) }
+  private val dayEditText by lazy { findView<TextView>(R.id.book_day_edit_text) }
+  private val monthEditText by lazy { findView<TextView>(R.id.book_month_edit_text) }
+  private val yearEditText by lazy { findView<TextView>(R.id.book_year_edit_text) }
   private val readCheckbox by lazy { findView<CheckBox>(R.id.book_read_checkbox) }
+  private val coverImageView by lazy { findView<ImageView>(R.id.cover_image_view) }
   private val dateInputViews by lazy {
     arrayOf<View>(
-        findView(R.id.book_year_input),
+        findView(R.id.book_day_input),
         findView(R.id.book_month_input),
-        findView(R.id.book_day_input)
+        findView(R.id.book_year_input)
     )
   }
 
@@ -45,7 +57,23 @@ class BookActivity : AppCompatActivity() {
     toolbar.setOnMenuItemClickListener {
       when (it.itemId) {
         R.id.option_save_book -> {
-          finish()
+          if (readCheckbox.isChecked) {
+            api.postFinishedBook(auth.getAccessToken(), FinishedBookToSend(
+                titleEditText.text.toString(),
+                authorEditText.text.toString(),
+                dayEditText.text.toString(),
+                monthEditText.text.toString(),
+                yearEditText.text.toString()
+            ))
+          } else {
+            api.postPlannedBook(auth.getAccessToken(), PlannedBookToSend(
+                titleEditText.text.toString(),
+                authorEditText.text.toString()
+            ))
+          }.io2main().subscribe(
+              { finish() },
+              { logError("cannot post planned book", it) }
+          )
           true
         }
         else -> false
@@ -66,8 +94,8 @@ class BookActivity : AppCompatActivity() {
       }
     }
     readCheckbox.setOnCheckedChangeListener { _, checked ->
-      dateInputViews.forEach {
-        it.visibility = if (checked) VISIBLE else GONE
+      dateInputViews.forEach { view ->
+        view.visibility = if (checked) VISIBLE else GONE
       }
     }
   }

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

@@ -1,11 +1,11 @@
 package me.vadik.knigopis.api
 
+import io.reactivex.Completable
 import io.reactivex.Single
-import me.vadik.knigopis.model.FinishedBook
-import me.vadik.knigopis.model.Credentials
-import me.vadik.knigopis.model.User
-import me.vadik.knigopis.model.PlannedBook
+import me.vadik.knigopis.model.*
+import retrofit2.http.Body
 import retrofit2.http.GET
+import retrofit2.http.POST
 import retrofit2.http.Query
 
 interface Endpoint {
@@ -16,9 +16,21 @@ interface Endpoint {
   @GET("books")
   fun getFinishedBooks(@Query("access-token") accessToken: String): Single<List<FinishedBook>>
 
+  @POST("books")
+  fun postFinishedBook(
+      @Query("access-token") accessToken: String,
+      @Body book: FinishedBookToSend
+  ): Completable
+
   @GET("wishes")
   fun getPlannedBooks(@Query("access-token") accessToken: String): Single<List<PlannedBook>>
 
+  @POST("wishes")
+  fun postPlannedBook(
+      @Query("access-token") accessToken: String,
+      @Body book: PlannedBookToSend
+  ): Completable
+
   @GET("users/latest")
   fun getLatestUsers(): Single<Map<String, User>>
 

+ 4 - 0
app/src/main/java/me/vadik/knigopis/extensions.kt

@@ -7,6 +7,7 @@ import android.util.Log
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
+import io.reactivex.Completable
 import io.reactivex.Flowable
 import io.reactivex.Single
 import io.reactivex.android.schedulers.AndroidSchedulers
@@ -30,3 +31,6 @@ fun <T> Single<T>.io2main(): Single<T> =
 
 fun <T> Flowable<T>.io2main(): Flowable<T> =
     subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
+
+fun Completable.io2main(): Completable =
+    subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())

+ 10 - 0
app/src/main/java/me/vadik/knigopis/model/FinishedBookToSend.kt

@@ -0,0 +1,10 @@
+package me.vadik.knigopis.model
+
+class FinishedBookToSend(
+    val title: String,
+    val author: String,
+    val readDay: String,
+    val readMonth: String,
+    val readYear: String,
+    val notes: String = "// todo"
+)

+ 8 - 0
app/src/main/java/me/vadik/knigopis/model/PlannedBookToSend.kt

@@ -0,0 +1,8 @@
+package me.vadik.knigopis.model
+
+class PlannedBookToSend(
+    val title: String,
+    val author: String,
+    val priority: Int = 99,
+    val notes: String = "// todo"
+)

+ 4 - 0
app/src/main/res/layout/book_edit.xml

@@ -46,6 +46,7 @@
         app:layout_constraintTop_toBottomOf="@id/book_title_input">
 
         <EditText
+            android:id="@+id/book_author_edit_text"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:hint="@string/book_hint_author"
@@ -66,6 +67,7 @@
         tools:visibility="visible">
 
         <EditText
+            android:id="@+id/book_year_edit_text"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:hint="@string/book_hint_year"
@@ -86,6 +88,7 @@
         tools:visibility="visible">
 
         <EditText
+            android:id="@+id/book_month_edit_text"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:hint="@string/book_hint_month"
@@ -105,6 +108,7 @@
         tools:visibility="visible">
 
         <EditText
+            android:id="@+id/book_day_edit_text"
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
             android:hint="@string/book_hint_day"