package com.casic.smarttube.widgets import android.app.Dialog import android.content.Context import android.os.Bundle import android.view.Gravity import androidx.fragment.app.FragmentManager import com.casic.smarttube.R import com.casic.smarttube.databinding.DialogSelectDateBinding import com.casic.smarttube.utils.LocaleConstant import com.jzxiang.pickerview.TimePickerDialog import com.jzxiang.pickerview.data.Type import com.pengxh.kt.lite.extensions.binding import com.pengxh.kt.lite.extensions.convertColor import com.pengxh.kt.lite.extensions.resetParams import com.pengxh.kt.lite.extensions.show import com.pengxh.kt.lite.extensions.timestampToDate import java.text.ParseException import java.text.SimpleDateFormat import java.util.Locale class DateSelectDialog private constructor(builder: Builder) : Dialog( builder.context, R.style.UserDefinedDialogStyle ) { private val ctx: Context = builder.context private val listener: OnDialogButtonClickListener = builder.listener private val fragmentManager: FragmentManager = builder.fragmentManager class Builder { lateinit var context: Context lateinit var listener: OnDialogButtonClickListener lateinit var fragmentManager: FragmentManager fun setContext(context: Context): Builder { this.context = context return this } fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { this.listener = listener return this } fun setFragmentManager(fragmentManager: FragmentManager): Builder { this.fragmentManager = fragmentManager return this } fun build(): DateSelectDialog { return DateSelectDialog(this) } } private val binding: DialogSelectDateBinding by binding() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) this.resetParams(Gravity.CENTER, R.style.UserDefinedAnimation, 0.85f) setCancelable(false) setCanceledOnTouchOutside(false) binding.startDateView.setOnClickListener { TimePickerDialog.Builder() .setThemeColor(R.color.mainThemeColor.convertColor(ctx)) .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> val textValue = millSeconds.timestampToDate() binding.startDateView.setText(textValue) }.build().show(fragmentManager, "DateSelectDialog") } binding.endDateView.setOnClickListener { TimePickerDialog.Builder() .setThemeColor(R.color.mainThemeColor.convertColor(ctx)) .setTitleStringId("请选择起始时间") .setWheelItemTextSize(16) .setCyclic(false) .setMinMillseconds(System.currentTimeMillis() - LocaleConstant.FIVE_YEARS) .setMaxMillseconds(System.currentTimeMillis()) .setType(Type.YEAR_MONTH_DAY) .setCallBack { _: TimePickerDialog?, millSeconds: Long -> val textValue = millSeconds.timestampToDate() binding.endDateView.setText(textValue) }.build().show(fragmentManager, "DateSelectDialog") } binding.dialogCancelButton.setOnClickListener { listener.onCancelClick() this.dismiss() } binding.dialogConfirmButton.setOnClickListener { //判断其实时间和结束时间 val startDate = binding.startDateView.text.toString() val endDate = binding.endDateView.text.toString() if (isEarlierThanStart(startDate, endDate)) { "结束时间不能早于开始时间".show(ctx) return@setOnClickListener } listener.onConfirmClick(startDate, endDate) this.dismiss() } } interface OnDialogButtonClickListener { fun onConfirmClick(startDate: String, endDate: String) fun onCancelClick() } /** * 判断时间是否早于当前时间 */ private fun isEarlierThanStart(start: String, end: String): Boolean { if (start.isBlank() || end.isBlank()) { return false } val dateFormat = SimpleDateFormat("yyyy-MM-dd", Locale.CHINA) try { return dateFormat.parse(start)?.time!! > dateFormat.parse(end)?.time!! } catch (e: ParseException) { e.printStackTrace(); } return false } }