From c130e27c914214129b5ae5cdded2b6c4839e928b Mon Sep 17 00:00:00 2001 From: p3im8p2yz Date: Thu, 5 Jun 2025 17:59:16 +0800 Subject: [PATCH] ADD file via upload --- java_program | 165 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100644 java_program diff --git a/java_program b/java_program new file mode 100644 index 0000000..70172fe --- /dev/null +++ b/java_program @@ -0,0 +1,165 @@ +package com.example.doitnow; + +import android.os.Bundle; +import android.text.TextUtils; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.EditText; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import com.example.doitnow.Model.ToDoModel; +import com.example.doitnow.Utils.DatabaseHandler; +import com.google.android.material.bottomsheet.BottomSheetDialogFragment; +import com.google.android.material.datepicker.MaterialDatePicker; +import com.google.android.material.timepicker.MaterialTimePicker; +import com.google.android.material.timepicker.TimeFormat; + +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; + +public class AddNewTask extends BottomSheetDialogFragment { + + public static final String TAG = "AddNewTask"; + + private EditText newTaskText; + private EditText startTimeEdit; + private EditText endTimeEdit; + private DatabaseHandler db; + + private Calendar startCalendar; + private Calendar endCalendar; + + public static AddNewTask newInstance() { + return new AddNewTask(); + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, + @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + + View view = inflater.inflate(R.layout.new_task, container, false); + newTaskText = view.findViewById(R.id.newTaskText); + startTimeEdit = view.findViewById(R.id.startTimeEdit); + endTimeEdit = view.findViewById(R.id.endTimeEdit); + View saveButton = view.findViewById(R.id.newTaskButton); + + db = new DatabaseHandler(requireContext()); + db.openDatabase(); + + startCalendar = Calendar.getInstance(); + endCalendar = Calendar.getInstance(); + + startTimeEdit.setOnClickListener(v -> openDateTimePicker(startCalendar, startTimeEdit)); + endTimeEdit.setOnClickListener(v -> openDateTimePicker(endCalendar, endTimeEdit)); + + saveButton.setOnClickListener(v -> { + String taskText = newTaskText.getText().toString(); + if (!TextUtils.isEmpty(taskText)) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.getDefault()); + String start = sdf.format(startCalendar.getTime()); + String end = sdf.format(endCalendar.getTime()); + + Bundle args = getArguments(); + if (args != null && args.containsKey("id")) { + // 编辑任务 + int id = args.getInt("id"); + ToDoModel task = new ToDoModel(); + task.setId(id); + task.setTask(taskText); + task.setStartTime(start); + task.setEndTime(end); + task.setStatus(0); // 可根据需要修改 + db.updateTask(task); + } else { + // 添加任务 + ToDoModel task = new ToDoModel(); + task.setTask(taskText); + task.setStartTime(start); + task.setEndTime(end); + task.setStatus(0); + db.insertTask(task); + } + + // 回传结果,通知刷新 + Bundle result = new Bundle(); + result.putBoolean("taskAdded", true); + getParentFragmentManager().setFragmentResult("taskAdded", result); + + dismiss(); + } + else{ + newTaskText.setError("任務不可為空"); + return; + } + }); + + Bundle args = getArguments(); + if (args != null) { + String task = args.getString("task"); + String start = args.getString("startTime"); + String end = args.getString("endTime"); + + newTaskText.setText(task); + startTimeEdit.setText(start); + endTimeEdit.setText(end); + + // 解析 startTime 字符串为 Calendar 类型 + try { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.getDefault()); + Date startDate = sdf.parse(start); + Date endDate = sdf.parse(end); + + if (startDate != null) startCalendar.setTime(startDate); + if (endDate != null) endCalendar.setTime(endDate); + } catch (ParseException e) { + e.printStackTrace(); + } + } + + + return view; + } + + private void openDateTimePicker(Calendar targetCalendar, EditText targetEditText) { + MaterialDatePicker datePicker = MaterialDatePicker.Builder.datePicker() + .setTitleText("選擇日期") + .setSelection(MaterialDatePicker.todayInUtcMilliseconds()) + //.setTheme(R.style.CustomDatePickerTheme) + .build(); + + datePicker.addOnPositiveButtonClickListener(selection -> { + targetCalendar.setTimeInMillis(selection); + openTimePicker(targetCalendar, targetEditText); + }); + + datePicker.show(getParentFragmentManager(), "DATE_PICKER"); + } + + private void openTimePicker(Calendar calendar, EditText editText) { + MaterialTimePicker timePicker = new MaterialTimePicker.Builder() + .setTitleText("選擇時間") + .setTimeFormat(TimeFormat.CLOCK_24H) + .setHour(calendar.get(Calendar.HOUR_OF_DAY)) + .setMinute(calendar.get(Calendar.MINUTE)) + .build(); + + timePicker.addOnPositiveButtonClickListener(v -> { + calendar.set(Calendar.HOUR_OF_DAY, timePicker.getHour()); + calendar.set(Calendar.MINUTE, timePicker.getMinute()); + + String formatted = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.getDefault()) + .format(calendar.getTime()); + editText.setText(formatted); + }); + + timePicker.show(getParentFragmentManager(), "TIME_PICKER"); + } +}