diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/product/DetailProductActivity.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/product/DetailProductActivity.kt index f56f96a..e89cb1e 100644 --- a/app/src/main/java/com/alya/ecommerce_serang/ui/product/DetailProductActivity.kt +++ b/app/src/main/java/com/alya/ecommerce_serang/ui/product/DetailProductActivity.kt @@ -112,13 +112,17 @@ class DetailProductActivity : AppCompatActivity() { when (result) { is Result.Success -> { updateStoreInfo(result.data) + binding.progressBarDetailStore.visibility = View.GONE } is Result.Error -> { // Show error message, maybe a Toast or Snackbar - Toast.makeText(this, "Failed to load store: ${result.exception.message}", Toast.LENGTH_SHORT).show() + binding.progressBarDetailStore.visibility = View.GONE + Log.e("DetailProfileActivity", "Failed to load store: ${result.exception.message}") + Toast.makeText(this, "Kendala memuat toko", Toast.LENGTH_SHORT).show() } is Result.Loading -> { // Show loading indicator if needed + binding.progressBarDetailStore.visibility = View.VISIBLE } } } @@ -160,6 +164,10 @@ class DetailProductActivity : AppCompatActivity() { val products = viewModel.otherProducts.value.orEmpty() if (products.isNotEmpty()) { updateOtherProducts(products, storeMap) + } else { + binding.emptyOtherProducts.visibility = View.VISIBLE + binding.recyclerViewOtherProducts.visibility = View.GONE + binding.tvViewAllProducts.visibility = View.GONE } } } @@ -190,12 +198,14 @@ class DetailProductActivity : AppCompatActivity() { private fun updateOtherProducts(products: List, storeMap: Map) { if (products.isEmpty()) { Log.d("DetailProductActivity", "Product list is empty, hiding RecyclerView") - binding.recyclerViewOtherProducts.visibility = View.VISIBLE + binding.recyclerViewOtherProducts.visibility = View.GONE + binding.emptyOtherProducts.visibility = View.VISIBLE binding.tvViewAllProducts.visibility = View.GONE } else { Log.d("DetailProductActivity", "Displaying product list in RecyclerView") binding.recyclerViewOtherProducts.visibility = View.VISIBLE binding.tvViewAllProducts.visibility = View.VISIBLE + binding.emptyOtherProducts.visibility = View.GONE productAdapter = OtherProductAdapter(products, onClick = { product -> handleProductClick(product) @@ -316,11 +326,13 @@ class DetailProductActivity : AppCompatActivity() { val limitedReviewList = if (reviewList.isNotEmpty()) listOf(reviewList.first()) else emptyList() if (reviewList.isEmpty()) { binding.recyclerViewReviews.visibility = View.GONE + binding.emptyReview.visibility = View.VISIBLE binding.tvViewAllReviews.visibility = View.GONE // binding.tvNoReviews.visibility = View.VISIBLE } else { binding.recyclerViewReviews.visibility = View.VISIBLE binding.tvViewAllReviews.visibility = View.VISIBLE + binding.emptyReview.visibility = View.GONE } // binding.tvNoReviews.visibility = View.GONE reviewsAdapter = ReviewsAdapter( @@ -519,7 +531,11 @@ class DetailProductActivity : AppCompatActivity() { attachProduct = true // This will auto-attach the product! ) + } + override fun onResume() { + super.onResume() + loadData() } companion object { diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/product/storeDetail/StoreDetailActivity.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/product/storeDetail/StoreDetailActivity.kt index 9aa1472..a041e87 100644 --- a/app/src/main/java/com/alya/ecommerce_serang/ui/product/storeDetail/StoreDetailActivity.kt +++ b/app/src/main/java/com/alya/ecommerce_serang/ui/product/storeDetail/StoreDetailActivity.kt @@ -88,15 +88,18 @@ class StoreDetailActivity : AppCompatActivity() { viewModel.storeDetail.observe(this) { result -> when (result) { is Result.Success -> { + binding.progressBarDetailProdItem.visibility = View.GONE updateStoreInfo(result.data) viewModel.loadOtherProducts(result.data.storeId) } is Result.Error -> { // Show error message, maybe a Toast or Snackbar + binding.progressBarDetailProdItem.visibility = View.GONE Toast.makeText(this, "Failed to load store: ${result.exception.message}", Toast.LENGTH_SHORT).show() } is Result.Loading -> { // Show loading indicator if needed + binding.progressBarDetailProdItem.visibility = View.VISIBLE } } } @@ -109,6 +112,9 @@ class StoreDetailActivity : AppCompatActivity() { val products = viewModel.otherProducts.value.orEmpty() if (products.isNotEmpty()) { updateProducts(products, storeMap) + } else { + binding.progressBarDetailProdItem.visibility = View.VISIBLE + binding.rvProducts.visibility = View.GONE } } } @@ -146,7 +152,7 @@ class StoreDetailActivity : AppCompatActivity() { .into(binding.ivStoreImage) val ratingStr = it.storeRating - val ratingValue = ratingStr?.toFloatOrNull() + val ratingValue = ratingStr.toFloatOrNull() if (ratingValue != null && ratingValue > 0f) { binding.tvStoreRating.text = String.format("%.1f", ratingValue) @@ -161,10 +167,12 @@ class StoreDetailActivity : AppCompatActivity() { private fun updateProducts(products: List, storeMap: Map) { if (products.isEmpty()) { binding.rvProducts.visibility = View.GONE + binding.progressBarDetailProdItem.visibility = View.VISIBLE Log.d("StoreDetailActivity", "Product list is empty, hiding RecyclerView") } else { Log.d("StoreDetailActivity", "Displaying product list in RecyclerView") + binding.progressBarDetailProdItem.visibility = View.GONE binding.rvProducts.visibility = View.VISIBLE productAdapter = HorizontalProductAdapter(products, onClick = { product -> handleProductClick(product) diff --git a/app/src/main/res/drawable/baseline_circle_24.xml b/app/src/main/res/drawable/baseline_circle_24.xml new file mode 100644 index 0000000..7030f2f --- /dev/null +++ b/app/src/main/res/drawable/baseline_circle_24.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/layout/activity_detail_product.xml b/app/src/main/res/layout/activity_detail_product.xml index 187e853..562a3f3 100644 --- a/app/src/main/res/layout/activity_detail_product.xml +++ b/app/src/main/res/layout/activity_detail_product.xml @@ -231,6 +231,18 @@ android:textSize="14sp" /> + + + + + + - - + - - - + android:padding="24dp"> - + + - - - + + + + + + - + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toEndOf="@id/storeImageCard" + app:layout_constraintTop_toBottomOf="@id/tvStoreName" + tools:text="Makanan Ringan" /> - + + - + - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + android:layout_marginTop="24dp" + app:dividerColor="@color/black_200" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@id/storeInfoCard" /> - - - - - - - - - - - - - - - - - - - - - + - \ No newline at end of file