diff --git a/ToDoApp/.idea/inspectionProfiles/Project_Default.xml b/ToDoApp/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..0a87188
--- /dev/null
+++ b/ToDoApp/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/ToDoApp/app/build.gradle.kts b/ToDoApp/app/build.gradle.kts
index 49a1bf3..73c84be 100644
--- a/ToDoApp/app/build.gradle.kts
+++ b/ToDoApp/app/build.gradle.kts
@@ -29,21 +29,30 @@ android {
sourceCompatibility = JavaVersion.VERSION_1_8
targetCompatibility = JavaVersion.VERSION_1_8
}
+
+ packagingOptions {
+ exclude("META-INF/DEPENDENCIES")
+ exclude("META-INF/LICENSE")
+ exclude("META-INF/LICENSE.txt")
+ exclude("META-INF/license.txt")
+ exclude("META-INF/NOTICE")
+ exclude("META-INF/NOTICE.txt")
+ exclude("META-INF/notice.txt")
+ }
}
dependencies {
-
-
-
implementation(libs.appcompat)
implementation(libs.material)
implementation(libs.activity)
implementation(libs.constraintlayout)
+ implementation(libs.work.runtime)
testImplementation(libs.junit)
androidTestImplementation(libs.ext.junit)
androidTestImplementation(libs.espresso.core)
-
implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.6.0")
implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.0")
+ implementation("com.squareup.retrofit2:retrofit:2.9.0")
+ implementation("com.squareup.retrofit2:converter-gson:2.9.0")
+ implementation("com.squareup.okhttp3:logging-interceptor:4.9.0")
}
-
diff --git a/ToDoApp/app/src/main/AndroidManifest.xml b/ToDoApp/app/src/main/AndroidManifest.xml
index fbba558..0051ae5 100644
--- a/ToDoApp/app/src/main/AndroidManifest.xml
+++ b/ToDoApp/app/src/main/AndroidManifest.xml
@@ -2,6 +2,10 @@
+
+
+
+
0; //Usunięcie wiersza z tabeli
+ return db.delete("tasks", "task = ?", new String[]{task}) > 0;//Usunięcie wiersza z tabeli
}
public List getAllTasks() {
List tasks = new ArrayList<>();
SQLiteDatabase db = this.getReadableDatabase();
- Cursor cursor = db.rawQuery("SELECT * FROM tasks ORDER BY deadline ASC", null); //Pobranie wszystkich zadań z tabeli
+ Cursor cursor = db.rawQuery("SELECT * FROM tasks ORDER BY deadline ASC", null);//Pobranie wszystkich zadań z tabeli
if (cursor.moveToFirst()) {
do {
String task = cursor.getString(cursor.getColumnIndexOrThrow("task"));
String deadline = cursor.getString(cursor.getColumnIndexOrThrow("deadline"));
String priority = cursor.getString(cursor.getColumnIndexOrThrow("priority"));
- tasks.add(task + " (Deadline: " + deadline + ", Priority: " + priority + ")"); //Dodanie zadania do listy
+ tasks.add(task + " (Deadline: " + deadline + ", Priority: " + priority + ")");//Dodanie zadania do listy
} while (cursor.moveToNext());
}
cursor.close();
- return tasks; //Zwrócenie listy zadań
- }
-
- public void removeExpiredTasks() {
- SQLiteDatabase db = this.getWritableDatabase();
- String currentDate = new java.text.SimpleDateFormat("yyyy-MM-dd").format(new java.util.Date());
- db.delete("tasks", "deadline < ?", new String[]{currentDate}); //Usunięcie zadań z przeszłą datą
+ return tasks;//Zwrócenie listy zadań
}
}
diff --git a/ToDoApp/app/src/main/java/com/example/todoapp2/HtmlActivity.java b/ToDoApp/app/src/main/java/com/example/todoapp2/HtmlActivity.java
index 144eb84..9c52c20 100644
--- a/ToDoApp/app/src/main/java/com/example/todoapp2/HtmlActivity.java
+++ b/ToDoApp/app/src/main/java/com/example/todoapp2/HtmlActivity.java
@@ -10,11 +10,11 @@ public class HtmlActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_html); //Ustawienie widoku dla aktywności
+ setContentView(R.layout.activity_html);//Ustawienie widoku dla aktywności
- WebView webView = findViewById(R.id.web_view); //Referencja do WebView
- String htmlData = getIntent().getStringExtra("html_data"); //Pobranie danych HTML z intent
+ WebView webView = findViewById(R.id.web_view);//Referencja do WebView
+ String htmlData = getIntent().getStringExtra("html_data");//Pobranie danych HTML z intent
assert htmlData != null;
- webView.loadData(htmlData, "text/html", "UTF-8"); //Załadowanie danych HTML do WebView
+ webView.loadData(htmlData, "text/html", "UTF-8");//Załadowanie danych HTML do WebView
}
}
diff --git a/ToDoApp/app/src/main/java/com/example/todoapp2/MainActivity.java b/ToDoApp/app/src/main/java/com/example/todoapp2/MainActivity.java
index ea4412f..e7fcbfd 100644
--- a/ToDoApp/app/src/main/java/com/example/todoapp2/MainActivity.java
+++ b/ToDoApp/app/src/main/java/com/example/todoapp2/MainActivity.java
@@ -1,10 +1,10 @@
package com.example.todoapp2;
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.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
@@ -15,118 +15,145 @@ import android.widget.Toast;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.ViewModelProvider;
+import androidx.work.Data;
+import androidx.work.OneTimeWorkRequest;
+import androidx.work.WorkManager;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
import java.util.Calendar;
+import java.util.Date;
+import java.util.concurrent.TimeUnit;
public class MainActivity extends AppCompatActivity {
- private static final String TAG = "MainActivity";
- private ArrayAdapter itemsAdapter;
- private EditText deadlineInput;
- private Spinner priorityInput;
- private TaskViewModel viewModel;
+ private ArrayAdapter itemsAdapter;//Adapter do zarządzania listą zadań
+ private EditText deadlineInput;//Pole wejściowe dla daty i godziny deadline'u
+ private Spinner priorityInput;//Spinner do wyboru priorytetu zadania
+ private TaskViewModel viewModel;//ViewModel do zarządzania danymi zadań
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- EdgeToEdge.enable(this);
- setContentView(R.layout.activity_main);
+ EdgeToEdge.enable(this);//Włączenie trybu Edge-to-Edge dla lepszego UX
+ setContentView(R.layout.activity_main);//Ustawienie widoku aktywności
- viewModel = new ViewModelProvider(this).get(TaskViewModel.class); //Inicjalizacja ViewModel
+ viewModel = new ViewModelProvider(this).get(TaskViewModel.class);//Inicjalizacja ViewModel
- ListView list = findViewById(R.id.list); //Referencja do ListView
- Button button = findViewById(R.id.button); //Referencja do przycisku dodawania zadań
- Button buttonViewHtml = findViewById(R.id.button_view_html); //Referencja do przycisku wyświetlania zadań w HTML
- deadlineInput = findViewById(R.id.edit_deadline); //Referencja do pola wyboru terminu
- priorityInput = findViewById(R.id.edit_priority); //Referencja do spinnera wyboru priorytetu
+ ListView list = findViewById(R.id.list);//Inicjalizacja listy zadań
+ Button button = findViewById(R.id.button);//Inicjalizacja przycisku dodawania zadań
+ Button buttonViewHtml = findViewById(R.id.button_view_html);//Inicjalizacja przycisku widoku HTML
+ deadlineInput = findViewById(R.id.edit_deadline);//Inicjalizacja pola wejściowego deadline'u
+ priorityInput = findViewById(R.id.edit_priority);//Inicjalizacja spinnera priorytetu
- itemsAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1); //Inicjalizacja adaptera dla ListView
- list.setAdapter(itemsAdapter); //Ustawienie adaptera na ListView
+ itemsAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1);//Konfiguracja adaptera dla listy zadań
+ list.setAdapter(itemsAdapter);//Ustawienie adaptera dla listy
- //Obserwacja zmian w LiveData
- viewModel.getTasks().observe(this, tasks -> {
- Log.d(TAG, "Tasks updated: " + tasks); //Logowanie zmian
- itemsAdapter.clear(); //Czyszczenie adaptera
- itemsAdapter.addAll(tasks); //Dodanie nowych danych do adaptera
- itemsAdapter.notifyDataSetChanged(); //Powiadomienie adaptera o zmianach
+ viewModel.getTasks().observe(this, tasks -> {//Obserwacja zmian w liście zadań
+ itemsAdapter.clear();//Wyczyszczenie adaptera
+ itemsAdapter.addAll(tasks);//Dodanie nowych zadań do adaptera
+ itemsAdapter.notifyDataSetChanged();//Powiadomienie adaptera o zmianach
});
- //Listener dla pola wyboru terminu
- deadlineInput.setOnClickListener(v -> {
- showDatePickerDialog(); //Wyświetlenie DatePickerDialog
+ deadlineInput.setOnClickListener(v -> showDatePickerDialog());//Ustawienie kliknięcia w pole deadline, aby wyświetlić DatePickerDialog
+
+ button.setOnClickListener(view -> addItem());//Ustawienie kliknięcia w przycisk dodawania zadania
+
+ buttonViewHtml.setOnClickListener(v -> viewTasksInHtml());//Ustawienie kliknięcia w przycisk widoku HTML
+
+ list.setOnItemLongClickListener((parent, view, position, id) -> {//Ustawienie długiego kliknięcia na element listy, aby usunąć zadanie
+ remove(position);
+ return true;
});
- //Listener dla przycisku dodawania zadań
- button.setOnClickListener(view -> {
- Log.d(TAG, "Add button clicked"); //Logowanie kliknięcia przycisku
- addItem(); //Dodanie nowego zadania
- });
-
- //Listener dla przycisku wyświetlania zadań w HTML
- buttonViewHtml.setOnClickListener(v -> {
- viewTasksInHtml(); //Wyświetlenie zadań w HTML
- });
-
- //Listener dla długiego kliknięcia na element ListView
- list.setOnItemLongClickListener((parent, view, position, id) -> {
- return remove(position); //Usunięcie zadania
- });
-
- ArrayAdapter adapter = ArrayAdapter.createFromResource(this, //Inicjalizacja adaptera dla spinnera
+ ArrayAdapter adapter = ArrayAdapter.createFromResource(this,//Ustawienie adaptera dla priorytetów
R.array.priority_levels, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
- priorityInput.setAdapter(adapter); //Ustawienie adaptera na spinner
+ priorityInput.setAdapter(adapter);
}
- private void showDatePickerDialog() { //Metoda wyświetlająca DatePickerDialog
+ private void showDatePickerDialog() {
final Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH);
int day = calendar.get(Calendar.DAY_OF_MONTH);
+ int hour = calendar.get(Calendar.HOUR_OF_DAY);
+ int minute = calendar.get(Calendar.MINUTE);
- //Listener dla wyboru daty
- DatePickerDialog datePickerDialog = new DatePickerDialog(this, (view, year1, month1, dayOfMonth) -> {
- String date = year1 + "-" + (month1 + 1) + "-" + dayOfMonth;
- deadlineInput.setText(date); //Ustawienie wybranej daty w polu tekstowym
+ DatePickerDialog datePickerDialog = new DatePickerDialog(this, (view, year1, month1, dayOfMonth) -> {//Tworzenie DatePickerDialog do wyboru daty
+ TimePickerDialog timePickerDialog = new TimePickerDialog(this, (timeView, hourOfDay, minuteOfHour) -> {//Tworzenie TimePickerDialog do wyboru godziny po wybraniu daty
+ String date = year1 + "-" + (month1 + 1) + "-" + dayOfMonth + " " + hourOfDay + ":" + minuteOfHour + ":00";
+ deadlineInput.setText(date);//Ustawienie wybranej daty i godziny w polu deadline
+ }, hour, minute, true);
+ timePickerDialog.show();
}, year, month, day);
- datePickerDialog.show(); //Wyświetlenie DatePickerDialog
+ datePickerDialog.show();
}
- private boolean remove(int position) { //Metoda usuwająca zadanie
+ private void remove(int position) {
Context context = getApplicationContext();
- String item = itemsAdapter.getItem(position); //Pobranie elementu z adaptera
+ String item = itemsAdapter.getItem(position);
assert item != null;
String task = item.split(" \\(Deadline:")[0];
- if (viewModel.removeTask(task)) { //Usunięcie zadania z ViewModel
- Toast.makeText(context, "Item removed", Toast.LENGTH_LONG).show(); //Wyświetlenie Toast z komunikatem
- return true;
+ if (viewModel.removeTask(task)) {//Usunięcie zadania z ViewModel
+ Toast.makeText(context, "Item removed", Toast.LENGTH_LONG).show();//Wyświetlenie komunikatu o usunięciu zadania
} else {
- Toast.makeText(context, "Error removing item", Toast.LENGTH_LONG).show(); //Wyświetlenie Toast z błędem
- return false;
+ Toast.makeText(context, "Error removing item", Toast.LENGTH_LONG).show();//Wyświetlenie komunikatu o błędzie usuwania zadania
}
}
- private void addItem() { //Metoda dodająca nowe zadanie
+ private void addItem() {
EditText taskInput = findViewById(R.id.edit_text);
String taskText = taskInput.getText().toString();
String deadlineText = deadlineInput.getText().toString();
String priorityText = priorityInput.getSelectedItem().toString();
- Log.d(TAG, "Task: " + taskText + ", Deadline: " + deadlineText + ", Priority: " + priorityText);
-
- if (!(taskText.isEmpty() || deadlineText.isEmpty() || priorityText.isEmpty())) { //Sprawdzenie czy pola nie są puste
- if (viewModel.addTask(taskText, deadlineText, priorityText)) { //Dodanie zadania do ViewModel
- taskInput.setText(""); //Wyczyszczenie pola tekstowego
- deadlineInput.setText(""); //Wyczyszczenie pola daty
- priorityInput.setSelection(0); //Resetowanie spinnera
+ if (!(taskText.isEmpty() || deadlineText.isEmpty() || priorityText.isEmpty())) {
+ if (viewModel.addTask(taskText, deadlineText, priorityText)) {//Dodanie zadania do ViewModel
+ taskInput.setText("");//Wyczyszczenie pola tekstowego zadania
+ deadlineInput.setText("");//Wyczyszczenie pola tekstowego deadline'u
+ priorityInput.setSelection(0);//Resetowanie wyboru priorytetu
+ sendSMSReminder(taskText, deadlineText);//Wysłanie przypomnienia SMS o nowym zadaniu
+ scheduleDeadlineReminder(taskText, deadlineText);//Zaprogramowanie przypomnienia SMS na 5 minut przed deadlinem
} else {
- Toast.makeText(getApplicationContext(), "Error adding task", Toast.LENGTH_LONG).show(); //Wyświetlenie Toast z błędem
+ Toast.makeText(getApplicationContext(), "Error adding task", Toast.LENGTH_LONG).show();//Wyświetlenie komunikatu o błędzie dodawania zadania
}
} else {
- Toast.makeText(getApplicationContext(), "Please enter all fields", Toast.LENGTH_LONG).show(); //Wyświetlenie Toast z komunikatem o wypełnieniu wszystkich pól
+ Toast.makeText(getApplicationContext(), "Please enter all fields", Toast.LENGTH_LONG).show();//Wyświetlenie komunikatu o konieczności wypełnienia wszystkich pól
}
}
- private void viewTasksInHtml() { //Metoda wyświetlająca zadania w HTML
+ private void sendSMSReminder(String task, String deadline) {
+ String phoneNumber = "502836547";//Zamień na numer telefonu, na który ma być wysłany SMS
+ String message = "New task added: " + task + ", Deadline: " + deadline;
+ SmsApiClient.sendSms(phoneNumber, message);//Wysłanie SMS za pomocą SmsApiClient
+ }
+
+ private void scheduleDeadlineReminder(String task, String deadline) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ try {
+ Date deadlineDate = dateFormat.parse(deadline);
+ if (deadlineDate != null) {
+ long timeDiff = deadlineDate.getTime() - System.currentTimeMillis() - TimeUnit.MINUTES.toMillis(5);//5 minut przed deadline
+ if (timeDiff > 0) {
+ Data data = new Data.Builder()
+ .putString("task", task)
+ .putString("phoneNumber", "502836547")//Zamień na numer telefonu
+ .build();
+
+ OneTimeWorkRequest workRequest = new OneTimeWorkRequest.Builder(ReminderWorker.class)
+ .setInitialDelay(timeDiff, TimeUnit.MILLISECONDS)//Ustawienie opóźnienia na 5 minut przed deadline
+ .setInputData(data)//Przekazanie danych do ReminderWorker
+ .build();
+
+ WorkManager.getInstance(this).enqueue(workRequest);//Dodanie zadania do WorkManager
+ }
+ }
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+ }
+
+ private void viewTasksInHtml() {
StringBuilder htmlBuilder = new StringBuilder();
htmlBuilder.append("
Task List
Task
Deadline
Priority
");
for (int i = 0; i < itemsAdapter.getCount(); i++) {
@@ -140,8 +167,9 @@ public class MainActivity extends AppCompatActivity {
}
htmlBuilder.append("
");
- Intent intent = new Intent(MainActivity.this, HtmlActivity.class);
- intent.putExtra("html_data", htmlBuilder.toString()); //Przekazanie danych HTML do nowej aktywności
- startActivity(intent); //Rozpoczęcie nowej aktywności
+ //Przekazanie danych HTML do HtmlActivity za pomocą Intent
+ Intent intent = new Intent(this, HtmlActivity.class);
+ intent.putExtra("html_data", htmlBuilder.toString());
+ startActivity(intent);
}
}
diff --git a/ToDoApp/app/src/main/java/com/example/todoapp2/ReminderWorker.java b/ToDoApp/app/src/main/java/com/example/todoapp2/ReminderWorker.java
new file mode 100644
index 0000000..5f19f09
--- /dev/null
+++ b/ToDoApp/app/src/main/java/com/example/todoapp2/ReminderWorker.java
@@ -0,0 +1,29 @@
+package com.example.todoapp2;
+
+import android.content.Context;
+
+import androidx.annotation.NonNull;
+import androidx.work.Worker;
+import androidx.work.WorkerParameters;
+
+public class ReminderWorker extends Worker {
+
+ public ReminderWorker(@NonNull Context context, @NonNull WorkerParameters params) {
+ super(context, params);
+ }
+
+ @NonNull
+ @Override
+ public Result doWork() {
+ //Pobranie danych przekazanych do Workera
+ String task = getInputData().getString("task");
+ String phoneNumber = getInputData().getString("phoneNumber");
+
+ //Wysłanie przypomnienia SMS
+ if (task != null && phoneNumber != null) {
+ SmsApiClient.sendSms(phoneNumber, "Deadline zadania \"" + task + "\" jest dzisiaj!");
+ }
+
+ return Result.success(); //Zwrócenie sukcesu po wykonaniu pracy
+ }
+}
diff --git a/ToDoApp/app/src/main/java/com/example/todoapp2/SmsApiClient.java b/ToDoApp/app/src/main/java/com/example/todoapp2/SmsApiClient.java
new file mode 100644
index 0000000..cf485e4
--- /dev/null
+++ b/ToDoApp/app/src/main/java/com/example/todoapp2/SmsApiClient.java
@@ -0,0 +1,58 @@
+package com.example.todoapp2;
+
+import androidx.annotation.NonNull;
+
+import retrofit2.Call;
+import retrofit2.Retrofit;
+import retrofit2.converter.gson.GsonConverterFactory;
+import retrofit2.http.Field;
+import retrofit2.http.FormUrlEncoded;
+import retrofit2.http.Header;
+import retrofit2.http.POST;
+
+public class SmsApiClient {
+ private static final String BASE_URL = "https://api.smsapi.pl/";
+ private static final String TOKEN = "Bearer s1lgvSn5RdZNATyFq1LcPhGlqC13oeTU9fcXd5Ar";
+
+ public interface SmsApiService {
+ @FormUrlEncoded
+ @POST("sms.do")
+ Call sendSms(
+ @Header("Authorization") String authorization,
+ @Field("to") String to,
+ @Field("message") String message,
+ @Field("format") String format
+ );
+ }
+
+ private static SmsApiService smsApiService;
+
+ //Singleton pattern do uzyskania instancji SmsApiService
+ public static SmsApiService getInstance() {
+ if (smsApiService == null) {
+ Retrofit retrofit = new Retrofit.Builder()
+ .baseUrl(BASE_URL)
+ .addConverterFactory(GsonConverterFactory.create())
+ .build();
+ smsApiService = retrofit.create(SmsApiService.class);
+ }
+ return smsApiService;
+ }
+
+ //Metoda do wysyłania SMS za pomocą SmsApiService
+ public static void sendSms(String to, String message) {
+ SmsApiService service = getInstance();
+ service.sendSms(TOKEN, to, message, "json")
+ .enqueue(new retrofit2.Callback() {
+ @Override
+ public void onResponse(@NonNull Call call, @NonNull retrofit2.Response response) {
+ //SMS sent successfully
+ }
+
+ @Override
+ public void onFailure(@NonNull Call call, @NonNull Throwable t) {
+ //Failed to send SMS
+ }
+ });
+ }
+}
diff --git a/ToDoApp/app/src/main/java/com/example/todoapp2/TaskViewModel.java b/ToDoApp/app/src/main/java/com/example/todoapp2/TaskViewModel.java
index 45f7b0d..2c80729 100644
--- a/ToDoApp/app/src/main/java/com/example/todoapp2/TaskViewModel.java
+++ b/ToDoApp/app/src/main/java/com/example/todoapp2/TaskViewModel.java
@@ -14,39 +14,32 @@ public class TaskViewModel extends AndroidViewModel {
public TaskViewModel(@NonNull Application application) {
super(application);
- db = new DatabaseHelper(application); //Inicjalizacja bazy danych
+ db = new DatabaseHelper(application); // Inicjalizacja bazy danych
tasks = new MutableLiveData<>();
- removeExpiredTasks(); //Usuwanie przeterminowanych zadań
- loadTasks(); //Załadowanie zadań z bazy danych
+ loadTasks(); // Załadowanie zadań z bazy danych
}
private void loadTasks() {
- tasks.postValue(db.getAllTasks()); //Ustawienie wartości LiveData na podstawie danych z bazy
+ tasks.postValue(db.getAllTasks()); // Ustawienie wartości LiveData na podstawie danych z bazy
}
public LiveData> getTasks() {
- return tasks; //Zwrócenie LiveData z zadaniami
+ return tasks; // Zwrócenie LiveData z zadaniami
}
public boolean addTask(String task, String deadline, String priority) {
- boolean result = db.addTask(task, deadline, priority); //Dodanie zadania do bazy danych
+ boolean result = db.addTask(task, deadline, priority); // Dodanie zadania do bazy danych
if (result) {
- removeExpiredTasks(); //Usuwanie przeterminowanych zadań
- loadTasks(); //Załadowanie zadań po dodaniu nowego
+ loadTasks(); // Załadowanie zadań po dodaniu nowego
}
return result;
}
public boolean removeTask(String task) {
- boolean result = db.removeTask(task); //Usunięcie zadania z bazy danych
+ boolean result = db.removeTask(task); // Usunięcie zadania z bazy danych
if (result) {
- removeExpiredTasks(); //Usuwanie przeterminowanych zadań
- loadTasks(); //Załadowanie zadań po usunięciu
+ loadTasks(); // Załadowanie zadań po usunięciu
}
return result;
}
-
- private void removeExpiredTasks() {
- db.removeExpiredTasks(); //Usunięcie przeterminowanych zadań z bazy danych
- }
}
diff --git a/ToDoApp/app/src/main/res/layout/activity_main.xml b/ToDoApp/app/src/main/res/layout/activity_main.xml
index 7d1558a..5012aaa 100644
--- a/ToDoApp/app/src/main/res/layout/activity_main.xml
+++ b/ToDoApp/app/src/main/res/layout/activity_main.xml
@@ -67,21 +67,21 @@
android:hint="Enter Task"/>
-
-
+
+
+ AC55868eabe6daa1aabfe8805d8e04dc5b
+ 7d117e67f36da055f2f424645ae8bdcd
+ +17752640737
+
\ No newline at end of file
diff --git a/ToDoApp/gradle/libs.versions.toml b/ToDoApp/gradle/libs.versions.toml
index 3a6590b..b73e362 100644
--- a/ToDoApp/gradle/libs.versions.toml
+++ b/ToDoApp/gradle/libs.versions.toml
@@ -7,6 +7,7 @@ appcompat = "1.7.0"
material = "1.12.0"
activity = "1.9.0"
constraintlayout = "2.1.4"
+workRuntime = "2.9.0"
[libraries]
@@ -17,6 +18,7 @@ appcompat = { group = "androidx.appcompat", name = "appcompat", version.ref = "a
material = { group = "com.google.android.material", name = "material", version.ref = "material" }
activity = { group = "androidx.activity", name = "activity", version.ref = "activity" }
constraintlayout = { group = "androidx.constraintlayout", name = "constraintlayout", version.ref = "constraintlayout" }
+work-runtime = { group = "androidx.work", name = "work-runtime", version.ref = "workRuntime" }
[plugins]
android-application = { id = "com.android.application", version.ref = "agp" }