@@ -4,14 +4,52 @@ import FontBTTFamily
4
4
import FontLXGWNeoXiHeiScreenFamily
5
5
import androidx.compose.animation.AnimatedVisibility
6
6
import androidx.compose.animation.Crossfade
7
- import androidx.compose.foundation.*
7
+ import androidx.compose.foundation.background
8
+ import androidx.compose.foundation.clickable
9
+ import androidx.compose.foundation.focusable
10
+ import androidx.compose.foundation.hoverable
8
11
import androidx.compose.foundation.interaction.MutableInteractionSource
9
- import androidx.compose.foundation.layout.*
12
+ import androidx.compose.foundation.layout.Arrangement
13
+ import androidx.compose.foundation.layout.Column
14
+ import androidx.compose.foundation.layout.PaddingValues
15
+ import androidx.compose.foundation.layout.Row
16
+ import androidx.compose.foundation.layout.fillMaxWidth
17
+ import androidx.compose.foundation.layout.padding
18
+ import androidx.compose.foundation.rememberScrollState
19
+ import androidx.compose.foundation.verticalScroll
10
20
import androidx.compose.material.icons.Icons
11
21
import androidx.compose.material.icons.filled.Clear
12
22
import androidx.compose.material.icons.filled.Home
13
- import androidx.compose.material3.*
14
- import androidx.compose.runtime.*
23
+ import androidx.compose.material3.DatePicker
24
+ import androidx.compose.material3.DatePickerDialog
25
+ import androidx.compose.material3.DisplayMode
26
+ import androidx.compose.material3.DropdownMenu
27
+ import androidx.compose.material3.DropdownMenuItem
28
+ import androidx.compose.material3.ElevatedButton
29
+ import androidx.compose.material3.ExperimentalMaterial3Api
30
+ import androidx.compose.material3.ExposedDropdownMenuBox
31
+ import androidx.compose.material3.ExposedDropdownMenuDefaults
32
+ import androidx.compose.material3.Icon
33
+ import androidx.compose.material3.LocalTextStyle
34
+ import androidx.compose.material3.MaterialTheme
35
+ import androidx.compose.material3.NavigationDrawerItem
36
+ import androidx.compose.material3.OutlinedTextField
37
+ import androidx.compose.material3.SelectableDates
38
+ import androidx.compose.material3.Slider
39
+ import androidx.compose.material3.SliderState
40
+ import androidx.compose.material3.Text
41
+ import androidx.compose.material3.TextButton
42
+ import androidx.compose.material3.TimeInput
43
+ import androidx.compose.material3.rememberDatePickerState
44
+ import androidx.compose.material3.rememberTimePickerState
45
+ import androidx.compose.runtime.Composable
46
+ import androidx.compose.runtime.LaunchedEffect
47
+ import androidx.compose.runtime.getValue
48
+ import androidx.compose.runtime.mutableStateListOf
49
+ import androidx.compose.runtime.mutableStateOf
50
+ import androidx.compose.runtime.remember
51
+ import androidx.compose.runtime.rememberCoroutineScope
52
+ import androidx.compose.runtime.setValue
15
53
import androidx.compose.ui.Alignment
16
54
import androidx.compose.ui.Modifier
17
55
import androidx.compose.ui.graphics.Color
@@ -20,16 +58,29 @@ import androidx.compose.ui.unit.TextUnit
20
58
import androidx.compose.ui.unit.TextUnitType
21
59
import androidx.compose.ui.unit.dp
22
60
import androidx.compose.ui.window.PopupProperties
23
- import database.entity.*
61
+ import database.entity.Account
62
+ import database.entity.BonusRecord
63
+ import database.entity.Weapon
64
+ import database.entity.WeaponView
65
+ import database.entity.Weapons
66
+ import database.entity.toView
24
67
import kotlinx.coroutines.launch
25
68
import org.jetbrains.exposed.sql.SizedCollection
26
69
import view.account.AccountViewPage
27
70
import view.account.AccountViewPageSelector
28
71
import view.account.PageViewState
29
- import java.time.*
72
+ import java.time.Duration
73
+ import java.time.Instant
74
+ import java.time.LocalDateTime
75
+ import java.time.LocalTime
76
+ import java.time.Year
77
+ import java.time.ZoneId
78
+ import java.time.ZoneOffset
79
+ import java.time.ZonedDateTime
30
80
import java.time.format.DateTimeFormatter
31
81
32
82
private const val EMOJI_ANGRY = " \uD83D\uDE21 "
83
+ private const val EMOJI_CLOCK = " \u23F1 "
33
84
34
85
/* *
35
86
*
@@ -136,18 +187,29 @@ private fun AccountHome(state: PageViewState) {
136
187
}
137
188
)
138
189
139
- val startTimePickerState = rememberTimePickerState(is24Hour = true )
140
-
141
190
val selectedStartDateMillis = startDatePickerState.selectedDateMillis
142
191
val selectedStartDateInstant = selectedStartDateMillis?.let { Instant .ofEpochMilli(it) }
143
- val selectedStartDateTime = selectedStartDateInstant?.atZone(ZoneId .systemDefault())
144
- ?.toLocalDate()
145
- ?.atTime(startTimePickerState.hour, startTimePickerState.minute)
192
+
193
+ var startTimePickerValue by remember { mutableStateOf<LocalTime ?>(null ) }
194
+
195
+ fun selectedStartDateTime (): LocalDateTime ? {
196
+ val selectedStartDateInstantValue = selectedStartDateInstant
197
+ ? : return null
198
+ val timeValue = startTimePickerValue
199
+ ? : return null
200
+
201
+ return selectedStartDateInstantValue.atZone(ZoneId .systemDefault())
202
+ .toLocalDate()
203
+ .atTime(timeValue)
204
+ }
205
+
206
+ val selectedStartDateTime = selectedStartDateTime()
207
+
146
208
147
209
val endDatePickerState = rememberDatePickerState(
148
210
initialSelectedDateMillis = null ,
149
211
initialDisplayedMonthMillis = selectedStartDateMillis ? : System .currentTimeMillis(),
150
- yearRange = selectedStartDateTime?.let {
212
+ yearRange = selectedStartDateTime() ?.let {
151
213
it.year.. nowYear.value
152
214
} ? : nowYear.value.. nowYear.value,
153
215
initialDisplayMode = DisplayMode .Input ,
@@ -158,19 +220,41 @@ private fun AccountHome(state: PageViewState) {
158
220
}
159
221
)
160
222
161
- val endTimePickerState = rememberTimePickerState(
162
- initialHour = nowTime.hour,
163
- initialMinute = nowTime.minute
164
- )
223
+ val selectedEndDateMillis = endDatePickerState.selectedDateMillis
224
+ val selectedEndDateInstant = selectedEndDateMillis?.let { Instant .ofEpochMilli(it) }
225
+ // val selectedEndDateTime = selectedEndDateInstant?.atZone(ZoneId.systemDefault())
226
+ // ?.toLocalDate()
227
+ // ?.atTime(endTimePickerState.hour, endTimePickerState.minute)
228
+
229
+ var endTimePickerValue by remember { mutableStateOf<LocalTime ?>(null ) }
230
+
231
+ fun selectedEndDateTime (): LocalDateTime ? {
232
+ val selectedEndDateInstantValue = selectedEndDateInstant
233
+ ? : return null
234
+ val timeValue = endTimePickerValue
235
+ ? : return null
236
+
237
+ return selectedEndDateInstantValue.atZone(ZoneId .systemDefault())
238
+ .toLocalDate()
239
+ .atTime(timeValue)
240
+ }
241
+
242
+ val selectedEndDateTime = selectedEndDateTime()
243
+
244
+ // val endTimePickerState = rememberTimePickerState(
245
+ // is24Hour = true,
246
+ // initialHour = nowTime.hour,
247
+ // initialMinute = nowTime.minute
248
+ // )
165
249
166
250
var weapon by remember { mutableStateOf<WeaponView ?>(null ) }
167
251
val score = remember { SliderState (value = 10f , steps = 8 , valueRange = 1f .. 10f ) }
168
252
169
- suspend fun clearStates () {
253
+ fun clearStates () {
170
254
startDatePickerState.selectedDateMillis = null
171
- startTimePickerState.settle()
255
+ // startTimePickerState.settle()
172
256
endDatePickerState.selectedDateMillis = null
173
- endTimePickerState.settle()
257
+ // endTimePickerState.settle()
174
258
weapon = null
175
259
score.value = 10f
176
260
}
@@ -183,10 +267,30 @@ private fun AccountHome(state: PageViewState) {
183
267
// start date
184
268
var showSelectStartDate by remember { mutableStateOf(false ) }
185
269
if (showSelectStartDate) {
270
+ val nowTime0 = LocalTime .now()
271
+ val startTimePickerState = rememberTimePickerState(
272
+ is24Hour = true ,
273
+ initialHour = nowTime0.hour,
274
+ initialMinute = nowTime0.minute
275
+ )
276
+
186
277
DatePickerDialog (
187
278
onDismissRequest = { showSelectStartDate = false },
279
+ dismissButton = {
280
+ TextButton (onClick = {
281
+ startDatePickerState.selectedDateMillis = System .currentTimeMillis()
282
+ }) {
283
+ Text (
284
+ " 现在$EMOJI_CLOCK " ,
285
+ fontFamily = FontLXGWNeoXiHeiScreenFamily ,
286
+ )
287
+ }
288
+ },
188
289
confirmButton = {
189
- TextButton (onClick = { showSelectStartDate = false }) {
290
+ TextButton (onClick = {
291
+ startTimePickerValue = LocalTime .of(startTimePickerState.hour, startTimePickerState.minute)
292
+ showSelectStartDate = false
293
+ }) {
190
294
Text (
191
295
" 就是这时$EMOJI_ANGRY " ,
192
296
fontFamily = FontLXGWNeoXiHeiScreenFamily ,
@@ -195,7 +299,6 @@ private fun AccountHome(state: PageViewState) {
195
299
},
196
300
) {
197
301
DatePicker (
198
- modifier = Modifier .padding(20 .dp),
199
302
state = startDatePickerState,
200
303
title = {
201
304
Text (
@@ -219,7 +322,7 @@ private fun AccountHome(state: PageViewState) {
219
322
onClick = { showSelectStartDate = true }
220
323
) {
221
324
Text (
222
- " 什么时候开始打的\uD83D\uDE21 " ,
325
+ " 什么时候开始打的$EMOJI_ANGRY$EMOJI_ANGRY " ,
223
326
fontFamily = FontLXGWNeoXiHeiScreenFamily ,
224
327
fontSize = TextUnit (50f , TextUnitType .Sp ),
225
328
modifier = Modifier
@@ -240,10 +343,30 @@ private fun AccountHome(state: PageViewState) {
240
343
// end date & time
241
344
var showEndDateTime by remember { mutableStateOf(false ) }
242
345
if (showEndDateTime) {
346
+ val nowTime0 = LocalTime .now()
347
+ val endTimePickerState = rememberTimePickerState(
348
+ is24Hour = true ,
349
+ initialHour = nowTime0.hour,
350
+ initialMinute = nowTime0.minute
351
+ )
352
+
243
353
DatePickerDialog (
244
354
onDismissRequest = { showEndDateTime = false },
355
+ dismissButton = {
356
+ TextButton (onClick = {
357
+ endDatePickerState.selectedDateMillis = System .currentTimeMillis()
358
+ }) {
359
+ Text (
360
+ " 现在$EMOJI_CLOCK " ,
361
+ fontFamily = FontLXGWNeoXiHeiScreenFamily ,
362
+ )
363
+ }
364
+ },
245
365
confirmButton = {
246
- TextButton (onClick = { showEndDateTime = false }) {
366
+ TextButton (onClick = {
367
+ endTimePickerValue = LocalTime .of(endTimePickerState.hour, endTimePickerState.minute)
368
+ showEndDateTime = false
369
+ }) {
247
370
Text (
248
371
" 就是这时$EMOJI_ANGRY " ,
249
372
fontFamily = FontLXGWNeoXiHeiScreenFamily ,
@@ -252,7 +375,6 @@ private fun AccountHome(state: PageViewState) {
252
375
},
253
376
) {
254
377
DatePicker (
255
- modifier = Modifier .padding(20 .dp),
256
378
state = endDatePickerState,
257
379
title = {
258
380
Text (
@@ -284,12 +406,6 @@ private fun AccountHome(state: PageViewState) {
284
406
}
285
407
}
286
408
287
- val selectedEndDateMillis = endDatePickerState.selectedDateMillis
288
- val selectedEndDateInstant = selectedEndDateMillis?.let { Instant .ofEpochMilli(it) }
289
- val selectedEndDateTime = selectedEndDateInstant?.atZone(ZoneId .systemDefault())
290
- ?.toLocalDate()
291
- ?.atTime(endTimePickerState.hour, endTimePickerState.minute)
292
-
293
409
AnimatedVisibility (selectedEndDateTime != null ) {
294
410
Text (
295
411
text = selectedEndDateTime?.format(DateTimeFormatter .ISO_LOCAL_DATE_TIME ) ? : " " ,
0 commit comments