From 7c7941d5b29d20e26fce1d8643dba0dc8a6195fa Mon Sep 17 00:00:00 2001 From: Gracia Hotmauli <95269134+hotmauligracia@users.noreply.github.com> Date: Fri, 29 Aug 2025 18:26:12 +0700 Subject: [PATCH] fix register store and product --- .../customer/product/ProductResponse.kt | 3 + .../ui/profile/mystore/MyStoreActivity.kt | 1 - .../profile/mystore/RegisterStoreActivity.kt | 25 +++ .../product/DetailStoreProductActivity.kt | 16 ++ .../address/DetailStoreAddressActivity.kt | 13 ++ .../alya/ecommerce_serang/utils/Functions.kt | 27 +++ .../layout/activity_detail_store_address.xml | 82 ++++++++- .../layout/activity_detail_store_product.xml | 68 ++++++++ .../res/layout/activity_register_store.xml | 156 +++++++++++++++++- .../fragment_change_stock_bottom_sheet.xml | 1 + 10 files changed, 375 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/alya/ecommerce_serang/data/api/response/customer/product/ProductResponse.kt b/app/src/main/java/com/alya/ecommerce_serang/data/api/response/customer/product/ProductResponse.kt index e6ad539..211657e 100644 --- a/app/src/main/java/com/alya/ecommerce_serang/data/api/response/customer/product/ProductResponse.kt +++ b/app/src/main/java/com/alya/ecommerce_serang/data/api/response/customer/product/ProductResponse.kt @@ -62,6 +62,9 @@ data class Product( @field:SerializedName("wholesale_min_item") val wholesaleMinItem: Int? = null, + @field:SerializedName("status") + val status: String, + @field:SerializedName("min_order") val minOrder: Int, diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/MyStoreActivity.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/MyStoreActivity.kt index b9aa908..7f2a0e4 100644 --- a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/MyStoreActivity.kt +++ b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/MyStoreActivity.kt @@ -51,7 +51,6 @@ class MyStoreActivity : AppCompatActivity() { enableEdgeToEdge() - binding.headerMyStore.headerTitle.text = "Toko Saya" binding.headerMyStore.headerLeftIcon.setOnClickListener { diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/RegisterStoreActivity.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/RegisterStoreActivity.kt index 48d502a..b769dab 100644 --- a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/RegisterStoreActivity.kt +++ b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/RegisterStoreActivity.kt @@ -42,6 +42,7 @@ import com.alya.ecommerce_serang.utils.ImageUtils import com.alya.ecommerce_serang.utils.PopUpDialog import com.alya.ecommerce_serang.utils.RegisterStoreViewModelFactory import com.alya.ecommerce_serang.utils.SessionManager +import com.alya.ecommerce_serang.utils.applyLiveCounter import com.alya.ecommerce_serang.utils.viewmodel.MyStoreViewModel import com.alya.ecommerce_serang.utils.viewmodel.RegisterStoreViewModel import okhttp3.MediaType.Companion.toMediaTypeOrNull @@ -102,6 +103,30 @@ class RegisterStoreActivity : AppCompatActivity() { binding = ActivityRegisterStoreBinding.inflate(layoutInflater) setContentView(binding.root) + applyLiveCounter( + binding.etStoreName, + binding.tvCountName, + binding.tvCountNameMax + ) + + applyLiveCounter( + binding.etStoreDescription, + binding.tvCountDesc, + binding.tvCountDescMax + ) + + applyLiveCounter( + binding.etStreet, + binding.tvCountStreet, + binding.tvCountStreetMax + ) + + applyLiveCounter( + binding.etAddressDetail, + binding.tvCountAddressDetail, + binding.tvCountAddressDetailMax + ) + sessionManager = SessionManager(this) WindowCompat.setDecorFitsSystemWindows(window, false) diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/product/DetailStoreProductActivity.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/product/DetailStoreProductActivity.kt index 81b6a42..4eae847 100644 --- a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/product/DetailStoreProductActivity.kt +++ b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/product/DetailStoreProductActivity.kt @@ -31,6 +31,7 @@ import com.alya.ecommerce_serang.utils.CompressionResult import com.alya.ecommerce_serang.utils.FileUtils.compressFileToMax1MB import com.alya.ecommerce_serang.utils.ImageUtils.compressImage import com.alya.ecommerce_serang.utils.SessionManager +import com.alya.ecommerce_serang.utils.applyLiveCounter import com.alya.ecommerce_serang.utils.viewmodel.ProductViewModel import com.bumptech.glide.Glide import okhttp3.MediaType.Companion.toMediaTypeOrNull @@ -116,6 +117,18 @@ class DetailStoreProductActivity : AppCompatActivity() { binding = ActivityDetailStoreProductBinding.inflate(layoutInflater) setContentView(binding.root) + applyLiveCounter( + binding.edtNamaProduk, + binding.tvCountName, + binding.tvCountNameMax + ) + + applyLiveCounter( + binding.edtDeskripsiProduk, + binding.tvCountDesc, + binding.tvCountDescMax + ) + isEditing = intent.getBooleanExtra("is_editing", false) productId = intent.getIntExtra("product_id", -1) @@ -271,6 +284,9 @@ class DetailStoreProductActivity : AppCompatActivity() { binding.switcherHalal.showNext() } + binding.switchIsActive.isChecked = product.status == "active" + binding.switchIsActive.jumpDrawablesToCurrentState() + validateForm() } diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/profile/address/DetailStoreAddressActivity.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/profile/address/DetailStoreAddressActivity.kt index 4a3b439..6d1fb83 100644 --- a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/profile/address/DetailStoreAddressActivity.kt +++ b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/profile/address/DetailStoreAddressActivity.kt @@ -22,6 +22,7 @@ import com.alya.ecommerce_serang.data.repository.Result import com.alya.ecommerce_serang.databinding.ActivityDetailStoreAddressBinding import com.alya.ecommerce_serang.utils.BaseViewModelFactory import com.alya.ecommerce_serang.utils.SessionManager +import com.alya.ecommerce_serang.utils.applyLiveCounter import com.alya.ecommerce_serang.utils.viewmodel.AddressViewModel import com.google.android.material.snackbar.Snackbar @@ -55,6 +56,18 @@ class DetailStoreAddressActivity : AppCompatActivity() { binding = ActivityDetailStoreAddressBinding.inflate(layoutInflater) setContentView(binding.root) + applyLiveCounter( + binding.edtStreet, + binding.tvCountStreet, + binding.tvCountStreetMax + ) + + applyLiveCounter( + binding.edtDetailAddress, + binding.tvCountDetail, + binding.tvCountDetailMax + ) + sessionManager = SessionManager(this) apiService = ApiConfig.getApiService(sessionManager) diff --git a/app/src/main/java/com/alya/ecommerce_serang/utils/Functions.kt b/app/src/main/java/com/alya/ecommerce_serang/utils/Functions.kt index 9e1ba9c..b8167a8 100644 --- a/app/src/main/java/com/alya/ecommerce_serang/utils/Functions.kt +++ b/app/src/main/java/com/alya/ecommerce_serang/utils/Functions.kt @@ -1,8 +1,12 @@ package com.alya.ecommerce_serang.utils import android.os.Build +import android.text.InputFilter import android.view.View import android.view.WindowInsetsController +import android.widget.EditText +import android.widget.TextView +import androidx.core.widget.doAfterTextChanged import androidx.fragment.app.Fragment fun Fragment.setLightStatusBar(){ @@ -19,4 +23,27 @@ fun Fragment.setLightStatusBar(){ } } +} + +public fun applyLiveCounter( + editText: EditText, + tvCount: TextView, + tvMax: TextView +) { + val max = tvMax.text.toString().toIntOrNull() ?: Int.MAX_VALUE + + // Replace any existing LengthFilter with the new max + val current = editText.filters?.toMutableList() ?: mutableListOf() + current.removeAll { it is InputFilter.LengthFilter } + current.add(InputFilter.LengthFilter(max)) + editText.filters = current.toTypedArray() + + // Set initial count (handles prefilled text / edit mode) + tvCount.text = (editText.text?.length ?: 0).toString() + + // Update on change + editText.doAfterTextChanged { + val len = it?.length ?: 0 + tvCount.text = len.toString() + } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_detail_store_address.xml b/app/src/main/res/layout/activity_detail_store_address.xml index 694beba..a48d616 100644 --- a/app/src/main/res/layout/activity_detail_store_address.xml +++ b/app/src/main/res/layout/activity_detail_store_address.xml @@ -205,7 +205,6 @@ - + + + + + + + + + + @@ -254,6 +289,7 @@ android:padding="8dp" style="@style/body_small" android:hint="Isi kode pos di sini" + android:inputType="number" android:layout_marginTop="10dp"/> @@ -275,15 +311,47 @@ + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_detail_store_product.xml b/app/src/main/res/layout/activity_detail_store_product.xml index fcd6ad2..5d7051a 100644 --- a/app/src/main/res/layout/activity_detail_store_product.xml +++ b/app/src/main/res/layout/activity_detail_store_product.xml @@ -167,6 +167,40 @@ style="@style/body_small" android:layout_marginTop="10dp"/> + + + + + + + + + + @@ -271,6 +305,40 @@ android:gravity="top" android:layout_marginTop="10dp"/> + + + + + + + + + + diff --git a/app/src/main/res/layout/activity_register_store.xml b/app/src/main/res/layout/activity_register_store.xml index 9634f7e..eaac783 100644 --- a/app/src/main/res/layout/activity_register_store.xml +++ b/app/src/main/res/layout/activity_register_store.xml @@ -138,6 +138,40 @@ style="@style/body_small" android:layout_marginTop="10dp"/> + + + + + + + + + + @@ -166,6 +200,40 @@ android:gravity="top" android:layout_marginTop="10dp"/> + + + + + + + + + + @@ -435,7 +503,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" - android:layout_marginBottom="24dp"> + android:layout_marginVertical="24dp"> + + + + + + + + + + @@ -532,15 +636,49 @@ + + + + + + + + + + @@ -626,7 +764,7 @@ @@ -668,7 +806,7 @@ @@ -887,7 +1025,7 @@ @@ -954,7 +1092,7 @@ @@ -1015,7 +1153,7 @@ diff --git a/app/src/main/res/layout/fragment_change_stock_bottom_sheet.xml b/app/src/main/res/layout/fragment_change_stock_bottom_sheet.xml index 1de3cc8..95258ba 100644 --- a/app/src/main/res/layout/fragment_change_stock_bottom_sheet.xml +++ b/app/src/main/res/layout/fragment_change_stock_bottom_sheet.xml @@ -37,6 +37,7 @@ android:background="@null" android:hint="Isi stok produk di sini" android:inputType="number" + android:textAlignment="center" android:padding="8dp" style="@style/body_small" />