Explorar o código

Added progress bar on edit-book appbar

sirekanyan %!s(int64=8) %!d(string=hai) anos
pai
achega
43ce72c549

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

@@ -31,10 +31,15 @@ fun Context.createEditBookIntent(bookId: String, finished: Boolean): Intent =
 
 class BookActivity : AppCompatActivity() {
 
+  private val config by lazy { ConfigurationImpl(applicationContext) as Configuration }
   private val api by lazy { app().baseApi.create(Endpoint::class.java) }
   private val repository by lazy {
     val auth = KAuthImpl(applicationContext, api)
-    BookRepositoryImpl(api, auth) as BookRepository
+    if (config.isDevMode()) {
+      BookRepositoryMock()
+    } else {
+      BookRepositoryImpl(api, auth)
+    }
   }
   private val imageSearch: BookCoverSearch by lazy {
     BookCoverSearchImpl(
@@ -73,9 +78,11 @@ class BookActivity : AppCompatActivity() {
     toolbar.setNavigationOnClickListener {
       finish()
     }
-    toolbar.setOnMenuItemClickListener {
-      when (it.itemId) {
+    val progressMenuItem = toolbar.menu.findItem(R.id.option_progress_bar)
+    toolbar.setOnMenuItemClickListener { saveMenuItem ->
+      when (saveMenuItem.itemId) {
         R.id.option_save_book -> {
+          hideKeyboard()
           if (readCheckbox.isChecked) {
             repository.saveBook(bookId, FinishedBookToSend(
                 titleEditText.text.toString(),
@@ -91,16 +98,24 @@ class BookActivity : AppCompatActivity() {
                 authorEditText.text.toString(),
                 notesTextArea.text.toString()
             ))
-          }.io2main().subscribe(
-              {
+          }.io2main()
+              .doOnSubscribe {
+                saveMenuItem.isVisible = false
+                progressMenuItem.isVisible = true
+                progressMenuItem.actionView.fadeIn()
+              }
+              .doOnError {
+                progressMenuItem.isVisible = false
+                progressMenuItem.actionView.fadeOut()
+                saveMenuItem.isVisible = true
+              }
+              .subscribe({
                 setResult(RESULT_OK)
                 finish()
-              },
-              {
+              }, {
                 toast("Ошибка при сохранении книги")
                 logError("cannot post planned book", it)
-              }
-          )
+              })
           true
         }
         else -> false

+ 9 - 0
app/src/main/java/me/vadik/knigopis/BookRepository.kt

@@ -29,4 +29,13 @@ class BookRepositoryImpl(
       } else {
         api.putPlannedBook(bookId, auth.getAccessToken(), book)
       }
+}
+
+class BookRepositoryMock : BookRepository {
+
+  override fun saveBook(bookId: String?, book: FinishedBookToSend): Completable =
+      Completable.fromAction { Thread.sleep(2000) }
+
+  override fun saveBook(bookId: String?, book: PlannedBookToSend): Completable =
+      Completable.fromAction { Thread.sleep(2000) }
 }

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

@@ -9,6 +9,7 @@ import android.util.Log
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
+import android.view.inputmethod.InputMethodManager
 import android.widget.Toast
 import com.bumptech.glide.RequestBuilder
 import com.bumptech.glide.load.DataSource
@@ -78,4 +79,11 @@ fun View.hide() {
 
 fun View.fadeIn() = animate().alpha(1f).setDuration(200).start()
 
-fun View.fadeOut() = animate().alpha(0f).setDuration(200).start()
+fun View.fadeOut() = animate().alpha(0f).setDuration(200).start()
+
+fun Activity.hideKeyboard() {
+  currentFocus?.let { view ->
+    (getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager)
+        .hideSoftInputFromWindow(view.windowToken, 0)
+  }
+}

+ 6 - 0
app/src/main/res/layout/menu_progress_bar.xml

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<ProgressBar xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="48dp"
+    android:layout_height="24dp"
+    android:alpha="0"
+    android:theme="@style/WhiteAccent" />

+ 10 - 1
app/src/main/res/menu/book_menu.xml

@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="utf-8"?>
 <menu xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto">
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools">
 
     <item
         android:id="@+id/option_save_book"
@@ -8,4 +9,12 @@
         android:title="@string/book_option_save"
         app:showAsAction="always" />
 
+    <item
+        android:id="@+id/option_progress_bar"
+        android:title="@string/book_option_save"
+        android:visible="false"
+        app:actionLayout="@layout/menu_progress_bar"
+        app:showAsAction="always"
+        tools:ignore="AlwaysShowAction" />
+
 </menu>

+ 4 - 0
app/src/main/res/values/styles.xml

@@ -21,4 +21,8 @@
         <item name="android:padding">4dp</item>
         <item name="android:textSize">14sp</item>
     </style>
+
+    <style name="WhiteAccent">
+        <item name="colorAccent">@color/white</item>
+    </style>
 </resources>