From 78d741935b7da5a9fbd44e47a90f67ae0681e701 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=94=D0=B0=D0=BD=D0=B8=D0=BB?= <119668441+Jiga228@users.noreply.github.com> Date: Wed, 14 May 2025 18:05:59 +0700 Subject: [PATCH] Update --- .../tasktracker/Activities/AddNewTask.java | 44 ++++++++++++++----- .../tasktracker/Activities/EditTask.java | 31 ++++++++++--- .../ViewModels/TimePickerFragment.java | 22 ++++++++++ .../main/res/layout/activity_add_new_task.xml | 22 +++++++--- .../main/res/layout/activity_edit_task.xml | 22 +++++++--- app/src/main/res/values-en/strings.xml | 1 + app/src/main/res/values-ru/strings.xml | 1 + app/src/main/res/values/strings.xml | 2 + 8 files changed, 118 insertions(+), 27 deletions(-) create mode 100644 app/src/main/java/com/example/tasktracker/Activities/ViewModels/TimePickerFragment.java diff --git a/app/src/main/java/com/example/tasktracker/Activities/AddNewTask.java b/app/src/main/java/com/example/tasktracker/Activities/AddNewTask.java index 8fddcda..38dcff0 100644 --- a/app/src/main/java/com/example/tasktracker/Activities/AddNewTask.java +++ b/app/src/main/java/com/example/tasktracker/Activities/AddNewTask.java @@ -1,17 +1,20 @@ package com.example.tasktracker.Activities; import android.app.DatePickerDialog; +import android.app.TimePickerDialog; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.widget.DatePicker; +import android.widget.TimePicker; import androidx.appcompat.app.AppCompatActivity; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProvider; import com.example.tasktracker.Activities.ViewModels.AddItemViewModel; +import com.example.tasktracker.Activities.ViewModels.TimePickerFragment; import com.example.tasktracker.Answers.Task; import com.example.tasktracker.PublicKeyNames; import com.example.tasktracker.R; @@ -20,13 +23,14 @@ import com.google.android.material.snackbar.Snackbar; import java.util.Random; -public class AddNewTask extends AppCompatActivity implements DatePickerDialog.OnDateSetListener { +public class AddNewTask extends AppCompatActivity implements DatePickerDialog.OnDateSetListener, TimePickerDialog.OnTimeSetListener { private static final String TAG = "ADD_NEW_TASK"; private ActivityAddNewTaskBinding binding; private static String token; private AddItemViewModel viewModel; private String stringDate = ""; + private String stringTime = ""; @Override protected void onCreate(Bundle savedInstanceState) { @@ -41,12 +45,14 @@ public class AddNewTask extends AppCompatActivity implements DatePickerDialog.On return; } - binding.btnDatePick.setOnClickListener(v->{ - DatePickerFragment fragment; - fragment = new DatePickerFragment(); + DatePickerFragment fragment = new DatePickerFragment(); fragment.show(getSupportFragmentManager(), "DATE PICK"); }); + binding.btnTimePick.setOnClickListener(v->{ + TimePickerFragment fragment = new TimePickerFragment(); + fragment.show(getSupportFragmentManager(), "TIME PICKER"); + }); viewModel = new ViewModelProvider(this).get(AddItemViewModel.class); viewModel.getClose().observe(this, new Observer() { @@ -80,9 +86,15 @@ public class AddNewTask extends AppCompatActivity implements DatePickerDialog.On Snackbar.make(binding.getRoot(), R.string.snackbar_EnterDate, Snackbar.LENGTH_SHORT).show(); return; } + if(stringTime.isEmpty()) { + Snackbar.make(binding.getRoot(), R.string.snackbar_EnterDate, Snackbar.LENGTH_SHORT).show(); + return; + } - long ID = generateID(name, description, stringDate); - Task task = new Task(ID, name, description, stringDate); + String dateTime = stringDate + ' ' + stringTime; + + long ID = generateID(name, description, dateTime); + Task task = new Task(ID, name, description, dateTime); viewModel.OfflineSaveData(task); }); } @@ -98,19 +110,25 @@ public class AddNewTask extends AppCompatActivity implements DatePickerDialog.On binding.AddTask.setOnClickListener(v->{ String name = binding.TaskName.getText().toString(); String description = binding.TaskDescription.getText().toString(); - String date = binding.btnDatePick.getText().toString(); + if(name.isEmpty()) { Snackbar.make(binding.getRoot(), R.string.snackbar_EnterName, Snackbar.LENGTH_SHORT).show(); return; } - if(date.isEmpty()) { + if(stringDate.isEmpty()) { + Snackbar.make(binding.getRoot(), R.string.snackbar_EnterDate, Snackbar.LENGTH_SHORT).show(); + return; + } + if(stringTime.isEmpty()) { Snackbar.make(binding.getRoot(), R.string.snackbar_EnterDate, Snackbar.LENGTH_SHORT).show(); return; } - long ID = generateID(name, description, date); - Task task = new Task(ID, name, description, date); + String dateTime = stringDate + ' ' + stringTime; + + long ID = generateID(name, description, dateTime); + Task task = new Task(ID, name, description, dateTime); viewModel.OnlineSaveData(task, token); }); } @@ -140,4 +158,10 @@ public class AddNewTask extends AppCompatActivity implements DatePickerDialog.On + Integer.toString(year); binding.btnDatePick.setText(stringDate); } + + @Override + public void onTimeSet(TimePicker timePicker, int hour, int minute) { + stringTime = Integer.toString(hour) + ':' + Integer.toString(minute); + binding.btnTimePick.setText(stringTime); + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/tasktracker/Activities/EditTask.java b/app/src/main/java/com/example/tasktracker/Activities/EditTask.java index a25322b..ff8fcb2 100644 --- a/app/src/main/java/com/example/tasktracker/Activities/EditTask.java +++ b/app/src/main/java/com/example/tasktracker/Activities/EditTask.java @@ -1,23 +1,26 @@ package com.example.tasktracker.Activities; import android.app.DatePickerDialog; +import android.app.TimePickerDialog; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.widget.DatePicker; +import android.widget.TimePicker; import androidx.appcompat.app.AppCompatActivity; import androidx.lifecycle.Observer; import com.example.tasktracker.Activities.ViewModels.EditTaskViewModel; +import com.example.tasktracker.Activities.ViewModels.TimePickerFragment; import com.example.tasktracker.Answers.Task; import com.example.tasktracker.PublicKeyNames; import com.example.tasktracker.R; import com.example.tasktracker.databinding.ActivityEditTaskBinding; import com.google.android.material.snackbar.Snackbar; -public class EditTask extends AppCompatActivity implements DatePickerDialog.OnDateSetListener { +public class EditTask extends AppCompatActivity implements DatePickerDialog.OnDateSetListener, TimePickerDialog.OnTimeSetListener { private static final String TAG = "EDIT_TASK"; private static final String TASK_ID_KEY = "TASK_ID"; @@ -26,6 +29,7 @@ public class EditTask extends AppCompatActivity implements DatePickerDialog.OnDa private String token; private long taskID = -1; private String taskDateString; + private String taskTimeString; @Override protected void onCreate(Bundle savedInstanceState) { @@ -41,19 +45,26 @@ public class EditTask extends AppCompatActivity implements DatePickerDialog.OnDa return; } - binding.btnDatePick.setOnClickListener(v->{ // <----- - DatePickerFragment fragment; - fragment = new DatePickerFragment(); + binding.btnDatePick.setOnClickListener(v->{ + DatePickerFragment fragment = new DatePickerFragment(); fragment.show(getSupportFragmentManager(), "DATE PICK"); }); + binding.btnTimePick.setOnClickListener(v->{ + TimePickerFragment fragment = new TimePickerFragment(); + fragment.show(getSupportFragmentManager(), "TIME PICKER"); + }); viewModel.isLoading().observe(this, new Observer() { @Override public void onChanged(Task task) { binding.TaskName.setText(task.getTaskName()); binding.TaskDescription.setText(task.getTaskDescription()); - taskDateString = task.getTaskDate(); + String dateTime = task.getTaskDate(); + String[] buf = dateTime.split(" "); + taskDateString = buf[0]; + taskTimeString = buf[1]; binding.btnDatePick.setText(taskDateString); + binding.btnTimePick.setText(taskTimeString); } }); viewModel.getClose().observe(this, new Observer() { @@ -87,7 +98,7 @@ public class EditTask extends AppCompatActivity implements DatePickerDialog.OnDa String name = binding.TaskName.getText().toString(); String description = binding.TaskDescription.getText().toString(); - Task task = new Task(taskID, name, description, taskDateString); + Task task = new Task(taskID, name, description, taskDateString + ' ' +taskTimeString); viewModel.OfflineSaveData(task); }); } @@ -97,7 +108,7 @@ public class EditTask extends AppCompatActivity implements DatePickerDialog.OnDa String name = binding.TaskName.getText().toString(); String description = binding.TaskDescription.getText().toString(); - Task task = new Task(taskID, name, description, taskDateString); + Task task = new Task(taskID, name, description, taskDateString + ' ' +taskTimeString); viewModel.OnlineSaveData(task, token); }); viewModel.getLiveDataFail().observe(this, new Observer() { @@ -125,4 +136,10 @@ public class EditTask extends AppCompatActivity implements DatePickerDialog.OnDa + Integer.toString(year); binding.btnDatePick.setText(taskDateString); } + + @Override + public void onTimeSet(TimePicker timePicker, int hour, int minute) { + taskTimeString = Integer.toString(hour) + ':' + Integer.toString(minute); + binding.btnTimePick.setText(taskTimeString); + } } \ No newline at end of file diff --git a/app/src/main/java/com/example/tasktracker/Activities/ViewModels/TimePickerFragment.java b/app/src/main/java/com/example/tasktracker/Activities/ViewModels/TimePickerFragment.java new file mode 100644 index 0000000..76023d5 --- /dev/null +++ b/app/src/main/java/com/example/tasktracker/Activities/ViewModels/TimePickerFragment.java @@ -0,0 +1,22 @@ +package com.example.tasktracker.Activities.ViewModels; + +import android.app.Dialog; +import android.app.TimePickerDialog; +import android.os.Bundle; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.DialogFragment; + +import java.util.Calendar; + +public class TimePickerFragment extends DialogFragment { + @NonNull + @Override + public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { + Calendar mCalendar = Calendar.getInstance(); + int hour = mCalendar.get(Calendar.YEAR); + int minute = mCalendar.get(Calendar.MONTH); + return new TimePickerDialog(getActivity(), (TimePickerDialog.OnTimeSetListener) getActivity(), hour, minute, true); + } +} diff --git a/app/src/main/res/layout/activity_add_new_task.xml b/app/src/main/res/layout/activity_add_new_task.xml index 98ef167..18bf51c 100644 --- a/app/src/main/res/layout/activity_add_new_task.xml +++ b/app/src/main/res/layout/activity_add_new_task.xml @@ -21,12 +21,24 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:inputType="textMultiLine"/> -