Skip to content

Commit

Permalink
Feat : Add a popup menu in daysScheduleEdit Items # tukcomCD2024#85
Browse files Browse the repository at this point in the history
Implement a chage schedule's date and delete feature
  • Loading branch information
ksh-g001 committed Jun 15, 2024
1 parent ae4932d commit 7ce1aa2
Show file tree
Hide file tree
Showing 39 changed files with 827 additions and 181 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -26,21 +26,21 @@ class AiDaysScheduleAdapter(data: List<AiDaysSchedule>)

when(data.type){
AIRPLANE ->{
binding.buy.visibility = View.VISIBLE
binding.search.visibility = View.VISIBLE
binding.number.visibility = View.GONE
binding.numberBackground.setImageResource(R.drawable.icon_airplane)
}
HOTEL ->{
binding.number.text = "${position+1}"
binding.number.visibility = View.VISIBLE
binding.buy.visibility = View.VISIBLE
binding.search.visibility = View.VISIBLE
binding.numberBackground.setImageResource(R.drawable.white_oval)

}
PLACE ->{
binding.number.text = "${position+1}"
binding.number.visibility = View.VISIBLE
binding.buy.visibility = View.GONE
binding.search.visibility = View.GONE
binding.numberBackground.setImageResource(R.drawable.white_oval)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,11 @@ package com.project.how.adapter.recyclerview
import android.content.Context
import android.util.Log
import android.view.LayoutInflater
import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import android.widget.Toast
import androidx.appcompat.widget.PopupMenu
import androidx.recyclerview.widget.RecyclerView
import com.project.how.R
import com.project.how.data_class.recyclerview.DaysSchedule
Expand All @@ -20,10 +23,12 @@ class DaysScheduleEditAdapter (
private val context: Context,
private val onButtonClickListener: OnDaysButtonClickListener
)
: RecyclerView.Adapter<DaysScheduleEditAdapter.ViewHolder>(), ItemMoveListener{
: RecyclerView.Adapter<DaysScheduleEditAdapter.ViewHolder>(), ItemMoveListener, PopupMenu.OnMenuItemClickListener {
private var dailySchedule = data
private var initList: MutableList<DaysSchedule> = mutableListOf()
private var onItemDragListener: ItemStartDragListener? = null
private var currentPosition = -1
private var currentData : DaysSchedule? = null

inner class ViewHolder(val binding: CalendarDaysScheduleEditItemBinding) : RecyclerView.ViewHolder(binding.root){
fun bind(data : DaysSchedule, position: Int){
Expand All @@ -32,9 +37,9 @@ class DaysScheduleEditAdapter (
binding.budget.text = context.getString(R.string.budget, formattedNumber)

if ((data.latitude == null || data.longitude == null) || (data.latitude == 0.0 && data.longitude == 0.0)){
binding.editNeed.visibility = View.VISIBLE
binding.perfect.visibility = View.GONE
}else{
binding.editNeed.visibility = View.GONE
binding.perfect.visibility = View.VISIBLE
}

if (data.purchaseStatus){
Expand Down Expand Up @@ -68,9 +73,14 @@ class DaysScheduleEditAdapter (
}
}

binding.delete.setOnClickListener {
remove(position)
onButtonClickListener.onDeleteButtonClickListener(position)
binding.more.setOnClickListener {
currentPosition = position
currentData = data
PopupMenu(context, binding.more).apply {
inflate(R.menu.schedule_edit_more)
setOnMenuItemClickListener(this@DaysScheduleEditAdapter)
show()
}
}

binding.edit.setOnClickListener {
Expand All @@ -79,6 +89,24 @@ class DaysScheduleEditAdapter (
}
}

override fun onMenuItemClick(menuItem: MenuItem): Boolean {
when (menuItem.itemId) {
R.id.menu_sch_order_change -> {
onButtonClickListener.onMoreMenuOrderChangeClickListener(currentPosition)
}
R.id.menu_sch_date_change -> {
onButtonClickListener.onMoreMenuDateChangeClickListener(currentData!!, currentPosition)
}
R.id.menu_sch_delete -> {
onButtonClickListener.onMoreMenuDeleteClickListener(currentPosition)
}
else ->{
Toast.makeText(context, context.getString(R.string.non_exist_menu_warning), Toast.LENGTH_SHORT).show()
}
}
return false
}

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder = ViewHolder(
CalendarDaysScheduleEditItemBinding.inflate(
LayoutInflater.from(parent.context),
Expand Down Expand Up @@ -120,6 +148,13 @@ class DaysScheduleEditAdapter (
notifyItemChanged(position)
}

fun swap(fromPosition: Int, toPosition: Int){
val temp = dailySchedule[fromPosition]
dailySchedule[fromPosition] = dailySchedule[toPosition]
dailySchedule[toPosition] = temp
notifyItemMoved(fromPosition, toPosition)
}

fun getData() = dailySchedule

override fun onItemMove(fromPosition: Int, toPosition: Int): Boolean {
Expand All @@ -146,7 +181,9 @@ class DaysScheduleEditAdapter (

interface OnDaysButtonClickListener{
fun onEditButtonClickListener(data : DaysSchedule, position: Int)
fun onDeleteButtonClickListener(position : Int)
fun onMoreMenuDateChangeClickListener(data : DaysSchedule, position: Int)
fun onMoreMenuOrderChangeClickListener(position: Int)
fun onMoreMenuDeleteClickListener(position: Int)
}

companion object{
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.project.how.interface_af

import com.project.how.data_class.recyclerview.DaysSchedule

interface OnDateTimeListener {
fun onSaveDate(date : String, type: Int)
fun onSaveDateTime(dateTime: String, type: Int)
fun onSaveDate(d : DaysSchedule, date : String, position: Int)
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,10 @@ class MainActivity : AppCompatActivity() {
binding.main = this
binding.lifecycleOwner = this

val menu = intent.getIntExtra(getString(R.string.menu_intent), 2)

supportFragmentManager.beginTransaction().add(R.id.fragment, CalendarFragment()).commitAllowingStateLoss()
binding.menu.menu.getItem(2).isEnabled = false
binding.menu.menu.getItem(menu).isEnabled = false
binding.menu.selectedItemId = R.id.menu_calendar
binding.menu.setOnItemSelectedListener {
when(it.itemId){
Expand All @@ -48,5 +50,10 @@ class MainActivity : AppCompatActivity() {

fun moveAddAICalendar(){
startActivity(Intent(this, AddAICalendarActivity::class.java))
}companion object{
const val TICKET = 1
const val CALENDAR = 2
const val PICTURE = 3
const val MY_PAGE = 4
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,27 +9,20 @@ import android.widget.Toast
import androidx.activity.viewModels
import androidx.databinding.DataBindingUtil
import com.project.how.R
import com.project.how.adapter.recyclerview.CalendarAdapter
import com.project.how.databinding.ActivitySignUpBinding
import com.project.how.databinding.CalendarBottomSheetBinding
import com.project.how.view_model.CalendarViewModel
import com.project.how.view_model.MemberViewModel
import java.time.LocalDate
import java.time.format.DateTimeFormatter

class SignUpActivity : AppCompatActivity() {
private lateinit var binding : ActivitySignUpBinding
private lateinit var calendarBinding : CalendarBottomSheetBinding
private val calenderViewModel : CalendarViewModel by viewModels()
private val memberViewModel : MemberViewModel by viewModels()
private lateinit var days : List<Int>
private lateinit var adapter : CalendarAdapter
private var selectedDay : LocalDate? = null

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.activity_sign_up)
calendarBinding = CalendarBottomSheetBinding.inflate(layoutInflater)
binding.signUp = this
binding.lifecycleOwner = this

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import android.os.Bundle
import android.util.Log
import android.widget.Toast
import androidx.activity.viewModels
import androidx.core.app.ActivityCompat
import androidx.databinding.DataBindingUtil
import androidx.lifecycle.lifecycleScope
import com.project.how.R
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,14 @@ import android.content.Intent
import android.os.Build
import android.os.Bundle
import android.util.Log
import android.view.MotionEvent
import android.view.View
import android.view.ViewGroup
import android.view.ViewParent
import android.widget.LinearLayout
import android.widget.Toast
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.core.widget.NestedScrollView
import androidx.databinding.DataBindingUtil
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.ItemTouchHelper
import androidx.recyclerview.widget.RecyclerView
import com.google.android.gms.maps.GoogleMap
import com.google.android.gms.maps.GoogleMapOptions
import com.google.android.gms.maps.OnMapReadyCallback
Expand All @@ -36,15 +31,19 @@ import com.project.how.data_class.recyclerview.AiSchedule
import com.project.how.data_class.recyclerview.DaysSchedule
import com.project.how.data_class.recyclerview.Schedule
import com.project.how.databinding.ActivityCalendarEditBinding
import com.project.how.interface_af.OnDateTimeListener
import com.project.how.interface_af.OnDesListener
import com.project.how.interface_af.OnScheduleListener
import com.project.how.interface_af.interface_ada.ItemStartDragListener
import com.project.how.view.activity.MainActivity
import com.project.how.view.dialog.AiScheduleDialog
import com.project.how.view.dialog.DatePickerDialog
import com.project.how.view.dialog.bottom_sheet_dialog.DesBottomSheetDialog
import com.project.how.view.dialog.bottom_sheet_dialog.EditScheduleBottomSheetDialog
import com.project.how.view.dp.DpPxChanger
import com.project.how.view.map_helper.CameraOptionProducer
import com.project.how.view.map_helper.MarkerProducer
import com.project.how.view_model.CalendarViewModel
import com.project.how.view_model.MemberViewModel
import com.project.how.view_model.ScheduleViewModel
import kotlinx.coroutines.launch
Expand All @@ -54,14 +53,17 @@ import java.text.SimpleDateFormat
import java.time.LocalDate
import java.time.format.DateTimeFormatter
import java.util.Calendar
import java.util.Date
import java.util.Locale
import java.util.TimeZone
import kotlin.math.abs


class CalendarEditActivity
: AppCompatActivity(), OnMapReadyCallback, DaysScheduleEditAdapter.OnDaysButtonClickListener, OnScheduleListener, OnDesListener {
: AppCompatActivity(), OnMapReadyCallback, DaysScheduleEditAdapter.OnDaysButtonClickListener, OnScheduleListener, OnDesListener, OnDateTimeListener {
private lateinit var binding : ActivityCalendarEditBinding
private val viewModel : ScheduleViewModel by viewModels()
private val calendarViewModel : CalendarViewModel by viewModels()
private lateinit var data : Schedule
private var type: Int = FAILURE
private lateinit var adapter : DaysScheduleEditAdapter
Expand Down Expand Up @@ -315,7 +317,7 @@ class CalendarEditActivity
des.show(supportFragmentManager, "DesBottomSheetDialog")
}

fun showCalendar(){
fun showRangeCalendar(){
val constraints = CalendarConstraints.Builder()
.setStart(Calendar.getInstance().timeInMillis)
.build()
Expand Down Expand Up @@ -351,7 +353,7 @@ class CalendarEditActivity
getString(R.string.server_network_error), Toast.LENGTH_SHORT).show()
}
ScheduleViewModel.SUCCESS ->{
moveCalendarList()
moveCalendarFragment()
}
}
}
Expand All @@ -374,9 +376,12 @@ class CalendarEditActivity
}
}

private fun moveCalendarList(){
val intent = Intent(this, CalendarListActivity::class.java)
private fun moveCalendarFragment(){
val intent = Intent(this, MainActivity::class.java)
intent.putExtra(getString(R.string.menu_intent), MainActivity.CALENDAR)
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TASK
startActivity(intent)

}


Expand All @@ -400,7 +405,22 @@ class CalendarEditActivity
editScheduleBottomSheet.show(supportFragmentManager, "EditScheduleBottomSheetDialog")
}

override fun onDeleteButtonClickListener(position: Int) {
override fun onMoreMenuDateChangeClickListener(data: DaysSchedule, position: Int) {
lifecycleScope.launch {
calendarViewModel.getDateList(this@CalendarEditActivity.data.startDate, this@CalendarEditActivity.data.dailySchedule.lastIndex).collect{dates->
val datepicker = DatePickerDialog(data, dates, position, selectedDays, this@CalendarEditActivity)
datepicker.show(supportFragmentManager, "DatePickerDialog")
}
}

}

override fun onMoreMenuOrderChangeClickListener(position: Int) {

}

override fun onMoreMenuDeleteClickListener(position: Int) {
adapter.remove(position)
data.dailySchedule[selectedDays]= adapter.getData()
lifecycleScope.launch {
viewModel.getTotalCost(data).collect{
Expand Down Expand Up @@ -443,6 +463,18 @@ class CalendarEditActivity
}
}

override fun onSaveDate(d: DaysSchedule, date: String, position: Int) {
val format = SimpleDateFormat("yyyy-MM-dd", Locale.getDefault())
val sd = format.parse(data.startDate)
val ssd = format.parse(date)
val diffMillies = abs(sd.time - ssd.time)
val diff = (diffMillies / (24 * 60 * 60 * 1000)).toInt()
data.dailySchedule[selectedDays+diff].add(d)
adapter.remove(position)
supportMapFragment.getMapAsync(this)

}

companion object{
const val FAILURE = -1
const val AI_SCHEDULE = 0
Expand Down
Loading

0 comments on commit 7ce1aa2

Please sign in to comment.