diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index d01aae7..aea446e 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -94,6 +94,8 @@ dependencies {
implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0")
implementation("de.hdodenhof:circleimageview:3.1.0")
+ //maps
+ implementation("org.osmdroid:osmdroid-android:6.0.3")
// implementation(libs.hilt.android)
// kapt("com.google.dagger:hilt-compiler:2.48")
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index f53b801..3263059 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -8,9 +8,12 @@
+
+
private var imageUri: Uri? = null
@@ -81,7 +81,7 @@ class StoreProductDetailActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
- binding = ActivityStoreProductDetailBinding.inflate(layoutInflater)
+ binding = ActivityDetailStoreProductBinding.inflate(layoutInflater)
setContentView(binding.root)
val isEditing = intent.getBooleanExtra("is_editing", false)
diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/product/ProductActivity.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/product/ProductActivity.kt
index 0eee6be..3a40ba1 100644
--- a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/product/ProductActivity.kt
+++ b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/product/ProductActivity.kt
@@ -73,7 +73,7 @@ class ProductActivity : AppCompatActivity() {
}
binding.header.headerRightText.setOnClickListener {
- val intent = Intent(this, StoreProductDetailActivity::class.java)
+ val intent = Intent(this, DetailStoreProductActivity::class.java)
intent.putExtra("is_editing", false)
startActivity(intent)
}
diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/product/ProductOptionsBottomSheetFragment.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/product/ProductOptionsBottomSheetFragment.kt
index 7e1cf10..7c990f1 100644
--- a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/product/ProductOptionsBottomSheetFragment.kt
+++ b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/product/ProductOptionsBottomSheetFragment.kt
@@ -3,13 +3,11 @@ package com.alya.ecommerce_serang.ui.profile.mystore.product
import android.app.AlertDialog
import android.content.Intent
import android.os.Bundle
-import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.lifecycle.ViewModelProvider
-import com.alya.ecommerce_serang.R
import com.alya.ecommerce_serang.data.api.dto.ProductsItem
import com.alya.ecommerce_serang.databinding.FragmentProductOptionsBottomSheetBinding
import com.alya.ecommerce_serang.utils.viewmodel.ProductViewModel
@@ -32,7 +30,7 @@ class ProductOptionsBottomSheetFragment(private val product: ProductsItem) : Bot
super.onViewCreated(view, savedInstanceState)
binding.btnEditProduct.setOnClickListener {
- val intent = Intent(requireContext(), StoreProductDetailActivity::class.java)
+ val intent = Intent(requireContext(), DetailStoreProductActivity::class.java)
intent.putExtra("product_id", product.id)
intent.putExtra("is_editing", true)
startActivity(intent)
diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/profile/address/StoreAddressActivity.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/profile/address/DetailStoreAddressActivity.kt
similarity index 85%
rename from app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/profile/address/StoreAddressActivity.kt
rename to app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/profile/address/DetailStoreAddressActivity.kt
index eca05b1..94f258c 100644
--- a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/profile/address/StoreAddressActivity.kt
+++ b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/profile/address/DetailStoreAddressActivity.kt
@@ -7,11 +7,11 @@ import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
import com.alya.ecommerce_serang.R
-class StoreAddressActivity : AppCompatActivity() {
+class DetailStoreAddressActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
enableEdgeToEdge()
- setContentView(R.layout.activity_store_address)
+ setContentView(R.layout.activity_detail_store_address)
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/SellsAdapter.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/SellsAdapter.kt
new file mode 100644
index 0000000..e61b286
--- /dev/null
+++ b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/SellsAdapter.kt
@@ -0,0 +1,152 @@
+package com.alya.ecommerce_serang.ui.profile.mystore.sells
+
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
+import com.alya.ecommerce_serang.R
+import com.alya.ecommerce_serang.data.api.dto.OrdersItem
+
+class SellsAdapter : RecyclerView.Adapter() {
+ private var orderList: List = emptyList()
+
+ // View Types for different statuses
+ private val TYPE_PENDING = 0
+ private val TYPE_PAYMENT = 1
+ private val TYPE_SHIPMENT = 2
+ private val TYPE_COMPLETED = 3
+ private val TYPE_FAILED_PAYMENT = 4
+ private val TYPE_FAILED_SHIPMENT = 5
+
+ // Method to submit list to the adapter
+ fun submitList(orders: List?) {
+ orderList = orders ?: emptyList()
+ notifyDataSetChanged()
+ }
+
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
+ return when (viewType) {
+ TYPE_PENDING -> {
+ val view = LayoutInflater.from(parent.context).inflate(R.layout.item_sells_order, parent, false)
+ OrderViewHolder(view)
+ }
+ TYPE_PAYMENT -> {
+ val view = LayoutInflater.from(parent.context).inflate(R.layout.item_sells_payment, parent, false)
+ PaymentViewHolder(view)
+ }
+ TYPE_SHIPMENT -> {
+ val view = LayoutInflater.from(parent.context).inflate(R.layout.item_sells_shipment, parent, false)
+ ShipmentViewHolder(view)
+ }
+// TYPE_COMPLETED -> {
+// val view = LayoutInflater.from(parent.context).inflate(R.layout.item_sells_completed, parent, false)
+// CompletedViewHolder(view)
+// }
+// TYPE_FAILED_PAYMENT -> {
+// val view = LayoutInflater.from(parent.context).inflate(R.layout.item_sells_failed_payment, parent, false)
+// FailedPaymentViewHolder(view)
+// }
+// TYPE_FAILED_SHIPMENT -> {
+// val view = LayoutInflater.from(parent.context).inflate(R.layout.item_sells_failed_shipment, parent, false)
+// FailedShipmentViewHolder(view)
+// }
+ else -> {
+ val view = LayoutInflater.from(parent.context).inflate(R.layout.item_sells_order, parent, false)
+ OrderViewHolder(view)
+ }
+ }
+ }
+
+ // Determine the view type based on the order status
+ override fun getItemViewType(position: Int): Int {
+ val order = orderList[position]
+ return when (order?.status) {
+ "pending" -> TYPE_PENDING
+ "paid" -> TYPE_PAYMENT
+ "shipped" -> TYPE_SHIPMENT
+ "completed" -> TYPE_COMPLETED
+ "failedPayment" -> TYPE_FAILED_PAYMENT
+ "failedShipment" -> TYPE_FAILED_SHIPMENT
+ else -> TYPE_PENDING // Default to pending if no status is matched
+ }
+ }
+
+ override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
+ val order = orderList[position]
+ when (holder) {
+ is OrderViewHolder -> holder.bind(order)
+ is PaymentViewHolder -> holder.bind(order)
+ is ShipmentViewHolder -> holder.bind(order)
+ is CompletedViewHolder -> holder.bind(order)
+ is FailedPaymentViewHolder -> holder.bind(order)
+ is FailedShipmentViewHolder -> holder.bind(order)
+ }
+ }
+
+ override fun getItemCount(): Int = orderList.size
+
+ // ViewHolder for 'pending' status (Order)
+ class OrderViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ private val tvOrderNumber: TextView = itemView.findViewById(R.id.tv_order_number)
+ private val tvOrderCustomer: TextView = itemView.findViewById(R.id.tv_order_customer)
+ private val tvOrderPrice: TextView = itemView.findViewById(R.id.tv_order_price)
+
+ fun bind(order: OrdersItem?) {
+ tvOrderNumber.text = "Order #${order?.orderId}"
+ tvOrderCustomer.text = order?.username
+ tvOrderPrice.text = "Total: ${order?.totalAmount}"
+ }
+ }
+
+ // ViewHolder for 'paid' status (Payment)
+ class PaymentViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ private val tvPaymentNumber: TextView = itemView.findViewById(R.id.tv_payment_number)
+ private val tvPaymentCustomer: TextView = itemView.findViewById(R.id.tv_payment_customer)
+ private val tvPaymentPrice: TextView = itemView.findViewById(R.id.tv_payment_price)
+
+ fun bind(order: OrdersItem?) {
+ tvPaymentNumber.text = "Order #${order?.orderId}"
+ tvPaymentCustomer.text = order?.username
+ tvPaymentPrice.text = "Paid: ${order?.totalAmount}"
+ }
+ }
+
+ // ViewHolder for 'shipped' status (Shipment)
+ class ShipmentViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ private val tvShipmentNumber: TextView = itemView.findViewById(R.id.tv_shipment_number)
+ private val tvShipmentLocation: TextView = itemView.findViewById(R.id.tv_shipment_location)
+
+ fun bind(order: OrdersItem?) {
+ tvShipmentNumber.text = "Shipment #${order?.orderId}"
+ tvShipmentLocation.text = "Location: ${order?.address?.subdistrict}"
+ }
+ }
+
+ // ViewHolder for 'completed' status
+ class CompletedViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ //private val tvCompletedNumber: TextView = itemView.findViewById(R.id.tv_completed_number)
+
+ fun bind(order: OrdersItem?) {
+ // tvCompletedNumber.text = "Completed Order #${order?.orderId}"
+ }
+ }
+
+ // ViewHolder for 'failedPayment' status
+ class FailedPaymentViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ //private val tvFailedPaymentNumber: TextView = itemView.findViewById(R.id.tv_failed_payment_number)
+
+ fun bind(order: OrdersItem?) {
+ //tvFailedPaymentNumber.text = "Failed Payment Order #${order?.orderId}"
+ }
+ }
+
+ // ViewHolder for 'failedShipment' status
+ class FailedShipmentViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ //private val tvFailedShipmentNumber: TextView = itemView.findViewById(R.id.tv_failed_shipment_number)
+
+ fun bind(order: OrdersItem?) {
+ //tvFailedShipmentNumber.text = "Failed Shipment Order #${order?.orderId}"
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/SellsFragment.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/SellsFragment.kt
index 91d202e..04a816a 100644
--- a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/SellsFragment.kt
+++ b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/SellsFragment.kt
@@ -24,6 +24,8 @@ class SellsFragment : Fragment() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
+
+// val repository = OrderRepository(ApiService.create())
viewModel = ViewModelProvider(this)[SellsViewModel::class.java]
val tabs = listOf(
diff --git a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/all_sells/AllSellsFragment.kt b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/all_sells/AllSellsFragment.kt
index 0b45642..bee4a1c 100644
--- a/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/all_sells/AllSellsFragment.kt
+++ b/app/src/main/java/com/alya/ecommerce_serang/ui/profile/mystore/sells/all_sells/AllSellsFragment.kt
@@ -8,8 +8,8 @@ import android.view.ViewGroup
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import androidx.recyclerview.widget.LinearLayoutManager
-import com.alya.ecommerce_serang.R
import com.alya.ecommerce_serang.databinding.FragmentAllSellsBinding
+import com.alya.ecommerce_serang.ui.profile.mystore.sells.SellsAdapter
import com.alya.ecommerce_serang.utils.viewmodel.SellsViewModel
class AllSellsFragment : Fragment() {
@@ -29,13 +29,13 @@ class AllSellsFragment : Fragment() {
viewModel = ViewModelProvider(this).get(SellsViewModel::class.java)
-// val adapter = SellsAdapter()
-// binding.rvAllSells.layoutManager = LinearLayoutManager(context)
-// binding.rvAllSells.adapter = adapter
-//
-// viewModel.loadAllSells()
-// viewModel.sellsList.observe(viewLifecycleOwner, Observer { sells ->
-// adapter.submitList(sells)
-// })
+ val adapter = SellsAdapter()
+ binding.rvAllSells.layoutManager = LinearLayoutManager(context)
+ binding.rvAllSells.adapter = adapter
+
+ viewModel.loadOrdersByStatus("all")
+ viewModel.sellsList.observe(viewLifecycleOwner, Observer { sells ->
+ adapter.submitList(sells)
+ })
}
}
diff --git a/app/src/main/res/layout/activity_detail_store_address.xml b/app/src/main/res/layout/activity_detail_store_address.xml
new file mode 100644
index 0000000..3efe392
--- /dev/null
+++ b/app/src/main/res/layout/activity_detail_store_address.xml
@@ -0,0 +1,285 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_store_product_detail.xml b/app/src/main/res/layout/activity_detail_store_product.xml
similarity index 99%
rename from app/src/main/res/layout/activity_store_product_detail.xml
rename to app/src/main/res/layout/activity_detail_store_product.xml
index 7076979..3922988 100644
--- a/app/src/main/res/layout/activity_store_product_detail.xml
+++ b/app/src/main/res/layout/activity_detail_store_product.xml
@@ -7,7 +7,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
- tools:context=".ui.profile.mystore.product.StoreProductDetailActivity">
+ tools:context=".ui.profile.mystore.product.DetailStoreProductActivity">
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -170,32 +200,6 @@
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index e967142..51949c8 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -20,6 +20,8 @@ lifecycleViewmodelKtx = "2.8.7"
fragmentKtx = "1.5.6"
navigationFragmentKtx = "2.8.5"
navigationUiKtx = "2.8.5"
+playServicesLocation = "21.3.0"
+playServicesMaps = "19.2.0"
recyclerview = "1.4.0"
[libraries]
@@ -40,6 +42,8 @@ androidx-lifecycle-viewmodel-ktx = { group = "androidx.lifecycle", name = "lifec
androidx-fragment-ktx = { group = "androidx.fragment", name = "fragment-ktx", version.ref = "fragmentKtx" }
androidx-navigation-fragment-ktx = { group = "androidx.navigation", name = "navigation-fragment-ktx", version.ref = "navigationFragmentKtx" }
androidx-navigation-ui-ktx = { group = "androidx.navigation", name = "navigation-ui-ktx", version.ref = "navigationUiKtx" }
+play-services-location = { module = "com.google.android.gms:play-services-location", version.ref = "playServicesLocation" }
+play-services-maps = { module = "com.google.android.gms:play-services-maps", version.ref = "playServicesMaps" }
[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }