Bladeren bron

Added dialog for adding books to user's own list

Vadik Sirekanyan 7 jaren geleden
bovenliggende
commit
33a4408948

+ 3 - 2
app/src/main/java/me/vadik/knigopis/BookActivity.kt

@@ -30,10 +30,11 @@ private const val EXTRA_BOOK_FINISHED = "me.vadik.knigopis.extra_book_finished"
 
 fun Context.createNewBookIntent() = Intent(this, BookActivity::class.java)
 
-fun Context.createNewBookIntent(title: String, author: String): Intent =
+fun Context.createNewBookIntent(title: String, author: String, progress: Int? = null): Intent =
     Intent(this, BookActivity::class.java)
         .putExtra(EXTRA_BOOK_TITLE, title)
         .putExtra(EXTRA_BOOK_AUTHOR, author)
+        .putExtra(EXTRA_BOOK_PROGRESS, progress)
 
 fun Context.createEditBookIntent(book: PlannedBook): Intent =
     Intent(this, BookActivity::class.java)
@@ -168,8 +169,8 @@ class BookActivity : AppCompatActivity() {
         })
         titleEditText.setText(intent.getStringExtra(EXTRA_BOOK_TITLE))
         authorEditText.setText(intent.getStringExtra(EXTRA_BOOK_AUTHOR))
+        progressSeekBar.setProgressSmoothly(intent.getIntExtra(EXTRA_BOOK_PROGRESS, 0))
         if (bookId != null) {
-            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))

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

@@ -23,7 +23,7 @@ import me.vadik.knigopis.adapters.users.UsersAdapter
 import me.vadik.knigopis.api.BookCoverSearch
 import me.vadik.knigopis.api.Endpoint
 import me.vadik.knigopis.auth.KAuth
-import me.vadik.knigopis.dialog.BottomSheetDialogFactory
+import me.vadik.knigopis.dialog.DialogFactory
 import me.vadik.knigopis.model.Book
 import me.vadik.knigopis.model.CurrentTab
 import me.vadik.knigopis.model.CurrentTab.*
@@ -48,11 +48,11 @@ class MainActivity : AppCompatActivity(), Router {
     private val bookCoverSearch by inject<BookCoverSearch>()
     private val config by inject<Configuration>()
     private val auth by inject<KAuth>()
+    private val dialogs by inject<DialogFactory> { mapOf("activity" to this) }
     private val bookRepository by inject<BookRepository>()
     private val allBooks = mutableListOf<Book>()
     private val allUsers = mutableListOf<Subscription>()
     private val allNotes = mutableListOf<Note>()
-    private val dialogs by lazy { BottomSheetDialogFactory(this) }
     private val booksAdapter by lazy { BooksAdapter(bookCoverSearch, api, auth, this, dialogs) }
     private val allBooksAdapter by lazy { booksAdapter.build(allBooks) }
     private val usersAdapter by lazy { UsersAdapter(allUsers, this, dialogs) }

+ 13 - 2
app/src/main/java/me/vadik/knigopis/adapters/books/BooksAdapter.kt

@@ -4,10 +4,13 @@ import android.support.v7.widget.RecyclerView
 import android.view.ViewGroup
 import me.vadik.knigopis.R
 import me.vadik.knigopis.createNewBookIntent
+import me.vadik.knigopis.dialog.DialogFactory
+import me.vadik.knigopis.dialog.DialogItem
 import me.vadik.knigopis.inflate
 
 class BooksAdapter(
-    private val books: List<UserBook>
+    private val books: List<UserBook>,
+    private val dialogs: DialogFactory
 ) : RecyclerView.Adapter<BookViewHolder>() {
 
     override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) =
@@ -23,7 +26,15 @@ class BooksAdapter(
         holder.notes = book.notes
         val context = holder.view.context
         holder.view.setOnLongClickListener {
-            context.startActivity(context.createNewBookIntent(book.title, book.author))
+            dialogs.showDialog(
+                book.title + " — " + book.author,
+                DialogItem(R.string.add_book_todo, R.drawable.ic_playlist_add) {
+                    context.startActivity(context.createNewBookIntent(book.title, book.author))
+                },
+                DialogItem(R.string.add_book_done, R.drawable.ic_playlist_add_check) {
+                    context.startActivity(context.createNewBookIntent(book.title, book.author, 100))
+                }
+            )
             true
         }
     }

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

@@ -11,6 +11,8 @@ import me.vadik.knigopis.auth.KAuth
 import me.vadik.knigopis.auth.KAuthImpl
 import me.vadik.knigopis.common.ResourceProvider
 import me.vadik.knigopis.common.ResourceProviderImpl
+import me.vadik.knigopis.dialog.BottomSheetDialogFactory
+import me.vadik.knigopis.dialog.DialogFactory
 import me.vadik.knigopis.model.ImageThumbnail
 import okhttp3.OkHttpClient
 import okhttp3.logging.HttpLoggingInterceptor
@@ -31,6 +33,7 @@ val appModule = applicationContext {
     bean { createImageEndpoint() }
     bean { ConfigurationImpl(get()) as Configuration }
     bean { ResourceProviderImpl(get()) as ResourceProvider }
+    factory { BottomSheetDialogFactory(it["activity"]) as DialogFactory }
 }
 
 private fun createMainEndpoint() =

+ 3 - 1
app/src/main/java/me/vadik/knigopis/user/UserActivity.kt

@@ -17,6 +17,7 @@ import me.vadik.knigopis.adapters.books.UserBook
 import me.vadik.knigopis.adapters.users.toSocialNetwork
 import me.vadik.knigopis.api.Endpoint
 import me.vadik.knigopis.auth.KAuth
+import me.vadik.knigopis.dialog.DialogFactory
 import me.vadik.knigopis.model.note.Identity
 import me.vadik.knigopis.model.subscription.Subscription
 import org.koin.android.ext.android.inject
@@ -43,9 +44,10 @@ class UserActivity : AppCompatActivity() {
 
     private val api by inject<Endpoint>()
     private val auth by inject<KAuth>()
+    private val dialogs by inject<DialogFactory> { mapOf("activity" to this) }
     private val userId by lazy { intent.getStringExtra(EXTRA_USER_ID) }
     private val books = mutableListOf<UserBook>()
-    private val booksAdapter = BooksAdapter(books)
+    private val booksAdapter = BooksAdapter(books, dialogs)
     private lateinit var menuItems: Map<Int, UriItem>
 
     override fun onCreate(savedInstanceState: Bundle?) {

+ 9 - 0
app/src/main/res/drawable/ic_playlist_add.xml

@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M14,10L2,10v2h12v-2zM14,6L2,6v2h12L14,6zM18,14v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zM2,16h8v-2L2,14v2z"/>
+</vector>

+ 9 - 0
app/src/main/res/drawable/ic_playlist_add_check.xml

@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M14,10L2,10v2h12v-2zM14,6L2,6v2h12L14,6zM2,16h8v-2L2,14v2zM21.5,11.5L23,13l-6.99,7 -4.51,-4.5L13,14l3.01,3 5.49,-5.5z"/>
+</vector>

+ 9 - 4
app/src/main/res/values-ru/strings.xml

@@ -32,10 +32,8 @@
     <string name="book_read_checkbox">Прочитана</string>
 
     <!-- book menu -->
-    <array name="book_context_menu">
-        <item>Редактировать</item>
-        <item>Удалить</item>
-    </array>
+    <string name="book_option_edit">Редактировать</string>
+    <string name="book_option_delete">Удалить</string>
     <string name="book_delete_confirmation_title">Подтверждение</string>
     <string name="book_delete_confirm_text">Удалить книгу \"%s\"?</string>
     <string name="book_cancel_delete">Отмена</string>
@@ -43,6 +41,13 @@
     <string name="cannot_delete_book">Не получилось удалить</string>
     <string name="book_hint_notes">Примечания</string>
 
+    <!-- following menu -->
+    <string name="user_option_delete">Отписаться</string>
+
+    <!-- user menu -->
+    <string name="add_book_todo">К прочтению</string>
+    <string name="add_book_done">Прочитано</string>
+
     <!-- about -->
     <string name="about_idea">Идея:\nhttp://knigopis.com</string>
     <string name="about_developer">Разработка:\nvadik@sirekanyan.com</string>

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

@@ -47,6 +47,10 @@
     <!-- following menu -->
     <string name="user_option_delete">Unsubscribe</string>
 
+    <!-- user menu -->
+    <string name="add_book_todo">Todo</string>
+    <string name="add_book_done">Done</string>
+
     <!-- notes -->
     <string name="note_date_delimiter" translatable="false">/</string>