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.SPUtils 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 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(R.id.wv_1) } private val wv_2 by lazy { find(R.id.wv_2) } private val wv_3 by lazy { find(R.id.wv_3) } private val tv_cancel by lazy { find(R.id.tv_cancel) } private val tv_action by lazy { find(R.id.tv_action) } private val tv_title by lazy { find(R.id.tv_title) } private val language by lazy { SPUtils.instance().getString("language", "en") } private val dayTimes = arrayListOf() 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(R.id.wv_4).gone() find(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 == "en") time.toTimeEnglish() else if (language == "fr") 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 } }