package com.igo.user.dialog
|
|
import android.os.Bundle
|
import android.view.Gravity
|
import android.view.LayoutInflater
|
import android.view.View
|
import android.view.ViewGroup
|
import android.widget.TextView
|
import androidx.fragment.app.DialogFragment
|
import cn.sinata.xldutils.gone
|
import cn.sinata.xldutils.utils.LanguageUtil
|
import cn.sinata.xldutils.utils.toTime
|
import cn.sinata.xldutils.utils.toTimeEnglish
|
import cn.sinata.xldutils.utils.toTimeFrench
|
import cn.sinata.xldutils.view.WheelView
|
import com.igo.user.R
|
import com.igo.user.utils.Const
|
import org.jetbrains.anko.matchParent
|
import org.jetbrains.anko.support.v4.find
|
import org.jetbrains.anko.wrapContent
|
import java.util.Calendar
|
|
class ChooseReserveTimeDialog : DialogFragment() {
|
override fun onCreateView(
|
inflater: LayoutInflater,
|
container: ViewGroup?,
|
savedInstanceState: Bundle?
|
): View? {
|
return inflater.inflate(R.layout.dialog_time_wheel, container, false)
|
}
|
|
private val title by lazy {
|
arguments?.getString("title")
|
}
|
private val wv_1 by lazy { find<WheelView>(R.id.wv_1) }
|
private val wv_2 by lazy { find<WheelView>(R.id.wv_2) }
|
private val wv_3 by lazy { find<WheelView>(R.id.wv_3) }
|
private val tv_cancel by lazy { find<View>(R.id.tv_cancel) }
|
private val tv_action by lazy { find<View>(R.id.tv_action) }
|
private val tv_title by lazy { find<TextView>(R.id.tv_title) }
|
|
private val language by lazy {
|
LanguageUtil.getLanguage()
|
}
|
|
private val dayTimes = arrayListOf<Long>()
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
super.onCreate(savedInstanceState)
|
setStyle(STYLE_NO_FRAME, cn.sinata.xldutils.R.style.Dialog)
|
}
|
|
override fun onActivityCreated(savedInstanceState: Bundle?) {
|
super.onActivityCreated(savedInstanceState)
|
dialog?.window?.setLayout(matchParent, wrapContent)
|
dialog?.window?.setGravity(Gravity.BOTTOM)
|
dialog?.setCanceledOnTouchOutside(true)
|
}
|
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
super.onViewCreated(view, savedInstanceState)
|
if (!title.isNullOrEmpty())
|
tv_title.text = title
|
|
find<View>(R.id.wv_4).gone()
|
find<View>(R.id.wv_5).gone()
|
|
setDay()
|
setHour()
|
setMin()
|
|
wv_1.setOnWheelViewListener { _, item ->
|
setHour()
|
setMin()
|
}
|
wv_2.setOnWheelViewListener { _, _ ->
|
setMin()
|
}
|
|
tv_cancel.setOnClickListener {
|
dismiss()
|
}
|
tv_action.setOnClickListener {
|
//格式化的时间用于传参:yyyy-MM-dd HH:mm
|
val s = dayTimes[wv_1.seletedIndex].toTime("yyyy-MM-dd")+
|
" "+ wv_2.seletedItem.substring(0,2) +
|
":"+ wv_3.seletedItem.replace("分","")
|
|
|
callback?.onOk( //格式化回显的时间
|
wv_1.seletedItem+ " "+wv_2.seletedItem.replace(" ${requireContext().getString(R.string.小时单位)}", ":")+wv_3.seletedItem.replace("分","")
|
, s)
|
dismiss()
|
}
|
}
|
private var startTime = System.currentTimeMillis() + 61L * 60 * 1000 //客户:预约开始时间从60分钟之后
|
|
private fun setDay() {
|
val calendar = Calendar.getInstance()
|
calendar.set(Calendar.HOUR_OF_DAY,23)
|
calendar.set(Calendar.MINUTE,56)
|
val todayLastTime = calendar.timeInMillis //今天11点56分的时间,今天最晚可预约时间
|
if (startTime >= todayLastTime){
|
dayTimes.add(System.currentTimeMillis())
|
dayTimes.add(startTime+24*60*60*1000)
|
wv_1.setItems(listOf(getFormantDay(dayTimes[1])))
|
} else{
|
dayTimes.add(System.currentTimeMillis())
|
dayTimes.add(startTime)
|
dayTimes.add(startTime+24*60*60*1000)
|
wv_1.setItems(listOf(getFormantDay(dayTimes[1]),getFormantDay(dayTimes[2])))
|
}
|
wv_1.setSeletion(0)
|
}
|
|
/**
|
* 根据语言格式化日期显示
|
*/
|
private fun getFormantDay(time:Long):String{
|
return if (language == Const.Language.ENGLISH) time.toTimeEnglish() else if (language == Const.Language.FRENCH) time.toTimeFrench() else time.toTime("MM月dd")
|
}
|
|
private fun setHour() {
|
val i = if (wv_1.seletedIndex == 0) startTime.toTime("HH").toInt() else 0
|
wv_2.setItems(
|
(i..23).map {
|
String.format("%02d %s",it,requireContext().getString(R.string.小时单位))
|
}
|
)
|
wv_2.setSeletion(0)
|
}
|
|
private fun setMin() {
|
if (wv_1.seletedIndex == 0&&wv_2.seletedIndex == 0){
|
wv_3.setItems((startTime.toTime("mm").toInt()..59).map {
|
String.format("%02d%s",it,requireContext().getString(R.string.分钟单位))
|
})
|
}else{
|
wv_3.setItems((0..59).map {
|
String.format("%02d%s",it,requireContext().getString(R.string.分钟单位))
|
})
|
}
|
wv_3.setSeletion(0)
|
}
|
|
interface Callback {
|
fun onOk(s: String,formatS:String)
|
}
|
|
private var callback: Callback? = null
|
|
fun setCallback(callback: Callback) {
|
this.callback = callback
|
}
|
}
|