This commit is contained in:
Данил
2025-05-14 18:05:59 +07:00
parent 9259aaab19
commit 78d741935b
8 changed files with 118 additions and 27 deletions
@@ -1,17 +1,20 @@
package com.example.tasktracker.Activities; package com.example.tasktracker.Activities;
import android.app.DatePickerDialog; import android.app.DatePickerDialog;
import android.app.TimePickerDialog;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log; import android.util.Log;
import android.widget.DatePicker; import android.widget.DatePicker;
import android.widget.TimePicker;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.Observer; import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProvider; import androidx.lifecycle.ViewModelProvider;
import com.example.tasktracker.Activities.ViewModels.AddItemViewModel; import com.example.tasktracker.Activities.ViewModels.AddItemViewModel;
import com.example.tasktracker.Activities.ViewModels.TimePickerFragment;
import com.example.tasktracker.Answers.Task; import com.example.tasktracker.Answers.Task;
import com.example.tasktracker.PublicKeyNames; import com.example.tasktracker.PublicKeyNames;
import com.example.tasktracker.R; import com.example.tasktracker.R;
@@ -20,13 +23,14 @@ import com.google.android.material.snackbar.Snackbar;
import java.util.Random; 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 static final String TAG = "ADD_NEW_TASK";
private ActivityAddNewTaskBinding binding; private ActivityAddNewTaskBinding binding;
private static String token; private static String token;
private AddItemViewModel viewModel; private AddItemViewModel viewModel;
private String stringDate = ""; private String stringDate = "";
private String stringTime = "";
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
@@ -41,12 +45,14 @@ public class AddNewTask extends AppCompatActivity implements DatePickerDialog.On
return; return;
} }
binding.btnDatePick.setOnClickListener(v->{ binding.btnDatePick.setOnClickListener(v->{
DatePickerFragment fragment; DatePickerFragment fragment = new DatePickerFragment();
fragment = new DatePickerFragment();
fragment.show(getSupportFragmentManager(), "DATE PICK"); 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 = new ViewModelProvider(this).get(AddItemViewModel.class);
viewModel.getClose().observe(this, new Observer<Boolean>() { viewModel.getClose().observe(this, new Observer<Boolean>() {
@@ -80,9 +86,15 @@ public class AddNewTask extends AppCompatActivity implements DatePickerDialog.On
Snackbar.make(binding.getRoot(), R.string.snackbar_EnterDate, Snackbar.LENGTH_SHORT).show(); Snackbar.make(binding.getRoot(), R.string.snackbar_EnterDate, Snackbar.LENGTH_SHORT).show();
return; return;
} }
if(stringTime.isEmpty()) {
Snackbar.make(binding.getRoot(), R.string.snackbar_EnterDate, Snackbar.LENGTH_SHORT).show();
return;
}
long ID = generateID(name, description, stringDate); String dateTime = stringDate + ' ' + stringTime;
Task task = new Task(ID, name, description, stringDate);
long ID = generateID(name, description, dateTime);
Task task = new Task(ID, name, description, dateTime);
viewModel.OfflineSaveData(task); viewModel.OfflineSaveData(task);
}); });
} }
@@ -98,19 +110,25 @@ public class AddNewTask extends AppCompatActivity implements DatePickerDialog.On
binding.AddTask.setOnClickListener(v->{ binding.AddTask.setOnClickListener(v->{
String name = binding.TaskName.getText().toString(); String name = binding.TaskName.getText().toString();
String description = binding.TaskDescription.getText().toString(); String description = binding.TaskDescription.getText().toString();
String date = binding.btnDatePick.getText().toString();
if(name.isEmpty()) { if(name.isEmpty()) {
Snackbar.make(binding.getRoot(), R.string.snackbar_EnterName, Snackbar.LENGTH_SHORT).show(); Snackbar.make(binding.getRoot(), R.string.snackbar_EnterName, Snackbar.LENGTH_SHORT).show();
return; 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(); Snackbar.make(binding.getRoot(), R.string.snackbar_EnterDate, Snackbar.LENGTH_SHORT).show();
return; return;
} }
long ID = generateID(name, description, date); String dateTime = stringDate + ' ' + stringTime;
Task task = new Task(ID, name, description, date);
long ID = generateID(name, description, dateTime);
Task task = new Task(ID, name, description, dateTime);
viewModel.OnlineSaveData(task, token); viewModel.OnlineSaveData(task, token);
}); });
} }
@@ -140,4 +158,10 @@ public class AddNewTask extends AppCompatActivity implements DatePickerDialog.On
+ Integer.toString(year); + Integer.toString(year);
binding.btnDatePick.setText(stringDate); 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);
}
} }
@@ -1,23 +1,26 @@
package com.example.tasktracker.Activities; package com.example.tasktracker.Activities;
import android.app.DatePickerDialog; import android.app.DatePickerDialog;
import android.app.TimePickerDialog;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log; import android.util.Log;
import android.widget.DatePicker; import android.widget.DatePicker;
import android.widget.TimePicker;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.Observer; import androidx.lifecycle.Observer;
import com.example.tasktracker.Activities.ViewModels.EditTaskViewModel; import com.example.tasktracker.Activities.ViewModels.EditTaskViewModel;
import com.example.tasktracker.Activities.ViewModels.TimePickerFragment;
import com.example.tasktracker.Answers.Task; import com.example.tasktracker.Answers.Task;
import com.example.tasktracker.PublicKeyNames; import com.example.tasktracker.PublicKeyNames;
import com.example.tasktracker.R; import com.example.tasktracker.R;
import com.example.tasktracker.databinding.ActivityEditTaskBinding; import com.example.tasktracker.databinding.ActivityEditTaskBinding;
import com.google.android.material.snackbar.Snackbar; 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 TAG = "EDIT_TASK";
private static final String TASK_ID_KEY = "TASK_ID"; 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 String token;
private long taskID = -1; private long taskID = -1;
private String taskDateString; private String taskDateString;
private String taskTimeString;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
@@ -41,19 +45,26 @@ public class EditTask extends AppCompatActivity implements DatePickerDialog.OnDa
return; return;
} }
binding.btnDatePick.setOnClickListener(v->{ // <----- binding.btnDatePick.setOnClickListener(v->{
DatePickerFragment fragment; DatePickerFragment fragment = new DatePickerFragment();
fragment = new DatePickerFragment();
fragment.show(getSupportFragmentManager(), "DATE PICK"); fragment.show(getSupportFragmentManager(), "DATE PICK");
}); });
binding.btnTimePick.setOnClickListener(v->{
TimePickerFragment fragment = new TimePickerFragment();
fragment.show(getSupportFragmentManager(), "TIME PICKER");
});
viewModel.isLoading().observe(this, new Observer<Task>() { viewModel.isLoading().observe(this, new Observer<Task>() {
@Override @Override
public void onChanged(Task task) { public void onChanged(Task task) {
binding.TaskName.setText(task.getTaskName()); binding.TaskName.setText(task.getTaskName());
binding.TaskDescription.setText(task.getTaskDescription()); 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.btnDatePick.setText(taskDateString);
binding.btnTimePick.setText(taskTimeString);
} }
}); });
viewModel.getClose().observe(this, new Observer<Boolean>() { viewModel.getClose().observe(this, new Observer<Boolean>() {
@@ -87,7 +98,7 @@ public class EditTask extends AppCompatActivity implements DatePickerDialog.OnDa
String name = binding.TaskName.getText().toString(); String name = binding.TaskName.getText().toString();
String description = binding.TaskDescription.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); viewModel.OfflineSaveData(task);
}); });
} }
@@ -97,7 +108,7 @@ public class EditTask extends AppCompatActivity implements DatePickerDialog.OnDa
String name = binding.TaskName.getText().toString(); String name = binding.TaskName.getText().toString();
String description = binding.TaskDescription.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.OnlineSaveData(task, token);
}); });
viewModel.getLiveDataFail().observe(this, new Observer<String>() { viewModel.getLiveDataFail().observe(this, new Observer<String>() {
@@ -125,4 +136,10 @@ public class EditTask extends AppCompatActivity implements DatePickerDialog.OnDa
+ Integer.toString(year); + Integer.toString(year);
binding.btnDatePick.setText(taskDateString); 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);
}
} }
@@ -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);
}
}
@@ -21,12 +21,24 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:inputType="textMultiLine"/> android:inputType="textMultiLine"/>
<Button <LinearLayout
android:id="@+id/btnDatePick" android:layout_width="match_parent"
android:text="@string/button_DefaultData"
android:layout_width="200sp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="5sp"/> android:orientation="horizontal"
android:layout_margin="5sp">
<Button
android:id="@+id/btnDatePick"
android:text="@string/button_DefaultData"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<Button
android:id="@+id/btnTimePick"
android:text="@string/button_DefaultTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"/>
</LinearLayout>
<Button <Button
android:id="@+id/AddTask" android:id="@+id/AddTask"
android:text="@string/button_AddTask" android:text="@string/button_AddTask"
+17 -5
View File
@@ -21,12 +21,24 @@
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:inputType="textMultiLine"/> android:inputType="textMultiLine"/>
<Button <LinearLayout
android:id="@+id/btnDatePick" android:layout_width="match_parent"
android:text="@string/button_DefaultData"
android:layout_width="200sp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_margin="5sp"/> android:orientation="horizontal"
android:layout_margin="5sp">
<Button
android:id="@+id/btnDatePick"
android:text="@string/button_DefaultData"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<Button
android:id="@+id/btnTimePick"
android:text="@string/button_DefaultTime"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="1"/>
</LinearLayout>
<Button <Button
android:id="@+id/btnEditTask" android:id="@+id/btnEditTask"
android:text="@string/button_editTask" android:text="@string/button_editTask"
+1
View File
@@ -21,6 +21,7 @@
<string name="snackebar_FailUpdateTaskList">Fail update task list!</string> <string name="snackebar_FailUpdateTaskList">Fail update task list!</string>
<string name="snackbar_EnterName">Enter task name</string> <string name="snackbar_EnterName">Enter task name</string>
<string name="snackbar_EnterDate">Enter task date</string> <string name="snackbar_EnterDate">Enter task date</string>
<string name="snackbar_EnterTime">Enter time</string>
<string name="snackbar_DataBaseError">Something went wrong.</string> <string name="snackbar_DataBaseError">Something went wrong.</string>
<string name="button_editTask">Edit task</string> <string name="button_editTask">Edit task</string>
<string name="button_YES">Yes</string> <string name="button_YES">Yes</string>
+1
View File
@@ -21,6 +21,7 @@
<string name="snackebar_FailUpdateTaskList">Неудалось обновить список задач!</string> <string name="snackebar_FailUpdateTaskList">Неудалось обновить список задач!</string>
<string name="snackbar_EnterName">Введите назвние</string> <string name="snackbar_EnterName">Введите назвние</string>
<string name="snackbar_EnterDate">Введите дату</string> <string name="snackbar_EnterDate">Введите дату</string>
<string name="snackbar_EnterTime">Введите время</string>
<string name="snackbar_DataBaseError">Что-то пошло не так</string> <string name="snackbar_DataBaseError">Что-то пошло не так</string>
<string name="button_editTask">Редакировать</string> <string name="button_editTask">Редакировать</string>
<string name="button_YES">Да</string> <string name="button_YES">Да</string>
+2
View File
@@ -11,6 +11,7 @@
<string name="button_YES">Yes</string> <string name="button_YES">Yes</string>
<string name="button_NO">No</string> <string name="button_NO">No</string>
<string name="button_DefaultData" translatable="false">DD/MM/YEAR</string> <string name="button_DefaultData" translatable="false">DD/MM/YEAR</string>
<string name="button_DefaultTime" translatable="false">HH/MM</string>
<!-- Hints --> <!-- Hints -->
<string name="hint_Login">Login</string> <string name="hint_Login">Login</string>
@@ -33,6 +34,7 @@
<string name="snackebar_FailUpdateTaskList">Fail update task list!</string> <string name="snackebar_FailUpdateTaskList">Fail update task list!</string>
<string name="snackbar_EnterName">Enter task name</string> <string name="snackbar_EnterName">Enter task name</string>
<string name="snackbar_EnterDate">Enter task date</string> <string name="snackbar_EnterDate">Enter task date</string>
<string name="snackbar_EnterTime">Enter time</string>
<string name="snackbar_DataBaseError">Something went wrong.</string> <string name="snackbar_DataBaseError">Something went wrong.</string>
</resources> </resources>