Browse Source

Initial chapter download icon implementation

arkon 4 years ago
parent
commit
6dd280205b

+ 36 - 0
app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChapterDownloadView.kt

@@ -0,0 +1,36 @@
+package eu.kanade.tachiyomi.ui.manga.chapter
+
+import android.content.Context
+import android.util.AttributeSet
+import android.view.LayoutInflater
+import android.widget.FrameLayout
+import androidx.core.view.isVisible
+import eu.kanade.tachiyomi.databinding.ChapterDownloadViewBinding
+
+class ChapterDownloadView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) :
+    FrameLayout(context, attrs) {
+
+    private val binding: ChapterDownloadViewBinding
+
+    init {
+        binding = ChapterDownloadViewBinding.inflate(LayoutInflater.from(context), this, false)
+        addView(binding.root)
+    }
+
+    fun setState(state: State) {
+        binding.downloadIconBorder.isVisible = state == State.DOWNLOAD || state == State.ERROR
+        binding.downloadIcon.isVisible = state == State.DOWNLOAD || state == State.DOWNLOADING
+
+        binding.downloadProgress.isVisible = state == State.DOWNLOADING || state == State.QUEUED
+
+        binding.downloadedIcon.isVisible = state == State.DOWNLOADED
+    }
+
+    enum class State {
+        DOWNLOAD,
+        QUEUED,
+        DOWNLOADING,
+        ERROR,
+        DOWNLOADED,
+    }
+}

+ 6 - 6
app/src/main/java/eu/kanade/tachiyomi/ui/manga/chapter/ChapterHolder.kt

@@ -71,13 +71,13 @@ class ChapterHolder(
         notifyStatus(item.status)
     }
 
-    fun notifyStatus(status: Int) = with(binding.downloadText) {
+    private fun notifyStatus(status: Int) = with(binding.download) {
         when (status) {
-            Download.QUEUE -> setText(R.string.chapter_queued)
-            Download.DOWNLOADING -> setText(R.string.chapter_downloading)
-            Download.DOWNLOADED -> setText(R.string.chapter_downloaded)
-            Download.ERROR -> setText(R.string.chapter_error)
-            else -> text = ""
+            Download.QUEUE -> setState(ChapterDownloadView.State.QUEUED)
+            Download.DOWNLOADING -> setState(ChapterDownloadView.State.DOWNLOADING)
+            Download.DOWNLOADED -> setState(ChapterDownloadView.State.DOWNLOADED)
+            Download.ERROR -> setState(ChapterDownloadView.State.ERROR)
+            else -> setState(ChapterDownloadView.State.DOWNLOAD)
         }
     }
 }

+ 12 - 0
app/src/main/res/drawable/border_circle.xml

@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="oval"
+    android:thicknessRatio="2">
+    <solid android:color="@android:color/transparent" />
+    <size
+        android:width="25dp"
+        android:height="25dp" />
+    <stroke
+        android:width="2dp"
+        android:color="?colorAccent" />
+</shape>

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

@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M11,4H13V16L18.5,10.5L19.92,11.92L12,19.84L4.08,11.92L5.5,10.5L11,16V4Z" />
+</vector>

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

@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="24"
+    android:viewportHeight="24">
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM10,17l-5,-5 1.41,-1.41L10,14.17l7.59,-7.59L19,8l-9,9z" />
+</vector>

+ 50 - 0
app/src/main/res/layout/chapter_download_view.xml

@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="24dp"
+    android:layout_height="24dp"
+    android:background="?selectableItemBackgroundBorderless">
+
+    <ImageView
+        android:id="@+id/download_icon_border"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        app:srcCompat="@drawable/border_circle"
+        app:tint="@color/material_on_surface_emphasis_medium"
+        tools:ignore="ContentDescription" />
+
+    <ImageView
+        android:id="@+id/download_icon"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:padding="4dp"
+        app:srcCompat="@drawable/ic_arrow_downward_24dp"
+        app:tint="@color/material_on_surface_emphasis_medium"
+        tools:ignore="ContentDescription" />
+
+    <com.google.android.material.progressindicator.CircularProgressIndicator
+        android:id="@+id/download_progress"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:indeterminate="true"
+        android:padding="0dp"
+        android:visibility="gone"
+        app:indicatorColor="@color/material_on_surface_emphasis_medium"
+        app:indicatorInset="0dp"
+        app:indicatorSize="24dp"
+        app:trackThickness="2dp" />
+
+    <ImageView
+        android:id="@+id/downloaded_icon"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        app:srcCompat="@drawable/ic_check_circle_24dp"
+        app:tint="@color/material_on_surface_emphasis_medium"
+        tools:ignore="ContentDescription" />
+
+    <!--    chapter_error -->
+
+    <!--    chapter_queued-->
+
+</FrameLayout>

+ 6 - 9
app/src/main/res/layout/chapters_item.xml

@@ -31,7 +31,7 @@
         android:layout_marginTop="12dp"
         android:ellipsize="end"
         android:maxLines="1"
-        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintEnd_toStartOf="@+id/download"
         app:layout_constraintStart_toEndOf="@+id/bookmark_icon"
         app:layout_constraintTop_toTopOf="parent"
         tools:text="Title" />
@@ -45,19 +45,16 @@
         android:ellipsize="end"
         android:singleLine="true"
         app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintEnd_toStartOf="@+id/download_text"
+        app:layout_constraintEnd_toStartOf="@+id/download"
         app:layout_constraintStart_toStartOf="parent"
         tools:text="22/02/2016 • Scanlator • Page: 45" />
 
-    <TextView
-        android:id="@+id/download_text"
-        style="@style/TextAppearance.Regular.Caption.Hint"
+    <eu.kanade.tachiyomi.ui.manga.chapter.ChapterDownloadView
+        android:id="@+id/download"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_marginBottom="8dp"
-        android:textAllCaps="true"
+        app:layout_constraintTop_toTopOf="parent"
         app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintEnd_toEndOf="parent"
-        tools:text="DOWNLOADED" />
+        app:layout_constraintEnd_toEndOf="parent" />
 
 </androidx.constraintlayout.widget.ConstraintLayout>