Răsfoiți Sursa

Fixed crashes on old devices

Vadik Sirekanyan 6 ani în urmă
părinte
comite
8ac7268723

+ 15 - 5
app/src/main/java/com/sirekanyan/knigopis/common/extensions/ImageView.kt

@@ -4,7 +4,9 @@ import android.content.Context
 import android.graphics.ColorMatrix
 import android.graphics.ColorMatrixColorFilter
 import android.graphics.drawable.Drawable
+import android.util.TypedValue
 import android.widget.ImageView
+import androidx.annotation.AttrRes
 import com.bumptech.glide.Glide
 import com.bumptech.glide.load.DataSource
 import com.bumptech.glide.load.engine.GlideException
@@ -16,23 +18,31 @@ import com.sirekanyan.knigopis.R
 
 private const val DARK_SATURATION = 0.33f
 
-private fun ImageView.setImage(url: String?, requestOptions: RequestOptions, placeholder: Int) {
+private fun ImageView.setImage(
+    url: String?,
+    requestOptions: RequestOptions,
+    @AttrRes placeholderAttr: Int
+) {
     if (isDarkTheme) {
         val colorMatrix = ColorMatrix().apply { setSaturation(DARK_SATURATION) }
         colorFilter = ColorMatrixColorFilter(colorMatrix)
     }
+    val placeholder = TypedValue().let { typedValue ->
+        context.theme.resolveAttribute(placeholderAttr, typedValue, false)
+        typedValue.data
+    }
     Glide.with(context)
         .load(url)
-        .apply(requestOptions.placeholder(placeholder).theme(context.theme))
+        .apply(requestOptions.placeholder(placeholder))
         .transition(DrawableTransitionOptions.withCrossFade())
         .into(this)
 }
 
-fun ImageView.setCircleImage(url: String?, placeholder: Int? = null) {
+fun ImageView.setCircleImage(url: String?, @AttrRes placeholder: Int? = null) {
     setImage(
         url,
         RequestOptions.circleCropTransform(),
-        placeholder ?: R.drawable.oval_placeholder_background
+        placeholder ?: R.attr.oval_placeholder_drawable
     )
 }
 
@@ -40,7 +50,7 @@ fun ImageView.setSquareImage(url: String?) {
     setImage(
         url,
         RequestOptions.centerCropTransform(),
-        R.drawable.rectangle_placeholder_background
+        R.attr.rectangle_placeholder_drawable
     )
 }
 

+ 1 - 1
app/src/main/java/com/sirekanyan/knigopis/feature/profile/ProfileView.kt

@@ -116,7 +116,7 @@ class ProfileViewImpl(
             profileTodoCount to todo,
             profileDoingCount to doing,
             profileDoneCount to done
-        ).forEach { view, list ->
+        ).forEach { (view, list) ->
             view.setOnClickListener {
                 if (!list.isEmpty()) {
                     showFooterBook(list.pop())

+ 1 - 1
app/src/main/java/com/sirekanyan/knigopis/feature/user/UserView.kt

@@ -68,7 +68,7 @@ class UserViewImpl(
     }
 
     override fun setImage(url: String?) {
-        userImage.setCircleImage(url, R.drawable.oval_dark_placeholder_background)
+        userImage.setCircleImage(url, R.attr.oval_dark_placeholder_drawable)
         userImage.setElevationRes(R.dimen.image_view_elevation)
     }
 

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

@@ -1,9 +0,0 @@
-<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="#CCCCCC"
-        android:pathData="M21.99,4c0,-1.1 -0.89,-2 -1.99,-2L4,2c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h14l4,4 -0.01,-18zM18,14L6,14v-2h12v2zM18,11L6,11L6,9h12v2zM18,8L6,8L6,6h12v2z"/>
-</vector>

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

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <shape xmlns:android="http://schemas.android.com/apk/res/android"
     android:shape="oval">
-    <solid android:color="?attr/image_dark_placeholder_color" />
+    <solid android:color="@color/light_image_dark_placeholder_color" />
 </shape>

+ 5 - 0
app/src/main/res/drawable/oval_dark_placeholder_background_dark.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="oval">
+    <solid android:color="@color/dark_image_dark_placeholder_color" />
+</shape>

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

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <shape xmlns:android="http://schemas.android.com/apk/res/android"
     android:shape="oval">
-    <solid android:color="?attr/image_placeholder_color" />
+    <solid android:color="@color/light_image_placeholder_color" />
 </shape>

+ 5 - 0
app/src/main/res/drawable/oval_placeholder_background_dark.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="oval">
+    <solid android:color="@color/dark_image_placeholder_color" />
+</shape>

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

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <shape xmlns:android="http://schemas.android.com/apk/res/android"
     android:shape="rectangle">
-    <solid android:color="?attr/image_placeholder_color" />
+    <solid android:color="@color/light_image_placeholder_color" />
 </shape>

+ 5 - 0
app/src/main/res/drawable/rectangle_placeholder_background_dark.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <solid android:color="@color/dark_image_placeholder_color" />
+</shape>

+ 2 - 2
app/src/main/res/layout/book.xml

@@ -24,8 +24,8 @@
         android:layout_gravity="center_vertical"
         android:layout_marginStart="16dp"
         android:layout_marginLeft="16dp"
-        android:background="@drawable/rectangle_placeholder_background"
-        tools:ignore="ContentDescription" />
+        tools:ignore="ContentDescription"
+        tools:src="@drawable/rectangle_placeholder_background" />
 
     <LinearLayout
         android:layout_width="match_parent"

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

@@ -68,13 +68,13 @@
                 android:layout_height="0dp"
                 android:layout_marginLeft="16dp"
                 android:layout_marginRight="16dp"
-                android:background="@drawable/rectangle_placeholder_background"
                 android:visibility="gone"
                 app:layout_constraintBottom_toBottomOf="@id/book_author_input"
                 app:layout_constraintDimensionRatio="3:4"
                 app:layout_constraintRight_toRightOf="parent"
                 app:layout_constraintTop_toTopOf="@id/book_title_input"
                 tools:ignore="ContentDescription"
+                tools:src="@drawable/rectangle_placeholder_background"
                 tools:visibility="visible" />
 
             <TextView
@@ -160,14 +160,12 @@
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
                 android:layout_margin="16dp"
-                android:background="@drawable/text_area_background"
-                android:drawableEnd="@drawable/ic_comment_gray"
-                android:drawableRight="@drawable/ic_comment_gray"
                 android:drawablePadding="16dp"
                 android:hint="@string/book.hint.notes"
                 android:inputType="textCapSentences|textMultiLine"
                 android:minLines="2"
                 android:padding="16dp"
+                app:background="@drawable/text_area_background"
                 app:layout_constraintBottom_toBottomOf="parent"
                 app:layout_constraintTop_toBottomOf="@id/bookYearInput"
                 tools:text="Неистово плюсую" />

+ 4 - 4
app/src/main/res/layout/note.xml

@@ -12,8 +12,8 @@
         android:layout_height="40dp"
         android:layout_marginStart="16dp"
         android:layout_marginLeft="16dp"
-        android:background="@drawable/rectangle_placeholder_background"
-        tools:ignore="ContentDescription" />
+        tools:ignore="ContentDescription"
+        tools:src="@drawable/rectangle_placeholder_background" />
 
     <LinearLayout
         android:layout_width="match_parent"
@@ -86,8 +86,8 @@
                 android:layout_height="32dp"
                 android:layout_marginStart="8dp"
                 android:layout_marginLeft="8dp"
-                android:src="@drawable/oval_placeholder_background"
-                tools:ignore="ContentDescription" />
+                tools:ignore="ContentDescription"
+                tools:src="@drawable/oval_placeholder_background" />
 
         </LinearLayout>
 

+ 1 - 1
app/src/main/res/layout/profile_activity.xml

@@ -26,7 +26,7 @@
         android:layout_width="128dp"
         android:layout_height="128dp"
         android:layout_gravity="center_horizontal"
-        tools:src="@drawable/oval_placeholder_background" />
+        android:src="@drawable/oval_dark_placeholder_background" />
 
     <ViewSwitcher
         android:id="@+id/profileNicknameSwitcher"

+ 2 - 2
app/src/main/res/layout/user.xml

@@ -12,8 +12,8 @@
         android:layout_width="40dp"
         android:layout_height="40dp"
         android:layout_gravity="center_vertical"
-        android:background="@drawable/oval_placeholder_background"
-        tools:ignore="ContentDescription" />
+        tools:ignore="ContentDescription"
+        tools:src="@drawable/oval_placeholder_background" />
 
     <TextView
         android:id="@+id/userNickname"

+ 2 - 2
app/src/main/res/layout/user_activity.xml

@@ -43,7 +43,6 @@
         android:layout_marginLeft="16dp"
         android:layout_marginTop="56dp"
         android:layout_marginRight="16dp"
-        android:src="@drawable/oval_dark_placeholder_background"
         app:appBarLayout="@+id/app_bar"
         app:appBarMaxHeight="@dimen/app_bar_height"
         app:appBarMinHeight="@dimen/toolbar_height"
@@ -52,7 +51,8 @@
         app:toWidth="40dp"
         app:toX="64dp"
         app:toY="8dp"
-        tools:ignore="ContentDescription" />
+        tools:ignore="ContentDescription"
+        tools:src="@drawable/oval_dark_placeholder_background" />
 
     <androidx.recyclerview.widget.RecyclerView
         android:id="@+id/userBooksRecyclerView"

+ 2 - 2
app/src/main/res/layout/user_book.xml

@@ -13,8 +13,8 @@
         android:layout_height="40dp"
         android:layout_marginStart="16dp"
         android:layout_marginLeft="16dp"
-        android:background="@drawable/rectangle_placeholder_background"
-        tools:ignore="ContentDescription" />
+        tools:ignore="ContentDescription"
+        tools:src="@drawable/rectangle_placeholder_background" />
 
     <LinearLayout
         android:layout_width="match_parent"

+ 3 - 2
app/src/main/res/values/attrs.xml

@@ -2,8 +2,9 @@
 <resources>
     <attr name="toolbar_popup_theme" format="reference" />
     <attr name="bottom_navigation_color" format="reference|color" />
-    <attr name="image_placeholder_color" format="reference|color" />
-    <attr name="image_dark_placeholder_color" format="reference|color" />
+    <attr name="rectangle_placeholder_drawable" format="reference" />
+    <attr name="oval_placeholder_drawable" format="reference" />
+    <attr name="oval_dark_placeholder_drawable" format="reference" />
     <attr name="recycler_divider_color" format="reference|color" />
     <attr name="book_progress_drawable" format="reference" />
     <declare-styleable name="ViewBehavior">

+ 7 - 5
app/src/main/res/values/styles.xml

@@ -19,8 +19,9 @@
         <item name="colorAccent">@color/light.color_accent</item>
         <item name="android:windowBackground">@color/light.background_color</item>
         <item name="android:listDivider">@drawable/recycler_view_divider</item>
-        <item name="image_placeholder_color">@color/light_image_placeholder_color</item>
-        <item name="image_dark_placeholder_color">@color/light_image_dark_placeholder_color</item>
+        <item name="rectangle_placeholder_drawable">@drawable/rectangle_placeholder_background</item>
+        <item name="oval_placeholder_drawable">@drawable/oval_placeholder_background</item>
+        <item name="oval_dark_placeholder_drawable">@drawable/oval_dark_placeholder_background</item>
         <item name="recycler_divider_color">@color/black_12</item>
         <item name="book_progress_drawable">@drawable/progress_bar_background_light</item>
         <item name="android:textColorPrimary">@color/light.text_color_primary</item>
@@ -39,8 +40,9 @@
         <item name="colorAccent">@color/dark.color_accent</item>
         <item name="android:windowBackground">@color/dark.background_color</item>
         <item name="android:listDivider">@drawable/recycler_view_divider</item>
-        <item name="image_placeholder_color">@color/dark_image_placeholder_color</item>
-        <item name="image_dark_placeholder_color">@color/dark_image_dark_placeholder_color</item>
+        <item name="rectangle_placeholder_drawable">@drawable/rectangle_placeholder_background_dark</item>
+        <item name="oval_placeholder_drawable">@drawable/oval_placeholder_background_dark</item>
+        <item name="oval_dark_placeholder_drawable">@drawable/oval_dark_placeholder_background_dark</item>
         <item name="recycler_divider_color">@color/white_12</item>
         <item name="book_progress_drawable">@drawable/progress_bar_background_dark</item>
         <item name="android:textColorPrimary">@color/dark.text_color_primary</item>
@@ -59,7 +61,7 @@
         <item name="colorPrimaryDark">@color/common_deep_purple_900</item>
         <item name="colorAccent">@color/light.color_accent</item>
         <item name="android:windowBackground">@color/common_deep_purple_700</item>
-        <item name="image_placeholder_color">@color/image_placeholder_color_dark</item>
+        <item name="oval_placeholder_drawable">@drawable/oval_dark_placeholder_background</item>
         <item name="android:navigationBarColor" tools:targetApi="lollipop">
             @color/common_deep_purple_900
         </item>