From b2cb5f9fc1135243211d6726a4abfbd897be7ed2 Mon Sep 17 00:00:00 2001
From: 62160052 <62160052@go.buu.ac.th>
Date: Sat, 24 Sep 2022 20:01:54 +0700
Subject: [PATCH] Add loading and error images

---
 .../executionHistory/executionHistory.lock    | Bin 17 -> 17 bytes
 .gradle/7.3.3/fileHashes/fileHashes.bin       | Bin 75565 -> 76115 bytes
 .gradle/7.3.3/fileHashes/fileHashes.lock      | Bin 17 -> 17 bytes
 .../buildOutputCleanup.lock                   | Bin 17 -> 17 bytes
 .idea/misc.xml                                |   8 ++++++++
 .../marsphotos/overview/BindingAdapters.kt    |   6 +++++-
 .../marsphotos/overview/OverviewFragment.kt   |   2 ++
 app/src/main/res/layout/grid_view_item.xml    |   6 ++++++
 8 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/.gradle/7.3.3/executionHistory/executionHistory.lock b/.gradle/7.3.3/executionHistory/executionHistory.lock
index c9eddb154f2508550d8fdf99e085a07e713360e9..c41e9806ac783a6a763ac7e7d8333cf8e78cd4f3 100644
GIT binary patch
literal 17
UcmZRsUgMuDB)xe(0|a~l04x0jY5)KL

literal 17
UcmZRsUgMuDB)xe(0|aaW04uu$C;$Ke

diff --git a/.gradle/7.3.3/fileHashes/fileHashes.bin b/.gradle/7.3.3/fileHashes/fileHashes.bin
index 9df50f3644a98515edc0b6c7c499a4363b8442ed..6a58db0f47cedb2b3c629567bbc6f1827e652adf 100644
GIT binary patch
delta 2422
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
M2efqM<pJpc0Fj;paR2}S

delta 1683
zcmcb7iDm6MmJKEnjFy{CB^ntgpOgHs`I^)Yrpe1>-8Zw!B{FZWQ!HTG%%*akdGlBG
zo6MV^X%})a$!1O#eVj9S=3~jpryfg8{`J^kbDEi>h(hd6rCIaWHk|5MzV?c^n*Id_
z2FB)mb>GJfV8GHc`KOoW<_})0r4*zCI{m-9yy+;N?)<sx@6&%^mFeCO!3r4!4^IwE
z6P7>CEHSgOYliWM#v8RMUt3VsFs_>XHq}KzbaSy;OedqjLnEmzXBNlCLlr%N7{tUh
zd0~~XxWTOMA6Gvo>74z>eA&kL98}Gt&DCia#hKH6cqjYU)hSGxwPfbfv`1$b3v<nR
z!MQXDs>%&w606eYw{?pcCAMvr;5w|^X_<27>z&9Sxjhh7KJPa#Z>W$8au@r_^K=eN
z`*EfAI=drLjbK^*&%F>c*e5YCFz6XGFfeE`Ffb^Bus}$pS7Xn+_tMuSuY5c3?qVTS
zM;Al~N6O@d9>SAbW*aJ$&t_aQUEkVwme3Q6(ntJuP=$36g*=ltU!5(@#GIaTZSv>2
z`swK@4<HhZJy`5)kN8=|aDs1B&BUM1`=(ohjY?191MA>dU5=?Es9T=vSA5ywz~c|u
zoWiF*fapk^Jh^k8K684?y~(>lbn@THZ|Bu1gnN~rwN7H0%D`bb{r`c0pJ2u6KB-{i
z8Q6IzchB!;PR~`EEV;l(Vb>)ElbL;OqWTkMceAav`~X&*o~s8@%n&lUbwM|GdM+!3
z&#`N=V!N>Tgc;5s3vCrI`&OlPHUE!*>S3Ggx^OacdamT;+Y5aZ)~Je|GYnREdr~+(
zh5zi#4G={YFChjorcPE|AS~~5;!fuLC(m~;l?nc<!D<UpQ#J>phT+8I%0=qT>6K!W
z7cbIhPOsQC`6`(HGnsuci2rZ0C5WyRnw$-yE1piCyI4x0r(b;af`p_)AK$diKBO-E
z7Gh|{HHe{{dnR9Byq7t>IeYT-CHki6%{dTp_J5e6K2z@V>9zZR`r1uXQ~h*g_fv>T
z%~_LwFToXX%>@wS7(zCuFI8k@PVWet+`UYnIlUuda$}v;<m<~snbSLBC%<1-ry#jB
zthn(HqsHsv;5k}qCmX=VCoal^n82MeeW5U;uzZ>|d$;_C<?D_=dw0xiy%|)|Rj8tZ
z$@`bPC`5Y|l!sQ8KH57kIX1^vJqfHRy<;szQBe2viz<xjlf71)U`||WGg)+{K6Bzy
znaS=TddY_AihPVxlP9kfWlmh8IC(W#P;~NL5WV>0<cq7NCTp$&$;nK1Tm{l7Ho16}
zK6m001&HaKA)qWi`M@d>=ENmZldV@v1w}tp%sXje^MlDyluw7}%Tcg%5|?^HG;p+F
zhBS|ZwYhIqvy)MA`+`sY5BETI_(F7Wc1(6&t<IddRB3YV>d8!rOD8j}F)&SB(gcy_
zxPxh+;9R@ssl6W@G@gdk_*BnifEc*=^XBw5ng)#in<w76!9Us5Mr!lyH`CcCzjM@|
zT=^w&a+=fo%@4n3voTg~RGc9&eJ&59GIM&zm+6Oj7=09am#3eb+NjtVyWZFP=Nb86
zu#xFq?GQ&uSxndGWh_(J^IM7W^n071!oT192TG+ZhN^;=C+Y^<kMc53<!4UsX`LP`
z%P1wWKX_Vlfzy<&Zk?O=zA3oM15w|dJ-r_!yD=kmURc>(30a2~_6^r$jUlo<P16s`
zGWtk(1}=NP{Xn7Lq1H*UB`?|^LS<{VtI9DpGBc-l{NBD&k<p)-IlWVS^1=+M>7uHP
jqRi=?GpFmSGU_v@ca}}wxI$`rC0Mj8cKbwC#yN}t-~mX5

diff --git a/.gradle/7.3.3/fileHashes/fileHashes.lock b/.gradle/7.3.3/fileHashes/fileHashes.lock
index 40bd99b62265cd5714eaf05e5568d28d81541698..cf8dc8c0682cd765086a7bdef66aa1acc0c5f5d9 100644
GIT binary patch
literal 17
VcmZR6R%ybQyvz0`0~oMz001xo1Lgn#

literal 17
VcmZR6R%ybQyvz0`0~oM20st_11YQ6D

diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock
index 16dd642da3fcddcc13e9da9ddc1662109c3ce34b..0d8081ab3b7ec6220c85bdddf04424e1a3bd9acb 100644
GIT binary patch
literal 17
UcmZQBSl$}m?k^O|00x2u04llzwEzGB

literal 17
UcmZQBSl$}m?k^O|00x4304jI`a{vGU

diff --git a/.idea/misc.xml b/.idea/misc.xml
index 2a4d5b5..d4773db 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,5 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <project version="4">
+  <component name="DesignSurface">
+    <option name="filePathToZoomLevelMap">
+      <map>
+        <entry key="..\:/Users/Fair/Desktop/android-basics-kotlin-mars-photos-app-starter/app/src/main/res/drawable/ic_broken_image.xml" value="0.226" />
+        <entry key="..\:/Users/Fair/Desktop/android-basics-kotlin-mars-photos-app-starter/app/src/main/res/layout/grid_view_item.xml" value="0.24048913043478262" />
+      </map>
+    </option>
+  </component>
   <component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="Android Studio default JDK" project-jdk-type="JavaSDK">
     <output url="file://$PROJECT_DIR$/build/classes" />
   </component>
diff --git a/app/src/main/java/com/example/android/marsphotos/overview/BindingAdapters.kt b/app/src/main/java/com/example/android/marsphotos/overview/BindingAdapters.kt
index 2c00e64..b4e374e 100644
--- a/app/src/main/java/com/example/android/marsphotos/overview/BindingAdapters.kt
+++ b/app/src/main/java/com/example/android/marsphotos/overview/BindingAdapters.kt
@@ -4,12 +4,16 @@ import android.widget.ImageView
 import androidx.core.net.toUri
 import androidx.databinding.BindingAdapter
 import coil.load
+import com.example.android.marsphotos.R
 
 @BindingAdapter("imageUrl")
 fun bindImage(imgView: ImageView, imgUrl: String?) {
     imgUrl?.let {
         val imgUri = imgUrl.toUri().buildUpon().scheme("https").build()
-        imgView.load(imgUri)
+        imgView.load(imgUri) {
+            placeholder(R.drawable.loading_animation)
+            error(R.drawable.ic_broken_image)
+        }
     }
 }
 
diff --git a/app/src/main/java/com/example/android/marsphotos/overview/OverviewFragment.kt b/app/src/main/java/com/example/android/marsphotos/overview/OverviewFragment.kt
index 3406411..9d0c465 100644
--- a/app/src/main/java/com/example/android/marsphotos/overview/OverviewFragment.kt
+++ b/app/src/main/java/com/example/android/marsphotos/overview/OverviewFragment.kt
@@ -23,6 +23,7 @@ import android.view.ViewGroup
 import androidx.fragment.app.Fragment
 import androidx.fragment.app.viewModels
 import com.example.android.marsphotos.databinding.FragmentOverviewBinding
+import com.example.android.marsphotos.databinding.GridViewItemBinding
 
 /**
  * This fragment shows the the status of the Mars photos web services transaction.
@@ -40,6 +41,7 @@ class OverviewFragment : Fragment() {
         savedInstanceState: Bundle?
     ): View? {
         val binding = FragmentOverviewBinding.inflate(inflater)
+        // val binding = GridViewItemBinding.inflate(inflater)
 
         // Allows Data Binding to Observe LiveData with the lifecycle of this Fragment
         binding.lifecycleOwner = this
diff --git a/app/src/main/res/layout/grid_view_item.xml b/app/src/main/res/layout/grid_view_item.xml
index f72424d..9353304 100644
--- a/app/src/main/res/layout/grid_view_item.xml
+++ b/app/src/main/res/layout/grid_view_item.xml
@@ -19,6 +19,11 @@
 <layout 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">
+    <data>
+        <variable
+            name="viewModel"
+            type="com.example.android.marsphotos.overview.OverviewViewModel" />
+    </data>
     <ImageView
         android:id="@+id/mars_image"
         android:layout_width="wrap_content"
@@ -26,5 +31,6 @@
         android:scaleType="fitXY"
         android:adjustViewBounds="true"
         android:padding="2dp"
+        app:imageUrl="@{viewModel.photos.imgSrcUrl}"
         tools:src="@tools:sample/backgrounds/scenic"/>
 </layout>
-- 
GitLab