Skip to content

Commit

Permalink
Add basic UI for orders
Browse files Browse the repository at this point in the history
  • Loading branch information
andraantariksa committed Apr 13, 2022
1 parent 4c456b9 commit 8bb6390
Show file tree
Hide file tree
Showing 18 changed files with 483 additions and 21 deletions.
5 changes: 5 additions & 0 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package id.shaderboi.koffie.ui.main.orders

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import com.google.android.material.tabs.TabLayoutMediator
import dagger.hilt.android.AndroidEntryPoint
import id.shaderboi.koffie.databinding.FragmentOrdersBinding
import id.shaderboi.koffie.ui.main.orders.adapter.OrdersTabFragmentAdapter

@AndroidEntryPoint
class OrdersFragment : Fragment() {
private var _binding: FragmentOrdersBinding? = null
val binding get() = _binding!!

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentOrdersBinding.inflate(inflater, container, false)

setupView()

return binding.root
}

private fun setupView() {
binding.viewPagerMain.adapter = OrdersTabFragmentAdapter(this)
// TabLayoutMediator(binding.tabLayoutMain, binding.viewPagerMain) { tab, position ->
//
// }.attach()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
package id.shaderboi.koffie.ui.main.orders.adapter

import androidx.fragment.app.Fragment
import androidx.viewpager2.adapter.FragmentStateAdapter
import id.shaderboi.koffie.ui.main.orders.history.HistoryOrderFragment
import id.shaderboi.koffie.ui.main.orders.ongoing.OngoingOrderFragment

class OrdersTabFragmentAdapter(fragment: Fragment): FragmentStateAdapter(fragment) {
private val fragments = arrayOf<Fragment>(
HistoryOrderFragment(),
OngoingOrderFragment(),
)

override fun getItemCount(): Int = fragments.size

override fun createFragment(position: Int): Fragment {
return fragments[position]
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,83 @@
package id.shaderboi.koffie.ui.main.orders.history

import android.content.Intent
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.DividerItemDecoration
import dagger.hilt.android.AndroidEntryPoint
import id.shaderboi.koffie.R
import id.shaderboi.koffie.core.domain.model.Coupon
import id.shaderboi.koffie.databinding.FragmentOrdersHistoryBinding
import id.shaderboi.koffie.ui.main.orders.history.adapter.HistoryOrderAdapter
import id.shaderboi.koffie.ui.main.orders.history.adapter.HistoryOrderShimmerAdapter
import id.shaderboi.koffie.ui.main.orders.ongoing.adapter.OngoingOrderShimmerAdapter
import id.shaderboi.koffie.ui.order_detail.OrderDetailActivity
import kotlinx.coroutines.delay

@AndroidEntryPoint
class HistoryOrderFragment : Fragment() {
private var _binding: FragmentOrdersHistoryBinding? = null
val binding get() = _binding!!

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentOrdersHistoryBinding.inflate(inflater, container, false)

collectUIEvent()
setupView()

return binding.root
}

private fun collectUIEvent() {
val coupons = mutableListOf<Coupon>()
for (i in 1..10) {
coupons.add(
Coupon(
0,
"ABC",
"asdasdasdasd\nzxczcxzcxzcxc"
)
)
coupons.add(
Coupon(
1,
"asdzxzx",
"asdasdasdasd\nzxczcxzcxzcxc"
)
)
}
lifecycleScope.launchWhenCreated {
delay(3000)
binding.root.hideShimmer()
binding.recyclerViewHistoryOrder.adapter =
HistoryOrderAdapter(coupons) { view, coupon ->
val context = requireContext()
val intent = Intent(context, OrderDetailActivity::class.java).apply {
putExtra("test", 123)
}
context.startActivity(intent)
}
}
}

private fun setupView() {
val dividerItemDecoration =
DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL)
dividerItemDecoration.setDrawable(
ContextCompat.getDrawable(requireContext(), R.drawable.divider8dp)!!
);
binding.recyclerViewHistoryOrder.apply {
addItemDecoration(dividerItemDecoration)
adapter = HistoryOrderShimmerAdapter()
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package id.shaderboi.koffie.ui.main.orders.history.adapter

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import id.shaderboi.koffie.core.domain.model.Coupon
import id.shaderboi.koffie.databinding.ItemCouponBinding
import id.shaderboi.koffie.databinding.ItemOrderBinding

class HistoryOrderAdapter(
private val coupons: List<Coupon>,
private val onClick: (view: View, coupon: Coupon) -> Unit
) :
RecyclerView.Adapter<HistoryOrderAdapter.ViewHolder>() {

class ViewHolder(val binding: ItemOrderBinding) :
RecyclerView.ViewHolder(binding.root)

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val inflater = LayoutInflater.from(parent.context)
return ViewHolder(ItemOrderBinding.inflate(inflater, parent, false))
}

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val coupon = coupons[position]
holder.binding.apply {
textViewTotalItem.text = "1"
textViewTitle.text = coupon.title
root.setOnClickListener { view ->
onClick(view, coupon)
}
}
}

override fun getItemCount(): Int = coupons.size
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package id.shaderboi.koffie.ui.main.orders.history.adapter

import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView
import id.shaderboi.koffie.R
import id.shaderboi.koffie.databinding.ItemOrderBinding

class HistoryOrderShimmerAdapter :
RecyclerView.Adapter<HistoryOrderShimmerAdapter.ViewHolder>() {

class ViewHolder(val binding: ItemOrderBinding) :
RecyclerView.ViewHolder(binding.root)

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val inflater = LayoutInflater.from(parent.context)
return ViewHolder(ItemOrderBinding.inflate(inflater, parent, false))
}

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val context = holder.binding.root.context
holder.binding.apply {
textViewTotalItem.background =
ContextCompat.getDrawable(context, R.color.placeholder)
textViewTitle.background =
ContextCompat.getDrawable(context, R.color.placeholder)
textViewDatetime.background =
ContextCompat.getDrawable(context, R.color.placeholder)
textVIewPrice.background =
ContextCompat.getDrawable(context, R.color.placeholder)
}
}

override fun getItemCount(): Int = 10
}
Original file line number Diff line number Diff line change
@@ -1,25 +1,31 @@
package id.shaderboi.koffie.ui.main.order
package id.shaderboi.koffie.ui.main.orders.ongoing

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import dagger.hilt.EntryPoint
import com.google.android.material.tabs.TabLayoutMediator
import dagger.hilt.android.AndroidEntryPoint
import id.shaderboi.koffie.databinding.FragmentOrderBinding
import id.shaderboi.koffie.databinding.FragmentOrdersBinding

@AndroidEntryPoint
class OrderFragment: Fragment() {
private var _binding: FragmentOrderBinding? = null
class OngoingOrderFragment: Fragment() {
private var _binding: FragmentOrdersBinding? = null
val binding get() = _binding!!

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
_binding = FragmentOrderBinding.inflate(inflater, container, false)
_binding = FragmentOrdersBinding.inflate(inflater, container, false)

setupView()

return binding.root
}

private fun setupView() {
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package id.shaderboi.koffie.ui.main.orders.ongoing.adapter

import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import id.shaderboi.koffie.core.domain.model.Coupon
import id.shaderboi.koffie.databinding.ItemCouponBinding

class OngoingOrderAdapter(
private val coupons: List<Coupon>,
private val onClick: (view: View, coupon: Coupon) -> Unit
) :
RecyclerView.Adapter<OngoingOrderAdapter.ViewHolder>() {

class ViewHolder(val binding: ItemCouponBinding) :
RecyclerView.ViewHolder(binding.root)

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val inflater = LayoutInflater.from(parent.context)
return ViewHolder(ItemCouponBinding.inflate(inflater, parent, false))
}

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val coupon = coupons[position]
holder.binding.apply {
textViewDescription.text = coupon.description
textViewTitle.text = coupon.title
root.setOnClickListener { view ->
onClick(view, coupon)
}
}
}

override fun getItemCount(): Int = coupons.size
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package id.shaderboi.koffie.ui.main.orders.ongoing.adapter

import android.view.LayoutInflater
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView
import id.shaderboi.koffie.R
import id.shaderboi.koffie.databinding.ItemCouponBinding

class OngoingOrderShimmerAdapter() :
RecyclerView.Adapter<OngoingOrderShimmerAdapter.ViewHolder>() {

class ViewHolder(val binding: ItemCouponBinding) :
RecyclerView.ViewHolder(binding.root)

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val inflater = LayoutInflater.from(parent.context)
return ViewHolder(ItemCouponBinding.inflate(inflater, parent, false))
}

override fun onBindViewHolder(holder: ViewHolder, position: Int) {
val context = holder.binding.root.context
holder.binding.apply {
textViewDescription.apply {
background = ContextCompat.getDrawable(context, R.color.placeholder)
minLines = 3
}
textViewTitle.background =
ContextCompat.getDrawable(context, R.color.placeholder)
}
}

override fun getItemCount(): Int = 10
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package id.shaderboi.koffie.ui.order_detail

import androidx.appcompat.app.AppCompatActivity

class OrderDetailActivity : AppCompatActivity() {
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,9 @@
android:layout_height="match_parent"
android:orientation="vertical">

<include
android:id="@+id/includeViewPromo"
layout="@layout/view_promo" />

<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerViewProducts"
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingStart="20dp"
android:paddingEnd="20dp"
tools:listitem="@layout/item_products" />
tools:text="Hi there!" />

</LinearLayout>
Loading

0 comments on commit 8bb6390

Please sign in to comment.