Skip to content

Commit 30d42b4

Browse files
committed
add loading indicator
1 parent bb1c663 commit 30d42b4

File tree

7 files changed

+67
-12
lines changed

7 files changed

+67
-12
lines changed

app/src/main/java/com/riyaldi/gamekuy/detail/DetailActivity.kt

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import android.widget.Toast
55
import androidx.activity.viewModels
66
import androidx.appcompat.app.AppCompatActivity
77
import androidx.core.content.ContextCompat
8+
import androidx.core.view.isVisible
89
import com.bumptech.glide.Glide
910
import com.google.android.material.appbar.AppBarLayout
1011
import com.riyaldi.core.data.Resource
@@ -38,17 +39,21 @@ class DetailActivity : AppCompatActivity(), AppBarLayout.OnOffsetChangedListener
3839
if (game != null) {
3940
detailViewModel.getDetailFilm(game.id).observe(this, { detailGame ->
4041
when(detailGame) {
41-
is Resource.Loading -> Toast.makeText(this, "load", Toast.LENGTH_SHORT).show()
42+
is Resource.Loading -> showLoading(true)
4243
is Resource.Success -> {
4344
val dataGame = detailGame.data as Game
4445
setFavoriteState(dataGame.isFavorite)
4546
populateData(dataGame)
47+
showLoading(false)
4648
binding.fabAddFavorite.setOnClickListener {
4749
detailViewModel.setFavoriteGame(dataGame)
4850
setFavoriteState(dataGame.isFavorite)
4951
}
5052
}
51-
is Resource.Error -> Toast.makeText(this, "error : ${detailGame.message}", Toast.LENGTH_SHORT).show()
53+
is Resource.Error -> {
54+
Toast.makeText(this, "error : ${detailGame.message}", Toast.LENGTH_SHORT).show()
55+
showLoading(false)
56+
}
5257
}
5358
})
5459

@@ -71,6 +76,12 @@ class DetailActivity : AppCompatActivity(), AppBarLayout.OnOffsetChangedListener
7176
.into(binding.backdrop)
7277
}
7378

79+
private fun showLoading(state: Boolean) {
80+
binding.pbDetail.isVisible = state
81+
binding.appbar.isVisible = !state
82+
binding.nsvDetail.isVisible = !state
83+
}
84+
7485
private val percentageToShowImage = 20
7586
private var mMaxScrollSize = 0
7687
private var mIsImageHidden = false

app/src/main/java/com/riyaldi/gamekuy/explore/ExploreFragment.kt

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import android.util.TypedValue
88
import android.view.*
99
import android.widget.Toast
1010
import androidx.appcompat.widget.SearchView
11+
import androidx.core.view.isVisible
1112
import androidx.fragment.app.Fragment
1213
import androidx.fragment.app.viewModels
1314
import androidx.lifecycle.lifecycleScope
@@ -44,6 +45,7 @@ class ExploreFragment : Fragment() {
4445

4546
if (activity != null) {
4647
setHasOptionsMenu(true)
48+
showLoading(false)
4749

4850
gameAdapter = GameAdapter()
4951

@@ -86,12 +88,15 @@ class ExploreFragment : Fragment() {
8688
exploreViewModel.games.observe(viewLifecycleOwner, { games ->
8789
if (games != null) {
8890
when(games) {
89-
is Resource.Loading -> Toast.makeText(context, "load", Toast.LENGTH_SHORT).show()
91+
is Resource.Loading -> showLoading(true)
9092
is Resource.Success -> {
91-
Toast.makeText(context, "success", Toast.LENGTH_SHORT).show()
9293
gameAdapter.setData(games.data)
94+
showLoading(false)
95+
}
96+
is Resource.Error -> {
97+
Toast.makeText(context, "error", Toast.LENGTH_SHORT).show()
98+
showLoading(false)
9399
}
94-
is Resource.Error -> Toast.makeText(context, "error", Toast.LENGTH_SHORT).show()
95100
}
96101
}
97102
})
@@ -106,6 +111,11 @@ class ExploreFragment : Fragment() {
106111
})
107112
}
108113

114+
private fun showLoading(state: Boolean) {
115+
binding.pbExplore.isVisible = state
116+
binding.rvExplore.isVisible = !state
117+
}
118+
109119
override fun onDestroy() {
110120
super.onDestroy()
111121
_binding = null

app/src/main/java/com/riyaldi/gamekuy/home/HomeFragment.kt

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,12 @@ package com.riyaldi.gamekuy.home
22

33
import android.content.Intent
44
import android.os.Bundle
5-
import android.util.Log
65
import android.util.TypedValue
76
import android.view.LayoutInflater
87
import android.view.View
98
import android.view.ViewGroup
109
import android.widget.Toast
10+
import androidx.core.view.isVisible
1111
import androidx.fragment.app.Fragment
1212
import androidx.fragment.app.viewModels
1313
import androidx.recyclerview.widget.LinearLayoutManager
@@ -47,11 +47,15 @@ class HomeFragment : Fragment() {
4747
homeViewModel.game.observe(viewLifecycleOwner, { game ->
4848
if (game != null) {
4949
when(game) {
50-
is Resource.Loading -> Log.d("HomeFragment", "loading")
50+
is Resource.Loading -> showLoading(true)
5151
is Resource.Success -> {
5252
gameAdapter.setData(game.data)
53+
showLoading(false)
54+
}
55+
is Resource.Error -> {
56+
Toast.makeText(context, "error ${game.message}", Toast.LENGTH_SHORT).show()
57+
showLoading(false)
5358
}
54-
is Resource.Error -> Toast.makeText(context, "error ${game.message}", Toast.LENGTH_SHORT).show()
5559
}
5660
}
5761
})
@@ -68,6 +72,11 @@ class HomeFragment : Fragment() {
6872

6973
}
7074

75+
private fun showLoading(state: Boolean) {
76+
binding.pbHome.isVisible = state
77+
binding.rvHome.isVisible = !state
78+
}
79+
7180
override fun onDestroy() {
7281
super.onDestroy()
7382
_binding = null

app/src/main/res/layout/activity_detail.xml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,14 @@
77
android:layout_height="match_parent"
88
android:fitsSystemWindows="true">
99

10+
<ProgressBar
11+
android:id="@+id/pb_detail"
12+
style="?android:attr/progressBarStyle"
13+
android:layout_width="wrap_content"
14+
android:layout_height="wrap_content"
15+
android:layout_gravity="center"
16+
android:elevation="10dp" />
17+
1018
<com.google.android.material.appbar.AppBarLayout
1119
android:id="@+id/appbar"
1220
android:layout_width="match_parent"
@@ -45,10 +53,12 @@
4553
android:layout_height="?attr/actionBarSize"
4654
app:layout_collapseMode="pin"
4755
app:title="Test" />
56+
4857
</com.google.android.material.appbar.CollapsingToolbarLayout>
4958
</com.google.android.material.appbar.AppBarLayout>
5059

5160
<androidx.core.widget.NestedScrollView
61+
android:id="@+id/nsv_detail"
5262
android:layout_width="match_parent"
5363
android:layout_height="match_parent"
5464
android:background="@color/black"

app/src/main/res/layout/fragment_explore.xml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,19 @@
22
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
33
xmlns:app="http://schemas.android.com/apk/res-auto"
44
android:layout_width="match_parent"
5-
android:layout_height="match_parent">
5+
android:layout_height="match_parent"
6+
android:background="@color/black">
67

78

89
<androidx.recyclerview.widget.RecyclerView
910
android:id="@+id/rv_explore"
1011
android:layout_width="match_parent"
1112
android:layout_height="match_parent" />
13+
14+
<ProgressBar
15+
android:id="@+id/pb_explore"
16+
style="?android:attr/progressBarStyle"
17+
android:layout_width="wrap_content"
18+
android:layout_height="wrap_content"
19+
android:layout_gravity="center" />
1220
</FrameLayout>

app/src/main/res/layout/fragment_home.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,11 @@
1010
android:id="@+id/rv_home"
1111
android:layout_width="match_parent"
1212
android:layout_height="match_parent" />
13+
14+
<ProgressBar
15+
android:id="@+id/pb_home"
16+
style="?android:attr/progressBarStyle"
17+
android:layout_width="wrap_content"
18+
android:layout_height="wrap_content"
19+
android:layout_gravity="center" />
1320
</FrameLayout>

core/src/main/java/com/riyaldi/core/data/source/remote/response/GameResponse.kt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ data class GameResponse(
88
@SerializedName("name")
99
val name: String,
1010
@SerializedName("released")
11-
val released: String,
11+
val released: String?,
1212
@SerializedName("background_image")
13-
val backgroundImage: String,
13+
val backgroundImage: String?,
1414
@SerializedName("metacritic")
15-
val metacritic: Int,
15+
val metacritic: Int?,
1616
@SerializedName("platforms")
1717
val platforms: List<Platforms>?,
1818
@SerializedName("genres")

0 commit comments

Comments
 (0)