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